diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9f51cea0859..53ea38edf7a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,6 +2,18 @@ name: Bug report description: Create a report to help us improve (search for duplicates first) labels: bug body: + - type: checkboxes + attributes: + label: Issue tracker rule checks (please read carefully) + options: + - label: "I have checked that my problem is not already reported" + required: true + - label: "I have checked that my problem is not covered on Knowledge Base or on MCreator's Wiki" + required: true + - label: "I have made sure this bug is not plugin-related (tested with MCreator without plugins installed)" + required: true + - label: "I have checked that my written content does not violate the publishing guidelines" + required: true - type: textarea attributes: label: Issue description @@ -61,13 +73,3 @@ body: placeholder: https://gist.github.com/... validations: required: false - - type: checkboxes - attributes: - label: Issue tracker rule checks (please read carefully) - options: - - label: "I have checked that my problem is not already reported" - required: true - - label: "I have checked that my problem is not covered on Knowledge Base or on MCreator's Wiki" - required: true - - label: "I have checked that my written content does not violate the publishing guidelines" - required: true diff --git a/.github/no-response.yml b/.github/no-response.yml deleted file mode 100644 index 751043d18cd..00000000000 --- a/.github/no-response.yml +++ /dev/null @@ -1,13 +0,0 @@ -# Configuration for probot-no-response - https://github.com/probot/no-response - -# Number of days of inactivity before an Issue is closed for lack of response -daysUntilClose: 14 -# Label requiring a response -responseRequiredLabel: "more information needed" -# Comment to post when closing an Issue for lack of response. Set to `false` to disable -closeComment: > - This issue has been automatically closed because there has been no response - to our request for more information from the original author. With only the - information that is currently in the issue, we don't have enough information - to take action. Please reach out if you have or find the answers we need so - that we can investigate further. diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 5d071d1e60c..00000000000 --- a/.github/stale.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Configuration for probot-stale - https://github.com/probot/stale - -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 14 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 3 - -# Issues with these labels will never be considered stale -exemptLabels: - - official - - on hold - -# Label to use when marking an issue as stale -staleLabel: stale -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. - Thank you for your contributions. - - Do not remove this label manually, it should be removed by the bot when - new activity occurs. - -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false - -limitPerRun: 30 diff --git a/.github/workflows/crowdin-pull.yml b/.github/workflows/crowdin-pull.yml index 2461b97d684..001b5294058 100644 --- a/.github/workflows/crowdin-pull.yml +++ b/.github/workflows/crowdin-pull.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: crowdin/github-action@v1 + - uses: crowdin/github-action@cb33a030bb1675169b76617d5805242aeea6eaec name: Pull Crowdin translations env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/crowdin-push.yml b/.github/workflows/crowdin-push.yml index 15af32bc4d4..734c9f9094e 100644 --- a/.github/workflows/crowdin-push.yml +++ b/.github/workflows/crowdin-push.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: crowdin/github-action@v1 + - uses: crowdin/github-action@cb33a030bb1675169b76617d5805242aeea6eaec name: Push sources to Crowdin env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 199a61103f3..90e65251fa3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -12,6 +12,7 @@ jobs: export1: name: Build and Export (all but MacOS) runs-on: ubuntu-latest + environment: production outputs: mcr_version: ${{ steps.determineExportVersion.outputs.mcr_version }} mc_version: ${{ steps.determineExportVersion.outputs.mc_version }} @@ -30,8 +31,8 @@ jobs: - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '17.0.8+7' - distribution: 'adopt' + java-version: '17.0.9+9' + distribution: 'temurin' - name: Install Dependencies run: | sudo apt-get install -y mkisofs nsis nsis-pluginapi @@ -79,13 +80,14 @@ jobs: name: Build and Export (only MacOS) needs: export1 runs-on: macos-latest + environment: production steps: - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '17.0.8+7' - distribution: 'adopt' + java-version: '17.0.9+9' + distribution: 'temurin' - name: Install Dependencies run: | brew install create-dmg diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 2298eb08cfd..f879e297f63 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -14,8 +14,8 @@ jobs: - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '17.0.8+7' - distribution: 'adopt' + java-version: '17.0.9+9' + distribution: 'temurin' - name: Generate Javadoc run: ./gradlew javadoc - name: Deploy Javadoc diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 00000000000..322b7e100a8 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,37 @@ +permissions: + issues: write + pull-requests: write + +name: 'Handle stale issues and PRs' +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v8 + with: + stale-issue-message: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. + Thank you for your contributions. + + + Do not remove this label manually, it should be removed by the bot when + new activity occurs. + stale-pr-message: > + This PR has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. + Thank you for your contributions. + + + Do not remove this label manually, it should be removed by the bot when + new activity occurs. + days-before-stale: 14 + days-before-close: 3 + stale-issue-label: stale + stale-pr-label: stale + exempt-issue-labels: official, on hold + exempt-pr-labels: official, on hold diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 62799cbbaf6..7f9b2bd3d9f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,8 +22,8 @@ jobs: - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '17.0.8+7' - distribution: 'adopt' + java-version: '17.0.9+9' + distribution: 'temurin' - name: Cache Gradle Packages uses: actions/cache@v3 with: diff --git a/.idea/runConfigurations/MCreator__macOS_UI_Thread_model_.xml b/.idea/runConfigurations/MCreator__macOS_UI_Thread_model_.xml deleted file mode 100644 index eeda02c4233..00000000000 --- a/.idea/runConfigurations/MCreator__macOS_UI_Thread_model_.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle index a5eee87b6b3..405be438edf 100644 --- a/build.gradle +++ b/build.gradle @@ -92,7 +92,7 @@ dependencies { implementation fileTree(dir: 'lib', include: ['*.jar']) // from maven - implementation group: 'commons-io', name: 'commons-io', version: '2.15.0' + implementation group: 'commons-io', name: 'commons-io', version: '2.15.1' implementation group: 'org.freemarker', name: 'freemarker', version: '2.3.32' implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1' implementation group: 'com.github.sps.junidecode', name: 'junidecode', version: '0.3' @@ -100,13 +100,13 @@ dependencies { implementation group: 'org.jboss.forge.roaster', name: 'roaster-jdt', version: '2.29.0.Final' implementation group: 'org.snakeyaml', name: 'snakeyaml-engine', version: '2.7' implementation group: 'org.reflections', name: 'reflections', version: '0.10.2' - implementation group: 'com.google.guava', name: 'guava', version: '32.1.2-jre' + implementation group: 'com.google.guava', name: 'guava', version: '33.0.0-jre' implementation group: 'de.javagl', name: 'obj', version: '0.4.0' implementation group: 'com.univocity', name: 'univocity-parsers', version: '2.9.1' - implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.21.1' - implementation group: 'org.apache.commons', name: 'commons-text', version: '1.10.0' - implementation group: 'org.slf4j', name: 'slf4j-nop', version: '2.0.9' - implementation group: 'org.gradle', name: 'gradle-tooling-api', version: '8.4' + implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.22.0' + implementation group: 'org.apache.commons', name: 'commons-text', version: '1.11.0' + implementation group: 'org.slf4j', name: 'slf4j-nop', version: '2.0.10' + implementation group: 'org.gradle', name: 'gradle-tooling-api', version: '8.5' implementation group: 'net.java.balloontip', name: 'balloontip', version: '1.2.4.1' implementation group: 'com.atlassian.commonmark', name: 'commonmark', version: '0.17.0' implementation group: 'com.atlassian.commonmark', name: 'commonmark-ext-autolink', version: '0.17.0' @@ -116,11 +116,11 @@ dependencies { implementation(group: 'com.fifesoft', name: 'languagesupport', version: '3.3.0') { dep -> dep.exclude group: 'org.mozilla', module: 'rhino' } - implementation group: 'net.java.dev.jna', name: 'jna', version: '5.13.0' // needed by discord-rpc.jar + implementation group: 'net.java.dev.jna', name: 'jna', version: '5.14.0' // needed by discord-rpc.jar // test dependencies - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.0' - testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.1' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.1' } javafx { diff --git a/platform/setup.gradle b/platform/setup.gradle index 63314ddd82b..720bbcbc6e8 100644 --- a/platform/setup.gradle +++ b/platform/setup.gradle @@ -1,16 +1,15 @@ import org.apache.tools.ant.taskdefs.condition.Os -def jdk17_win_64 = 'https://api.adoptopenjdk.net/v3/binary/version/jdk-17.0.8+7/windows/x64/jdk/hotspot/normal/adoptopenjdk' -def jdk17_linux_64 = 'https://api.adoptopenjdk.net/v3/binary/version/jdk-17.0.8+7/linux/x64/jdk/hotspot/normal/adoptopenjdk' -def jdk17_mac_x64 = 'https://api.adoptopenjdk.net/v3/binary/version/jdk-17.0.8+7/mac/x64/jdk/hotspot/normal/adoptopenjdk' -def jdk17_mac_aarch64 = 'https://api.adoptopenjdk.net/v3/binary/version/jdk-17.0.8+7/mac/aarch64/jdk/hotspot/normal/adoptopenjdk' +def jdk17_win_64 = 'https://api.adoptium.net/v3/binary/version/jdk-17.0.9+9.1/windows/x64/jdk/hotspot/normal/eclipse?project=jdk' +def jdk17_linux_64 = 'https://api.adoptium.net/v3/binary/version/jdk-17.0.9+9/linux/x64/jdk/hotspot/normal/eclipse?project=jdk' +def jdk17_mac_x64 = 'https://api.adoptium.net/v3/binary/version/jdk-17.0.9+9/mac/x64/jdk/hotspot/normal/eclipse?project=jdk' +def jdk17_mac_aarch64 = 'https://api.adoptium.net/v3/binary/version/jdk-17.0.9+9/mac/aarch64/jdk/hotspot/normal/eclipse?project=jdk' -def nsis_url = 'https://netcologne.dl.sourceforge.net/project/nsis/NSIS%203/3.08/nsis-3.08.zip' +// Binaries needed on Windows for export (install them using Gradle since Windows does not have a package manager) +def nsis_url = 'https://netcologne.dl.sourceforge.net/project/nsis/NSIS%203/3.09/nsis-3.09.zip' def nsis_lockedlist_plugin_url = 'https://nsis.sourceforge.io/mediawiki/images/d/d3/LockedList.zip' - def mkisofs_url = 'https://netix.dl.sourceforge.net/project/mkisofs-md5/mkisofs-md5-v2.01/mkisofs-md5-2.01-Binary.zip' - tasks.register('downloadJDKWin64') { group 'setup' doLast { @@ -25,8 +24,8 @@ tasks.register('downloadJDKWin64') { copy { from zipTree('build/tmp/jdk17_win_64') into file('jdk/jdk17_win_64/') } delete 'build/tmp/jdk17_win_64' - copy { from file('jdk/jdk17_win_64/jdk-17.0.8+7') into file('jdk/jdk17_win_64/') } - delete 'jdk/jdk17_win_64/jdk-17.0.8+7' + copy { from file('jdk/jdk17_win_64/jdk-17.0.9+9') into file('jdk/jdk17_win_64/') } + delete 'jdk/jdk17_win_64/jdk-17.0.9+9' } } } @@ -45,8 +44,8 @@ tasks.register('downloadJDKLinux64') { copy { from tarTree(resources.gzip('build/tmp/jdk17_linux_64')) into file('jdk/jdk17_linux_64/') } delete 'build/tmp/jdk17_linux_64' - copy { from file('jdk/jdk17_linux_64/jdk-17.0.8+7') into file('jdk/jdk17_linux_64/') } - delete 'jdk/jdk17_linux_64/jdk-17.0.8+7' + copy { from file('jdk/jdk17_linux_64/jdk-17.0.9+9') into file('jdk/jdk17_linux_64/') } + delete 'jdk/jdk17_linux_64/jdk-17.0.9+9' } } } @@ -65,8 +64,8 @@ tasks.register('downloadJDKMacX64') { copy { from tarTree(resources.gzip('build/tmp/jdk17_mac_x64')) into file('jdk/jdk17_mac_x64/') } delete 'build/tmp/jdk17_mac_x64' - copy { from file('jdk/jdk17_mac_x64/jdk-17.0.8+7') into file('jdk/jdk17_mac_x64/') } - delete 'jdk/jdk17_mac_x64/jdk-17.0.8+7/' + copy { from file('jdk/jdk17_mac_x64/jdk-17.0.9+9') into file('jdk/jdk17_mac_x64/') } + delete 'jdk/jdk17_mac_x64/jdk-17.0.9+9/' } } } @@ -85,8 +84,8 @@ tasks.register('downloadJDKMacAarch64') { copy { from tarTree(resources.gzip('build/tmp/jdk17_mac_aarch64/')) into file('jdk/jdk17_mac_aarch64/') } delete 'build/tmp/jdk17_mac_aarch64' - copy { from file('jdk/jdk17_mac_aarch64/jdk-17.0.8+7') into file('jdk/jdk17_mac_aarch64/') } - delete 'jdk/jdk17_mac_aarch64/jdk-17.0.8+7/' + copy { from file('jdk/jdk17_mac_aarch64/jdk-17.0.9+9') into file('jdk/jdk17_mac_aarch64/') } + delete 'jdk/jdk17_mac_aarch64/jdk-17.0.9+9/' } } } @@ -103,7 +102,7 @@ tasks.register('downloadNSIS') { overwrite false } copy { from zipTree(file('build/tmp/nsis')) into file('build/tools/') } - file('build/tools/nsis-3.08').renameTo(file('build/tools/nsis')) + file('build/tools/nsis-3.09').renameTo(file('build/tools/nsis')) delete 'build/tmp/nsis' download.run { diff --git a/platform/windows/windows.gradle b/platform/windows/windows.gradle index 203b17ba3f1..95673f9129a 100644 --- a/platform/windows/windows.gradle +++ b/platform/windows/windows.gradle @@ -17,7 +17,9 @@ launch4j { errTitle = 'MCreator' supportUrl = 'https://mcreator.net/support' - fileDescription = "MCreator " + (String) project.mcreatorconf.getProperty('mcreator') + fileDescription = "MCreator " + (String) project.mcreatorconf.getProperty('mcreator') + "." + project.builddate + version = (String) project.mcreatorconf.getProperty('mcreator') + "." + project.builddate + textVersion = (String) project.mcreatorconf.getProperty('mcreator') + "." + project.builddate productName = "MCreator" companyName = "Pylo" copyright = "Pylo" @@ -72,7 +74,7 @@ tasks.register('buildInstallerWin64', Exec.class) { def nsis_binary if (Os.isFamily(Os.FAMILY_WINDOWS)) { - nsis_binary = projectDir.toString() + '/build/tools/nsis/makensis' + nsis_binary = new File(projectDir, '/build/tools/nsis/makensis') } else { nsis_binary = 'makensis' } diff --git a/plugins/generator-1.19.4/datapack-1.19.4/damagetype.definition.yaml b/plugins/generator-1.19.4/datapack-1.19.4/damagetype.definition.yaml new file mode 100644 index 00000000000..ed02ae948a4 --- /dev/null +++ b/plugins/generator-1.19.4/datapack-1.19.4/damagetype.definition.yaml @@ -0,0 +1,6 @@ +templates: + - template: damagetype.json.ftl + writer: json + name: "@MODDATAROOT/damage_type/@registryname.json" + +field_exclusions: [normalDeathMessage, itemDeathMessage, playerDeathMessage] \ No newline at end of file diff --git a/plugins/generator-1.19.4/datapack-1.19.4/mappings/damagesources.yaml b/plugins/generator-1.19.4/datapack-1.19.4/mappings/damagesources.yaml new file mode 100644 index 00000000000..8785bab1de5 --- /dev/null +++ b/plugins/generator-1.19.4/datapack-1.19.4/mappings/damagesources.yaml @@ -0,0 +1,134 @@ +_default: + - DamageTypes.GENERIC + - generic +_mcreator_prefix: "CUSTOM:" +_mcreator_map_template: + - "ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(\"@modid:@registryname\"))" + - "@modid:@registryname" +_bypass_prefix: "#" +IN_FIRE: + - DamageTypes.IN_FIRE + - in_fire +LIGHTNING_BOLT: + - DamageTypes.LIGHTNING_BOLT + - lightning_bolt +ON_FIRE: + - DamageTypes.ON_FIRE + - on_fire +LAVA: + - DamageTypes.LAVA + - lava +HOT_FLOOR: + - DamageTypes.HOT_FLOOR + - hot_floor +IN_WALL: + - DamageTypes.IN_WALL + - in_wall +CRAMMING: + - DamageTypes.CRAMMING + - cramming +DROWN: + - DamageTypes.DROWN + - drown +STARVE: + - DamageTypes.STARVE + - starve +CACTUS: + - DamageTypes.CACTUS + - cactus +FALL: + - DamageTypes.FALL + - fall +FLY_INTO_WALL: + - DamageTypes.FLY_INTO_WALL + - fly_into_wall +OUT_OF_WORLD: + - DamageTypes.OUT_OF_WORLD + - out_of_world +GENERIC: + - DamageTypes.GENERIC + - generic +MAGIC: + - DamageTypes.MAGIC + - magic +WITHER: + - DamageTypes.WITHER + - wither +DRAGON_BREATH: + - DamageTypes.DRAGON_BREATH + - dragon_breath +DRYOUT: + - DamageTypes.DRY_OUT + - dry_out +SWEET_BERRY_BUSH: + - DamageTypes.SWEET_BERRY_BUSH + - sweet_berry_bush +FREEZE: + - DamageTypes.FREEZE + - freeze +STALAGMITE: + - DamageTypes.STALAGMITE + - stalagmite +FALLING_BLOCK: + - DamageTypes.FALLING_BLOCK + - falling_block +ANVIL: + - DamageTypes.FALLING_ANVIL + - falling_anvil +FALLING_STALACTITE: + - DamageTypes.FALLING_STALACTITE + - falling_stalactite +STING: + - DamageTypes.STING + - sting +MOB_ATTACK: + - DamageTypes.MOB_ATTACK + - mob_attack +MOB_ATTACK_NO_AGGRO: + - DamageTypes.MOB_ATTACK_NO_AGGRO + - mob_attack_no_aggro +PLAYER_ATTACK: + - DamageTypes.PLAYER_ATTACK + - player_attack +ARROW: + - DamageTypes.ARROW + - arrow +TRIDENT: + - DamageTypes.TRIDENT + - trident +MOB_PROJECTILE: + - DamageTypes.MOB_PROJECTILE + - mob_projectile +FIREWORKS: + - DamageTypes.FIREWORKS + - fireworks +FIREBALL: + - DamageTypes.FIREBALL + - fireball +UNATTRIBUTED_FIREBALL: + - DamageTypes.UNATTRIBUTED_FIREBALL + - unattributed_fireball +WITHER_SKULL: + - DamageTypes.WITHER_SKULL + - wither_skull +THROWN: + - DamageTypes.THROWN + - thrown +INDIRECT_MAGIC: + - DamageTypes.INDIRECT_MAGIC + - indirect_magic +THORNS: + - DamageTypes.THORNS + - thorns +EXPLOSION: + - DamageTypes.EXPLOSION + - explosion +PLAYER_EXPLOSION: + - DamageTypes.PLAYER_EXPLOSION + - player_explosion +SONIC_BOOM: + - DamageTypes.SONIC_BOOM + - sonic_boom +BAD_RESPAWN_POINT: + - DamageTypes.BAD_RESPAWN_POINT + - bad_respawn_point \ No newline at end of file diff --git a/plugins/generator-1.19.4/datapack-1.19.4/recipe.definition.yaml b/plugins/generator-1.19.4/datapack-1.19.4/recipe.definition.yaml index 03b6b38206e..5c7d6600ced 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/recipe.definition.yaml +++ b/plugins/generator-1.19.4/datapack-1.19.4/recipe.definition.yaml @@ -28,4 +28,4 @@ templates: name: "@RESROOT/data/@[getNamespace()]/recipes/@[getName()].json" condition: "recipeType %= Smithing" -field_exclusions: [brewingRecipeMaker] \ No newline at end of file +field_exclusions: [brewingRecipeMaker, smithingRecipeMaker.cb4] \ No newline at end of file diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/damagetype.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/damagetype.json.ftl new file mode 100644 index 00000000000..d5638977ab5 --- /dev/null +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/damagetype.json.ftl @@ -0,0 +1,8 @@ +{ + "exhaustion": ${data.exhaustion}, + "message_id": "${registryname}", + "scaling": "${data.scaling}" + <#if data.effects != "hurt">, + "effects": "${data.effects}" + +} \ No newline at end of file diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_end.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_end.json.ftl index f40ad63dcee..86c4a4a0191 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_end.json.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_end.json.ftl @@ -11,9 +11,9 @@ "name": "${modid}:${registryname}", "sea_level": 0, "legacy_random_source": true, - "disable_mob_generation": ${!data.imitateOverworldBehaviour}, - "aquifers_enabled": ${data.imitateOverworldBehaviour}, - "ore_veins_enabled": ${data.imitateOverworldBehaviour}, + "disable_mob_generation": false, + "aquifers_enabled": false, + "ore_veins_enabled": false, "default_block": ${mappedMCItemToBlockStateJSON(data.mainFillerBlock)}, "default_fluid": ${mappedMCItemToBlockStateJSON(data.fluidBlock)}, "spawn_target": [], diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_nether.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_nether.json.ftl index 3e02d4f7132..fab9e58382a 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_nether.json.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_nether.json.ftl @@ -11,9 +11,9 @@ "name": "${modid}:${registryname}", "sea_level": 32, "legacy_random_source": true, - "disable_mob_generation": ${!data.imitateOverworldBehaviour}, - "aquifers_enabled": ${data.imitateOverworldBehaviour}, - "ore_veins_enabled": ${data.imitateOverworldBehaviour}, + "disable_mob_generation": false, + "aquifers_enabled": false, + "ore_veins_enabled": false, "default_block": ${mappedMCItemToBlockStateJSON(data.mainFillerBlock)}, "default_fluid": ${mappedMCItemToBlockStateJSON(data.fluidBlock)}, "spawn_target": [], diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_overworld.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_overworld.json.ftl index 01b1ba0a88e..14c876dcb39 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_overworld.json.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_overworld.json.ftl @@ -11,9 +11,9 @@ "name": "${modid}:${registryname}", "sea_level": 63, "legacy_random_source": false, - "disable_mob_generation": ${!data.imitateOverworldBehaviour}, - "aquifers_enabled": ${data.imitateOverworldBehaviour}, - "ore_veins_enabled": ${data.imitateOverworldBehaviour}, + "disable_mob_generation": false, + "aquifers_enabled": true, + "ore_veins_enabled": true, "default_block": ${mappedMCItemToBlockStateJSON(data.mainFillerBlock)}, "default_fluid": ${mappedMCItemToBlockStateJSON(data.fluidBlock)}, "spawn_target": [], diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_type.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_type.json.ftl index 19db94b83b0..a5cf44e9cbb 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_type.json.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/dimension_type.json.ftl @@ -33,5 +33,9 @@ }, "monster_spawn_block_light_limit": 0, + <#if var_customeffects?? && var_customeffects == "true"> + "effects": "${modid}:${registryname}" + <#else> "effects": "<#if data.hasFog>minecraft:the_nether<#else>minecraft:overworld" + } \ No newline at end of file diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/surface_builder.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/surface_builder.json.ftl index d3a21398511..9676217d67c 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/surface_builder.json.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/dimension/surface_builder.json.ftl @@ -3,7 +3,7 @@ <#macro vanilla biome> <#if biome?contains("badlands")> - <@vanillaSB biome w.itemBlock("Blocks.SAND#1") w.itemBlock("Blocks.STAINED_HARDENED_CLAY") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> + <@vanillaSB biome w.itemBlock("Blocks.SAND#1") w.itemBlock("Blocks.HARDENED_CLAY") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> <#elseif biome == "basalt_deltas"> <@vanillaSB biome w.itemBlock("Blocks.BLACKSTONE") w.itemBlock("Blocks.BASALT") w.itemBlock("Blocks.MAGMA") data.worldGenType != "Normal world gen"/> <#elseif biome == "crimson_forest"> @@ -15,19 +15,17 @@ <#elseif biome == "deep_dark"> <@vanillaSB biome w.itemBlock("Blocks.SCULK") w.itemBlock("Blocks.DEEPSLATE") w.itemBlock("Blocks.DEEPSLATE") data.worldGenType != "Normal world gen"/> <#elseif biome?contains("mushroom_field")> - <@vanillaSB biome w.itemBlock("Blocks.MYCELIUM") w.itemBlock("Blocks.DIRT") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> + <@vanillaSB biome w.itemBlock("Blocks.MYCELIUM") w.itemBlock("Blocks.DIRT#0") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> <#elseif biome == "nether"> <@vanillaSB biome w.itemBlock("Blocks.NETHERRACK") w.itemBlock("Blocks.NETHERRACK") w.itemBlock("Blocks.NETHERRACK") data.worldGenType != "Normal world gen"/> <#elseif biome == "soul_sand_valley"> <@vanillaSB biome w.itemBlock("Blocks.SOUL_SAND") w.itemBlock("Blocks.SOUL_SAND") w.itemBlock("Blocks.SOUL_SAND") data.worldGenType != "Normal world gen"/> <#elseif biome == "stone_beach"> - <@vanillaSB biome w.itemBlock("Blocks.STONE") w.itemBlock("Blocks.STONE") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> - <#elseif biome == "warped_forest"> - <@vanillaSB biome w.itemBlock("Blocks.WARPED_NYLIUM") w.itemBlock("Blocks.NETHERRACK") w.itemBlock("Blocks.WARPED_WART_BLOCK") data.worldGenType != "Normal world gen"/> + <@vanillaSB biome w.itemBlock("Blocks.STONE#0") w.itemBlock("Blocks.STONE#0") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> <#elseif biome == "warped_forest"> <@vanillaSB biome w.itemBlock("Blocks.WARPED_NYLIUM") w.itemBlock("Blocks.NETHERRACK") w.itemBlock("Blocks.WARPED_WART_BLOCK") data.worldGenType != "Normal world gen"/> <#else> - <@vanillaSB biome w.itemBlock("Blocks.GRASS") w.itemBlock("Blocks.DIRT") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> + <@vanillaSB biome w.itemBlock("Blocks.GRASS") w.itemBlock("Blocks.DIRT#0") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/recipe/crafting.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/recipe/crafting.json.ftl index 91bfa493ccc..62dfa7952f7 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/templates/recipe/crafting.json.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/recipe/crafting.json.ftl @@ -16,19 +16,19 @@ <#assign ingredients += "{${mappedMCItemToItemObjectJSON(element)}},"> - ${ingredients[0..(ingredients?last_index_of(',') - 1)]} + ${ingredients[0..(ingredients?last_index_of(',') - 1)]} ], <#else> <#assign recipeArray = data.getOptimisedRecipe()> - <#assign rm = [], i = 0> + <#assign patternKeys = data.getPatternKeys()> "pattern": [ <#list recipeArray as rl> - "<#list rl as re><#if !re.isEmpty()><#assign rm+=["\"${i}\": {${mappedMCItemToItemObjectJSON(re)}}"]/>${i}<#else> <#assign i+=1>"<#sep>, + "<#list rl as re><#if !re.isEmpty()>${patternKeys.get(re)}<#else> "<#sep>, ], "key": { - <#list rm as recipeMapping> - ${recipeMapping}<#sep>, + <#list patternKeys.keySet() as item> + "${patternKeys.get(item)}": {${mappedMCItemToItemObjectJSON(item)}}<#sep>, }, diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/structure/template_pool.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/structure/template_pool.json.ftl index e493fa46d22..0434d5c4792 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/templates/structure/template_pool.json.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/structure/template_pool.json.ftl @@ -1,3 +1,4 @@ +<#include "../mcitems.ftl"> { "name": "${modid}:${registryname}", "fallback": "minecraft:empty", @@ -10,27 +11,18 @@ "projection": "${data.projection}", "processors": { "processors": [ + <#if data.ignoredBlocks?has_content> { "processor_type": "minecraft:block_ignore", "blocks": [ - <#if data.ignoreBlocks == "STRUCTURE_BLOCK"> + <#list data.ignoredBlocks as block> { - "Name": "minecraft:structure_block" - } - <#elseif data.ignoreBlocks == "AIR_AND_STRUCTURE_BLOCK"> - { - "Name": "minecraft:structure_block" - }, - { - "Name": "minecraft:air" - } - <#elseif data.ignoreBlocks == "AIR"> - { - "Name": "minecraft:air" - } - + "Name": "${mappedMCItemToRegistryName(block)}" + }<#sep>, + ] } + ] } } diff --git a/plugins/generator-1.19.4/datapack-1.19.4/templates/tag.json.ftl b/plugins/generator-1.19.4/datapack-1.19.4/templates/tag.json.ftl index 6caa1ffbd2e..a5c2d80f0db 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/templates/tag.json.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/templates/tag.json.ftl @@ -1,13 +1,14 @@ <#include "mcitems.ftl"> +<#assign tag = data.getNamespace() + ":" + data.getName()> { "replace": false, "values": [ <#if data.type == "Items"> - <#list w.filterBrokenReferences(data.items) as value> + <#list w.normalizeTagElements(tag, 1, data.items) as value> "${mappedMCItemToRegistryName(value, true)}"<#if value?has_next>, <#elseif data.type == "Blocks"> - <#list w.filterBrokenReferences(data.blocks) as value> + <#list w.normalizeTagElements(tag, 1, data.blocks) as value> "${mappedMCItemToRegistryName(value, true)}"<#if value?has_next>, <#elseif data.type == "Functions"> @@ -16,14 +17,18 @@ <#if value?has_next>, <#elseif data.type == "Entities"> - <#list w.filterBrokenReferences(data.entities) as value> + <#list w.normalizeTagElements(tag, 2, data.entities) as value> "${generator.map(value.getUnmappedValue(), "entities", 2)}" <#if value?has_next>, <#elseif data.type == "Biomes"> - <#list w.filterBrokenReferences(data.biomes) as value> + <#list w.normalizeTagElements(tag, 0, data.biomes) as value> "${value}"<#if value?has_next>, + <#elseif data.type == "Damage types"> + <#list w.normalizeTagElements(tag, 1, data.damageTypes) as value> + "${generator.map(value.getUnmappedValue(), "damagesources", 1)}"<#sep>, + ] } \ No newline at end of file diff --git a/plugins/generator-1.19.4/datapack-1.19.4/utils/mcitems.ftl b/plugins/generator-1.19.4/datapack-1.19.4/utils/mcitems.ftl index 515d4c468d2..68f718297b2 100644 --- a/plugins/generator-1.19.4/datapack-1.19.4/utils/mcitems.ftl +++ b/plugins/generator-1.19.4/datapack-1.19.4/utils/mcitems.ftl @@ -44,8 +44,8 @@ <#else> <#assign mapped = generator.map(mappedBlock.getUnmappedValue(), "blocksitems", 1) /> <#if mapped.startsWith("#")> - <#if customelement?has_content> - <#return "#" + mapped> + <#if acceptTags> + <#return mapped> <#else> <#return "minecraft:air"> diff --git a/plugins/generator-1.19.4/forge-1.19.4/damagetype.definition.yaml b/plugins/generator-1.19.4/forge-1.19.4/damagetype.definition.yaml new file mode 100644 index 00000000000..9f76b539ee4 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/damagetype.definition.yaml @@ -0,0 +1,12 @@ +templates: + - template: damagetype.json.ftl # loaded from datapack generator + writer: json + name: "@MODDATAROOT/damage_type/@registryname.json" + +localizationkeys: + - key: death.attack.@registryname + mapto: normalDeathMessage + - key: death.attack.@registryname.item + mapto: itemDeathMessage + - key: death.attack.@registryname.player + mapto: playerDeathMessage \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/dimension.definition.yaml b/plugins/generator-1.19.4/forge-1.19.4/dimension.definition.yaml index 7c588dcc694..8407869dd91 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/dimension.definition.yaml +++ b/plugins/generator-1.19.4/forge-1.19.4/dimension.definition.yaml @@ -15,6 +15,7 @@ templates: name: "@SRCROOT/@BASEPACKAGEPATH/item/@NAMEItem.java" - template: dimension/dimension_type.json.ftl # loaded from datapack generator + variables: "customeffects=true" writer: json name: "@MODDATAROOT/dimension_type/@registryname.json" - template: dimension/dimension_overworld.json.ftl # loaded from datapack generator diff --git a/plugins/generator-1.19.4/forge-1.19.4/mappings/damagesources.yaml b/plugins/generator-1.19.4/forge-1.19.4/mappings/damagesources.yaml deleted file mode 100644 index d04ea26a454..00000000000 --- a/plugins/generator-1.19.4/forge-1.19.4/mappings/damagesources.yaml +++ /dev/null @@ -1,43 +0,0 @@ -_default: DamageTypes.GENERIC -IN_FIRE: DamageTypes.IN_FIRE -LIGHTNING_BOLT: DamageTypes.LIGHTNING_BOLT -ON_FIRE: DamageTypes.ON_FIRE -LAVA: DamageTypes.LAVA -HOT_FLOOR: DamageTypes.HOT_FLOOR -IN_WALL: DamageTypes.IN_WALL -CRAMMING: DamageTypes.CRAMMING -DROWN: DamageTypes.DROWN -STARVE: DamageTypes.STARVE -CACTUS: DamageTypes.CACTUS -FALL: DamageTypes.FALL -FLY_INTO_WALL: DamageTypes.FLY_INTO_WALL -OUT_OF_WORLD: DamageTypes.OUT_OF_WORLD -GENERIC: DamageTypes.GENERIC -MAGIC: DamageTypes.MAGIC -WITHER: DamageTypes.WITHER -DRAGON_BREATH: DamageTypes.DRAGON_BREATH -DRYOUT: DamageTypes.DRY_OUT -SWEET_BERRY_BUSH: DamageTypes.SWEET_BERRY_BUSH -FREEZE: DamageTypes.FREEZE -STALAGMITE: DamageTypes.STALAGMITE -FALLING_BLOCK: DamageTypes.FALLING_BLOCK -ANVIL: DamageTypes.FALLING_ANVIL -FALLING_STALACTITE: DamageTypes.FALLING_STALACTITE -STING: DamageTypes.STING -MOB_ATTACK: DamageTypes.MOB_ATTACK -MOB_ATTACK_NO_AGGRO: DamageTypes.MOB_ATTACK_NO_AGGRO -PLAYER_ATTACK: DamageTypes.PLAYER_ATTACK -ARROW: DamageTypes.ARROW -TRIDENT: DamageTypes.TRIDENT -MOB_PROJECTILE: DamageTypes.MOB_PROJECTILE -FIREWORKS: DamageTypes.FIREWORKS -FIREBALL: DamageTypes.FIREBALL -UNATTRIBUTED_FIREBALL: DamageTypes.UNATTRIBUTED_FIREBALL -WITHER_SKULL: DamageTypes.WITHER_SKULL -THROWN: DamageTypes.THROWN -INDIRECT_MAGIC: DamageTypes.INDIRECT_MAGIC -THORNS: DamageTypes.THORNS -EXPLOSION: DamageTypes.EXPLOSION -PLAYER_EXPLOSION: DamageTypes.PLAYER_EXPLOSION -SONIC_BOOM: DamageTypes.SONIC_BOOM -BAD_RESPAWN_POINT: DamageTypes.BAD_RESPAWN_POINT \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/damagesource_is_tagged_in.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/damagesource_is_tagged_in.java.ftl new file mode 100644 index 00000000000..8a15428543d --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/damagesource_is_tagged_in.java.ftl @@ -0,0 +1,2 @@ +<#include "mcelements.ftl"> +(${input$damagesource}.is(TagKey.create(Registries.DAMAGE_TYPE, ${toResourceLocation(input$tag)}))) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_check_main_hand.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_check_main_hand.java.ftl new file mode 100644 index 00000000000..84cfba70a08 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_check_main_hand.java.ftl @@ -0,0 +1 @@ +(${input$entity} instanceof LivingEntity _entMainHand${cbi} && _entMainHand${cbi}.getMainArm() == HumanoidArm.${field$hand}) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_integer_get.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_integer_get.java.ftl new file mode 100644 index 00000000000..0788a4545b2 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_integer_get.java.ftl @@ -0,0 +1,2 @@ +(${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntI ? + _datEntI.getEntityData().get(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}) : 0) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_integer_set.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_integer_set.java.ftl new file mode 100644 index 00000000000..304968e093c --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_integer_set.java.ftl @@ -0,0 +1,2 @@ +if (${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntSetI) + _datEntSetI.getEntityData().set(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}, ${opt.toInt(input$value)}); \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_logic_get.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_logic_get.java.ftl new file mode 100644 index 00000000000..d8b15b994f8 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_logic_get.java.ftl @@ -0,0 +1,2 @@ +(${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntL${cbi} && + _datEntL${cbi}.getEntityData().get(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor})) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_logic_set.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_logic_set.java.ftl new file mode 100644 index 00000000000..edb5cb9735c --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_logic_set.java.ftl @@ -0,0 +1,2 @@ +if (${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntSetL) + _datEntSetL.getEntityData().set(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}, ${input$value}); \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_string_get.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_string_get.java.ftl new file mode 100644 index 00000000000..324c82c59d6 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_string_get.java.ftl @@ -0,0 +1,2 @@ +(${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntS ? + _datEntS.getEntityData().get(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}) : "") \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_string_set.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_string_set.java.ftl new file mode 100644 index 00000000000..6adb914fb79 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_data_string_set.java.ftl @@ -0,0 +1,2 @@ +if (${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntSetS) + _datEntSetS.getEntityData().set(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}, ${input$value}); \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_get_use_item.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_get_use_item.java.ftl new file mode 100644 index 00000000000..ca14f2bbd58 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_get_use_item.java.ftl @@ -0,0 +1 @@ +/*@ItemStack*/(${input$entity} instanceof LivingEntity _entUseItem${cbi} ? _entUseItem${cbi}.getUseItem() : ItemStack.EMPTY) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_get_use_item_ticks.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_get_use_item_ticks.java.ftl new file mode 100644 index 00000000000..29440ad59cf --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/entity_get_use_item_ticks.java.ftl @@ -0,0 +1 @@ +/*@int*/(${input$entity} instanceof LivingEntity _entUseTicks${cbi} ? _entUseTicks${cbi}.getTicksUsingItem() : 0) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/item_get_cooldown.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/item_get_cooldown.java.ftl new file mode 100644 index 00000000000..fb47048a76f --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/item_get_cooldown.java.ftl @@ -0,0 +1,2 @@ +<#include "mcitems.ftl"> +/*@float*/(${input$entity} instanceof Player _plrCldRem${cbi} ? _plrCldRem${cbi}.getCooldowns().getCooldownPercent(${mappedMCItemToItem(input$item)}, 0f) * 100 : 0) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/item_is_cooldown.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/item_is_cooldown.java.ftl new file mode 100644 index 00000000000..6e4a1755a67 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/item_is_cooldown.java.ftl @@ -0,0 +1,2 @@ +<#include "mcitems.ftl"> +(${input$entity} instanceof Player _plrCldCheck${cbi} && _plrCldCheck${cbi}.getCooldowns().isOnCooldown(${mappedMCItemToItem(input$item)})) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/team_add_entity.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_add_entity.java.ftl new file mode 100644 index 00000000000..2d11edfca77 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_add_entity.java.ftl @@ -0,0 +1,10 @@ +{ + Entity _entityTeam = ${input$entity}; + PlayerTeam _pt = _entityTeam.level.getScoreboard().getPlayerTeam(${input$name}); + if (_pt != null) { + if (_entityTeam instanceof Player _player) + _entityTeam.level.getScoreboard().addPlayerToTeam(_player.getGameProfile().getName(), _pt); + else + _entityTeam.level.getScoreboard().addPlayerToTeam(_entityTeam.getStringUUID(), _pt); + } +} \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/team_create_new.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_create_new.java.ftl new file mode 100644 index 00000000000..53d62a2cf33 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_create_new.java.ftl @@ -0,0 +1,2 @@ +if (world instanceof Level _level) + _level.getScoreboard().addPlayerTeam(${input$name}); \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/team_delete.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_delete.java.ftl new file mode 100644 index 00000000000..3835ddf0d7d --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_delete.java.ftl @@ -0,0 +1,5 @@ +if (world instanceof Level _level) { + PlayerTeam _pt = _level.getScoreboard().getPlayerTeam(${input$name}); + if (_pt != null) + _level.getScoreboard().removePlayerTeam(_pt); +} \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/team_get_entity_team.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_get_entity_team.java.ftl new file mode 100644 index 00000000000..f15fdb6c746 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_get_entity_team.java.ftl @@ -0,0 +1,2 @@ +(${input$entity} instanceof LivingEntity _teamEnt && _teamEnt.level.getScoreboard().getPlayersTeam(_teamEnt.getStringUUID()) != null ? + _teamEnt.level.getScoreboard().getPlayersTeam(_teamEnt instanceof Player _pl ? _pl.getGameProfile().getName() : _teamEnt.getStringUUID()).getName() : "") \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/team_get_friendlyfire.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_get_friendlyfire.java.ftl new file mode 100644 index 00000000000..4083859d53a --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_get_friendlyfire.java.ftl @@ -0,0 +1 @@ +(world instanceof Level _level && _level.getScoreboard().getPlayerTeam(${input$name}) != null ? _level.getScoreboard().getPlayerTeam(${input$name}).isAllowFriendlyFire() : false) \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/team_remove_entity.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_remove_entity.java.ftl new file mode 100644 index 00000000000..f9a3cab38b4 --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_remove_entity.java.ftl @@ -0,0 +1,6 @@ +{ + Entity _entityTeam = ${input$entity}; + PlayerTeam _pt = _entityTeam.level.getScoreboard().getPlayerTeam(${input$name}); + if (_pt != null) + _entityTeam.level.getScoreboard().removePlayerFromTeam(_entityTeam.getStringUUID(), _pt); +} \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/procedures/team_set_friendlyfire.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_set_friendlyfire.java.ftl new file mode 100644 index 00000000000..a4caba63faf --- /dev/null +++ b/plugins/generator-1.19.4/forge-1.19.4/procedures/team_set_friendlyfire.java.ftl @@ -0,0 +1,5 @@ +if (world instanceof Level _level) { + PlayerTeam _pt = _level.getScoreboard().getPlayerTeam(${input$name}); + if (_pt != null) + _pt.setAllowFriendlyFire(${input$condition}); +} \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/recipe.definition.yaml b/plugins/generator-1.19.4/forge-1.19.4/recipe.definition.yaml index 582d86a6590..e3b775efc21 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/recipe.definition.yaml +++ b/plugins/generator-1.19.4/forge-1.19.4/recipe.definition.yaml @@ -29,4 +29,6 @@ templates: condition: "recipeType %= Smithing" - template: recipe/brewingrecipe.java.ftl name: "@SRCROOT/@BASEPACKAGEPATH/recipes/brewing/@NAMEBrewingRecipe.java" - condition: "recipeType %= Brewing" \ No newline at end of file + condition: "recipeType %= Brewing" + +field_exclusions: [smithingRecipeMaker.cb4] \ No newline at end of file diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_fruits_decorator.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_fruits_decorator.java.ftl index aad47963efe..7f14d428f43 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_fruits_decorator.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_fruits_decorator.java.ftl @@ -14,7 +14,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License - # along setValue this program. If not, see . + # along with this program. If not, see . # # Additional permission for code generator templates (*.ftl files) # diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_leave_decorator.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_leave_decorator.java.ftl index 83069180eab..87861a5e3d7 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_leave_decorator.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_leave_decorator.java.ftl @@ -14,7 +14,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License - # along setValue this program. If not, see . + # along with this program. If not, see . # # Additional permission for code generator templates (*.ftl files) # diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_trunk_decorator.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_trunk_decorator.java.ftl index d811645509f..ca512fed265 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_trunk_decorator.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/biome/tree_trunk_decorator.java.ftl @@ -14,7 +14,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License - # along setValue this program. If not, see . + # along with this program. If not, see . # # Additional permission for code generator templates (*.ftl files) # diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/block/block.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/block/block.java.ftl index fa8cffb6501..142f3b8c998 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/block/block.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/block/block.java.ftl @@ -87,21 +87,11 @@ public class ${name}Block extends <#if data.isCustomSoundType> .sound(new ForgeSoundType(1.0f, 1.0f, - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.breakSound?has_content && data.breakSound.getMappedValue()?has_content)?then(data.breakSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.stepSound?has_content && data.stepSound.getMappedValue()?has_content)?then(data.stepSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.placeSound?has_content && data.placeSound.getMappedValue()?has_content)?then(data.placeSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.hitSound?has_content && data.hitSound.getMappedValue()?has_content)?then(data.hitSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.fallSound?has_content && data.fallSound.getMappedValue()?has_content)?then(data.fallSound, "intentionally_empty")}" - )) + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.breakSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.stepSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.placeSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.hitSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.fallSound}")) )) <#else> .sound(SoundType.${data.soundOnStep}) diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/dimension/dimension.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/dimension/dimension.java.ftl index a12c58a3d2d..8380d30d043 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/dimension/dimension.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/dimension/dimension.java.ftl @@ -34,14 +34,19 @@ package ${package}.world.dimension; +<#compress> @Mod.EventBusSubscriber public class ${name}Dimension { @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public static class DimensionSpecialEffectsHandler { @SubscribeEvent @OnlyIn(Dist.CLIENT) public static void registerDimensionSpecialEffects(RegisterDimensionSpecialEffectsEvent event) { - DimensionSpecialEffects customEffect = new DimensionSpecialEffects(<#if data.imitateOverworldBehaviour>128<#else>Float.NaN, - true, <#if data.imitateOverworldBehaviour>DimensionSpecialEffects.SkyType.NORMAL<#else>DimensionSpecialEffects.SkyType.NONE, false, false) { - + DimensionSpecialEffects customEffect = new DimensionSpecialEffects( + <#if data.imitateOverworldBehaviour>DimensionSpecialEffects.OverworldEffects.CLOUD_LEVEL<#else>Float.NaN, + true, + <#if data.imitateOverworldBehaviour>DimensionSpecialEffects.SkyType.NORMAL<#else>DimensionSpecialEffects.SkyType.NONE, + false, + false + ) { @Override public Vec3 getBrightnessDependentFogColor(Vec3 color, float sunHeight) { <#if data.airColor?has_content> return new Vec3(${data.airColor.getRed()/255},${data.airColor.getGreen()/255},${data.airColor.getBlue()/255}); @@ -58,7 +63,6 @@ package ${package}.world.dimension; return ${data.hasFog}; } }; - event.register(new ResourceLocation("${modid}:${registryname}"), customEffect); } @@ -87,3 +91,4 @@ package ${package}.world.dimension; } + diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/elementinits/items.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/elementinits/items.java.ftl index af4e3827dd5..5897c0a178f 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/elementinits/items.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/elementinits/items.java.ftl @@ -71,21 +71,19 @@ public class ${JavaModName}Items { public static final RegistryObject ${item.getModElement().getRegistryNameUpper()}_SPAWN_EGG = REGISTRY.register("${item.getModElement().getRegistryName()}_spawn_egg", () -> new ForgeSpawnEggItem(${JavaModName}Entities.${item.getModElement().getRegistryNameUpper()}, ${item.spawnEggBaseColor.getRGB()}, ${item.spawnEggDotColor.getRGB()}, new Item.Properties())); - <#elseif item.getModElement().getTypeString() == "fluid" && item.generateBucket> - public static final RegistryObject ${item.getModElement().getRegistryNameUpper()}_BUCKET = - REGISTRY.register("${item.getModElement().getRegistryName()}_bucket", () -> new ${item.getModElement().getName()}Item()); <#elseif item.getModElement().getTypeString() == "dimension" && item.hasIgniter()> public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = REGISTRY.register("${item.getModElement().getRegistryName()}", () -> new ${item.getModElement().getName()}Item()); - <#elseif item.getModElement().getType().getBaseType()?string == "BLOCK"> - <#if (item.getModElement().getTypeString() == "block" && item.isDoubleBlock()) || (item.getModElement().getTypeString() == "plant" && item.isDoubleBlock())> + <#elseif item.getModElement().getTypeString() == "fluid" && item.generateBucket> + public static final RegistryObject ${item.getModElement().getRegistryNameUpper()}_BUCKET = + REGISTRY.register("${item.getModElement().getRegistryName()}_bucket", () -> new ${item.getModElement().getName()}Item()); + <#elseif item.getModElement().getTypeString() == "block" || item.getModElement().getTypeString() == "plant"> + <#if item.isDoubleBlock()> <#assign hasDoubleBlocks = true> - public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = - doubleBlock(${JavaModName}Blocks.${item.getModElement().getRegistryNameUpper()}); + public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = doubleBlock(${JavaModName}Blocks.${item.getModElement().getRegistryNameUpper()}); <#else> <#assign hasBlocks = true> - public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = - block(${JavaModName}Blocks.${item.getModElement().getRegistryNameUpper()}); + public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = block(${JavaModName}Blocks.${item.getModElement().getRegistryNameUpper()}); <#else> public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/feature/structure_feature.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/feature/structure_feature.java.ftl index 01d430785f0..7ba6f698274 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/feature/structure_feature.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/feature/structure_feature.java.ftl @@ -52,7 +52,7 @@ import com.mojang.serialization.Codec; // Load the structure template StructureTemplateManager structureManager = worldGenLevel.getLevel().getServer().getStructureManager(); StructureTemplate template = structureManager.getOrCreate(config.structure()); - StructurePlaceSettings placeSettings = (new StructurePlaceSettings()).setRotation(rotation).setMirror(mirror).setRandom(random).setIgnoreEntities(true) + StructurePlaceSettings placeSettings = (new StructurePlaceSettings()).setRotation(rotation).setMirror(mirror).setRandom(random).setIgnoreEntities(false) .addProcessor(new BlockIgnoreProcessor(config.ignoredBlocks().stream().map(Holder::get).toList())); template.placeInWorld(worldGenLevel, placePos, placePos, placeSettings, random, 4); return true; diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/item/item.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/item/item.java.ftl index beecdec7df1..1398560876b 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/item/item.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/item/item.java.ftl @@ -349,7 +349,14 @@ public class ${name}Item extends Item { } <#if hasProcedure(data.onRangedItemUsed)> - <@procedureOBJToCode data.onRangedItemUsed/> + <@procedureCode data.onRangedItemUsed, { + "x": "entity.getX()", + "y": "entity.getY()", + "z": "entity.getZ()", + "world": "world", + "entity": "entity", + "itemstack": "stack" + }/> } diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/livingentity/livingentity.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/livingentity/livingentity.java.ftl index b4e39a6760a..6c1fa75a450 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/livingentity/livingentity.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/livingentity/livingentity.java.ftl @@ -38,6 +38,7 @@ import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.level.material.Material; import net.minecraft.nbt.Tag; +import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.sounds.SoundEvent; import javax.annotation.Nullable; @@ -60,6 +61,16 @@ import javax.annotation.Nullable; public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements RangedAttackMob { + <#list data.entityDataEntries as entry> + <#if entry.value().getClass().getSimpleName() == "Integer"> + public static final EntityDataAccessor DATA_${entry.property().getName()} = SynchedEntityData.defineId(${name}Entity.class, EntityDataSerializers.INT); + <#elseif entry.value().getClass().getSimpleName() == "Boolean"> + public static final EntityDataAccessor DATA_${entry.property().getName()} = SynchedEntityData.defineId(${name}Entity.class, EntityDataSerializers.BOOLEAN); + <#elseif entry.value().getClass().getSimpleName() == "String"> + public static final EntityDataAccessor DATA_${entry.property().getName()} = SynchedEntityData.defineId(${name}Entity.class, EntityDataSerializers.STRING); + + + <#if data.isBoss> private final ServerBossEvent bossInfo = new ServerBossEvent(this.getDisplayName(), ServerBossEvent.BossBarColor.${data.bossBarColor}, ServerBossEvent.BossBarOverlay.${data.bossBarType}); @@ -145,12 +156,25 @@ public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements R } }; + + <#if data.boundingBoxScale?? && data.boundingBoxScale.getFixedValue() != 1 && !hasProcedure(data.boundingBoxScale)> + refreshDimensions(); + } @Override public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } + <#if data.entityDataEntries?has_content> + @Override protected void defineSynchedData() { + super.defineSynchedData(); + <#list data.entityDataEntries as entry> + this.entityData.define(DATA_${entry.property().getName()}, ${entry.value()?is_string?then("\"" + entry.value() + "\"", entry.value())}); + + } + + <#if data.flyingMob> @Override protected PathNavigation createNavigation(Level world) { return new FlyingPathNavigation(this, world); @@ -414,19 +438,43 @@ public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements R } } } + + <#if data.entityDataEntries?has_content || (data.guiBoundTo?has_content && data.guiBoundTo != "")> @Override public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); + super.addAdditionalSaveData(compound); + <#list data.entityDataEntries as entry> + <#if entry.value().getClass().getSimpleName() == "Integer"> + compound.putInt("Data${entry.property().getName()}", this.entityData.get(DATA_${entry.property().getName()})); + <#elseif entry.value().getClass().getSimpleName() == "Boolean"> + compound.putBoolean("Data${entry.property().getName()}", this.entityData.get(DATA_${entry.property().getName()})); + <#elseif entry.value().getClass().getSimpleName() == "String"> + compound.putString("Data${entry.property().getName()}", this.entityData.get(DATA_${entry.property().getName()})); + + + <#if data.guiBoundTo?has_content && data.guiBoundTo != ""> compound.put("InventoryCustom", inventory.serializeNBT()); + } @Override public void readAdditionalSaveData(CompoundTag compound) { - super.readAdditionalSaveData(compound); - Tag inventoryCustom = compound.get("InventoryCustom"); - if(inventoryCustom instanceof CompoundTag inventoryTag) + super.readAdditionalSaveData(compound); + <#list data.entityDataEntries as entry> + if (compound.contains("Data${entry.property().getName()}")) + <#if entry.value().getClass().getSimpleName() == "Integer"> + this.entityData.set(DATA_${entry.property().getName()}, compound.getInt("Data${entry.property().getName()}")); + <#elseif entry.value().getClass().getSimpleName() == "Boolean"> + this.entityData.set(DATA_${entry.property().getName()}, compound.getBoolean("Data${entry.property().getName()}")); + <#elseif entry.value().getClass().getSimpleName() == "String"> + this.entityData.set(DATA_${entry.property().getName()}, compound.getString("Data${entry.property().getName()}")); + + + <#if data.guiBoundTo?has_content && data.guiBoundTo != ""> + if (compound.get("InventoryCustom") instanceof CompoundTag inventoryTag) inventory.deserializeNBT(inventoryTag); - } - + + } + <#if hasProcedure(data.onRightClickedOn) || data.ridable || (data.tameable && data.breedable) || (data.guiBoundTo?has_content && data.guiBoundTo != "")> @Override public InteractionResult mobInteract(Player sourceentity, InteractionHand hand) { @@ -545,16 +593,21 @@ public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements R } - <#if hasProcedure(data.onMobTickUpdate)> + <#if hasProcedure(data.onMobTickUpdate) || hasProcedure(data.boundingBoxScale)> @Override public void baseTick() { super.baseTick(); - <@procedureCode data.onMobTickUpdate, { - "x": "this.getX()", - "y": "this.getY()", - "z": "this.getZ()", - "entity": "this", - "world": "this.level" - }/> + <#if hasProcedure(data.onMobTickUpdate)> + <@procedureCode data.onMobTickUpdate, { + "x": "this.getX()", + "y": "this.getY()", + "z": "this.getZ()", + "entity": "this", + "world": "this.level" + }/> + + <#if hasProcedure(data.boundingBoxScale)> + this.refreshDimensions(); + } @@ -728,6 +781,21 @@ public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements R } + <#if hasProcedure(data.boundingBoxScale) || (data.boundingBoxScale?? && data.boundingBoxScale.getFixedValue() != 1)> + @Override public EntityDimensions getDimensions(Pose pose) { + <#if hasProcedure(data.boundingBoxScale)> + Entity entity = this; + Level world = this.level; + double x = this.getX(); + double y = this.getY(); + double z = this.getZ(); + return super.getDimensions(pose).scale((float) <@procedureOBJToNumberCode data.boundingBoxScale/>); + <#else> + return super.getDimensions(pose).scale(${data.boundingBoxScale.getFixedValue()}f); + + } + + <#if data.flyingMob> @Override protected void checkFallDamage(double y, boolean onGroundIn, BlockState state, BlockPos pos) { } diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/livingentity/livingentity_renderer.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/livingentity/livingentity_renderer.java.ftl index bbed9d45f98..35603223327 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/livingentity/livingentity_renderer.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/livingentity/livingentity_renderer.java.ftl @@ -100,18 +100,54 @@ public class ${name}Renderer extends <#if humanoid>HumanoidMobRenderer<${n new HumanoidModel(context.bakeLayer(ModelLayers.PLAYER_OUTER_ARMOR)), context.getModelManager())); - <#if data.mobModelGlowTexture?has_content> - this.addLayer(new EyesLayer<${name}Entity, ${model}>(this) { - @Override public RenderType renderType() { - return RenderType.eyes(new ResourceLocation("${modid}:textures/entities/${data.mobModelGlowTexture}")); + <#list data.modelLayers as layer> + this.addLayer(new RenderLayer<${name}Entity, ${model}>(this) { + final ResourceLocation LAYER_TEXTURE = new ResourceLocation("${modid}:textures/entities/${layer.texture}"); + + <#compress> + @Override public void render(PoseStack poseStack, MultiBufferSource bufferSource, int light, + ${name}Entity entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { + <#if hasProcedure(layer.condition)> + Level world = entity.level; + double x = entity.getX(); + double y = entity.getY(); + double z = entity.getZ(); + if (<@procedureOBJToConditionCode layer.condition/>) { + + + VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderType.<#if layer.glow>eyes<#else>entityCutoutNoCull(LAYER_TEXTURE)); + <#if layer.model != "Default"> + EntityModel model = new ${layer.model}(Minecraft.getInstance().getEntityModels().bakeLayer(${layer.model}.LAYER_LOCATION)); + this.getParentModel().copyPropertiesTo(model); + model.prepareMobModel(entity, limbSwing, limbSwingAmount, partialTicks); + model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + model.renderToBuffer(poseStack, vertexConsumer, 15728640, LivingEntityRenderer.getOverlayCoords(entity, 0), 1, 1, 1, 1); + <#else> + this.getParentModel().renderToBuffer(poseStack, vertexConsumer, 15728640, LivingEntityRenderer.getOverlayCoords(entity, 0), 1, 1, 1, 1); + + + <#if hasProcedure(layer.condition)>} } + }); - + } - <#if data.mobModelName == "Villager"> - @Override protected void scale(${name}Entity villager, PoseStack poseStack, float f) { - poseStack.scale(0.9375f, 0.9375f, 0.9375f); + <#if data.mobModelName == "Villager" || (data.visualScale?? && (data.visualScale.getFixedValue() != 1 || hasProcedure(data.visualScale)))> + @Override protected void scale(${name}Entity entity, PoseStack poseStack, float f) { + <#if hasProcedure(data.visualScale)> + Level world = entity.level; + double x = entity.getX(); + double y = entity.getY(); + double z = entity.getZ(); + float scale = (float) <@procedureOBJToNumberCode data.visualScale/>; + poseStack.scale(scale, scale, scale); + <#elseif data.visualScale?? && data.visualScale.getFixedValue() != 1> + poseStack.scale(${data.visualScale.getFixedValue()}f, ${data.visualScale.getFixedValue()}f, ${data.visualScale.getFixedValue()}f); + + <#if data.mobModelName == "Villager"> + poseStack.scale(0.9375f, 0.9375f, 0.9375f); + } diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/musicdisc.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/musicdisc.java.ftl index 496f394ff52..90427bc434c 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/musicdisc.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/musicdisc.java.ftl @@ -38,12 +38,8 @@ import net.minecraft.network.chat.Component; public class ${name}Item extends RecordItem { public ${name}Item() { - super(${data.analogOutput}, () -> - ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.music?has_content && data.music.getMappedValue()?has_content)?then(data.music, "intentionally_empty")}" - )), - new Item.Properties().stacksTo(1).rarity(Rarity.RARE), ${data.lengthInTicks} - ); + super(${data.analogOutput}, () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.music}")), + new Item.Properties().stacksTo(1).rarity(Rarity.${data.rarity}), ${data.lengthInTicks}); } <@addSpecialInformation data.specialInformation/> diff --git a/plugins/generator-1.19.4/forge-1.19.4/templates/plant/plant.java.ftl b/plugins/generator-1.19.4/forge-1.19.4/templates/plant/plant.java.ftl index a69b9d98e11..c7a98aa34fc 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/templates/plant/plant.java.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/templates/plant/plant.java.ftl @@ -64,21 +64,11 @@ public class ${name}Block extends <#if data.plantType == "normal">Flower<#elseif <#if data.isCustomSoundType> .sound(new ForgeSoundType(1.0f, 1.0f, - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.breakSound?has_content && data.breakSound.getMappedValue()?has_content)?then(data.breakSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.stepSound?has_content && data.stepSound.getMappedValue()?has_content)?then(data.stepSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.placeSound?has_content && data.placeSound.getMappedValue()?has_content)?then(data.placeSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.hitSound?has_content && data.hitSound.getMappedValue()?has_content)?then(data.hitSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.fallSound?has_content && data.fallSound.getMappedValue()?has_content)?then(data.fallSound, "intentionally_empty")}" - )) + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.breakSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.stepSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.placeSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.hitSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.fallSound}")) )) <#else> .sound(SoundType.${data.soundOnStep}) diff --git a/plugins/generator-1.19.4/forge-1.19.4/utils/mcitems.ftl b/plugins/generator-1.19.4/forge-1.19.4/utils/mcitems.ftl index d9db239459c..ec7764995ef 100644 --- a/plugins/generator-1.19.4/forge-1.19.4/utils/mcitems.ftl +++ b/plugins/generator-1.19.4/forge-1.19.4/utils/mcitems.ftl @@ -210,8 +210,8 @@ <#else> <#assign mapped = generator.map(mappedBlock.getUnmappedValue(), "blocksitems", 1) /> <#if mapped.startsWith("#")> - <#if customelement?has_content> - <#return "#" + mapped> + <#if acceptTags> + <#return mapped> <#else> <#return "minecraft:air"> diff --git a/plugins/generator-1.20.1/datapack-1.20.1/damagetype.definition.yaml b/plugins/generator-1.20.1/datapack-1.20.1/damagetype.definition.yaml new file mode 100644 index 00000000000..ed02ae948a4 --- /dev/null +++ b/plugins/generator-1.20.1/datapack-1.20.1/damagetype.definition.yaml @@ -0,0 +1,6 @@ +templates: + - template: damagetype.json.ftl + writer: json + name: "@MODDATAROOT/damage_type/@registryname.json" + +field_exclusions: [normalDeathMessage, itemDeathMessage, playerDeathMessage] \ No newline at end of file diff --git a/plugins/generator-1.20.1/datapack-1.20.1/mappings/damagesources.yaml b/plugins/generator-1.20.1/datapack-1.20.1/mappings/damagesources.yaml new file mode 100644 index 00000000000..53621cb8054 --- /dev/null +++ b/plugins/generator-1.20.1/datapack-1.20.1/mappings/damagesources.yaml @@ -0,0 +1,140 @@ +_default: + - DamageTypes.GENERIC + - generic +_mcreator_prefix: "CUSTOM:" +_mcreator_map_template: + - "ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(\"@modid:@registryname\"))" + - "@modid:@registryname" +_bypass_prefix: "#" +IN_FIRE: + - DamageTypes.IN_FIRE + - in_fire +LIGHTNING_BOLT: + - DamageTypes.LIGHTNING_BOLT + - lightning_bolt +ON_FIRE: + - DamageTypes.ON_FIRE + - on_fire +LAVA: + - DamageTypes.LAVA + - lava +HOT_FLOOR: + - DamageTypes.HOT_FLOOR + - hot_floor +IN_WALL: + - DamageTypes.IN_WALL + - in_wall +CRAMMING: + - DamageTypes.CRAMMING + - cramming +DROWN: + - DamageTypes.DROWN + - drown +STARVE: + - DamageTypes.STARVE + - starve +CACTUS: + - DamageTypes.CACTUS + - cactus +FALL: + - DamageTypes.FALL + - fall +FLY_INTO_WALL: + - DamageTypes.FLY_INTO_WALL + - fly_into_wall +OUT_OF_WORLD: + - DamageTypes.FELL_OUT_OF_WORLD + - out_of_world +GENERIC: + - DamageTypes.GENERIC + - generic +MAGIC: + - DamageTypes.MAGIC + - magic +WITHER: + - DamageTypes.WITHER + - wither +DRAGON_BREATH: + - DamageTypes.DRAGON_BREATH + - dragon_breath +DRYOUT: + - DamageTypes.DRY_OUT + - dry_out +SWEET_BERRY_BUSH: + - DamageTypes.SWEET_BERRY_BUSH + - sweet_berry_bush +FREEZE: + - DamageTypes.FREEZE + - freeze +STALAGMITE: + - DamageTypes.STALAGMITE + - stalagmite +FALLING_BLOCK: + - DamageTypes.FALLING_BLOCK + - falling_block +ANVIL: + - DamageTypes.FALLING_ANVIL + - falling_anvil +FALLING_STALACTITE: + - DamageTypes.FALLING_STALACTITE + - falling_stalactite +STING: + - DamageTypes.STING + - sting +MOB_ATTACK: + - DamageTypes.MOB_ATTACK + - mob_attack +MOB_ATTACK_NO_AGGRO: + - DamageTypes.MOB_ATTACK_NO_AGGRO + - mob_attack_no_aggro +PLAYER_ATTACK: + - DamageTypes.PLAYER_ATTACK + - player_attack +ARROW: + - DamageTypes.ARROW + - arrow +TRIDENT: + - DamageTypes.TRIDENT + - trident +MOB_PROJECTILE: + - DamageTypes.MOB_PROJECTILE + - mob_projectile +FIREWORKS: + - DamageTypes.FIREWORKS + - fireworks +FIREBALL: + - DamageTypes.FIREBALL + - fireball +UNATTRIBUTED_FIREBALL: + - DamageTypes.UNATTRIBUTED_FIREBALL + - unattributed_fireball +WITHER_SKULL: + - DamageTypes.WITHER_SKULL + - wither_skull +THROWN: + - DamageTypes.THROWN + - thrown +INDIRECT_MAGIC: + - DamageTypes.INDIRECT_MAGIC + - indirect_magic +THORNS: + - DamageTypes.THORNS + - thorns +EXPLOSION: + - DamageTypes.EXPLOSION + - explosion +PLAYER_EXPLOSION: + - DamageTypes.PLAYER_EXPLOSION + - player_explosion +SONIC_BOOM: + - DamageTypes.SONIC_BOOM + - sonic_boom +BAD_RESPAWN_POINT: + - DamageTypes.BAD_RESPAWN_POINT + - bad_respawn_point +OUTSIDE_BORDER: + - DamageTypes.OUTSIDE_BORDER + - outside_border +GENERIC_KILL: + - DamageTypes.GENERIC_KILL + - generic_kill \ No newline at end of file diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/damagetype.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/damagetype.json.ftl new file mode 100644 index 00000000000..d5638977ab5 --- /dev/null +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/damagetype.json.ftl @@ -0,0 +1,8 @@ +{ + "exhaustion": ${data.exhaustion}, + "message_id": "${registryname}", + "scaling": "${data.scaling}" + <#if data.effects != "hurt">, + "effects": "${data.effects}" + +} \ No newline at end of file diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_end.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_end.json.ftl index f40ad63dcee..86c4a4a0191 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_end.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_end.json.ftl @@ -11,9 +11,9 @@ "name": "${modid}:${registryname}", "sea_level": 0, "legacy_random_source": true, - "disable_mob_generation": ${!data.imitateOverworldBehaviour}, - "aquifers_enabled": ${data.imitateOverworldBehaviour}, - "ore_veins_enabled": ${data.imitateOverworldBehaviour}, + "disable_mob_generation": false, + "aquifers_enabled": false, + "ore_veins_enabled": false, "default_block": ${mappedMCItemToBlockStateJSON(data.mainFillerBlock)}, "default_fluid": ${mappedMCItemToBlockStateJSON(data.fluidBlock)}, "spawn_target": [], diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_nether.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_nether.json.ftl index 3e02d4f7132..fab9e58382a 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_nether.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_nether.json.ftl @@ -11,9 +11,9 @@ "name": "${modid}:${registryname}", "sea_level": 32, "legacy_random_source": true, - "disable_mob_generation": ${!data.imitateOverworldBehaviour}, - "aquifers_enabled": ${data.imitateOverworldBehaviour}, - "ore_veins_enabled": ${data.imitateOverworldBehaviour}, + "disable_mob_generation": false, + "aquifers_enabled": false, + "ore_veins_enabled": false, "default_block": ${mappedMCItemToBlockStateJSON(data.mainFillerBlock)}, "default_fluid": ${mappedMCItemToBlockStateJSON(data.fluidBlock)}, "spawn_target": [], diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_overworld.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_overworld.json.ftl index 01b1ba0a88e..14c876dcb39 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_overworld.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_overworld.json.ftl @@ -11,9 +11,9 @@ "name": "${modid}:${registryname}", "sea_level": 63, "legacy_random_source": false, - "disable_mob_generation": ${!data.imitateOverworldBehaviour}, - "aquifers_enabled": ${data.imitateOverworldBehaviour}, - "ore_veins_enabled": ${data.imitateOverworldBehaviour}, + "disable_mob_generation": false, + "aquifers_enabled": true, + "ore_veins_enabled": true, "default_block": ${mappedMCItemToBlockStateJSON(data.mainFillerBlock)}, "default_fluid": ${mappedMCItemToBlockStateJSON(data.fluidBlock)}, "spawn_target": [], diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_type.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_type.json.ftl index 19db94b83b0..a5cf44e9cbb 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_type.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/dimension_type.json.ftl @@ -33,5 +33,9 @@ }, "monster_spawn_block_light_limit": 0, + <#if var_customeffects?? && var_customeffects == "true"> + "effects": "${modid}:${registryname}" + <#else> "effects": "<#if data.hasFog>minecraft:the_nether<#else>minecraft:overworld" + } \ No newline at end of file diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/surface_builder.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/surface_builder.json.ftl index d3a21398511..9676217d67c 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/surface_builder.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/dimension/surface_builder.json.ftl @@ -3,7 +3,7 @@ <#macro vanilla biome> <#if biome?contains("badlands")> - <@vanillaSB biome w.itemBlock("Blocks.SAND#1") w.itemBlock("Blocks.STAINED_HARDENED_CLAY") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> + <@vanillaSB biome w.itemBlock("Blocks.SAND#1") w.itemBlock("Blocks.HARDENED_CLAY") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> <#elseif biome == "basalt_deltas"> <@vanillaSB biome w.itemBlock("Blocks.BLACKSTONE") w.itemBlock("Blocks.BASALT") w.itemBlock("Blocks.MAGMA") data.worldGenType != "Normal world gen"/> <#elseif biome == "crimson_forest"> @@ -15,19 +15,17 @@ <#elseif biome == "deep_dark"> <@vanillaSB biome w.itemBlock("Blocks.SCULK") w.itemBlock("Blocks.DEEPSLATE") w.itemBlock("Blocks.DEEPSLATE") data.worldGenType != "Normal world gen"/> <#elseif biome?contains("mushroom_field")> - <@vanillaSB biome w.itemBlock("Blocks.MYCELIUM") w.itemBlock("Blocks.DIRT") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> + <@vanillaSB biome w.itemBlock("Blocks.MYCELIUM") w.itemBlock("Blocks.DIRT#0") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> <#elseif biome == "nether"> <@vanillaSB biome w.itemBlock("Blocks.NETHERRACK") w.itemBlock("Blocks.NETHERRACK") w.itemBlock("Blocks.NETHERRACK") data.worldGenType != "Normal world gen"/> <#elseif biome == "soul_sand_valley"> <@vanillaSB biome w.itemBlock("Blocks.SOUL_SAND") w.itemBlock("Blocks.SOUL_SAND") w.itemBlock("Blocks.SOUL_SAND") data.worldGenType != "Normal world gen"/> <#elseif biome == "stone_beach"> - <@vanillaSB biome w.itemBlock("Blocks.STONE") w.itemBlock("Blocks.STONE") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> - <#elseif biome == "warped_forest"> - <@vanillaSB biome w.itemBlock("Blocks.WARPED_NYLIUM") w.itemBlock("Blocks.NETHERRACK") w.itemBlock("Blocks.WARPED_WART_BLOCK") data.worldGenType != "Normal world gen"/> + <@vanillaSB biome w.itemBlock("Blocks.STONE#0") w.itemBlock("Blocks.STONE#0") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> <#elseif biome == "warped_forest"> <@vanillaSB biome w.itemBlock("Blocks.WARPED_NYLIUM") w.itemBlock("Blocks.NETHERRACK") w.itemBlock("Blocks.WARPED_WART_BLOCK") data.worldGenType != "Normal world gen"/> <#else> - <@vanillaSB biome w.itemBlock("Blocks.GRASS") w.itemBlock("Blocks.DIRT") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> + <@vanillaSB biome w.itemBlock("Blocks.GRASS") w.itemBlock("Blocks.DIRT#0") w.itemBlock("Blocks.GRAVEL") data.worldGenType != "Normal world gen"/> diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/recipe/crafting.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/recipe/crafting.json.ftl index 34aa64327aa..62dfa7952f7 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/recipe/crafting.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/recipe/crafting.json.ftl @@ -20,15 +20,15 @@ ], <#else> <#assign recipeArray = data.getOptimisedRecipe()> - <#assign rm = [], i = 0> + <#assign patternKeys = data.getPatternKeys()> "pattern": [ <#list recipeArray as rl> - "<#list rl as re><#if !re.isEmpty()><#assign rm+=["\"${i}\": {${mappedMCItemToItemObjectJSON(re)}}"]/>${i}<#else> <#assign i+=1>"<#sep>, + "<#list rl as re><#if !re.isEmpty()>${patternKeys.get(re)}<#else> "<#sep>, ], "key": { - <#list rm as recipeMapping> - ${recipeMapping}<#sep>, + <#list patternKeys.keySet() as item> + "${patternKeys.get(item)}": {${mappedMCItemToItemObjectJSON(item)}}<#sep>, }, diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/recipe/smithing.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/recipe/smithing.json.ftl index 797f49faedf..3a6c78b02cf 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/recipe/smithing.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/recipe/smithing.json.ftl @@ -2,7 +2,13 @@ <#include "../mcitems.ftl"> { "type": "minecraft:smithing_transform", + <#if data.smithingInputTemplateStack?? && !data.smithingInputTemplateStack.isEmpty()> + "template": { + ${mappedMCItemToItemObjectJSON(data.smithingInputTemplateStack)} + }, + <#else> "template": [], + "base": { ${mappedMCItemToItemObjectJSON(data.smithingInputStack)} }, diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/structure/template_pool.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/structure/template_pool.json.ftl index e493fa46d22..0434d5c4792 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/structure/template_pool.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/structure/template_pool.json.ftl @@ -1,3 +1,4 @@ +<#include "../mcitems.ftl"> { "name": "${modid}:${registryname}", "fallback": "minecraft:empty", @@ -10,27 +11,18 @@ "projection": "${data.projection}", "processors": { "processors": [ + <#if data.ignoredBlocks?has_content> { "processor_type": "minecraft:block_ignore", "blocks": [ - <#if data.ignoreBlocks == "STRUCTURE_BLOCK"> + <#list data.ignoredBlocks as block> { - "Name": "minecraft:structure_block" - } - <#elseif data.ignoreBlocks == "AIR_AND_STRUCTURE_BLOCK"> - { - "Name": "minecraft:structure_block" - }, - { - "Name": "minecraft:air" - } - <#elseif data.ignoreBlocks == "AIR"> - { - "Name": "minecraft:air" - } - + "Name": "${mappedMCItemToRegistryName(block)}" + }<#sep>, + ] } + ] } } diff --git a/plugins/generator-1.20.1/datapack-1.20.1/templates/tag.json.ftl b/plugins/generator-1.20.1/datapack-1.20.1/templates/tag.json.ftl index 6caa1ffbd2e..a5c2d80f0db 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/templates/tag.json.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/templates/tag.json.ftl @@ -1,13 +1,14 @@ <#include "mcitems.ftl"> +<#assign tag = data.getNamespace() + ":" + data.getName()> { "replace": false, "values": [ <#if data.type == "Items"> - <#list w.filterBrokenReferences(data.items) as value> + <#list w.normalizeTagElements(tag, 1, data.items) as value> "${mappedMCItemToRegistryName(value, true)}"<#if value?has_next>, <#elseif data.type == "Blocks"> - <#list w.filterBrokenReferences(data.blocks) as value> + <#list w.normalizeTagElements(tag, 1, data.blocks) as value> "${mappedMCItemToRegistryName(value, true)}"<#if value?has_next>, <#elseif data.type == "Functions"> @@ -16,14 +17,18 @@ <#if value?has_next>, <#elseif data.type == "Entities"> - <#list w.filterBrokenReferences(data.entities) as value> + <#list w.normalizeTagElements(tag, 2, data.entities) as value> "${generator.map(value.getUnmappedValue(), "entities", 2)}" <#if value?has_next>, <#elseif data.type == "Biomes"> - <#list w.filterBrokenReferences(data.biomes) as value> + <#list w.normalizeTagElements(tag, 0, data.biomes) as value> "${value}"<#if value?has_next>, + <#elseif data.type == "Damage types"> + <#list w.normalizeTagElements(tag, 1, data.damageTypes) as value> + "${generator.map(value.getUnmappedValue(), "damagesources", 1)}"<#sep>, + ] } \ No newline at end of file diff --git a/plugins/generator-1.20.1/datapack-1.20.1/utils/mcitems.ftl b/plugins/generator-1.20.1/datapack-1.20.1/utils/mcitems.ftl index 515d4c468d2..68f718297b2 100644 --- a/plugins/generator-1.20.1/datapack-1.20.1/utils/mcitems.ftl +++ b/plugins/generator-1.20.1/datapack-1.20.1/utils/mcitems.ftl @@ -44,8 +44,8 @@ <#else> <#assign mapped = generator.map(mappedBlock.getUnmappedValue(), "blocksitems", 1) /> <#if mapped.startsWith("#")> - <#if customelement?has_content> - <#return "#" + mapped> + <#if acceptTags> + <#return mapped> <#else> <#return "minecraft:air"> diff --git a/plugins/generator-1.20.1/forge-1.20.1/damagetype.definition.yaml b/plugins/generator-1.20.1/forge-1.20.1/damagetype.definition.yaml new file mode 100644 index 00000000000..9f76b539ee4 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/damagetype.definition.yaml @@ -0,0 +1,12 @@ +templates: + - template: damagetype.json.ftl # loaded from datapack generator + writer: json + name: "@MODDATAROOT/damage_type/@registryname.json" + +localizationkeys: + - key: death.attack.@registryname + mapto: normalDeathMessage + - key: death.attack.@registryname.item + mapto: itemDeathMessage + - key: death.attack.@registryname.player + mapto: playerDeathMessage \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/dimension.definition.yaml b/plugins/generator-1.20.1/forge-1.20.1/dimension.definition.yaml index 7c588dcc694..8407869dd91 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/dimension.definition.yaml +++ b/plugins/generator-1.20.1/forge-1.20.1/dimension.definition.yaml @@ -15,6 +15,7 @@ templates: name: "@SRCROOT/@BASEPACKAGEPATH/item/@NAMEItem.java" - template: dimension/dimension_type.json.ftl # loaded from datapack generator + variables: "customeffects=true" writer: json name: "@MODDATAROOT/dimension_type/@registryname.json" - template: dimension/dimension_overworld.json.ftl # loaded from datapack generator diff --git a/plugins/generator-1.20.1/forge-1.20.1/mappings/damagesources.yaml b/plugins/generator-1.20.1/forge-1.20.1/mappings/damagesources.yaml deleted file mode 100644 index 07ed5b6a2a9..00000000000 --- a/plugins/generator-1.20.1/forge-1.20.1/mappings/damagesources.yaml +++ /dev/null @@ -1,45 +0,0 @@ -_default: DamageTypes.GENERIC -IN_FIRE: DamageTypes.IN_FIRE -LIGHTNING_BOLT: DamageTypes.LIGHTNING_BOLT -ON_FIRE: DamageTypes.ON_FIRE -LAVA: DamageTypes.LAVA -HOT_FLOOR: DamageTypes.HOT_FLOOR -IN_WALL: DamageTypes.IN_WALL -CRAMMING: DamageTypes.CRAMMING -DROWN: DamageTypes.DROWN -STARVE: DamageTypes.STARVE -CACTUS: DamageTypes.CACTUS -FALL: DamageTypes.FALL -FLY_INTO_WALL: DamageTypes.FLY_INTO_WALL -OUT_OF_WORLD: DamageTypes.FELL_OUT_OF_WORLD -GENERIC: DamageTypes.GENERIC -MAGIC: DamageTypes.MAGIC -WITHER: DamageTypes.WITHER -DRAGON_BREATH: DamageTypes.DRAGON_BREATH -DRYOUT: DamageTypes.DRY_OUT -SWEET_BERRY_BUSH: DamageTypes.SWEET_BERRY_BUSH -FREEZE: DamageTypes.FREEZE -STALAGMITE: DamageTypes.STALAGMITE -FALLING_BLOCK: DamageTypes.FALLING_BLOCK -ANVIL: DamageTypes.FALLING_ANVIL -FALLING_STALACTITE: DamageTypes.FALLING_STALACTITE -STING: DamageTypes.STING -MOB_ATTACK: DamageTypes.MOB_ATTACK -MOB_ATTACK_NO_AGGRO: DamageTypes.MOB_ATTACK_NO_AGGRO -PLAYER_ATTACK: DamageTypes.PLAYER_ATTACK -ARROW: DamageTypes.ARROW -TRIDENT: DamageTypes.TRIDENT -MOB_PROJECTILE: DamageTypes.MOB_PROJECTILE -FIREWORKS: DamageTypes.FIREWORKS -FIREBALL: DamageTypes.FIREBALL -UNATTRIBUTED_FIREBALL: DamageTypes.UNATTRIBUTED_FIREBALL -WITHER_SKULL: DamageTypes.WITHER_SKULL -THROWN: DamageTypes.THROWN -INDIRECT_MAGIC: DamageTypes.INDIRECT_MAGIC -THORNS: DamageTypes.THORNS -EXPLOSION: DamageTypes.EXPLOSION -PLAYER_EXPLOSION: DamageTypes.PLAYER_EXPLOSION -SONIC_BOOM: DamageTypes.SONIC_BOOM -BAD_RESPAWN_POINT: DamageTypes.BAD_RESPAWN_POINT -OUTSIDE_BORDER: DamageTypes.OUTSIDE_BORDER -GENERIC_KILL: DamageTypes.GENERIC_KILL \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/damagesource_is_tagged_in.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/damagesource_is_tagged_in.java.ftl new file mode 100644 index 00000000000..8a15428543d --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/damagesource_is_tagged_in.java.ftl @@ -0,0 +1,2 @@ +<#include "mcelements.ftl"> +(${input$damagesource}.is(TagKey.create(Registries.DAMAGE_TYPE, ${toResourceLocation(input$tag)}))) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_check_main_hand.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_check_main_hand.java.ftl new file mode 100644 index 00000000000..84cfba70a08 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_check_main_hand.java.ftl @@ -0,0 +1 @@ +(${input$entity} instanceof LivingEntity _entMainHand${cbi} && _entMainHand${cbi}.getMainArm() == HumanoidArm.${field$hand}) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_integer_get.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_integer_get.java.ftl new file mode 100644 index 00000000000..0788a4545b2 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_integer_get.java.ftl @@ -0,0 +1,2 @@ +(${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntI ? + _datEntI.getEntityData().get(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}) : 0) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_integer_set.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_integer_set.java.ftl new file mode 100644 index 00000000000..304968e093c --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_integer_set.java.ftl @@ -0,0 +1,2 @@ +if (${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntSetI) + _datEntSetI.getEntityData().set(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}, ${opt.toInt(input$value)}); \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_logic_get.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_logic_get.java.ftl new file mode 100644 index 00000000000..d8b15b994f8 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_logic_get.java.ftl @@ -0,0 +1,2 @@ +(${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntL${cbi} && + _datEntL${cbi}.getEntityData().get(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor})) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_logic_set.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_logic_set.java.ftl new file mode 100644 index 00000000000..edb5cb9735c --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_logic_set.java.ftl @@ -0,0 +1,2 @@ +if (${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntSetL) + _datEntSetL.getEntityData().set(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}, ${input$value}); \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_string_get.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_string_get.java.ftl new file mode 100644 index 00000000000..324c82c59d6 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_string_get.java.ftl @@ -0,0 +1,2 @@ +(${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntS ? + _datEntS.getEntityData().get(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}) : "") \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_string_set.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_string_set.java.ftl new file mode 100644 index 00000000000..6adb914fb79 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_data_string_set.java.ftl @@ -0,0 +1,2 @@ +if (${input$entity} instanceof ${generator.map(field$customEntity, "entities")} _datEntSetS) + _datEntSetS.getEntityData().set(${generator.map(field$customEntity, "entities")}.DATA_${field$accessor}, ${input$value}); \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_get_use_item.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_get_use_item.java.ftl new file mode 100644 index 00000000000..ca14f2bbd58 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_get_use_item.java.ftl @@ -0,0 +1 @@ +/*@ItemStack*/(${input$entity} instanceof LivingEntity _entUseItem${cbi} ? _entUseItem${cbi}.getUseItem() : ItemStack.EMPTY) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_get_use_item_ticks.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_get_use_item_ticks.java.ftl new file mode 100644 index 00000000000..29440ad59cf --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/entity_get_use_item_ticks.java.ftl @@ -0,0 +1 @@ +/*@int*/(${input$entity} instanceof LivingEntity _entUseTicks${cbi} ? _entUseTicks${cbi}.getTicksUsingItem() : 0) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/item_get_cooldown.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/item_get_cooldown.java.ftl new file mode 100644 index 00000000000..fb47048a76f --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/item_get_cooldown.java.ftl @@ -0,0 +1,2 @@ +<#include "mcitems.ftl"> +/*@float*/(${input$entity} instanceof Player _plrCldRem${cbi} ? _plrCldRem${cbi}.getCooldowns().getCooldownPercent(${mappedMCItemToItem(input$item)}, 0f) * 100 : 0) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/item_is_cooldown.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/item_is_cooldown.java.ftl new file mode 100644 index 00000000000..6e4a1755a67 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/item_is_cooldown.java.ftl @@ -0,0 +1,2 @@ +<#include "mcitems.ftl"> +(${input$entity} instanceof Player _plrCldCheck${cbi} && _plrCldCheck${cbi}.getCooldowns().isOnCooldown(${mappedMCItemToItem(input$item)})) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/team_add_entity.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_add_entity.java.ftl new file mode 100644 index 00000000000..38cc489e7db --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_add_entity.java.ftl @@ -0,0 +1,10 @@ +{ + Entity _entityTeam = ${input$entity}; + PlayerTeam _pt = _entityTeam.level().getScoreboard().getPlayerTeam(${input$name}); + if (_pt != null) { + if (_entityTeam instanceof Player _player) + _entityTeam.level().getScoreboard().addPlayerToTeam(_player.getGameProfile().getName(), _pt); + else + _entityTeam.level().getScoreboard().addPlayerToTeam(_entityTeam.getStringUUID(), _pt); + } +} \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/team_create_new.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_create_new.java.ftl new file mode 100644 index 00000000000..53d62a2cf33 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_create_new.java.ftl @@ -0,0 +1,2 @@ +if (world instanceof Level _level) + _level.getScoreboard().addPlayerTeam(${input$name}); \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/team_delete.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_delete.java.ftl new file mode 100644 index 00000000000..3835ddf0d7d --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_delete.java.ftl @@ -0,0 +1,5 @@ +if (world instanceof Level _level) { + PlayerTeam _pt = _level.getScoreboard().getPlayerTeam(${input$name}); + if (_pt != null) + _level.getScoreboard().removePlayerTeam(_pt); +} \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/team_get_entity_team.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_get_entity_team.java.ftl new file mode 100644 index 00000000000..6ff934eb72e --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_get_entity_team.java.ftl @@ -0,0 +1,2 @@ +(${input$entity} instanceof LivingEntity _teamEnt && _teamEnt.level().getScoreboard().getPlayersTeam(_teamEnt.getStringUUID()) != null ? + _teamEnt.level().getScoreboard().getPlayersTeam(_teamEnt instanceof Player _pl ? _pl.getGameProfile().getName() : _teamEnt.getStringUUID()).getName() : "") \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/team_get_friendlyfire.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_get_friendlyfire.java.ftl new file mode 100644 index 00000000000..4083859d53a --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_get_friendlyfire.java.ftl @@ -0,0 +1 @@ +(world instanceof Level _level && _level.getScoreboard().getPlayerTeam(${input$name}) != null ? _level.getScoreboard().getPlayerTeam(${input$name}).isAllowFriendlyFire() : false) \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/team_remove_entity.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_remove_entity.java.ftl new file mode 100644 index 00000000000..d7bc1d651c1 --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_remove_entity.java.ftl @@ -0,0 +1,6 @@ +{ + Entity _entityTeam = ${input$entity}; + PlayerTeam _pt = _entityTeam.level().getScoreboard().getPlayerTeam(${input$name}); + if (_pt != null) + _entityTeam.level().getScoreboard().removePlayerFromTeam(_entityTeam.getStringUUID(), _pt); +} \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/procedures/team_set_friendlyfire.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_set_friendlyfire.java.ftl new file mode 100644 index 00000000000..a4caba63faf --- /dev/null +++ b/plugins/generator-1.20.1/forge-1.20.1/procedures/team_set_friendlyfire.java.ftl @@ -0,0 +1,5 @@ +if (world instanceof Level _level) { + PlayerTeam _pt = _level.getScoreboard().getPlayerTeam(${input$name}); + if (_pt != null) + _pt.setAllowFriendlyFire(${input$condition}); +} \ No newline at end of file diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_fruits_decorator.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_fruits_decorator.java.ftl index aad47963efe..7f14d428f43 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_fruits_decorator.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_fruits_decorator.java.ftl @@ -14,7 +14,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License - # along setValue this program. If not, see . + # along with this program. If not, see . # # Additional permission for code generator templates (*.ftl files) # diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_leave_decorator.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_leave_decorator.java.ftl index 83069180eab..87861a5e3d7 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_leave_decorator.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_leave_decorator.java.ftl @@ -14,7 +14,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License - # along setValue this program. If not, see . + # along with this program. If not, see . # # Additional permission for code generator templates (*.ftl files) # diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_trunk_decorator.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_trunk_decorator.java.ftl index d811645509f..ca512fed265 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_trunk_decorator.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/biome/tree_trunk_decorator.java.ftl @@ -14,7 +14,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License - # along setValue this program. If not, see . + # along with this program. If not, see . # # Additional permission for code generator templates (*.ftl files) # diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/block/block.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/block/block.java.ftl index f2c5ea36aa3..d101e575e0d 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/block/block.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/block/block.java.ftl @@ -86,21 +86,11 @@ public class ${name}Block extends <#if data.isCustomSoundType> .sound(new ForgeSoundType(1.0f, 1.0f, - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.breakSound?has_content && data.breakSound.getMappedValue()?has_content)?then(data.breakSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.stepSound?has_content && data.stepSound.getMappedValue()?has_content)?then(data.stepSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.placeSound?has_content && data.placeSound.getMappedValue()?has_content)?then(data.placeSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.hitSound?has_content && data.hitSound.getMappedValue()?has_content)?then(data.hitSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.fallSound?has_content && data.fallSound.getMappedValue()?has_content)?then(data.fallSound, "intentionally_empty")}" - )) + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.breakSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.stepSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.placeSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.hitSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.fallSound}")) )) <#else> .sound(SoundType.${data.soundOnStep}) diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/dimension/dimension.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/dimension/dimension.java.ftl index d4b52d3a100..089f8c64fbd 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/dimension/dimension.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/dimension/dimension.java.ftl @@ -34,14 +34,19 @@ package ${package}.world.dimension; +<#compress> @Mod.EventBusSubscriber public class ${name}Dimension { @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public static class DimensionSpecialEffectsHandler { @SubscribeEvent @OnlyIn(Dist.CLIENT) public static void registerDimensionSpecialEffects(RegisterDimensionSpecialEffectsEvent event) { - DimensionSpecialEffects customEffect = new DimensionSpecialEffects(<#if data.imitateOverworldBehaviour>128<#else>Float.NaN, - true, <#if data.imitateOverworldBehaviour>DimensionSpecialEffects.SkyType.NORMAL<#else>DimensionSpecialEffects.SkyType.NONE, false, false) { - + DimensionSpecialEffects customEffect = new DimensionSpecialEffects( + <#if data.imitateOverworldBehaviour>DimensionSpecialEffects.OverworldEffects.CLOUD_LEVEL<#else>Float.NaN, + true, + <#if data.imitateOverworldBehaviour>DimensionSpecialEffects.SkyType.NORMAL<#else>DimensionSpecialEffects.SkyType.NONE, + false, + false + ) { @Override public Vec3 getBrightnessDependentFogColor(Vec3 color, float sunHeight) { <#if data.airColor?has_content> return new Vec3(${data.airColor.getRed()/255},${data.airColor.getGreen()/255},${data.airColor.getBlue()/255}); @@ -58,7 +63,6 @@ package ${package}.world.dimension; return ${data.hasFog}; } }; - event.register(new ResourceLocation("${modid}:${registryname}"), customEffect); } @@ -87,3 +91,4 @@ package ${package}.world.dimension; } + diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/elementinits/items.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/elementinits/items.java.ftl index be6594a2007..905a7b07644 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/elementinits/items.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/elementinits/items.java.ftl @@ -71,21 +71,19 @@ public class ${JavaModName}Items { public static final RegistryObject ${item.getModElement().getRegistryNameUpper()}_SPAWN_EGG = REGISTRY.register("${item.getModElement().getRegistryName()}_spawn_egg", () -> new ForgeSpawnEggItem(${JavaModName}Entities.${item.getModElement().getRegistryNameUpper()}, ${item.spawnEggBaseColor.getRGB()}, ${item.spawnEggDotColor.getRGB()}, new Item.Properties())); - <#elseif item.getModElement().getTypeString() == "fluid" && item.generateBucket> - public static final RegistryObject ${item.getModElement().getRegistryNameUpper()}_BUCKET = - REGISTRY.register("${item.getModElement().getRegistryName()}_bucket", () -> new ${item.getModElement().getName()}Item()); <#elseif item.getModElement().getTypeString() == "dimension" && item.hasIgniter()> public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = REGISTRY.register("${item.getModElement().getRegistryName()}", () -> new ${item.getModElement().getName()}Item()); - <#elseif item.getModElement().getType().getBaseType()?string == "BLOCK"> - <#if (item.getModElement().getTypeString() == "block" && item.isDoubleBlock()) || (item.getModElement().getTypeString() == "plant" && item.isDoubleBlock())> + <#elseif item.getModElement().getTypeString() == "fluid" && item.generateBucket> + public static final RegistryObject ${item.getModElement().getRegistryNameUpper()}_BUCKET = + REGISTRY.register("${item.getModElement().getRegistryName()}_bucket", () -> new ${item.getModElement().getName()}Item()); + <#elseif item.getModElement().getTypeString() == "block" || item.getModElement().getTypeString() == "plant"> + <#if item.isDoubleBlock()> <#assign hasDoubleBlocks = true> - public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = - doubleBlock(${JavaModName}Blocks.${item.getModElement().getRegistryNameUpper()}); + public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = doubleBlock(${JavaModName}Blocks.${item.getModElement().getRegistryNameUpper()}); <#else> <#assign hasBlocks = true> - public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = - block(${JavaModName}Blocks.${item.getModElement().getRegistryNameUpper()}); + public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = block(${JavaModName}Blocks.${item.getModElement().getRegistryNameUpper()}); <#else> public static final RegistryObject ${item.getModElement().getRegistryNameUpper()} = diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/feature/structure_feature.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/feature/structure_feature.java.ftl index 01d430785f0..7ba6f698274 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/feature/structure_feature.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/feature/structure_feature.java.ftl @@ -52,7 +52,7 @@ import com.mojang.serialization.Codec; // Load the structure template StructureTemplateManager structureManager = worldGenLevel.getLevel().getServer().getStructureManager(); StructureTemplate template = structureManager.getOrCreate(config.structure()); - StructurePlaceSettings placeSettings = (new StructurePlaceSettings()).setRotation(rotation).setMirror(mirror).setRandom(random).setIgnoreEntities(true) + StructurePlaceSettings placeSettings = (new StructurePlaceSettings()).setRotation(rotation).setMirror(mirror).setRandom(random).setIgnoreEntities(false) .addProcessor(new BlockIgnoreProcessor(config.ignoredBlocks().stream().map(Holder::get).toList())); template.placeInWorld(worldGenLevel, placePos, placePos, placeSettings, random, 4); return true; diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/item/item.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/item/item.java.ftl index beecdec7df1..1398560876b 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/item/item.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/item/item.java.ftl @@ -349,7 +349,14 @@ public class ${name}Item extends Item { } <#if hasProcedure(data.onRangedItemUsed)> - <@procedureOBJToCode data.onRangedItemUsed/> + <@procedureCode data.onRangedItemUsed, { + "x": "entity.getX()", + "y": "entity.getY()", + "z": "entity.getZ()", + "world": "world", + "entity": "entity", + "itemstack": "stack" + }/> } diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/livingentity/livingentity.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/livingentity/livingentity.java.ftl index ca9f998afce..f98d6b46cd3 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/livingentity/livingentity.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/livingentity/livingentity.java.ftl @@ -37,6 +37,7 @@ package ${package}.entity; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.nbt.Tag; +import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.sounds.SoundEvent; import javax.annotation.Nullable; @@ -55,6 +56,16 @@ import javax.annotation.Nullable; public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements RangedAttackMob { + <#list data.entityDataEntries as entry> + <#if entry.value().getClass().getSimpleName() == "Integer"> + public static final EntityDataAccessor DATA_${entry.property().getName()} = SynchedEntityData.defineId(${name}Entity.class, EntityDataSerializers.INT); + <#elseif entry.value().getClass().getSimpleName() == "Boolean"> + public static final EntityDataAccessor DATA_${entry.property().getName()} = SynchedEntityData.defineId(${name}Entity.class, EntityDataSerializers.BOOLEAN); + <#elseif entry.value().getClass().getSimpleName() == "String"> + public static final EntityDataAccessor DATA_${entry.property().getName()} = SynchedEntityData.defineId(${name}Entity.class, EntityDataSerializers.STRING); + + + <#if data.isBoss> private final ServerBossEvent bossInfo = new ServerBossEvent(this.getDisplayName(), ServerBossEvent.BossBarColor.${data.bossBarColor}, ServerBossEvent.BossBarOverlay.${data.bossBarType}); @@ -140,12 +151,25 @@ public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements R } }; + + <#if data.boundingBoxScale?? && data.boundingBoxScale.getFixedValue() != 1 && !hasProcedure(data.boundingBoxScale)> + refreshDimensions(); + } @Override public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } + <#if data.entityDataEntries?has_content> + @Override protected void defineSynchedData() { + super.defineSynchedData(); + <#list data.entityDataEntries as entry> + this.entityData.define(DATA_${entry.property().getName()}, ${entry.value()?is_string?then("\"" + entry.value() + "\"", entry.value())}); + + } + + <#if data.flyingMob> @Override protected PathNavigation createNavigation(Level world) { return new FlyingPathNavigation(this, world); @@ -409,19 +433,43 @@ public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements R } } } + + <#if data.entityDataEntries?has_content || (data.guiBoundTo?has_content && data.guiBoundTo != "")> @Override public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); + super.addAdditionalSaveData(compound); + <#list data.entityDataEntries as entry> + <#if entry.value().getClass().getSimpleName() == "Integer"> + compound.putInt("Data${entry.property().getName()}", this.entityData.get(DATA_${entry.property().getName()})); + <#elseif entry.value().getClass().getSimpleName() == "Boolean"> + compound.putBoolean("Data${entry.property().getName()}", this.entityData.get(DATA_${entry.property().getName()})); + <#elseif entry.value().getClass().getSimpleName() == "String"> + compound.putString("Data${entry.property().getName()}", this.entityData.get(DATA_${entry.property().getName()})); + + + <#if data.guiBoundTo?has_content && data.guiBoundTo != ""> compound.put("InventoryCustom", inventory.serializeNBT()); + } @Override public void readAdditionalSaveData(CompoundTag compound) { - super.readAdditionalSaveData(compound); - Tag inventoryCustom = compound.get("InventoryCustom"); - if (inventoryCustom instanceof CompoundTag inventoryTag) + super.readAdditionalSaveData(compound); + <#list data.entityDataEntries as entry> + if (compound.contains("Data${entry.property().getName()}")) + <#if entry.value().getClass().getSimpleName() == "Integer"> + this.entityData.set(DATA_${entry.property().getName()}, compound.getInt("Data${entry.property().getName()}")); + <#elseif entry.value().getClass().getSimpleName() == "Boolean"> + this.entityData.set(DATA_${entry.property().getName()}, compound.getBoolean("Data${entry.property().getName()}")); + <#elseif entry.value().getClass().getSimpleName() == "String"> + this.entityData.set(DATA_${entry.property().getName()}, compound.getString("Data${entry.property().getName()}")); + + + <#if data.guiBoundTo?has_content && data.guiBoundTo != ""> + if (compound.get("InventoryCustom") instanceof CompoundTag inventoryTag) inventory.deserializeNBT(inventoryTag); - } - + + } + <#if hasProcedure(data.onRightClickedOn) || data.ridable || (data.tameable && data.breedable) || (data.guiBoundTo?has_content && data.guiBoundTo != "")> @Override public InteractionResult mobInteract(Player sourceentity, InteractionHand hand) { @@ -540,16 +588,21 @@ public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements R } - <#if hasProcedure(data.onMobTickUpdate)> + <#if hasProcedure(data.onMobTickUpdate) || hasProcedure(data.boundingBoxScale)> @Override public void baseTick() { super.baseTick(); - <@procedureCode data.onMobTickUpdate, { - "x": "this.getX()", - "y": "this.getY()", - "z": "this.getZ()", - "entity": "this", - "world": "this.level()" - }/> + <#if hasProcedure(data.onMobTickUpdate)> + <@procedureCode data.onMobTickUpdate, { + "x": "this.getX()", + "y": "this.getY()", + "z": "this.getZ()", + "entity": "this", + "world": "this.level()" + }/> + + <#if hasProcedure(data.boundingBoxScale)> + this.refreshDimensions(); + } @@ -723,6 +776,21 @@ public class ${name}Entity extends ${extendsClass} <#if data.ranged>implements R } + <#if hasProcedure(data.boundingBoxScale) || (data.boundingBoxScale?? && data.boundingBoxScale.getFixedValue() != 1)> + @Override public EntityDimensions getDimensions(Pose pose) { + <#if hasProcedure(data.boundingBoxScale)> + Entity entity = this; + Level world = this.level(); + double x = this.getX(); + double y = this.getY(); + double z = this.getZ(); + return super.getDimensions(pose).scale((float) <@procedureOBJToNumberCode data.boundingBoxScale/>); + <#else> + return super.getDimensions(pose).scale(${data.boundingBoxScale.getFixedValue()}f); + + } + + <#if data.flyingMob> @Override protected void checkFallDamage(double y, boolean onGroundIn, BlockState state, BlockPos pos) { } diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/livingentity/livingentity_renderer.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/livingentity/livingentity_renderer.java.ftl index ced61dfb707..87935beae99 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/livingentity/livingentity_renderer.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/livingentity/livingentity_renderer.java.ftl @@ -100,18 +100,54 @@ public class ${name}Renderer extends <#if humanoid>HumanoidMobRenderer<${n new HumanoidModel(context.bakeLayer(ModelLayers.PLAYER_OUTER_ARMOR)), context.getModelManager())); - <#if data.mobModelGlowTexture?has_content> - this.addLayer(new EyesLayer<${name}Entity, ${model}>(this) { - @Override public RenderType renderType() { - return RenderType.eyes(new ResourceLocation("${modid}:textures/entities/${data.mobModelGlowTexture}")); + <#list data.modelLayers as layer> + this.addLayer(new RenderLayer<${name}Entity, ${model}>(this) { + final ResourceLocation LAYER_TEXTURE = new ResourceLocation("${modid}:textures/entities/${layer.texture}"); + + <#compress> + @Override public void render(PoseStack poseStack, MultiBufferSource bufferSource, int light, + ${name}Entity entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { + <#if hasProcedure(layer.condition)> + Level world = entity.level(); + double x = entity.getX(); + double y = entity.getY(); + double z = entity.getZ(); + if (<@procedureOBJToConditionCode layer.condition/>) { + + + VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderType.<#if layer.glow>eyes<#else>entityCutoutNoCull(LAYER_TEXTURE)); + <#if layer.model != "Default"> + EntityModel model = new ${layer.model}(Minecraft.getInstance().getEntityModels().bakeLayer(${layer.model}.LAYER_LOCATION)); + this.getParentModel().copyPropertiesTo(model); + model.prepareMobModel(entity, limbSwing, limbSwingAmount, partialTicks); + model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + model.renderToBuffer(poseStack, vertexConsumer, 15728640, LivingEntityRenderer.getOverlayCoords(entity, 0), 1, 1, 1, 1); + <#else> + this.getParentModel().renderToBuffer(poseStack, vertexConsumer, 15728640, LivingEntityRenderer.getOverlayCoords(entity, 0), 1, 1, 1, 1); + + + <#if hasProcedure(layer.condition)>} } + }); - + } - <#if data.mobModelName == "Villager"> - @Override protected void scale(${name}Entity villager, PoseStack poseStack, float f) { - poseStack.scale(0.9375f, 0.9375f, 0.9375f); + <#if data.mobModelName == "Villager" || (data.visualScale?? && (data.visualScale.getFixedValue() != 1 || hasProcedure(data.visualScale)))> + @Override protected void scale(${name}Entity entity, PoseStack poseStack, float f) { + <#if hasProcedure(data.visualScale)> + Level world = entity.level(); + double x = entity.getX(); + double y = entity.getY(); + double z = entity.getZ(); + float scale = (float) <@procedureOBJToNumberCode data.visualScale/>; + poseStack.scale(scale, scale, scale); + <#elseif data.visualScale?? && data.visualScale.getFixedValue() != 1> + poseStack.scale(${data.visualScale.getFixedValue()}f, ${data.visualScale.getFixedValue()}f, ${data.visualScale.getFixedValue()}f); + + <#if data.mobModelName == "Villager"> + poseStack.scale(0.9375f, 0.9375f, 0.9375f); + } diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/modbase/variableslist.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/modbase/variableslist.java.ftl index 01e6e786769..bb436636553 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/modbase/variableslist.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/modbase/variableslist.java.ftl @@ -3,7 +3,7 @@ package ${package}.network; import ${package}.${JavaModName}; -import net.minecraft.nbt.Tag;import javax.annotation.Nullable; +import net.minecraft.nbt.Tag; @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public class ${JavaModName}Variables { diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/musicdisc.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/musicdisc.java.ftl index db0f4a6773c..c3000abf0d2 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/musicdisc.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/musicdisc.java.ftl @@ -38,14 +38,12 @@ import net.minecraft.network.chat.Component; public class ${name}Item extends RecordItem { public ${name}Item() { - super(${data.analogOutput}, () -> - ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.music?has_content && data.music.getMappedValue()?has_content)?then(data.music, "intentionally_empty")}" - )), - new Item.Properties().stacksTo(1).rarity(Rarity.RARE), ${data.lengthInTicks} - ); + super(${data.analogOutput}, () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.music}" )), + new Item.Properties().stacksTo(1).rarity(Rarity.${data.rarity}), ${data.lengthInTicks}); } + <@addSpecialInformation data.specialInformation/> + <@onRightClickedInAir data.onRightClickedInAir/> <@onItemUsedOnBlock data.onRightClickedOnBlock/> diff --git a/plugins/generator-1.20.1/forge-1.20.1/templates/plant/plant.java.ftl b/plugins/generator-1.20.1/forge-1.20.1/templates/plant/plant.java.ftl index 1d1a032577f..a432cfa962a 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/templates/plant/plant.java.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/templates/plant/plant.java.ftl @@ -64,21 +64,11 @@ public class ${name}Block extends <#if data.plantType == "normal">Flower<#elseif <#if data.isCustomSoundType> .sound(new ForgeSoundType(1.0f, 1.0f, - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.breakSound?has_content && data.breakSound.getMappedValue()?has_content)?then(data.breakSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.stepSound?has_content && data.stepSound.getMappedValue()?has_content)?then(data.stepSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.placeSound?has_content && data.placeSound.getMappedValue()?has_content)?then(data.placeSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.hitSound?has_content && data.hitSound.getMappedValue()?has_content)?then(data.hitSound, "intentionally_empty")}" - )), - () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation( - "${(data.fallSound?has_content && data.fallSound.getMappedValue()?has_content)?then(data.fallSound, "intentionally_empty")}" - )) + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.breakSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.stepSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.placeSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.hitSound}")), + () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("${data.fallSound}")) )) <#else> .sound(SoundType.${data.soundOnStep}) diff --git a/plugins/generator-1.20.1/forge-1.20.1/utils/mcitems.ftl b/plugins/generator-1.20.1/forge-1.20.1/utils/mcitems.ftl index d9db239459c..ec7764995ef 100644 --- a/plugins/generator-1.20.1/forge-1.20.1/utils/mcitems.ftl +++ b/plugins/generator-1.20.1/forge-1.20.1/utils/mcitems.ftl @@ -210,8 +210,8 @@ <#else> <#assign mapped = generator.map(mappedBlock.getUnmappedValue(), "blocksitems", 1) /> <#if mapped.startsWith("#")> - <#if customelement?has_content> - <#return "#" + mapped> + <#if acceptTags> + <#return mapped> <#else> <#return "minecraft:air"> diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/biome.definition.yaml b/plugins/generator-addon-1.20.x/addon-1.20.x/biome.definition.yaml index 14252463c1e..c6a89c438b8 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/biome.definition.yaml +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/biome.definition.yaml @@ -3,4 +3,4 @@ templates: writer: json name: "@SRCROOT/biomes/@registryname.json" -field_inclusions: [rainingPossibility, temperature, groundBlock, undergroundBlock, treesPerChunk, genErosion, spawnBiome, biomeType] \ No newline at end of file +field_inclusions: [rainingPossibility, temperature, groundBlock, undergroundBlock, treesPerChunk, genErosion, spawnBiome] \ No newline at end of file diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/block.definition.yaml b/plugins/generator-addon-1.20.x/addon-1.20.x/block.definition.yaml index b48918d3318..3c731b72fd2 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/block.definition.yaml +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/block.definition.yaml @@ -21,4 +21,4 @@ localizationkeys: field_inclusions: [name, texture, textureTop, textureLeft, textureFront, textureRight, textureBack, customDrop, dropAmount, slipperiness, soundOnStep, resistance, hardness, luminance, fireSpreadSpeed, flammability, colorOnMap, - generateFeature, frequencyPerChunks, minGenerateHeight, maxGenerateHeight, frequencyOnChunk, blocksToReplace ] \ No newline at end of file + generateFeature, frequencyPerChunks, generateHeight, frequencyOnChunk, blocksToReplace ] \ No newline at end of file diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/generator.yaml b/plugins/generator-addon-1.20.x/addon-1.20.x/generator.yaml index ad0fcce2486..2dc42584bdf 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/generator.yaml +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/generator.yaml @@ -1,5 +1,4 @@ name: Add-On for Bedrock Edition @minecraft -partial_support: [item, food, biome, tool, block, mob] status: experimental buildfileversion: 1.3 diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/livingentity.definition.yaml b/plugins/generator-addon-1.20.x/addon-1.20.x/livingentity.definition.yaml index b032ba92ce6..d719b5d14f5 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/livingentity.definition.yaml +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/livingentity.definition.yaml @@ -60,5 +60,5 @@ localizationkeys: field_inclusions: [mobModelTexture, mobName, modelWidth, modelHeight, attackStrength, health, movementSpeed, hasSpawnEgg, trackingRange, spawnEggBaseColor, spawnEggDotColor, spawnThisMob, waterMob, flyingMob, disableCollisions, mobBehaviourType, mobSpawningType, - spawningProbability, minNumberOfMobsPerGroup, maxNumberOfMobsPerGroup, mobDrop, immuneToDrowning, immuneToFire, immuneToFallDamage, - xpAmount, mobModel, blocklyPanel, compileNotesPanel] \ No newline at end of file + spawningProbability, numberOfMobsPerGroup, mobDrop, immuneToDrowning, immuneToFire, immuneToFallDamage, compileNotesPanel, + xpAmount, mobModel, blocklyPanel] \ No newline at end of file diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/item.json.ftl b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/item.json.ftl index be85f9339e8..d710f284525 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/item.json.ftl +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/item.json.ftl @@ -9,7 +9,7 @@ }, "components": { - <#if data.hasGlow?? && data.hasGlow.getFixedValue()>"minecraft:foil": true, + <#if data.glowCondition?? && data.glowCondition.getFixedValue()>"minecraft:foil": true, "minecraft:max_stack_size": ${data.stackSize}, "minecraft:max_damage": ${data.damageCount}, <#if data.isFood> diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/manifest_behaviourpack.json.ftl b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/manifest_behaviourpack.json.ftl index 44584b3fd72..042cc19d3ef 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/manifest_behaviourpack.json.ftl +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/manifest_behaviourpack.json.ftl @@ -7,7 +7,7 @@ "name": "${settings.getModName()}", "uuid": "${w.getUUID()}", "version": [${v[0]}, ${v[1]}, ${v[2]}], - "min_engine_version": [1, 19, 0] + "min_engine_version": [1, 20, 30] }, "modules": [ { diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/manifest_resourcepack.json.ftl b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/manifest_resourcepack.json.ftl index 6ebb58c944b..65f91575d53 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/manifest_resourcepack.json.ftl +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/manifest_resourcepack.json.ftl @@ -7,7 +7,7 @@ "name": "${settings.getModName()}", "uuid": "${w.getUUID("resourcepack")}", "version": [${v[0]}, ${v[1]}, ${v[2]}], - "min_engine_version": [1, 19, 0] + "min_engine_version": [1, 20, 30] }, "modules": [ { diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/recipe/crafting.json.ftl b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/recipe/crafting.json.ftl index 1fd208732ab..e9f622a5574 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/recipe/crafting.json.ftl +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/recipe/crafting.json.ftl @@ -31,15 +31,15 @@ "groups": [ "<#if data.group?has_content>${data.group}<#else>${modid}" ], "tags": [ "crafting_table" ], <#assign recipeArray = data.getOptimisedRecipe()> - <#assign rm = [], i = 0> + <#assign patternKeys = data.getPatternKeys()> "pattern": [ <#list recipeArray as rl> - "<#list rl as re><#if !re.isEmpty()><#assign rm+=["\"${i}\": {${mappedMCItemToItemObjectJSON(re)}}"]/>${i}<#else> <#assign i+=1>"<#if rl?has_next>, + "<#list rl as re><#if !re.isEmpty()>${patternKeys.get(re)}<#else> "<#sep>, ], "key": { - <#list rm as recipeMapping> - ${recipeMapping}<#if recipeMapping?has_next>, + <#list patternKeys.keySet() as item> + "${patternKeys.get(item)}": {${mappedMCItemToItemObjectJSON(item)}}<#sep>, }, "result": { diff --git a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/tool.json.ftl b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/tool.json.ftl index 1449cd74319..14443ad1d58 100644 --- a/plugins/generator-addon-1.20.x/addon-1.20.x/templates/tool.json.ftl +++ b/plugins/generator-addon-1.20.x/addon-1.20.x/templates/tool.json.ftl @@ -8,7 +8,7 @@ }, "components": { - <#if data.hasGlow?? && data.hasGlow.getFixedValue()>"minecraft:foil": true, + <#if data.glowCondition?? && data.glowCondition.getFixedValue()>"minecraft:foil": true, "minecraft:max_stack_size": 1, "minecraft:max_damage": ${data.usageCount}, "minecraft:stacked_by_data": true, diff --git a/plugins/mcreator-core/blockly/js/field_data_list_selector.js b/plugins/mcreator-core/blockly/js/field_data_list_selector.js index 1a29e117562..4c97e7c2269 100644 --- a/plugins/mcreator-core/blockly/js/field_data_list_selector.js +++ b/plugins/mcreator-core/blockly/js/field_data_list_selector.js @@ -59,7 +59,10 @@ class FieldDataListSelector extends Blockly.Field { if (this.lastClickTime !== -1 && ((new Date().getTime() - this.lastClickTime) < 500)) { e.stopPropagation(); // fix so the block does not "stick" to the mouse when the field is clicked let thisField = this; // reference to this field, to use in the callback function - javabridge.openEntrySelector(this.type, this.typeFilter, this.customEntryProviders, { + let customEntryProviders = typeof this.customEntryProviders === 'function' ? + this.customEntryProviders() : + this.customEntryProviders; + javabridge.openEntrySelector(this.type, this.typeFilter, customEntryProviders, { 'callback': function (value, readableName) { thisField.cachedReadableName = readableName || value; const group = Blockly.Events.getGroup(); diff --git a/plugins/mcreator-core/blockly/js/mcreator_extensions.js b/plugins/mcreator-core/blockly/js/mcreator_extensions.js index c491d2adc49..6cc661e69a4 100644 --- a/plugins/mcreator-core/blockly/js/mcreator_extensions.js +++ b/plugins/mcreator-core/blockly/js/mcreator_extensions.js @@ -87,6 +87,44 @@ Blockly.Extensions.registerMutator('variable_entity_input', } }); +// Helper function to use in Blockly extensions that register one data list selector field to update contents of another +// The block may define input called "Field" to customize field's position +// Note that the source field must be inserted before the target field for their values to be loaded properly +function appendAutoReloadingDataListField(sourceName, targetName, targetList) { + return function () { + const thisBlock = this; + (this.getInput(targetName + 'Field') || this.appendDummyInput()).appendField( + new FieldDataListSelector(targetList, undefined, { + 'customEntryProviders': function () { + return thisBlock.getFieldValue(sourceName); + } + }), targetName); + this.setOnChange(function (changeEvent) { + // Proceed if event represents change to field named "" on this block and was created in a group + // Event triggered by FieldDataListSelector is only grouped if field value is modified in UI + if (changeEvent.type === Blockly.Events.BLOCK_CHANGE && + changeEvent.group && changeEvent.blockId === this.id && + changeEvent.element === 'field' && + changeEvent.name === sourceName) { + const group = Blockly.Events.getGroup(); + // Makes it so the update and the reset event get undone together. + Blockly.Events.setGroup(changeEvent.group); + this.setFieldValue('', targetName); + Blockly.Events.setGroup(group); + } + }); + }; +} + +Blockly.Extensions.register('entity_data_logic_list_provider', + appendAutoReloadingDataListField('customEntity', 'accessor', 'entitydata_logic')); + +Blockly.Extensions.register('entity_data_integer_list_provider', + appendAutoReloadingDataListField('customEntity', 'accessor', 'entitydata_integer')); + +Blockly.Extensions.register('entity_data_string_list_provider', + appendAutoReloadingDataListField('customEntity', 'accessor', 'entitydata_string')); + // Extension used by int providers to validate their min/max values, so that min can't be greater than max and vice versa Blockly.Extensions.register('min_max_fields_validator', function () { @@ -253,7 +291,7 @@ Blockly.Extensions.register('state_provider_int_property_validator', validateInt Blockly.Extensions.register('pine_tree_feature_validator', validateIntProviderInputs(['foliage_height', 0, 24])); -Blockly.Extensions.register('spruce_tree_feature_validator', validateIntProviderInputs(['radius', 0, 24], ['trunk_height', 0, 24])); +Blockly.Extensions.register('spruce_tree_feature_validator', validateIntProviderInputs(['radius', 0, 16], ['trunk_height', 0, 24])); // Helper function to provide a mixin for mutators that add a single repeating (dummy) input with additional fields // The mutator container block must have a "STACK" statement input for this to work diff --git a/plugins/mcreator-core/datalists/blocksitems.yaml b/plugins/mcreator-core/datalists/blocksitems.yaml index fb4a7eff302..09f588ca360 100644 --- a/plugins/mcreator-core/datalists/blocksitems.yaml +++ b/plugins/mcreator-core/datalists/blocksitems.yaml @@ -6907,7 +6907,7 @@ texture: GLASS_BOTTLE - Items.POTIONITEM: - readable_name: "Water Bottle/Any Potion" + readable_name: "Uncraftable Potion" type: item texture: POTIONITEM diff --git a/plugins/mcreator-core/procedures/$scoreboard.json b/plugins/mcreator-core/procedures/$scoreboard.json new file mode 100644 index 00000000000..0572a65b2a1 --- /dev/null +++ b/plugins/mcreator-core/procedures/$scoreboard.json @@ -0,0 +1,4 @@ +{ + "color": 35, + "parent_category": "worldprocedures" +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/damagesource_from_type.json b/plugins/mcreator-core/procedures/damagesource_from_type.json index c63c419ee4c..4f8dc1d7dab 100644 --- a/plugins/mcreator-core/procedures/damagesource_from_type.json +++ b/plugins/mcreator-core/procedures/damagesource_from_type.json @@ -3,7 +3,8 @@ { "type": "field_data_list_selector", "name": "damagetype", - "datalist": "damagesources" + "datalist": "damagesources", + "customEntryProviders": "damagetype" } ], "inputsInline": true, diff --git a/plugins/mcreator-core/procedures/damagesource_from_type_cause.json b/plugins/mcreator-core/procedures/damagesource_from_type_cause.json index a89c83ac461..ce04bcdc394 100644 --- a/plugins/mcreator-core/procedures/damagesource_from_type_cause.json +++ b/plugins/mcreator-core/procedures/damagesource_from_type_cause.json @@ -3,7 +3,8 @@ { "type": "field_data_list_selector", "name": "damagetype", - "datalist": "damagesources" + "datalist": "damagesources", + "customEntryProviders": "damagetype" }, { "type": "input_value", diff --git a/plugins/mcreator-core/procedures/damagesource_from_type_cause_directcause.json b/plugins/mcreator-core/procedures/damagesource_from_type_cause_directcause.json index 045c05e6acd..f5dfd231075 100644 --- a/plugins/mcreator-core/procedures/damagesource_from_type_cause_directcause.json +++ b/plugins/mcreator-core/procedures/damagesource_from_type_cause_directcause.json @@ -3,7 +3,8 @@ { "type": "field_data_list_selector", "name": "damagetype", - "datalist": "damagesources" + "datalist": "damagesources", + "customEntryProviders": "damagetype" }, { "type": "input_value", diff --git a/plugins/mcreator-core/procedures/damagesource_is_tagged_in.json b/plugins/mcreator-core/procedures/damagesource_is_tagged_in.json new file mode 100644 index 00000000000..55ab9ec6163 --- /dev/null +++ b/plugins/mcreator-core/procedures/damagesource_is_tagged_in.json @@ -0,0 +1,28 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "damagesource", + "check": "DamageSource" + }, + { + "type": "input_value", + "name": "tag", + "check": "String" + } + ], + "inputsInline": true, + "output": "Boolean", + "colour": "%{BKY_LOGIC_HUE}", + "mcreator": { + "toolbox_id": "damagesources", + "toolbox_init": [ + "", + "minecraft:is_fire" + ], + "inputs": [ + "damagesource", + "tag" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/damagesource_isequalto.json b/plugins/mcreator-core/procedures/damagesource_isequalto.json index cd847fafac8..add6d466e3b 100644 --- a/plugins/mcreator-core/procedures/damagesource_isequalto.json +++ b/plugins/mcreator-core/procedures/damagesource_isequalto.json @@ -8,7 +8,8 @@ { "type": "field_data_list_selector", "name": "damagetype", - "datalist": "damagesources" + "datalist": "damagesources", + "customEntryProviders": "damagetype" } ], "inputsInline": true, diff --git a/plugins/mcreator-core/procedures/entity_check_main_hand.json b/plugins/mcreator-core/procedures/entity_check_main_hand.json new file mode 100644 index 00000000000..6460daeab0e --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_check_main_hand.json @@ -0,0 +1,37 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "field_dropdown", + "name": "hand", + "options": [ + [ + "left", + "LEFT" + ], + [ + "right", + "RIGHT" + ] + ] + } + ], + "output": "Boolean", + "colour": "%{BKY_LOGIC_HUE}", + "mcreator": { + "toolbox_id": "entitydata", + "toolbox_init": [ + "" + ], + "inputs": [ + "entity" + ], + "fields": [ + "hand" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/entity_data_integer_get.json b/plugins/mcreator-core/procedures/entity_data_integer_get.json new file mode 100644 index 00000000000..080a7f66784 --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_data_integer_get.json @@ -0,0 +1,40 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "field_data_list_selector", + "name": "customEntity", + "datalist": "customEntity" + }, + { + "type": "input_dummy", + "name": "accessorField" + } + ], + "extensions": [ + "entity_data_integer_list_provider" + ], + "inputsInline": true, + "colour": "%{BKY_MATH_HUE}", + "output": "Number", + "mcreator": { + "group": "synced_data", + "toolbox_id": "entitydata", + "toolbox_init": [ + "", + "~CUSTOM:Examplelivingentity6", + "~Integer" + ], + "fields": [ + "customEntity", + "accessor" + ], + "inputs": [ + "entity" + ] + } +} diff --git a/plugins/mcreator-core/procedures/entity_data_integer_set.json b/plugins/mcreator-core/procedures/entity_data_integer_set.json new file mode 100644 index 00000000000..56e68ce4307 --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_data_integer_set.json @@ -0,0 +1,48 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "field_data_list_selector", + "name": "customEntity", + "datalist": "customEntity" + }, + { + "type": "input_dummy", + "name": "accessorField" + }, + { + "type": "input_value", + "name": "value", + "check": "Number" + } + ], + "extensions": [ + "entity_data_integer_list_provider" + ], + "inputsInline": true, + "colour": "%{BKY_MATH_HUE}", + "previousStatement": null, + "nextStatement": null, + "mcreator": { + "group": "synced_data", + "toolbox_id": "entitymanagement", + "toolbox_init": [ + "", + "0", + "~CUSTOM:Examplelivingentity8", + "~Integer" + ], + "fields": [ + "customEntity", + "accessor" + ], + "inputs": [ + "entity", + "value" + ] + } +} diff --git a/plugins/mcreator-core/procedures/entity_data_logic_get.json b/plugins/mcreator-core/procedures/entity_data_logic_get.json new file mode 100644 index 00000000000..ad664e71bec --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_data_logic_get.json @@ -0,0 +1,40 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "field_data_list_selector", + "name": "customEntity", + "datalist": "customEntity" + }, + { + "type": "input_dummy", + "name": "accessorField" + } + ], + "extensions": [ + "entity_data_logic_list_provider" + ], + "inputsInline": true, + "colour": "%{BKY_LOGIC_HUE}", + "output": "Boolean", + "mcreator": { + "group": "synced_data", + "toolbox_id": "entitydata", + "toolbox_init": [ + "", + "~CUSTOM:Examplelivingentity4", + "~Logic" + ], + "fields": [ + "customEntity", + "accessor" + ], + "inputs": [ + "entity" + ] + } +} diff --git a/plugins/mcreator-core/procedures/entity_data_logic_set.json b/plugins/mcreator-core/procedures/entity_data_logic_set.json new file mode 100644 index 00000000000..4d3679e48e7 --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_data_logic_set.json @@ -0,0 +1,48 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "field_data_list_selector", + "name": "customEntity", + "datalist": "customEntity" + }, + { + "type": "input_dummy", + "name": "accessorField" + }, + { + "type": "input_value", + "name": "value", + "check": "Boolean" + } + ], + "extensions": [ + "entity_data_logic_list_provider" + ], + "inputsInline": true, + "colour": "%{BKY_LOGIC_HUE}", + "previousStatement": null, + "nextStatement": null, + "mcreator": { + "group": "synced_data", + "toolbox_id": "entitymanagement", + "toolbox_init": [ + "", + "FALSE", + "~CUSTOM:Examplelivingentity2", + "~Logic" + ], + "fields": [ + "customEntity", + "accessor" + ], + "inputs": [ + "entity", + "value" + ] + } +} diff --git a/plugins/mcreator-core/procedures/entity_data_string_get.json b/plugins/mcreator-core/procedures/entity_data_string_get.json new file mode 100644 index 00000000000..3e3844fb2e3 --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_data_string_get.json @@ -0,0 +1,40 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "field_data_list_selector", + "name": "customEntity", + "datalist": "customEntity" + }, + { + "type": "input_dummy", + "name": "accessorField" + } + ], + "extensions": [ + "entity_data_string_list_provider" + ], + "inputsInline": true, + "colour": "%{BKY_TEXTS_HUE}", + "output": "String", + "mcreator": { + "group": "synced_data", + "toolbox_id": "entitydata", + "toolbox_init": [ + "", + "~CUSTOM:Examplelivingentity2", + "~String" + ], + "fields": [ + "customEntity", + "accessor" + ], + "inputs": [ + "entity" + ] + } +} diff --git a/plugins/mcreator-core/procedures/entity_data_string_set.json b/plugins/mcreator-core/procedures/entity_data_string_set.json new file mode 100644 index 00000000000..253cdc5ecce --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_data_string_set.json @@ -0,0 +1,48 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "field_data_list_selector", + "name": "customEntity", + "datalist": "customEntity" + }, + { + "type": "input_dummy", + "name": "accessorField" + }, + { + "type": "input_value", + "name": "value", + "check": "String" + } + ], + "extensions": [ + "entity_data_string_list_provider" + ], + "inputsInline": true, + "colour": "%{BKY_TEXTS_HUE}", + "previousStatement": null, + "nextStatement": null, + "mcreator": { + "group": "synced_data", + "toolbox_id": "entitymanagement", + "toolbox_init": [ + "", + "value", + "~CUSTOM:Examplelivingentity4", + "~String" + ], + "fields": [ + "customEntity", + "accessor" + ], + "inputs": [ + "entity", + "value" + ] + } +} diff --git a/plugins/mcreator-core/procedures/entity_get_scoreboard_score.json b/plugins/mcreator-core/procedures/entity_get_scoreboard_score.json index 782a7f42b5e..db78c4ba768 100644 --- a/plugins/mcreator-core/procedures/entity_get_scoreboard_score.json +++ b/plugins/mcreator-core/procedures/entity_get_scoreboard_score.json @@ -16,7 +16,7 @@ "colour": "%{BKY_MATH_HUE}", "mcreator": { "group": "scoreboard", - "toolbox_id": "entitydata", + "toolbox_id": "scoreboard", "toolbox_init": [ "custom_score", "" diff --git a/plugins/mcreator-core/procedures/entity_get_use_item.json b/plugins/mcreator-core/procedures/entity_get_use_item.json new file mode 100644 index 00000000000..c2bceea1628 --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_get_use_item.json @@ -0,0 +1,21 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + } + ], + "output": "MCItem", + "colour": 350, + "mcreator": { + "group": "base_items", + "toolbox_id": "entitydata", + "toolbox_init": [ + "" + ], + "inputs": [ + "entity" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/entity_get_use_item_ticks.json b/plugins/mcreator-core/procedures/entity_get_use_item_ticks.json new file mode 100644 index 00000000000..c631e105fd7 --- /dev/null +++ b/plugins/mcreator-core/procedures/entity_get_use_item_ticks.json @@ -0,0 +1,20 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + } + ], + "output": "Number", + "colour": "%{BKY_MATH_HUE}", + "mcreator": { + "toolbox_id": "entitydata", + "toolbox_init": [ + "" + ], + "inputs": [ + "entity" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/entity_set_scoreboard_score.json b/plugins/mcreator-core/procedures/entity_set_scoreboard_score.json index 324712ed1b6..a87af097b17 100644 --- a/plugins/mcreator-core/procedures/entity_set_scoreboard_score.json +++ b/plugins/mcreator-core/procedures/entity_set_scoreboard_score.json @@ -19,10 +19,10 @@ "inputsInline": true, "previousStatement": null, "nextStatement": null, - "colour": 195, + "colour": 35, "mcreator": { "group": "scoreboard", - "toolbox_id": "entitymanagement", + "toolbox_id": "scoreboard", "toolbox_init": [ "custom_score", "1", diff --git a/plugins/mcreator-core/procedures/item_cooldown_for.json b/plugins/mcreator-core/procedures/item_cooldown_for.json index 9a2a961ec78..176c298907a 100644 --- a/plugins/mcreator-core/procedures/item_cooldown_for.json +++ b/plugins/mcreator-core/procedures/item_cooldown_for.json @@ -21,6 +21,7 @@ "nextStatement": null, "colour": 350, "mcreator": { + "group": "cooldown", "toolbox_id": "itemmanagement", "toolbox_init": [ "100", diff --git a/plugins/mcreator-core/procedures/item_get_cooldown.json b/plugins/mcreator-core/procedures/item_get_cooldown.json new file mode 100644 index 00000000000..d2ea23976fb --- /dev/null +++ b/plugins/mcreator-core/procedures/item_get_cooldown.json @@ -0,0 +1,29 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "input_value", + "name": "item", + "check": "MCItem" + } + ], + "inputsInline": true, + "output": "Number", + "colour": "%{BKY_MATH_HUE}", + "mcreator": { + "group": "cooldown", + "toolbox_id": "itemdata", + "toolbox_init": [ + "", + "" + ], + "inputs": [ + "entity", + "item" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/item_is_cooldown.json b/plugins/mcreator-core/procedures/item_is_cooldown.json new file mode 100644 index 00000000000..3030606d305 --- /dev/null +++ b/plugins/mcreator-core/procedures/item_is_cooldown.json @@ -0,0 +1,29 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + }, + { + "type": "input_value", + "name": "item", + "check": "MCItem" + } + ], + "inputsInline": true, + "output": "Boolean", + "colour": "%{BKY_LOGIC_HUE}", + "mcreator": { + "group": "cooldown", + "toolbox_id": "itemdata", + "toolbox_init": [ + "", + "" + ], + "inputs": [ + "entity", + "item" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/team_add_entity.json b/plugins/mcreator-core/procedures/team_add_entity.json new file mode 100644 index 00000000000..0b7d097f998 --- /dev/null +++ b/plugins/mcreator-core/procedures/team_add_entity.json @@ -0,0 +1,30 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "name", + "check": "String" + }, + { + "type": "input_value", + "name": "entity", + "check": "Entity" + } + ], + "inputsInline": true, + "previousStatement": null, + "nextStatement": null, + "colour": 35, + "mcreator": { + "group": "team", + "toolbox_id": "scoreboard", + "toolbox_init": [ + "team_name", + "" + ], + "inputs": [ + "name", + "entity" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/team_create_new.json b/plugins/mcreator-core/procedures/team_create_new.json new file mode 100644 index 00000000000..9c3b3ae4167 --- /dev/null +++ b/plugins/mcreator-core/procedures/team_create_new.json @@ -0,0 +1,29 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "name", + "check": "String" + } + ], + "inputsInline": true, + "previousStatement": null, + "nextStatement": null, + "colour": 35, + "mcreator": { + "group": "team", + "toolbox_id": "scoreboard", + "toolbox_init": [ + "team_name" + ], + "inputs": [ + "name" + ], + "dependencies": [ + { + "name": "world", + "type": "world" + } + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/team_delete.json b/plugins/mcreator-core/procedures/team_delete.json new file mode 100644 index 00000000000..9c3b3ae4167 --- /dev/null +++ b/plugins/mcreator-core/procedures/team_delete.json @@ -0,0 +1,29 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "name", + "check": "String" + } + ], + "inputsInline": true, + "previousStatement": null, + "nextStatement": null, + "colour": 35, + "mcreator": { + "group": "team", + "toolbox_id": "scoreboard", + "toolbox_init": [ + "team_name" + ], + "inputs": [ + "name" + ], + "dependencies": [ + { + "name": "world", + "type": "world" + } + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/team_get_entity_team.json b/plugins/mcreator-core/procedures/team_get_entity_team.json new file mode 100644 index 00000000000..2ae26b4acbe --- /dev/null +++ b/plugins/mcreator-core/procedures/team_get_entity_team.json @@ -0,0 +1,22 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "entity", + "check": "Entity" + } + ], + "inputsInline": true, + "output": "String", + "colour": "%{BKY_TEXTS_HUE}", + "mcreator": { + "group": "team", + "toolbox_id": "scoreboard", + "toolbox_init": [ + "" + ], + "inputs": [ + "entity" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/team_get_friendlyfire.json b/plugins/mcreator-core/procedures/team_get_friendlyfire.json new file mode 100644 index 00000000000..da0867d3d19 --- /dev/null +++ b/plugins/mcreator-core/procedures/team_get_friendlyfire.json @@ -0,0 +1,28 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "name", + "check": "String" + } + ], + "inputsInline": true, + "output": "Boolean", + "colour": "%{BKY_LOGIC_HUE}", + "mcreator": { + "group": "team", + "toolbox_id": "scoreboard", + "toolbox_init": [ + "team_name" + ], + "inputs": [ + "name" + ], + "dependencies": [ + { + "name": "world", + "type": "world" + } + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/team_remove_entity.json b/plugins/mcreator-core/procedures/team_remove_entity.json new file mode 100644 index 00000000000..0b7d097f998 --- /dev/null +++ b/plugins/mcreator-core/procedures/team_remove_entity.json @@ -0,0 +1,30 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "name", + "check": "String" + }, + { + "type": "input_value", + "name": "entity", + "check": "Entity" + } + ], + "inputsInline": true, + "previousStatement": null, + "nextStatement": null, + "colour": 35, + "mcreator": { + "group": "team", + "toolbox_id": "scoreboard", + "toolbox_init": [ + "team_name", + "" + ], + "inputs": [ + "name", + "entity" + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/procedures/team_set_friendlyfire.json b/plugins/mcreator-core/procedures/team_set_friendlyfire.json new file mode 100644 index 00000000000..8ca369168d5 --- /dev/null +++ b/plugins/mcreator-core/procedures/team_set_friendlyfire.json @@ -0,0 +1,36 @@ +{ + "args0": [ + { + "type": "input_value", + "name": "name", + "check": "String" + }, + { + "type": "input_value", + "name": "condition", + "check": "Boolean" + } + ], + "inputsInline": true, + "previousStatement": null, + "nextStatement": null, + "colour": 35, + "mcreator": { + "group": "team", + "toolbox_id": "scoreboard", + "toolbox_init": [ + "team_name", + "TRUE" + ], + "inputs": [ + "name", + "condition" + ], + "dependencies": [ + { + "name": "world", + "type": "world" + } + ] + } +} \ No newline at end of file diff --git a/plugins/mcreator-core/templates/ptpl/Mining hammer (all directions).ptpl b/plugins/mcreator-core/templates/ptpl/Mining hammer (all directions).ptpl index 39a58054f11..36baed42a71 100644 Binary files a/plugins/mcreator-core/templates/ptpl/Mining hammer (all directions).ptpl and b/plugins/mcreator-core/templates/ptpl/Mining hammer (all directions).ptpl differ diff --git a/plugins/mcreator-core/templates/ptpl/Spawn gem each 10-th time procedure is called (for blocks).ptpl b/plugins/mcreator-core/templates/ptpl/Spawn dropped item each 10-th time procedure is called (for blocks).ptpl similarity index 100% rename from plugins/mcreator-core/templates/ptpl/Spawn gem each 10-th time procedure is called (for blocks).ptpl rename to plugins/mcreator-core/templates/ptpl/Spawn dropped item each 10-th time procedure is called (for blocks).ptpl diff --git a/plugins/mcreator-core/templates/ptpl/Spawn gem of item in block slot.ptpl b/plugins/mcreator-core/templates/ptpl/Spawn item in block slot as dropped item.ptpl similarity index 100% rename from plugins/mcreator-core/templates/ptpl/Spawn gem of item in block slot.ptpl rename to plugins/mcreator-core/templates/ptpl/Spawn item in block slot as dropped item.ptpl diff --git a/plugins/mcreator-link/lang/texts_nl_NL.properties b/plugins/mcreator-link/lang/texts_nl_NL.properties new file mode 100644 index 00000000000..6ab035a0101 --- /dev/null +++ b/plugins/mcreator-link/lang/texts_nl_NL.properties @@ -0,0 +1,14 @@ +blockly.category.mcreatorlink=MCreator Link +trigger.mcreator_link_device_connected=MCreator Link\: Nieuw apparaat verbonden +trigger.mcreator_link_message_received=MCreator Link\: Aangepast bericht ontvangen +trigger.mcreator_link_pin_changed=MCreator Link\: Digitale pin veranderd +blockly.block.mcreator_link_enablepinevents=Digitale pin %1 globale gebeurtenissen inschakelen +blockly.block.mcreator_link_disablepinevents=Digitale pin %1 globale gebeurtenissen uitschakelen +blockly.block.mcreator_link_sendmessage=Zend bericht naar apparaat %1 +blockly.block.mcreator_link_digitalwrite=Stel digitale pin %1 in op waarde %2 +blockly.block.mcreator_link_analogwrite=Stel digitale pin %1 in op waarde %2 +blockly.block.mcreator_link_digitalpincount=Aantal digitale pinnen van het huidige apparaat +blockly.block.mcreator_link_pinmode=Stel modus van pin %1 in naar %2 +blockly.block.mcreator_link_digitalread=Lees de waarde van digitale pin %1 +blockly.block.mcreator_link_analogpincount=Aantal digitale pinnen van het huidige apparaat +blockly.block.mcreator_link_analogread=Lees de waarde van digitale pin %1 \ No newline at end of file diff --git a/plugins/mcreator-link/lang/texts_zh_CN.properties b/plugins/mcreator-link/lang/texts_zh_CN.properties index ac8f0649a0d..775e994feae 100644 --- a/plugins/mcreator-link/lang/texts_zh_CN.properties +++ b/plugins/mcreator-link/lang/texts_zh_CN.properties @@ -2,13 +2,13 @@ blockly.category.mcreatorlink=MCreator Link trigger.mcreator_link_device_connected=MCreator Link:新设备已连接 trigger.mcreator_link_message_received=MCreator Link:收到自定义消息 trigger.mcreator_link_pin_changed=MCreator Link:数字引脚已更改 -blockly.block.mcreator_link_enablepinevents=启用数字引脚 %1 全局事件 -blockly.block.mcreator_link_disablepinevents=禁用数字引脚 %1 全局事件 -blockly.block.mcreator_link_sendmessage=发送消息到设备: %1 -blockly.block.mcreator_link_digitalwrite=设置数字引脚 %1 为值 %2 -blockly.block.mcreator_link_analogwrite=设置模拟引脚 %1 为值 %2 +blockly.block.mcreator_link_enablepinevents=启用数字引脚%1全局事件 +blockly.block.mcreator_link_disablepinevents=禁用数字引脚%1全局事件 +blockly.block.mcreator_link_sendmessage=发送消息到设备:%1 +blockly.block.mcreator_link_digitalwrite=设置数字引脚%1为值 %2 +blockly.block.mcreator_link_analogwrite=设置模拟引脚%1为值 %2 blockly.block.mcreator_link_digitalpincount=当前设备的数字引脚数量 -blockly.block.mcreator_link_pinmode=将引脚 %1 的模式设置为 %2 -blockly.block.mcreator_link_digitalread=读取数字引脚 %1 的值 +blockly.block.mcreator_link_pinmode=将引脚%1的模式设置为%2 +blockly.block.mcreator_link_digitalread=读取数字引脚%1的值 blockly.block.mcreator_link_analogpincount=当前设备的模拟引脚数量 -blockly.block.mcreator_link_analogread=读取模拟引脚 %1 的值 \ No newline at end of file +blockly.block.mcreator_link_analogread=读取模拟引脚%1的值 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/de_DE/entity/glow_texture.md b/plugins/mcreator-localization/help/de_DE/entity/glow_texture.md index 64b24672660..784f730bcf7 100644 --- a/plugins/mcreator-localization/help/de_DE/entity/glow_texture.md +++ b/plugins/mcreator-localization/help/de_DE/entity/glow_texture.md @@ -1,7 +1 @@ -Glow-Textur ist eine zusätzliche optionale Texturschicht auf dem Mob. - -Diese Texturschicht sollte die gleiche Größe und das gleiche Layout haben wie die Standard-Mob-Textur. - -Glow-Textur wird verwendet, um Mob leuchtende Schicht zu definieren. Mehr helle Texturbereiche werden dazu führen, dass diese Teile des Mobs mehr leuchten. - -Wenn Sie keine Glühebene benötigen, behalten Sie diese bei Standardwert (leer). \ No newline at end of file +Glow-Textur wird verwendet, um Mob leuchtende Schicht zu definieren. Mehr helle Texturbereiche werden dazu führen, dass diese Teile des Mobs mehr leuchten. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/armor/max_damage_absorbed.md b/plugins/mcreator-localization/help/default/armor/max_damage_absorbed.md index c405d294178..88a67867e57 100644 --- a/plugins/mcreator-localization/help/default/armor/max_damage_absorbed.md +++ b/plugins/mcreator-localization/help/default/armor/max_damage_absorbed.md @@ -1,14 +1,15 @@ This parameter defines armor durability and is effectively applied as: -* helmet: max_damage_absorbed * 13 -* chestplate: max_damage_absorbed * 15 -* leggings: max_damage_absorbed * 16 -* boots: max_damage_absorbed * 11 +* helmet: max_damage_absorbed * 11 +* chestplate: max_damage_absorbed * 16 +* leggings: max_damage_absorbed * 15 +* boots: max_damage_absorbed * 13 Vanilla armor uses the following factors: * Leather armor: 5 * Chainmail armor: 15 +* Iron armor: 15 * Gold armor: 7 * Diamond armor: 33 * Netherite armor: 37 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/block/special_information.md b/plugins/mcreator-localization/help/default/block/special_information.md index 30f222ab8e7..cda836f4928 100644 --- a/plugins/mcreator-localization/help/default/block/special_information.md +++ b/plugins/mcreator-localization/help/default/block/special_information.md @@ -1,2 +1,6 @@ -This parameter adds a tooltip to the block when you hold your icon over the block in your inventory. -If you use a procedure-generated tooltip, and your block is not held by an entity or a gem, the `entity` dependency will be null. \ No newline at end of file +This parameter adds a tooltip to the block when +you hold your icon over the block in your inventory. + +If you use a procedure-generated tooltip, and your block is +not held by an entity or currently a dropped item entity, +the `entity` dependency will be null. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/damagetype/effects.md b/plugins/mcreator-localization/help/default/damagetype/effects.md new file mode 100644 index 00000000000..3c6259e504a --- /dev/null +++ b/plugins/mcreator-localization/help/default/damagetype/effects.md @@ -0,0 +1 @@ +This parameter determines what sounds should be played when receiving damage of this type \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/damagetype/exhaustion.md b/plugins/mcreator-localization/help/default/damagetype/exhaustion.md new file mode 100644 index 00000000000..035036e2106 --- /dev/null +++ b/plugins/mcreator-localization/help/default/damagetype/exhaustion.md @@ -0,0 +1,3 @@ +This parameter determines how much exhaustion is applied to the player when the damage is dealt. + +Higher values deplete the hunger bar more quickly. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/damagetype/item_death_message.md b/plugins/mcreator-localization/help/default/damagetype/item_death_message.md new file mode 100644 index 00000000000..090d2b81156 --- /dev/null +++ b/plugins/mcreator-localization/help/default/damagetype/item_death_message.md @@ -0,0 +1,7 @@ +This message is displayed in chat when a player is killed by an entity holding a named item. + +You can use the following tokens in the message: + +- ``: the name of the player who died +- ``: the name of the entity that dealt the damage +- ``: the name of the item held by the attacker \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/damagetype/normal_death_message.md b/plugins/mcreator-localization/help/default/damagetype/normal_death_message.md new file mode 100644 index 00000000000..f317025d190 --- /dev/null +++ b/plugins/mcreator-localization/help/default/damagetype/normal_death_message.md @@ -0,0 +1,8 @@ +This message is displayed in chat when a player dies from damage of this type, in most situations. + +You can use the following tokens in the message: + +- ``: the name of the player who died +- ``: the name of the entity that dealt the damage + +NOTE: Use the second token only if the damage is always caused by a mob. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/damagetype/player_death_message.md b/plugins/mcreator-localization/help/default/damagetype/player_death_message.md new file mode 100644 index 00000000000..0d68409e59a --- /dev/null +++ b/plugins/mcreator-localization/help/default/damagetype/player_death_message.md @@ -0,0 +1,6 @@ +This message is displayed in chat when a player dies from damage of this type, but was recently hurt by another entity. + +You can use the following tokens in the message: + +- ``: the name of the player who died +- ``: the name of the entity that dealt the damage \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/damagetype/scaling.md b/plugins/mcreator-localization/help/default/damagetype/scaling.md new file mode 100644 index 00000000000..bf6af8f5ce2 --- /dev/null +++ b/plugins/mcreator-localization/help/default/damagetype/scaling.md @@ -0,0 +1,6 @@ +This parameter determines if the damage dealt should increase with difficulty. + +- `never`: difficulty doesn't affect the damage dealt +- `always`: difficulty always increases the damage dealt, regardless of the source +- `when_caused_by_living_non_player`: difficulty increases the damage dealt only if it's caused by a living entity +(such as zombies or spiders) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/bounding_box_scale.md b/plugins/mcreator-localization/help/default/entity/bounding_box_scale.md new file mode 100644 index 00000000000..1decd68d1cf --- /dev/null +++ b/plugins/mcreator-localization/help/default/entity/bounding_box_scale.md @@ -0,0 +1,3 @@ +This feature allows you to control the size of your entity's collision box. + +To scale entities in-game appearance, use the "Model visual scale" parameter. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/condition_display_model_layer.md b/plugins/mcreator-localization/help/default/entity/condition_display_model_layer.md new file mode 100644 index 00000000000..56e083b58f7 --- /dev/null +++ b/plugins/mcreator-localization/help/default/entity/condition_display_model_layer.md @@ -0,0 +1 @@ +While the returned value is true, this model layer is visible. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/data_default_value.md b/plugins/mcreator-localization/help/default/entity/data_default_value.md new file mode 100644 index 00000000000..800f45ea6c8 --- /dev/null +++ b/plugins/mcreator-localization/help/default/entity/data_default_value.md @@ -0,0 +1,5 @@ +This is the default value of the entity's variable. + +* **Logic**: _true_ or _false_ +* **Number**: Can go from the maximal negative limit to the maximal positive limit of an integer +* **String**: Text/string value \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/data_name.md b/plugins/mcreator-localization/help/default/entity/data_name.md new file mode 100644 index 00000000000..d8d8b46b104 --- /dev/null +++ b/plugins/mcreator-localization/help/default/entity/data_name.md @@ -0,0 +1,3 @@ +This parameter defines the name of this variable. + +Mainly used with procedure blocks to get or set its value. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/data_type.md b/plugins/mcreator-localization/help/default/entity/data_type.md new file mode 100644 index 00000000000..8c9b9ed58db --- /dev/null +++ b/plugins/mcreator-localization/help/default/entity/data_type.md @@ -0,0 +1 @@ +This option controls the type of this entity variable. Supported types are logic, number and string variables. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/entity_data.md b/plugins/mcreator-localization/help/default/entity/entity_data.md new file mode 100644 index 00000000000..651e3578722 --- /dev/null +++ b/plugins/mcreator-localization/help/default/entity/entity_data.md @@ -0,0 +1,4 @@ +Add custom variables to your custom entity. + +These variables are synchronized between client side and server side, +so one of them can be used, for example, to change the texture of your entity. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/glow_texture.md b/plugins/mcreator-localization/help/default/entity/glow_texture.md index 44e1939ba49..aea8242c21e 100644 --- a/plugins/mcreator-localization/help/default/entity/glow_texture.md +++ b/plugins/mcreator-localization/help/default/entity/glow_texture.md @@ -1,8 +1,2 @@ -Glow texture is additional optional texture layer on the mob. - -This texture layer should have the same size and layout as the standard mob texture. - Glow texture will be used to define mob glowing layer. More bright texture areas will -result in these parts of the mob to glow more. - -If you don't need glow layer, keep this at default value (empty). \ No newline at end of file +result in these parts of the mob to glow more. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/model_layers.md b/plugins/mcreator-localization/help/default/entity/model_layers.md new file mode 100644 index 00000000000..9654f5a41e3 --- /dev/null +++ b/plugins/mcreator-localization/help/default/entity/model_layers.md @@ -0,0 +1 @@ +The model layers in the list below will be applied on top of the entity's model. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/texture.md b/plugins/mcreator-localization/help/default/entity/texture.md index d15255d8020..b32c4753de5 100644 --- a/plugins/mcreator-localization/help/default/entity/texture.md +++ b/plugins/mcreator-localization/help/default/entity/texture.md @@ -1,3 +1,5 @@ Texture of your entity. Make sure the texture is compatible with the model you selected. -Biped models, for example, only support 64x64 (64x32 before Minecraft 1.18) biped type textures. \ No newline at end of file +Biped models, for example, only support 64x64 (64x32 before Minecraft 1.18) biped type textures. + +For more complex model layers definition, use "${l10n.t("elementgui.living_entity.page_model_layers")}" tab. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/entity/visual_scale.md b/plugins/mcreator-localization/help/default/entity/visual_scale.md new file mode 100644 index 00000000000..028b60de20e --- /dev/null +++ b/plugins/mcreator-localization/help/default/entity/visual_scale.md @@ -0,0 +1,3 @@ +This feature allows you to control the visual model size of the entity in-game. + +To scale entity's collision box, use the "Bounding box scale" parameter. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/item/enable_ranged_item.md b/plugins/mcreator-localization/help/default/item/enable_ranged_item.md index 426fca00579..ffce346b8f4 100644 --- a/plugins/mcreator-localization/help/default/item/enable_ranged_item.md +++ b/plugins/mcreator-localization/help/default/item/enable_ranged_item.md @@ -1 +1,13 @@ -By enabling this parameter, the item will become a ranged item allowing it to shoot a projectile, like bows and crossbows. \ No newline at end of file +By enabling this parameter, the item will become a ranged item +allowing it to shoot a projectile, like bows and crossbows. + +For ranged item to work, set the animation to bow or similar +and make sure to use a non-zero value for the item use duration. + +If you use the ranged item feature, the item will only shoot +if the required item (ammo) is in the player's inventory. This +is arrows when using vanilla arrows, or the item specified in +the required item parameter of a custom projectile. + +If you want to shoot a projectile without the required item system, +use the right click procedure trigger and procedures to shoot it. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/item/special_information.md b/plugins/mcreator-localization/help/default/item/special_information.md index 566621d43b3..fd23db93582 100644 --- a/plugins/mcreator-localization/help/default/item/special_information.md +++ b/plugins/mcreator-localization/help/default/item/special_information.md @@ -1,2 +1,6 @@ -This parameter adds a tooltip to the item when you hold your icon over the block in your inventory. -If you use a procedure-generated tooltip, and your item is not held by an entity or a gem, the `entity` dependency will be null. \ No newline at end of file +This parameter adds a tooltip to the item when +you hold your icon over the item in your inventory. + +If you use a procedure-generated tooltip, and your item is +not held by an entity or currently a dropped item entity, +the `entity` dependency will be null. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/tag/namespace.md b/plugins/mcreator-localization/help/default/tag/namespace.md index 7af291253f1..cfccd82ee75 100644 --- a/plugins/mcreator-localization/help/default/tag/namespace.md +++ b/plugins/mcreator-localization/help/default/tag/namespace.md @@ -2,6 +2,7 @@ This parameter defines the way the tag will function. * **forge:** is a replacement for Ore Dictionary for tags. They can be used to give other mod creators access to their mod with your mod if you provide them with the tag name. +* **c** is a namespace used by Minecraft Fabric mods for conventional tags (standardized tag naming scheme). * **minecraft:** is used to add custom blocks or items to vanilla tag groups. For example, adding your mod logs to Minecraft's log group (by setting name to logs and namespace to minecraft). * **mod:** is used for grouping mod elements in your mod for internal use. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/default/tag/type.md b/plugins/mcreator-localization/help/default/tag/type.md index ca35db8018c..90f6bb6e43a 100644 --- a/plugins/mcreator-localization/help/default/tag/type.md +++ b/plugins/mcreator-localization/help/default/tag/type.md @@ -4,4 +4,5 @@ * **Entities:** use this tag type to group multiple entities together for a same purpose. * **Functions:** this tag type is used for tagging functions into groups. One such group is called "tick" from the "minecraft" namespace. -Functions tagged under the "tick" namespace will be executed each game tick. \ No newline at end of file +Functions tagged under the "tick" namespace will be executed each game tick. +* **Damage types:** this tag type is used to group damage types together. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_AR/entity/data_default_value.md b/plugins/mcreator-localization/help/es_AR/entity/data_default_value.md new file mode 100644 index 00000000000..d143d1d69c7 --- /dev/null +++ b/plugins/mcreator-localization/help/es_AR/entity/data_default_value.md @@ -0,0 +1,5 @@ +Este es el valor por defecto de la variable de la entidad. + +- **Lógica**: _verdadero_ o _falso_ +- **Número**: Puede ir desde el límite negativo hasta el límite positivo de un entero +- **Texto**: Valor de texto/palabra diff --git a/plugins/mcreator-localization/help/es_AR/entity/data_name.md b/plugins/mcreator-localization/help/es_AR/entity/data_name.md new file mode 100644 index 00000000000..02b2e67bcc5 --- /dev/null +++ b/plugins/mcreator-localization/help/es_AR/entity/data_name.md @@ -0,0 +1,3 @@ +Este parámetro define el nombre de la variable. + +Principalmente usado por los bloques de procedimientos para obtener o definir su valor. diff --git a/plugins/mcreator-localization/help/es_AR/entity/data_type.md b/plugins/mcreator-localization/help/es_AR/entity/data_type.md new file mode 100644 index 00000000000..15a49457721 --- /dev/null +++ b/plugins/mcreator-localization/help/es_AR/entity/data_type.md @@ -0,0 +1 @@ +Esta opción controla el tipo de variable de la entidad. Los tipos soportados son variables lógicas, numéricas y de texto. diff --git a/plugins/mcreator-localization/help/es_AR/entity/entity_data.md b/plugins/mcreator-localization/help/es_AR/entity/entity_data.md new file mode 100644 index 00000000000..0d9894531a3 --- /dev/null +++ b/plugins/mcreator-localization/help/es_AR/entity/entity_data.md @@ -0,0 +1,4 @@ +Añadir variables personalizadas a su entidad personalizada. + +Estas variables se sincronizan entre el lado del cliente y el lado del servidor, +para que uno de ellos pueda ser usado, por ejemplo, para cambiar la textura de tu entidad. diff --git a/plugins/mcreator-localization/help/es_CL/common/creative_tab.md b/plugins/mcreator-localization/help/es_CL/common/creative_tab.md new file mode 100644 index 00000000000..a967c1e2554 --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/common/creative_tab.md @@ -0,0 +1,3 @@ +Aquí es donde tu bloque estará en el modo creativo. + +Usar pestañas con PERSONALIZADO: prefijo para usar pestañas personalizadas. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_CL/common/generate_feature.md b/plugins/mcreator-localization/help/es_CL/common/generate_feature.md new file mode 100644 index 00000000000..444a4019f99 --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/common/generate_feature.md @@ -0,0 +1 @@ +Si este parámetro está activado, el elemento generará una característica de generación de mundo en el mundo. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_CL/common/gui_name.md b/plugins/mcreator-localization/help/es_CL/common/gui_name.md new file mode 100644 index 00000000000..42f5e52b258 --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/common/gui_name.md @@ -0,0 +1 @@ +El nombre dentro del juego es el nombre del elemento del mod así como se muestra en los menús dentro del juego, consejos sobre elementos y otros lugares donde es posible mostrar nombres visualmente. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_CL/common/restrict_to_biomes.md b/plugins/mcreator-localization/help/es_CL/common/restrict_to_biomes.md new file mode 100644 index 00000000000..2c6581ef6a9 --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/common/restrict_to_biomes.md @@ -0,0 +1,3 @@ +Use ese campo para definir biomas, donde debería ocurrir la generación. + +Si la lista está vacía, no se aplicará ninguna restricción y la generación ocurrirá en todos los biomas. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_CL/common/restrict_to_blocks.md b/plugins/mcreator-localization/help/es_CL/common/restrict_to_blocks.md new file mode 100644 index 00000000000..8e81a9a88be --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/common/restrict_to_blocks.md @@ -0,0 +1,3 @@ +Use este campo para definir en qué bloque(s) ocurrirá la generación. + +Si la lista está vacía, esta opción se desactivará, y será capaz de generarse en todos los bloques. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_CL/common/state_definition.md b/plugins/mcreator-localization/help/es_CL/common/state_definition.md new file mode 100644 index 00000000000..b283035a63c --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/common/state_definition.md @@ -0,0 +1 @@ +Especifique valores que sean aceptados por las propiedades de tu elemento para este estado. Si desmarcas la casilla a la izquierda de una propiedad, no afectará este estado de ninguna forma. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_CL/entity/data_default_value.md b/plugins/mcreator-localization/help/es_CL/entity/data_default_value.md new file mode 100644 index 00000000000..d143d1d69c7 --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/entity/data_default_value.md @@ -0,0 +1,5 @@ +Este es el valor por defecto de la variable de la entidad. + +- **Lógica**: _verdadero_ o _falso_ +- **Número**: Puede ir desde el límite negativo hasta el límite positivo de un entero +- **Texto**: Valor de texto/palabra diff --git a/plugins/mcreator-localization/help/es_CL/entity/data_name.md b/plugins/mcreator-localization/help/es_CL/entity/data_name.md new file mode 100644 index 00000000000..02b2e67bcc5 --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/entity/data_name.md @@ -0,0 +1,3 @@ +Este parámetro define el nombre de la variable. + +Principalmente usado por los bloques de procedimientos para obtener o definir su valor. diff --git a/plugins/mcreator-localization/help/es_CL/entity/data_type.md b/plugins/mcreator-localization/help/es_CL/entity/data_type.md new file mode 100644 index 00000000000..15a49457721 --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/entity/data_type.md @@ -0,0 +1 @@ +Esta opción controla el tipo de variable de la entidad. Los tipos soportados son variables lógicas, numéricas y de texto. diff --git a/plugins/mcreator-localization/help/es_CL/entity/entity_data.md b/plugins/mcreator-localization/help/es_CL/entity/entity_data.md new file mode 100644 index 00000000000..0d9894531a3 --- /dev/null +++ b/plugins/mcreator-localization/help/es_CL/entity/entity_data.md @@ -0,0 +1,4 @@ +Añadir variables personalizadas a su entidad personalizada. + +Estas variables se sincronizan entre el lado del cliente y el lado del servidor, +para que uno de ellos pueda ser usado, por ejemplo, para cambiar la textura de tu entidad. diff --git a/plugins/mcreator-localization/help/es_ES/advancement/announce_to_chat.md b/plugins/mcreator-localization/help/es_ES/advancement/announce_to_chat.md new file mode 100644 index 00000000000..a8839f9bbf5 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/announce_to_chat.md @@ -0,0 +1 @@ +Mandar un mensaje por el chat cuando un jugador consigue el progreso. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/background.md b/plugins/mcreator-localization/help/es_ES/advancement/background.md new file mode 100644 index 00000000000..9a1cad63e23 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/background.md @@ -0,0 +1 @@ +Si este logro es el primero de una nueva rama, puedes elegir el fondo de la ventana con esta opción. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/description.md b/plugins/mcreator-localization/help/es_ES/advancement/description.md new file mode 100644 index 00000000000..97270bf830b --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/description.md @@ -0,0 +1 @@ +Aquí pones información sobre cómo completar la tarea. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/hide_display.md b/plugins/mcreator-localization/help/es_ES/advancement/hide_display.md new file mode 100644 index 00000000000..d79bc1e911f --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/hide_display.md @@ -0,0 +1 @@ +Marca esta casilla para esconder el logro en la pestaña de avances hasta que sea conseguido. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/hide_if_not_completed.md b/plugins/mcreator-localization/help/es_ES/advancement/hide_if_not_completed.md new file mode 100644 index 00000000000..d3ce5b5f45a --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/hide_if_not_completed.md @@ -0,0 +1 @@ +Este parámetro esconde el logro en la pestaña de avances hasta que se ha conseguido. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/icon.md b/plugins/mcreator-localization/help/es_ES/advancement/icon.md new file mode 100644 index 00000000000..7093d6201aa --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/icon.md @@ -0,0 +1,5 @@ +El icono aparece en la pestaña de avances. + +Si este logro es el primero en una rama también se mostrará en el icono de avances. + +Aquí solo puede haber ítems. Bloques sin ítem no pueden ser mostrados como icono. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/name.md b/plugins/mcreator-localization/help/es_ES/advancement/name.md new file mode 100644 index 00000000000..5d80d5cce5a --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/name.md @@ -0,0 +1 @@ +El nombre del avance. Si no tiene padre (avance raíz) también será el nombre de la rama. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/parent.md b/plugins/mcreator-localization/help/es_ES/advancement/parent.md new file mode 100644 index 00000000000..ec9f72c60f8 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/parent.md @@ -0,0 +1,3 @@ +Este es el nombre del avance tras el cual tu avance aparecerá en la lista. + +Puedes usar "Sin padre: raíz" para crear una nueva rama (nueva pestaña de avances). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/reward_function.md b/plugins/mcreator-localization/help/es_ES/advancement/reward_function.md new file mode 100644 index 00000000000..22ab73bacbe --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/reward_function.md @@ -0,0 +1 @@ +Puedes escoger una función que se ejecuta cuando el jugador consigue un logro con este parámetro. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/reward_loot_tables.md b/plugins/mcreator-localization/help/es_ES/advancement/reward_loot_tables.md new file mode 100644 index 00000000000..1e9fb30d3f4 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/reward_loot_tables.md @@ -0,0 +1 @@ +El jugador recibirá algunos ítems de la tabla de botín seleccionada en este campo cuando el avance haya sido conseguido. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/reward_recipes.md b/plugins/mcreator-localization/help/es_ES/advancement/reward_recipes.md new file mode 100644 index 00000000000..39e66347077 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/reward_recipes.md @@ -0,0 +1 @@ +Las recetas que se desbloquearán cuando el jugador consiga el avance. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/reward_xp.md b/plugins/mcreator-localization/help/es_ES/advancement/reward_xp.md new file mode 100644 index 00000000000..959e2b0d000 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/reward_xp.md @@ -0,0 +1 @@ +La cantidad de experiencia que recibirá el jugador al conseguir el avance. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/show_toast.md b/plugins/mcreator-localization/help/es_ES/advancement/show_toast.md new file mode 100644 index 00000000000..d94645d2cc8 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/show_toast.md @@ -0,0 +1 @@ +Mostrar el avance en la esquina superior derecha de la pantalla cuando el jugador consiga el avance. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/advancement/type.md b/plugins/mcreator-localization/help/es_ES/advancement/type.md new file mode 100644 index 00000000000..dc924d297b8 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/advancement/type.md @@ -0,0 +1,5 @@ +Este es el tipo de logro + +* La tarea es el tipo de logro más común. +* Una meta es un objetivo a largo plazo que el jugador se esfuerza por conseguir. +* El desafío es para probar la habilidad de un jugador o para retarles a hacer algo. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/armor/armor_layer_texture.md b/plugins/mcreator-localization/help/es_ES/armor/armor_layer_texture.md new file mode 100644 index 00000000000..926602de0ce --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/armor/armor_layer_texture.md @@ -0,0 +1 @@ +Las texturas de la capa de armadura son las texturas mostradas en el jugador cuando lleva puesta la armadura. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/es_ES/entity/data_default_value.md b/plugins/mcreator-localization/help/es_ES/entity/data_default_value.md new file mode 100644 index 00000000000..d143d1d69c7 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/entity/data_default_value.md @@ -0,0 +1,5 @@ +Este es el valor por defecto de la variable de la entidad. + +- **Lógica**: _verdadero_ o _falso_ +- **Número**: Puede ir desde el límite negativo hasta el límite positivo de un entero +- **Texto**: Valor de texto/palabra diff --git a/plugins/mcreator-localization/help/es_ES/entity/data_name.md b/plugins/mcreator-localization/help/es_ES/entity/data_name.md new file mode 100644 index 00000000000..02b2e67bcc5 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/entity/data_name.md @@ -0,0 +1,3 @@ +Este parámetro define el nombre de la variable. + +Principalmente usado por los bloques de procedimientos para obtener o definir su valor. diff --git a/plugins/mcreator-localization/help/es_ES/entity/data_type.md b/plugins/mcreator-localization/help/es_ES/entity/data_type.md new file mode 100644 index 00000000000..15a49457721 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/entity/data_type.md @@ -0,0 +1 @@ +Esta opción controla el tipo de variable de la entidad. Los tipos soportados son variables lógicas, numéricas y de texto. diff --git a/plugins/mcreator-localization/help/es_ES/entity/entity_data.md b/plugins/mcreator-localization/help/es_ES/entity/entity_data.md new file mode 100644 index 00000000000..0d9894531a3 --- /dev/null +++ b/plugins/mcreator-localization/help/es_ES/entity/entity_data.md @@ -0,0 +1,4 @@ +Añadir variables personalizadas a su entidad personalizada. + +Estas variables se sincronizan entre el lado del cliente y el lado del servidor, +para que uno de ellos pueda ser usado, por ejemplo, para cambiar la textura de tu entidad. diff --git a/plugins/mcreator-localization/help/fr_FR/armor/max_damage_absorbed.md b/plugins/mcreator-localization/help/fr_FR/armor/max_damage_absorbed.md index 7a90cda080c..dcee1258417 100644 --- a/plugins/mcreator-localization/help/fr_FR/armor/max_damage_absorbed.md +++ b/plugins/mcreator-localization/help/fr_FR/armor/max_damage_absorbed.md @@ -1,14 +1,15 @@ Ce paramètre définit la durabilité de l'armure et est effectivement appliqué comme: -* casque: dégâts_maximum_absorbés * 13 -* plastron: dégâts_maximum_absorbés * 15 -* jambières: dégâts_maximum_absorbés * 16 -* bottes: dégâts_maximum_absorbés * 11 +* casque: dégâts maximum absorbés * 11 +* plastron : dégâts maximum absorbés * 16 +* jambière: dégâts maximum absorbés * 15 +* bottes: dégâts maximum absorbés * 13 L'armure vanilla utilise les facteurs suivants: * Armure en cuir: 5 * Armure de cotte de mailles: 15 +* Armure en fer : 15 * Armure d'or: 7 * Armure de diamant: 33 * Armure de netherite: 37 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/block/special_information.md b/plugins/mcreator-localization/help/fr_FR/block/special_information.md index 1b43e5b5024..48da9480734 100644 --- a/plugins/mcreator-localization/help/fr_FR/block/special_information.md +++ b/plugins/mcreator-localization/help/fr_FR/block/special_information.md @@ -1 +1,3 @@ -Ce paramètre ajoute une info-bulle au bloc lorsque vous maintenez votre curseur sur le bloc dans votre inventaire. Si vous utilisez une info-bulle générée par une procédure et que votre bloc n'est pas détenu par une entité ou un item, la dépendance `entité` sera nulle. \ No newline at end of file +Ce paramètre ajoute une infobulle au bloc lorsque vous placez votre icône sur le bloc de votre inventaire. + +Si vous utilisez une infobulle générée par une procédure et que votre bloc est non détenu par une entité ou actuellement une entité d’article abandonné, la dépendance d’`entity` sera nulle. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/damagetype/effects.md b/plugins/mcreator-localization/help/fr_FR/damagetype/effects.md new file mode 100644 index 00000000000..b58a3182e5d --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/damagetype/effects.md @@ -0,0 +1 @@ +Ce paramètre détermine quels sons doivent être joués lors de la réception de dégâts de ce type diff --git a/plugins/mcreator-localization/help/fr_FR/damagetype/exhaustion.md b/plugins/mcreator-localization/help/fr_FR/damagetype/exhaustion.md new file mode 100644 index 00000000000..65e14f50974 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/damagetype/exhaustion.md @@ -0,0 +1,3 @@ +Ce paramètre détermine le degré d'épuisement appliqué au joueur lorsque les dégâts sont infligés. + +Des valeurs plus élevées épuisent la barre de faim plus rapidement. diff --git a/plugins/mcreator-localization/help/fr_FR/damagetype/item_death_message.md b/plugins/mcreator-localization/help/fr_FR/damagetype/item_death_message.md new file mode 100644 index 00000000000..b02ddc8f03e --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/damagetype/item_death_message.md @@ -0,0 +1,7 @@ +Ce message est affiché dans le chat quand un joueur est tué par une entité qui tient un item renommé. + +Vous pouvez utiliser les jetons suivants dans le message : + +- `` : le nom du joueur tué +- `` : le nom de l'entité qui a fait le dégât +- ``: le nom de l'item tenue par l'attaquant diff --git a/plugins/mcreator-localization/help/fr_FR/damagetype/normal_death_message.md b/plugins/mcreator-localization/help/fr_FR/damagetype/normal_death_message.md new file mode 100644 index 00000000000..ec09fccf5ef --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/damagetype/normal_death_message.md @@ -0,0 +1,8 @@ +Ce message s'affiche dans le chat lorsqu'un joueur meurt suite à des dégâts de ce type, dans la plupart des situations. + +Vous pouvez utiliser les jetons suivants dans le message : + +- ``: le nom du joueur décédé +- ``: le nom de l'entité qui a causé le dommage + +REMARQUE : utilisez le deuxième jeton uniquement si les dégâts sont toujours causés par un mob. diff --git a/plugins/mcreator-localization/help/fr_FR/damagetype/player_death_message.md b/plugins/mcreator-localization/help/fr_FR/damagetype/player_death_message.md new file mode 100644 index 00000000000..46375c32fe2 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/damagetype/player_death_message.md @@ -0,0 +1,6 @@ +Ce message s'affiche dans le chat lorsqu'un joueur meurt suite à des dégâts de ce type, mais a été récemment blessé par une autre entité. + +Vous pouvez utiliser les jetons suivants dans le message : + +- `` : le nom du joueur décédé +- `` : le nom de l'entité qui a causé le dommage diff --git a/plugins/mcreator-localization/help/fr_FR/damagetype/scaling.md b/plugins/mcreator-localization/help/fr_FR/damagetype/scaling.md new file mode 100644 index 00000000000..139d6026571 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/damagetype/scaling.md @@ -0,0 +1,6 @@ +Ce paramètre détermine si les dégâts infligés doivent augmenter avec difficulté. + +- `never` : la difficulté n'affecte pas les dégâts infligés +- `always` : la difficulté augmente toujours les dégâts infligés, quelle qu'en soit la source +- `when_caused_by_living_non_player` : la difficulté augmente les dégâts infligés uniquement s'ils sont causés par une entité vivante + (comme les zombies ou les araignées) diff --git a/plugins/mcreator-localization/help/fr_FR/entity/bounding_box_scale.md b/plugins/mcreator-localization/help/fr_FR/entity/bounding_box_scale.md new file mode 100644 index 00000000000..ba35cc1f8fc --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/bounding_box_scale.md @@ -0,0 +1,3 @@ +Cette fonctionnalité vous permet de contrôler la taille de la zone de collision de votre entité. + +Pour mettre à l'échelle l'apparence des entités dans le jeu, utilisez le paramètre "Échelle visuelle du modèle". diff --git a/plugins/mcreator-localization/help/fr_FR/entity/condition_can_breathe_underwater.md b/plugins/mcreator-localization/help/fr_FR/entity/condition_can_breathe_underwater.md new file mode 100644 index 00000000000..59e151db64a --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/condition_can_breathe_underwater.md @@ -0,0 +1 @@ +Quand cette condition est vraie, l’entité pourra respirer sous l’eau indéfiniment comme des poissons ou des calamars. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/entity/condition_display_model_layer.md b/plugins/mcreator-localization/help/fr_FR/entity/condition_display_model_layer.md new file mode 100644 index 00000000000..6a954cc8e96 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/condition_display_model_layer.md @@ -0,0 +1 @@ +Tant que la valeur renvoyée est vraie, cette couche de modèle est visible. diff --git a/plugins/mcreator-localization/help/fr_FR/entity/condition_fluids_can_push.md b/plugins/mcreator-localization/help/fr_FR/entity/condition_fluids_can_push.md new file mode 100644 index 00000000000..a71703edf95 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/condition_fluids_can_push.md @@ -0,0 +1,3 @@ +Lorsque cette condition est fausse, l’entité ne sera pas poussée par des fluides. Ceci est généralement souhaité lors de la fabrication d’une entité d’eau. + +La valeur par défaut pour les entités vivantes est vraie. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/entity/data_default_value.md b/plugins/mcreator-localization/help/fr_FR/entity/data_default_value.md new file mode 100644 index 00000000000..c719ec5b88a --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/data_default_value.md @@ -0,0 +1,5 @@ +Ceci est la valeur par défaut de la variable d'entité. + +- **Logic** : _vrai_ ou _faux_ +- **Nombre** Peut aller de la limite maximale négative jusqu'a la limite maximale positive +- String ( fil ) : Valeur sous forme de texte diff --git a/plugins/mcreator-localization/help/fr_FR/entity/data_name.md b/plugins/mcreator-localization/help/fr_FR/entity/data_name.md new file mode 100644 index 00000000000..61412c3dfe3 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/data_name.md @@ -0,0 +1,3 @@ +Ce paramètre défini le nom de cette variable. + +Principalement utilisé with des blocs de procédures pour obtenir ou mettre une valeur. diff --git a/plugins/mcreator-localization/help/fr_FR/entity/data_type.md b/plugins/mcreator-localization/help/fr_FR/entity/data_type.md new file mode 100644 index 00000000000..69418325224 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/data_type.md @@ -0,0 +1 @@ +Cette option contrôle le type de variable d'entité. Les types supportés sont de logique, nombre et de texte (string). diff --git a/plugins/mcreator-localization/help/fr_FR/entity/entity_data.md b/plugins/mcreator-localization/help/fr_FR/entity/entity_data.md new file mode 100644 index 00000000000..1acdb83fabf --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/entity_data.md @@ -0,0 +1,3 @@ +Ajouter des variables customisés pour votre entités customiser. + +Ces variables sont synchronisés entre le client et le serveur, donc l'une d'entre elle peut être utilisée, par exemple, pour changer la texture de votre entité. diff --git a/plugins/mcreator-localization/help/fr_FR/entity/glow_texture.md b/plugins/mcreator-localization/help/fr_FR/entity/glow_texture.md index 38a3283e52c..6a47547a6df 100644 --- a/plugins/mcreator-localization/help/fr_FR/entity/glow_texture.md +++ b/plugins/mcreator-localization/help/fr_FR/entity/glow_texture.md @@ -1,7 +1 @@ -La texture luminescente est une couche de texture supplémentaire facultative sur l'entité. - -Cette couche de texture doit avoir la même taille et la même disposition que la texture standard de l'entité. - -La texture luminescente sera utilisée pour définir la couche luminescente de l'entité. Des zones de texture plus brillantes rendront les parties correspondantes de l'entité plus luminescentes. - -Si vous n'avez pas besoin de couche luminescente, gardez la valeur par défaut (vide). \ No newline at end of file +La texture luminescente sera utilisée pour définir la couche luminescente de l'entité. Des zones de texture plus brillantes rendront les parties correspondantes de l'entité plus luminescentes. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/entity/model_layers.md b/plugins/mcreator-localization/help/fr_FR/entity/model_layers.md new file mode 100644 index 00000000000..a87fcf064a7 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/model_layers.md @@ -0,0 +1 @@ +Les calques de modèle dans la liste ci-dessous seront appliqués au-dessus du modèle de l'entité. diff --git a/plugins/mcreator-localization/help/fr_FR/entity/texture.md b/plugins/mcreator-localization/help/fr_FR/entity/texture.md index 2f095bf72a3..eb8c5435e87 100644 --- a/plugins/mcreator-localization/help/fr_FR/entity/texture.md +++ b/plugins/mcreator-localization/help/fr_FR/entity/texture.md @@ -1,3 +1,5 @@ La texture de votre entité. Assurez-vous que la texture est compatible avec le modèle selectionné. -Les modèles bipèdes, par exemple, ne supportent que des textures de type bipède 64x64. \ No newline at end of file +Les modèles bipèdes, par exemple, ne supportent que des textures de type bipède 64x64. + +Pour plus de définition de couche de modèles complexe, utilise l'onglet "${l10n.t("elementgui.living_entity.page_model_layers")} . \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/entity/visual_scale.md b/plugins/mcreator-localization/help/fr_FR/entity/visual_scale.md new file mode 100644 index 00000000000..2c4297f80ff --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/entity/visual_scale.md @@ -0,0 +1,3 @@ +Cette fonctionnalité vous permet de contrôler la taille du modèle visuel de l'entité dans le jeu. + +Pour mettre à l'échelle la boîte de collision de l'entité, utilisez le paramètre "Échelle de la boîte englobante". diff --git a/plugins/mcreator-localization/help/fr_FR/entity/water_entity.md b/plugins/mcreator-localization/help/fr_FR/entity/water_entity.md index ae2bc7f344f..3523408446c 100644 --- a/plugins/mcreator-localization/help/fr_FR/entity/water_entity.md +++ b/plugins/mcreator-localization/help/fr_FR/entity/water_entity.md @@ -1,3 +1,5 @@ Cocher de paramètre rend l'entité une entité marine. -Activer de paramètre fera en sorte que l'entité aie un type de navigateur et de controlleur marin. \ No newline at end of file +L’activation de ce paramètre permettra à l’entité d’avoir un navigateur de type eau, contrôleur de mouvement de l’eau, et permettre au géniteur du monde de l’engendrer dans les fluides. + +Cela ne fera pas apparaître l’entité dans les fluides. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/item/special_information.md b/plugins/mcreator-localization/help/fr_FR/item/special_information.md index 1b43e5b5024..f7202adf1bb 100644 --- a/plugins/mcreator-localization/help/fr_FR/item/special_information.md +++ b/plugins/mcreator-localization/help/fr_FR/item/special_information.md @@ -1 +1,3 @@ -Ce paramètre ajoute une info-bulle au bloc lorsque vous maintenez votre curseur sur le bloc dans votre inventaire. Si vous utilisez une info-bulle générée par une procédure et que votre bloc n'est pas détenu par une entité ou un item, la dépendance `entité` sera nulle. \ No newline at end of file +Ce paramètre ajoute une infobulle à l’item lorsque vous placez votre icône sur l’item de votre inventaire. + +Si vous utilisez une infobulle générée par la procédure et que votre item est non détenu par une entité ou actuellement une item laché par une entité, la dépendance d’`entity` sera nulle. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/structure/biomes_to_spawn.md b/plugins/mcreator-localization/help/fr_FR/structure/biomes_to_spawn.md new file mode 100644 index 00000000000..3050e9e1146 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/structure/biomes_to_spawn.md @@ -0,0 +1,3 @@ +Utilisez ce champ pour définir les biomes, où le spawn devrait avoir lieu. + +La liste ne peut pas être vide car les structures doivent explicitement définir les biomes auxquels elles sont appliquées. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/structure/generation_step.md b/plugins/mcreator-localization/help/fr_FR/structure/generation_step.md new file mode 100644 index 00000000000..86999502253 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/structure/generation_step.md @@ -0,0 +1 @@ +Cette option détermine à quel stade de la génération du monde, la structure doit être ajoutée. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/structure/projection.md b/plugins/mcreator-localization/help/fr_FR/structure/projection.md new file mode 100644 index 00000000000..180d3443db8 --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/structure/projection.md @@ -0,0 +1,5 @@ +Ce paramètre contrôle la façon dont la structure s’adapte au terrain. + +Utilisez terrain_matching si vous voulez que la structure corresponde au terrain, comme le font les chemins de village. Cela déplacera la hauteur de la structure sur certaines parties. + +Rigide va placer la structure à plat comme il est. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/structure/separation_spacing.md b/plugins/mcreator-localization/help/fr_FR/structure/separation_spacing.md new file mode 100644 index 00000000000..c7da03529ac --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/structure/separation_spacing.md @@ -0,0 +1,18 @@ +Les structures sont générées dans une grille. Ces deux paramètres contrôlent la grille : + +* **separation** - La distance minimale en chunks. Doit être plus petite que l’espacement. +* **spacing** - Approximativement la distance moyenne en chunks entre deux structures dans cet ensemble. + +Exemple avec `spacing = 5`, `separation = 2`. Il y aura une tentative de structure dans chaque grille de 5x5 chunks, et seulement à `X` une structure peut apparaître. + +``` +............. +..XXX..XXX..X +..XXX..XXX..X +..XXX..XXX..X +............. +............. +..XXX..XXX..X +..XXX..XXX..X +..XXX..XXX..X +``` \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/structure/terrain_adaptation.md b/plugins/mcreator-localization/help/fr_FR/structure/terrain_adaptation.md new file mode 100644 index 00000000000..b3b9b3652ad --- /dev/null +++ b/plugins/mcreator-localization/help/fr_FR/structure/terrain_adaptation.md @@ -0,0 +1,6 @@ +Ce paramètre contrôle la façon dont le terrain s’adapte à la structure. + +* **none** - Aucun effet sur le terrain. +* **beard_thin** - Ajoute du terrain sous la structure et supprime à l'intérieur de la structure. C'est ce que les villages utilisent. +* **beard_box** - Version plus forte de beard_thin. C’est ce que les anciennes villes utilisent. +* **bury** - Ajoute du terrain complètement autour de la structure. C’est ce que les strongholds utilisent. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/fr_FR/tag/type.md b/plugins/mcreator-localization/help/fr_FR/tag/type.md index f8a21e78f78..284408c58c1 100644 --- a/plugins/mcreator-localization/help/fr_FR/tag/type.md +++ b/plugins/mcreator-localization/help/fr_FR/tag/type.md @@ -1,4 +1,5 @@ * **Items:** utilisez ceci pour regrouper plusieurs items pour des recettes, des procédures, ... Les tags d'item remplacent le vieux système de dictionnaire de minerais. * **Blocs:** n'utilisez le type de bloc que si vous ciblez un bloc et non son item (_ces tags ne peuvent pas être utilisées dans les recettes_) * **Entités:** utilisez ceci pour regrouper plusieurs entités dans un même but. -* **Fonctions:** ce type de tag est utilisé pour étiqueter les fonctions en groupes. Un de ces groupes est appelé "tick" de l'espace de noms "minecraft". Les fonctions marquées sous l'espace de noms "tick" seront exécutées à chaque tick de jeu. \ No newline at end of file +* **Fonction:** Ce type de tags est utilisés pour taguer des fonctions dans des groupes. Un groupe est appelé "tick" qui viens du nom "Minecraft". Les fonctions taguer sous le nom "tick" seront exécuté chaque tick du jeu. +* **Type de dégâts :** Ce type de tags est utilisé pour grouper les types de dégâts ensemble. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/armor/max_damage_absorbed.md b/plugins/mcreator-localization/help/it_IT/armor/max_damage_absorbed.md index 659fcc632d7..3f99287dd9b 100644 --- a/plugins/mcreator-localization/help/it_IT/armor/max_damage_absorbed.md +++ b/plugins/mcreator-localization/help/it_IT/armor/max_damage_absorbed.md @@ -1,14 +1,15 @@ Questo parametro definisce la durata delle armature ed è applicato in modo efficace come: -* elmetto: danno_massimo_assorbito * 13 -* corpetto: danno_massimo_assorbito * 15 -* gambiere: danno_massimo_assorbito * 16 -* stivali: danno_massimo_assorbito * 11 +* elmo: danno_massimo_assorbito * 11 +* corazza: danno_massimo_assorbito * 16 +* gambiere: danno_massimo_assorbito * 15 +* stivali: danno_massimo_assorbito * 13 L'armatura vanilla utilizza i seguenti fattori: * Armature in pelle: 5 * Armature in cotta di maglia: 15 +* Armatura in ferro: 15 * Armatura in oro: 7 * Armatura in diamante: 33 * Armatura in netherite: 37 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/block/special_information.md b/plugins/mcreator-localization/help/it_IT/block/special_information.md index 395ca89a72f..4278ae9de58 100644 --- a/plugins/mcreator-localization/help/it_IT/block/special_information.md +++ b/plugins/mcreator-localization/help/it_IT/block/special_information.md @@ -1 +1,3 @@ -Questo parametro aggiunge un suggerimento al blocco quando tieni la tua icona sopra il blocco nel tuo inventario. Se utilizzi un suggerimento generato da una procedura e il tuo blocco non è mantenuto da un'entità o da una gemma, la dipendenza `entità` sarà nulla. \ No newline at end of file +Questo parametro aggiunge una descrizione al blocco quando tieni la tua icona sopra di esso nel tuo inventario. + +Se utilizzi una descrizione generata da una procedura e il tuo blocco non è impugnato da un'entità o attualmente un'entità item per terra, la dipendenza `entità` sarà nulla. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/damagetype/effects.md b/plugins/mcreator-localization/help/it_IT/damagetype/effects.md new file mode 100644 index 00000000000..ca8bfc179f6 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/damagetype/effects.md @@ -0,0 +1 @@ +Questo parametro determina quali suoni devono essere riprodotti quando si ricevono danni di questo tipo diff --git a/plugins/mcreator-localization/help/it_IT/damagetype/exhaustion.md b/plugins/mcreator-localization/help/it_IT/damagetype/exhaustion.md new file mode 100644 index 00000000000..ca575ca5415 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/damagetype/exhaustion.md @@ -0,0 +1,3 @@ +Questo parametro determina quando esaurimento viene applicato al giocatore quando il danno viene inflitto. + +Valori più elevati riducono la barra della fame più velocemente. diff --git a/plugins/mcreator-localization/help/it_IT/damagetype/item_death_message.md b/plugins/mcreator-localization/help/it_IT/damagetype/item_death_message.md new file mode 100644 index 00000000000..95d4baf4976 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/damagetype/item_death_message.md @@ -0,0 +1,7 @@ +Questo messaggio viene visualizzato in chat quando un giocatore viene ucciso da un entità con un elemento nominato. + +È possibile utilizzare i seguenti token nel messaggio: + +- ``: il nome del giocatore che è morto +- ``: il nome dell'entità che ha inflitto il danno +- ``: il nome dell'oggetto tenuto dall'attaccante diff --git a/plugins/mcreator-localization/help/it_IT/damagetype/normal_death_message.md b/plugins/mcreator-localization/help/it_IT/damagetype/normal_death_message.md new file mode 100644 index 00000000000..5fab22ebea0 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/damagetype/normal_death_message.md @@ -0,0 +1,8 @@ +Questo messaggio viene visualizzato in chat quando un giocatore muore per danni di questo tipo, nella maggior parte delle situazioni. + +È possibile utilizzare i seguenti token nel messaggio: + +- ``: il nome del giocatore che è morto +- ``: il nome dell'entità' che ha inflitto il danno + +NOTA: Utilizza il secondo token solo se il danno è sempre causato da un mob. diff --git a/plugins/mcreator-localization/help/it_IT/damagetype/player_death_message.md b/plugins/mcreator-localization/help/it_IT/damagetype/player_death_message.md new file mode 100644 index 00000000000..e1c04a95df3 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/damagetype/player_death_message.md @@ -0,0 +1,6 @@ +Questo messaggio viene visualizzato in chat quando un giocatore muore per danni di questo tipo, ma recentemente è stato ferito da un altra entità. + +È possibile utilizzare i seguenti token nel messaggio: + +- ``: il nome del giocatore che è morto +- ``: il nome dell'entità che ha inflitto il danno diff --git a/plugins/mcreator-localization/help/it_IT/damagetype/scaling.md b/plugins/mcreator-localization/help/it_IT/damagetype/scaling.md new file mode 100644 index 00000000000..1559397e626 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/damagetype/scaling.md @@ -0,0 +1,6 @@ +Questo parametro determina se il danno inflitto dovrebbe aumentare con la difficoltà. + +- `never`: la difficoltà non influisce sul danno inflitto +- `always`: la difficoltà aumenta sempre il danno inflitto, indipendentemente dalla sorgente +- `when_caused_by_living_non_player`: la difficoltà aumenta il danno inflitto solo se è causato da un'entità vivente + (come zombie o ragni) diff --git a/plugins/mcreator-localization/help/it_IT/entity/bounding_box_scale.md b/plugins/mcreator-localization/help/it_IT/entity/bounding_box_scale.md new file mode 100644 index 00000000000..419efcf25c3 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/bounding_box_scale.md @@ -0,0 +1,3 @@ +Questa funzionalità ti consente di controllare le dimensioni della scatola di collisione della tua entità. + +Per ridimensionare l'aspetto delle entità nel gioco, utilizzare il parametro "Model visual scale". diff --git a/plugins/mcreator-localization/help/it_IT/entity/condition_can_breathe_underwater.md b/plugins/mcreator-localization/help/it_IT/entity/condition_can_breathe_underwater.md new file mode 100644 index 00000000000..773ff085057 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/condition_can_breathe_underwater.md @@ -0,0 +1 @@ +Quando questa condizione è vera, l'entità sarà in grado di respirare sott'acqua indefinitamente come pesci o calamari. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/entity/condition_display_model_layer.md b/plugins/mcreator-localization/help/it_IT/entity/condition_display_model_layer.md new file mode 100644 index 00000000000..8e5643d0416 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/condition_display_model_layer.md @@ -0,0 +1 @@ +Mentre il valore restituito è vero, il livello del modello è visibile. diff --git a/plugins/mcreator-localization/help/it_IT/entity/condition_fluids_can_push.md b/plugins/mcreator-localization/help/it_IT/entity/condition_fluids_can_push.md new file mode 100644 index 00000000000..355c68c5f9c --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/condition_fluids_can_push.md @@ -0,0 +1,3 @@ +Quando questa condizione è falsa, l'entità non sarà spinta dai fluidi. Dovresti abilitarla durante la creazione di un'entità acquatica. + +Il valore predefinito per le entità viventi è vero. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/entity/data_default_value.md b/plugins/mcreator-localization/help/it_IT/entity/data_default_value.md new file mode 100644 index 00000000000..d7378ecd67b --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/data_default_value.md @@ -0,0 +1,5 @@ +Questo è il valore predefinito della variabile dell'entità. + +- **Logica**: _vero_ o _falso_ +- **Numero**: Può passare dal limite massimo negativo al limite massimo positivo di un numero intero +- **Stringa**: Valore testo/stringa diff --git a/plugins/mcreator-localization/help/it_IT/entity/data_name.md b/plugins/mcreator-localization/help/it_IT/entity/data_name.md new file mode 100644 index 00000000000..0876532740b --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/data_name.md @@ -0,0 +1,3 @@ +Questo parametro definisce il nome di questa variabile. + +Utilizzato principalmente con blocchi di procedure per ottenere o impostare il suo valore. diff --git a/plugins/mcreator-localization/help/it_IT/entity/data_type.md b/plugins/mcreator-localization/help/it_IT/entity/data_type.md new file mode 100644 index 00000000000..eba36283eae --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/data_type.md @@ -0,0 +1 @@ +Questa opzione controlla il tipo di questa variabile di entità. I tipi supportati sono le variabili logica, numerica e stringa. diff --git a/plugins/mcreator-localization/help/it_IT/entity/entity_data.md b/plugins/mcreator-localization/help/it_IT/entity/entity_data.md new file mode 100644 index 00000000000..2a817532fc7 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/entity_data.md @@ -0,0 +1,4 @@ +Aggiungi delle variabili personalizzate alla tua entità personalizzata. + +Queste variabili sono sincronizzate tra lato client e lato server, +in modo che uno di loro possa essere utilizzato, per esempio, per cambiare la texture della tua entità. diff --git a/plugins/mcreator-localization/help/it_IT/entity/glow_texture.md b/plugins/mcreator-localization/help/it_IT/entity/glow_texture.md index 776f6373b07..a2efb7e7b6d 100644 --- a/plugins/mcreator-localization/help/it_IT/entity/glow_texture.md +++ b/plugins/mcreator-localization/help/it_IT/entity/glow_texture.md @@ -1,7 +1 @@ -La texture luminosa è un ulteriore livello di texture opzionale sul mob. - -Questo livello di texture dovrebbe avere le stesse dimensioni e layout della texture mob standard. - -La texture luminosa verrà utilizzata per definire il livello luminoso del mob. Aree di texture più luminose lo faranno fanno sì che queste parti del mob brillino di più. - -Se non hai bisogno del livello luminoso, mantienilo al valore predefinito (vuoto). \ No newline at end of file +La texture luminosa verrà utilizzata per definire il livello luminoso del mob. Aree di texture più luminose lo faranno fanno sì che queste parti del mob brillino di più. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/entity/model_layers.md b/plugins/mcreator-localization/help/it_IT/entity/model_layers.md new file mode 100644 index 00000000000..0be5c0970a8 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/model_layers.md @@ -0,0 +1 @@ +I livelli del modello nella lista sottostante saranno applicati in cima al modello dell'entità. diff --git a/plugins/mcreator-localization/help/it_IT/entity/texture.md b/plugins/mcreator-localization/help/it_IT/entity/texture.md index c4849f7ace3..250fa3d310d 100644 --- a/plugins/mcreator-localization/help/it_IT/entity/texture.md +++ b/plugins/mcreator-localization/help/it_IT/entity/texture.md @@ -1,3 +1,5 @@ La texture della tua entità. Assicurati che sia compatibile con il modello selezionato. -I modelli bipedi, ad esempio, supportano solo texture di tipo bipede 64x64 (64x32 prima di Minecraft 1.18). \ No newline at end of file +I modelli bipedi, ad esempio, supportano solo texture di tipo bipede 64x64 (64x32 prima di Minecraft 1.18). + +Per una definizione più complessa dei livelli di un modello, usa la scheda "${l10n.t("elementgui.living_entity.page_model_layers")}". \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/entity/visual_scale.md b/plugins/mcreator-localization/help/it_IT/entity/visual_scale.md new file mode 100644 index 00000000000..2f577568560 --- /dev/null +++ b/plugins/mcreator-localization/help/it_IT/entity/visual_scale.md @@ -0,0 +1,3 @@ +Questa funzionalità ti permette di controllare la dimensione del modello visito dell'entità' nel gioco. + +Per ridimensionare la casella di collisione dell'entità, utilizzare il parametro 'Bounding box scale'. diff --git a/plugins/mcreator-localization/help/it_IT/entity/water_entity.md b/plugins/mcreator-localization/help/it_IT/entity/water_entity.md index 09f70eba471..8428b32acdf 100644 --- a/plugins/mcreator-localization/help/it_IT/entity/water_entity.md +++ b/plugins/mcreator-localization/help/it_IT/entity/water_entity.md @@ -1,3 +1,5 @@ Selezionando questo parametro si rende l'entità un'entità acquatica. -Abilitando questo parametro l'entità avrà un pathfinding di tipo acquatico e un regolatore di movimento. \ No newline at end of file +Abilitando questo parametro l'entità avrà un navigatore di tipo acquatico, un regolatore di movimento nell'acqua e permetterà al generatore mondiale di generarla nei fluidi. + +Questo non farà generare l'entità nei fluidi. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/item/enable_ranged_item.md b/plugins/mcreator-localization/help/it_IT/item/enable_ranged_item.md index 0ffdbec92cb..d542187b0be 100644 --- a/plugins/mcreator-localization/help/it_IT/item/enable_ranged_item.md +++ b/plugins/mcreator-localization/help/it_IT/item/enable_ranged_item.md @@ -1 +1,7 @@ -Abilitando questo parametro, l'item diventerà un oggetto a distanza che gli permetterà di sparare un proiettile, come archi e balestre. \ No newline at end of file +Abilitando questo parametro, diventerà un oggetto a distanza che gli permetterà di sparare un proiettile, come archi e balestre. + +Per permettere a oggetti a distanza di lavorare, imposta l'animazione su arco o simile e assicurati di usare un valore diverso da zero per la durata di utilizzo dell'elemento. + +Se usi la funzione per oggetto a distanza, l'oggetto sparerà solo se l'oggetto richiesto (munizioni) è nell'inventario del giocatore. Queste sono freccie quando si utilizzano frecce vanilla o l'oggetto specificato nel parametro dell'oggetto richiesto di un proiettile personalizzato. + +Se si desidera sparare a un proiettile senza il sistema d'oggetto richiesto, utilizzare il trigger del pulsante destro del mouse della procedura e le procedure per sparare esso. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/item/special_information.md b/plugins/mcreator-localization/help/it_IT/item/special_information.md index b0bb935d17e..7dce4a6e370 100644 --- a/plugins/mcreator-localization/help/it_IT/item/special_information.md +++ b/plugins/mcreator-localization/help/it_IT/item/special_information.md @@ -1 +1,3 @@ -Questo parametro aggiunge un suggerimento all'item quando tieni la tua icona sopra il blocco nel tuo inventario. Se utilizzi un tooltip generato da una procedura e il tuo elemento non è mantenuto da un'entità o da una gemma, la dipendenza `entità` sarà nulla. \ No newline at end of file +Questo parametro aggiunge un suggerimento all'item quando tieni la tua icona sopra di esso nel tuo inventario. + +Se utilizzi una descrizione generata da una procedura e il tuo item non è impugnato da un'entità o attualmente un'entità item per terra, la dipendenza `entità` sarà nulla. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/tag/namespace.md b/plugins/mcreator-localization/help/it_IT/tag/namespace.md index cc12e09483f..a96980c3dbe 100644 --- a/plugins/mcreator-localization/help/it_IT/tag/namespace.md +++ b/plugins/mcreator-localization/help/it_IT/tag/namespace.md @@ -1,5 +1,6 @@ Questo parametro definisce il modo in cui funzionerà il tag. * **forge:** è un sostituto per l'Ore Dictionary per i tag. Possono essere utilizzati per dare ad altri creatori di mod l'accesso alla loro mod con la tua mod se fornisci loro il nome del tag. +* **c** è uno spazio dei nomi utilizzato dalle mod di Minecraft Fabric per i tag convenzionali (schema standardizzato di denominazione dei tag). * **minecraft:** è usato per aggiungere blocchi o item personalizzati ai gruppi di tag vaniglia. Ad esempio, aggiungendo i tronchi della tua mod al gruppo di tronchi di Minecraft (impostando il nome ai log e al namespace al minecraft). * **mod:** è usato per raggruppare gli item nella tua mod per uso interno. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/it_IT/tag/type.md b/plugins/mcreator-localization/help/it_IT/tag/type.md index 967832bf005..1392446e874 100644 --- a/plugins/mcreator-localization/help/it_IT/tag/type.md +++ b/plugins/mcreator-localization/help/it_IT/tag/type.md @@ -1,4 +1,5 @@ * **Item:** utilizzalo per raggruppare più elementi insieme per ricette, procedure, ... I tag degli item sostituiscono il vecchio sistema dell'Ore Dictionary * **Blocchi:** usa il tipo di blocco solo se stai cercando un blocco e non il suo item (_questi tag non possono essere usati nelle ricette_) * **Entità:** usa questo tipo di tag per raggruppare più entità insieme per uno stesso scopo. -* **Funzioni:** questo tipo di tag viene utilizzato per contrassegnare le funzioni in gruppi. Uno di questi gruppi è chiamato "tick" dallo spazio dei nomi "minecraft". Le funzioni contrassegnate dallo spazio dei nomi "tick" verranno eseguite a ogni tick del gioco. \ No newline at end of file +* **Funzioni:** questo tipo di tag viene utilizzato per etichettare le funzioni in gruppi. Uno di questi gruppi è chiamato "tick" dallo spazio dei nomi "minecraft". Funzioni etichettate sotto lo spazio dei nomi "tick" verranno eseguito a ogni tick di gioco. +* **Tipo di danni:** questo tipo di tag viene utilizzato per raggruppare insieme i tipi di danni. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ja_JP/entity/ai_continue_condition.md b/plugins/mcreator-localization/help/ja_JP/entity/ai_continue_condition.md new file mode 100644 index 00000000000..ee28b7cd5ce --- /dev/null +++ b/plugins/mcreator-localization/help/ja_JP/entity/ai_continue_condition.md @@ -0,0 +1 @@ +指定された場合、エンティティはこの条件を通過する限り、このタスクを実行します。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/announce_to_chat.md b/plugins/mcreator-localization/help/ko_KR/advancement/announce_to_chat.md new file mode 100644 index 00000000000..a629bf11342 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/announce_to_chat.md @@ -0,0 +1 @@ +플레이어가 발전 과제를 수행하면 채팅에 메세지가 출력됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/background.md b/plugins/mcreator-localization/help/ko_KR/advancement/background.md new file mode 100644 index 00000000000..2138214a156 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/background.md @@ -0,0 +1 @@ +발전 과제 분류 중 첫번째 항목인 경우, 이 옵션을 이용하여 과제 탭의 배경을 선택할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/description.md b/plugins/mcreator-localization/help/ko_KR/advancement/description.md new file mode 100644 index 00000000000..96b63caa4ad --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/description.md @@ -0,0 +1 @@ +여기에 발전 과제를 수행하는 방법에 대한 정보를 입력할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/hide_display.md b/plugins/mcreator-localization/help/ko_KR/advancement/hide_display.md new file mode 100644 index 00000000000..53827cf34bb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/hide_display.md @@ -0,0 +1 @@ +이 매개 변수를 체크하면 수행이 완료 되어도 발전 과제를 탭에서 숨깁니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/hide_if_not_completed.md b/plugins/mcreator-localization/help/ko_KR/advancement/hide_if_not_completed.md new file mode 100644 index 00000000000..29cc0ce85f8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/hide_if_not_completed.md @@ -0,0 +1 @@ +이 매개 변수는 수행이 완료될 때 까지 발전 과제 탭에서 과제를 숨깁니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/icon.md b/plugins/mcreator-localization/help/ko_KR/advancement/icon.md new file mode 100644 index 00000000000..80aa5c88173 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/icon.md @@ -0,0 +1,5 @@ +아이콘이 발전 과제 탭에 표시됩니다. + +만일 상위 과제인 경우에도 발전 과제 아이콘으로 표시됩니다. + +아이템만 지원되며. 아이템이 없는 블록은 아이콘으로 표시할 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/name.md b/plugins/mcreator-localization/help/ko_KR/advancement/name.md new file mode 100644 index 00000000000..1142b60e412 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/name.md @@ -0,0 +1 @@ +발전 과제의 이름입니다. 만일 부모 과제가 없다면 (상위 도전과제) 하위 발전 과제 항목의 이름이 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/parent.md b/plugins/mcreator-localization/help/ko_KR/advancement/parent.md new file mode 100644 index 00000000000..a53a9406719 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/parent.md @@ -0,0 +1,3 @@ +이 업적을 어느 발전 과제로 등재할 지에 대한 것입니다. + +"No parent: root" 를 선택하면 새로운 경로를 생성합니다. (새 발전 과제 탭). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/reward_function.md b/plugins/mcreator-localization/help/ko_KR/advancement/reward_function.md new file mode 100644 index 00000000000..1e814f8f70c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/reward_function.md @@ -0,0 +1 @@ +당신은 이 매개 변수를 통해 플레이어가 발전 과제를 수행했을 때 실행시킬 함수를 선택할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/reward_loot_tables.md b/plugins/mcreator-localization/help/ko_KR/advancement/reward_loot_tables.md new file mode 100644 index 00000000000..bcac1405f55 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/reward_loot_tables.md @@ -0,0 +1 @@ +발전 과제가 완료되면 플레이어는 이 필드에 사전 정의된 전리품 테이블에서 일부 아이템을 받게됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/reward_recipes.md b/plugins/mcreator-localization/help/ko_KR/advancement/reward_recipes.md new file mode 100644 index 00000000000..91a548ad46d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/reward_recipes.md @@ -0,0 +1 @@ +플레이어가 발전 과제를 완료하면 잠금 해제되는 레시피입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/reward_xp.md b/plugins/mcreator-localization/help/ko_KR/advancement/reward_xp.md new file mode 100644 index 00000000000..2e9d7211b2e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/reward_xp.md @@ -0,0 +1 @@ +플레이어가 발전 과제를 완료한 후 받게 되는 경험치입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/show_toast.md b/plugins/mcreator-localization/help/ko_KR/advancement/show_toast.md new file mode 100644 index 00000000000..d310f6c6f50 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/show_toast.md @@ -0,0 +1 @@ +플레이어가 발전 과제를 완료하면 화면 오른쪽 상단에 발전 과제가 표시됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/advancement/type.md b/plugins/mcreator-localization/help/ko_KR/advancement/type.md new file mode 100644 index 00000000000..c6c259833d4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/advancement/type.md @@ -0,0 +1,5 @@ +업적 유형은 아래와 같습니다. + +* 과제는 기본 업적 유형으로 가장 일반적입니다. +* 목표는 달성하기 위해 노력해야 하는 장기적인 목표입니다. +* 챌린지는 플레이어를 시험하거나 무언가에 도전시키는 것입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/armor_layer_texture.md b/plugins/mcreator-localization/help/ko_KR/armor/armor_layer_texture.md new file mode 100644 index 00000000000..7513447e867 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/armor_layer_texture.md @@ -0,0 +1 @@ +갑옷 레이어 텍스처는 플레이어가 갑옷을 입고 있을 때 표시되는 텍스처입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/body_tick.md b/plugins/mcreator-localization/help/ko_KR/armor/body_tick.md new file mode 100644 index 00000000000..d2c31e485ac --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/body_tick.md @@ -0,0 +1,3 @@ +개체가 몸체/흉갑 방어구를 장착한 경우 매 틱마다 작업 절차가 실행됩니다. + +전달된 개체는 갑옷을 입고 있는 개체이고, 전달된 아이템 스택은 갑옷의 아이템 스택입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/boots_tick.md b/plugins/mcreator-localization/help/ko_KR/armor/boots_tick.md new file mode 100644 index 00000000000..589dd98e74f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/boots_tick.md @@ -0,0 +1,3 @@ +개체가 부츠 방어구를 장착한 경우 매 틱마다 절차가 실행됩니다. + +전달된 개체는 갑옷을 입고 있는 개체이고, 전달된 아이템 스택은 갑옷의 아이템 스택입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/damage_values.md b/plugins/mcreator-localization/help/ko_KR/armor/damage_values.md new file mode 100644 index 00000000000..bfdd1d87e5d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/damage_values.md @@ -0,0 +1 @@ +이 숫자는 개체가 손상을 입을 때 각 갑옷 파트들이 얼마나 대미지를 잘 경감하는지 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/enchantability.md b/plugins/mcreator-localization/help/ko_KR/armor/enchantability.md new file mode 100644 index 00000000000..af623d25fde --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/enchantability.md @@ -0,0 +1,10 @@ +이 갑옷에 얼마나 흔하게 희귀 마법이 부여될 수 있는지 정의합니다. 마법 부여율이 높을수록 갑옷에 마법을 부여할 때 더 좋은 마법을 부여할 수 있습니다. + +바닐라 값: + +* 가죽 방어구: 15 +* 사슬 방어구: 12 +* 철 방어구: 9 +* 금 방어구: 25 +* 다이아몬드 방어구: 10 +* 네더라이트 방어구: 15 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/equip_sound.md b/plugins/mcreator-localization/help/ko_KR/armor/equip_sound.md new file mode 100644 index 00000000000..7695a8410b4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/equip_sound.md @@ -0,0 +1 @@ +플레이어가 방어구를 장착할 때 나는 소리입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/helmet_tick.md b/plugins/mcreator-localization/help/ko_KR/armor/helmet_tick.md new file mode 100644 index 00000000000..62e329af6d7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/helmet_tick.md @@ -0,0 +1,3 @@ +개체가 헬맷 방어구를 장착한 경우 매 틱마다 작업 절차가 실행됩니다. + +전달된 개체는 갑옷을 입고 있는 개체이고, 전달된 아이템스택은 갑옷의 아이템스택입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/knockback_resistance.md b/plugins/mcreator-localization/help/ko_KR/armor/knockback_resistance.md new file mode 100644 index 00000000000..272d7b5ba78 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/knockback_resistance.md @@ -0,0 +1 @@ +이 매개 변수는 갑옷의 밀치기 저항을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/leggings_tick.md b/plugins/mcreator-localization/help/ko_KR/armor/leggings_tick.md new file mode 100644 index 00000000000..49cbe01699e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/leggings_tick.md @@ -0,0 +1,3 @@ +개체가 레깅스 방어구를 장착한 경우 매 틱마다 절차가 실행됩니다. + +전달된 개체는 갑옷을 입고 있는 개체이고, 전달된 아이템 스택은 갑옷의 아이템 스택입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/max_damage_absorbed.md b/plugins/mcreator-localization/help/ko_KR/armor/max_damage_absorbed.md new file mode 100644 index 00000000000..5e96d984546 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/max_damage_absorbed.md @@ -0,0 +1,14 @@ +이 매개 변수는 방어구 내구성을 정의하며, 실제로 다음과 같이 적용됩니다: + +* 헬멧: max_damage_absorbed * 13 +* 흉갑: max_damage_absorbed * 15 +* 레깅스: max_damage_absorbed * 16 +* 부츠: max_damage_absorbed * 11 + +바닐라 방어구는 다음의 인자를 사용합니다: + +* 가죽 방어구: 5 +* 사슬 방어구: 15 +* 금 방어구: 7 +* 다이아몬드 방어구: 33 +* 네더라이트 방어구: 37 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/piglin_neutral.md b/plugins/mcreator-localization/help/ko_KR/armor/piglin_neutral.md new file mode 100644 index 00000000000..b26225d2cef --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/piglin_neutral.md @@ -0,0 +1 @@ +이 조건은 갑옷 파츠가 금 방어구 처럼 근처의 피글린을 중립으로 만드는지 여부를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/repair_items.md b/plugins/mcreator-localization/help/ko_KR/armor/repair_items.md new file mode 100644 index 00000000000..0b739eef402 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/repair_items.md @@ -0,0 +1 @@ +수리 아이템 매개 변수는 모루를 통한 방어구 수리에 사용할 수 있는 아이템을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/armor/toughness.md b/plugins/mcreator-localization/help/ko_KR/armor/toughness.md new file mode 100644 index 00000000000..eaccb85251e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/armor/toughness.md @@ -0,0 +1,3 @@ +강인함은 갑옷의 보호를 증가시키는 값입니다. + +다이아몬드 방어구의 강인함은 2.0 입니다. (총합 8.0) 네더라이트 방어구의 강인함은 3.0 입니다. (총합 12.0). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/additions_sound.md b/plugins/mcreator-localization/help/ko_KR/biome/additions_sound.md new file mode 100644 index 00000000000..3936d16562e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/additions_sound.md @@ -0,0 +1 @@ +생물 군계에서 재생되는 추가 사운드입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/air_color.md b/plugins/mcreator-localization/help/ko_KR/biome/air_color.md new file mode 100644 index 00000000000..72c1513021b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/air_color.md @@ -0,0 +1 @@ +이 매개 변수는 생물 군계의 하늘 색상을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/ambient_sound.md b/plugins/mcreator-localization/help/ko_KR/biome/ambient_sound.md new file mode 100644 index 00000000000..4108cebae63 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/ambient_sound.md @@ -0,0 +1 @@ +이 주변음은 생물 군계에서 지속적으로 재생됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/branch_block.md b/plugins/mcreator-localization/help/ko_KR/biome/branch_block.md new file mode 100644 index 00000000000..3e92c4a9d68 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/branch_block.md @@ -0,0 +1 @@ +이 매개 변수는 사용자 정의 나무를 선택한 경우 나뭇잎에 사용되는 블록을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/colors.md b/plugins/mcreator-localization/help/ko_KR/biome/colors.md new file mode 100644 index 00000000000..52a1bbde0d4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/colors.md @@ -0,0 +1 @@ +이 매개 변수는 생물 군계에 대한 사용자 정의 색상을 활성화합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/coverage_estimate.md b/plugins/mcreator-localization/help/ko_KR/biome/coverage_estimate.md new file mode 100644 index 00000000000..d09723d1b35 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/coverage_estimate.md @@ -0,0 +1,5 @@ +이 필드는 이 생물 군계가 오버월드 표면을 얼마나 덮을지에 대한 추정치를 제공합니다. 오버월드 생물 군계가 사용하는 범위이므로 생물 군계 값이 -1과 1 사이인 경우에만 제대로 작동합니다. + +생물 군계가 네더 또는 오버월드 동굴에서 사용되는 경우 본 견적은 유효하지 않습니다. + +사용자 정의 차원에서 생물 군계를 사용할 때 적용 범위는 차원에 있는 생물 군계의 양과 차원에 있는 생물 군계의 생물 군계 생성 매개 변수에 따라 달라집니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/dead_bushes_per_chunk.md b/plugins/mcreator-localization/help/ko_KR/biome/dead_bushes_per_chunk.md new file mode 100644 index 00000000000..f5231c1af4c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/dead_bushes_per_chunk.md @@ -0,0 +1 @@ +이 매개 변수는 생물 군계 청크 당 마른 덤불의 수를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/default_features.md b/plugins/mcreator-localization/help/ko_KR/biome/default_features.md new file mode 100644 index 00000000000..966b6e69c39 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/default_features.md @@ -0,0 +1 @@ +기본 기능들은 생물 군계에서 사용할 수 있는 사전 구성된 기능(Minecraft 기능) 입니다. diff --git a/plugins/mcreator-localization/help/ko_KR/biome/foliage_color.md b/plugins/mcreator-localization/help/ko_KR/biome/foliage_color.md new file mode 100644 index 00000000000..2135e5667f4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/foliage_color.md @@ -0,0 +1 @@ +이 매개 변수는 이 생물 군계의 잎사귀(나뭇잎) 색상을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/fruits_block.md b/plugins/mcreator-localization/help/ko_KR/biome/fruits_block.md new file mode 100644 index 00000000000..ed188d56746 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/fruits_block.md @@ -0,0 +1,3 @@ +이 매개 변수는 사용자 지정 나무가 활성화된 경우 정글나무의 코코아 콩과 같은 과일에 사용되는 블록을 제어합니다. + +나무 열매를 비활성화 하려면 공기 블록을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/gen_continentalness.md b/plugins/mcreator-localization/help/ko_KR/biome/gen_continentalness.md new file mode 100644 index 00000000000..802ccd1185f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/gen_continentalness.md @@ -0,0 +1,15 @@ +대륙성은 생물 군계가 해안에서 얼마나 멀리 떨어져 있는지를 제어합니다. 값이 작을수록 해안에 가까운 생물군계를 의미하고, 값이 높을수록 생물군계를 의미합니다. 해안에서 더 멀고 높이가 더 높은 경우입니다(예: 산맥). + +비슷한 대륙성을 지닌 생물 군계가 서로 더 가깝게 생성됩니다. 생성할 때 세계에서 같은 자리를 놓고 경쟁하게 됩니다. 값이 너무 비슷하면 일부 생물 군계가 생성되지 않을 수 있습니다. + +-2에서 2 사이의 값이 유효하지만 바닐라 생물 군계는 -1에서 1 사이의 값만 사용합니다. + +오버월드 바닐라 생물 군계는 다음 값 범위를 사용합니다: + +* 깊은 바다: -1.05 부터 -0.455 +* 바다: -0.455 부터 -0.19 +* 해변: -0.19 부터 -0.11 +* 내륙: -0.11 부터 0.55 +* 내륙 근처: -0.11 부터 0.03 +* 내륙 중부: 0.03 부터 0.3 +* 먼 내륙: 0.3 부터 1.0 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/gen_erosion.md b/plugins/mcreator-localization/help/ko_KR/biome/gen_erosion.md new file mode 100644 index 00000000000..54f246fa435 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/gen_erosion.md @@ -0,0 +1,15 @@ +침식은 지형이 얼마나 침식되는지 제어합니다. 값이 작을수록 일반적으로 더 평평한 세계 지역에서 생성되는 생물 군계를 나타냅니다. + +침식이 유사한 생물군계는 서로 더 가깝게 생성되며 생성 시 세계에서 동일한 지점을 두고 경쟁하게 됩니다. 값이 너무 비슷하면 일부 생물 군계가 생성되지 않을 수 있습니다. + +-2에서 2 사이의 값이 유효하지만 바닐라 생물 군계는 -1에서 1 사이의 값만 사용합니다. + +다양한 오버월드 바닐라 생물 군계는 다음 범위 값을 사용합니다. + +* -1.0 부터 -0.78 +* -0.78 부터 -0.375 +* -0.375 부터 -0.2225 +* -0.2225 부터 0.05 +* 0.05 부터 0.45 +* 0.45 부터 0.5 +* 0.55 부터 1.0 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/gen_humidity.md b/plugins/mcreator-localization/help/ko_KR/biome/gen_humidity.md new file mode 100644 index 00000000000..6b6ce3a9fb4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/gen_humidity.md @@ -0,0 +1,13 @@ +이 매개 변수는 기후가 아닌 생물 군계 생성을 제어합니다. + +습도가 비슷한 생물 군계는 서로 더 가깝게 생성됩니다. 생성할 때 세계에서 같은 자리를 놓고 경쟁하게 됩니다. 값이 너무 비슷하면 일부 생물 군계가 생성되지 않을 수 있습니다. + +-2에서 2 사이의 값이 유효하지만 바닐라 생물 군계는 -1에서 1 사이의 값만 사용합니다. + +다양한 오버월드 바닐라 생물 군계는 다음 범위값을 사용합니다. + +* -1.0 부터 -0.35 +* -0.35 부터 -0.1 +* -0.1 부터 0.1 +* 0.1 부터 0.3 +* 0.3 부터 1.0 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/gen_temperature.md b/plugins/mcreator-localization/help/ko_KR/biome/gen_temperature.md new file mode 100644 index 00000000000..e618a359e56 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/gen_temperature.md @@ -0,0 +1,13 @@ +이 매개 변수는 기후가 아닌 생물 군계 생성을 제어합니다. + +온도가 비슷한 생물 군계는 서로 더 가깝게 생성됩니다. 생성할 때 세계에서 같은 자리를 놓고 경쟁하게 됩니다. 값이 너무 비슷하면 일부 생물 군계가 생성되지 않을 수 있습니다. + +-2에서 2 사이의 값이 유효하지만 바닐라 생물 군계는 -1에서 1 사이의 값만 사용합니다. + +다양한 오버월드 바닐라 생물 군계는 다음 범위값을 사용합니다. + +* -1.0 부터 -0.45 +* -0.45 부터 -0.15 +* -0.15 부터 0.2 +* 0.2 부터 0.55 +* 0.5 부터 1.0 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/gen_weirdness.md b/plugins/mcreator-localization/help/ko_KR/biome/gen_weirdness.md new file mode 100644 index 00000000000..2ff104c61ae --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/gen_weirdness.md @@ -0,0 +1,3 @@ +유사한 기이함을 지닌 생물 군계는 서로 더 가깝게 생성되며 생성 시 세계에서 동일한 지점을 두고 경쟁하게 됩니다. 값이 너무 비슷하면 일부 생물 군계가 생성되지 않을 수 있습니다. + +-2에서 2 사이의 값이 유효하지만 바닐라 생물 군계는 -1에서 1 사이의 값만 사용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_bastion_remnants.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_bastion_remnants.md new file mode 100644 index 00000000000..2767639d4b0 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_bastion_remnants.md @@ -0,0 +1 @@ +생물 군계에 요새 잔해를 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_buried_treasures.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_buried_treasures.md new file mode 100644 index 00000000000..48aaf22d4e8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_buried_treasures.md @@ -0,0 +1 @@ +생물 군계에 묻힌 보물을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_desert_pyramids.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_desert_pyramids.md new file mode 100644 index 00000000000..6a226d17f77 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_desert_pyramids.md @@ -0,0 +1 @@ +생물 군계에 사막 피라미드를 포함하려면 이 설정을 선택하십시오 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_end_cities.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_end_cities.md new file mode 100644 index 00000000000..911c1fc37ac --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_end_cities.md @@ -0,0 +1 @@ +생물 군계에 엔드 도시를 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_igloo.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_igloo.md new file mode 100644 index 00000000000..afc59767451 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_igloo.md @@ -0,0 +1 @@ +생물 군계에 이글루를 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_jungle_temples.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_jungle_temples.md new file mode 100644 index 00000000000..486f2a62a48 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_jungle_temples.md @@ -0,0 +1 @@ +생물 군계에 정글 사원을 생성하려면 이 선택을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_lakes.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_lakes.md new file mode 100644 index 00000000000..f27e0deff87 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_lakes.md @@ -0,0 +1 @@ +이 매개 변수는 이 생물 군계에 호수가 생성되어야 하는지 여부를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_mineshafts.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_mineshafts.md new file mode 100644 index 00000000000..c08e8bb1f3d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_mineshafts.md @@ -0,0 +1 @@ +생물 군계에 폐광을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_mineshafts_mesa.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_mineshafts_mesa.md new file mode 100644 index 00000000000..2213d5e8f60 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_mineshafts_mesa.md @@ -0,0 +1 @@ +메사 생물 군계에서 폐광을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_nether.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_nether.md new file mode 100644 index 00000000000..ec5f0b593a7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_nether.md @@ -0,0 +1 @@ +이 생물 군계가 네더 차원에서도 생성되도록 하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_nether_bridges.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_nether_bridges.md new file mode 100644 index 00000000000..28f6aff3295 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_nether_bridges.md @@ -0,0 +1 @@ +생물 군계에 네더 요새를 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_nether_fossils.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_nether_fossils.md new file mode 100644 index 00000000000..906fffc3886 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_nether_fossils.md @@ -0,0 +1 @@ +생물 군계에서 네더 화석을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_ocean_monuments.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_ocean_monuments.md new file mode 100644 index 00000000000..79c89debe09 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_ocean_monuments.md @@ -0,0 +1 @@ +생물 군계에 바다 유적을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_ocean_ruins.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_ocean_ruins.md new file mode 100644 index 00000000000..2fa0ab4a800 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_ocean_ruins.md @@ -0,0 +1,4 @@ +생물 군계에 해저 폐허를 생성하려면 이 설정을 선택하십시오. +* NONE: 해저 폐허가 생성되지 않음 +* COLD: 돌로 이루어진 해저 폐허가 생성됨 +* WARM: 사암으로 이루어진 해저 폐허가 생성됨 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_overworld.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_overworld.md new file mode 100644 index 00000000000..a3d4f73c4d9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_overworld.md @@ -0,0 +1 @@ +이 생물 군계를 사용자 정의 차원에서만 사용하려면 이 옵션을 비활성화 하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_overworld_caves.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_overworld_caves.md new file mode 100644 index 00000000000..1aec290074d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_overworld_caves.md @@ -0,0 +1 @@ +이 생물 군계가 오버월드의 지하(동굴) 에서도 생성되도록 하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_pillager_outposts.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_pillager_outposts.md new file mode 100644 index 00000000000..e5a64aba81d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_pillager_outposts.md @@ -0,0 +1 @@ +생물 군계에 약탈자 전초기지를 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_ruined_portals.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_ruined_portals.md new file mode 100644 index 00000000000..43869115f12 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_ruined_portals.md @@ -0,0 +1 @@ +이 설정을 사용하면 생물 군계 내부에 무너진 차원문을 생성할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_shipwrecks.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_shipwrecks.md new file mode 100644 index 00000000000..4e6dd97db0b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_shipwrecks.md @@ -0,0 +1 @@ +생물 군계에 난파선을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_shipwrecks_beached.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_shipwrecks_beached.md new file mode 100644 index 00000000000..a7e6cc0ec30 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_shipwrecks_beached.md @@ -0,0 +1 @@ +생물 군계에 해변에 떠밀려온 난파선을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_strongholds.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_strongholds.md new file mode 100644 index 00000000000..d57c7b7df12 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_strongholds.md @@ -0,0 +1 @@ +생물 군계에 엔더 요새를 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_swamp_huts.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_swamp_huts.md new file mode 100644 index 00000000000..c87dff42a1d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_swamp_huts.md @@ -0,0 +1 @@ +생물 군계에 늪지 오두막을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/generate_woodland_mansions.md b/plugins/mcreator-localization/help/ko_KR/biome/generate_woodland_mansions.md new file mode 100644 index 00000000000..2cfd61aeb9c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/generate_woodland_mansions.md @@ -0,0 +1 @@ +생물 군계에 삼림 대저택을 생성하려면 이 설정을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/grass_color.md b/plugins/mcreator-localization/help/ko_KR/biome/grass_color.md new file mode 100644 index 00000000000..78f5975067a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/grass_color.md @@ -0,0 +1,3 @@ +이 매개 변수는 생물 군계의 잔디 색상을 제어합니다. + +이 매개 변수는 다른 식물(잎) 의 색상 또한 변경합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/ground_block.md b/plugins/mcreator-localization/help/ko_KR/biome/ground_block.md new file mode 100644 index 00000000000..847cf905549 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/ground_block.md @@ -0,0 +1,6 @@ +이 매개 변수는 생물 군계의 최상 레이어의 블록을 제어합니다. + +일반적으로 바닐라, 또는 사용자 정의 잔디가 대부분의 생물 군계에 사용됩니다. + +이 블록은 잔디 속성을 지녀야 하며, Forge 모드에서 식물과 나무가 생물 군계에서 제대로 생성되도록 +minecraft:dirt블록 태그가 지정되어야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/minimal_tree_height.md b/plugins/mcreator-localization/help/ko_KR/biome/minimal_tree_height.md new file mode 100644 index 00000000000..f1434ecc552 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/minimal_tree_height.md @@ -0,0 +1,3 @@ +이 매개 변수는 생성 시 나무 줄기의 최소 높이를 정의합니다. + +사용자 정의 나무를 선택한 경우에만 적용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/mood_sound.md b/plugins/mcreator-localization/help/ko_KR/biome/mood_sound.md new file mode 100644 index 00000000000..75aea20c21f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/mood_sound.md @@ -0,0 +1 @@ +주변음은 동굴에 사용되는 소리입니다. (예: 동굴 소리) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/mood_sound_delay.md b/plugins/mcreator-localization/help/ko_KR/biome/mood_sound_delay.md new file mode 100644 index 00000000000..929addbc5eb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/mood_sound_delay.md @@ -0,0 +1 @@ +이 값은 사운드가 다시 재생(루프)되기 전의 시간을 틱 단위로 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/music.md b/plugins/mcreator-localization/help/ko_KR/biome/music.md new file mode 100644 index 00000000000..7c8377dcc40 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/music.md @@ -0,0 +1 @@ +이것은 생물 군계의 음악입니다. 이 소리는 무작위로 재생됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/name.md b/plugins/mcreator-localization/help/ko_KR/biome/name.md new file mode 100644 index 00000000000..d2fe8ba4609 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/name.md @@ -0,0 +1 @@ +생물 군계의 이름은 예를 들어, 일부 모드나 Minecraft 자체에서 뷔페(단일 생물 군계) 에서 사용되는 이름입니다. 그러나 이름은 F3 메뉴에서 변경할 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/particle_probability.md b/plugins/mcreator-localization/help/ko_KR/biome/particle_probability.md new file mode 100644 index 00000000000..44789bdf09b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/particle_probability.md @@ -0,0 +1,3 @@ +입자가 생성될 확률입니다. + +참고: 이 값는 코드에서 100으로 나뉘게 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/particle_type.md b/plugins/mcreator-localization/help/ko_KR/biome/particle_type.md new file mode 100644 index 00000000000..114d3e71bc0 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/particle_type.md @@ -0,0 +1 @@ +생물 군계에서 생성될 입자입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/raining_possibility.md b/plugins/mcreator-localization/help/ko_KR/biome/raining_possibility.md new file mode 100644 index 00000000000..77d51763233 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/raining_possibility.md @@ -0,0 +1 @@ +이 매개 변수는 생물 군계 내부에 비가 내릴 가능성을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/spawn_entities.md b/plugins/mcreator-localization/help/ko_KR/biome/spawn_entities.md new file mode 100644 index 00000000000..015411704cb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/spawn_entities.md @@ -0,0 +1,3 @@ +생물 군계 내에서 자연적으로 생성될 개체를 선택하십시오. + +수동적이거나 적대적인 몹만 선택하십시오. 플레이어나 특수 개체를 선택하는 경우 월드 오류를 일으킬 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/spawn_particle.md b/plugins/mcreator-localization/help/ko_KR/biome/spawn_particle.md new file mode 100644 index 00000000000..fcacd94eb14 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/spawn_particle.md @@ -0,0 +1 @@ +생물 군계에서 배경 입자 생성을 활성화하려면 이 매개 변수를 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/stem_block.md b/plugins/mcreator-localization/help/ko_KR/biome/stem_block.md new file mode 100644 index 00000000000..8f6d4c336ad --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/stem_block.md @@ -0,0 +1 @@ +이 매개 변수는 사용자 정의 나무를 선택한 경우 나무 줄기를 만드는 데 사용될 블록을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/temperature.md b/plugins/mcreator-localization/help/ko_KR/biome/temperature.md new file mode 100644 index 00000000000..83c66e04a3c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/temperature.md @@ -0,0 +1,7 @@ +이 매개 변수는 생물 군계의 온도를 제어합니다. + +0.0은 눈 덮인 툰드라와 같고, 2.0은 사막과 같습니다. + +* 0.15보다 작은 값으로 설정된 바이옴은 강우 상황에 눈이 내립니다. +* 0.15에서 1.5 사이의 값은 생물 군계에 비가 내립니다. +* 1.5보다 큰 값은 생물 군계를 건조하게 만듭니다. (강우 비활성화, 사막 같은 경우) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/tree_definition.md b/plugins/mcreator-localization/help/ko_KR/biome/tree_definition.md new file mode 100644 index 00000000000..bede39a3016 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/tree_definition.md @@ -0,0 +1 @@ +이 매개 변수는 바닐라 나무 높이 및 블록 데이터를 사용할지, 아니면 아래 필드에서 제공하는 데이터를 사용할지 여부를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/tree_shape.md b/plugins/mcreator-localization/help/ko_KR/biome/tree_shape.md new file mode 100644 index 00000000000..d4aea4530f1 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/tree_shape.md @@ -0,0 +1 @@ +이 매개 변수는 사용자 정의 나무 기능의 나무 모양이 기반으로 삼아야 하는 나무 유형을 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/trees_per_chunk.md b/plugins/mcreator-localization/help/ko_KR/biome/trees_per_chunk.md new file mode 100644 index 00000000000..bc47354a625 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/trees_per_chunk.md @@ -0,0 +1,3 @@ +이 매개 변수는 생물 군계 청크 당 (이전에 선택했던 유형의) 나무 수를 제어합니다. + +나무 생성을 비활성화 하려면 0으로 설정하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/underground_block.md b/plugins/mcreator-localization/help/ko_KR/biome/underground_block.md new file mode 100644 index 00000000000..addf2c8ffb8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/underground_block.md @@ -0,0 +1,6 @@ +이 매개 변수는 지상 블록 레이어 아래의 지하 블록을 제어합니다. + +일반적으로 대부분의 생물 군계에서는 바닐라 또는 사용자 정의 흙이 사용됩니다. + +Forge 모드에서 식물과 나무가 생물 군계에서 제대로 생성되도록 +minecraft:dirt블록 태그가 지정되어야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/underwater_block.md b/plugins/mcreator-localization/help/ko_KR/biome/underwater_block.md new file mode 100644 index 00000000000..7b780dbcc9e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/underwater_block.md @@ -0,0 +1 @@ +이 매개 변수는 물 속에서 생성되는 블록을 제어합니다. 대부분의 바닐라 생물 군계는 이를 위해 흙이나 자갈 블록을 사용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/village.md b/plugins/mcreator-localization/help/ko_KR/biome/village.md new file mode 100644 index 00000000000..52a7e39e7a3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/village.md @@ -0,0 +1 @@ +이 설정은 생물 군계 내에 주민 마을을 생성하도록 허용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/vines_block.md b/plugins/mcreator-localization/help/ko_KR/biome/vines_block.md new file mode 100644 index 00000000000..95e93a24bd4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/vines_block.md @@ -0,0 +1,3 @@ +이 매개 변수는 덩굴을 대신할 블록을 제어합니다. + +덩굴을 사용하지 않으려면 공기 블록을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/water_color.md b/plugins/mcreator-localization/help/ko_KR/biome/water_color.md new file mode 100644 index 00000000000..0270a99268c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/water_color.md @@ -0,0 +1 @@ +이 매개 변수는 생물 군계 내의 물 색상을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/biome/water_fog_color.md b/plugins/mcreator-localization/help/ko_KR/biome/water_fog_color.md new file mode 100644 index 00000000000..3b2c0869b46 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/biome/water_fog_color.md @@ -0,0 +1 @@ +이 매개 변수는 생물 군계 내의 물 속 안개 색상을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/ai_path_node_type.md b/plugins/mcreator-localization/help/ko_KR/block/ai_path_node_type.md new file mode 100644 index 00000000000..efd66e16227 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/ai_path_node_type.md @@ -0,0 +1,3 @@ +이 매개 변수는 몹의 AI 경로 탐색기가 블록을 "보는" 방법을 제어합니다. + +유형이 다르면 해당 AI 경로 노드 유형에 따라 블록 근처에서 이동을 진행하는 방법에 대한 결정이 달라집니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/base.md b/plugins/mcreator-localization/help/ko_KR/block/base.md new file mode 100644 index 00000000000..085de7a59a6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/base.md @@ -0,0 +1,3 @@ +블록 베이스를 사용하는 경우, 베이스 블록은 베이스 블록들의 기본 값을 요구하여 일부 매개 변수가 비활성화 되거나 작동하지 않을 수 있습니다. + +타당한 이유가 있는 경우에만 이 매개 변수를 사용하십시오. 대부분의 블록은 이 매개 변수를 Default basic block으로 설정해야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/beacon_color_modifier.md b/plugins/mcreator-localization/help/ko_KR/block/beacon_color_modifier.md new file mode 100644 index 00000000000..30d796b089c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/beacon_color_modifier.md @@ -0,0 +1,3 @@ +블록이 비콘 빔에 적용되었을 때의 색상을 선택하십시오. (예: 색상이 적용된 스테인드글라스 등) + +바닐라식 처리를 유지하려면(색상 변경 없음) DEFAULT로 두십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/bind_gui.md b/plugins/mcreator-localization/help/ko_KR/block/bind_gui.md new file mode 100644 index 00000000000..5164ef507d6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/bind_gui.md @@ -0,0 +1 @@ +이 매개 변수는 해당 블록만의 GUI를 제어합니다. 예를 들어, 상자나 제작 블록을 만드는 데 필요합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/bind_gui_open.md b/plugins/mcreator-localization/help/ko_KR/block/bind_gui_open.md new file mode 100644 index 00000000000..4e92b690c6e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/bind_gui_open.md @@ -0,0 +1 @@ +이 매개 변수를 체크하면, 이 블록은 마우스 오른쪽 버튼 클릭 시 바인딩된 GUI를 엽니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/block_sound.md b/plugins/mcreator-localization/help/ko_KR/block/block_sound.md new file mode 100644 index 00000000000..bb06bee8071 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/block_sound.md @@ -0,0 +1 @@ +이 블록을 정의하는 사운드 그룹입니다. 이 매개 변수는 블록 배치/제거 사운드, 블록 위를 걸을 때 재생되는 사운드와 같이 블록의 소리에 영향을 미칩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/bonemeal_success_condition.md b/plugins/mcreator-localization/help/ko_KR/block/bonemeal_success_condition.md new file mode 100644 index 00000000000..08f9a4a82a5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/bonemeal_success_condition.md @@ -0,0 +1,3 @@ +이 조건은 이 블록에 뼛가루를 성공적으로 사용할 수 있는지의 여부를 결정합니다. + +false를 반환하면 뼛가루가 소모되지만 "${l10n.t("elementgui.common.event_on_bonemeal_success")}" 진행은 실행되지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/bonemeal_target_condition.md b/plugins/mcreator-localization/help/ko_KR/block/bonemeal_target_condition.md new file mode 100644 index 00000000000..d3855ba0f81 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/bonemeal_target_condition.md @@ -0,0 +1,3 @@ +이 조건은 이 블록에서 뼛가루를 사용할 수 있는지 여부를 결정합니다. + +만일 false가 반환되면 뼛가루가 소비되지 않고 아무 일도 일어나지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/bounding_box.md b/plugins/mcreator-localization/help/ko_KR/block/bounding_box.md new file mode 100644 index 00000000000..c4b37817fcc --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/bounding_box.md @@ -0,0 +1,5 @@ +블록 크기 및 경계 상자는 사용자 정의 모델인 경우에 블록의 히트박스를 설정합니다. 또한 사용자 정의 모델을 사용하지 않는 경우에도 기본 큐브 크기에서 다른 방향으로 블록 크기를 조정할 수도 있습니다. + +하지만 모양이 아닌 치수만 설정할 수 있습니다. + +경계 상자 매개 변수의 작동방식을 이해하려면, [여기](https://mcreator.net/wiki/block-dimensions-and-bonding-box)를 클릭하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/break_sound.md b/plugins/mcreator-localization/help/ko_KR/block/break_sound.md new file mode 100644 index 00000000000..dd3fb12e4c8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/break_sound.md @@ -0,0 +1 @@ +블록이 파괴되었을 때 나는 소리입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/can_plants_grow.md b/plugins/mcreator-localization/help/ko_KR/block/can_plants_grow.md new file mode 100644 index 00000000000..a6d138f9353 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/can_plants_grow.md @@ -0,0 +1 @@ +이 매개 변수를 선택하면 모든 식물들을 블록에 배치할 수 있고 자랄 수도 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/can_walk_through.md b/plugins/mcreator-localization/help/ko_KR/block/can_walk_through.md new file mode 100644 index 00000000000..1c33d1ea2ac --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/can_walk_through.md @@ -0,0 +1,3 @@ +이 매개 변수를 선택하면 플레이어가 키 큰 잔디나 덩굴처럼 매개 변수를 통과하여 걸을 수 있습니다. + +블록에는 경계 상자가 생기지만, 충돌하진 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/color_on_map.md b/plugins/mcreator-localization/help/ko_KR/block/color_on_map.md new file mode 100644 index 00000000000..7e5eb4dc6d3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/color_on_map.md @@ -0,0 +1,5 @@ +지도에서 블록이 나타내는 색상입니다. + +기본값으로 설정하면 색상은 블록의 재질을 기반으로 합니다. + +모든 항목의 정확한 RGB 색상을 보려면, [여기](https://mcreator.net/wiki/list-block-map-colors)에서 Wiki 페이지를 읽어보십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/comparator_data.md b/plugins/mcreator-localization/help/ko_KR/block/comparator_data.md new file mode 100644 index 00000000000..cc90284398c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/comparator_data.md @@ -0,0 +1 @@ +블록이 비교기와 함께 작동할 수 있도록 하려면 이 매개 변수를 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/connected_sides.md b/plugins/mcreator-localization/help/ko_KR/block/connected_sides.md new file mode 100644 index 00000000000..a96c0665b30 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/connected_sides.md @@ -0,0 +1,3 @@ +이 매개 변수는 투명한 블록인 경우에만 사용할 수 있습니다. + +이는 블록의 내부 측면이 유리, 얼음 및 기타 유사한 블록들과 같이 서로 연결됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/creative_pick_item.md b/plugins/mcreator-localization/help/ko_KR/block/creative_pick_item.md new file mode 100644 index 00000000000..329d2e21c1d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/creative_pick_item.md @@ -0,0 +1 @@ +블록을 크리에이티브 모드에서 (마우스로 중간 클릭)"선택" 하면 선택될 블록을 결정합니다. 비어있는 경우에는 선택된 블록이 그대로 복사선택 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/custom_drop.md b/plugins/mcreator-localization/help/ko_KR/block/custom_drop.md new file mode 100644 index 00000000000..0f570f88ea7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/custom_drop.md @@ -0,0 +1,3 @@ +이 매개 변수는 블록이 채굴/파괴될 때 드롭되는 사용자 지정 아이템 혹은 블록을 정의합니다. + +수확 레벨 매개 변수를 사용하는 경우, 적절한 레벨의 수확 도구만 블록을 떨어트릴 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/disable_offset.md b/plugins/mcreator-localization/help/ko_KR/block/disable_offset.md new file mode 100644 index 00000000000..a2f67e32dc0 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/disable_offset.md @@ -0,0 +1,3 @@ +블록에 모델간 랜덤 간격 띄우기가 있는 경우, 이 옵션을 선택하지 않으면 경계 상자도 함께 이동됩니다. 띄워진 간격에 의해 경계 상자가 주변 블록에 잠기는 경우를 대비하고자 하면 이 설정을 선택하십시오. + +예를 들어, 이 옵션은 대나무의 경우에는 비활성화 하고, 키 큰 잔디의 경우 활성화합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/display_tick_update.md b/plugins/mcreator-localization/help/ko_KR/block/display_tick_update.md new file mode 100644 index 00000000000..2ea14315f74 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/display_tick_update.md @@ -0,0 +1,3 @@ +절차를 무작위로 트리거합니다. + +이 트리거는 클라이언트 측에서만 트리거 되므로, 여기에서 사운드 재생 및 입자 배치를 제외한 실제 월드 수정 작업을 해서는 안됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/drop_amount.md b/plugins/mcreator-localization/help/ko_KR/block/drop_amount.md new file mode 100644 index 00000000000..e6b0949409d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/drop_amount.md @@ -0,0 +1 @@ +이 매개 변수는 이 블록이 파괴될 때 해당 블록이 드롭하는 아이템 또는 블록의 수를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/drop_inventory_items.md b/plugins/mcreator-localization/help/ko_KR/block/drop_inventory_items.md new file mode 100644 index 00000000000..087851c8d30 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/drop_inventory_items.md @@ -0,0 +1,3 @@ +블록이 파괴될 때 아이템이 드롭 되게 하려면 이 매개 변수를 체크하십시오. + +예를 들어, 상자가 이 매개 변수를 사용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/emissive_rendering.md b/plugins/mcreator-localization/help/ko_KR/block/emissive_rendering.md new file mode 100644 index 00000000000..71544737fcd --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/emissive_rendering.md @@ -0,0 +1 @@ +블록에 빛나는 효과(마그마 블록과 유사)를 적용하려면 이 속성을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/emits_redstone.md b/plugins/mcreator-localization/help/ko_KR/block/emits_redstone.md new file mode 100644 index 00000000000..030418203be --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/emits_redstone.md @@ -0,0 +1 @@ +이 매개 변수를 선택하면, 블록이 레드스톤 전력을 방출할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/enable_pitch.md b/plugins/mcreator-localization/help/ko_KR/block/enable_pitch.md new file mode 100644 index 00000000000..a790ba3549f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/enable_pitch.md @@ -0,0 +1 @@ +블록이 수평으로 회전하는 경우, 이 설정을 선택하면 어떤 방향에서든 바닥, 벽 또는 천장을 향할 수 있습니다. 이 옵션은 레버, 숫돌 등에 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/enchantments_bonus.md b/plugins/mcreator-localization/help/ko_KR/block/enchantments_bonus.md new file mode 100644 index 00000000000..89fce381887 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/enchantments_bonus.md @@ -0,0 +1,3 @@ +이 매개 변수는 마법 부여대에 대한 블록의 파워 보너스를 제어합니다. + +책장의 파워 보너스는 1, 일반 블록의 경우 0 입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/fall_sound.md b/plugins/mcreator-localization/help/ko_KR/block/fall_sound.md new file mode 100644 index 00000000000..f6f5f5be954 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/fall_sound.md @@ -0,0 +1 @@ +이 소리는 블록이 떨어질 때 재생됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/fire_spread_speed.md b/plugins/mcreator-localization/help/ko_KR/block/fire_spread_speed.md new file mode 100644 index 00000000000..2beb4d72863 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/fire_spread_speed.md @@ -0,0 +1 @@ +이 매개 변수는 불이 다른 블록으로 확산되는 속도를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/flammability.md b/plugins/mcreator-localization/help/ko_KR/block/flammability.md new file mode 100644 index 00000000000..f3db8f6cd0b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/flammability.md @@ -0,0 +1,5 @@ +이 매개 변수는 블록이 불에 의해 얼마나 빨리 연소되는지를 결정합니다. + +바닐라 예시: +* 통나무의 가연성은 5입니다. +* 판자의 가연성은 20입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/fluid_overlay.md b/plugins/mcreator-localization/help/ko_KR/block/fluid_overlay.md new file mode 100644 index 00000000000..23ea10d10a9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/fluid_overlay.md @@ -0,0 +1,3 @@ +이 매개 변수는 투명한 블록인 경우에만 사용할 수 있습니다. + +이 설정을 사용하면 유리 블록과 유사하게 물 속에 잠겨있을 때, 블록이 유동체의 질감을 표현하지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/gen_chunk_count.md b/plugins/mcreator-localization/help/ko_KR/block/gen_chunk_count.md new file mode 100644 index 00000000000..8fcdb2f0677 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/gen_chunk_count.md @@ -0,0 +1,10 @@ +청크당 생성할 평균 광맥 수를 설정합니다. + +청크당 바닐라 광석 그룹 값: + +* 석탄 광석 - 20 +* 철광석 - 20 +* 금광석 - 2 +* 레드스톤 광석 - 8 +* 다이아몬드 광석 - 1 +* 청금석 - 1 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/gen_group_size.md b/plugins/mcreator-localization/help/ko_KR/block/gen_group_size.md new file mode 100644 index 00000000000..47fe20b0787 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/gen_group_size.md @@ -0,0 +1,10 @@ +이 매개 변수는 광맥당 평균 블록 양을 제어합니다. + +바닐라 광석 그룹 크기: + +* 석탄 광석 - 17 +* 철광석 - 9 +* 금광석 - 9 +* 레드스톤 광석 - 8 +* 다이아몬드 광석 - 8 +* 청금석 - 7 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/gen_height.md b/plugins/mcreator-localization/help/ko_KR/block/gen_height.md new file mode 100644 index 00000000000..813e8f64aec --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/gen_height.md @@ -0,0 +1,11 @@ +이 매개 변수는 이 블록이 생성될 수 있는 최대 Y 높이를 제어합니다. + +바닐라 생성 높이 범위: +* 석탄 광석 - 0 부터 256 +* 구리 광석 - -16 부터 112 +* 철광석 - -32 부터 256 +* 금광석 - -64 부터 32 +* 레드스톤 광석 - -64 부터 -32 +* 다이아몬드 광석 - -64 부터 16 +* 에메랄드 광석 - -16 부터 256 +* 청금석 - -64 부터 64 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/gen_replace_blocks.md b/plugins/mcreator-localization/help/ko_KR/block/gen_replace_blocks.md new file mode 100644 index 00000000000..4b29edc5d6b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/gen_replace_blocks.md @@ -0,0 +1,3 @@ +블록 생성 시 대체할 수 있는 블록 목록입니다. + +이 목록을 비워두면, 블록이 월드에 자연스럽게 생성될 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/generation_shape.md b/plugins/mcreator-localization/help/ko_KR/block/generation_shape.md new file mode 100644 index 00000000000..8fd247bc918 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/generation_shape.md @@ -0,0 +1,4 @@ +생성 형태를 이용해 높이에 따라 블록의 생성 방식을 변경할 수 있습니다. + +* **균일**: 단순한 사각형 모양입니다. Minecraft 1.18 이전에 사용되었습니다. +* **삼각형**: 이 모양은 블록을 삼각형처럼 생성합니다. 이 블록을 얻을 가능성이 가장 높은 레이어는 최소 높이와 최대 높이의 중간이 됩니다. 최대값과 최소값을 기억하십시오. 생성 높이는 월드 한도보다 높을 수도 있고 낮을 수도 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/hardness.md b/plugins/mcreator-localization/help/ko_KR/block/hardness.md new file mode 100644 index 00000000000..1ba0cf17e2d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/hardness.md @@ -0,0 +1 @@ +이 매개 변수는 블록을 채굴하는 데 걸리는 시간을 제어합니다. 값이 높을수록 해당 블록을 채굴하는 데 시간이 더 오래 걸립니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/harvest_level.md b/plugins/mcreator-localization/help/ko_KR/block/harvest_level.md new file mode 100644 index 00000000000..de92281a137 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/harvest_level.md @@ -0,0 +1,13 @@ +이 블록을 파괴할 때 필요한 도구의 티어입니다. + +* 0 - 나무 +* 1 - 돌 +* 2 - 철 +* 3 - 다이아몬드 +* 4 - 네더라이트 + +지정한 티어 이상의 도구만이 이 블록을 파괴할 수 있습니다. 티어를 4 이상으로 지정하여 네더라이트보다 더 큰 티어를 정의할 수도 있습니다. + +블록이 파괴되었을 때 아이템을 드롭하는 조건은 다음과 같습니다: + +`블록 수확 레벨 <= 도구 수확 레벨 인 경우` diff --git a/plugins/mcreator-localization/help/ko_KR/block/harvest_tool.md b/plugins/mcreator-localization/help/ko_KR/block/harvest_tool.md new file mode 100644 index 00000000000..63fd7e887b5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/harvest_tool.md @@ -0,0 +1,5 @@ +이 매개 변수는 블록을 채굴 할 도구를 제어합니다. + +여기에서는 광석은 곡괭이, 나무는 도끼, 흙은 삽을 사용합니다. + +"지정되지 않음"으로 설정하면 플레이어가 이 블록을 손으로 파괴할 수 있습니다. diff --git a/plugins/mcreator-localization/help/ko_KR/block/has_gravity.md b/plugins/mcreator-localization/help/ko_KR/block/has_gravity.md new file mode 100644 index 00000000000..24873790f75 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/has_gravity.md @@ -0,0 +1 @@ +이 매개 변수를 선택하면 블록이 모래처럼 떨어지게 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/has_inventory.md b/plugins/mcreator-localization/help/ko_KR/block/has_inventory.md new file mode 100644 index 00000000000..1ab20f1c2f2 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/has_inventory.md @@ -0,0 +1,8 @@ +이 매개 변수는 블록 자체에서 인벤토리를 제공합니다. 블록은 타일 개체가 됩니다. + +이 매개 변수는 다음과 같은 기능을 활성화합니다: +* 블록의 NBT 태그 +* 블록의 아이템 보관을 위한 인벤토리 +* 비교기와의 상호작용 + +이 매개 변수를 체크하지 않으면 이러한 기능이 작동하지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/has_transparency.md b/plugins/mcreator-localization/help/ko_KR/block/has_transparency.md new file mode 100644 index 00000000000..e4447fd87fa --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/has_transparency.md @@ -0,0 +1,10 @@ +블록이 조건에 맞다면 체크하십시오: + +* 고체 큐브형태가 아님 / 사용자 정의 모양을 사용함 +* 텍스처에 투명한 부분이 있음 + +이 박스를 체크하면, 블록은 이렇게 됩니다: + +* 레드스톤 전원을 공급하지 않음, +* 오클루전(차폐광)이 비활성화됨, +* 시각적 경계 상자가 비워지게 설정됨. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/hit_sound.md b/plugins/mcreator-localization/help/ko_KR/block/hit_sound.md new file mode 100644 index 00000000000..4426d721abb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/hit_sound.md @@ -0,0 +1,3 @@ +플레이어가 블록을 채굴할 때 재생되는 소리입니다. + +참고: 이 소리는 블록이 파괴될 때까지 채굴하는 동안 반복해서 재생됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/input_slots.md b/plugins/mcreator-localization/help/ko_KR/block/input_slots.md new file mode 100644 index 00000000000..84ad953e2b8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/input_slots.md @@ -0,0 +1 @@ +입력 슬롯이 호퍼의 아이템 전송을 위한 소스/출력으로 사용되지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/inventory_size.md b/plugins/mcreator-localization/help/ko_KR/block/inventory_size.md new file mode 100644 index 00000000000..4564abc2a17 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/inventory_size.md @@ -0,0 +1,3 @@ +이 매개 변수는 블록이 내부 인벤토리에서 사용할 슬롯의 수를 제어합니다. + +블록에 GUI가 할당 된 경우 이 값을 `GUI에서 가장 큰 슬롯 ID + 1`로 설정하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/inventory_stack_size.md b/plugins/mcreator-localization/help/ko_KR/block/inventory_stack_size.md new file mode 100644 index 00000000000..874b921e443 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/inventory_stack_size.md @@ -0,0 +1,3 @@ +이 매개 변수는 내부 인벤토리 슬롯에 배치할 수 있는 스택의 최대 수를 제어합니다. + +이 매개 변수와 최대 아이탬 스택 크기 중에 제일 작은 수가 실제 최대 스택 수로 결정된다는 점을 유념해주시기 바랍니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/is_bonemealable.md b/plugins/mcreator-localization/help/ko_KR/block/is_bonemealable.md new file mode 100644 index 00000000000..3276db1b4d1 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/is_bonemealable.md @@ -0,0 +1 @@ +이 옵션이 활성화되면 블록은 뼛가루로 비옥화 될 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/is_item_tinted.md b/plugins/mcreator-localization/help/ko_KR/block/is_item_tinted.md new file mode 100644 index 00000000000..13636ceb711 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/is_item_tinted.md @@ -0,0 +1,3 @@ +이 옵션을 선택하면, 블록이 인벤토리에 있는 동안 색조 유형에 따라 고정된 색조가 블록에 적용됩니다. + +아이템 텍스처를 지정한 경우에도 색조는 적용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/is_ladder.md b/plugins/mcreator-localization/help/ko_KR/block/is_ladder.md new file mode 100644 index 00000000000..a4783cc1a85 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/is_ladder.md @@ -0,0 +1,5 @@ +체크하면, 개체가 블록 위로 타고 올라갈 수 있습니다. + +이 매개 변수가 작동하려면 블록의 너비와 깊이가 1보다 작아야 블록의 충돌이 제대로 감지됩니다. 이 매개 변수를 사용하는 경우 경계 상자의 설정을 위에 따라 변경하십시오. + +바닐라 예시: 사다리와 덩굴 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/is_waterloggable.md b/plugins/mcreator-localization/help/ko_KR/block/is_waterloggable.md new file mode 100644 index 00000000000..a2f3aaf3438 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/is_waterloggable.md @@ -0,0 +1,3 @@ +이 옵션을 체크하면, 블록 내부에 물을 넣을 수 있습니다. + +바닐라 예시: 반블럭, 계단 등. diff --git a/plugins/mcreator-localization/help/ko_KR/block/item_texture.md b/plugins/mcreator-localization/help/ko_KR/block/item_texture.md new file mode 100644 index 00000000000..bb1e23431e6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/item_texture.md @@ -0,0 +1,3 @@ +이 선택 옵션은 인벤토리에 있는 블록의 텍스처를 변경합니다. + +일반적으로 문이나 맞춤형 모델에 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/jump_factor.md b/plugins/mcreator-localization/help/ko_KR/block/jump_factor.md new file mode 100644 index 00000000000..d9b9d6daf3c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/jump_factor.md @@ -0,0 +1,3 @@ +이 매개 변수는 개체의 점프 높이를 제어합니다. + +대부분의 블록에서 사용되는 기본 값은 1.0입니다. 꿀 블록의 점프 계수는 0.5입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/light_opacity.md b/plugins/mcreator-localization/help/ko_KR/block/light_opacity.md new file mode 100644 index 00000000000..b125deb2c8a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/light_opacity.md @@ -0,0 +1 @@ +이 속성은 빛이 이 블록을 통과할 때 조명 수준이 얼마나 감소하는지 결정합니다. 예를 들어, 값이 15이면 모든 빛을 차단합니다. 값이 0이면 빛이 블록을 투과합니다. diff --git a/plugins/mcreator-localization/help/ko_KR/block/luminance.md b/plugins/mcreator-localization/help/ko_KR/block/luminance.md new file mode 100644 index 00000000000..d0d19d47bd2 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/luminance.md @@ -0,0 +1 @@ +이 매개 변수는 블록이 방출하는 빛의 양을 제어합니다. 0에서 15사이의 값입니다. 0으로 설정하면 블록이 빛을 내지 않습니다. 15로 설정하면 블록은 발광석만큼 빛을 방출합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/material.md b/plugins/mcreator-localization/help/ko_KR/block/material.md new file mode 100644 index 00000000000..07de71153a1 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/material.md @@ -0,0 +1,5 @@ +블록 재질은 피스톤, 물, 식물 재배 옵션 등과 같은 일부 블록 기본 특성을 정의합니다. + +광석용 블록으로 사용하는 경우 돌 재질을 선택하십시오. 그래야 수확 수준이 제대로 적용됩니다. + +[여기](https://mcreator.net/wiki/materials)를 클릭해 재질에 대한 자세한 내용을 읽어보십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/model.md b/plugins/mcreator-localization/help/ko_KR/block/model.md new file mode 100644 index 00000000000..c4f4f492278 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/model.md @@ -0,0 +1,10 @@ +이 블록과 함께 사용할 모델을 선택하십시오. 모델은 시각적 모양만 정의하며 블록의 경계 상자는 정의하지 않습니다. + +* **일반** - 각 면에 텍스처가 있는 일반 블록 +* **단일 텍스처** - 모든 면에 동일한 텍스처가 있는 블록 +* **십자형** - 식물이 사용하는 모델 +* **작물** - 작물이 사용하는 모델 +* **잔디 블록** - 잔디 블록에 사용되는 모델(상단 및 측면 텍스처가 착색됨) +* 사용자 정의 - 사용자 정의 JSON 및 OBJ 모델도 정의할 수 있습니다 + +사용자 정의 모델을 만들 때 이 모델 유형에 대한 기본 지원으로 인해, JSON이 권장됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/offset_type.md b/plugins/mcreator-localization/help/ko_KR/block/offset_type.md new file mode 100644 index 00000000000..81b924bd781 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/offset_type.md @@ -0,0 +1,3 @@ +이 매개 변수는 블록 배치가 무작위로 띄워져야 하는지와 어느 축을 기준으로 띄워야 하는지를 제어합니다. + +대부분의 식물은 오프셋 유형 중 하나를 사용하고 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/on_bonemeal_success.md b/plugins/mcreator-localization/help/ko_KR/block/on_bonemeal_success.md new file mode 100644 index 00000000000..92e2af7f14f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/on_bonemeal_success.md @@ -0,0 +1 @@ +이 절차는 이 블록에서 뼛가루를 성공적으로 사용했을 때 어떤 일이 발생할 지 결정합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/on_hit_by_projectile.md b/plugins/mcreator-localization/help/ko_KR/block/on_hit_by_projectile.md new file mode 100644 index 00000000000..ad8d10f7eb5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/on_hit_by_projectile.md @@ -0,0 +1 @@ +발사체가 블록에 부딪힐 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/on_redstone_off.md b/plugins/mcreator-localization/help/ko_KR/block/on_redstone_off.md new file mode 100644 index 00000000000..2e83729d665 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/on_redstone_off.md @@ -0,0 +1 @@ +블록이 레드스톤 전력에 의해 전원을 공급받지 않을 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/on_redstone_on.md b/plugins/mcreator-localization/help/ko_KR/block/on_redstone_on.md new file mode 100644 index 00000000000..a72a13db56a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/on_redstone_on.md @@ -0,0 +1 @@ +블록이 레드스톤 전력에 의해 전원을 공급받을 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/output_slots.md b/plugins/mcreator-localization/help/ko_KR/block/output_slots.md new file mode 100644 index 00000000000..ba6e7c8cf85 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/output_slots.md @@ -0,0 +1 @@ +출력 슬롯이 호퍼의 아이템 전송을 위한 입력으로 사용하지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/particle_texture.md b/plugins/mcreator-localization/help/ko_KR/block/particle_texture.md new file mode 100644 index 00000000000..1fcf4778022 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/particle_texture.md @@ -0,0 +1 @@ +이 선택적 옵션은 블록이 파괴되거나 개체가 블록에 착지하는 등의 경우에 입자의 질감을 변경합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/place_sound.md b/plugins/mcreator-localization/help/ko_KR/block/place_sound.md new file mode 100644 index 00000000000..5f5f3c3b67c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/place_sound.md @@ -0,0 +1 @@ +플레이어가 블록을 월드에 배치할 때 재생되는 소리 입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/placing_condition.md b/plugins/mcreator-localization/help/ko_KR/block/placing_condition.md new file mode 100644 index 00000000000..ca934def723 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/placing_condition.md @@ -0,0 +1,3 @@ +이 조건은 이 블록을 특정 위치에 배치할 수 있는지의 여부를 결정합니다. 위치가 유효하지 않는 경우, 블록이 업데이트를 받으면 바로 파괴됩니다. + +참고: 이 조건은 월드 생성 중에는 확인되지 않습니다. diff --git a/plugins/mcreator-localization/help/ko_KR/block/push_reaction.md b/plugins/mcreator-localization/help/ko_KR/block/push_reaction.md new file mode 100644 index 00000000000..e05e1ba1719 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/push_reaction.md @@ -0,0 +1,6 @@ +이 매개 변수는 블록이 피스톤에 반응하는 방식을 결정합니다. + +* 일반: 돌 블록과 같은 피스톤의 정상적인 반응 +* 파괴: 블록이 피스톤에 의해 밀려나면 블록이 파괴됩니다. +* 막힘: 블록은 흑요석처럼 피스톤에 반응하지 않습니다. +* 밀기: 블록은 피스톤으로 밀 수만 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/redstone_connect.md b/plugins/mcreator-localization/help/ko_KR/block/redstone_connect.md new file mode 100644 index 00000000000..a39fc61dd0f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/redstone_connect.md @@ -0,0 +1,3 @@ +이 매개 변수를 선택하면 레드스톤 가루는 항상 이 블록에 연결됩니다.(레드스톤 블록과 유사) + +참고: 이 매개 변수를 선택하지 않더라도 블록은 레드스톤 전력을 방출시킬 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/redstone_power.md b/plugins/mcreator-localization/help/ko_KR/block/redstone_power.md new file mode 100644 index 00000000000..3c260e7080d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/redstone_power.md @@ -0,0 +1,7 @@ +레드스톤 방출 매개 변수가 선택된 경우, 이 매개 변수를 사용하면 방출되는 레드스톤 전력을 수정할 수 있습니다. + +조건부 절차를 사용하여 숫자를 반환하는 경우, 레드스톤 전력은 절차에서 반환된 수에 따라 결정됩니다. + +참고: 레드스톤이 연결되지 않더라도 블록은 여전히 레드스톤을 전력을 방출할 수 있습니다. + +경고: 사용자 지정 숫자 공급 절차를 사용할 때 변경사항을 등록하기 위해 주변 블록에 레드스톤 값 변경을 알려야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/replaceable.md b/plugins/mcreator-localization/help/ko_KR/block/replaceable.md new file mode 100644 index 00000000000..b8fbef12907 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/replaceable.md @@ -0,0 +1,3 @@ +이 매개 변수를 체크하면, 플레이어가 다른 블록을 대신 배치할 수 있습니다. (이 블록은 배치된 다른 블록으로 대체될 수 있습니다.) + +예시: 공기, 대부분의 식물 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/requires_correct_tool.md b/plugins/mcreator-localization/help/ko_KR/block/requires_correct_tool.md new file mode 100644 index 00000000000..a0d77441af5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/requires_correct_tool.md @@ -0,0 +1 @@ +이 설정을 활성화하면 지정된 수확 도구로 파괴했을 때만 블록이 드롭됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/resistance.md b/plugins/mcreator-localization/help/ko_KR/block/resistance.md new file mode 100644 index 00000000000..972796a3f54 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/resistance.md @@ -0,0 +1 @@ +이 매개 변수는 블록이 폭발에 반응하는 방식을 제어합니다. 값이 높을수록 블록이 폭발에 더 강해집니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/rotation_mode.md b/plugins/mcreator-localization/help/ko_KR/block/rotation_mode.md new file mode 100644 index 00000000000..60b293be6db --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/rotation_mode.md @@ -0,0 +1,6 @@ +* **회전 안함:** 블록의 방향이 고정됩니다. +* **Y축 회전 (S/W/N/E):** 플레이어가 바라보는 방향을 기준으로 수평 회전합니다. +* **D/U/N/S/W/E 회전:** 플레이어가 바라보는 방향에 따라 모든 방향으로 회전합니다. +* **Y축 회전 (S/W/N/E):** 블록을 설치하여 마주보는 블록 면을 기준으로 수평 회전합니다. +* **D/U/N/S/W/E 회전:** 블록을 설치하여 마주보는 블록 면을 기준으로 모든 방향으로 회전합니다. +* **원목 회전 (X/Y/Z):** 바닐라 나무 원목처럼 블록이 회전합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/slipperiness.md b/plugins/mcreator-localization/help/ko_KR/block/slipperiness.md new file mode 100644 index 00000000000..15991fd8424 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/slipperiness.md @@ -0,0 +1,3 @@ +이 매개 변수는 블록이 얼마나 미끄러운지를 제어합니다. + +대부분의 블록에서 사용되는 기본값은 0.6입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/special_information.md b/plugins/mcreator-localization/help/ko_KR/block/special_information.md new file mode 100644 index 00000000000..7e4b676c9b9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/special_information.md @@ -0,0 +1,3 @@ +이 매개 변수는 인벤토리의 블록 아이콘 위에 커서를 두면 블록에 툴팁을 추가합니다. + +만일 절차 생성형 툴팁을 사용하며, 떨어진 아이템이거나 개체에 의해 유지되지 않는 경우, `객체` 종속성은 null이 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/speed_factor.md b/plugins/mcreator-localization/help/ko_KR/block/speed_factor.md new file mode 100644 index 00000000000..2325df8493f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/speed_factor.md @@ -0,0 +1,3 @@ +이 매개 변수는 블록의 개체 속도를 제어합니다. + +대부분의 블록에서 사용되는 기본값은 1.0입니다. 영혼모래와 꿀 블록의 속도 계수는 0.4입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/stack_size.md b/plugins/mcreator-localization/help/ko_KR/block/stack_size.md new file mode 100644 index 00000000000..978f7e74dd4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/stack_size.md @@ -0,0 +1,3 @@ +이는 이 블록의 인벤토리 슬롯에 쌓을 수 있는 아이템의 수입니다. + +특정 아이템에는 또 다른 슬롯 스택 크기 제한이 설정되어 있으므로 이는 아이템 별로 추가 제한을 할 수 있는 슬롯 상한선임을 명심해주십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/step_sound.md b/plugins/mcreator-localization/help/ko_KR/block/step_sound.md new file mode 100644 index 00000000000..9cb9262bbaa --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/step_sound.md @@ -0,0 +1 @@ +이것은 개체가 이 블록 위를 걸을 때 재생되는 소리입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/tick_randomly.md b/plugins/mcreator-localization/help/ko_KR/block/tick_randomly.md new file mode 100644 index 00000000000..8ebcc76c715 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/tick_randomly.md @@ -0,0 +1,5 @@ +자연적으로 생성된 블록은 무작위로 틱을 사용하지 않는 한 일반적으로 틱을 수행하지 않습니다. + +이 매개 변수는 블록 틱을 무작위로 만듭니다. 여기서 속도는 전역 월드 틱 매개 변수에 의해 제어됩니다. + +에를 들어, 이러한 유형의 틱은 식물에서 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/tick_rate.md b/plugins/mcreator-localization/help/ko_KR/block/tick_rate.md new file mode 100644 index 00000000000..18a28b3c69e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/tick_rate.md @@ -0,0 +1,7 @@ +이 매개 변수는 블록이 틱되는 빈도를 제어합니다. 랜덤 틱을 선택한 경우에는 이 매개 변수는 효과가 없습니다. + +일반적으로 자연적으로 생성된 블록은 랜덤 틱을 사용하지 않는 이상 기본적으로 틱하지 않음을 명심해주십시오. + +기본 틱 속도 0은 블록이 자동으로 틱되지 않음을 의미합니다. + +이 매개 변수가 0보다 큰 숫자로 설정되면 블록이 자동으로 틱됩니다. 1초 당 20번의 월드 틱이 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/tint_type.md b/plugins/mcreator-localization/help/ko_KR/block/tint_type.md new file mode 100644 index 00000000000..7ec7038f9f5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/tint_type.md @@ -0,0 +1 @@ +이 옵션은 잔디, 나뭇잎, 물과 유사한 생물 군계 색상을 기반으로 블록에 색조를 적용합니다. 최상의 결과를 얻으려면, 색조 면에 회색조 계열의 텍스처를 사용해야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/transparency_type.md b/plugins/mcreator-localization/help/ko_KR/block/transparency_type.md new file mode 100644 index 00000000000..3c440e3768e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/transparency_type.md @@ -0,0 +1,8 @@ +**블록에 투명성이 있는 경우 이 설정을 선택하십시오** - 단단한 고체 블록인 경우 선택하지 마시고, 블록이 나뭇잎, 유리, 철창 등과 유사한지 확인하십시오. + +투명성 유형: + +* **고체:** 투명성 없음 (흙, 돌 등과 유사) +* **컷아웃:** 밉 매핑 없이 투명함 (유리와 유사) +* **컷아웃 밉:** 컷아웃과 유사하지만 밉 매핑을 포함 +* **반투명:** 부분적으로 투명하고 리소스가 가장 많이 사용되는 옵션 (얼음과 유사) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/unbreakable.md b/plugins/mcreator-localization/help/ko_KR/block/unbreakable.md new file mode 100644 index 00000000000..3f375355a42 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/unbreakable.md @@ -0,0 +1,3 @@ +이 매개 변수는 플레이어가 채굴할 수 있는지의 여부를 정의합니다. + +바닐라 예시: 기반암 및 명령 블록 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/update_tick.md b/plugins/mcreator-localization/help/ko_KR/block/update_tick.md new file mode 100644 index 00000000000..ca80f7e54e4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/update_tick.md @@ -0,0 +1,3 @@ +블록이 틱되면 절차를 트리거합니다. + +자연적으로 생성된 블록은 성능상의 이유로 무작위 틱이 사용되는 경우에만 틱합니다. diff --git a/plugins/mcreator-localization/help/ko_KR/block/use_loot_table_for_drops.md b/plugins/mcreator-localization/help/ko_KR/block/use_loot_table_for_drops.md new file mode 100644 index 00000000000..0059d2d8488 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/use_loot_table_for_drops.md @@ -0,0 +1,7 @@ +활성화되면, 블록은 코드(블록 모드 요소로 정의된 그룹) 에 의해 드롭되지 않으며, 대신 전리품 테이블을 사용하여 블록의 드롭을 정의해야 합니다. + +레지스트리명 `blocks/${registryname}`, 네임스페이스 _mod_, 및 타입 _Block_을 사용하여 전리품 테이블 요소를 생성합니다. + +이 매개 변수를 선택하지 않아도 전리품 테이블은 여전히 블록 드롭을 덮어씌우지만, 전리품 테이블이 제대로 된 항목을 반환하지 않을 경우, 블록 모드 요소에 정의된 블록 드롭이 사용됩니다. + +이 매개 변수를 체크하면 이 블록의 아이템 드롭은 전리품 테이블에 의해 완전히 제어됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_added.md b/plugins/mcreator-localization/help/ko_KR/block/when_added.md new file mode 100644 index 00000000000..cee2c4b9913 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_added.md @@ -0,0 +1 @@ +블록이 월드에 추가될 때 절차를 트리거합니다(일부 자연 생성기에서는 호출되지 않을 수 있음). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_block_placed_by.md b/plugins/mcreator-localization/help/ko_KR/block/when_block_placed_by.md new file mode 100644 index 00000000000..94c641fcb3a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_block_placed_by.md @@ -0,0 +1 @@ +무언가가 이 블록 옆에 블록(개체/블록)을 배치할 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_destroy_start.md b/plugins/mcreator-localization/help/ko_KR/block/when_destroy_start.md new file mode 100644 index 00000000000..50c7dc7c199 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_destroy_start.md @@ -0,0 +1 @@ +플레이어가 블록을 파괴하기 시작할 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_destroyed_explosion.md b/plugins/mcreator-localization/help/ko_KR/block/when_destroyed_explosion.md new file mode 100644 index 00000000000..b45c164b394 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_destroyed_explosion.md @@ -0,0 +1 @@ +폭발로 블록이 파괴되면 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_destroyed_player.md b/plugins/mcreator-localization/help/ko_KR/block/when_destroyed_player.md new file mode 100644 index 00000000000..c2f6f15f4d6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_destroyed_player.md @@ -0,0 +1 @@ +플레이어가 블록을 부술 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_entity_collides.md b/plugins/mcreator-localization/help/ko_KR/block/when_entity_collides.md new file mode 100644 index 00000000000..c093542ec38 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_entity_collides.md @@ -0,0 +1 @@ +개체가 블록 내부에 있을 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_entity_walks_on.md b/plugins/mcreator-localization/help/ko_KR/block/when_entity_walks_on.md new file mode 100644 index 00000000000..3b1d7117b80 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_entity_walks_on.md @@ -0,0 +1,7 @@ +개체가 이 블록 위로 걸어갈 때 절차를 트리거합니다. + +개체가 은신시에는 호출되지 않습니다. + +전체 높이를 가진 블록에만 작동합니다. 반블럭, 압력판 등에 대해서는 작동하지 않습니다. + +이러한 경우에는, 대신 충돌 트리거를 사용하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_neighbour_changes.md b/plugins/mcreator-localization/help/ko_KR/block/when_neighbour_changes.md new file mode 100644 index 00000000000..aae61f7fe84 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_neighbour_changes.md @@ -0,0 +1 @@ +이 블록 옆에 있는 블록이 업데이트되면 절차를 트리거합니다. (블록 상태변경, 새 블록 배치, 블록 제거) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/block/when_right_clicked.md b/plugins/mcreator-localization/help/ko_KR/block/when_right_clicked.md new file mode 100644 index 00000000000..bb8f158cc78 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/block/when_right_clicked.md @@ -0,0 +1,3 @@ +플레이어가 블록을 마우스 오른쪽 버튼으로 클릭하면 절차가 실행됩니다. + +절차는 작업을 수행할 경우 SUCCESS/CONSUME 유형의 작업 결과를 반환하고, 그렇지 않으면 PASS를 반환해야 합니다. 마우스 오른쪽 버튼을 클릭하여 GUI가 열리거나 절차가 아무런 값을 반환하지 않으면 작업 결과 유형은 SUCCESS가 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/command/name.md b/plugins/mcreator-localization/help/ko_KR/command/name.md new file mode 100644 index 00000000000..44d439f3ffa --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/command/name.md @@ -0,0 +1 @@ +gamemode, give, setblock 등과 같은 명령을 정의하기 위해 플레이어가 작성해야 하는 / 뒤에 나오는 단어입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/command/permission_level.md b/plugins/mcreator-localization/help/ko_KR/command/permission_level.md new file mode 100644 index 00000000000..d8808ec7916 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/command/permission_level.md @@ -0,0 +1,7 @@ +플레이어가 명령어를 실행하려면 최소한 이 권한 수준을 가지고 있어야 합니다. + +권한 요구를 비활성화 할 수도 있습니다. 이 경우, 명령어는 치트가 꺼진 특정 월드에서도 작동합니다. + +1이 가장 기본적인 권한 수준이고, 4가 가장 높은 권한(서버 OP 수준)입니다. + +각 권한 수준에서 어떤 명령어를 사용할 수 있는지 확인하려면 [이 페이지](https://mcreator.net/wiki/command-permission-levels)를 확인하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/command/type.md b/plugins/mcreator-localization/help/ko_KR/command/type.md new file mode 100644 index 00000000000..098f968238b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/command/type.md @@ -0,0 +1,6 @@ +이 옵션을 사용하면 명령어 유형과 명령어을 사용할 수 있는 방법/위치를 결정할 수 있습니다. + +* **표준**: 이 명령어은 어디에서나 사용할 수 있습니다. 이는 일반/기본 동작입니다 (예: `/give`). +* **싱글플레이어 전용**: 이 명령어는 싱글플레이어 월드에서만 사용할 수 있습니다 (예: `/publish`). +* **멀티플레이어 전용**: 이 명령어는 멀티플레이어 서버에서만 사용 할 수 있습니다 (예: `/ban`). +* **클라이언트 전용**: 이 명령어는 클라이언트 측에서만 수행됩니다. 즉, 클라이언트에서의 작업만 수행할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/common/creative_tab.md b/plugins/mcreator-localization/help/ko_KR/common/creative_tab.md new file mode 100644 index 00000000000..18d56f569ad --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/common/creative_tab.md @@ -0,0 +1,3 @@ +이곳은 블록이 크리에이티브 모드일 때 있을 곳입니다. + +CUSTOM이 적힌 탭: 사용자 지정 탭들의 접두사입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/common/generate_feature.md b/plugins/mcreator-localization/help/ko_KR/common/generate_feature.md new file mode 100644 index 00000000000..583a6cc40c7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/common/generate_feature.md @@ -0,0 +1 @@ +이 매개 변수가 활성화되면 이 모드 요소는 월드에서 worldgen 기능을 생성합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/common/gui_name.md b/plugins/mcreator-localization/help/ko_KR/common/gui_name.md new file mode 100644 index 00000000000..a955e5db67f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/common/gui_name.md @@ -0,0 +1 @@ +인게임 이름은 게임 내 메뉴, 아이템 툴팁 및 기타 시각적 이름 표시가 가능한 장소에 표시되는 모드 요소의 이름입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/common/restrict_to_biomes.md b/plugins/mcreator-localization/help/ko_KR/common/restrict_to_biomes.md new file mode 100644 index 00000000000..c8c16b52214 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/common/restrict_to_biomes.md @@ -0,0 +1,3 @@ +이 필드를 사용하여, 어느 생물 군계에서 스폰 되어야 하는지 정의합니다. + +목록이 비어있으면, 생물 군계 제한이 설정되지 않으며 모든 생물 군계에서 스폰이 발생합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/common/restrict_to_blocks.md b/plugins/mcreator-localization/help/ko_KR/common/restrict_to_blocks.md new file mode 100644 index 00000000000..b628f7b3a9f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/common/restrict_to_blocks.md @@ -0,0 +1,3 @@ +이 필드를 사용하여 어떤 블록(들)에 스폰될지 정의합니다. + +목록이 비어있으면 이 옵션이 비활성화되고, 모든 블록에 스폰할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/common/state_definition.md b/plugins/mcreator-localization/help/ko_KR/common/state_definition.md new file mode 100644 index 00000000000..c3a2caa058c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/common/state_definition.md @@ -0,0 +1 @@ +이 상태에 대해 요소의 속성에서 허용할 값을 지정합니다. 속성 왼쪽의 박스를 체크하지 않으면 이 상태는 어떤 영향도 미치지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/biomes.md b/plugins/mcreator-localization/help/ko_KR/dimension/biomes.md new file mode 100644 index 00000000000..3883fc7b668 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/biomes.md @@ -0,0 +1,3 @@ +이 차원에서 생성할 생물 군계 목록입니다. 생물 군계들은 차원에 대한 모든 기능을 정의합니다. 식물 유형, 나무, 구조물, 몹 스폰과 같은 모든 영역 속성을 정의합니다. + +차원은 속성에 따라서 생물 군계들을 제공하게 될 것입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/can_respawn.md b/plugins/mcreator-localization/help/ko_KR/dimension/can_respawn.md new file mode 100644 index 00000000000..dd565c1d5b9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/can_respawn.md @@ -0,0 +1 @@ +이 옵션이 선택되면, 플레이어가 차원 내에서 사망할 때 해당 차원 내에서 부활 할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/condition_portal_make.md b/plugins/mcreator-localization/help/ko_KR/dimension/condition_portal_make.md new file mode 100644 index 00000000000..7513fe697bd --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/condition_portal_make.md @@ -0,0 +1 @@ +조건이 지정되면, 플레이어는 이 차원에서 차원문을 빌드하기 위해 조건을 충족해야 합니다. 아이템 스택 종속성은 차원문 활성화에 사용되는 아이템입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/condition_portal_use.md b/plugins/mcreator-localization/help/ko_KR/dimension/condition_portal_use.md new file mode 100644 index 00000000000..f418d596cdb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/condition_portal_use.md @@ -0,0 +1 @@ +조건이 지정되면, 플레이어가 이 차원으로 이동하려고 할 때 조건을 충족시켜야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/does_water_vaporize.md b/plugins/mcreator-localization/help/ko_KR/dimension/does_water_vaporize.md new file mode 100644 index 00000000000..81839c5bbb0 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/does_water_vaporize.md @@ -0,0 +1 @@ +이 매개 변수는 차원 내부의 물을 비활성화합니다. 이와 같은 차원에 물을 배치하게 되면, 물은 즉시 사라지므로 배치가 불가능해집니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/enable_igniter.md b/plugins/mcreator-localization/help/ko_KR/dimension/enable_igniter.md new file mode 100644 index 00000000000..2eec76c4c01 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/enable_igniter.md @@ -0,0 +1,3 @@ +통합 점화 장치를 사용하려면 이 매개 변수를 체크하십시오. 사용자 지정 점화장치를 사용할 계획이라면 이 항목을 체크하지 마십시오. + +사용자 지정 점화기를 만들려면, 새 절차를 생성하고, 기본 제공 템플릿 '사용자 지정 점화장치 아이템을 이용하여 차원문 만들기'를 사용하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/enable_portal.md b/plugins/mcreator-localization/help/ko_KR/dimension/enable_portal.md new file mode 100644 index 00000000000..2824dc9151a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/enable_portal.md @@ -0,0 +1,3 @@ +이 차원에 대해 네더와 유사한 차원문을 활성화 하려면 이 매개 변수를 체크하십시오. + +이 기능을 비활성화한 상태로 두고 절차를 사용하여 이 차원에 진입하는 사용자 정의 방법을 정의할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/fluid_block.md b/plugins/mcreator-localization/help/ko_KR/dimension/fluid_block.md new file mode 100644 index 00000000000..4cb063911a9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/fluid_block.md @@ -0,0 +1 @@ +오버월드의 물과 네더의 용암과 같은 호수에 쓰일 유체입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/fog_color.md b/plugins/mcreator-localization/help/ko_KR/dimension/fog_color.md new file mode 100644 index 00000000000..1c289766926 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/fog_color.md @@ -0,0 +1 @@ +차원 내부의 안개 색상입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/has_fog.md b/plugins/mcreator-localization/help/ko_KR/dimension/has_fog.md new file mode 100644 index 00000000000..e1903a0c0f2 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/has_fog.md @@ -0,0 +1 @@ +렌더링이 실행되는 경우에도 차원에 짙은 안개를 활성화하려면 이 매개 변수를 체크하십시오. 거리가 큰 값으로 설정됩니다. 이러한 예시는 네더에서 볼 수 있습니다. diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/has_skylight.md b/plugins/mcreator-localization/help/ko_KR/dimension/has_skylight.md new file mode 100644 index 00000000000..fb144e11dac --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/has_skylight.md @@ -0,0 +1,3 @@ +이 매개 변수는 낮 주기가 있는 오버월드와 유사한 방식으로 차원에 채광을 형성합니다. + +채광은 블록을 통해서 전파되지 않습니다. 그리하여 네더는 자체 채광이 어두우므로 너무 어둡지 않게 전역 광원을 필요로 하고 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/imitate_overworld.md b/plugins/mcreator-localization/help/ko_KR/dimension/imitate_overworld.md new file mode 100644 index 00000000000..342a900dd5a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/imitate_overworld.md @@ -0,0 +1 @@ +이 매개 변수는 날씨, 나침반 기능 및 생물 스폰과 관련된 차원의 특정 측면을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/is_dark.md b/plugins/mcreator-localization/help/ko_KR/dimension/is_dark.md new file mode 100644 index 00000000000..fdf2a53a9ed --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/is_dark.md @@ -0,0 +1,5 @@ +이 매개 변수가 체크되면, 전역 광원이 비활성화되고 차원이 어두워집니다. + +채광도 비활성화된 경우, 이 차원에 자연광원은 없게 됩니다. + +차원이 완전히 어두워야 하는 경우를 제외하고, 모든 경우에는 네더 차원에 대해 채광을 활성화합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/main_filler_block.md b/plugins/mcreator-localization/help/ko_KR/dimension/main_filler_block.md new file mode 100644 index 00000000000..90da23af2d6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/main_filler_block.md @@ -0,0 +1 @@ +오버월드의 돌과 같은 차원의 주요 블록입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/on_portal_tick_update.md b/plugins/mcreator-localization/help/ko_KR/dimension/on_portal_tick_update.md new file mode 100644 index 00000000000..54d4ba2afe7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/on_portal_tick_update.md @@ -0,0 +1 @@ +포털 블록이 월드에 존재하는 경우, 매 틱마다 절차가 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/portal_frame_block.md b/plugins/mcreator-localization/help/ko_KR/dimension/portal_frame_block.md new file mode 100644 index 00000000000..65b5425f99e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/portal_frame_block.md @@ -0,0 +1 @@ +차원문 프레임 블록은 포털이 활성화된 경우 차원에 대한 차원문 프레임을 만드는 데 사용되는 블럭입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/portal_igniter_texture.md b/plugins/mcreator-localization/help/ko_KR/dimension/portal_igniter_texture.md new file mode 100644 index 00000000000..06dfd7c8ae7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/portal_igniter_texture.md @@ -0,0 +1 @@ +차원문 프레임에서 차원문을 생성하는 데 사용되는 차원문 점화기의 텍스처입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/portal_particles.md b/plugins/mcreator-localization/help/ko_KR/dimension/portal_particles.md new file mode 100644 index 00000000000..f966fb64651 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/portal_particles.md @@ -0,0 +1 @@ +이 매개 변수는 차원문이 활성화 될 때 차원문에서 방출되는 입자 유형을 선택합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/portal_sound.md b/plugins/mcreator-localization/help/ko_KR/dimension/portal_sound.md new file mode 100644 index 00000000000..4c83c812c1f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/portal_sound.md @@ -0,0 +1 @@ +이 매개 변수는 활성화되었을 때 차원문에서 무작위로 재생되는 사운드를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/portal_texture.md b/plugins/mcreator-localization/help/ko_KR/dimension/portal_texture.md new file mode 100644 index 00000000000..11148a5085f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/portal_texture.md @@ -0,0 +1 @@ +이 매개 변수는 네더 차원문의 보라색 애니메이션 텍스처와 같은 차원문의 텍스처를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/sleep_result.md b/plugins/mcreator-localization/help/ko_KR/dimension/sleep_result.md new file mode 100644 index 00000000000..00b6d5e3fe5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/sleep_result.md @@ -0,0 +1 @@ +이 매개 변수는 플레이어가 이 차원에서 침대에서 자려고 할 때 어떤 일이 발생하는지 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/when_player_enters.md b/plugins/mcreator-localization/help/ko_KR/dimension/when_player_enters.md new file mode 100644 index 00000000000..d8dfb5fab41 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/when_player_enters.md @@ -0,0 +1 @@ +플레이어가 차원에 들어가면 절차가 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/when_player_leaves.md b/plugins/mcreator-localization/help/ko_KR/dimension/when_player_leaves.md new file mode 100644 index 00000000000..63df3d1cc72 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/when_player_leaves.md @@ -0,0 +1 @@ +플레이어가 차원을 떠나면 절차가 실행됩니다. diff --git a/plugins/mcreator-localization/help/ko_KR/dimension/when_portal_used.md b/plugins/mcreator-localization/help/ko_KR/dimension/when_portal_used.md new file mode 100644 index 00000000000..0bff3afb172 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/dimension/when_portal_used.md @@ -0,0 +1,3 @@ +플레이어가 블록에 차원문 트리거를 사용하면 절차가 실행됩니다. + +절차는 트리거가 블록과 상호작용 한 경우 SUCCESS/CONSUME 유형의 작업 결과를 반환하고, 상호작용이 실패한 경우 FAIL, 상호작용이 없는 경우 PASS를 반환해야 합니다. 트리거가 차원문을 성공적으로 생성했거나 절차가 값을 반환하지 않으면 작업 결과 유형은 SUCCESS가 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/allowed_on_books.md b/plugins/mcreator-localization/help/ko_KR/enchantment/allowed_on_books.md new file mode 100644 index 00000000000..d23eee8ea56 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/allowed_on_books.md @@ -0,0 +1,3 @@ +마법 부여를 통해 마법이 부여된 책을 활성화 하려면 이 옵션을 체크하십시오. + +크리에이티브 탭은 처음에 정의한 마법 부여의 유형에 따라 정의되므로 재정의 될 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/can_apply_to.md b/plugins/mcreator-localization/help/ko_KR/enchantment/can_apply_to.md new file mode 100644 index 00000000000..1aa39dbbafd --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/can_apply_to.md @@ -0,0 +1,7 @@ +마법 부여대에서 마법을 받을 수 있는 아이템(혹은 제외 모드에 없는 항목)을 여기에서 지정하십시오. + +또한 정의된 마법 부여 유형에 없는 항목을 추가할 수도 있습니다. + +하지만 대부분의 경우, 이 항목을 비워 두는 것이 좋습니다(바닐라 호환성 검색 논리가 사용됨). + +**포함** 을 선택하면 선택한 항목이 이 마법을 부여받을 수 있습니다. **제외** 를 선택하면 선택한 항목이 이 마법을 부여받을 수 없습니다. diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/compatible_enchantments.md b/plugins/mcreator-localization/help/ko_KR/enchantment/compatible_enchantments.md new file mode 100644 index 00000000000..d70d1f56cf6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/compatible_enchantments.md @@ -0,0 +1,5 @@ +다른 특정 마법과의 호환성을 결정합니다. + +어떤 마법과도 결합할 수 있도록 하려면 이 항목을 비워두십시오. + +**포함** 을 선택하면 선택된 마법들이 결합이 가능합니다. **제외** 을 선택하면 선택된 마법들이 결합이 불가능합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/curse.md b/plugins/mcreator-localization/help/ko_KR/enchantment/curse.md new file mode 100644 index 00000000000..e89b4ce1abf --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/curse.md @@ -0,0 +1,5 @@ +이 속성의 마법들은 보통 나쁩니다 (이름이 빨간색임). + +소실 저주와 귀속 저주가 이 속성을 지닙니다. + +저주 마법은 아이템에서부터 지울 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/damage_modifier.md b/plugins/mcreator-localization/help/ko_KR/enchantment/damage_modifier.md new file mode 100644 index 00000000000..229935ae1ea --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/damage_modifier.md @@ -0,0 +1,3 @@ +이 값은 마법의 레벨(현재 가지고 있는 아이템의)과 곱해 마법이 보호 할 피해량을 얻습니다. + +예를 들어, PROTECTION(보호)는 1의 값을 가지므로, 1 레벨인 경우에 마법 부여시 1(레벨) * 1(값) = 1로 플레이어를 1만큼 보호합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/generate_in_loot_tables.md b/plugins/mcreator-localization/help/ko_KR/enchantment/generate_in_loot_tables.md new file mode 100644 index 00000000000..c0f0b6dc60c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/generate_in_loot_tables.md @@ -0,0 +1 @@ +전리품 테이블에서 마법 부여를 형성하려면 이 옵션을 체크하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/level.md b/plugins/mcreator-localization/help/ko_KR/enchantment/level.md new file mode 100644 index 00000000000..d9e9ac23cfa --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/level.md @@ -0,0 +1 @@ +마법 부여가 지원하는 최대 레벨입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/name.md b/plugins/mcreator-localization/help/ko_KR/enchantment/name.md new file mode 100644 index 00000000000..ae649c17147 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/name.md @@ -0,0 +1 @@ +게임 내에서 사용될 마법 부여명입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/rarity.md b/plugins/mcreator-localization/help/ko_KR/enchantment/rarity.md new file mode 100644 index 00000000000..ba8c087ff86 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/rarity.md @@ -0,0 +1 @@ +(마법 부여대와 루트 테이블에서) 아이템에 마법 부여가 나타날 희귀성입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/treasure_enchantment.md b/plugins/mcreator-localization/help/ko_KR/enchantment/treasure_enchantment.md new file mode 100644 index 00000000000..1cc79c9add7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/treasure_enchantment.md @@ -0,0 +1,3 @@ +마법 부여 보물은 마법 부여대에서 획득할 수 없습니다. + +수선 혹은 영혼가속 등 최근에 추가된 항목 일부들은 전리품 테이블에서 얻을 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/type.md b/plugins/mcreator-localization/help/ko_KR/enchantment/type.md new file mode 100644 index 00000000000..82a3ba5f0c5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/type.md @@ -0,0 +1 @@ +이 속성은 마법 부여를 적용할 수 있는 아이템 유형을 정의합니다 (마법 부여대에서만). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/enchantment/villager_trade.md b/plugins/mcreator-localization/help/ko_KR/enchantment/villager_trade.md new file mode 100644 index 00000000000..60a1d9552d8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/enchantment/villager_trade.md @@ -0,0 +1 @@ +마법 부여품을 주민 거래로 매매하려면 이 옵션을 체크하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/energy/enable_storage.md b/plugins/mcreator-localization/help/ko_KR/energy/enable_storage.md new file mode 100644 index 00000000000..e14b39ea2f8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/energy/enable_storage.md @@ -0,0 +1,3 @@ +에너지 저장을 활성화하려면 이 옵션을 선택하십시오. + +에너지 시스템이 제대로 작동하려면 블록에 타일 개체가 활성화되어 있어야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/energy/energy_capacity.md b/plugins/mcreator-localization/help/ko_KR/energy/energy_capacity.md new file mode 100644 index 00000000000..fd1f91efb7d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/energy/energy_capacity.md @@ -0,0 +1 @@ +이 매개 변수는 에너지 요소 (블록, 아이템 등)가 저장할 수 있는 에너지의 최대값을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/energy/initial_energy.md b/plugins/mcreator-localization/help/ko_KR/energy/initial_energy.md new file mode 100644 index 00000000000..ed310d6a3ea --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/energy/initial_energy.md @@ -0,0 +1,3 @@ +에너지 요소 (블록, 아이템 등)의 기본값을 설정합니다. + +이는 플레이어가 요소를 월드에 배치할 때 갖게 되는 에너지입니다 (요소가 자연스럽게 생성되거나 다른 방식으로 월드에 등장하는 경우). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/energy/max_extract.md b/plugins/mcreator-localization/help/ko_KR/energy/max_extract.md new file mode 100644 index 00000000000..2d1dcf72093 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/energy/max_extract.md @@ -0,0 +1 @@ +이 값은 에너지 요소(블록, 아이템 등)가 다른 에너지 요소로부터 추출 할 수 있는 에너지의 최대값입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/energy/max_receive.md b/plugins/mcreator-localization/help/ko_KR/energy/max_receive.md new file mode 100644 index 00000000000..08cfea39179 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/energy/max_receive.md @@ -0,0 +1 @@ +이 값은 에너지 요소(블록, 아이템 등)가 다른 에너지 요소로부터 받을 수 있는 에너지의 최대값입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/ai_continue_condition.md b/plugins/mcreator-localization/help/ko_KR/entity/ai_continue_condition.md new file mode 100644 index 00000000000..6a9cb4b191a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/ai_continue_condition.md @@ -0,0 +1 @@ +지정된 경우, 개체는 이 조건을 충족하는 한 이 작업을 수행합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/ai_start_condition.md b/plugins/mcreator-localization/help/ko_KR/entity/ai_start_condition.md new file mode 100644 index 00000000000..8e9e913ec73 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/ai_start_condition.md @@ -0,0 +1 @@ +지정된 경우, 개체는 이 조건을 충족하는 경우에 이 작업을 시작합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/armor_base_value.md b/plugins/mcreator-localization/help/ko_KR/entity/armor_base_value.md new file mode 100644 index 00000000000..0c45457ff9b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/armor_base_value.md @@ -0,0 +1 @@ +몹이 가지고 있는 내장 방어 포인트의 양입니다. 좀비의 경우 기본적으로 2 방어 포인트를 가집니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/attack_knockback.md b/plugins/mcreator-localization/help/ko_KR/entity/attack_knockback.md new file mode 100644 index 00000000000..76ac8333985 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/attack_knockback.md @@ -0,0 +1 @@ +공격 밀치기는 이 개체의 공격에 대한 밀치기 값을 정의합니다. 대부분의 바닐라 개체는 이를 사용하지 않습니다. 파괴수와 같은 개체는 1.5의 밀치기 값을 가집니다. diff --git a/plugins/mcreator-localization/help/ko_KR/entity/attack_strength.md b/plugins/mcreator-localization/help/ko_KR/entity/attack_strength.md new file mode 100644 index 00000000000..5449b3debf1 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/attack_strength.md @@ -0,0 +1 @@ +몹이 공격할 때 개체에게 입히는 피해량입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/base.md b/plugins/mcreator-localization/help/ko_KR/entity/base.md new file mode 100644 index 00000000000..d510c647cd5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/base.md @@ -0,0 +1,5 @@ +바닐라와 비슷한 개체를 만들 수 있는 바닐라 개체 AI입니다. + +이는 드롭 아이템과 같은 일부 매개 변수 또한 재정의합니다. + +일반적으로 이 매개 변수는 기본값으로 둬야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/behaviour.md b/plugins/mcreator-localization/help/ko_KR/entity/behaviour.md new file mode 100644 index 00000000000..54e08a92759 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/behaviour.md @@ -0,0 +1,5 @@ +몹으로 설정된 생명체는 공격 할 수 있는 반면에, 크리처로 설정된 생명체는 수동적입니다. + +이 매개 변수는 사용 시 AI 베이스에 의하여 재정의됩니다. + +여기에서 생물 유형을 선택하면, 공격 AI 유형이라면 대부분의 경우 개체가 게임 크래시를 일으킨다는 점을 유념하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/bind_gui.md b/plugins/mcreator-localization/help/ko_KR/entity/bind_gui.md new file mode 100644 index 00000000000..4f431075240 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/bind_gui.md @@ -0,0 +1 @@ +GUI를 개체에 바인딩하려는 경우(예: 주민 또는 커스텀 말과 같은 인밴토리 제작), 인벤토리를 활성화 하고 GUI를 바인딩 하려면 이 박스를 체크하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/boss_entity.md b/plugins/mcreator-localization/help/ko_KR/entity/boss_entity.md new file mode 100644 index 00000000000..55266f3d7ff --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/boss_entity.md @@ -0,0 +1,3 @@ +선택하면 이 개체는 보스가 됩니다. + +색상 매개 변수는 바 스타일과 유사하게 보스바의 색상을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/bounding_box.md b/plugins/mcreator-localization/help/ko_KR/entity/bounding_box.md new file mode 100644 index 00000000000..ebc0247ebf3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/bounding_box.md @@ -0,0 +1,3 @@ + 이 매개 변수는 블록 단위로 몹의 히트박스 크기와 그림자 크기를 제어합니다. 첫 번째 옵션은 너비와 깊이를 설정하고, 두 번째 옵션은 높이를 설정합니다. 마지막 옵션은 몹의 그림자 반경에 대한 크기를 블록 단위로 설정합니다. + + 개체 모델 크기에 대한 자세한 내용은 [여기](https://mcreator.net/wiki/entity-model-sizes)에서 확인할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/breedable.md b/plugins/mcreator-localization/help/ko_KR/entity/breedable.md new file mode 100644 index 00000000000..c5c0d16b863 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/breedable.md @@ -0,0 +1 @@ +번식 가능 매개 변수가 활성화된 경우 개체를 다른 개체와 번식시키는 데 사용되는 아이템입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/condition_can_breathe_underwater.md b/plugins/mcreator-localization/help/ko_KR/entity/condition_can_breathe_underwater.md new file mode 100644 index 00000000000..0af68602d33 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/condition_can_breathe_underwater.md @@ -0,0 +1 @@ +이 조건이 참일 때, 개체는 물고기나 오징어처럼 물 속에서 무한정 숨을 쉴 수 있게 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/condition_fluids_can_push.md b/plugins/mcreator-localization/help/ko_KR/entity/condition_fluids_can_push.md new file mode 100644 index 00000000000..1e08b23ffa9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/condition_fluids_can_push.md @@ -0,0 +1,3 @@ +이 조건이 false이면, 개체는 유체에 의해 밀려나지 않습니다. 이는 일반적으로 물에서 사는 개체를 만들 때 바람직합니다. + +살아있는 엔티티의 기본 값은 true입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/condition_is_model_transparent.md b/plugins/mcreator-localization/help/ko_KR/entity/condition_is_model_transparent.md new file mode 100644 index 00000000000..2dd9c4a200d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/condition_is_model_transparent.md @@ -0,0 +1 @@ +반환된 값이 true인 동안, 개체는 투명해집니다. 플레이어가 관전자 모드에 있을 때, 이 조건을 충족합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/condition_is_shaking.md b/plugins/mcreator-localization/help/ko_KR/entity/condition_is_shaking.md new file mode 100644 index 00000000000..56894df737b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/condition_is_shaking.md @@ -0,0 +1 @@ +반환된 값이 true인 동안, 개체는 흔들리게 됩니다. 좀비 주민은 치료 중에 이 기능을 사용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/condition_natural_spawning.md b/plugins/mcreator-localization/help/ko_KR/entity/condition_natural_spawning.md new file mode 100644 index 00000000000..0adcb5ba869 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/condition_natural_spawning.md @@ -0,0 +1,3 @@ +바닐라 개체와 비슷하게 개체를 스폰 시키려면 이 옵션을 변경할 필요가 없습니다. + +그러나 사용자 지정 스폰 조건을 사용하려면 새 조건 절차를 만들어야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/condition_solid_bounding_box.md b/plugins/mcreator-localization/help/ko_KR/entity/condition_solid_bounding_box.md new file mode 100644 index 00000000000..4285e9dae09 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/condition_solid_bounding_box.md @@ -0,0 +1,3 @@ +이 기능이 활성화되면, 개체의 경계 상자는 블록의 경계상자(고체 충돌)와 유사하게 작동합니다. + +바닐라 Minecraft에서 보트와 셜커가 이를 사용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/creature_type.md b/plugins/mcreator-localization/help/ko_KR/entity/creature_type.md new file mode 100644 index 00000000000..00bba101f2a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/creature_type.md @@ -0,0 +1,5 @@ +생물의 유형을 설정하여 특정 변화를 일으킬 수 있습니다. +* **언데드**는 강타 마법으로 추가 피해를 입고, 즉시 피해로 치유되며 즉시 회복으로 피해를 입습니다. 또한 중독이나 재생의 영향을 받지 않습니다. +* **절지동물**은 살충 마법 부여로 인한 추가 피해를 입습니다. +* **우민**은 아무런 효과가 없는 것 같습니다. +* **물**은 찌르기 마법으로 인한 추가 피해를 입습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/death_sound.md b/plugins/mcreator-localization/help/ko_KR/entity/death_sound.md new file mode 100644 index 00000000000..96c62bb96cf --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/death_sound.md @@ -0,0 +1 @@ +개체가 죽을 때 재생되는 소리입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/despawn_idle.md b/plugins/mcreator-localization/help/ko_KR/entity/despawn_idle.md new file mode 100644 index 00000000000..89a1797eaff --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/despawn_idle.md @@ -0,0 +1,3 @@ +만일 틱 되었을 때, 몹은 플레이어가 충분히 멀리 이동했다면 디스폰됩니다 (대부분의 몹의 기본 동작). + +보스와 소환 가능한 몹이 사라지는 것을 막으려면 이 기능을 끄십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/do_ranged_attacks.md b/plugins/mcreator-localization/help/ko_KR/entity/do_ranged_attacks.md new file mode 100644 index 00000000000..ec68a832365 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/do_ranged_attacks.md @@ -0,0 +1,4 @@ +설정이 체크되면 개체가 발사체를 통해 공격합니다 (스켈레톤과 유사). 다음을 선택할 수 있습니다: +* 목록에 있는 사용자 지정 발사체 (혹은 기본값 - 화살); +* 원거리 공격의 간격 (틱 단위); +* 개체의 추적 범위를 벗어난 후에도 다른 엔티티를 계속 타겟팅 하는 반경 범위. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/drop.md b/plugins/mcreator-localization/help/ko_KR/entity/drop.md new file mode 100644 index 00000000000..ff8a1ff545c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/drop.md @@ -0,0 +1,3 @@ +몹이 죽을 때 드롭하는 블록/아이템 입니다. + +또는 전리품 테이블을 이용해 더 많은 아이템 드롭을 시키거나 각 아이템의 희귀도를 결정할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/enable_ai.md b/plugins/mcreator-localization/help/ko_KR/entity/enable_ai.md new file mode 100644 index 00000000000..a7ee5ad429f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/enable_ai.md @@ -0,0 +1,5 @@ +옵션이 체크되면, 개체에 대한 AI 작업이 활성화 됩니다. + +AI 작업 빌더에 정의된 AI 작업은 이 기능을 활성화하지 않으면 아무 효과도 없습니다. + +일종의 기타 개체를 만드는 것이 아닌 한, 이 기능을 활성화 된 상태로 두기를 바랍니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/enable_spawning.md b/plugins/mcreator-localization/help/ko_KR/entity/enable_spawning.md new file mode 100644 index 00000000000..b173902d86e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/enable_spawning.md @@ -0,0 +1 @@ +옵션을 선택하면, 개체가 몹 스폰 프로세스를 통해 자연스럽게 월드에 스폰됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/equipment.md b/plugins/mcreator-localization/help/ko_KR/entity/equipment.md new file mode 100644 index 00000000000..425cacaaf06 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/equipment.md @@ -0,0 +1,3 @@ +몹 모델이 이를 지원하는 경우, 몹이 장비를 가질 수 있도록 허용합니다. + +슬롯은 왼쪽에서부터 오른손, 왼손, 헬멧, 흉갑, 레깅스, 부츠 입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/flying_entity.md b/plugins/mcreator-localization/help/ko_KR/entity/flying_entity.md new file mode 100644 index 00000000000..d0014d16642 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/flying_entity.md @@ -0,0 +1,3 @@ +이 매개 변수를 선택하면 이 개체는 날아다니는 개체가 됩니다. + +즉, 비행 경로 네비게이터와 모션 컨트롤러를 지니며 중력 및 낙하피해가 사라짐을 의미합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/follow_range.md b/plugins/mcreator-localization/help/ko_KR/entity/follow_range.md new file mode 100644 index 00000000000..2c720f64ec7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/follow_range.md @@ -0,0 +1 @@ +추적 범위는 어느 거리에서 몹이 플레이어/대상을 인지/추격할 지를 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/glow_texture.md b/plugins/mcreator-localization/help/ko_KR/entity/glow_texture.md new file mode 100644 index 00000000000..e11082b4bea --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/glow_texture.md @@ -0,0 +1 @@ +발광 텍스처는 몹의 빛나는 레이어를 정의하는 데 사용됩니다. 텍스처 영역이 더 밝아지면 몹의 해당 부분이 더 빛나게 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/health.md b/plugins/mcreator-localization/help/ko_KR/entity/health.md new file mode 100644 index 00000000000..3e312ab2fef --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/health.md @@ -0,0 +1 @@ +이 매개 변수는 몹의 초기 체력(및 최대 기본) 값을 설정합니다. 체력 2 = 하트 1개 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/hurt_sound.md b/plugins/mcreator-localization/help/ko_KR/entity/hurt_sound.md new file mode 100644 index 00000000000..b8d5ca3ef5a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/hurt_sound.md @@ -0,0 +1 @@ +개체가 다쳤을 때 재생되는 소리입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/immunity.md b/plugins/mcreator-localization/help/ko_KR/entity/immunity.md new file mode 100644 index 00000000000..58dccd779d9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/immunity.md @@ -0,0 +1 @@ +여기서 선택한 공격 유형은 몹에게 영향을 미치지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/inventory_size.md b/plugins/mcreator-localization/help/ko_KR/entity/inventory_size.md new file mode 100644 index 00000000000..1785e21998e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/inventory_size.md @@ -0,0 +1,3 @@ +이 매개 변수는 개체가 내부 인벤토리에서 사용할 슬롯 수를 제어합니다. + +이 값을 `GUI 에서 가장 큰 슬롯 ID + 1`으로 설정하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/inventory_stack_size.md b/plugins/mcreator-localization/help/ko_KR/entity/inventory_stack_size.md new file mode 100644 index 00000000000..6b4d11354f3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/inventory_stack_size.md @@ -0,0 +1,3 @@ +이 매개 변수는 개체의 내부 인벤토리 슬롯에 배치할 수 있는 스택의 최대 크기를 제어합니다. + +이 매개 변수와 최대 아이탬 스택 크기 중에 제일 작은 수가 실제 최대 스택 수로 결정된다는 점을 유념해주시기 바랍니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/knockback_resistance.md b/plugins/mcreator-localization/help/ko_KR/entity/knockback_resistance.md new file mode 100644 index 00000000000..63f41102a21 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/knockback_resistance.md @@ -0,0 +1 @@ +밀치기 저항은 개체의 공격 밀쳐내기에 대한 저항을 정의합니다. 일반적으로 대부분의 바닐라 개체는 사용하지 않지만 참고로 파괴수는 0.5를 가지고 있습니다. diff --git a/plugins/mcreator-localization/help/ko_KR/entity/label.md b/plugins/mcreator-localization/help/ko_KR/entity/label.md new file mode 100644 index 00000000000..6fbdf281a84 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/label.md @@ -0,0 +1 @@ +이를 통해 몹은 플레이어 이름이나 이름표가 표시되는 방식과 비슷하게 머리 위에 표시될 이름을 설정할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/model.md b/plugins/mcreator-localization/help/ko_KR/entity/model.md new file mode 100644 index 00000000000..2d3909b59e8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/model.md @@ -0,0 +1 @@ +이 매개 변수는 개체의 시각적 모델(시각적 모양)을 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/movement_speed.md b/plugins/mcreator-localization/help/ko_KR/entity/movement_speed.md new file mode 100644 index 00000000000..1dc7597589a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/movement_speed.md @@ -0,0 +1 @@ +몹의 이동 속도를 설정합니다. 대부분의 일반 몹은 약 0.25의 속도로 이동하는 반면, 거미나 늑대와 같은 빠른 몹은 0.3의 속도로 이동합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/name.md b/plugins/mcreator-localization/help/ko_KR/entity/name.md new file mode 100644 index 00000000000..9c71b8d290d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/name.md @@ -0,0 +1 @@ +몹 이름은 사망 메세지에 사용되며, 게임 내 메뉴 등 시각적 이름 표시가 가능한 곳에 표시됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/on_initial_spawn.md b/plugins/mcreator-localization/help/ko_KR/entity/on_initial_spawn.md new file mode 100644 index 00000000000..846f24ba7c9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/on_initial_spawn.md @@ -0,0 +1,3 @@ +개체가 스폰될 때 절차를 트리거합니다. + +일부 절차 블록은 초기 월드 생성중에 제대로 작동하지 않을 수 있다는 점을 명심하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/on_tick_update.md b/plugins/mcreator-localization/help/ko_KR/entity/on_tick_update.md new file mode 100644 index 00000000000..918e07dc1e6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/on_tick_update.md @@ -0,0 +1 @@ +개체가 세계에 존제하는 매 틱마다 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/ridable.md b/plugins/mcreator-localization/help/ko_KR/entity/ridable.md new file mode 100644 index 00000000000..1f86a05b884 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/ridable.md @@ -0,0 +1,3 @@ +이 매개 변수를 사용하면 플레이어가 이 개체에 탑승할 수 있습니다. + +선택적 컨트롤 또한 활성화 할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/sound.md b/plugins/mcreator-localization/help/ko_KR/entity/sound.md new file mode 100644 index 00000000000..e9b9b0da2ad --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/sound.md @@ -0,0 +1,3 @@ +리빙 사운드는 개체가 무작위로 재생할 주변음입니다. + +주변음을 비활성화하려면 비워두십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/spawn_egg_options.md b/plugins/mcreator-localization/help/ko_KR/entity/spawn_egg_options.md new file mode 100644 index 00000000000..0b59479e218 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/spawn_egg_options.md @@ -0,0 +1,3 @@ +이 매개 변수를 체크하면, 첫 번째 색상이 알의 배경색이 됩니다. 두 번째 색상은 알의 얼룩 색입니다. + +스폰 알에 대한 크리에이티브 탭도 선택할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/spawn_group_size.md b/plugins/mcreator-localization/help/ko_KR/entity/spawn_group_size.md new file mode 100644 index 00000000000..cab91fbb2e8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/spawn_group_size.md @@ -0,0 +1,3 @@ +여기에 설정된 최소 및 최댓값은 몹이 생성될 그룹의 크기를 설정합니다. + +20마리가 넘는 그룹으로 몹을 스폰하는 것은 어렵다는 점을 명심해주십시오 (이러한 그룹은 스폰되기 어렵습니다). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/spawn_in_dungeons.md b/plugins/mcreator-localization/help/ko_KR/entity/spawn_in_dungeons.md new file mode 100644 index 00000000000..c00dd88a5ba --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/spawn_in_dungeons.md @@ -0,0 +1 @@ +이 옵션이 선택되면, 던전(몹 생성기가 있는 구조물)이 몹 생성기를 통해 개체를 스폰할 것입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/spawn_type.md b/plugins/mcreator-localization/help/ko_KR/entity/spawn_type.md new file mode 100644 index 00000000000..7348b2dcb81 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/spawn_type.md @@ -0,0 +1,8 @@ +이 매개 변수는 몹이 생성되도록 정의된 생물 군계의 생성 유형을 제어합니다. + +* Monster로 표시된 몹은 어두운 곳이나 밤에만 생성됩니다. +* Creature로 표시된 몹은 직사광선 아래 잔디 재질 블록 위에서만 생성됩니다. 몹 유형의 생명체는 스폰되지 않으므로 이 스폰 유형을 사용하지 마십시오. +* Ambient로 표시된 몹은 블록 유형이 금지하는 경우를 제외하고 어떤 조건에서도 생성되지만, 이 범주는 박쥐와 같이 게임플레이에 영향을 주지 않는 몹에 사용해야 합니다. +* WaterCreature는 물 속에서 생성되지만 다른 제한은 없습니다. + +스폰 유형 시스템은 [여기](https://mcreator.net/wiki/mob-spawning-parameters)에 자세히 설명되어 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/spawn_weight.md b/plugins/mcreator-localization/help/ko_KR/entity/spawn_weight.md new file mode 100644 index 00000000000..2920ce6bbb2 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/spawn_weight.md @@ -0,0 +1,5 @@ +이 매개 변수는 게임이 스폰시킬 몹을 선택할 때 다른 몹보다 우선순위를 제외합니다. + +가중치가 높을수록 게임에서 이 몹은 더 많이 스폰될 것입니다. 몬스터에 비해 동물은 이 값을 더 낮게 설정하십시오. + +스폰 가중치 시스템은 [여기](https://mcreator.net/wiki/mob-spawning-parameters)에 자세히 설명되어 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/step_height.md b/plugins/mcreator-localization/help/ko_KR/entity/step_height.md new file mode 100644 index 00000000000..0e934a0b086 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/step_height.md @@ -0,0 +1,3 @@ +개체의 보폭 높이를 정합니다. + +대부분의 일반 개체의 보폭 높이는 0.6인 반면, 말과 같이 탈 수 있는 개체의 보폭 높이는 1입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/step_sound.md b/plugins/mcreator-localization/help/ko_KR/entity/step_sound.md new file mode 100644 index 00000000000..cfa829e9a33 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/step_sound.md @@ -0,0 +1 @@ +개체가 걸을 때 재생되는 소리입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/texture.md b/plugins/mcreator-localization/help/ko_KR/entity/texture.md new file mode 100644 index 00000000000..0c1078c154c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/texture.md @@ -0,0 +1,3 @@ +개체의 텍스처입니다. 텍스처가 선택한 모델과 호환되는지 확인하십시오. + +예를 들어 직립보행 개체 모델은 64x64 (Minecraft 1.18 이전에는 64x32) 유형 텍스처만 지원합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/tracking_range.md b/plugins/mcreator-localization/help/ko_KR/entity/tracking_range.md new file mode 100644 index 00000000000..46f139f8ae9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/tracking_range.md @@ -0,0 +1,3 @@ +이 매개 변수는 플레이어가 개체를 추적할 수 있는 블록 수를 제어합니다. + +이 매개 변수를 0으로 설정하면 개체의 렌더링 및 충돌이 완전히 비활성화됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/water_entity.md b/plugins/mcreator-localization/help/ko_KR/entity/water_entity.md new file mode 100644 index 00000000000..f8396d3e466 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/water_entity.md @@ -0,0 +1,5 @@ +이 매개 변수를 선택하면 이 개체가 수생 개체가 됩니다. + +이 매개 변수를 활성화하면 개체가 물 유형 네비게이터, 물 모션 컨트롤러를 가지며 월드 스포너가 유체에 스폰시키도록 허용합니다. + +이로 인해 개체가 유체에 생성되지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/when_dies.md b/plugins/mcreator-localization/help/ko_KR/entity/when_dies.md new file mode 100644 index 00000000000..b40038999b3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/when_dies.md @@ -0,0 +1 @@ +이 트리거는 개체가 죽을 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/when_falls.md b/plugins/mcreator-localization/help/ko_KR/entity/when_falls.md new file mode 100644 index 00000000000..d53b1348592 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/when_falls.md @@ -0,0 +1 @@ +이 트리거는 개체가 떨어질 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/when_hurt.md b/plugins/mcreator-localization/help/ko_KR/entity/when_hurt.md new file mode 100644 index 00000000000..399ff8e6038 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/when_hurt.md @@ -0,0 +1,5 @@ +이 트리거는 개체가 다칠 때 절차를 트리거합니다. + +이 경우 `sourceentity` 종속성은 이 개체에 손상을 일으키는 개체이며, 개체가 아닌 원천으로 인해 손상이 발생하는 경우 null이 될 수 있습니다. + +절차가 `false`논리 값을 반환하면 개체는 어떠한 피해도 받지 않습니다. diff --git a/plugins/mcreator-localization/help/ko_KR/entity/when_kills_another.md b/plugins/mcreator-localization/help/ko_KR/entity/when_kills_another.md new file mode 100644 index 00000000000..4da8eb5ec8b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/when_kills_another.md @@ -0,0 +1 @@ +이 트리거는 개체가 다른 개체를 죽일 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/when_player_collides.md b/plugins/mcreator-localization/help/ko_KR/entity/when_player_collides.md new file mode 100644 index 00000000000..75ed67179ec --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/when_player_collides.md @@ -0,0 +1 @@ +이 트리거는 플레이어가 이 개체와 충돌할 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/when_right_clicked.md b/plugins/mcreator-localization/help/ko_KR/entity/when_right_clicked.md new file mode 100644 index 00000000000..cea081297d7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/when_right_clicked.md @@ -0,0 +1,3 @@ +이 트리거는 플레이어가 이 개체를 마우스 오른쪽 버튼으로 클릭할 때 절차를 트리거합니다. + +절차는 개체와 상호작용이 있었던 경우 SUCCESS/CONSUME 유형의 작업 결과를 반환하고, 상호 작용이 실패한 경우 FAIL, 상호 작용이 없는 경우 PASS를 반환해야 합니다. 절차가 어떤 값도 반환하지 않으면 작업 결과 유형은 개체를 탈 수 있는지, 길들일 수 있는지, 또는 GUI를 열 수 있는지에 따라 결정됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/when_struck_by_lightning.md b/plugins/mcreator-localization/help/ko_KR/entity/when_struck_by_lightning.md new file mode 100644 index 00000000000..854266e9c5b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/when_struck_by_lightning.md @@ -0,0 +1 @@ +이 트리거는 이 개체가 번개에 맞을 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/entity/xp_amount.md b/plugins/mcreator-localization/help/ko_KR/entity/xp_amount.md new file mode 100644 index 00000000000..f47ac080917 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/entity/xp_amount.md @@ -0,0 +1,3 @@ +이 매개 변수는 몹을 죽임으로써 얻는 경험치의 양을 제어합니다. + +이 매개 변수는 일반적으로 동물일 경우 1~3이고 괴물의 경우 5입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/feature/generation_condition.md b/plugins/mcreator-localization/help/ko_KR/feature/generation_condition.md new file mode 100644 index 00000000000..d707d0803dd --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/feature/generation_condition.md @@ -0,0 +1,5 @@ +이 기능 생성을 위한 더 많은 조건을 가지려면 논리 반환 값이 있는 절차를 추가하십시오. + +이 조건은 기능 작성기의 배치 수정자 다음에 체크됩니다. + +일부 절차 블록은 초기 월드 생성중에 제대로 작동하지 않을 수 있다는 점을 명심하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/feature/generation_stage.md b/plugins/mcreator-localization/help/ko_KR/feature/generation_stage.md new file mode 100644 index 00000000000..62f42d4077e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/feature/generation_stage.md @@ -0,0 +1 @@ +이 옵션은 기능을 추가해야 하는 월드 생성 단계를 결정합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/before_replacing_block.md b/plugins/mcreator-localization/help/ko_KR/fluid/before_replacing_block.md new file mode 100644 index 00000000000..c4ce8be6b03 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/before_replacing_block.md @@ -0,0 +1 @@ +이 절차는 유체가 공기 의외의 블록(예: 키 큰 잔디)를 파괴(대체)하기 전에 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/bucket_texture.md b/plugins/mcreator-localization/help/ko_KR/fluid/bucket_texture.md new file mode 100644 index 00000000000..1ab9c45cd00 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/bucket_texture.md @@ -0,0 +1 @@ +이 선택적 속성은 인벤토리에 자동 생성되는 양동이 텍스처를 변경합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/can_multiply.md b/plugins/mcreator-localization/help/ko_KR/fluid/can_multiply.md new file mode 100644 index 00000000000..466c5017fc4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/can_multiply.md @@ -0,0 +1 @@ +이 옵션이 활성화되면, 유체 원천은 물과 유사하게 더 많은 원천을 생성할 수 있습니다. 이를 통해 무한한 원천을 생성할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/density.md b/plugins/mcreator-localization/help/ko_KR/fluid/density.md new file mode 100644 index 00000000000..5f40100ed0a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/density.md @@ -0,0 +1 @@ +kg/m3 단위로 밀도 값을 설정합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/drip_particle.md b/plugins/mcreator-localization/help/ko_KR/fluid/drip_particle.md new file mode 100644 index 00000000000..99b8664205e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/drip_particle.md @@ -0,0 +1 @@ +이 매개 변수는 유체가 블록에서 떨어질 때 생성되는 입자를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/empty_sound.md b/plugins/mcreator-localization/help/ko_KR/fluid/empty_sound.md new file mode 100644 index 00000000000..8349f397ecd --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/empty_sound.md @@ -0,0 +1 @@ +이 매개 변수는 양동이가 비워졌을 때 재생할 사운드를 제어합니다. 사운드를 선택하지 않으면 기본 양동이 사운드가 재생됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/enable_bucket.md b/plugins/mcreator-localization/help/ko_KR/fluid/enable_bucket.md new file mode 100644 index 00000000000..f359bfdc5f7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/enable_bucket.md @@ -0,0 +1 @@ +이 매개 변수는 이 유체를 양동이에 넣을 수 있는지 여부를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/flow_condition.md b/plugins/mcreator-localization/help/ko_KR/fluid/flow_condition.md new file mode 100644 index 00000000000..a8d6f71de3d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/flow_condition.md @@ -0,0 +1,3 @@ +이 조건은 유체가 특정 위치에서 퍼질 수 있는지 여부를 결정합니다. + +이는 다른 속성(인근 경사면, 고체 블럭 등)의 영향도 받는다는 점을 유념해주십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/flow_rate.md b/plugins/mcreator-localization/help/ko_KR/fluid/flow_rate.md new file mode 100644 index 00000000000..47de2308805 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/flow_rate.md @@ -0,0 +1,3 @@ +이 매개 변수는 유체가 다른 블록으로 퍼지는 데 걸리는 틱 수를 결정합니다. 이 값이 높을수록 유체의 이동 속도가 느려집니다. + +기본값은 물의 경우 5, 오버월드의 용암은 30, 네더의 용암은 10입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/flow_strength.md b/plugins/mcreator-localization/help/ko_KR/fluid/flow_strength.md new file mode 100644 index 00000000000..128bbdbcfd8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/flow_strength.md @@ -0,0 +1 @@ +이 매개 변수는 유체가 흐를 때 개체를 밀어내는 정도를 결정합니다. 음수값을 사용하면 개체를 밀어내는 대신 끌어당깁니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/level_decrease.md b/plugins/mcreator-localization/help/ko_KR/fluid/level_decrease.md new file mode 100644 index 00000000000..ed5a90b73f9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/level_decrease.md @@ -0,0 +1,3 @@ +이 매개 변수는 유체가 확산되는 모든 블록에 대해 유체량이 감소되는 정도를 정의합니다. 값이 높을수록 유체가 더 작은 영역만 덮게 됩니다. + +이 값은 네더의 물과 용암의 경우 1이고, 오버월드의 용암의 경우 2입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/luminosity.md b/plugins/mcreator-localization/help/ko_KR/fluid/luminosity.md new file mode 100644 index 00000000000..d8701f6a0e4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/luminosity.md @@ -0,0 +1 @@ +유체의 밝기 값을 결정합니다. 값을 0으로 설정하면 조명이 비활성화됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/slope_find_distance.md b/plugins/mcreator-localization/help/ko_KR/fluid/slope_find_distance.md new file mode 100644 index 00000000000..dbabfa5bb1a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/slope_find_distance.md @@ -0,0 +1 @@ +이 매개 변수는 경사면이 이 유체의 확산에 영향을 미칠 수 있는 거리를 결정합니다. 유체는 더욱 고르게 퍼지는 대신, 경사면 끝에 도달하려고 합니다. 일반적으로 값이 낮을수록 지면이 고르지 않은 경우 유체가 더 넓은 영역을 덮게 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/spawn_drip_particles.md b/plugins/mcreator-localization/help/ko_KR/fluid/spawn_drip_particles.md new file mode 100644 index 00000000000..9dcc53afda2 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/spawn_drip_particles.md @@ -0,0 +1 @@ +이 옵션이 활성화되면, 유체가 고체 블록 위에 있고 그 아래 공기가 있을 때 입자를 생성합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/temperature.md b/plugins/mcreator-localization/help/ko_KR/fluid/temperature.md new file mode 100644 index 00000000000..42909870bbc --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/temperature.md @@ -0,0 +1,3 @@ +이는 켈빈 단위로 측정된 유체 온도입니다. 값이 높을수록 유체가 더 뜨거워집니다. + +기본값은 대략 실온인 300K입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/tint_type.md b/plugins/mcreator-localization/help/ko_KR/fluid/tint_type.md new file mode 100644 index 00000000000..1fb46d28fcf --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/tint_type.md @@ -0,0 +1,3 @@ +이 옵션은 잔디, 나뭇잎, 물과 유사한 생물 군계 색상을 기반으로 유체에 색조를 적용합니다. 최상의 결과를 얻으려면, 유체에 회색조 계열의 텍스처를 사용해야 합니다. + +색조 유형은 양동이의 자동 생성 텍스처에도 영향을 미칩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/type.md b/plugins/mcreator-localization/help/ko_KR/fluid/type.md new file mode 100644 index 00000000000..7ee67fe11cb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/type.md @@ -0,0 +1 @@ +물과 용암 중에서 유체의 유형을 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluid/viscosity.md b/plugins/mcreator-localization/help/ko_KR/fluid/viscosity.md new file mode 100644 index 00000000000..cbc767a708c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluid/viscosity.md @@ -0,0 +1 @@ +점도는 유체 속에서 걷기가 얼마나 어려운지를 나타냅니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluidtank/enable_storage.md b/plugins/mcreator-localization/help/ko_KR/fluidtank/enable_storage.md new file mode 100644 index 00000000000..7c2845f76b3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluidtank/enable_storage.md @@ -0,0 +1,3 @@ +유체 저장을 활성화하려면 이 옵션을 체크하십시오. + +유체 탱크 시스템이 제대로 작동하려면 블록에 타일 개체가 활성화되어 있어야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluidtank/fluid_capacity.md b/plugins/mcreator-localization/help/ko_KR/fluidtank/fluid_capacity.md new file mode 100644 index 00000000000..c9123eb91fe --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluidtank/fluid_capacity.md @@ -0,0 +1 @@ +블록이 저장할 수 있는 최대 밀리버킷 (버킷 1개 =1000밀리버킷) 입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/fluidtank/fluid_restrictions.md b/plugins/mcreator-localization/help/ko_KR/fluidtank/fluid_restrictions.md new file mode 100644 index 00000000000..e322858f37d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/fluidtank/fluid_restrictions.md @@ -0,0 +1 @@ +블록을 특정 유체로만 제한하려면 이 옵션에서 유체를 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/function/namespace.md b/plugins/mcreator-localization/help/ko_KR/function/namespace.md new file mode 100644 index 00000000000..6d30bd9f288 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/function/namespace.md @@ -0,0 +1,3 @@ +* **Mod:** 모드에서만 사용됩니다. (`${modid}:${registryname}`과 같은 함수를 호출하십시오.) + +* **Minecraft:** 일부 Minecraft 옵션과 함께 사용됩니다. (`minecraft:${registryname}`과 같은 함수를 호출하십시오.) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/function/registry_name.md b/plugins/mcreator-localization/help/ko_KR/function/registry_name.md new file mode 100644 index 00000000000..0ff3ef8c007 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/function/registry_name.md @@ -0,0 +1,5 @@ +함수 이름은 한 단어로 작성하거나 밑줄을 사용하여 여러 단어로 작성할 수 있습니다. + +예시: +* advancement +* advancement_biome_reward \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gamerule/category.md b/plugins/mcreator-localization/help/ko_KR/gamerule/category.md new file mode 100644 index 00000000000..6fbda480398 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gamerule/category.md @@ -0,0 +1 @@ +게임 규칙 카테고리입니다. 무엇을 하는지에 따라 게임 규칙을 분류하는 데 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gamerule/default_value.md b/plugins/mcreator-localization/help/ko_KR/gamerule/default_value.md new file mode 100644 index 00000000000..8f65101e613 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gamerule/default_value.md @@ -0,0 +1 @@ +이는 게임 규칙의 기본값입니다. 게임 규칙은 게임 내 무언가(플레이어 또는 명령어)가 이를 변경할 때까지 이 값을 유지합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gamerule/description.md b/plugins/mcreator-localization/help/ko_KR/gamerule/description.md new file mode 100644 index 00000000000..a8437b3262a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gamerule/description.md @@ -0,0 +1 @@ +게임 규칙 설명입니다. 게임 규칙 설정 화면에서 커서를 올릴 시에 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gamerule/display_name.md b/plugins/mcreator-localization/help/ko_KR/gamerule/display_name.md new file mode 100644 index 00000000000..e8c7f2a4597 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gamerule/display_name.md @@ -0,0 +1 @@ +게임 규칙 표시 이름입니다. 게임 규칙 설정 화면에서 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gamerule/name.md b/plugins/mcreator-localization/help/ko_KR/gamerule/name.md new file mode 100644 index 00000000000..3919f5cba7b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gamerule/name.md @@ -0,0 +1 @@ +게임 내에서 게임 규칙을 수정/활성화하는 명령에 표시되는 게임 규칙 이름입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gamerule/type.md b/plugins/mcreator-localization/help/ko_KR/gamerule/type.md new file mode 100644 index 00000000000..4f4aedabbe4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gamerule/type.md @@ -0,0 +1,3 @@ +이것은 게임 규칙 유형입니다. 당신의 계획에 따라 가장 적합한 유형을 선택해야 합니다. +* 숫자는 게임 규칙이 숫자(정수)로만 수정될 수 있음을 의미합니다. +* 논리는 게임 규칙이 부울(참 또는 거짓)만 될 수 있음을 의미합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/button_display_condition.md b/plugins/mcreator-localization/help/ko_KR/gui/button_display_condition.md new file mode 100644 index 00000000000..b93a638cb2c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/button_display_condition.md @@ -0,0 +1 @@ +이 조건이 지정되면, 조건이 충족된 경우에만 버튼이 표시됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/checkbox_procedure_value.md b/plugins/mcreator-localization/help/ko_KR/gui/checkbox_procedure_value.md new file mode 100644 index 00000000000..3def9b1fc7b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/checkbox_procedure_value.md @@ -0,0 +1 @@ +이 절차에서는 GUI가 열릴 때 이 박스를 체크할지에 관한 여부를 결정합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/entity_model.md b/plugins/mcreator-localization/help/ko_KR/gui/entity_model.md new file mode 100644 index 00000000000..92acf0871b6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/entity_model.md @@ -0,0 +1 @@ +선택한 절차의 반환 값을 사용하여 표시할 모델을 결정합니다. 반환 값은 개체여야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/entity_model_display_condition.md b/plugins/mcreator-localization/help/ko_KR/gui/entity_model_display_condition.md new file mode 100644 index 00000000000..ca943999b05 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/entity_model_display_condition.md @@ -0,0 +1 @@ +조건이 지정되면, 이 개체 모델은 조건이 충족된 경우에만 표시 가능합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/entity_model_follow_mouse.md b/plugins/mcreator-localization/help/ko_KR/gui/entity_model_follow_mouse.md new file mode 100644 index 00000000000..9b106b1a940 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/entity_model_follow_mouse.md @@ -0,0 +1,3 @@ +이 옵션을 체크하면, 표시된 개체 모델이 커서의 위치를 향해 회전합니다. + +기존 고정 회전 값에 마우스 회전이 추가됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/entity_model_rotation.md b/plugins/mcreator-localization/help/ko_KR/gui/entity_model_rotation.md new file mode 100644 index 00000000000..c20cad74b49 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/entity_model_rotation.md @@ -0,0 +1,5 @@ +개체 yaw(수평)회전 매개 변수는 렌더링된 개체 모델의 초기 회전을 각도 단위로 정의합니다. + +이 매개 변수는 Minecraft 1.19 이상에서만 작동합니다. + +값이 클수록 렌더링 엔진 제한으로 인해 일부 렌더링 문제가 발생할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/entity_model_scale.md b/plugins/mcreator-localization/help/ko_KR/gui/entity_model_scale.md new file mode 100644 index 00000000000..bbd78461773 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/entity_model_scale.md @@ -0,0 +1 @@ +표시된 개체 모델의 크기를 결정합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/gui_closed.md b/plugins/mcreator-localization/help/ko_KR/gui/gui_closed.md new file mode 100644 index 00000000000..7ef41cc35eb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/gui_closed.md @@ -0,0 +1 @@ +이 GUI가 닫힐 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/gui_open_tick.md b/plugins/mcreator-localization/help/ko_KR/gui/gui_open_tick.md new file mode 100644 index 00000000000..1a7208f9288 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/gui_open_tick.md @@ -0,0 +1 @@ +이 GUI가 열려 있는 동안 매 틱마다 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/gui_opened.md b/plugins/mcreator-localization/help/ko_KR/gui/gui_opened.md new file mode 100644 index 00000000000..89eb4c47e74 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/gui_opened.md @@ -0,0 +1 @@ +이 GUI가 열릴 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/image_display_condition.md b/plugins/mcreator-localization/help/ko_KR/gui/image_display_condition.md new file mode 100644 index 00000000000..e8caea7e4d8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/image_display_condition.md @@ -0,0 +1 @@ +조건이 지정되면, 해당 조건이 충족된 경우에만 이 이미지가 표시될 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/label_display_condition.md b/plugins/mcreator-localization/help/ko_KR/gui/label_display_condition.md new file mode 100644 index 00000000000..4b78cfc0c5e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/label_display_condition.md @@ -0,0 +1 @@ +조건이 지정되면, 해당 조건이 충족된 경우에만 이 라벨이 표시될 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/label_text.md b/plugins/mcreator-localization/help/ko_KR/gui/label_text.md new file mode 100644 index 00000000000..0d619418513 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/label_text.md @@ -0,0 +1 @@ +이 매개 변수는 GUI가 열릴 때 라벨에 표시되는 텍스트를 정의합니다. 더 복잡한 텍스트에는 문자열 반환 유형 절차를 사용할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/on_button_clicked.md b/plugins/mcreator-localization/help/ko_KR/gui/on_button_clicked.md new file mode 100644 index 00000000000..3fbc1a46491 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/on_button_clicked.md @@ -0,0 +1 @@ +이 버튼을 클릭할 때 절차가 트리거됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/slot_pickup_condition.md b/plugins/mcreator-localization/help/ko_KR/gui/slot_pickup_condition.md new file mode 100644 index 00000000000..dd1dae2ff37 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/slot_pickup_condition.md @@ -0,0 +1 @@ +조건이 true로 반환되면, 플레이어는 이 슬롯에 있는 아이템을 가져갈 수 없습니다. 하지만 아무런 제한 없이 슬롯에 아이템을 넣을 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/slot_placement_condition.md b/plugins/mcreator-localization/help/ko_KR/gui/slot_placement_condition.md new file mode 100644 index 00000000000..6f93a59a97d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/slot_placement_condition.md @@ -0,0 +1,3 @@ +조건이 true로 반환되면, 플레이어는 이 슬롯에 아이템을 넣을 수 없습니다. 하지만 아무런 제한 없이 이 슬롯에 있는 아이템을 가져갈 수 있습니다. + +참고: 이 조건은 "스택 입력 제한" 매개 변수를 재정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/tooltip_display_condition.md b/plugins/mcreator-localization/help/ko_KR/gui/tooltip_display_condition.md new file mode 100644 index 00000000000..b19fecebca8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/tooltip_display_condition.md @@ -0,0 +1 @@ +조건이 지정되면, 해당 조건이 충족된 경우에만 이 툴팁이 표시될 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/tooltip_text.md b/plugins/mcreator-localization/help/ko_KR/gui/tooltip_text.md new file mode 100644 index 00000000000..127f2987782 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/tooltip_text.md @@ -0,0 +1 @@ +이 구성 요소가 포함된 영역을 가리킬 때 플레이어의 툴팁에 표시될 텍스트입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/when_slot_changed.md b/plugins/mcreator-localization/help/ko_KR/gui/when_slot_changed.md new file mode 100644 index 00000000000..818c9abe906 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/when_slot_changed.md @@ -0,0 +1 @@ +이 슬롯에 아이템을 넣거나 가져올 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/when_slot_item_taken.md b/plugins/mcreator-localization/help/ko_KR/gui/when_slot_item_taken.md new file mode 100644 index 00000000000..818c9abe906 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/when_slot_item_taken.md @@ -0,0 +1 @@ +이 슬롯에 아이템을 넣거나 가져올 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/gui/when_transferred_from_slot.md b/plugins/mcreator-localization/help/ko_KR/gui/when_transferred_from_slot.md new file mode 100644 index 00000000000..7d6958674df --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/gui/when_transferred_from_slot.md @@ -0,0 +1 @@ +이 슬롯의 아이템이 여기에서부터 이동될 때 절차를 트리거합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/always_edible.md b/plugins/mcreator-localization/help/ko_KR/item/always_edible.md new file mode 100644 index 00000000000..2c60056af54 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/always_edible.md @@ -0,0 +1 @@ +이 매개 변수를 활성화하면 플레이어는 배고픔 바가 가득 차 있어도 음식을 먹을 수 있습니다. (예: 황금 사과) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/animation.md b/plugins/mcreator-localization/help/ko_KR/item/animation.md new file mode 100644 index 00000000000..e5a3109b38f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/animation.md @@ -0,0 +1 @@ +애니메이션은 플레이어가 아이템으로 작업을 수행할 때 사용되는 애니메이션입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/bind_gui.md b/plugins/mcreator-localization/help/ko_KR/item/bind_gui.md new file mode 100644 index 00000000000..3e9da243a3d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/bind_gui.md @@ -0,0 +1,5 @@ +이 아이템에 대한 인벤토리 및 GUI 바인딩을 활성화하려면 여기에서 GUI를 선택하십시오. + +인벤토리를 비활성화하려면 비어있음으로 설정하십시오 (대부분의 경우 이렇게 사용함). + +인벤토리를 활성화하면 이 아이템은 쌓을 수 없게 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/can_destroy_any_block.md b/plugins/mcreator-localization/help/ko_KR/item/can_destroy_any_block.md new file mode 100644 index 00000000000..7ade463d999 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/can_destroy_any_block.md @@ -0,0 +1 @@ +이 아이템이나 도구를 사용하여 기반암까지 포함하여 모든 블록을 파괴하려면 이 매개 변수를 체크하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/container_item.md b/plugins/mcreator-localization/help/ko_KR/item/container_item.md new file mode 100644 index 00000000000..7f091f6fa9c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/container_item.md @@ -0,0 +1 @@ +이 매개 변수는 아이템을 제작할 때 제작 그리드에 유지할지 여부를 제어합니다. 즉 해당 아이템은 레시피의 일부가 되지만 소비되지는 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/container_item_damage.md b/plugins/mcreator-localization/help/ko_KR/item/container_item_damage.md new file mode 100644 index 00000000000..c6cb8dae392 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/container_item_damage.md @@ -0,0 +1 @@ +"${l10n.t("elementgui.item.container_item")}"을 활성화한 경우, 이 옵션을 활성화하면 단순히 제작 그리드에 아이템을 보관하는 대신 아이템을 손상시킬 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/custom_property_name.md b/plugins/mcreator-localization/help/ko_KR/item/custom_property_name.md new file mode 100644 index 00000000000..ce94a4ec3de --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/custom_property_name.md @@ -0,0 +1,3 @@ +이 매개 변수는 이 속성의 이름을 제어합니다. 중복된 이름은 허용되지 않습니다. + +바닐라 Minecraft를 대신하여 모든 아이템에 대해 일부 속성이 정의되어 있으므로 그러한 일부 속성의 이름은 사용할 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/custom_property_value.md b/plugins/mcreator-localization/help/ko_KR/item/custom_property_value.md new file mode 100644 index 00000000000..ba8f74721fc --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/custom_property_value.md @@ -0,0 +1,3 @@ +이 사용자 정의 아이템 속성의 값을 결정하는 절차를 지정합니다. + +개체가 이 아이템을 보유하고 있는 경우, 제공된 좌표/월드는 해당 개체의 위치를 설명합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/custom_states.md b/plugins/mcreator-localization/help/ko_KR/item/custom_states.md new file mode 100644 index 00000000000..5882e475be4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/custom_states.md @@ -0,0 +1,5 @@ +여기에서 이 아이템의 추가 속성을 나열하고 현 상태에서의 속성 값의 조합에 따라 질감/모델이 어떻게 변경되는지 지정할 수 있습니다. 아이템 속성은 임의의 숫자(정수 또는 분수)를 값으로 사용할 수 있어서 세부적인 규칙을 따를 필요가 없고 가까운 값 제공을 허용하기 위해 아이템에서 추출된 실제(여기 지정된) 속성 값이 다음과 _같거나 큰 경우_ 상태는 일치됩니다. 만약 값이 일치하는 상태가 여러 개 있는 경우, 일치하는 상태 중 마지막 상태가 사용됩니다. 일치하는 상태가 없으면 아이템은 기본 시각적 모양을 사용합니다. + +기본 Minecraft를 대신하여 일부 정의된 내장 아이템 속성을 사용자 정의 아이템 속성과 함께 사용할 수도 있습니다. + +참고: 중복된 상태는 허용되지 않습니다. 한 속성에서 두 개 이상의 상태가 값만 다른 경우, 해당 속성을 제거하면 첫 번째 상태의 중복이 자동으로 제거됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/damage_vs_entity.md b/plugins/mcreator-localization/help/ko_KR/item/damage_vs_entity.md new file mode 100644 index 00000000000..c0c8d3c6253 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/damage_vs_entity.md @@ -0,0 +1 @@ +이 매개 변수를 사용하여 아이템에 대한 근접 피해를 활성화하고, 피해 값을 설정할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/destroy_speed.md b/plugins/mcreator-localization/help/ko_KR/item/destroy_speed.md new file mode 100644 index 00000000000..0bd5832d50b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/destroy_speed.md @@ -0,0 +1,6 @@ +파괴 속도 매개 변수는 이 아이템이 블록을 파괴하는 속도를 제어합니다. + +일반적인 값: +* **1** - 일반 아이템 +* **1.5** 검 +* **2>** 수확 도구 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/enable_ranged_item.md b/plugins/mcreator-localization/help/ko_KR/item/enable_ranged_item.md new file mode 100644 index 00000000000..46b97f6ecaf --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/enable_ranged_item.md @@ -0,0 +1 @@ +이 매개 변수를 활성화하면 해당 아이템은 활이나 쇠뇌와 같은 발사체를 발사할 수 있는 원거리 아이템이 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/enchantability.md b/plugins/mcreator-localization/help/ko_KR/item/enchantability.md new file mode 100644 index 00000000000..c6145436f74 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/enchantability.md @@ -0,0 +1,11 @@ +이 아이템/도구에 얼마나 쉽게 희귀 마법을 부여할 수 있는지입니다. 마법 부여 능력이 높을수록 아이템/도구에 마법을 부여할 때 얻을 수 있는 마법이 더 좋아집니다. + +바닐라 값: + +* 나무 도구: 15 +* 돌 도구: 5 +* 철 도구: 14 +* 금 도구: 22 +* 다이아몬드 도구: 10 +* 네더라이트 도구: 15 +* 책: 1 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/glowing_effect.md b/plugins/mcreator-localization/help/ko_KR/item/glowing_effect.md new file mode 100644 index 00000000000..47d75c9da75 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/glowing_effect.md @@ -0,0 +1 @@ +발광 효과는 아이템을 황금 사과나 마법이 부여된 아이템처럼 빛나게 만듭니다. 단, 발광 효과는 영구적입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/hand_tick.md b/plugins/mcreator-localization/help/ko_KR/item/hand_tick.md new file mode 100644 index 00000000000..31cb796601c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/hand_tick.md @@ -0,0 +1 @@ +이 절차는 플레이어가 아이템을 손에 쥐고 있을 때 매 틱마다 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/immune_to_fire.md b/plugins/mcreator-localization/help/ko_KR/item/immune_to_fire.md new file mode 100644 index 00000000000..854e0e19c4f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/immune_to_fire.md @@ -0,0 +1 @@ +이 매개 변수는 아이템이 네더라이트 기구들과 같이 화재에 면역인지 여부를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/inventory_size.md b/plugins/mcreator-localization/help/ko_KR/item/inventory_size.md new file mode 100644 index 00000000000..d705b0ed116 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/inventory_size.md @@ -0,0 +1,3 @@ +GUI/인벤토리의 슬롯 수를 선택하십시오. 가장 큰 슬롯 ID에 1을 더하는 것을 잊지 마십시오. + +블록에 GUI가 할당 된 경우 이 값을 `GUI에서 가장 큰 슬롯 ID + 1`로 설정하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/inventory_stack_size.md b/plugins/mcreator-localization/help/ko_KR/item/inventory_stack_size.md new file mode 100644 index 00000000000..874b921e443 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/inventory_stack_size.md @@ -0,0 +1,3 @@ +이 매개 변수는 내부 인벤토리 슬롯에 배치할 수 있는 스택의 최대 수를 제어합니다. + +이 매개 변수와 최대 아이탬 스택 크기 중에 제일 작은 수가 실제 최대 스택 수로 결정된다는 점을 유념해주시기 바랍니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/inventory_tick.md b/plugins/mcreator-localization/help/ko_KR/item/inventory_tick.md new file mode 100644 index 00000000000..0d73137a629 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/inventory_tick.md @@ -0,0 +1 @@ +이 절차는 아이템이 플레이어의 인벤토리 안에 있을 때 매 틱마다 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/is_food.md b/plugins/mcreator-localization/help/ko_KR/item/is_food.md new file mode 100644 index 00000000000..48354134a6b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/is_food.md @@ -0,0 +1 @@ +이 아이템을 먹을 수 있게 만들려면 박스를 체크하십시오 (음식 특성을 갖도록 활성화). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/is_meat.md b/plugins/mcreator-localization/help/ko_KR/item/is_meat.md new file mode 100644 index 00000000000..76640fbafc3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/is_meat.md @@ -0,0 +1 @@ +이 매개 변수는 이 음식이 개와 육식 동물을 위한 음식인지 여부를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/model.md b/plugins/mcreator-localization/help/ko_KR/item/model.md new file mode 100644 index 00000000000..1781b913c87 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/model.md @@ -0,0 +1,7 @@ +이 아이템과 함께 사용할 모델을 선택하십시오. 모델은 시각적인 모양만 정의합니다. + +* **일반** - 일반 아이템 +* 도구 - 도구에서 사용되는 모델 +* 사용자 정의 - 사용자 정의 JSON 및 OBJ 모델도 정의할 수 있습니다. + +사용자 정의 모델을 만들 때 이 모델 유형에 대한 기본 지원으로 인해, JSON이 권장됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/number_of_uses.md b/plugins/mcreator-localization/help/ko_KR/item/number_of_uses.md new file mode 100644 index 00000000000..4093b62c886 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/number_of_uses.md @@ -0,0 +1,21 @@ +이 매개 변수는 아이템의 내구성(아이템을 몇 번 사용할 수 있는지)을 제어합니다. + +해당 아이템에 대한 사용 횟수 메커니즘을 비활성화하려면 이 값을 0으로 설정하십시오. + +참고용 바닐라 값: + +* 금: 32회 사용 +* 나무: 59회 사용 +* 돌: 131회 사용 +* 철: 250회 사용 +* 다이아몬드: 1561회 사용 +* 네더라이트: 2031회 사용 +* 낚싯대: 64회 사용 +* 부싯돌: 64회 사용 +* 당근 낚싯대: 25회 사용 +* 가위: 238회 사용 +* 삼지창: 250회 사용 +* 쇠뇌: 326회 사용 +* 방패: 336회 사용 +* 활: 384회 사용 +* 겉날개: 432회 사용 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/nutritional_value.md b/plugins/mcreator-localization/help/ko_KR/item/nutritional_value.md new file mode 100644 index 00000000000..1b377ab27ea --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/nutritional_value.md @@ -0,0 +1,3 @@ +영양가는 이 음식이 플레이어에게 얼마나 많은 포만감을 공급하는지를 나타냅니다. + +1은 배고픔 바의 2/1입니다. 20은 배고픔 바의 전체입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/on_crafted.md b/plugins/mcreator-localization/help/ko_KR/item/on_crafted.md new file mode 100644 index 00000000000..45ef47d7838 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/on_crafted.md @@ -0,0 +1 @@ +이 절차는 이 아이템을 제작하거나 제련할 때 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/on_dropped.md b/plugins/mcreator-localization/help/ko_KR/item/on_dropped.md new file mode 100644 index 00000000000..2358e08be90 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/on_dropped.md @@ -0,0 +1 @@ +이 절차는 이 아이템을 드롭할 때 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/projectile.md b/plugins/mcreator-localization/help/ko_KR/item/projectile.md new file mode 100644 index 00000000000..84127abc45b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/projectile.md @@ -0,0 +1,3 @@ +이 원거리 아이템이 발사할 수 있는 발사체 유형입니다. + +사용자 지정 발사체를 만들어 사용하거나 바닐라 발사체를 사용할 수 있습니다. 바닐라 발사체를 선택하면 해당 값이 여기에 지정된 값보다 더 높은 우선순위를 갖습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/ranged_use_condition.md b/plugins/mcreator-localization/help/ko_KR/item/ranged_use_condition.md new file mode 100644 index 00000000000..aeb74f8be7b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/ranged_use_condition.md @@ -0,0 +1,3 @@ +이 절차는 원거리 아이템이 발사되기 전에 호출되어, 선택한 절차의 반환값이 true인지 확인합니다. + +추가 조건을 비활성화하려면 "${l10n.t("condition.common.true")}"를 유지하십시오. 이 경우에도 총알 확인이 적용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/rarity.md b/plugins/mcreator-localization/help/ko_KR/item/rarity.md new file mode 100644 index 00000000000..cccfc72f316 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/rarity.md @@ -0,0 +1,5 @@ +희귀도는 아이템 이름의 색상에만 영향을 미칩니다. +* 일반: 흰색 +* 흔하지 않음: 노란색 +* 레어: 아쿠아 +* 에픽: 연보라색 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/recipe_remainder.md b/plugins/mcreator-localization/help/ko_KR/item/recipe_remainder.md new file mode 100644 index 00000000000..6df5586d131 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/recipe_remainder.md @@ -0,0 +1 @@ +이 매개 변수는 제작대에서 사용될 때 대체될 아이템을 제어합니다. 이는 해당 아이템이 레시피의 일부가 되지만 다른 아이템으로 대체된다는 의미입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/result_item.md b/plugins/mcreator-localization/help/ko_KR/item/result_item.md new file mode 100644 index 00000000000..88b4b936448 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/result_item.md @@ -0,0 +1 @@ +이 매개 변수는 이 음식을 먹은 개체의 인벤토리에 어떤 아이템을 추가할 지 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/saturation.md b/plugins/mcreator-localization/help/ko_KR/item/saturation.md new file mode 100644 index 00000000000..e2663954ecf --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/saturation.md @@ -0,0 +1 @@ +포화는 플레이어가 에너지와 관련된 행동을 할 때 가장 먼저 고갈되며, 배고픔 바가 감소하기 전에 완전히 고갈되어야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/shoot_constantly.md b/plugins/mcreator-localization/help/ko_KR/item/shoot_constantly.md new file mode 100644 index 00000000000..295d144b568 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/shoot_constantly.md @@ -0,0 +1 @@ +이 옵션이 체크되면, 플레이어가 마우스 오른쪽 버튼을 클릭할 때 원거리 아이템이 지속적으로 발사됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/special_information.md b/plugins/mcreator-localization/help/ko_KR/item/special_information.md new file mode 100644 index 00000000000..e143147f194 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/special_information.md @@ -0,0 +1,3 @@ +이 매개 변수는 인벤토리의 아이템 아이콘 위에 커서를 두면 아이템에 툴팁을 추가합니다. + +만일 절차 생성형 툴팁을 사용하며, 떨어진 아이템이거나 개체에 의해 유지되지 않는 경우, `객체` 종속성은 null이 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/stack_size.md b/plugins/mcreator-localization/help/ko_KR/item/stack_size.md new file mode 100644 index 00000000000..5dd1ce7a6ee --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/stack_size.md @@ -0,0 +1,3 @@ +이는 스택시킬 수 있는 이 아이템의 최대 스택값입니다. + +바닐라 예: 엔더 진주의 스택 크기는 16입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/use_duration.md b/plugins/mcreator-localization/help/ko_KR/item/use_duration.md new file mode 100644 index 00000000000..4d8a4d083ac --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/use_duration.md @@ -0,0 +1,3 @@ +이 매개 변수는 이 아이템을 한 번 사용할 수 있는 시간을 제어합니다. + +아이템이 음식인 경우, 이 값은 플레이어가 음식 아이템 하나를 먹는데 걸리는 시간을 틱 단위로 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/when_entity_hit.md b/plugins/mcreator-localization/help/ko_KR/item/when_entity_hit.md new file mode 100644 index 00000000000..97a1632b9ea --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/when_entity_hit.md @@ -0,0 +1 @@ +이 아이템을 사용하여 생명 개체(소, 크리퍼, 플레이어 등)를 공격하면 이 절차가 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/when_entity_swings.md b/plugins/mcreator-localization/help/ko_KR/item/when_entity_swings.md new file mode 100644 index 00000000000..fe256c00358 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/when_entity_swings.md @@ -0,0 +1,3 @@ +개체가 공중에서 아이템을 휘두를 때 절차를 트리거합니다. + +예를 들어, 공중에서 아이템을 마우스 오른쪽 버튼으로 클릭하면 해당 절차가 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/when_right_clicked.md b/plugins/mcreator-localization/help/ko_KR/item/when_right_clicked.md new file mode 100644 index 00000000000..5657044587e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/when_right_clicked.md @@ -0,0 +1,3 @@ +플레이어가 이 아이템을 들고 마우스 오른쪽 버튼을 클릭하면 절차가 실행됩니다. + +객체가 이 항목을 가지고 공중에서 마우스 오른쪽 버튼을 클릭할 때만 이 절차를 호출하려면 "${l10n.t("elementgui.common.event_right_clicked_block")}" 절차가 항상 SUCCESS/CONSUME을 반환해야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/when_right_clicked_block.md b/plugins/mcreator-localization/help/ko_KR/item/when_right_clicked_block.md new file mode 100644 index 00000000000..e15e60aebe3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/when_right_clicked_block.md @@ -0,0 +1,7 @@ +플레이어가 이 아이템을 손에 들고 블록을 마우스 오른쪽 버튼으로 클릭하면 절차가 실행됩니다. + +절차는 아이템이 블록과 상호 작용한 경우 SUCCESS/CONSUME 유형의 작업 결과를 반환하고, 상호 작용이 실패한 경우 FAIL, 상호 작용이 없는 경우 PASS를 반환해야 합니다. + +절차가 값을 반환하지 않으면 결과 작업 유형은 PASS가 됩니다. + +객체가 이 아이템을 들고 공중에서 마우스 오른쪽 클릭할 때만 "${l10n.t("elementgui.common.event_right_clicked_air")}" 절차를 호출하려면 이 절차가 항상 SUCCESS/CONSUME을 반환해야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/when_stopped_using.md b/plugins/mcreator-localization/help/ko_KR/item/when_stopped_using.md new file mode 100644 index 00000000000..68b7d5bcf7c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/when_stopped_using.md @@ -0,0 +1,3 @@ +이 절차는 플레이어가 이 아이템을 사용 중지(오른쪽 클릭 해제) 할 때 호출됩니다. + +이 트리거는 아이템의 사용 기간이 0보다 큰 경우에만 작동합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item/when_used.md b/plugins/mcreator-localization/help/ko_KR/item/when_used.md new file mode 100644 index 00000000000..39f386ba545 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item/when_used.md @@ -0,0 +1 @@ +원거리 아이템을 사용하면, 선택한 절차가 발동됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item_extension/burn_time.md b/plugins/mcreator-localization/help/ko_KR/item_extension/burn_time.md new file mode 100644 index 00000000000..34b53c1bab8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item_extension/burn_time.md @@ -0,0 +1,10 @@ +연소 시간은 해당 연료가 지속되는 틱 수를 나타냅니다. + +석탄이 완전히 연소하는 데는 80초가 걸리므로 이는 1600틱이 됩니다. (기본 설정) 8개의 아이템을 제련할 수 있는 양입니다. 이는 20틱이 1초의 연소 시간임을 의미합니다. + +사용할 틱 수를 측정하려면 다음 방정식을 사용하십시오: + +`#필요한 틱 = 연료로 제련할 아이템 수 * 200` + +Minecraft에서 제련에 일반적으로 사용되는 아이템의 연소 시간 목록을 보려면 [여기](https://mcreator.net/wiki/burn-time-fuels)를 클릭하십시오. + diff --git a/plugins/mcreator-localization/help/ko_KR/item_extension/dispense_result_itemstack.md b/plugins/mcreator-localization/help/ko_KR/item_extension/dispense_result_itemstack.md new file mode 100644 index 00000000000..2524fca0f0a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item_extension/dispense_result_itemstack.md @@ -0,0 +1,3 @@ +이 절차는 발사기에서 발사를 시도한 후 아이템에 어떤 일이 발생하는지 결정합니다. 아무것도 선택하지 않거나 선택한 절차에서 아이템 스택을 반환하지 않는 경우 발사에 성공하면 발사에 사용되는 현재 아이템 스택의 크기가 1씩 줄어듭니다. + +이 절차를 사용하여 아이템을 소비하거나, 손상시키거나, 다른 아이템으로 교체할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item_extension/dispense_success_condition.md b/plugins/mcreator-localization/help/ko_KR/item_extension/dispense_success_condition.md new file mode 100644 index 00000000000..e1d4825d1f5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item_extension/dispense_success_condition.md @@ -0,0 +1,3 @@ +이 조건은 발사기에서 발사가 완료되었는지 여부를 결정합니다. 조건이 실패하면 발사기는 실패 효과를 재생합니다. + +이 절차의 값은 "성공" 종속성으로 "${l10n.t("elementgui.item_extension.dispense_result_itemstack")}"에 전달됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item_extension/enable_fuel.md b/plugins/mcreator-localization/help/ko_KR/item_extension/enable_fuel.md new file mode 100644 index 00000000000..e21e3d39814 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item_extension/enable_fuel.md @@ -0,0 +1 @@ +이 박스를 체크하여 선택한 아이템을 화로용 연료(예: 석탄, 나무 판자 등)로 만들 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item_extension/fuel_success_condition.md b/plugins/mcreator-localization/help/ko_KR/item_extension/fuel_success_condition.md new file mode 100644 index 00000000000..9f836370190 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item_extension/fuel_success_condition.md @@ -0,0 +1 @@ +조건이 지정되면, 선택한 아이템은 조건에 맞는 경우에만 연료로 사용할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item_extension/has_dispense_behavior.md b/plugins/mcreator-localization/help/ko_KR/item_extension/has_dispense_behavior.md new file mode 100644 index 00000000000..5596fd2c866 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item_extension/has_dispense_behavior.md @@ -0,0 +1 @@ +이 옵션이 체크되면, 기본 동작으로 발사기에서 아이템을 발사하지 않지만 "${l10n.t("elementgui.item_extension.dispense_success_condition")}" 과 "${l10n.t("elementgui.item_extension.dispense_result_itemstack")}"절차를 대신 호출합니다. diff --git a/plugins/mcreator-localization/help/ko_KR/item_extension/item.md b/plugins/mcreator-localization/help/ko_KR/item_extension/item.md new file mode 100644 index 00000000000..88e16b80dab --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item_extension/item.md @@ -0,0 +1 @@ +이 확장의 대상 아이템입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/item_extension/layer_chance.md b/plugins/mcreator-localization/help/ko_KR/item_extension/layer_chance.md new file mode 100644 index 00000000000..4b40104eee4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/item_extension/layer_chance.md @@ -0,0 +1,3 @@ +이 숫자는 해당 항목이 퇴비통 블록에 레이어를 추가할 확률의 백분율입니다. 비활성화하려면 값을 0으로 유지하십시오. + +바닐라 값은 [여기](https://minecraft.wiki/w/Composter#Composting)에서 찾을 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/keybinding/category.md b/plugins/mcreator-localization/help/ko_KR/keybinding/category.md new file mode 100644 index 00000000000..7d0ff3113be --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/keybinding/category.md @@ -0,0 +1,5 @@ +키 바인딩 카테고리는 마인크래프트 설정의 컨트롤 섹션에 표시된 카테고리입니다. + +같은 카테고리에 속하는 모든 키 바인딩은 같은 카테고리 키를 가져야 합니다. + +실제로 카테고리 이름을 설정하려면 **${l10n.t("tab.workspace")}로 이동하세요. -> ${l10n.t("workspace.category.localization")}로 이동하세요. -> ${l10n.t("workspace.localization.add_entry")}**로 이동하고 항목 이름에 `key.category.${data.keyBindingCategoryKey}`를 사용합니다. 를 찾은 다음 원하는 카테고리 이름으로 값을 설정합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/keybinding/key.md b/plugins/mcreator-localization/help/ko_KR/keybinding/key.md new file mode 100644 index 00000000000..dd2c27ae989 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/keybinding/key.md @@ -0,0 +1,3 @@ +이 매개변수는 키 바인딩 절차를 실행하는 데 사용되는 키를 정의합니다. + +플레이어는 언제든지 컨트롤에서 변경할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/loottable/namespace.md b/plugins/mcreator-localization/help/ko_KR/loottable/namespace.md new file mode 100644 index 00000000000..6cb4f100b9d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/loottable/namespace.md @@ -0,0 +1 @@ +바닐라 전리품 테이블을 변경하려면 "minecraft", 모드 요소에 대한 새 전리품 테이블을 생성하려면 "mod"를 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/loottable/registry_name.md b/plugins/mcreator-localization/help/ko_KR/loottable/registry_name.md new file mode 100644 index 00000000000..f19ce14bf28 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/loottable/registry_name.md @@ -0,0 +1,3 @@ +드롭다운 리스트를 클릭하고 전리품 테이블의 "카테고리"를 선택하십시오. 전리품 테이블 유형을 정의하진 않습니다. + +이는 단지 전리품 테이블 이름을 표준화 하는 것 뿐입니다. 예를 들어 블록 전리품 테이블에는 block/registry_name을 사용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/loottable/type.md b/plugins/mcreator-localization/help/ko_KR/loottable/type.md new file mode 100644 index 00000000000..96548cc698a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/loottable/type.md @@ -0,0 +1 @@ +이 매개변수는 귀하가 만든 전리품 테이블의 유형을 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/musicdisc/analog_output.md b/plugins/mcreator-localization/help/ko_KR/musicdisc/analog_output.md new file mode 100644 index 00000000000..9c1045760e8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/musicdisc/analog_output.md @@ -0,0 +1 @@ +이 음반이 주크박스에 있을 때 비교기에서 출력되는 아날로그 레드스톤 값입니다. diff --git a/plugins/mcreator-localization/help/ko_KR/musicdisc/description.md b/plugins/mcreator-localization/help/ko_KR/musicdisc/description.md new file mode 100644 index 00000000000..708aaa9ff26 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/musicdisc/description.md @@ -0,0 +1 @@ +음반에 대한 설명을 작성합니다. 일반적인 작성 방식은 작곡가 - 음악 이름 입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/musicdisc/length.md b/plugins/mcreator-localization/help/ko_KR/musicdisc/length.md new file mode 100644 index 00000000000..97b77f2f5fc --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/musicdisc/length.md @@ -0,0 +1,3 @@ +음반의 길이(틱)입니다. 20틱은 1초입니다. + +이 매개변수는 재생 시작 이후 이 필드에 지정된 틱 수가 지나면 알레이가 춤을 중지하도록 신호를 보내는 데 사용됩니다. diff --git a/plugins/mcreator-localization/help/ko_KR/musicdisc/sound.md b/plugins/mcreator-localization/help/ko_KR/musicdisc/sound.md new file mode 100644 index 00000000000..ba85070c274 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/musicdisc/sound.md @@ -0,0 +1,5 @@ +주크박스 내에서 음반을 재생할 음악을 선택하십시오. + +거리가 멀어질수록 소리가 더 조용해지는 등 모든 주크박스 기능을 지원하려면 사운드가 모노 형식인지 확인하십시오. + +모드를 재배포하려면 사용하는 이 음악을 재배포할 수 있는 권한이 있는지 확인하십시오! \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/overlay/base_texture.md b/plugins/mcreator-localization/help/ko_KR/overlay/base_texture.md new file mode 100644 index 00000000000..298faadf577 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/overlay/base_texture.md @@ -0,0 +1,5 @@ +오버레이의 기본 텍스처입니다. 다른 구성요소들은 이 텍스처 위에 그려집니다. + +이 매개변수는 "호박"과 같은 오버레이를 만드는 데 사용할 수 있습니다. + +권장되는 오버레이 크기는 1920 x 1080이 적절합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/overlay/display_condition.md b/plugins/mcreator-localization/help/ko_KR/overlay/display_condition.md new file mode 100644 index 00000000000..1de5da2f088 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/overlay/display_condition.md @@ -0,0 +1,3 @@ +이 절차에서는 오버레이 표시 여부를 지정합니다. + +절차가 true를 반환하면 오버레이가 화면에 표시됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/overlay/overlay_target.md b/plugins/mcreator-localization/help/ko_KR/overlay/overlay_target.md new file mode 100644 index 00000000000..92b3cd8790d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/overlay/overlay_target.md @@ -0,0 +1,5 @@ +오버레이 대상은 이 오버레이를 그려야 하는 화면을 지정합니다. + +배고픔 바, 호박 모양 오버레이 등의 오버레이에는 Ingame을 사용하십시오. + +다른 타깃을 사용하여, 다른 특정 화면을 오버레이하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/overlay/rendering_priority.md b/plugins/mcreator-localization/help/ko_KR/overlay/rendering_priority.md new file mode 100644 index 00000000000..8f2465a2d0a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/overlay/rendering_priority.md @@ -0,0 +1 @@ +이 매개변수는 오버레이의 우선운위를 정의합니다. "높음"으로 정의된 오버레이는 이 매개변수가 "낮음"으로 정의된 오버레이 위에 렌더링됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/painting/author.md b/plugins/mcreator-localization/help/ko_KR/painting/author.md new file mode 100644 index 00000000000..e8275a654c0 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/painting/author.md @@ -0,0 +1,3 @@ +이 매개변수는 그림의 작가를 정의합니다. + +참고: 필수이지만, 1.19.4+ 이상에만 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/painting/height.md b/plugins/mcreator-localization/help/ko_KR/painting/height.md new file mode 100644 index 00000000000..f29de1b15f9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/painting/height.md @@ -0,0 +1 @@ +이 매개변수는 이 그림의 높이(블록 단위)를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/painting/texture.md b/plugins/mcreator-localization/help/ko_KR/painting/texture.md new file mode 100644 index 00000000000..0a75946e3b1 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/painting/texture.md @@ -0,0 +1,3 @@ +이 그림의 전경으로 사용할 텍스처를 선택하십시오. + +중요: 텍스처 이름이 요소의 레지스트리 이름과 다른 경우에는 텍스처 복사본이 만들어집니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/painting/title.md b/plugins/mcreator-localization/help/ko_KR/painting/title.md new file mode 100644 index 00000000000..22c7152cbaf --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/painting/title.md @@ -0,0 +1,3 @@ +이 매개변수는 그림의 제목을 정의합니다. + +참고: 필수이지만, 1.19.4+ 이상에만 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/painting/width.md b/plugins/mcreator-localization/help/ko_KR/painting/width.md new file mode 100644 index 00000000000..a3fbe6e22fe --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/painting/width.md @@ -0,0 +1 @@ +이 매개변수는 이 그림의 너비(블록 단위)를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/can_be_placed_on.md b/plugins/mcreator-localization/help/ko_KR/plant/can_be_placed_on.md new file mode 100644 index 00000000000..c76b05033b6 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/can_be_placed_on.md @@ -0,0 +1,3 @@ +식물을 설치할 수 있는 블록 목록입니다. + +참고: 식물 유형 배치 조건을 재정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/color_on_map.md b/plugins/mcreator-localization/help/ko_KR/plant/color_on_map.md new file mode 100644 index 00000000000..4f05c3bdbc7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/color_on_map.md @@ -0,0 +1,3 @@ +이 매개변수는 식물이 지도에 표시되는 색상을 제어합니다. + +기본값으로 설정된 경우 색상은 FOLIAGE(잎사귀)가 됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/custom_bounding_box.md b/plugins/mcreator-localization/help/ko_KR/plant/custom_bounding_box.md new file mode 100644 index 00000000000..ac40bcd6392 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/custom_bounding_box.md @@ -0,0 +1 @@ +이 식물의 경계 상자를 사용자 정의하려면 이 옵션을 선택하십시오. 이 기능이 활성화되지 않은 경우 경계 상자는 기존 식물 유형을 기반으로 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/force_ticking.md b/plugins/mcreator-localization/help/ko_KR/plant/force_ticking.md new file mode 100644 index 00000000000..991983634ed --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/force_ticking.md @@ -0,0 +1 @@ +일부 식물 유형은 자연적으로 틱이 발생하지만 다른 유형은 그렇지 않습니다. 모든 경우에 강제로 틱을 적용하려면 이 매개변수를 선택하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/gen_chunk_count.md b/plugins/mcreator-localization/help/ko_KR/plant/gen_chunk_count.md new file mode 100644 index 00000000000..a4474aba04b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/gen_chunk_count.md @@ -0,0 +1,7 @@ +이 매개변수는 청크 당 식물 무리가 생성되는 횟수를 제어합니다. + +식물은 개별적으로 생성되지 않고, 무리로 생성됩니다. + +예를 들어, 이 값을 1로 설정한다고 해서 각 청크에 식물이 하나만 있다는 의미는 아닙니다; 대신, 각 무리는 (최대) 하나의 식물 군집으로 이루어집니다. + +따라서 이 값을 낮은 양(4 이하)으로 설정하면 대부분의 목적에 충분합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/generate_at_any_height.md b/plugins/mcreator-localization/help/ko_KR/plant/generate_at_any_height.md new file mode 100644 index 00000000000..dd62738f1ec --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/generate_at_any_height.md @@ -0,0 +1,3 @@ +월드 표면이 아닌 어떠한 높이에서도 이 식물을 생성하려면 이 옵션을 선택하십시오. + +이 옵션은 네더에서 생성되는 식물에 대해 활성화되어야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/generation_type.md b/plugins/mcreator-localization/help/ko_KR/plant/generation_type.md new file mode 100644 index 00000000000..f74ed022628 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/generation_type.md @@ -0,0 +1,3 @@ +이 매개변수는 식물이 생성되는 빈도를 제어합니다. **잔디**로 설정하면 식물이 더 자주 생성됩니다. + +참고: 이는 단일 및 이중 식물에만 영향을 미칩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/has_tile_entity.md b/plugins/mcreator-localization/help/ko_KR/plant/has_tile_entity.md new file mode 100644 index 00000000000..b65c7d4228d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/has_tile_entity.md @@ -0,0 +1,5 @@ +식물을 타일 엔티티로 변경하려면 이 옵션을 체크하십시오. + +이 기능이 활성화되면 식물 내부에 데이터(예: NBT태그)를 저장할 수 있습니다. + +성능상의 이유로 실제로 필요한 경우가 아니면 이 옵션을 활성화하지 마십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/is_solid.md b/plugins/mcreator-localization/help/ko_KR/plant/is_solid.md new file mode 100644 index 00000000000..72e2d5e220c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/is_solid.md @@ -0,0 +1 @@ +이 옵션이 선택되면, 개체는 식물을 통과해 이동할 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/max_height.md b/plugins/mcreator-localization/help/ko_KR/plant/max_height.md new file mode 100644 index 00000000000..78e9595c41a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/max_height.md @@ -0,0 +1 @@ +성장 가능한 식물은 이 높이에 도달할 때까지 자랄 것입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/patch_size.md b/plugins/mcreator-localization/help/ko_KR/plant/patch_size.md new file mode 100644 index 00000000000..faa96ab956e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/patch_size.md @@ -0,0 +1 @@ +이 매개변수는 단일 무리에서 생성될 수 있는 최대 식물 수를 결정합니다. 값이 높을수록 단일 무리에 더 많은 식물이 생길 것입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/placing_condition.md b/plugins/mcreator-localization/help/ko_KR/plant/placing_condition.md new file mode 100644 index 00000000000..08565c6f287 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/placing_condition.md @@ -0,0 +1,3 @@ +블록 조건이 켜져 있음에도 불구하고, 식물 배치에 더 많은 조건을 추가하려면, 여기에 반환 값이 포함된 절차를 추가하십시오. + +참고: 식물 유형 배치 조건을 무시하고 이 추가 조건으로 "배치 가능" 블록 목록을 확장합니다. "설치할 수 있는 위치" 블록 목록이 비어 있는 경우, 이 절차가 주요 배치/성장 조건으로 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/suspicious_stew_duration.md b/plugins/mcreator-localization/help/ko_KR/plant/suspicious_stew_duration.md new file mode 100644 index 00000000000..418da60eec5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/suspicious_stew_duration.md @@ -0,0 +1 @@ +이 매개변수는 이 식물으로 만든 수상한 스튜의 효과 지속시간을 결정합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/suspicious_stew_effect.md b/plugins/mcreator-localization/help/ko_KR/plant/suspicious_stew_effect.md new file mode 100644 index 00000000000..827779880a3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/suspicious_stew_effect.md @@ -0,0 +1,3 @@ +이 매개변수는 이 식물로 만든 수상한 스튜의 물약 효과를 결정합니다. + +참고: 수상한 스튜를 만들려면 `Minecraft:small_flowers` 아이템 태그에 식물을 추가해야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/plant/type.md b/plugins/mcreator-localization/help/ko_KR/plant/type.md new file mode 100644 index 00000000000..62f5059626b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/plant/type.md @@ -0,0 +1,3 @@ +식물 유형은 플레이어가 식물을 배치할 수 있는 위치와 월드 생성중에 식물이 배치될 수 있는 위치를 결정합니다. 정적 식물은 항상 (거친) 흙, 회백토, 잔디 및 농지에만 있는 반면에 재배 가능한 식물은 항상 마음대로 위치될 수 있습니다. + +[여기](https://mcreator.net/wiki/plant-types-list)에서 전체 식물 유형 목록을 찾을 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/ambient.md b/plugins/mcreator-localization/help/ko_KR/potion/ambient.md new file mode 100644 index 00000000000..24aad605f46 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/ambient.md @@ -0,0 +1 @@ +이 매개변수는 이펙트가 앰비언트로 적용될지 여부를 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/amplifier.md b/plugins/mcreator-localization/help/ko_KR/potion/amplifier.md new file mode 100644 index 00000000000..0c6ca45d571 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/amplifier.md @@ -0,0 +1 @@ +이 매개변수는 본 효과의 강도를 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/arrow_name.md b/plugins/mcreator-localization/help/ko_KR/potion/arrow_name.md new file mode 100644 index 00000000000..6fd2b9c24eb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/arrow_name.md @@ -0,0 +1 @@ +이 매개변수는 물약이 묻은 화살의 이름을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/duration.md b/plugins/mcreator-localization/help/ko_KR/potion/duration.md new file mode 100644 index 00000000000..9cc391ae649 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/duration.md @@ -0,0 +1 @@ +이 매개변수는 본 효과의 지속시간을 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/effects.md b/plugins/mcreator-localization/help/ko_KR/potion/effects.md new file mode 100644 index 00000000000..f617a2128c9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/effects.md @@ -0,0 +1 @@ +아래 목록의 물약 효과들은 이 물약 아이템의 영향을 받는 개체에 적용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/lingering_name.md b/plugins/mcreator-localization/help/ko_KR/potion/lingering_name.md new file mode 100644 index 00000000000..76db2454cd2 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/lingering_name.md @@ -0,0 +1 @@ +이 매개변수는 잔류형 물약 병의 이름을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/potion_name.md b/plugins/mcreator-localization/help/ko_KR/potion/potion_name.md new file mode 100644 index 00000000000..dbea72f8432 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/potion_name.md @@ -0,0 +1 @@ +이 매개변수는 일반 물약 병의 이름을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/show_particles.md b/plugins/mcreator-localization/help/ko_KR/potion/show_particles.md new file mode 100644 index 00000000000..18ebd546c9c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/show_particles.md @@ -0,0 +1 @@ +이 매개변수는 플레이어 근처에 파티클을 표시할지 여부를 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potion/splash_name.md b/plugins/mcreator-localization/help/ko_KR/potion/splash_name.md new file mode 100644 index 00000000000..bf3f203b40c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potion/splash_name.md @@ -0,0 +1 @@ +이 매개변수는 투척용 물약 병의 이름을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/active_tick_condition.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/active_tick_condition.md new file mode 100644 index 00000000000..5382e53cdf5 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/active_tick_condition.md @@ -0,0 +1,3 @@ +이 조건은 레벨과 남은 시간에 따라 이펙트의 틱 절차를 활성화할지 여부를 결정합니다. + +이 조건을 사용하여 재생 또는 독처럼 작동하는 효과를 만들 수 있습니다. 이를 위한 절차 탬플릿도 사용 가능합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/bad.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/bad.md new file mode 100644 index 00000000000..cd0fd14ce0c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/bad.md @@ -0,0 +1,3 @@ +효과가 플레이어에게 좋지 않는 경우 이 매개변수를 체크하십시오. + +예시: 독 또는 즉시 피해 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/benefitical.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/benefitical.md new file mode 100644 index 00000000000..f34cf8b7bae --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/benefitical.md @@ -0,0 +1,3 @@ +효과가 플레이어에게 도움이 되는 경우 이 매개변수를 체크하십시오. + +예시: 재생 또는 즉시회복 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/color.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/color.md new file mode 100644 index 00000000000..1f2c62a7bcb --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/color.md @@ -0,0 +1,3 @@ +병과 화살의 색상을 선택하십시오. + +아이템을 원하지 않는 경우에는 이 옵션이 필요하지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/effect_display_name.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/effect_display_name.md new file mode 100644 index 00000000000..23fb961dd90 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/effect_display_name.md @@ -0,0 +1 @@ +이 매개변수는 효과의 이름 (플레이어의 인벤토리 내에 표시되는 이름)을 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/icon.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/icon.md new file mode 100644 index 00000000000..8fe69159bbf --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/icon.md @@ -0,0 +1,3 @@ +이 매개변수는 물약이 활성화되었을 때 플레이어의 인벤토리 내부에 표시되는 아이콘을 제어합니다. + +중요: 텍스처 이름이 요소의 레지스트리 이름과 다른 경우에는 텍스처 복사본이 만들어집니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/instant.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/instant.md new file mode 100644 index 00000000000..a46ea6f40b0 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/instant.md @@ -0,0 +1 @@ +즉시 회복처럼 효과가 한 번만 적용되어야 하는 경우 이 매개변수를 체크하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/render_in_hud.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/render_in_hud.md new file mode 100644 index 00000000000..39a775c4f41 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/render_in_hud.md @@ -0,0 +1 @@ +체크하여 게임에서 이펙트가 표시되도록 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/render_in_inventory.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/render_in_inventory.md new file mode 100644 index 00000000000..89dee1fe3a9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/render_in_inventory.md @@ -0,0 +1 @@ +이 매개변수를 활성화하면 활성화 시 플레이어의 인벤토리에 효과가 표시됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/when_active_tick.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/when_active_tick.md new file mode 100644 index 00000000000..2f988559ab4 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/when_active_tick.md @@ -0,0 +1 @@ +이 절차는 이 물약 효과가 있는 각 개체에 대해 매 틱마다 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/when_potion_applied.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/when_potion_applied.md new file mode 100644 index 00000000000..7ab2c74217b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/when_potion_applied.md @@ -0,0 +1 @@ +이 절차는 물약 효과가 개체에 적용될 때 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/potioneffect/when_potion_expires.md b/plugins/mcreator-localization/help/ko_KR/potioneffect/when_potion_expires.md new file mode 100644 index 00000000000..c5b0f9c26ea --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/potioneffect/when_potion_expires.md @@ -0,0 +1 @@ +이 절차는 개체가 물약 효과를 잃을 때 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/action_sound.md b/plugins/mcreator-localization/help/ko_KR/projectile/action_sound.md new file mode 100644 index 00000000000..1ab6c08c4fd --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/action_sound.md @@ -0,0 +1 @@ +이 매개변수는 발사체가 발사 시 재생되는 사운드를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/damage.md b/plugins/mcreator-localization/help/ko_KR/projectile/damage.md new file mode 100644 index 00000000000..7687f2c393e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/damage.md @@ -0,0 +1 @@ +값이 높을수록 발사체가 적중한 개체에 주는 피해가 더 강해집니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/ignite_fire.md b/plugins/mcreator-localization/help/ko_KR/projectile/ignite_fire.md new file mode 100644 index 00000000000..b998f2ad6a7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/ignite_fire.md @@ -0,0 +1,3 @@ +발사체가 블록에 부딪힐 때 불이 붙도록 하려면 이 매개변수를 체크하십시오. + +참고: 이 방법은 몹의 착화를 인식하진 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/item_texture.md b/plugins/mcreator-localization/help/ko_KR/projectile/item_texture.md new file mode 100644 index 00000000000..9723fe83600 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/item_texture.md @@ -0,0 +1,3 @@ +발사체를 나타내는 아이템 텍스처입니다. 여기에서 선택한 아이템과 동일하게 보입니다. + +사용자 정의 모양의 경우, 모델 매개변수를 사용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/knockback.md b/plugins/mcreator-localization/help/ko_KR/projectile/knockback.md new file mode 100644 index 00000000000..289304af1e7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/knockback.md @@ -0,0 +1 @@ +높은 값은 적중된 개체가 발사체에 의해 더 멀리 밀려납니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/model.md b/plugins/mcreator-localization/help/ko_KR/projectile/model.md new file mode 100644 index 00000000000..2467bd22f73 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/model.md @@ -0,0 +1,3 @@ +발사체 모델은 원거리 아이템의 모델입니다. + +이 매개변수는 사용될 때 텍스처 매개변수의 아이템을 재정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/model_texture.md b/plugins/mcreator-localization/help/ko_KR/projectile/model_texture.md new file mode 100644 index 00000000000..e7fb0abed51 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/model_texture.md @@ -0,0 +1 @@ +사용자 정의 모델을 사용하는 경우의 발사체 모델의 텍스처입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/power.md b/plugins/mcreator-localization/help/ko_KR/projectile/power.md new file mode 100644 index 00000000000..3f0ba84f3f8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/power.md @@ -0,0 +1 @@ +이 매개변수는 발사체의 속도(운동 에너지)를 제어합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/show_particles.md b/plugins/mcreator-localization/help/ko_KR/projectile/show_particles.md new file mode 100644 index 00000000000..cc55e2a2524 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/show_particles.md @@ -0,0 +1 @@ +파티클이 공중에서 방출되도록 하려면 이 매개변수를 체크하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/when_flying_tick.md b/plugins/mcreator-localization/help/ko_KR/projectile/when_flying_tick.md new file mode 100644 index 00000000000..e7f33b269d2 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/when_flying_tick.md @@ -0,0 +1 @@ +발사체가 비행하는 동안, 선택한 절차가 매 틱마다 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_block.md b/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_block.md new file mode 100644 index 00000000000..3d9fa4252a3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_block.md @@ -0,0 +1,3 @@ +발사체가 블록에 부딪히면, 선택한 절차가 실행됩니다. + +전달된 x, y, z는 블록이 맞은 좌표입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_entity.md b/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_entity.md new file mode 100644 index 00000000000..fbcd107549b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_entity.md @@ -0,0 +1 @@ +발사체가 살아있는 개체(소, 크리퍼, 플레이어 등)에 맞으면 선택한 절차가 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_player.md b/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_player.md new file mode 100644 index 00000000000..0f5716a570a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/projectile/when_hits_player.md @@ -0,0 +1,3 @@ +발사체가 플레이어를 맞히면 선택한 절차가 실행됩니다. + +이 절차는 발사체를 발사하는 개체에 맞을 때도 트리거될 수 있다는 점을 명심하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/cooking_book_category.md b/plugins/mcreator-localization/help/ko_KR/recipe/cooking_book_category.md new file mode 100644 index 00000000000..ad4140cefaf --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/cooking_book_category.md @@ -0,0 +1 @@ +요리책 카테고리는 요리책에서 제작법이 표시될 탭을 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/cooking_time.md b/plugins/mcreator-localization/help/ko_KR/recipe/cooking_time.md new file mode 100644 index 00000000000..478dbfd5217 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/cooking_time.md @@ -0,0 +1,3 @@ +이 매개변수는 요리 유형 제작법에서 하나의 아이템이 요리되는 시간을 결정하는 데 사용됩니다. + +단위는 틱이므로 요리시간 1초를 설정하려면 요리 시간을 20틱으로 설정해야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/crafting_book_category.md b/plugins/mcreator-localization/help/ko_KR/recipe/crafting_book_category.md new file mode 100644 index 00000000000..0d8bacb1f2f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/crafting_book_category.md @@ -0,0 +1 @@ +제작책 카테고리는 제작책에서 제작법이 표시될 탭을 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/group_name.md b/plugins/mcreator-localization/help/ko_KR/recipe/group_name.md new file mode 100644 index 00000000000..b222dfaa8c1 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/group_name.md @@ -0,0 +1 @@ +이 매개변수는 이 제작법이 표시될 제작법 책 내의 그룹을 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/namespace.md b/plugins/mcreator-localization/help/ko_KR/recipe/namespace.md new file mode 100644 index 00000000000..9d286691a65 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/namespace.md @@ -0,0 +1,2 @@ +* 모드/데이터 팩을 위한 새 제작법을 만들려면 "Mod" 네임스페이스를 사용하십시오. +* 바닐라 제작법을 재정의하려면 "minecraft"를 사용합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/registry_name.md b/plugins/mcreator-localization/help/ko_KR/recipe/registry_name.md new file mode 100644 index 00000000000..600de9b7565 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/registry_name.md @@ -0,0 +1,3 @@ +제작법의 제작법 ID(예시: diamond_block). + +바닐라 레시피를 재정의하려면, 이 필드에 지정된 레시피의 바닐라 레지스트리 이름과 동일한 이름을 입력해야 합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/shapeless.md b/plugins/mcreator-localization/help/ko_KR/recipe/shapeless.md new file mode 100644 index 00000000000..ea8ccec4976 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/shapeless.md @@ -0,0 +1,3 @@ +이 매개변수는 제작법에 지정된 모양이 필요한지 여부를 제어합니다. + +이 옵션이 선택되면 해당 아이템이 포함된 모든 아이템 구성이 제작법으로 허용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/type.md b/plugins/mcreator-localization/help/ko_KR/recipe/type.md new file mode 100644 index 00000000000..a600213fb72 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/type.md @@ -0,0 +1,10 @@ +이 매개변수는 제작법을 사용할 수 있는 제작 시스템을 제어합니다. + +* 제작은 제작대 제작법입니다. +* 제련은 화로 제작법입니다. +* 발파는 용광로 제작법입니다. +* 훈연은 훈연기 제작법입니다. +* 석재 절단은 석재 절단기 제작법입니다. +* 캠프파이어 요리는 모닥불을 마우스 오른쪽으로 클릭했을 때의 레시피입니다. +* 스미싱은 대장장이 작업대 제작법입니다. +* 양조는 양조기 제작법입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/recipe/xp_reward.md b/plugins/mcreator-localization/help/ko_KR/recipe/xp_reward.md new file mode 100644 index 00000000000..dfb1bf1285b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/recipe/xp_reward.md @@ -0,0 +1,3 @@ +이 매개변수는 제작 완료 후 플레이어가 받을 경험치를 제어합니다. + +이 매개변수는 요리 제작법에만 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/structure/biomes_to_spawn.md b/plugins/mcreator-localization/help/ko_KR/structure/biomes_to_spawn.md new file mode 100644 index 00000000000..6744fb30dc8 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/structure/biomes_to_spawn.md @@ -0,0 +1,3 @@ +이 필드를 사용하여, 어느 생물 군계에서 스폰 되어야 하는지 정의합니다. + +구조물은 적용되는 생물 군계를 명확하게 정의해야 하므로 목록을 비워둘 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/structure/generation_step.md b/plugins/mcreator-localization/help/ko_KR/structure/generation_step.md new file mode 100644 index 00000000000..99017bfc449 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/structure/generation_step.md @@ -0,0 +1 @@ +이 옵션은 구조물을 추가해야 하는 월드 생성 단계를 결정합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/structure/ground_detection.md b/plugins/mcreator-localization/help/ko_KR/structure/ground_detection.md new file mode 100644 index 00000000000..a9f7bd2f395 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/structure/ground_detection.md @@ -0,0 +1,5 @@ +이 매개변수는 구조물의 지반을 감지하는 방법을 제어합니다. + +예시: 물 기반 생물 군계의 구조물을 만들 경우, **첫 번째 모션 차단 블록**은 개체가 통과할 수 있으므로 물은 동작 차단 블록으로 간주되지 않기에 물 아래에 구조물을 생성합니다. + +**첫 번째 블록** 감지 유형은 물 위에 구조물을 생성합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/structure/ignore_blocks.md b/plugins/mcreator-localization/help/ko_KR/structure/ignore_blocks.md new file mode 100644 index 00000000000..7c1107a7750 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/structure/ignore_blocks.md @@ -0,0 +1,3 @@ +이 옵션은 구조물 생성 시 배치하지 않을(무시할) 블록을 지정합니다. + +구조물에 공기 블록을 배치하지 않으려면 여기에서 공기를 선택해주십시오. 이렇게 하면 구조물이 환경과 더 잘 통합되지만, 동굴 기반 구조의 경우 공기도 배치하는 것이 좋습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/structure/projection.md b/plugins/mcreator-localization/help/ko_KR/structure/projection.md new file mode 100644 index 00000000000..4606252032f --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/structure/projection.md @@ -0,0 +1,5 @@ +이 매개변수는 구조물이 지형에 적응되는 방법을 제어합니다. + +마을길처럼 구조물이 지형과 일치하도록 하려면 Terrain_matching을 사용하십시오. 이렇게 하면 구조물 특정 부분의 높이가 이동됩니다. + +Rigid는 구조를 그대로 평평하게 배치합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/structure/separation_spacing.md b/plugins/mcreator-localization/help/ko_KR/structure/separation_spacing.md new file mode 100644 index 00000000000..50461df0cb3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/structure/separation_spacing.md @@ -0,0 +1,18 @@ +구조물은 그리드에 생성됩니다. 이 두 매개변수는 그리드를 제어합니다: + +* **분리** - 청크 단위의 최소 거리입니다. 간격보다 작아야 합니다. +* **간격** - 이 세트의 두 구조물 사이 청크 단위 평균 거리를 대략적으로 나타냅니다. + +`간격 = 5`, `분리 = 2` 일때, 각 5x5 청크 그리드에는 한 번의 구조물 생성 시도가 있으며 `X`에서만 구조가 생성될 수 있습니다. + +``` +............. +..XXX..XXX..X +..XXX..XXX..X +..XXX..XXX..X +............. +............. +..XXX..XXX..X +..XXX..XXX..X +..XXX..XXX..X +``` \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/structure/structure.md b/plugins/mcreator-localization/help/ko_KR/structure/structure.md new file mode 100644 index 00000000000..ada8dcfa2ab --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/structure/structure.md @@ -0,0 +1,5 @@ +현재 바닐라 단일 구조물 제한은 성능상의 이유로 48x48x48 블록입니다. + +구조 블록은 건축물을 .NBT 구조로 저장할 수 있는 기본 제공 바닐라 블록입니다. + +구조물 공허 공간(Structure Void)를 사용하여 구조가 생성될 때 다른 블록이 구조물의 공기 블록을 수정할 수 있도록 허용할 수 있습니다. 예를 들어, 구조물의 안쪽을 묻을려면 구조의 내부를 /fill 명령을 사용하여 구조물 내부의 빈 공간을 일반 자연블록이 들어갈 수 있도록 할 수 있습니다. 구조물 공허 공간은 구조물에서 생성되지 않으며 다른 블록이 영역을 수정할 수 있도록 하는 자리 표시자 블록일 뿐입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/structure/terrain_adaptation.md b/plugins/mcreator-localization/help/ko_KR/structure/terrain_adaptation.md new file mode 100644 index 00000000000..d4a73568a03 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/structure/terrain_adaptation.md @@ -0,0 +1,6 @@ +이 매개변수는 지형이 구조물에 적응되는 방법을 제어합니다. + +* **none** - 지형에 영향을 주지 않습니다. +* **beard_thin** - 구조물 아래에 지형을 추가하고 구조물 내부를 비웁니다. 이는 마을에서 사용하는 방식입니다. +* **beard_box** - Beard_thin의 더 강력한 버전입니다. 이는 고대 도시에서 사용하는 방식입니다. +* **bury** - 구조물 주위에 지형을 완전히 추가합니다. 이는 요새에서 사용하는 방식입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tab/icon.md b/plugins/mcreator-localization/help/ko_KR/tab/icon.md new file mode 100644 index 00000000000..a910533f50a --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tab/icon.md @@ -0,0 +1,3 @@ +레드스톤 탭의 레드스톤 가루와 같이 크리에이티브 탭을 식별하기 위한 아이콘입니다. + +아이템만 지원되며. 아이템이 없는 블록은 아이콘으로 표시할 수 없습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tab/name.md b/plugins/mcreator-localization/help/ko_KR/tab/name.md new file mode 100644 index 00000000000..4526686985d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tab/name.md @@ -0,0 +1 @@ +크리에이티브 메뉴 탭에 표시되는 이름입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tab/search_bar.md b/plugins/mcreator-localization/help/ko_KR/tab/search_bar.md new file mode 100644 index 00000000000..b8d39fe9dc0 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tab/search_bar.md @@ -0,0 +1 @@ +이 크리에이티브 탭 내에서 검색할 수 있도록 탭 상단에 검색창을 활성화하려면 이 박스를 체크하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tag/namespace.md b/plugins/mcreator-localization/help/ko_KR/tag/namespace.md new file mode 100644 index 00000000000..e1e2767af63 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tag/namespace.md @@ -0,0 +1,5 @@ +이 매개 변수는 태그가 작동하는 방식을 정의합니다. + +* **forge:** 태그용 Ore Dictionary를 대체합니다. 태그 이름을 제공하면 다른 모드 제작자가 귀하의 모드를 자신의 모드에 엑세스할 수 있도록 하는 데 사용할 수 있습니다. +* **minecraft:** 바닐라 태그 그룹에 사용자 정의 블록이나 아이템을 추가하는 데 사용됩니다. 예를 들어, 모드 로그를 Minecraft의 로그 그룹에 추가합니다(이름을 로그로 설정하고 네임스페이스를 Minecraft로 설정하여). +* **mod:** 내부에서의 사용을 위해 모드 요소를 그룹화하는데 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tag/registry_name.md b/plugins/mcreator-localization/help/ko_KR/tag/registry_name.md new file mode 100644 index 00000000000..ba34f99ea2e --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tag/registry_name.md @@ -0,0 +1,5 @@ +태그의 레지스트리 이름입니다. + +이 필드에 작성하는 텍스트는 태그를 사용하기 위해 작성해야 하는 텍스트입니다. + +바닐라 태그 그룹을 확장할 때, 여기에 적절한 바닐라 태그 이름을 사용하고 minecraft 네임스페이스를 사용하십시오. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tag/tag_elements.md b/plugins/mcreator-localization/help/ko_KR/tag/tag_elements.md new file mode 100644 index 00000000000..f91c5b985b7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tag/tag_elements.md @@ -0,0 +1 @@ +이 태그 그룹에 속하는 요소가 여기에 나열됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tag/type.md b/plugins/mcreator-localization/help/ko_KR/tag/type.md new file mode 100644 index 00000000000..9bd2379a272 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tag/type.md @@ -0,0 +1,4 @@ +* **Items:** 레시피, 절차 등을 위해 여러 아이템을 그룹화하는 데 사용합니다. 아이템 태그는 기존 Ore Dictionary 시스템을 대체합니다. +* **Blocks:** 아이템이 아닌 블록을 대상으로 하는 경우에만 block 유형을 사용하십시오. (_이러한 태그는 레시피에 사용할 수 없습니다._) +* **Entities:** 동일한 목적으로 여러 객체를 그룹화하려면 이 태그 유형을 사용합니다. +* **Functions:** 이 태그 유형은 함수를 그룹으로 태그 지정하는 데 사용됩니다. 이러한 그룹 중 하나는 "minecraft" 네임스페이스에서 "tick" 으로 불립니다. "tick" 네임스페이스 아래에 태그된 함수는 각 게임 틱마다 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tool/attack_speed.md b/plugins/mcreator-localization/help/ko_KR/tool/attack_speed.md new file mode 100644 index 00000000000..8c16fc8ee42 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tool/attack_speed.md @@ -0,0 +1,5 @@ +이 매개 변수는 도구를 얼마나 빨리 사용할 수 있는지 제어합니다. + +이 속성은 쿨다운 시간의 길이를 제어하며, 소요시간은 T = 1/ 공격속도 * 20틱 입니다. + +대미지 배율은 0.2 + ((t + 0.5) / T) ^ 2 * 0.8 이며, 범위는 0.2 -1 로 제한됩니다. 여기서 t는 마지막 공격 또는 아이템 전환 이후의 틱 수입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tool/blocks_affected.md b/plugins/mcreator-localization/help/ko_KR/tool/blocks_affected.md new file mode 100644 index 00000000000..de956890eb3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tool/blocks_affected.md @@ -0,0 +1,3 @@ +이 목록은 도구를 사용할 수 있는 블록을 정의합니다. + +이 매개 변수는 특수 도구 유형에서만 사용됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tool/efficiency.md b/plugins/mcreator-localization/help/ko_KR/tool/efficiency.md new file mode 100644 index 00000000000..d8dc5c732d1 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tool/efficiency.md @@ -0,0 +1,11 @@ +이 매개 변수는 도구가 채굴할 수 있는 속도를 정의합니다. + +예시: 석재 도구는 다이아몬드 도구보다 효율성이 낮습니다. + +바닐라 값: +* 나무 도구는 2 입니다. +* 석재 도구는 4 입니다. +* 철재 도구는 6 입니다. +* 다이아몬드 도구는 8 입니다. +* 네더라이트 도구는 9 입니다. +* 황금 도구는 12 입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tool/harvest_level.md b/plugins/mcreator-localization/help/ko_KR/tool/harvest_level.md new file mode 100644 index 00000000000..4e0f9cf79c1 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tool/harvest_level.md @@ -0,0 +1,9 @@ +특정 수확 레벨(티어)의 도구는 동일 티어 이하의 블록만 파괴할 수 있습니다. + +* 0 - 손/나무 +* 1 - 돌 +* 2 - 철 +* 3 - 다이아몬드 +* 4 - 네더라이트 + +티어를 5 이상으로 설정하여 네더라이트보다 더 큰 계층을 정의할 수 있습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tool/repair_items.md b/plugins/mcreator-localization/help/ko_KR/tool/repair_items.md new file mode 100644 index 00000000000..730405a08a3 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tool/repair_items.md @@ -0,0 +1 @@ +모루에서 도구를 수리할 수 있는 아이템(들)입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tool/shield_blocking_model.md b/plugins/mcreator-localization/help/ko_KR/tool/shield_blocking_model.md new file mode 100644 index 00000000000..88c11962347 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tool/shield_blocking_model.md @@ -0,0 +1 @@ +도구로 방어할 때 사용하는 실드 모델 유형 도구입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tool/type.md b/plugins/mcreator-localization/help/ko_KR/tool/type.md new file mode 100644 index 00000000000..825c22ace9b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tool/type.md @@ -0,0 +1,3 @@ +이 도구의 도구 유형입니다. + +아래 매개 변수 중 일부는 일부 도구 유형에선 사용되지 않습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/tool/when_block_destroyed.md b/plugins/mcreator-localization/help/ko_KR/tool/when_block_destroyed.md new file mode 100644 index 00000000000..94645d5af76 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/tool/when_block_destroyed.md @@ -0,0 +1 @@ +도구가 블록을 파괴하면, 이 절차가 실행됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagerprofession/action_sound.md b/plugins/mcreator-localization/help/ko_KR/villagerprofession/action_sound.md new file mode 100644 index 00000000000..b0f7bef3a3d --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagerprofession/action_sound.md @@ -0,0 +1 @@ +주민이 직업 블록을 사용할 때 발생하는 주민 사운드입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagerprofession/display_name.md b/plugins/mcreator-localization/help/ko_KR/villagerprofession/display_name.md new file mode 100644 index 00000000000..f7d2bdc0713 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagerprofession/display_name.md @@ -0,0 +1 @@ +이 주민 직업의 표시 이름입니다. 이는 거래 인터페이스에 표시됩니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagerprofession/hat.md b/plugins/mcreator-localization/help/ko_KR/villagerprofession/hat.md new file mode 100644 index 00000000000..5118b273c57 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagerprofession/hat.md @@ -0,0 +1,12 @@ +이 매개 변수는 선택한 직업 텍스처에 의해 정의된 모자 종류를 지정하며, 이 직업을 획득한 후에도 해당 유형에 따라 정의된 모자를 계속 착용할지 여부를 제어합니다. +* **없음:** 모든 경우에 해당됩니다; +* **부분:** 주민의 머리 전체를 덮지 않는 경우; +* **전체:** 모든 경우에 해당되지 않습니다; + +이 조건은 다음 표로 표현될 수 있습니다. (여기서 TH는 유형에 따른 모자이고, PH는 직업 모자입니다): + +| TH 가시성 | TH = 없음 | TH = 부분 | TH = 전체 | +| ------- |:-------:|:-------:|:-------:| +| PH = 없음 | 표시 | 표시 | 표시 | +| PH = 부분 | 표시 | 표시 | 숨김 | +| PH = 전체 | 숨김 | 숨김 | 숨김 | \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagerprofession/profession_block.md b/plugins/mcreator-localization/help/ko_KR/villagerprofession/profession_block.md new file mode 100644 index 00000000000..0fc78cca73c --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagerprofession/profession_block.md @@ -0,0 +1,3 @@ +이 직업의 주민이 작업 블록으로 사용하는 블록입니다. + +두 모드가 동일한 직업 블록을 정의하거나 다른 모드가 다른 기능을 위해 이 블록과 함께 POI를 사용하는 경우 해당 직업은 작동하지 않습니다. 이러한 이유로, 사용된 블록이 고유한지 다시 확인하는 것이 좋습니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagerprofession/profession_texture.md b/plugins/mcreator-localization/help/ko_KR/villagerprofession/profession_texture.md new file mode 100644 index 00000000000..38057b5ed34 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagerprofession/profession_texture.md @@ -0,0 +1 @@ +이 직업을 가진 주민의 텍스처입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagerprofession/zombified_profession_texture.md b/plugins/mcreator-localization/help/ko_KR/villagerprofession/zombified_profession_texture.md new file mode 100644 index 00000000000..fe369441ac7 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagerprofession/zombified_profession_texture.md @@ -0,0 +1 @@ +이 직업을 가진 좀비 주민의 텍스처입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagertrades/level.md b/plugins/mcreator-localization/help/ko_KR/villagertrades/level.md new file mode 100644 index 00000000000..527b324c2ac --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagertrades/level.md @@ -0,0 +1 @@ +주민이 거래를 제공하는 데 필요한 최소 레벨입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagertrades/max_trades.md b/plugins/mcreator-localization/help/ko_KR/villagertrades/max_trades.md new file mode 100644 index 00000000000..a2eefefef10 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagertrades/max_trades.md @@ -0,0 +1 @@ +주민이 재충전 없이 수행할 수 있는 최대 거래 횟수 입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagertrades/price1.md b/plugins/mcreator-localization/help/ko_KR/villagertrades/price1.md new file mode 100644 index 00000000000..9df3388b4a9 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagertrades/price1.md @@ -0,0 +1 @@ +거래에 필요한 첫 번째 아이템입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagertrades/price2.md b/plugins/mcreator-localization/help/ko_KR/villagertrades/price2.md new file mode 100644 index 00000000000..8425398ec21 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagertrades/price2.md @@ -0,0 +1 @@ +거래에 필요한 두 번째(선택 사항) 아이템입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagertrades/price_multiplier.md b/plugins/mcreator-localization/help/ko_KR/villagertrades/price_multiplier.md new file mode 100644 index 00000000000..2a52227c1ad --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagertrades/price_multiplier.md @@ -0,0 +1 @@ +플레이어가 동일한 아이템을 여러 번 거래할 때 가격 인상을 정의합니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagertrades/sale.md b/plugins/mcreator-localization/help/ko_KR/villagertrades/sale.md new file mode 100644 index 00000000000..a095cda34c2 --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagertrades/sale.md @@ -0,0 +1 @@ +거래의 결과로 획득할 아이템입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ko_KR/villagertrades/xp.md b/plugins/mcreator-localization/help/ko_KR/villagertrades/xp.md new file mode 100644 index 00000000000..2a43abfdb2b --- /dev/null +++ b/plugins/mcreator-localization/help/ko_KR/villagertrades/xp.md @@ -0,0 +1 @@ +주민이 얻는 경험치 수입니다. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/nl_NL/advancement/announce_to_chat.md b/plugins/mcreator-localization/help/nl_NL/advancement/announce_to_chat.md new file mode 100644 index 00000000000..68249e646cf --- /dev/null +++ b/plugins/mcreator-localization/help/nl_NL/advancement/announce_to_chat.md @@ -0,0 +1 @@ +Schrijft een bericht in de chat als de speler de vooruitgang voltooit. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/nl_NL/advancement/background.md b/plugins/mcreator-localization/help/nl_NL/advancement/background.md new file mode 100644 index 00000000000..a777796ebb4 --- /dev/null +++ b/plugins/mcreator-localization/help/nl_NL/advancement/background.md @@ -0,0 +1 @@ +Als je vooruitgang het eerste van een nieuw pad is, kun je de achtergrond van het tabblad vooruitgang kiezen met deze optie. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/nl_NL/advancement/description.md b/plugins/mcreator-localization/help/nl_NL/advancement/description.md new file mode 100644 index 00000000000..4b614a3e449 --- /dev/null +++ b/plugins/mcreator-localization/help/nl_NL/advancement/description.md @@ -0,0 +1 @@ +Hier zet u informatie neer over hoe je de taak kunt volbrengen. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/nl_NL/advancement/hide_display.md b/plugins/mcreator-localization/help/nl_NL/advancement/hide_display.md new file mode 100644 index 00000000000..5b8efd20c0a --- /dev/null +++ b/plugins/mcreator-localization/help/nl_NL/advancement/hide_display.md @@ -0,0 +1 @@ +Vink deze parameter aan om de vooruitgang in het Vooruitgang tabblad te verbergen totdat deze is voltooid. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/nl_NL/advancement/hide_if_not_completed.md b/plugins/mcreator-localization/help/nl_NL/advancement/hide_if_not_completed.md new file mode 100644 index 00000000000..6bea861c1e3 --- /dev/null +++ b/plugins/mcreator-localization/help/nl_NL/advancement/hide_if_not_completed.md @@ -0,0 +1 @@ +Deze parameter verbergt de vooruitgang in de vooruitgang tabblad totdat deze is voltooid. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/nl_NL/advancement/icon.md b/plugins/mcreator-localization/help/nl_NL/advancement/icon.md new file mode 100644 index 00000000000..6c2ca04793d --- /dev/null +++ b/plugins/mcreator-localization/help/nl_NL/advancement/icon.md @@ -0,0 +1,5 @@ +Het pictogram wordt weergegeven op het tabblad Voorbereidingen. + +Als dit een hoofdouder is is het ook de vooruitgang pictogram. + +Alleen items worden hier ondersteund. Blokken zonder item kunnen niet worden weergegeven als pictogram. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/no_NO/armor/body_tick.md b/plugins/mcreator-localization/help/no_NO/armor/body_tick.md new file mode 100644 index 00000000000..3f6235d9a35 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/armor/body_tick.md @@ -0,0 +1,3 @@ +Når en enhet har utjevnet organ/kesterplate, skal prosedyren gjennomføres for hvert flått. + +Det er enheten som bærer rustningen, men har bestått itemstack er rustningens element. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/no_NO/armor/boots_tick.md b/plugins/mcreator-localization/help/no_NO/armor/boots_tick.md new file mode 100644 index 00000000000..95da6ae91fc --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/armor/boots_tick.md @@ -0,0 +1,3 @@ +Når en enhet har støvlene utstyrt, skal prosedyren utføres hvert flått. + +Det er enheten som bærer rustningen, men har bestått itemstack er rustningens element. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/no_NO/block/special_information.md b/plugins/mcreator-localization/help/no_NO/block/special_information.md new file mode 100644 index 00000000000..b0be2866eff --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/block/special_information.md @@ -0,0 +1,3 @@ +Dette parameteret legger til et verktøytips i blokken når du holder ikonet over blokken i inventaret ditt. + +Hvis du bruker et prosedyregenerert verktøytips, og blokkeringen din er ikke innehas av en enhet eller for øyeblikket en frafalt vareenhet, `enhet`-avhengigheten vil være null. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/no_NO/damagetype/effects.md b/plugins/mcreator-localization/help/no_NO/damagetype/effects.md new file mode 100644 index 00000000000..d3f2b4b005c --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/damagetype/effects.md @@ -0,0 +1 @@ +Denne parameteren bestemmer hvilke lyder som skal avspilles når det mottar skade av denne typen diff --git a/plugins/mcreator-localization/help/no_NO/damagetype/exhaustion.md b/plugins/mcreator-localization/help/no_NO/damagetype/exhaustion.md new file mode 100644 index 00000000000..d7a072d7ccb --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/damagetype/exhaustion.md @@ -0,0 +1,3 @@ +Denne parameteren bestemmer hvor mye utmatting som brukes på spilleren når skaden er ekspandert. + +Høyere verdier tar raskere avstand fra sultbaren. diff --git a/plugins/mcreator-localization/help/no_NO/damagetype/item_death_message.md b/plugins/mcreator-localization/help/no_NO/damagetype/item_death_message.md new file mode 100644 index 00000000000..23b2f8d3bea --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/damagetype/item_death_message.md @@ -0,0 +1,7 @@ +Denne meldingen vises i chatten når en spiller blir drept av en enhet som holder et navngitt element + +Du kan bruke følgende tokens i meldingen: + +- ``: navnet på spilleren som døde +- ``: navnet på enheten som deltok i skaden +- ``: navnet på gjenstanden som angriperen har diff --git a/plugins/mcreator-localization/help/no_NO/damagetype/normal_death_message.md b/plugins/mcreator-localization/help/no_NO/damagetype/normal_death_message.md new file mode 100644 index 00000000000..d7f8dcb029e --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/damagetype/normal_death_message.md @@ -0,0 +1,8 @@ +Denne meldingen vises i chat når en spiller dør på grunn av skade av denne typen, i de fleste situasjoner. + +Du kan bruke følgende tokens i meldingen: + +- ``: navnet på spilleren som døde +- ``: navnet på enheten som deltok i skaden + +MERK: Bruk andre token bare hvis skaden alltid er forårsaket av en skapning. diff --git a/plugins/mcreator-localization/help/no_NO/damagetype/player_death_message.md b/plugins/mcreator-localization/help/no_NO/damagetype/player_death_message.md new file mode 100644 index 00000000000..6ea09fe17db --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/damagetype/player_death_message.md @@ -0,0 +1,6 @@ +Denne meldingen vises i chat når en spiller dør av skade på denne typen, men har nylig fått skade av en annen enhet. + +Du kan bruke følgende tokens i meldingen: + +- ``: navnet på spilleren som døde +- ``: navnet på enheten som deltok i skaden diff --git a/plugins/mcreator-localization/help/no_NO/damagetype/scaling.md b/plugins/mcreator-localization/help/no_NO/damagetype/scaling.md new file mode 100644 index 00000000000..d26ed873fbc --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/damagetype/scaling.md @@ -0,0 +1,6 @@ +Denne parameteren avgjør om skaden som blir håndtert bør øke vanskelighetsgraden. + +- `aldri`: vanskelighetsgraden påvirker ikke skaden +- `alltid`: Vanskelighet øker alltid skadedyrt uavhengig av kilde +- `when_caused_by_living_non_player`: vanskelighetsgrad øker skaden bare hvis den er forårsaket av en levende enhet + (som zombier eller edderkopper) diff --git a/plugins/mcreator-localization/help/no_NO/entity/bounding_box_scale.md b/plugins/mcreator-localization/help/no_NO/entity/bounding_box_scale.md new file mode 100644 index 00000000000..3b6895d6573 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/entity/bounding_box_scale.md @@ -0,0 +1,3 @@ +Denne funksjonen lar deg kontrollere størrelsen på enhetens kollisjonsboks. + +For å skalere enheter i spillets utseende, bruk parameteren "Modell visuell skala". diff --git a/plugins/mcreator-localization/help/no_NO/entity/condition_display_model_layer.md b/plugins/mcreator-localization/help/no_NO/entity/condition_display_model_layer.md new file mode 100644 index 00000000000..77d742efa89 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/entity/condition_display_model_layer.md @@ -0,0 +1 @@ +Mens den returnerte verdien er sann, er dette modelllaget synlig. diff --git a/plugins/mcreator-localization/help/no_NO/entity/data_default_value.md b/plugins/mcreator-localization/help/no_NO/entity/data_default_value.md new file mode 100644 index 00000000000..773081b8e11 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/entity/data_default_value.md @@ -0,0 +1,5 @@ +Dette er standardverdien av enhetens variabel. + +- **Logikk**: _true_ eller _false_ +- **Nummer**: Kan gå fra den maksimale negative grensen til den maksimale positive grensen for et heltall +- **Tråden**: Tekst/strengverdi diff --git a/plugins/mcreator-localization/help/no_NO/entity/data_name.md b/plugins/mcreator-localization/help/no_NO/entity/data_name.md new file mode 100644 index 00000000000..266f514ef49 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/entity/data_name.md @@ -0,0 +1,3 @@ +Denne parameteren definerer navnet på denne variabelen. + +Hovedsakelig brukt med prosedyreblokker for å få eller sette sin verdi. diff --git a/plugins/mcreator-localization/help/no_NO/entity/data_type.md b/plugins/mcreator-localization/help/no_NO/entity/data_type.md new file mode 100644 index 00000000000..875547996f5 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/entity/data_type.md @@ -0,0 +1 @@ +Dette alternativet kontrollerer typen av denne enhetens variabelen. Støttede typer er logikk, nummer og strengvariabler. diff --git a/plugins/mcreator-localization/help/no_NO/entity/entity_data.md b/plugins/mcreator-localization/help/no_NO/entity/entity_data.md new file mode 100644 index 00000000000..a14cb09b6a3 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/entity/entity_data.md @@ -0,0 +1,4 @@ +Legg til egendefinerte variabler til din egendefinerte enhet: + +Disse variablene er synkronisert mellom klientsiden og serversiden. +så en av dem kan for eksempel brukes til å endre teksturen til enheten din. diff --git a/plugins/mcreator-localization/help/no_NO/entity/model_layers.md b/plugins/mcreator-localization/help/no_NO/entity/model_layers.md new file mode 100644 index 00000000000..05a174554ad --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/entity/model_layers.md @@ -0,0 +1 @@ +Modelllagene i listen nedenfor vil bli brukt i toppen av enhetens modell. diff --git a/plugins/mcreator-localization/help/no_NO/entity/visual_scale.md b/plugins/mcreator-localization/help/no_NO/entity/visual_scale.md new file mode 100644 index 00000000000..17a69bbce6d --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/entity/visual_scale.md @@ -0,0 +1,3 @@ +Denne funksjonen lar deg styre den visuelle modellstørrelsen på enheten i spillet: + +For å skalere enhetens kollisjonsboks, bruk parameteren "Bounding box scale". diff --git a/plugins/mcreator-localization/help/no_NO/item/enable_ranged_item.md b/plugins/mcreator-localization/help/no_NO/item/enable_ranged_item.md new file mode 100644 index 00000000000..1a57751a604 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/item/enable_ranged_item.md @@ -0,0 +1,7 @@ +Ved å aktivere denne parameteren vil gjenstanden bli en range gjenstand slik at den kan skyte et projektisk, som buer og kryssker. + +For avstands gjenstand å arbeide, Angi animasjonen til bue eller lignende og sørg for å bruke en ikke-null verdi for enhetens brukstid. + +Hvis du bruker range gjenstand, skytes gjenstanden bare hvis den nødvendige gjenstanden (ammo) er i spillerens inventar. Denne er piler når du bruker vanlige piler eller elementet angitt i den påkrevde parameteren i et egendefinert prosjektil. + +Hvis du ønsker å skyte et prosjektil uten det nødvendige elementsystemet, bruk utløseren og prosedyrene for å skyte den til høyre. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/no_NO/item/special_information.md b/plugins/mcreator-localization/help/no_NO/item/special_information.md new file mode 100644 index 00000000000..e1acd5ec1e3 --- /dev/null +++ b/plugins/mcreator-localization/help/no_NO/item/special_information.md @@ -0,0 +1,3 @@ +Dette parameteret legger til et verktøytips til elementet når du holder ikonet over elementet i inventaret ditt. + +Hvis du bruker et prosedyregenerert verktøytips, og elementet ditt er ikke innehas av en enhet eller for øyeblikket en frafalt vareenhet, `enhet`-avhengigheten vil være null. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/pl_PL/advancement/reward_loot_tables.md b/plugins/mcreator-localization/help/pl_PL/advancement/reward_loot_tables.md new file mode 100644 index 00000000000..5cf780f4417 --- /dev/null +++ b/plugins/mcreator-localization/help/pl_PL/advancement/reward_loot_tables.md @@ -0,0 +1 @@ +Gracz dostanie niektóre przedmioty z wybranych w tabeli łupu zdefiniowanej w tym polu, gdy ukończy osiągnięcie. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/pl_PL/advancement/reward_recipes.md b/plugins/mcreator-localization/help/pl_PL/advancement/reward_recipes.md new file mode 100644 index 00000000000..54b35875051 --- /dev/null +++ b/plugins/mcreator-localization/help/pl_PL/advancement/reward_recipes.md @@ -0,0 +1 @@ +Przepisy, które się odblokują, gdy gracz ukończy postęp. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/pl_PL/advancement/reward_xp.md b/plugins/mcreator-localization/help/pl_PL/advancement/reward_xp.md new file mode 100644 index 00000000000..1cb423f8360 --- /dev/null +++ b/plugins/mcreator-localization/help/pl_PL/advancement/reward_xp.md @@ -0,0 +1 @@ +To jest, ile punktów doświadczenia gracz dostanie po ukończeniu osiągnięcia. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/pl_PL/advancement/show_toast.md b/plugins/mcreator-localization/help/pl_PL/advancement/show_toast.md new file mode 100644 index 00000000000..b9d8cf04c9a --- /dev/null +++ b/plugins/mcreator-localization/help/pl_PL/advancement/show_toast.md @@ -0,0 +1 @@ +Pokazuje osiągnięcia w górnym rogu ekranu, gdy gracz ukończy osiągnięcie. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/pl_PL/advancement/type.md b/plugins/mcreator-localization/help/pl_PL/advancement/type.md new file mode 100644 index 00000000000..3847d1276bc --- /dev/null +++ b/plugins/mcreator-localization/help/pl_PL/advancement/type.md @@ -0,0 +1,5 @@ +Jest to rodzaj osiągnięć + +* Zadanie jest podstawowym typem osiągnięcia i jest najpowszechniejsze. +* Cel jest celem długoterminowym, który staramy się osiągnąć. +* Wezwanie polega na przetestowaniu gracza lub rzuceniu mu jakiegoś wezwania. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/pl_PL/armor/armor_layer_texture.md b/plugins/mcreator-localization/help/pl_PL/armor/armor_layer_texture.md new file mode 100644 index 00000000000..7c5e4d8bc2d --- /dev/null +++ b/plugins/mcreator-localization/help/pl_PL/armor/armor_layer_texture.md @@ -0,0 +1 @@ +Tekstura warstwy zbroi jest teksturą, która będzie się pokazywała na graczu, jeżeli on założy ją na siebie. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/pl_PL/villagertrades/level.md b/plugins/mcreator-localization/help/pl_PL/villagertrades/level.md new file mode 100644 index 00000000000..7e9193a288c --- /dev/null +++ b/plugins/mcreator-localization/help/pl_PL/villagertrades/level.md @@ -0,0 +1 @@ +Minimalny poziom wymagany do zaoferowania handlu przez Wieśniaka. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/armor/max_damage_absorbed.md b/plugins/mcreator-localization/help/ru_RU/armor/max_damage_absorbed.md index 3e113be3cb2..e1bf40b79c3 100644 --- a/plugins/mcreator-localization/help/ru_RU/armor/max_damage_absorbed.md +++ b/plugins/mcreator-localization/help/ru_RU/armor/max_damage_absorbed.md @@ -1,14 +1,15 @@ Этот параметр определяет долговечность вашей брони и применяется: -* к шлему: `долговечность * 13`; -* к нагруднику: `долговечность * 15`; -* к поножам: `долговечность * 16`; -* к ботинкам: `долговечность * 11`. +* к шлему: `долговечность * 11`; +* к нагруднику: `долговечность * 16`; +* к поножам: `долговечность * 15`; +* к ботинкам: `долговечность * 13`. Стандартная броня использует следующие значения: * Кожаная броня — 5; * Кольчуга — 15; +* Железная броня — 15; * Золотая броня — 7; * Алмазная броня — 33; * Незеритовая броня — 37; \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/block/special_information.md b/plugins/mcreator-localization/help/ru_RU/block/special_information.md index a3dbc307434..26591c38687 100644 --- a/plugins/mcreator-localization/help/ru_RU/block/special_information.md +++ b/plugins/mcreator-localization/help/ru_RU/block/special_information.md @@ -1 +1,3 @@ -Запишите здесь дополнительную информацию, показываемую при наведении курсора на данный блок в инвентаре. Если текст подсказки получается из процедуры, и блок не удерживается сущностью либо стопкой, то переменная `entity` будет нулевой (_null_). \ No newline at end of file +Запишите здесь дополнительную информацию, показываемую при наведении курсора на данный блок в инвентаре. + +Если текст подсказки получается из процедуры, и блок не удерживается сущностью либо стопкой, то значение `entity` будет нулевым (_null_). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/damagetype/effects.md b/plugins/mcreator-localization/help/ru_RU/damagetype/effects.md new file mode 100644 index 00000000000..072a95ee0e4 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/damagetype/effects.md @@ -0,0 +1 @@ +Данный параметр определяет, какие звуки должны воспроизводиться при получении урона этого типа. diff --git a/plugins/mcreator-localization/help/ru_RU/damagetype/exhaustion.md b/plugins/mcreator-localization/help/ru_RU/damagetype/exhaustion.md new file mode 100644 index 00000000000..04d28ae7d74 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/damagetype/exhaustion.md @@ -0,0 +1,3 @@ +Данный параметр определяет, насколько истощается игрок, получивший урон этого типа. + +Более высокие значения быстрее понижают уровень сытости. diff --git a/plugins/mcreator-localization/help/ru_RU/damagetype/item_death_message.md b/plugins/mcreator-localization/help/ru_RU/damagetype/item_death_message.md new file mode 100644 index 00000000000..780690278be --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/damagetype/item_death_message.md @@ -0,0 +1,7 @@ +Это сообщение отображается в чате, когда игрока убивает сущность, держащая названый предмет. + +В сообщении можно использовать следующие токены: + +- `` — имя погибшего игрока; +- `` — имя сущности, нанёсшей урон; +- `` — название предмета, который держала сущность. diff --git a/plugins/mcreator-localization/help/ru_RU/damagetype/normal_death_message.md b/plugins/mcreator-localization/help/ru_RU/damagetype/normal_death_message.md new file mode 100644 index 00000000000..a9dfa7a35af --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/damagetype/normal_death_message.md @@ -0,0 +1,8 @@ +Это сообщение отображается в чате, когда игрок умирает от урона данного типа (в большинстве случаев). + +В сообщении можно использовать следующие токены: + +- `` — имя погибшего игрока; +- `` — имя сущности, нанёсшей урон. + +ВНИМАНИЕ: Используйте второй токен, только если урон всегда наносит моб. diff --git a/plugins/mcreator-localization/help/ru_RU/damagetype/player_death_message.md b/plugins/mcreator-localization/help/ru_RU/damagetype/player_death_message.md new file mode 100644 index 00000000000..0b28c1475ca --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/damagetype/player_death_message.md @@ -0,0 +1,6 @@ +Это сообщение отображается в чате, когда игрок умирает от урона данного типа, но до этого был ранен другой сущностью. + +В сообщении можно использовать следующие токены: + +- `` — имя погибшего игрока; +- `` — имя сущности, нанёсшей урон. diff --git a/plugins/mcreator-localization/help/ru_RU/damagetype/scaling.md b/plugins/mcreator-localization/help/ru_RU/damagetype/scaling.md new file mode 100644 index 00000000000..99652cde794 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/damagetype/scaling.md @@ -0,0 +1,5 @@ +Этот параметр определяет, увеличивается ли величина урона со сложностью. + +- `never` — сложность не влияет на наносимый урон; +- `always` — сложность всегда увеличивает наносимый урон независимо от источника; +- `when_caused_by_living_non_player` — сложность повышает наносимый урон, если он причинён мобом, т.е. сущностью, отличной от игрока (например, зомби или пауки). diff --git a/plugins/mcreator-localization/help/ru_RU/entity/bounding_box_scale.md b/plugins/mcreator-localization/help/ru_RU/entity/bounding_box_scale.md new file mode 100644 index 00000000000..9f2ae5fd000 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/bounding_box_scale.md @@ -0,0 +1,3 @@ +Эта опция позволяет изменить величину физической границы Вашей сущности. + +Для изменения масштаба модели сущности в игре, используйте параметр "Масштаб видимой модели". diff --git a/plugins/mcreator-localization/help/ru_RU/entity/condition_can_breathe_underwater.md b/plugins/mcreator-localization/help/ru_RU/entity/condition_can_breathe_underwater.md new file mode 100644 index 00000000000..c7437d8c449 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/condition_can_breathe_underwater.md @@ -0,0 +1 @@ +Пока это условие выполняется, сущность сможет бесконечно дышать под водой (подобно рыбам или кальмарам). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/entity/condition_display_model_layer.md b/plugins/mcreator-localization/help/ru_RU/entity/condition_display_model_layer.md new file mode 100644 index 00000000000..1b1d2f5cb20 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/condition_display_model_layer.md @@ -0,0 +1 @@ +Данный слой модели будет видим, пока выполняется это условие. diff --git a/plugins/mcreator-localization/help/ru_RU/entity/condition_fluids_can_push.md b/plugins/mcreator-localization/help/ru_RU/entity/condition_fluids_can_push.md new file mode 100644 index 00000000000..0af5540c80b --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/condition_fluids_can_push.md @@ -0,0 +1,3 @@ +Пока это условие не выполняется, жидкость не будет толкать эту сущность. Обычно это необходимо при создании водной сущности. + +Значение данного параметра по умолчанию — истина. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/entity/data_default_value.md b/plugins/mcreator-localization/help/ru_RU/entity/data_default_value.md new file mode 100644 index 00000000000..dfe426a1078 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/data_default_value.md @@ -0,0 +1,5 @@ +Задаёт значение по умолчанию параметра данных сущности. + +- **Logic**: _true_ или _false_; +- **Number**: Лежит в диапазоне от максимального отрицательного до максимального положительного предела целых чисел; +- **String**: Текст/строковое значение. diff --git a/plugins/mcreator-localization/help/ru_RU/entity/data_name.md b/plugins/mcreator-localization/help/ru_RU/entity/data_name.md new file mode 100644 index 00000000000..6d94d4468e1 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/data_name.md @@ -0,0 +1,3 @@ +Данный параметр указывает название этого параметра данных. + +В основном используется процедурными блоками для получения или изменения его значения. diff --git a/plugins/mcreator-localization/help/ru_RU/entity/data_type.md b/plugins/mcreator-localization/help/ru_RU/entity/data_type.md new file mode 100644 index 00000000000..2c45db743ea --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/data_type.md @@ -0,0 +1 @@ +Этот параметр указывает тип параметра данных сущности. Поддерживаются логический, целочисленный и строковый тип данных. diff --git a/plugins/mcreator-localization/help/ru_RU/entity/entity_data.md b/plugins/mcreator-localization/help/ru_RU/entity/entity_data.md new file mode 100644 index 00000000000..f1a464544d2 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/entity_data.md @@ -0,0 +1,3 @@ +Здесь можно добавить специальные переменные данной сущности. + +Эти переменные синхронизованы между сторонами клиента и сервера, поэтому их можно использовать, например, для смены текстуры Вашей сущности. diff --git a/plugins/mcreator-localization/help/ru_RU/entity/glow_texture.md b/plugins/mcreator-localization/help/ru_RU/entity/glow_texture.md index 3b8a5ec2244..439f3b91218 100644 --- a/plugins/mcreator-localization/help/ru_RU/entity/glow_texture.md +++ b/plugins/mcreator-localization/help/ru_RU/entity/glow_texture.md @@ -1,7 +1 @@ -Является дополнительной необязательной текстурой данной сущности. - -Она должна иметь те же размеры, что и главная текстура данной сущности. - -Эта текстура определяет светящийся слой сущности. Чем ярче определённая её часть, тем сильнее будет светиться сущность в этом месте. - -Если ваша сущность не должна светиться, оставьте это поле пустым. \ No newline at end of file +Эта текстура определяет светящийся слой сущности. Чем ярче определённая её часть, тем сильнее будет светиться сущность в этом месте. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/entity/model_layers.md b/plugins/mcreator-localization/help/ru_RU/entity/model_layers.md new file mode 100644 index 00000000000..b0035ab5eca --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/model_layers.md @@ -0,0 +1 @@ +Слои модели из списка ниже будет показываться поверх модели сущности. diff --git a/plugins/mcreator-localization/help/ru_RU/entity/texture.md b/plugins/mcreator-localization/help/ru_RU/entity/texture.md index 025a8cb384e..0f84344180a 100644 --- a/plugins/mcreator-localization/help/ru_RU/entity/texture.md +++ b/plugins/mcreator-localization/help/ru_RU/entity/texture.md @@ -1,3 +1,5 @@ Данный параметр определяет текстуру Вашей сущности. Она должна быть совместима с выбранной моделью. -К примеру, двуногие модели поддерживают только текстуры с разрешением 64x64 (64x32 до Minecraft 1.18.x). \ No newline at end of file +К примеру, двуногие модели поддерживают только текстуры с разрешением 64x64 (64x32 до Minecraft 1.18.x). + +Для определения более сложных слоёв используйте вкладку "${l10n.t("elementgui.living_entity.page_model_layers")}". \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/entity/visual_scale.md b/plugins/mcreator-localization/help/ru_RU/entity/visual_scale.md new file mode 100644 index 00000000000..2055dc97654 --- /dev/null +++ b/plugins/mcreator-localization/help/ru_RU/entity/visual_scale.md @@ -0,0 +1,3 @@ +Эта опция позволяет изменить размер видимой модели сущности в игре. + +Для изменения масштаба физической границы используйте параметр "Масштаб рамки-границы". diff --git a/plugins/mcreator-localization/help/ru_RU/entity/water_entity.md b/plugins/mcreator-localization/help/ru_RU/entity/water_entity.md index ecb3c159242..40868dfb58f 100644 --- a/plugins/mcreator-localization/help/ru_RU/entity/water_entity.md +++ b/plugins/mcreator-localization/help/ru_RU/entity/water_entity.md @@ -1,3 +1,5 @@ При установленном флажке данная сущность станет водной. -Такая сущность будет прокладывать свой путь по воде. \ No newline at end of file +Включение этой опции позволит сущности искать путь и управлять движением по воде, а также естественно призываться в воде. + +Это не исключит её появления в других местах. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/item/enable_ranged_item.md b/plugins/mcreator-localization/help/ru_RU/item/enable_ranged_item.md index fe6c2dd0a6b..50ffaebd03a 100644 --- a/plugins/mcreator-localization/help/ru_RU/item/enable_ranged_item.md +++ b/plugins/mcreator-localization/help/ru_RU/item/enable_ranged_item.md @@ -1 +1,7 @@ -Установите этот флажок, чтобы предмет можно было использовать для дальнего боя подобно луку, арбалету, снежку или огненному шару. \ No newline at end of file +Установите этот флажок, чтобы предмет можно было использовать для дальнего боя подобно луку, арбалету, снежку или огненному шару. + +Для работы данной опции укажите анимацию предмета "bow" (либо подобную) и длительность использования, отличную от нуля. + +При использовании данной опции, предмет будет стрелять только при наличии указанных боеприпасов в инвентаре игрока. Ванильные стрелы используют сами себя (расходуются), пользовательские снаряды — предмет в поле "Требуемый предмет". + +Чтобы стрелять снарядом без требуемых предметов, используйте триггер "При щелчке ПКМ" в этом редакторе и блоки для запуска снаряда. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/item/special_information.md b/plugins/mcreator-localization/help/ru_RU/item/special_information.md index bda89c17817..09d138a6855 100644 --- a/plugins/mcreator-localization/help/ru_RU/item/special_information.md +++ b/plugins/mcreator-localization/help/ru_RU/item/special_information.md @@ -1 +1,3 @@ -Запишите здесь дополнительную информацию, показываемую при наведении курсора на данный предмет в инвентаре. Если текст подсказки получается из процедуры, и предмет не удерживается сущностью либо стопкой, то переменная `entity` будет нулевой (_null_). \ No newline at end of file +Запишите здесь дополнительную информацию, показываемую при наведении курсора на данный предмет в инвентаре. + +Если текст подсказки получается из процедуры, и предмет не удерживается сущностью либо стопкой, то значение `entity` будет нулевым (_null_). \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/tag/namespace.md b/plugins/mcreator-localization/help/ru_RU/tag/namespace.md index 192f03ee21a..f1f60e8dc21 100644 --- a/plugins/mcreator-localization/help/ru_RU/tag/namespace.md +++ b/plugins/mcreator-localization/help/ru_RU/tag/namespace.md @@ -1,5 +1,6 @@ Данный параметр определяет, как будет работать эта связка. * **forge:** Является заменой прежнего словаря руд (Ore Dictionary). Их можно использовать для предоставления другим разработчикам доступа к Вашему моду (если им известно имя связки); +* **c:** Используется модами Minecraft Fabric для общепринятых связок (стандартная схема именования связок); * **minecraft:** Позволяет добавлять пользовательские предметы к ванильным связкам. Например, пользовательские брёвна можно добавить к ванильной связке брёвен (при указании имени `logs` и домена _minecraft_). * **mod:** Предназначен для группирования элементов мода для их внутреннего использования. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/ru_RU/tag/type.md b/plugins/mcreator-localization/help/ru_RU/tag/type.md index 7ef6c4b8710..d5055c6a6f9 100644 --- a/plugins/mcreator-localization/help/ru_RU/tag/type.md +++ b/plugins/mcreator-localization/help/ru_RU/tag/type.md @@ -1,4 +1,5 @@ * **Items:** группирует предметы для их совместного использования в рецептах, процедурах и т. д. Этот тип связки является заменой словаря руд; * **Blocks:** предназначен для случаев, когда нужно сгруппировать блоки, а не их предметы (_такая связка не может быть использована в рецептах_); * **Entities:** группирует сущности для их совместного использования; -* **Functions:** предназначен для объединения нескольких функций в группы. Одной из таких групп является связка "tick" в домене "minecraft". Функции в связке "tick" будут выполняться каждый игровой тик. \ No newline at end of file +* **Functions:** предназначен для объединения нескольких функций в группы. Одной из таких групп является связка "tick" в домене "minecraft". Функции в связке "tick" будут выполняться каждый игровой тик. +* **Типы урона:** этот тип связки используется для группировки типов урона. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/uk_UA/common/creative_tab.md b/plugins/mcreator-localization/help/uk_UA/common/creative_tab.md new file mode 100644 index 00000000000..495a8100e20 --- /dev/null +++ b/plugins/mcreator-localization/help/uk_UA/common/creative_tab.md @@ -0,0 +1,3 @@ +Тут ваш блок буде перебувати у творчому режимі. + +Використовуйте вкладки з префіксом CUSTOM:, щоб використовувати власні вкладки. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/uk_UA/common/generate_feature.md b/plugins/mcreator-localization/help/uk_UA/common/generate_feature.md new file mode 100644 index 00000000000..1d5c5e3c86c --- /dev/null +++ b/plugins/mcreator-localization/help/uk_UA/common/generate_feature.md @@ -0,0 +1 @@ +Якщо цей параметр увімкнено, елемент буде згенеровано у світі у вигляді можливості. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/uk_UA/common/gui_name.md b/plugins/mcreator-localization/help/uk_UA/common/gui_name.md new file mode 100644 index 00000000000..9e678379afc --- /dev/null +++ b/plugins/mcreator-localization/help/uk_UA/common/gui_name.md @@ -0,0 +1 @@ +Ігрова назва — це назва елемента мода, яка яка показується в ігровому меню, підказках елементів та інших місцях, де можливе візуальний показ назви. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/advancement/hide_display.md b/plugins/mcreator-localization/help/zh_CN/advancement/hide_display.md index 61552f25a48..f00f5660373 100644 --- a/plugins/mcreator-localization/help/zh_CN/advancement/hide_display.md +++ b/plugins/mcreator-localization/help/zh_CN/advancement/hide_display.md @@ -1 +1 @@ -勾选此选项以完全隐藏该进度的显示。 \ No newline at end of file +勾选此参数以完全隐藏该进度直至达成前。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/advancement/parent.md b/plugins/mcreator-localization/help/zh_CN/advancement/parent.md index 11052f119a6..dcac83d3f0b 100644 --- a/plugins/mcreator-localization/help/zh_CN/advancement/parent.md +++ b/plugins/mcreator-localization/help/zh_CN/advancement/parent.md @@ -1,3 +1,3 @@ 这是该进度的上游进度。 -使用“ No parent: root ”来开启新的进度选项卡。 \ No newline at end of file +使用“No parent: root”来开启新的进度选项卡。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/armor/max_damage_absorbed.md b/plugins/mcreator-localization/help/zh_CN/armor/max_damage_absorbed.md index 09b03999767..d507485fe3b 100644 --- a/plugins/mcreator-localization/help/zh_CN/armor/max_damage_absorbed.md +++ b/plugins/mcreator-localization/help/zh_CN/armor/max_damage_absorbed.md @@ -1,14 +1,15 @@ 该值决定盔甲的最大耐久,实际计算方式如下: -* 头盔:盔甲耐久度基数 * 13 -* 胸甲:盔甲耐久度基数 * 15 -* 护腿:盔甲耐久度基数 * 16 -* 靴子:盔甲耐久度基数 * 11 +* 头盔:可吸收的最大伤害量*11 +* 胸甲:可吸收的最大伤害量*16 +* 护腿:可吸收的最大伤害量*15 +* 靴子:可吸收的最大伤害量*13 -原版数值: +原版值: * 皮革盔甲:5 -* 锁链/铁盔甲:15 +* 锁链盔甲:15 +* 铁盔甲:15 * 金盔甲:7 * 钻石盔甲:33 * 下界合金盔甲:37 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/air_color.md b/plugins/mcreator-localization/help/zh_CN/biome/air_color.md index fca02ff9ba0..9c205eadd32 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/air_color.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/air_color.md @@ -1 +1 @@ -这个参数控制着这个生物群系天空的颜色。 \ No newline at end of file +该参数控制着该生物群系天空的颜色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/branch_block.md b/plugins/mcreator-localization/help/zh_CN/biome/branch_block.md index f1ed1a97d29..cbca7500565 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/branch_block.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/branch_block.md @@ -1 +1 @@ -这个参数用于指定自定义树木的树叶方块 \ No newline at end of file +该参数用于指定自定义树木的树叶方块 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/colors.md b/plugins/mcreator-localization/help/zh_CN/biome/colors.md index b4bd76e47f4..80b04e623dc 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/colors.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/colors.md @@ -1 +1 @@ -这个参数可以为您的生物群系自定义颜色。(无法修改游戏本体生物群系的颜色) \ No newline at end of file +该参数可以为您的生物群系自定义颜色。(无法修改游戏本体生物群系的颜色) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/coverage_estimate.md b/plugins/mcreator-localization/help/zh_CN/biome/coverage_estimate.md index 17b287b251f..8ff40de0668 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/coverage_estimate.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/coverage_estimate.md @@ -1,5 +1,5 @@ -这个字段决定了这个生物群系将覆盖多少面积。只有当生物群系的值在-1到1之间时才能正常工作,因为这是主世界生物群系使用的范围。 +该框决定了该生物群系将覆盖多少面积。只有当生物群系的值在-1到1之间时才能正常工作,因为这是主世界生物群系使用的范围。 -如果您的生物群系在下界或主世界的洞穴中使用,这个数值是无效的。 +如果您的生物群系在下界或主世界的洞穴中使用,该数值是无效的。 在自定义维度中使用生物群系时,覆盖度取决于该维度拥有的生物群系数量,以及该维度中生物群系的生成参数。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/foliage_color.md b/plugins/mcreator-localization/help/zh_CN/biome/foliage_color.md index 4bfe3f5173d..953c4cf0afa 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/foliage_color.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/foliage_color.md @@ -1 +1 @@ -这个参数控制这个生物群系中叶子的颜色。 \ No newline at end of file +该参数控制该生物群系中叶子的颜色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/fruits_block.md b/plugins/mcreator-localization/help/zh_CN/biome/fruits_block.md index 3d49a10057a..dd27c276844 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/fruits_block.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/fruits_block.md @@ -1,3 +1,3 @@ -这个参数控制用于可可豆和丛林树等水果的方块,以防止自定义树被启用。 +该参数控制用于可可豆和丛林树等水果的方块,以防止自定义树被启用。 选择空气来禁用果实。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/gen_humidity.md b/plugins/mcreator-localization/help/zh_CN/biome/gen_humidity.md index 239e500f50a..8cb3d2d535e 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/gen_humidity.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/gen_humidity.md @@ -1,4 +1,4 @@ -这个参数控制生物群系的生成,而不是气候。 +该参数控制生物群系的生成,而不是气候。 湿度相近的生物群系在生成时会靠得更近,并会争夺世界上的同一位置。 太相似的值将导致一些生物群系不生成。 diff --git a/plugins/mcreator-localization/help/zh_CN/biome/gen_temperature.md b/plugins/mcreator-localization/help/zh_CN/biome/gen_temperature.md index 563bf6b3b08..0709dfae63d 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/gen_temperature.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/gen_temperature.md @@ -1,4 +1,4 @@ -这个参数控制生物群系的生成,而不是气候。 +该参数控制生物群系的生成,而不是气候。 温度相近的生物群系在生成时会靠得更近,并会争夺世界上的同一位置。 太相近的值将导致一些生物群系不生成。 diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_bastion_remnants.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_bastion_remnants.md index 0e9d0b798c0..5bfed3960cc 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_bastion_remnants.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_bastion_remnants.md @@ -1 +1 @@ -选择这个设置在您的生物群系中将会有堡垒遗迹。 \ No newline at end of file +选择该设置在您的生物群系中将会有堡垒遗迹。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_buried_treasures.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_buried_treasures.md index 0626f3f179c..e80b0a3b5c8 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_buried_treasures.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_buried_treasures.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有埋藏的宝藏。 \ No newline at end of file +选择该设置在您的生物群系中有埋藏的宝藏。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_desert_pyramids.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_desert_pyramids.md index 41a0751e14a..ead57ba0387 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_desert_pyramids.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_desert_pyramids.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有沙漠神殿。 \ No newline at end of file +选择该设置在您的生物群系中有沙漠神殿。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_end_cities.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_end_cities.md index d9b99b8eeaa..138570a2ad1 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_end_cities.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_end_cities.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有末地城。 \ No newline at end of file +选择该设置在您的生物群系中有末地城。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_igloo.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_igloo.md index 054339b111a..dc9a4c80e6c 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_igloo.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_igloo.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有雪屋。 \ No newline at end of file +选择该设置在您的生物群系中有雪屋。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_jungle_temples.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_jungle_temples.md index 866f60b2302..26892a29c1c 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_jungle_temples.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_jungle_temples.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有丛林神庙。 \ No newline at end of file +选择该设置在您的生物群系中有丛林神庙。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_lakes.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_lakes.md index e44316974c5..7b3359b624a 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_lakes.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_lakes.md @@ -1 +1 @@ -这个参数控制是否应该在这个生物群系中生成湖泊。 \ No newline at end of file +该参数控制是否应该在该生物群系中生成湖泊。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_mineshafts.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_mineshafts.md index 14095e05887..4e227327db1 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_mineshafts.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_mineshafts.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有废弃矿井。 \ No newline at end of file +选择该设置在您的生物群系中有废弃矿井。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_mineshafts_mesa.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_mineshafts_mesa.md index 794ed956aeb..3f8aa6e51ce 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_mineshafts_mesa.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_mineshafts_mesa.md @@ -1 +1 @@ -选择这个设置在您的生物群系有恶地风格的废弃矿井。 \ No newline at end of file +选择该设置在您的生物群系有恶地风格的废弃矿井。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_nether.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_nether.md index f05fc1a2f68..d75ac379f91 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_nether.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_nether.md @@ -1 +1 @@ -选中这个项可以使这个生物群系在下界中生成。 \ No newline at end of file +选中该项可以使该生物群系在下界中生成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_nether_bridges.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_nether_bridges.md index 1fb72e56261..d07ad8239d0 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_nether_bridges.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_nether_bridges.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有下界堡垒。 \ No newline at end of file +选择该设置在您的生物群系中有下界堡垒。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_nether_fossils.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_nether_fossils.md index 313b8af2562..a04c5ecb2db 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_nether_fossils.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_nether_fossils.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有远古残骸。 \ No newline at end of file +选择该设置在您的生物群系中有下界化石。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_ocean_monuments.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_ocean_monuments.md index f46a150b142..9ba7b4b18b4 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_ocean_monuments.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_ocean_monuments.md @@ -1 +1 @@ -选择这个设置在您的生物群系中生成海底神殿。 \ No newline at end of file +选择该设置在您的生物群系中生成海底神殿。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_ocean_ruins.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_ocean_ruins.md index bd68da767c6..f75cc5c33c9 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_ocean_ruins.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_ocean_ruins.md @@ -1,4 +1,4 @@ -选择这个设置在您的生物群系中有海底废墟。 -* NONE: 无海底废墟生成 +选择该设置在您的生物群系中有海底废墟。 +* NONE:无海底废墟生成 * COLD:将生成由石头制成的海洋废墟 -* WARM: 将生成由沙石制成的海洋废墟 \ No newline at end of file +* WARM:将生成由沙石制成的海洋废墟 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_overworld.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_overworld.md index 19654b246b3..e029240b619 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_overworld.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_overworld.md @@ -1 +1 @@ -如果您只想在自定义维度中使用这个生物群系,请禁用这个选项。 \ No newline at end of file +如果您只想在自定义维度中使用该生物群系,请禁用该选项。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_overworld_caves.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_overworld_caves.md index 45081dc0e06..7c922d90182 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_overworld_caves.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_overworld_caves.md @@ -1 +1 @@ -勾选这个选项可以让这个生物群系在主世界的地下(洞穴中)生成。 \ No newline at end of file +勾选该选项可以让该生物群系在主世界的地下(洞穴中)生成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_pillager_outposts.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_pillager_outposts.md index d3c50227d47..ba7fc08221b 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_pillager_outposts.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_pillager_outposts.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有掠夺者前哨站。 \ No newline at end of file +选择该设置在您的生物群系中有掠夺者前哨站。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_ruined_portals.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_ruined_portals.md index 5b059d73c91..1b73df2670d 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_ruined_portals.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_ruined_portals.md @@ -1 +1 @@ -这个设置允许您在您的生物群系中生成废弃传送门。 \ No newline at end of file +该设置允许您在您的生物群系中生成废弃传送门。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_shipwrecks.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_shipwrecks.md index 11f85073a0e..fa2fa344a85 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_shipwrecks.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_shipwrecks.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有沉船。 \ No newline at end of file +选择该设置在您的生物群系中有沉船。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_shipwrecks_beached.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_shipwrecks_beached.md index 7fa6682ce30..39e6adbee92 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_shipwrecks_beached.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_shipwrecks_beached.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有搁浅的沉船。 \ No newline at end of file +选择该设置在您的生物群系中有搁浅的沉船。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_strongholds.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_strongholds.md index 0264d45e19a..3f2d05126e1 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_strongholds.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_strongholds.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有末地要塞。 \ No newline at end of file +选择该设置在您的生物群系中有末地要塞。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_swamp_huts.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_swamp_huts.md index 8edf4b30b01..9eb4ce8ffec 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_swamp_huts.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_swamp_huts.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有沼泽小屋。 \ No newline at end of file +选择该设置在您的生物群系中有沼泽小屋。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/generate_woodland_mansions.md b/plugins/mcreator-localization/help/zh_CN/biome/generate_woodland_mansions.md index 3328360e33f..92de25bec39 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/generate_woodland_mansions.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/generate_woodland_mansions.md @@ -1 +1 @@ -选择这个设置在您的生物群系中有林地府邸。 \ No newline at end of file +选择该设置在您的生物群系中有林地府邸。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/grass_color.md b/plugins/mcreator-localization/help/zh_CN/biome/grass_color.md index f4cdc271d8e..601286049d0 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/grass_color.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/grass_color.md @@ -1,3 +1,3 @@ -这个参数控制了这个生物群系中草的颜色。 +该参数控制了该生物群系中草的颜色。 -这个参数也会改变其他植物(叶子)的颜色。 \ No newline at end of file +该参数也会改变其他植物(叶子)的颜色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/ground_block.md b/plugins/mcreator-localization/help/zh_CN/biome/ground_block.md index 9b28dd9108b..2b7f75aa900 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/ground_block.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/ground_block.md @@ -2,4 +2,4 @@ 通常来说,原版的草或模组内制作的草在这里被用于大多数生物群系。 -这个方块应该有 GRASS 材质,并被标记在 minecraft:dirt 方块标签中 Forge 模组的植物和树木在生物群系中正常生成。 \ No newline at end of file +该方块应该有 GRASS 材质,并被标记在 minecraft:dirt 方块标签中 Forge 模组的植物和树木在生物群系中正常生成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/minimal_tree_height.md b/plugins/mcreator-localization/help/zh_CN/biome/minimal_tree_height.md index 568f0c97345..5a0c28b4cba 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/minimal_tree_height.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/minimal_tree_height.md @@ -1,3 +1,3 @@ -这个参数定义生成时树干的最小高度。 +该参数定义生成时树干的最小高度。 仅在选择自定义树定义时应用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/mood_sound_delay.md b/plugins/mcreator-localization/help/zh_CN/biome/mood_sound_delay.md index c36136034c3..23bbfd8a279 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/mood_sound_delay.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/mood_sound_delay.md @@ -1 +1 @@ -这个值定义了声音播放(循环)之前的时间,以刻为单位。 \ No newline at end of file +该值定义了声音播放(循环)之前的时间,以刻为单位。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/music.md b/plugins/mcreator-localization/help/zh_CN/biome/music.md index 81993ce3212..009862c9835 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/music.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/music.md @@ -1 +1 @@ -这是生物群系的音乐。这个声音将随机播放。 \ No newline at end of file +这是生物群系的音乐。该声音将随机播放。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/particle_probability.md b/plugins/mcreator-localization/help/zh_CN/biome/particle_probability.md index 47862691c48..0d9a60db36c 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/particle_probability.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/particle_probability.md @@ -1,3 +1,3 @@ 生成粒子的概率。 -注意:该值在代码中除以100。 \ No newline at end of file +注:该值在代码中除以100。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/particle_type.md b/plugins/mcreator-localization/help/zh_CN/biome/particle_type.md index fb10c18dcb0..464280b331a 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/particle_type.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/particle_type.md @@ -1 +1 @@ -在这个生物群系中生成的粒子。 \ No newline at end of file +在该生物群系中生成的粒子。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/raining_possibility.md b/plugins/mcreator-localization/help/zh_CN/biome/raining_possibility.md index c336f61ce13..e7f8cfd90b1 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/raining_possibility.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/raining_possibility.md @@ -1 +1 @@ -这个参数控制生物群系内降雨的可能性。 \ No newline at end of file +该参数控制生物群系内降雨的可能性。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/spawn_particle.md b/plugins/mcreator-localization/help/zh_CN/biome/spawn_particle.md index 878bf3865ea..bbacf2bbece 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/spawn_particle.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/spawn_particle.md @@ -1 +1 @@ -勾选这个参数可启用生物群系中环境粒子的生成。 \ No newline at end of file +勾选该参数可启用生物群系中环境粒子的生成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/stem_block.md b/plugins/mcreator-localization/help/zh_CN/biome/stem_block.md index 33de6542a7f..62ddf72bb28 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/stem_block.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/stem_block.md @@ -1 +1 @@ -如果选择了自定义树,则这个参数控制用于制作树的主干方块。 \ No newline at end of file +如果选择了自定义树,则该参数控制用于制作树的主干方块。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/tree_definition.md b/plugins/mcreator-localization/help/zh_CN/biome/tree_definition.md index e933a4add42..b45647953a7 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/tree_definition.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/tree_definition.md @@ -1 +1 @@ -该参数控制是否使用原版树的高度和方块数据,或者使用下面字段提供的数据。 \ No newline at end of file +该参数控制是否使用原版树的高度和方块数据,或者使用下面框提供的数据。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/trees_per_chunk.md b/plugins/mcreator-localization/help/zh_CN/biome/trees_per_chunk.md index 8fb6ca6104d..dbf3e99c9ed 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/trees_per_chunk.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/trees_per_chunk.md @@ -1,3 +1,3 @@ -这个参数控制每个生物群系区块树的数量(您选择的类型)。 +该参数控制每个生物群系区块树的数量(您选择的类型)。 设置为0则没有树。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/underground_block.md b/plugins/mcreator-localization/help/zh_CN/biome/underground_block.md index 78c178d351b..4edc8b905c5 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/underground_block.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/underground_block.md @@ -2,4 +2,4 @@ 一般来说,原版泥土或自定义泥土在这里被用于大多数生物群系。 -这个方块应该标记在 minecraft:dirt 方块标签中 Forge 模组的植物和树木在生物群系中正常生成。 \ No newline at end of file +该方块应该标记在 minecraft:dirt 方块标签中 Forge 模组的植物和树木在生物群系中正常生成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/underwater_block.md b/plugins/mcreator-localization/help/zh_CN/biome/underwater_block.md index ec7cd439ed2..9af80770039 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/underwater_block.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/underwater_block.md @@ -1 +1 @@ -这个参数控制在水下的方块。大多数原版生物群系使用泥土或砂砾来实现这一点。 \ No newline at end of file +该参数控制在水下的方块。大多数原版生物群系使用泥土或砂砾来实现这一点。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/village.md b/plugins/mcreator-localization/help/zh_CN/biome/village.md index ec6d0bc1cf8..64888cf623c 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/village.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/village.md @@ -1 +1 @@ -这个设置允许您在您的生物群系中生成原版村庄。 \ No newline at end of file +该设置允许您在您的生物群系中生成原版村庄。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/vines_block.md b/plugins/mcreator-localization/help/zh_CN/biome/vines_block.md index 09bf6601c79..9318afe41d8 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/vines_block.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/vines_block.md @@ -1,3 +1,3 @@ -这个参数控制用来替换藤蔓的方块。 +该参数控制用来替换藤蔓的方块。 选择空气则无藤蔓。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/water_color.md b/plugins/mcreator-localization/help/zh_CN/biome/water_color.md index 5935e9b5b89..2fca94a327e 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/water_color.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/water_color.md @@ -1 +1 @@ -这个参数控制着生物群系中水的颜色。 \ No newline at end of file +该参数控制着生物群系中水的颜色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/biome/water_fog_color.md b/plugins/mcreator-localization/help/zh_CN/biome/water_fog_color.md index 30472681f0c..187c582c037 100644 --- a/plugins/mcreator-localization/help/zh_CN/biome/water_fog_color.md +++ b/plugins/mcreator-localization/help/zh_CN/biome/water_fog_color.md @@ -1 +1 @@ -这个参数控制生物群系内水雾的颜色。 \ No newline at end of file +该参数控制生物群系内水雾的颜色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/ai_path_node_type.md b/plugins/mcreator-localization/help/zh_CN/block/ai_path_node_type.md index d24f70fa5d4..5ba4451b437 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/ai_path_node_type.md +++ b/plugins/mcreator-localization/help/zh_CN/block/ai_path_node_type.md @@ -1,3 +1,3 @@ -这个参数用于控制生物的 AI 导航对方块的反应。 +该参数用于控制生物的AI导航对方块的反应。 -不同的 AI 路径节点类型会导致在临近方块时,做出的不同决定,这取决于 AI 路径节点类型。 \ No newline at end of file +不同的AI路径节点类型会导致在接近一些方块时做出的不同决定,这些都取决于AI路径节点类型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/base.md b/plugins/mcreator-localization/help/zh_CN/block/base.md index 262028b5b38..1d245573aec 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/base.md +++ b/plugins/mcreator-localization/help/zh_CN/block/base.md @@ -1,3 +1,3 @@ 如果使用了基础方块,一些参数可能会被禁用,或者因为基础方块要求它们使用基础方块的默认值而无法正常工作。 -只有在完全可用的情况下才使用这个参数,大多数方块应该设置为默认基础方块。 \ No newline at end of file +只有在完全可用的情况下才使用该参数,大多数方块应该设置为默认基础方块。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/bind_gui.md b/plugins/mcreator-localization/help/zh_CN/block/bind_gui.md index 5cc2ea19b07..c1696133c5a 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/bind_gui.md +++ b/plugins/mcreator-localization/help/zh_CN/block/bind_gui.md @@ -1 +1 @@ -这个参数控制您方块的 GUI 。例如,需要制作一个箱子或工作台。 \ No newline at end of file +该参数控制您方块的 GUI 。例如,需要制作一个箱子或工作台。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/bind_gui_open.md b/plugins/mcreator-localization/help/zh_CN/block/bind_gui_open.md index 58f0dc46a58..e4fcf73049d 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/bind_gui_open.md +++ b/plugins/mcreator-localization/help/zh_CN/block/bind_gui_open.md @@ -1 +1 @@ -勾选后,右键该方块将打开它绑定的 GUI 界面。 \ No newline at end of file +勾选后,右击该方块将打开它绑定的 GUI 界面。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/bonemeal_success_condition.md b/plugins/mcreator-localization/help/zh_CN/block/bonemeal_success_condition.md index 0d24e3f5039..878a46ed8f4 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/bonemeal_success_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/block/bonemeal_success_condition.md @@ -1,3 +1,3 @@ -这个条件决定了在这个方块上使用骨粉是否成功。 +该条件决定了在该方块上使用骨粉是否成功。 如果返回 false,骨粉将被消耗,但是 "${l10n.t("elementgui.common.event_on_bonemeal_success")}" 流程不会被执行。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/bonemeal_target_condition.md b/plugins/mcreator-localization/help/zh_CN/block/bonemeal_target_condition.md index b859e334d7c..3a8eb3fb3bc 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/bonemeal_target_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/block/bonemeal_target_condition.md @@ -1,3 +1,3 @@ -这种情况决定了骨粉是否可以在这个方块上使用。 +这种情况决定了骨粉是否可以在该方块上使用。 如果返回 false,骨粉不会被消耗,也不会发生任何事情。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/bounding_box.md b/plugins/mcreator-localization/help/zh_CN/block/bounding_box.md index ccbe2f82c1b..89a95fb4b87 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/bounding_box.md +++ b/plugins/mcreator-localization/help/zh_CN/block/bounding_box.md @@ -1,5 +1,5 @@ -如果是自定义模型,方块的碰撞箱和朝向定义了该方块的碰撞箱。如果没有使用自定义模型,它也可以将一个普通方块的碰撞箱从 16 * 16 * 16 调整到其他不同的大小。 +如果是自定义模型,方块的碰撞箱和朝向定义了该方块的碰撞箱。如果没有使用自定义模型,它也可以将一个普通方块的碰撞箱从 16 * 16 * 16 调整到其他不同的尺寸。 -这只会设置方块的碰撞箱,而不是模型形状与大小。 +这只会设置方块的碰撞箱,而不是模型形状与尺寸。 -要了解碰撞箱参数的具体信息,请点击[这里](https://mcreator.net/wiki/block-dimensions-and-bonding-box)。 \ No newline at end of file +要了解碰撞箱参数的具体信息,请单击[这里](https://mcreator.net/wiki/block-dimensions-and-bonding-box)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/can_plants_grow.md b/plugins/mcreator-localization/help/zh_CN/block/can_plants_grow.md index 9e8cfdef888..db056c352b0 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/can_plants_grow.md +++ b/plugins/mcreator-localization/help/zh_CN/block/can_plants_grow.md @@ -1 +1 @@ -勾选后,部分植物将可以在这个方块上种植。 \ No newline at end of file +勾选后,部分植物将可以在该方块上种植。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/color_on_map.md b/plugins/mcreator-localization/help/zh_CN/block/color_on_map.md index 89cb366f65f..3a9e49729fd 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/color_on_map.md +++ b/plugins/mcreator-localization/help/zh_CN/block/color_on_map.md @@ -2,4 +2,4 @@ 如果设置为 Default,则会根据该方块属性中“纹理”的选择来选择颜色。 -要查看所有条目的准确 RGB 颜色,请在[这里](https://mcreator.net/wiki/list-block-map-colors)阅读 Wiki 页面。 \ No newline at end of file +要查看准确的RGB颜色,请在[这里](https://mcreator.net/wiki/list-block-map-colors)阅读Wiki页面。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/comparator_data.md b/plugins/mcreator-localization/help/zh_CN/block/comparator_data.md index 4d223d82d3e..909e925c718 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/comparator_data.md +++ b/plugins/mcreator-localization/help/zh_CN/block/comparator_data.md @@ -1 +1 @@ -勾选后,红石比较器将会根据方块内存储的物品数量来输出红石信号。 \ No newline at end of file +如果选中该参数,红石比较器将会根据方块内存储的物品数量来输出红石信号。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/connected_sides.md b/plugins/mcreator-localization/help/zh_CN/block/connected_sides.md index f29e2aa3035..2b1fba93b08 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/connected_sides.md +++ b/plugins/mcreator-localization/help/zh_CN/block/connected_sides.md @@ -1,3 +1,3 @@ -这个参数只能与透明方块结合使用。 +该参数只能与透明方块结合使用。 这将使方块的内部两面连接起来,类似于玻璃、冰和其他类似方块的样子。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/creative_pick_item.md b/plugins/mcreator-localization/help/zh_CN/block/creative_pick_item.md index 96c6b0833ac..d0cd7aa6760 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/creative_pick_item.md +++ b/plugins/mcreator-localization/help/zh_CN/block/creative_pick_item.md @@ -1 +1 @@ -这个参数将配置在创造模式下使用鼠标中键获取该方块时得到的物品,留空则获取该方块的物品形式。 \ No newline at end of file +该参数将配置在创造模式下使用鼠标中键获取该方块时得到的物品,留空则获取该方块的物品形式。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/custom_drop.md b/plugins/mcreator-localization/help/zh_CN/block/custom_drop.md index 03b857c52f5..b7ad182de31 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/custom_drop.md +++ b/plugins/mcreator-localization/help/zh_CN/block/custom_drop.md @@ -1,3 +1,3 @@ -这个参数定义了该方块被挖掘/破坏后掉落的物品,留空则掉落方块或物品本身。 +该参数定义了该方块被挖掘/破坏后掉落的物品,留空则掉落方块或物品本身。 如果直接被替换/销毁则不掉落物品,如果设置了挖掘等级也需要使用对应挖掘等级的工具挖掘才可以掉落。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/disable_offset.md b/plugins/mcreator-localization/help/zh_CN/block/disable_offset.md index e987d0892e5..00db367faef 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/disable_offset.md +++ b/plugins/mcreator-localization/help/zh_CN/block/disable_offset.md @@ -1,3 +1,3 @@ -如果该方块启用随机模型偏移,除非选中这个选项,否则其碰撞箱也将被移动。 如果碰撞箱由于偏移而偏移到到相邻的方块中,请勾选这个参数以防止这种情况。 +如果该方块启用随机模型偏移,除非选中该选项,否则其碰撞箱也将被移动。 如果碰撞箱由于偏移而偏移到到相邻的方块中,请勾选该参数以防止这种情况。 例如对于竹子为 False,对于高草丛为 True \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/display_tick_update.md b/plugins/mcreator-localization/help/zh_CN/block/display_tick_update.md index 2588f2e1cc2..7cc2df8b1e5 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/display_tick_update.md +++ b/plugins/mcreator-localization/help/zh_CN/block/display_tick_update.md @@ -1,3 +1,3 @@ 随机触发一个流程。 -这个触发器只在客户端触发,所以除了播放声音和放置粒子之外,没有任何关于世界的修改应该从这里完成。 \ No newline at end of file +该触发器只在客户端触发,所以除了播放声音和放置粒子之外,没有任何关于世界的修改应该从这里完成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/drop_amount.md b/plugins/mcreator-localization/help/zh_CN/block/drop_amount.md index ab35c9bc95f..9dedb27f914 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/drop_amount.md +++ b/plugins/mcreator-localization/help/zh_CN/block/drop_amount.md @@ -1 +1 @@ -这个参数控制当该方块被破坏时,该方块将掉落多少物品。 \ No newline at end of file +该参数控制当该方块被破坏时,该方块将掉落多少物品。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/drop_inventory_items.md b/plugins/mcreator-localization/help/zh_CN/block/drop_inventory_items.md index 005f7b3eb88..791376fc8b5 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/drop_inventory_items.md +++ b/plugins/mcreator-localization/help/zh_CN/block/drop_inventory_items.md @@ -1,3 +1,3 @@ -如果您希望在方块损坏时掉落内部的物品,请选中这个参数。 +如果您希望在方块损坏时掉落内部的物品,请选中该参数。 -例如箱子、熔炉使用这个参数。 \ No newline at end of file +例如箱子、熔炉使用该参数。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/emissive_rendering.md b/plugins/mcreator-localization/help/zh_CN/block/emissive_rendering.md index ecd2777647f..fcb175d783d 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/emissive_rendering.md +++ b/plugins/mcreator-localization/help/zh_CN/block/emissive_rendering.md @@ -1 +1 @@ -选中这个属性启用发光效果(类似于岩浆块)应用到您的方块。 \ No newline at end of file +选中该属性启用发光效果(类似于岩浆块)应用到您的方块。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/emits_redstone.md b/plugins/mcreator-localization/help/zh_CN/block/emits_redstone.md index 5a72860623a..a66b0dfda62 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/emits_redstone.md +++ b/plugins/mcreator-localization/help/zh_CN/block/emits_redstone.md @@ -1 +1 @@ -如果勾选这个参数,这个方块将能够输出红石能量。 \ No newline at end of file +如果勾选该参数,该方块将能够输出红石能量。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/enable_pitch.md b/plugins/mcreator-localization/help/zh_CN/block/enable_pitch.md index f46701c4254..1a933707260 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/enable_pitch.md +++ b/plugins/mcreator-localization/help/zh_CN/block/enable_pitch.md @@ -1 +1 @@ -如果您的方块水平旋转,请选中此选项以允许它面向任何方向的地板、墙壁或天花板。 此选项用于拉杆、砂轮等。 \ No newline at end of file +如果您想要让方块水平旋转,请选中该框以允许它面向任何方向。 此选项用于拉杆、砂轮等。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/enchantments_bonus.md b/plugins/mcreator-localization/help/zh_CN/block/enchantments_bonus.md index 3e160b1a175..81aac8ef1f0 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/enchantments_bonus.md +++ b/plugins/mcreator-localization/help/zh_CN/block/enchantments_bonus.md @@ -1,3 +1,3 @@ -这个参数控制方块对附魔台的能力加成。 +该参数控制方块对附魔台的能力加成。 书架的能量加成是 1,普通方块的能量加成是 0。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/flammability.md b/plugins/mcreator-localization/help/zh_CN/block/flammability.md index 2e323181bb5..cc76a35fd9e 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/flammability.md +++ b/plugins/mcreator-localization/help/zh_CN/block/flammability.md @@ -1,4 +1,4 @@ -这个参数决定了方块被火燃尽的速度。 +该参数决定了方块被火燃尽的速度。 原版例子: * 原木的可燃性为 5 diff --git a/plugins/mcreator-localization/help/zh_CN/block/fluid_overlay.md b/plugins/mcreator-localization/help/zh_CN/block/fluid_overlay.md index afa13976de4..158414a64d6 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/fluid_overlay.md +++ b/plugins/mcreator-localization/help/zh_CN/block/fluid_overlay.md @@ -1,3 +1,3 @@ 该参数只能与透明方块组合使用。 -如果选中这个选项,则方块在浸入水中时将不会显示流体纹理,类似于玻璃。 \ No newline at end of file +如果选中该选项,则方块在浸入水中时将不会显示流体纹理,类似于玻璃。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/gen_height.md b/plugins/mcreator-localization/help/zh_CN/block/gen_height.md index f3e4bc76246..56504346298 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/gen_height.md +++ b/plugins/mcreator-localization/help/zh_CN/block/gen_height.md @@ -1,4 +1,4 @@ -这个参数控制这个方块可以生成的 Y 高度范围。 +该参数控制该方块可以生成的 Y 高度范围。 原版生成高度范围: * 煤矿 — 0 ~ 256 diff --git a/plugins/mcreator-localization/help/zh_CN/block/gen_replace_blocks.md b/plugins/mcreator-localization/help/zh_CN/block/gen_replace_blocks.md index caa2e836178..865cf219416 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/gen_replace_blocks.md +++ b/plugins/mcreator-localization/help/zh_CN/block/gen_replace_blocks.md @@ -1,3 +1,3 @@ 生成该方块时可以替换的方块的列表。 -如果您让这个列表为空,方块将不会自然生成,因为它将无法将自己放置在世界上。 \ No newline at end of file +如果您让该列表为空,方块将不会自然生成,因为它将无法将自己放置在世界上。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/generation_shape.md b/plugins/mcreator-localization/help/zh_CN/block/generation_shape.md index 867522cdff9..95e2438b6d2 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/generation_shape.md +++ b/plugins/mcreator-localization/help/zh_CN/block/generation_shape.md @@ -1,4 +1,4 @@ 生成的形状允许根据方块的高度改变方块的生成方式。 -* **矩形(Uniform)**:这是一个简单的矩形。这是 Minecraft 1.18 之前使用的形状。 -* **三角形(Triangle)**:这种形状将生成像三角形的块。最有可能得到这个方块的层数将是最小高度和最大高度的中间。请记住,最大和最小高度可以高于或低于世界极限。 \ No newline at end of file +* 矩形(Uniform):这是一个简单的矩形。这是Minecraft 1.18 之前使用的形状。 +* Triangle:这种形状将生成像三角形的块。最有可能得到该方块的层数将是最小高度和最大高度的中间。请记住,最大和最小高度可以高于或低于世界极限。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/hardness.md b/plugins/mcreator-localization/help/zh_CN/block/hardness.md index 5781a132340..12ea07ec16f 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/hardness.md +++ b/plugins/mcreator-localization/help/zh_CN/block/hardness.md @@ -1 +1 @@ -这个参数控制它需要多长时间来挖掘方块。 一个更高的值意味着需要更长的时间来挖掘这个方块。 \ No newline at end of file +该参数控制它需要多长时间来挖掘方块。 一个更高的值意味着需要更长的时间来挖掘该方块。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/harvest_level.md b/plugins/mcreator-localization/help/zh_CN/block/harvest_level.md index 05092865394..28d24612fb8 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/harvest_level.md +++ b/plugins/mcreator-localization/help/zh_CN/block/harvest_level.md @@ -1,4 +1,4 @@ -这是打破这个方块所需要的最小工具收集等级(即挖掘等级)。 +这是打破该方块所需要的最小工具收集等级(即挖掘等级)。 * 0 为木制 * 1 为石质 diff --git a/plugins/mcreator-localization/help/zh_CN/block/harvest_tool.md b/plugins/mcreator-localization/help/zh_CN/block/harvest_tool.md index b4765ba8d95..f54498e252e 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/harvest_tool.md +++ b/plugins/mcreator-localization/help/zh_CN/block/harvest_tool.md @@ -1,5 +1,5 @@ -这个参数控制使用什么类型的工具来挖掘该方块。 +该参数控制使用什么类型的工具来挖掘该方块。 矿石用镐子(pickaxe),木头用斧头(axe),泥土用锹(shovel)。 -如果设置为“Not specified(未指定)”,玩家将能够用手打破这个方块。 +如果设置为“Not specified(未指定)”,玩家将能够用手打破该方块。 diff --git a/plugins/mcreator-localization/help/zh_CN/block/has_gravity.md b/plugins/mcreator-localization/help/zh_CN/block/has_gravity.md index 0e4e852a508..25fafc3ede1 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/has_gravity.md +++ b/plugins/mcreator-localization/help/zh_CN/block/has_gravity.md @@ -1 +1 @@ -如果勾选了这个参数,方块就会像沙子一样掉下来。 \ No newline at end of file +如果选中了该参数,方块就会像沙子一样掉下来。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/has_inventory.md b/plugins/mcreator-localization/help/zh_CN/block/has_inventory.md index e1987ab9e5d..979fa83a08f 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/has_inventory.md +++ b/plugins/mcreator-localization/help/zh_CN/block/has_inventory.md @@ -1,8 +1,8 @@ -这个参数将为您的方块提供一个物品栏(或者背包)。该方块将是一个方块实体。 +该参数将为您的方块提供一个物品栏(或者背包),使方块将是一个方块实体。 -该参数启用如下特性: -* 方块拥有 NBT 标签 -* 用于方块物品存储的物品栏 -* 与比较器交互 +该参数启用后会有如下特性: +* 方块拥有NBT标签 +* 有用于存储的物品栏(即变成容器) +* 可以与比较器交互 -如果不选中这个参数,这些地物将无法工作。 \ No newline at end of file +如果不选中该参数,这些地物将无法工作。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/has_transparency.md b/plugins/mcreator-localization/help/zh_CN/block/has_transparency.md index 83409eb387c..a5283abf735 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/has_transparency.md +++ b/plugins/mcreator-localization/help/zh_CN/block/has_transparency.md @@ -3,7 +3,7 @@ * 不是一个固体/自定义的形状, * 或是透明的纹理。 -请检查这个参数。 如果您选中这个框,方块将: +请检查该参数。 如果您选中该框,方块将: * 不发出红石能量, * 禁用破坏, diff --git a/plugins/mcreator-localization/help/zh_CN/block/hit_sound.md b/plugins/mcreator-localization/help/zh_CN/block/hit_sound.md index f76aac3380c..28476354b0a 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/hit_sound.md +++ b/plugins/mcreator-localization/help/zh_CN/block/hit_sound.md @@ -1,3 +1,3 @@ 这是玩家破坏方块时发出的声音。 -注意:这个声音将循环播放,直到方块被破坏。 \ No newline at end of file +注:该声音将循环播放,直到方块被破坏。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/inventory_size.md b/plugins/mcreator-localization/help/zh_CN/block/inventory_size.md index 6b59b3eb63f..0ae26086242 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/inventory_size.md +++ b/plugins/mcreator-localization/help/zh_CN/block/inventory_size.md @@ -1,3 +1,3 @@ -这个参数控制方块将用于内部物品栏的物品槽数量。 +该参数控制方块将用于内部物品栏的物品槽数量。 -如果方块绑定到 GUI,请将这个值设置为 ` GUI中最大的物品槽号 + 1 ` 。 \ No newline at end of file +如果方块绑定到 GUI,请将该值设置为 ` GUI中最大的物品槽号 + 1 ` 。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/inventory_stack_size.md b/plugins/mcreator-localization/help/zh_CN/block/inventory_stack_size.md index 435762f1288..d8d2ce5a006 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/inventory_stack_size.md +++ b/plugins/mcreator-localization/help/zh_CN/block/inventory_stack_size.md @@ -1,3 +1,3 @@ -该参数控制物品可以放置在其内部物品栏储存槽中的堆栈的最大大小。 +该参数控制物品可以放置在其内部物品栏槽位中的堆栈的最大数量。 -请记住,该参数与最大物品堆栈大小之间的较小数字决定了实际的最大堆栈大小。 \ No newline at end of file +请记住,该参数与最大物品堆栈数量之间的较小数字决定了实际的最大堆栈数量。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/is_item_tinted.md b/plugins/mcreator-localization/help/zh_CN/block/is_item_tinted.md index 5f11511bf2f..c7a5ea7c756 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/is_item_tinted.md +++ b/plugins/mcreator-localization/help/zh_CN/block/is_item_tinted.md @@ -1,3 +1,3 @@ -如果选中这个选项,则当该方块在物品槽中时,将对其应用与色调类型匹配的固定色调。 +如果选中该选项,则当该方块在物品槽中时,将对其应用与色调类型匹配的固定色调。 当物品的纹理被指定时,着色也会被应用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/is_ladder.md b/plugins/mcreator-localization/help/zh_CN/block/is_ladder.md index 5d478485f6d..76a8bf37bc3 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/is_ladder.md +++ b/plugins/mcreator-localization/help/zh_CN/block/is_ladder.md @@ -1,5 +1,5 @@ 如果勾选,实体将能够爬上方块。 -方块的宽度和深度需要小于1才能使该参数生效,这样方块中的碰撞才能被正确检测。如果使用这个参数,则更改碰撞箱设置以匹配这个参数。 +方块的宽度和深度需要小于1才能使该参数生效,这样方块中的碰撞才能被正确检测。如果使用该参数,则更改碰撞箱设置以匹配该参数。 原版例子:梯子和藤蔓 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/is_waterloggable.md b/plugins/mcreator-localization/help/zh_CN/block/is_waterloggable.md index 58acbd62007..d6bd56c7f31 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/is_waterloggable.md +++ b/plugins/mcreator-localization/help/zh_CN/block/is_waterloggable.md @@ -1,3 +1,3 @@ -如果勾选这个参数,水将被允许放置在方块内(即为含水方块)。 +如果勾选该参数,水将被允许放置在方块内(即为含水方块)。 -原版示例: 半砖、楼梯等。 +原版示例:半砖、楼梯等。 diff --git a/plugins/mcreator-localization/help/zh_CN/block/item_texture.md b/plugins/mcreator-localization/help/zh_CN/block/item_texture.md index 20681566d18..47a03607ee0 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/item_texture.md +++ b/plugins/mcreator-localization/help/zh_CN/block/item_texture.md @@ -1,3 +1,3 @@ -这个可选属性将更改物品栏中的方块的纹理。 +该可选属性将更改物品栏中的方块的纹理。 通常用于门或自定义模型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/light_opacity.md b/plugins/mcreator-localization/help/zh_CN/block/light_opacity.md index bd38e160248..394ad6e8b2d 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/light_opacity.md +++ b/plugins/mcreator-localization/help/zh_CN/block/light_opacity.md @@ -1 +1 @@ -这个属性决定了当光线穿过这个方块时,亮度降低了多少。例如,值为 15 将阻止所有的光源,值为 0 将使方块完全透光。 +该属性决定了当光线穿过该方块时,亮度降低了多少。例如,值为 15 将阻止所有的光源,值为 0 将使方块完全透光。 diff --git a/plugins/mcreator-localization/help/zh_CN/block/luminance.md b/plugins/mcreator-localization/help/zh_CN/block/luminance.md index f3fb3a2b239..bfce0b640c7 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/luminance.md +++ b/plugins/mcreator-localization/help/zh_CN/block/luminance.md @@ -1 +1 @@ -这个参数控制方块发出的亮度。它是 0 和 15 之间的一个值。 如果设置为 0,方块不会发出光量。如果设置为 15,方块会像发光一样发出光量。 \ No newline at end of file +该参数控制方块发出的亮度。它是 0 和 15 之间的一个值。 如果设置为 0,方块不会发出光量。如果设置为 15,方块会像发光一样发出光量。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/material.md b/plugins/mcreator-localization/help/zh_CN/block/material.md index 499d6e17754..505c60c641c 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/material.md +++ b/plugins/mcreator-localization/help/zh_CN/block/material.md @@ -2,4 +2,4 @@ 如果您打算使用矿石方块类型,选择岩石(ROCK)材料,以便适当地应用挖掘等级。 -点击[这里](https://mcreator.net/wiki/materials)来阅读更多相关资料。 \ No newline at end of file +单击[这里](https://mcreator.net/wiki/materials)来阅读更多相关资料。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/model.md b/plugins/mcreator-localization/help/zh_CN/block/model.md index 07666b7f541..9489c0fdf3e 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/model.md +++ b/plugins/mcreator-localization/help/zh_CN/block/model.md @@ -1,10 +1,10 @@ -选择要与这个方块一起使用的模型。模型只定义视觉外观,而不定义方块的碰撞箱。 +选择要与该方块一起使用的模型。模型只定义视觉外观,而不定义方块的碰撞箱。 -* **普通** - 每边都有纹理的普通方块 -* **单一纹理** - 方块每一面的纹理都相同 -* **交叉** -植物使用的模型 -* **作物(Crop)** - 作物和植物使用的模型 -* **草方块(Grass Block)** - 草方块使用的模型(顶部和侧面纹理将被着色) +* 普通 - 每边都有纹理的普通方块 +* 单一纹理 - 方块每一面的纹理都相同 +* 交叉 -植物使用的模型 +* 作物(Crop) - 作物和植物使用的模型 +* 草方块(Grass Block) - 草方块使用的模型(顶部和侧面纹理将被着色) * 自定义 - 您也可以定义自定义 JSON 和 OBJ 模型 在创建自定义模型时,建议使用 JSON,因为 JSON 支持原版模型类型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/offset_type.md b/plugins/mcreator-localization/help/zh_CN/block/offset_type.md index 8a4e59d108d..8763b7043c3 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/offset_type.md +++ b/plugins/mcreator-localization/help/zh_CN/block/offset_type.md @@ -1,3 +1,3 @@ -这个参数控制方块的放置是否应该随机偏移以及向哪个轴偏移。 +该参数控制方块的放置是否应该随机偏移以及向哪个轴偏移。 大多数植物使用一种偏移类型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/on_bonemeal_success.md b/plugins/mcreator-localization/help/zh_CN/block/on_bonemeal_success.md index 466b9bad84c..1e529531026 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/on_bonemeal_success.md +++ b/plugins/mcreator-localization/help/zh_CN/block/on_bonemeal_success.md @@ -1 +1 @@ -这个流程决定了当骨粉在这个方块上成功使用时会发生什么。 \ No newline at end of file +该流程决定了当骨粉在该方块上成功使用时会发生什么。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/particle_texture.md b/plugins/mcreator-localization/help/zh_CN/block/particle_texture.md index 07c11d36cb4..22f6ea7e697 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/particle_texture.md +++ b/plugins/mcreator-localization/help/zh_CN/block/particle_texture.md @@ -1 +1 @@ -这个可选属性将在方块被打破、实体落在方块上等情况下改变粒子的纹理。 \ No newline at end of file +该可选属性将在方块被打破、实体落在方块上等情况下改变粒子的纹理。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/placing_condition.md b/plugins/mcreator-localization/help/zh_CN/block/placing_condition.md index 217a69bc0df..a0cec3f0be4 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/placing_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/block/placing_condition.md @@ -1,3 +1,3 @@ -这个条件决定这个方块是否可以放置在特定位置。如果位置不再有效,方块一旦接收到方块更新就会被破坏。 +该条件决定该方块是否可以放置在特定位置。如果位置不再有效,方块一旦接收到方块更新就会被破坏。 -注意:这个条件在生成世界期间不会被检查。 +注:该条件在生成世界期间不会被检查。 diff --git a/plugins/mcreator-localization/help/zh_CN/block/push_reaction.md b/plugins/mcreator-localization/help/zh_CN/block/push_reaction.md index e1e203cc6c9..7839bee637e 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/push_reaction.md +++ b/plugins/mcreator-localization/help/zh_CN/block/push_reaction.md @@ -1,4 +1,4 @@ -这个参数决定了方块如何与活塞反应。 +该参数决定了方块如何与活塞反应。 * 正常:正常的活塞反应,像石头 * 破坏:当活塞推动方块时,方块将被破坏。 diff --git a/plugins/mcreator-localization/help/zh_CN/block/redstone_connect.md b/plugins/mcreator-localization/help/zh_CN/block/redstone_connect.md index 2dcc79ba273..0cf3f97cd44 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/redstone_connect.md +++ b/plugins/mcreator-localization/help/zh_CN/block/redstone_connect.md @@ -1,3 +1,3 @@ -如果选中这个参数,红石粉将始终连接到这个方块(类似于红石块)。 +如果选中了该参数,红石粉将始终连接到该方块(类似于红石块)。 -注意:即使不勾选这个参数,方块仍然可以输出红石能量。 \ No newline at end of file +注:即使不选中该参数,方块仍然可以输出红石能量。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/redstone_power.md b/plugins/mcreator-localization/help/zh_CN/block/redstone_power.md index 340ed716bbc..92f9cd4cbfe 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/redstone_power.md +++ b/plugins/mcreator-localization/help/zh_CN/block/redstone_power.md @@ -1,7 +1,7 @@ 如果选中“输出红石能量”参数,该参数将允许修改输出的红石能量。 -当使用这个条件流程并返回一个数字时,这个方块发出的红石能量将由该流程返回的数字设置。 +当使用该条件流程并返回一个数字时,该方块发出的红石能量将由该流程返回的数字设置。 -注意:方块仍然可以输出红石能量,即使红石没有连接到它。 +注:方块仍然可以输出红石能量,即使红石没有连接到它。 警告:当使用自定义数字提供流程时,您需要通知相邻的区块红石值的变化,以便它们应用更改。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/replaceable.md b/plugins/mcreator-localization/help/zh_CN/block/replaceable.md index c330ea02185..d87c087f8dd 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/replaceable.md +++ b/plugins/mcreator-localization/help/zh_CN/block/replaceable.md @@ -1,3 +1,3 @@ -如果您勾选这个参数,玩家将能够在它上面放置另一个方块(这个方块可以被其他正在放置的方块所取代)。 +如果您勾选该参数,玩家将能够在它上面放置另一个方块(该方块可以被其他正在放置的方块所取代)。 例如:空气,大多数植物 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/requires_correct_tool.md b/plugins/mcreator-localization/help/zh_CN/block/requires_correct_tool.md index 368aa90102f..8644826a289 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/requires_correct_tool.md +++ b/plugins/mcreator-localization/help/zh_CN/block/requires_correct_tool.md @@ -1 +1 @@ -如果启用这个选项,则仅当使用指定的收集工具进行破坏时,方块才会被破坏。 \ No newline at end of file +如果启用该选项,则仅当使用指定的收集工具进行破坏时,方块才会被破坏。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/resistance.md b/plugins/mcreator-localization/help/zh_CN/block/resistance.md index db62feba615..50fa3206685 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/resistance.md +++ b/plugins/mcreator-localization/help/zh_CN/block/resistance.md @@ -1 +1 @@ -这个参数控制方块对爆炸的反应。 一个更高的值能使方块更能抵御爆炸。 \ No newline at end of file +该参数控制方块对爆炸的反应。 一个更高的值能使方块更能抵御爆炸。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/rotation_mode.md b/plugins/mcreator-localization/help/zh_CN/block/rotation_mode.md index 1967b620ba9..3f91797d06b 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/rotation_mode.md +++ b/plugins/mcreator-localization/help/zh_CN/block/rotation_mode.md @@ -1,6 +1,6 @@ -* **无旋转(No rotation)** 方块方向是固定的。 -* **Y轴旋转(S/W/N/E)(Y-axis rotation(S/W/N/E)):** 仅根据玩家面对的方式旋转侧边。 -* **D/U/N/S/W/E旋转(D/U/N/S/W/E rotation)** 根据玩家面对的方向旋转所有边。 -* **Y轴旋转(S/W/N/E)(Y-axis rotation(S/W/N/E)):** 只旋转基于方块面点击块的边。 -* **D/U/N/S/W/E旋转(D/U/N/S/W/E rotation):** 根据被点击的方块面,旋转所有的面。 -* **原木旋转(X/Y/Z)(Log rotation(X/Y/Z)): ** 像普通原木一样旋转方块。 \ No newline at end of file +* **No rotation:**方块方向是固定的。 +* Y轴旋转(S/W/N/E)(Y-axis rotation(S/W/N/E)): 仅根据玩家面对的方式旋转侧边。 +* D/U/N/S/W/E旋转(D/U/N/S/W/E rotation) 根据玩家面对的方向旋转所有边。 +* Y轴旋转(S/W/N/E)(Y-axis rotation(S/W/N/E)): 只旋转基于方块面单击块的边。 +* **D/U/N/S/W/E rotation:**根据被单击的方块面,旋转所有的面。 +* **Log rotation(X/Y/Z):**像普通原木一样旋转方块。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/special_information.md b/plugins/mcreator-localization/help/zh_CN/block/special_information.md index 8303624df32..3d0cf257dec 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/special_information.md +++ b/plugins/mcreator-localization/help/zh_CN/block/special_information.md @@ -1 +1,3 @@ -当你用鼠标点击物品栏中的方块图标时,此参数会给方块添加一个提示框。 如果您使用流程生成的提示框,而您的方块未被实体拿取或不是矿石,`实体`依赖项将为空。 \ No newline at end of file +当您把鼠标悬停在物品栏中的方块上时,此参数为方块添加一个提示框。 + +如果您使用了用流程生成的提示框,而您的方块是未被一个实体持有或目前是掉落物, ` entity `依赖项将为空。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/speed_factor.md b/plugins/mcreator-localization/help/zh_CN/block/speed_factor.md index 72e06b5aa2f..36776c024cd 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/speed_factor.md +++ b/plugins/mcreator-localization/help/zh_CN/block/speed_factor.md @@ -1,3 +1,3 @@ -这个参数控制该方块上实体的速度。 +该参数控制该方块上实体的速度。 大多数方块使用的默认值是 1.0。 灵魂沙和蜂蜜块的速度为 0.4。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/stack_size.md b/plugins/mcreator-localization/help/zh_CN/block/stack_size.md index 185caee0f57..226e98aebaf 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/stack_size.md +++ b/plugins/mcreator-localization/help/zh_CN/block/stack_size.md @@ -1,3 +1,3 @@ -这是这个方块物品栏中的物品栏储存槽中的物品可以堆叠的数量。 +这是该方块物品栏中的物品栏槽位中的物品可以堆叠的数量。 -请记住,对于特定的物品还有另一个储存槽堆栈大小限制,所以这是可以被物品进一步限制的储存槽的上限。 \ No newline at end of file +请记住,对于特定的物品还有另一个槽位堆栈数量限制,所以这是可以被物品进一步限制的槽位的上限。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/step_sound.md b/plugins/mcreator-localization/help/zh_CN/block/step_sound.md index b505e22f91f..3290cffab5c 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/step_sound.md +++ b/plugins/mcreator-localization/help/zh_CN/block/step_sound.md @@ -1 +1 @@ -这是一个实体在这个方块上行走时发出的声音。 \ No newline at end of file +这是一个实体在该方块上行走时发出的声音。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/tint_type.md b/plugins/mcreator-localization/help/zh_CN/block/tint_type.md index 0a995b080dc..d5e68b1d0a4 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/tint_type.md +++ b/plugins/mcreator-localization/help/zh_CN/block/tint_type.md @@ -1 +1 @@ -这个设置用于生物群系区块的颜色,类似于草、叶子和水。 为了效果更好,连接面应该使用灰度纹理。 \ No newline at end of file +该选项用于设置生物群系的颜色,类似于草、叶子和水。 为了效果更好,着色面应该使用灰度纹理。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/transparency_type.md b/plugins/mcreator-localization/help/zh_CN/block/transparency_type.md index 5bf8384c6b6..a7765ab0226 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/transparency_type.md +++ b/plugins/mcreator-localization/help/zh_CN/block/transparency_type.md @@ -1,8 +1,8 @@ -**选中这个框,如果您的方块有透明度** - 对于固体方块,不勾选,检查它是否类似于树叶、玻璃、铁栏杆等。 +**如果您的方块有透明度请选中该框** - 对于固体方块请不要选中该框,除非它与树叶、玻璃、铁栏杆等相似。 透明类型: -* **固体(Solid):** 无透明度(类似于泥土、石头等) -* **镂空(Cutout):** 透明方块没有贴图分级细化(类似于玻璃) -* **剪贴贴图分级(Cutout mipped):** 像剪贴画,但有贴图分级细化 -* **半透明(Translucent):** 部分透明,资源最多的选项(类似于冰) \ No newline at end of file +* **Solid:**不透明(类似于泥土、石头等) +* **Cutout:**透明方块没有贴图分级细化(类似于玻璃) +* **Cutout mipped:**像cutout,但有贴图分级细化 +* **Translucent:**部分透明,资源最多的选项(类似于冰) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/unbreakable.md b/plugins/mcreator-localization/help/zh_CN/block/unbreakable.md index c35e5466e47..b8e3b03e306 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/unbreakable.md +++ b/plugins/mcreator-localization/help/zh_CN/block/unbreakable.md @@ -1,3 +1,3 @@ -这个参数定义了玩家是否能够挖掘它。 +该参数定义了玩家是否能够挖掘它。 -原版示例:基岩和命令方块 \ No newline at end of file +原版例子:基岩和命令方块 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/use_loot_table_for_drops.md b/plugins/mcreator-localization/help/zh_CN/block/use_loot_table_for_drops.md index 182980cfab1..50bed81b75e 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/use_loot_table_for_drops.md +++ b/plugins/mcreator-localization/help/zh_CN/block/use_loot_table_for_drops.md @@ -1,7 +1,7 @@ 当启用时,方块将不定义代码中的掉落物(掉落物在方块模组元素中定义),相反,方块的掉落需要用战利品表定义。 -创建战利品表模组元素,注册名 `blocks/${registryname}`,命名空间 _mod_,类型 _Block_。 +创建战利品表模组元素,注册名 `blocks/${registryname}`,命名空间 mod,类型 Block。 -如果不勾选这个参数,战利品表仍将覆盖方块掉落,但当战利品表不返回任何条目时,方块模组元素中定义的方块掉落将被使用。 +如果不选中该参数,战利品表仍将覆盖方块掉落,但当战利品表不返回任何条目时,方块模组元素中定义的方块掉落将被使用。 -当这个参数被勾选时,这个方块的更新被战利品表控制。 \ No newline at end of file +当选中了该参数时,该方块的更新被战利品表控制。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/when_block_placed_by.md b/plugins/mcreator-localization/help/zh_CN/block/when_block_placed_by.md index f270ae2b45e..8df87eff461 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/when_block_placed_by.md +++ b/plugins/mcreator-localization/help/zh_CN/block/when_block_placed_by.md @@ -1 +1 @@ -当有东西把这个方块(实体/方块)放在这个方块旁边时触发一个流程。 \ No newline at end of file +当有东西把此方块(实体/方块)放在另一个相同的方块旁边时触发一个流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/when_entity_walks_on.md b/plugins/mcreator-localization/help/zh_CN/block/when_entity_walks_on.md index af75609d5df..c8793d9f73f 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/when_entity_walks_on.md +++ b/plugins/mcreator-localization/help/zh_CN/block/when_entity_walks_on.md @@ -1,4 +1,4 @@ -当一个实体走过这个方块的顶部(上方)时触发一个流程。 +当一个实体走过该方块的顶部(上方)时触发一个流程。 如果实体正在潜行,它将不会被调用。 diff --git a/plugins/mcreator-localization/help/zh_CN/block/when_neighbour_changes.md b/plugins/mcreator-localization/help/zh_CN/block/when_neighbour_changes.md index 5a496fc5679..050e6e9ec1e 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/when_neighbour_changes.md +++ b/plugins/mcreator-localization/help/zh_CN/block/when_neighbour_changes.md @@ -1 +1 @@ -当这个方块旁边的方块被更新时(方块状态改变、放置新方块或删除方块)触发一个流程。 \ No newline at end of file +当该方块旁边的方块被更新时(方块状态改变、放置新方块或删除方块)触发一个流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/block/when_right_clicked.md b/plugins/mcreator-localization/help/zh_CN/block/when_right_clicked.md index 0a3f05e6f98..ce5d6c031a6 100644 --- a/plugins/mcreator-localization/help/zh_CN/block/when_right_clicked.md +++ b/plugins/mcreator-localization/help/zh_CN/block/when_right_clicked.md @@ -1,3 +1,3 @@ -当玩家右键点击方块时,该流程将被执行。 +当玩家右击方块时,该流程将被执行。 如果执行一个操作,流程应该返回 SUCCESS/CONSUME 类型的操作结果,否则返回 PASS 类型的操作结果。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/command/permission_level.md b/plugins/mcreator-localization/help/zh_CN/command/permission_level.md index 7eeeaa9ea10..1940131191a 100644 --- a/plugins/mcreator-localization/help/zh_CN/command/permission_level.md +++ b/plugins/mcreator-localization/help/zh_CN/command/permission_level.md @@ -4,4 +4,4 @@ 1是最基本等级,4是最高等级(服务器管理员,即op)。 -点击 [这个页面](https://mcreator.net/wiki/command-permission-levels) 来查看命令与所需权限等级的对应表。 \ No newline at end of file +查看[该页面](https://mcreator.net/wiki/command-permission-levels)中命令与所需权限等级的对应表。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/command/type.md b/plugins/mcreator-localization/help/zh_CN/command/type.md index 95bb3658e9f..8988dd776e3 100644 --- a/plugins/mcreator-localization/help/zh_CN/command/type.md +++ b/plugins/mcreator-localization/help/zh_CN/command/type.md @@ -1,6 +1,6 @@ 此选项允许您确定命令的类型以及如何/在哪里使用。 -* **STANDARD(一般)**: 该命令可以在任何地方使用。这是一般的行为 (例如, `/give`)。 -* **SINGLEPLAYER_ONLY(仅单人游戏)**: 该命令将仅在单人玩家世界上可用 (例如: `/publish`)。 -* **MULTIPLAYER_ONLY(仅多人游戏)**: 命令将仅在多人游戏服务器上可用 (例如:`/ban`)。 -* **CLIENTSIDE(客户端)**: 命令仅在在客户端完全可用。 \ No newline at end of file +* STANDARD(一般):该命令可以在任何地方使用。这是一般的行为 (例如, `/give`)。 +* SINGLEPLAYER_ONLY(仅单人游戏):该命令将仅在单人玩家世界上可用 (例如:`/publish`)。 +* MULTIPLAYER_ONLY(仅多人游戏):命令将仅在多人游戏服务器上可用 (例如:`/ban`)。 +* CLIENTSIDE(客户端):命令仅在在客户端完全可用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/common/creative_tab.md b/plugins/mcreator-localization/help/zh_CN/common/creative_tab.md index 5594e93aa42..183ef1affce 100644 --- a/plugins/mcreator-localization/help/zh_CN/common/creative_tab.md +++ b/plugins/mcreator-localization/help/zh_CN/common/creative_tab.md @@ -1,3 +1,3 @@ 物品将在哪个创造模式物品栏中。 -使用“CUSTOM:”开头的选项来选择自定义的创造模式物品栏。 \ No newline at end of file +使用“CUSTOM:”开头的选项来选择自定义的创造模式物品栏。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/common/state_definition.md b/plugins/mcreator-localization/help/zh_CN/common/state_definition.md index dcaf84b38b5..2c602dd15c1 100644 --- a/plugins/mcreator-localization/help/zh_CN/common/state_definition.md +++ b/plugins/mcreator-localization/help/zh_CN/common/state_definition.md @@ -1 +1 @@ -指定这个状态的元素属性所接受的值。 如果取消选中属性左侧的方框,它将不会以任何方式影响这个状态。 \ No newline at end of file +指定该状态的元素属性所接受的值。 如果取消选中属性左侧的方框,它将不会以任何方式影响该状态。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/damagetype/effects.md b/plugins/mcreator-localization/help/zh_CN/damagetype/effects.md new file mode 100644 index 00000000000..bf49691f0e9 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/damagetype/effects.md @@ -0,0 +1 @@ +该参数决定在受到这种类型的伤害时播放的声音 diff --git a/plugins/mcreator-localization/help/zh_CN/damagetype/exhaustion.md b/plugins/mcreator-localization/help/zh_CN/damagetype/exhaustion.md new file mode 100644 index 00000000000..8432a4e4227 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/damagetype/exhaustion.md @@ -0,0 +1,3 @@ +该参数决定了当玩家受伤时应该减少多少点饱食度。 + +较高的值会更快地消耗饥饿条。 diff --git a/plugins/mcreator-localization/help/zh_CN/damagetype/item_death_message.md b/plugins/mcreator-localization/help/zh_CN/damagetype/item_death_message.md new file mode 100644 index 00000000000..2308b369b54 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/damagetype/item_death_message.md @@ -0,0 +1,7 @@ +当玩家被持有命名物品的实体击杀时,此消息会在聊天框中显示。 + +您可以在消息中使用以下标识: + +- ``:死亡玩家的名字 +- ``:造成伤害的实体名称 +- ``:攻击者持有的物品名称 diff --git a/plugins/mcreator-localization/help/zh_CN/damagetype/normal_death_message.md b/plugins/mcreator-localization/help/zh_CN/damagetype/normal_death_message.md new file mode 100644 index 00000000000..c643962b56f --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/damagetype/normal_death_message.md @@ -0,0 +1,8 @@ +在大多数情况下,当玩家死于这种类型的伤害时,此消息会在聊天框中显示。 + +您可以在消息中使用以下标识: + +- ``:死亡玩家的名字 +- ``:造成伤害的实体名称 + +注:仅当伤害总是由生物造成时,才使用第二个标识。 diff --git a/plugins/mcreator-localization/help/zh_CN/damagetype/player_death_message.md b/plugins/mcreator-localization/help/zh_CN/damagetype/player_death_message.md new file mode 100644 index 00000000000..6a83a77bea5 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/damagetype/player_death_message.md @@ -0,0 +1,6 @@ +当玩家因这种类型的伤害而死亡,但被距离玩家较近的另一个实体伤害时,此消息会在聊天框中显示。 + +您可以在消息中使用以下标识: + +- ``:死亡玩家的名字 +- ``:造成伤害的实体名称 diff --git a/plugins/mcreator-localization/help/zh_CN/damagetype/scaling.md b/plugins/mcreator-localization/help/zh_CN/damagetype/scaling.md new file mode 100644 index 00000000000..6d7732d78c6 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/damagetype/scaling.md @@ -0,0 +1,5 @@ +该参数决定了所受到的伤害量是否会随着难度而增加。 + +- `never`:难度不影响伤害量 +- `always`:不管来源为谁,伤害量总会因难度而增加。 +- `when_caused_by_living_non_player`:仅当由生物造成伤害时,伤害量才会随难度增加(例如僵尸或蜘蛛) diff --git a/plugins/mcreator-localization/help/zh_CN/dimension/biomes.md b/plugins/mcreator-localization/help/zh_CN/dimension/biomes.md index f3ebcc44ee6..02e4cd1df80 100644 --- a/plugins/mcreator-localization/help/zh_CN/dimension/biomes.md +++ b/plugins/mcreator-localization/help/zh_CN/dimension/biomes.md @@ -1,3 +1,3 @@ -这个维度生成的生物群系列表。 生物群系定义了维度中一个区域的所有地物,例如植物类型、树、结构和生物生成属性。 +该维度生成的生物群系列表。 生物群系定义了维度中一个区域的所有地物,例如植物类型、树、结构和生物生成属性。 维度将根据生物群系属性平均分布。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/dimension/condition_portal_use.md b/plugins/mcreator-localization/help/zh_CN/dimension/condition_portal_use.md index b75b2c12d83..bd19c68291d 100644 --- a/plugins/mcreator-localization/help/zh_CN/dimension/condition_portal_use.md +++ b/plugins/mcreator-localization/help/zh_CN/dimension/condition_portal_use.md @@ -1 +1 @@ -如果指定了条件,玩家需要达成该条件才能前往这个维度。 \ No newline at end of file +如果指定了条件,玩家需要达成该条件才能前往该维度。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/dimension/enable_igniter.md b/plugins/mcreator-localization/help/zh_CN/dimension/enable_igniter.md index 068fbc91369..eddc2888fa2 100644 --- a/plugins/mcreator-localization/help/zh_CN/dimension/enable_igniter.md +++ b/plugins/mcreator-localization/help/zh_CN/dimension/enable_igniter.md @@ -1,3 +1,3 @@ -勾选这个参数以使用激活器。如果您打算使用自定义激活器,请取消勾选这个选项。 +选中该参数以使用激活器。如果您打算使用自定义激活器,请不要选中。 要制作自定义激活器,请新建一个流程,并使用 “使用自定义激活器激活维度传送门(Make portal to a dimension using custom igniter item)” 内置模板。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/dimension/has_fog.md b/plugins/mcreator-localization/help/zh_CN/dimension/has_fog.md index b1300dc313b..637d7703d9e 100644 --- a/plugins/mcreator-localization/help/zh_CN/dimension/has_fog.md +++ b/plugins/mcreator-localization/help/zh_CN/dimension/has_fog.md @@ -1 +1 @@ -选中以启用厚雾。即使“渲染距离”设置得很大厚雾也会出现,在下界可以看到这样的例子。 +勾选该参数以启用厚雾。即使“渲染距离”设置得很大厚雾也会出现,在下界可以看到这样的例子。 diff --git a/plugins/mcreator-localization/help/zh_CN/dimension/is_dark.md b/plugins/mcreator-localization/help/zh_CN/dimension/is_dark.md index 1e061ad4c97..73b0f2109ff 100644 --- a/plugins/mcreator-localization/help/zh_CN/dimension/is_dark.md +++ b/plugins/mcreator-localization/help/zh_CN/dimension/is_dark.md @@ -1,4 +1,4 @@ -选中后,全局光照将被禁用,维度将一片黑暗。 +如果选中了该参数,全局光照将被禁用,维度将一片黑暗。 如果天空光照也被禁用了,那么该维度将没有自然光源。 diff --git a/plugins/mcreator-localization/help/zh_CN/dimension/sleep_result.md b/plugins/mcreator-localization/help/zh_CN/dimension/sleep_result.md index 1eca315e692..d6c2b390ff8 100644 --- a/plugins/mcreator-localization/help/zh_CN/dimension/sleep_result.md +++ b/plugins/mcreator-localization/help/zh_CN/dimension/sleep_result.md @@ -1 +1 @@ -该参数控制玩家在这个维度尝试睡觉时发生的事件(例如在下界睡觉时会强制醒来)。 \ No newline at end of file +该参数控制玩家在该维度尝试睡觉时发生的事件(例如在下界睡觉时会强制醒来)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/enchantment/allowed_on_books.md b/plugins/mcreator-localization/help/zh_CN/enchantment/allowed_on_books.md index 2123439feb9..1d81fd8ac20 100644 --- a/plugins/mcreator-localization/help/zh_CN/enchantment/allowed_on_books.md +++ b/plugins/mcreator-localization/help/zh_CN/enchantment/allowed_on_books.md @@ -1,3 +1,3 @@ -选中以启用该附魔对应的附魔书。 +选中该项以启用该附魔对应的附魔书。 您无法定义附魔书所在的创造模式选项卡,其创造模式选项卡取决于一开始决定好的魔咒类型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/enchantment/can_apply_to.md b/plugins/mcreator-localization/help/zh_CN/enchantment/can_apply_to.md index 6708b34d7d6..098abf15cb0 100644 --- a/plugins/mcreator-localization/help/zh_CN/enchantment/can_apply_to.md +++ b/plugins/mcreator-localization/help/zh_CN/enchantment/can_apply_to.md @@ -4,4 +4,4 @@ 大多数情况下请留空(使用原版的判断逻辑)。 -**可以获得(Include)**将允许选定的物品获得这个附魔。 **不能获得(Exclude)**将不允许所选物品获得这个附魔。 +可以获得(Include)将允许选定的物品获得该附魔。 不能获得(Exclude)将不允许所选物品获得该附魔。 diff --git a/plugins/mcreator-localization/help/zh_CN/enchantment/compatible_enchantments.md b/plugins/mcreator-localization/help/zh_CN/enchantment/compatible_enchantments.md index 5e07748b00b..4df9985503c 100644 --- a/plugins/mcreator-localization/help/zh_CN/enchantment/compatible_enchantments.md +++ b/plugins/mcreator-localization/help/zh_CN/enchantment/compatible_enchantments.md @@ -1,5 +1,5 @@ -如果该附魔只能与特定附魔共存,在这个进行选择。 +如果该附魔只能与特定附魔共存,在该进行选择。 留空以清除共存限制。 -**可以共存(Include)** 将使所选附魔共存。 **不可共存(Exclude)** 将使所选附魔不共存。 \ No newline at end of file +可以共存(Include) 将使所选附魔共存。 不可共存(Exclude) 将使所选附魔不共存。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/enchantment/generate_in_loot_tables.md b/plugins/mcreator-localization/help/zh_CN/enchantment/generate_in_loot_tables.md index b06d6dd31ab..44cc73579fa 100644 --- a/plugins/mcreator-localization/help/zh_CN/enchantment/generate_in_loot_tables.md +++ b/plugins/mcreator-localization/help/zh_CN/enchantment/generate_in_loot_tables.md @@ -1 +1 @@ -选中以使该附魔可以出现在战利品表中。 \ No newline at end of file +选中该项使该附魔可以出现在战利品表中。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/enchantment/villager_trade.md b/plugins/mcreator-localization/help/zh_CN/enchantment/villager_trade.md index 4c7e2244d07..940a548505a 100644 --- a/plugins/mcreator-localization/help/zh_CN/enchantment/villager_trade.md +++ b/plugins/mcreator-localization/help/zh_CN/enchantment/villager_trade.md @@ -1 +1 @@ -选中以使该附魔出现在村民的交易中。 \ No newline at end of file +选中该项以使该附魔出现在村民的交易中。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/energy/enable_storage.md b/plugins/mcreator-localization/help/zh_CN/energy/enable_storage.md index 7ca0ac8fba9..f3ea36f8fda 100644 --- a/plugins/mcreator-localization/help/zh_CN/energy/enable_storage.md +++ b/plugins/mcreator-localization/help/zh_CN/energy/enable_storage.md @@ -1,3 +1,3 @@ -选中以启用能量存储。 +选中该项以启用能量存储。 方块需要拥有方块实体才能使能量系统正常工作。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/ai_continue_condition.md b/plugins/mcreator-localization/help/zh_CN/entity/ai_continue_condition.md index 921c04f1f35..eed7a8f9101 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/ai_continue_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/ai_continue_condition.md @@ -1 +1 @@ -如果指定,则只要实体通过这个条件,它就将执行这个任务。 \ No newline at end of file +如果指定,则只要实体通过该条件,它就将执行该任务。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/ai_start_condition.md b/plugins/mcreator-localization/help/zh_CN/entity/ai_start_condition.md index bf0205b3909..188ad07454f 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/ai_start_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/ai_start_condition.md @@ -1 +1 @@ -如果指定,则实体只有在通过这个条件时才会开始执行这个任务。 \ No newline at end of file +如果指定,则实体只有在通过该条件时才会开始执行该任务。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/attack_knockback.md b/plugins/mcreator-localization/help/zh_CN/entity/attack_knockback.md index b666f6ab0ec..9e7d2728882 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/attack_knockback.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/attack_knockback.md @@ -1 +1 @@ -攻击击退定义了这个实体 每次攻击的击退值。大多数原版实体都不使用它。但部分有使用它,例如劫掠兽,它的击退值为1.5。 +攻击击退定义了该实体 每次攻击的击退值。大多数原版实体都不使用它。但部分有使用它,例如劫掠兽,它的击退值为1.5。 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/base.md b/plugins/mcreator-localization/help/zh_CN/entity/base.md index 595570ed311..42bd12f3596 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/base.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/base.md @@ -1,5 +1,5 @@ -给该生物一个原版的实体 AI,使得它像原版实体一样行动。 +给该生物一个原版的实体AI,使得它像原版实体一样行动。 这也会覆盖一些参数,比如掉落物。 -通常这个参数不应该使用,应保持为默认(default)。 \ No newline at end of file +通常该参数不应该使用,应保持为默认(default)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/behaviour.md b/plugins/mcreator-localization/help/zh_CN/entity/behaviour.md index 4187819d0a1..790825ba38f 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/behaviour.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/behaviour.md @@ -1,5 +1,5 @@ 设置为怪物(Mob)的生物可以攻击,而设置为动物(Creature)的生物是被动的。 -如果使用了 AI 基础,该参数会被覆盖。 +如果使用了AI基础,该参数会被覆盖。 -注意:如果在这里选择了动物(Creature)类型,却给了它攻击型的 AI 任务,大多数情况下这会导致游戏崩溃。 \ No newline at end of file +请记住,如果在这里选择了Creature类型,却给了它攻击型的AI任务,大多数情况下这会导致游戏崩溃。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/bind_gui.md b/plugins/mcreator-localization/help/zh_CN/entity/bind_gui.md index db1401d9ae4..e7e6f9ce573 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/bind_gui.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/bind_gui.md @@ -1 +1 @@ -如果您想要将一个 GUI 绑定到这个实体(例如做一个村民交易界面或者自定义马界面),选中它以启用物品栏并绑定到一个可用的 GUI。 \ No newline at end of file +如果您想要将一个 GUI 绑定到该实体(例如做一个村民交易界面或者自定义马界面),选中它以启用物品栏并绑定到一个可用的 GUI。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/bounding_box.md b/plugins/mcreator-localization/help/zh_CN/entity/bounding_box.md index 008bf9d9011..b8d2511a8ea 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/bounding_box.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/bounding_box.md @@ -1,3 +1,3 @@ - 该参数控制实体的碰撞箱和阴影的大小,单位是方块。 第一个选项设置宽度和厚度,第二个选项设置高度。 最后的选项是设置怪物阴影半径的大小(以格为单位)。 + 该参数控制实体的碰撞箱和阴影的尺寸,单位是格。 第一个选项设置宽度和厚度,第二个选项设置高度。 最后一个选项是设置怪物阴影半径的尺寸(以格为单位)。 - 您可以在 [这里](https://mcreator.net/wiki/entity-model-sizes) 获得实体模型大小的更多详细信息。 \ No newline at end of file + 您可以在[这里](https://mcreator.net/wiki/entity-model-sizes)获取关于实体模型尺寸的更多详细信息。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/bounding_box_scale.md b/plugins/mcreator-localization/help/zh_CN/entity/bounding_box_scale.md new file mode 100644 index 00000000000..9b284c52e73 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/entity/bounding_box_scale.md @@ -0,0 +1,3 @@ +此功能允许您控制实体碰撞箱的尺寸。 + +要调整游戏中的实体外观,请使用“模型外观缩放”参数。 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/condition_can_breathe_underwater.md b/plugins/mcreator-localization/help/zh_CN/entity/condition_can_breathe_underwater.md index cfa2527481e..2894faa8cad 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/condition_can_breathe_underwater.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/condition_can_breathe_underwater.md @@ -1 +1 @@ -当这个条件为 true 时,该实体将能够像鱼或鱿鱼一样无限制的在水下。 \ No newline at end of file +当该条件为 true 时,该实体将能够像鱼或鱿鱼一样无限制的在水下。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/condition_display_model_layer.md b/plugins/mcreator-localization/help/zh_CN/entity/condition_display_model_layer.md new file mode 100644 index 00000000000..4e152392283 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/entity/condition_display_model_layer.md @@ -0,0 +1 @@ +返回值为 true 时,模型图层将会可见。 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/condition_is_model_transparent.md b/plugins/mcreator-localization/help/zh_CN/entity/condition_is_model_transparent.md index 3249984895d..942f2cf426a 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/condition_is_model_transparent.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/condition_is_model_transparent.md @@ -1 +1 @@ -当返回值为 true 时,实体将是透明的。 当玩家处于旁观模式时,他们将会达成这个条件。 \ No newline at end of file +当返回值为 true 时,实体将是透明的。 当玩家处于旁观模式时,他们将会达成该条件。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/condition_is_shaking.md b/plugins/mcreator-localization/help/zh_CN/entity/condition_is_shaking.md index c69b1b90bbf..af2a0c01ebe 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/condition_is_shaking.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/condition_is_shaking.md @@ -1 +1 @@ -当返回值为 true 时,实体将抖动。 例如僵尸村民在治疗期间时的抖动。 \ No newline at end of file +当返回值为true时,实体将会抖动。 僵尸村民在治疗期间就使用了此功能。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/condition_natural_spawning.md b/plugins/mcreator-localization/help/zh_CN/entity/condition_natural_spawning.md index c804d775b70..e59a1312b1a 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/condition_natural_spawning.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/condition_natural_spawning.md @@ -1,3 +1,3 @@ -如果该实体像原版那样生成,您不需要改变这个选项。 +如果该实体像原版那样生成,您不需要改变该选项。 -然而,如果您想要自定义生成条件,需要在这个创建一个新的条件流程。 \ No newline at end of file +然而,如果您想要自定义生成条件,需要在该创建一个新的条件流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/condition_solid_bounding_box.md b/plugins/mcreator-localization/help/zh_CN/entity/condition_solid_bounding_box.md index cd8aca6945c..b6fe981e5b7 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/condition_solid_bounding_box.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/condition_solid_bounding_box.md @@ -1,3 +1,3 @@ 如果启用,则实体的碰撞箱将类似于方块(实体碰撞)的碰撞箱。 -在原版 Minecraft 中被船和潜影贝使用。 \ No newline at end of file +在原版Minecraft 中被船和潜影贝使用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/creature_type.md b/plugins/mcreator-localization/help/zh_CN/entity/creature_type.md index 1d85580de22..9d8928808df 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/creature_type.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/creature_type.md @@ -1,5 +1,5 @@ -允许您设定生物的类型,会带来特定变化。 -* **亡灵生物(Undead)** 会受到来自亡灵杀手的额外伤害,被瞬间伤害药水治疗,瞬间治疗药水伤害,无视中毒和再生药水的效果。 -* **节肢生物(Arthropods)** 会受到来自节肢杀手的额外伤害。 -* **灾厄村民(Illager)** 原版似乎没有任何效果。 -* **水生生物(Water)** 会受到穿刺附魔的额外伤害。 \ No newline at end of file +允许您设置生物的类型,会带来特定变化。 +* 亡灵生物(Undead) 会受到来自亡灵杀手的额外伤害,被瞬间伤害药水治疗,瞬间治疗药水伤害,无视中毒和再生药水的效果。 +* 节肢生物(Arthropods) 会受到来自节肢杀手的额外伤害。 +* 灾厄村民(Illager) 原版似乎没有任何效果。 +* 水生生物(Water) 会受到穿刺附魔的额外伤害。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/data_default_value.md b/plugins/mcreator-localization/help/zh_CN/entity/data_default_value.md new file mode 100644 index 00000000000..8084c98d6f0 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/entity/data_default_value.md @@ -0,0 +1,5 @@ +这是实体变量的默认值。 + +- **Logic**:_true_ 或 _false_ +- **Number**:从最大负数极限到最大正数极限之间的值 +- **String**:文本或字符串值 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/data_name.md b/plugins/mcreator-localization/help/zh_CN/entity/data_name.md new file mode 100644 index 00000000000..e9d4acbd8cb --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/entity/data_name.md @@ -0,0 +1,3 @@ +此参数定义了此变量的名称。 + +主要使用流程块来获取或设置其值。 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/data_type.md b/plugins/mcreator-localization/help/zh_CN/entity/data_type.md new file mode 100644 index 00000000000..4fbe3acde1d --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/entity/data_type.md @@ -0,0 +1 @@ +此选项控制此实体变量的类型。支持的类型是 Logic、Number 和 String 变量。 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/despawn_idle.md b/plugins/mcreator-localization/help/zh_CN/entity/despawn_idle.md index 51b56173c29..84068958aa4 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/despawn_idle.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/despawn_idle.md @@ -1,3 +1,3 @@ 如果选中,该生物会在玩家离得足够远时消失(绝大多数生物的默认行为)。 -对 BOSS 和召唤物关闭这个选项,以防止它们刷新掉。 \ No newline at end of file +对 BOSS 和召唤物关闭该选项,以防止它们刷新掉。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/enable_ai.md b/plugins/mcreator-localization/help/zh_CN/entity/enable_ai.md index e037c3a70b1..6f938039ddf 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/enable_ai.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/enable_ai.md @@ -1,5 +1,5 @@ -如果启用,将会激活生物的 AI 任务。 +如果启用,将会激活生物的AI任务。 -如果不启用,在 AI 任务编辑器定义的 AI 任务将会全部失效。 +如果不启用,在AI任务编辑器定义的AI任务将会全部失效。 -除非您需要一个没有 AI 的技术性实体,不然请将它保持启用。 \ No newline at end of file +除非您需要一个没有AI的技术性实体,不然请将它保持启用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/entity_data.md b/plugins/mcreator-localization/help/zh_CN/entity/entity_data.md new file mode 100644 index 00000000000..9034236aab7 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/entity/entity_data.md @@ -0,0 +1,4 @@ +向您的自定义实体添加自定义变量。 + +这些变量是在客户端和服务器端之间同步的。 +只需使用一个就可以了,例如改变您实体的纹理。 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/glow_texture.md b/plugins/mcreator-localization/help/zh_CN/entity/glow_texture.md index 0cb970fc144..ed1a664c9bb 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/glow_texture.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/glow_texture.md @@ -1,7 +1 @@ -发光纹理是生物上的可选附加纹理。 - -该纹理应和生物本身的纹理拥有同样的大小和布置。 - -发光纹理将被用于定义生物的发光层。纹理越明亮,这些部位发光也会越强。 - -如果您不需要发光纹理,请保持默认(空)。 \ No newline at end of file +发光纹理将被用于定义生物的发光层。纹理越明亮,这些部位发光也会越强。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/health.md b/plugins/mcreator-localization/help/zh_CN/entity/health.md index db99775b408..392bcfe03a2 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/health.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/health.md @@ -1 +1 @@ -这个参数设置了生物的初始(和最大)生命值。2点生命值=1颗心 \ No newline at end of file +该参数设置了生物的初始(和最大)生命值。2点生命值=1颗心 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/inventory_stack_size.md b/plugins/mcreator-localization/help/zh_CN/entity/inventory_stack_size.md index ac61aa585a4..dfd56d246c2 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/inventory_stack_size.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/inventory_stack_size.md @@ -1,3 +1,3 @@ 该参数控制该实体内置物品栏中,每个槽位中物品的最大数量。 -注意:该物品本身在槽位中的数量限制,以及此处设置的参数,两者取较小值,才是实际的最大堆叠数量。 \ No newline at end of file +请记住,该物品本身在槽位中的数量限制,以及此处设置的参数,两者取较小值,才是实际的最大堆叠数量。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/model_layers.md b/plugins/mcreator-localization/help/zh_CN/entity/model_layers.md new file mode 100644 index 00000000000..ed330fbac48 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/entity/model_layers.md @@ -0,0 +1 @@ +下表中的模型图层将应用于实体模型的顶部。 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/movement_speed.md b/plugins/mcreator-localization/help/zh_CN/entity/movement_speed.md index 6e72bdb2412..a4919704ce1 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/movement_speed.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/movement_speed.md @@ -1 +1 @@ -设置生物的移动速度。 大多数一般生物的速度约为 0.25,较快的生物例如蜘蛛和狼为 0.35。 \ No newline at end of file +设置生物的移动速度。 大多数一般生物的速度约为0.25,较快的生物例如蜘蛛和狼为0.35。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/on_initial_spawn.md b/plugins/mcreator-localization/help/zh_CN/entity/on_initial_spawn.md index a2c2cf0b79c..abbcb0f3cf9 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/on_initial_spawn.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/on_initial_spawn.md @@ -1,3 +1,3 @@ 当生物生成时触发一个流程。 -注意:若该流程发生在早期世界生成时,有的流程将不会正常工作。 \ No newline at end of file +注:若该流程发生在早期世界生成时,有的流程将不会正常工作。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/spawn_egg_options.md b/plugins/mcreator-localization/help/zh_CN/entity/spawn_egg_options.md index dbf09d3f32d..691edc2dfb7 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/spawn_egg_options.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/spawn_egg_options.md @@ -1,3 +1,3 @@ -如果启用,第一个颜色将成为刷怪蛋的背景颜色,第二个颜色将成为刷怪蛋的斑点颜色。 +如果选中了该参数,则第一个颜色将成为刷怪蛋的背景色,第二个颜色将成为刷怪蛋的斑点色。 您也可以选择该刷怪蛋所在的创造模式物品栏。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/spawn_group_size.md b/plugins/mcreator-localization/help/zh_CN/entity/spawn_group_size.md index 5715b686567..990ea7304c8 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/spawn_group_size.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/spawn_group_size.md @@ -1,3 +1,3 @@ 设置生物生成时,一组生物中所含个体的最小和最大个数。 -注意:尝试生成一组超过 20 个的生物是很难的(将会很少生成)。 \ No newline at end of file +请记住,一组超过20个的生物组将会很难生成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/spawn_type.md b/plugins/mcreator-localization/help/zh_CN/entity/spawn_type.md index dcb1564c1f8..65a58f62662 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/spawn_type.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/spawn_type.md @@ -1,8 +1,8 @@ 该参数控制生物将会属于什么生成类型。 * 标记为“怪物”(Monster)的生物只会在黑暗处或晚上生成。 -* 一个被标记为动物的生物只会在有草方块的阳光下生成 不要让怪物使用这个生成类型,这会使它们不会生成 -* 标记为环境的生物会在任何条件下生成,除非方块类型能防止它。 但是这个类别应该用于没有游戏效果的生物,如蝙蝠。 +* 一个被标记为动物的生物只会在有草方块的阳光下生成 不要让怪物使用该生成类型,这会使它们不会生成 +* 标记为 Ambient 的生物会在任何条件下生成,除非方块类型阻止生成它。 但是该类别应该用于没有游戏效果的生物,如蝙蝠。 * 水生生物将在水中生成,但没有其他限制 生成类型系统在 [此处](https://mcreator.net/wiki/mob-spawning-parameters) 有着深入的介绍。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/step_height.md b/plugins/mcreator-localization/help/zh_CN/entity/step_height.md index c3d6fafa72e..dab38c7e7f0 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/step_height.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/step_height.md @@ -1,3 +1,3 @@ -设置实体的可行走高度。 +设置实体的最大行走高度。 -大多数正常生物的行走高度为 0.6,而马等可骑乘实体的行走高度为 1。 \ No newline at end of file +大多数正常生物的最大行走高度为 0.6,而马等可骑乘实体的最大行走高度为 1。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/texture.md b/plugins/mcreator-localization/help/zh_CN/entity/texture.md index 82310f1411f..a89ae5f0023 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/texture.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/texture.md @@ -1,3 +1,5 @@ 生物的纹理。请保证它符合模型的设置。 -例如,两足生物模型(Biped models)只支持 64x64(1.18 前为 64x32)的纹理。 \ No newline at end of file +例如,两足生物模型(Biped models)只支持 64x64(1.18 前为 64x32)的纹理。 + +对于更复杂的模型图层定义,请使用“${l10n.t("elementgui.living_entity.page_model_layers")}”选项卡。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/tracking_range.md b/plugins/mcreator-localization/help/zh_CN/entity/tracking_range.md index 4d50496b25f..aa419021af0 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/tracking_range.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/tracking_range.md @@ -1,3 +1,3 @@ -这个参数控制玩家追踪实体的距离(以方块为单位)。 +该参数控制玩家追踪实体的距离(以方块为单位)。 -将这个参数设置为 0 则完全禁用实体的渲染和碰撞。 \ No newline at end of file +将该参数设置为 0 则完全禁用实体的渲染和碰撞。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/entity/visual_scale.md b/plugins/mcreator-localization/help/zh_CN/entity/visual_scale.md new file mode 100644 index 00000000000..dcd4dcdae57 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_CN/entity/visual_scale.md @@ -0,0 +1,3 @@ +此功能允许您控制实体游戏中的模型外观尺寸。 + +要调整实体的碰撞箱尺寸,请使用“碰撞箱缩放”参数。 diff --git a/plugins/mcreator-localization/help/zh_CN/entity/xp_amount.md b/plugins/mcreator-localization/help/zh_CN/entity/xp_amount.md index e7ae9bb92bf..9ce13fb4837 100644 --- a/plugins/mcreator-localization/help/zh_CN/entity/xp_amount.md +++ b/plugins/mcreator-localization/help/zh_CN/entity/xp_amount.md @@ -1,3 +1,3 @@ -该参数控制该生物被杀死时掉落的经验。 +该参数控制生物被杀死时掉落的经验。 -一般动物是 1-3,怪物是 5。 \ No newline at end of file +一般动物是1-3,怪物是5。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/feature/generation_condition.md b/plugins/mcreator-localization/help/zh_CN/feature/generation_condition.md index 8d5af28df94..bb7650366bf 100644 --- a/plugins/mcreator-localization/help/zh_CN/feature/generation_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/feature/generation_condition.md @@ -1,5 +1,5 @@ 添加带有逻辑返回值的流程,为生成该地物提供更多条件。 -在地物生成器中的位置修饰符之后检查这个条件。 +在地物生成器中的位置修饰符之后检查该条件。 -请记住,在早期生成世界时,某些流程可能无法在这个触发器中正常工作。 \ No newline at end of file +请记住,在早期生成世界时,某些流程可能无法在该触发器中正常工作。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/feature/generation_stage.md b/plugins/mcreator-localization/help/zh_CN/feature/generation_stage.md index f68a3cfb045..aed04f5a7d5 100644 --- a/plugins/mcreator-localization/help/zh_CN/feature/generation_stage.md +++ b/plugins/mcreator-localization/help/zh_CN/feature/generation_stage.md @@ -1 +1 @@ -这个选项决定了应该在世界生成的哪个阶段添加地物。 \ No newline at end of file +该选项决定了应该在世界生成的哪个阶段添加地物。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/fluid/flow_condition.md b/plugins/mcreator-localization/help/zh_CN/fluid/flow_condition.md index a5da13b06ea..30786c59875 100644 --- a/plugins/mcreator-localization/help/zh_CN/fluid/flow_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/fluid/flow_condition.md @@ -1,3 +1,3 @@ 该条件决定流体是否能从一个特定的位置开始流动。 -注意:流动行为也被其它属性影响(附近的斜坡、固体方块等)。 \ No newline at end of file +请记住,流动行为也被其它属性影响(附近的斜坡、固体方块等)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/fluid/slope_find_distance.md b/plugins/mcreator-localization/help/zh_CN/fluid/slope_find_distance.md index 9b8e9e124ac..cef3d26dc6f 100644 --- a/plugins/mcreator-localization/help/zh_CN/fluid/slope_find_distance.md +++ b/plugins/mcreator-localization/help/zh_CN/fluid/slope_find_distance.md @@ -1 +1 @@ -该参数决定多远斜坡对流体扩散的影响程度。流体会直接流向斜坡而不是向四周流动。该值越低,该流体将会在不平的地形上覆盖更大的面积。 \ No newline at end of file +该参数决定斜坡对流体扩散的影响程度。流体会直接流向斜坡而不是向四周流动。值越低,流体将会在崎岖的地表覆盖较大面积。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/fluid/temperature.md b/plugins/mcreator-localization/help/zh_CN/fluid/temperature.md index 5b748e49547..aa5c0ebf7e8 100644 --- a/plugins/mcreator-localization/help/zh_CN/fluid/temperature.md +++ b/plugins/mcreator-localization/help/zh_CN/fluid/temperature.md @@ -1,3 +1,3 @@ -该流体的温度,单位是开尔文(K)。该温度越高,流体越烫。 关于开尔文与摄氏度的转换:K=273.15+t(其中 t 是摄氏度,K 是开尔文) +该流体的温度,单位是开尔文(K)。温度越高,流体越烫。 注:开尔文与摄氏度间的转换:t=K-273.15(其中t是摄氏度,K是开尔文) 默认值是 300K(27℃),接近于室温(25℃)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/function/namespace.md b/plugins/mcreator-localization/help/zh_CN/function/namespace.md index 43d43d85441..458a578eb06 100644 --- a/plugins/mcreator-localization/help/zh_CN/function/namespace.md +++ b/plugins/mcreator-localization/help/zh_CN/function/namespace.md @@ -1,3 +1,3 @@ -* **模组(Mod):** 仅用于您的模组。(该函数的全名为`${modid}:${registryname}`) +* 模组(Mod): 仅用于您的模组。(该函数的全名为`${modid}:${registryname}`) -* **原版(Minecraft):** 可用于覆盖原版。(该函数的全名为`minecraft:${registryname}`) \ No newline at end of file +* 原版(Minecraft): 可用于覆盖原版。(该函数的全名为`minecraft:${registryname}`) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gamerule/default_value.md b/plugins/mcreator-localization/help/zh_CN/gamerule/default_value.md index 5c173d5908d..965996d03f1 100644 --- a/plugins/mcreator-localization/help/zh_CN/gamerule/default_value.md +++ b/plugins/mcreator-localization/help/zh_CN/gamerule/default_value.md @@ -1 +1 @@ -该游戏规则的默认值。除非游戏中(玩家或命令)改变了它,该游戏规则将会持有这个值。 \ No newline at end of file +该游戏规则的默认值。除非游戏中(玩家或命令)改变了它,该游戏规则将会持有该值。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gamerule/name.md b/plugins/mcreator-localization/help/zh_CN/gamerule/name.md index 083fd7a8dae..f4d6d1f49cc 100644 --- a/plugins/mcreator-localization/help/zh_CN/gamerule/name.md +++ b/plugins/mcreator-localization/help/zh_CN/gamerule/name.md @@ -1 +1 @@ -该游戏规则在游戏内部的名称,输入命令时输入。 \ No newline at end of file +该游戏规则在游戏内部的名称,在使用 /gamerule 命令时输入。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/entity_model_rotation.md b/plugins/mcreator-localization/help/zh_CN/gui/entity_model_rotation.md index c23dd4a9fee..b995ee2621c 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/entity_model_rotation.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/entity_model_rotation.md @@ -1,5 +1,5 @@ 实体偏航旋转参数以度为单位定义所呈现实体模型的初始旋转。 -这个参数仅适用于 Minecraft 1.19 及以上版本。 +该参数仅适用于Minecraft 1.19 及以上版本。 由于渲染引擎的限制,较大的数值可能会导致一些渲染问题。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/entity_model_scale.md b/plugins/mcreator-localization/help/zh_CN/gui/entity_model_scale.md index fe323ed6602..acfc0f46b79 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/entity_model_scale.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/entity_model_scale.md @@ -1 +1 @@ -确定显示的实体模型的大小。 \ No newline at end of file +确定显示的实体模型的尺寸。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/label_text.md b/plugins/mcreator-localization/help/zh_CN/gui/label_text.md index cf3ebc9ddc6..0bca271bd10 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/label_text.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/label_text.md @@ -1 +1 @@ -这个参数定义了标签打开时显示的文本。 您可以使用字符串返回类型流程来处理更复杂的文本。 \ No newline at end of file +该参数定义了标签打开时显示的文本。 您可以使用字符串返回类型流程来处理更复杂的文本。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/on_button_clicked.md b/plugins/mcreator-localization/help/zh_CN/gui/on_button_clicked.md index 9feaa951721..fdc3e1322c3 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/on_button_clicked.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/on_button_clicked.md @@ -1 +1 @@ -当该按钮被点击时触发一个流程。 \ No newline at end of file +当该按钮被单击时触发一个流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/slot_pickup_condition.md b/plugins/mcreator-localization/help/zh_CN/gui/slot_pickup_condition.md index 4d85b1a7a3e..3a17690812b 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/slot_pickup_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/slot_pickup_condition.md @@ -1 +1 @@ -如果条件返回 true,玩家将无法在储存槽中拿走物品。 然而,他们仍然能够不受任何限制地放置物品。 \ No newline at end of file +如果条件返回 true,玩家将无法在槽位中拿走物品。 然而,他们仍然能够不受任何限制地放置物品。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/slot_placement_condition.md b/plugins/mcreator-localization/help/zh_CN/gui/slot_placement_condition.md index a0256dc439a..c24b67cea58 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/slot_placement_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/slot_placement_condition.md @@ -1,3 +1,3 @@ -如果条件返回 true,玩家将无法将物品放入这个储存槽中。 然而玩家能够无限制的拿走物品。 +如果条件返回 true,玩家将无法将物品放入该槽位中。 然而玩家能够无限制的拿走物品。 -注意:此条件覆盖“限制物品栈输入”参数。 \ No newline at end of file +注:此条件覆盖“限制物品栈输入”参数。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/tooltip_display_condition.md b/plugins/mcreator-localization/help/zh_CN/gui/tooltip_display_condition.md index c594d561fee..478f100ef58 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/tooltip_display_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/tooltip_display_condition.md @@ -1 +1 @@ -如果指定了条件,这个提示框只能在条件通过后显示。 \ No newline at end of file +如果指定了条件,该提示框只能在条件通过后显示。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/when_slot_changed.md b/plugins/mcreator-localization/help/zh_CN/gui/when_slot_changed.md index abc87765d94..97f664bddd7 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/when_slot_changed.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/when_slot_changed.md @@ -1 +1 @@ -当一个物品放进/拿出储存槽时触发一个流程。 \ No newline at end of file +当一个物品放进/拿出槽位时触发一个流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/when_slot_item_taken.md b/plugins/mcreator-localization/help/zh_CN/gui/when_slot_item_taken.md index d3ad3e8fcf3..e2df5c50100 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/when_slot_item_taken.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/when_slot_item_taken.md @@ -1 +1 @@ -当一个物品放进/拿出储存槽时触发流程。 \ No newline at end of file +当一个物品放进/拿出槽位时触发流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/gui/when_transferred_from_slot.md b/plugins/mcreator-localization/help/zh_CN/gui/when_transferred_from_slot.md index 9da13d23e47..14d7030d85f 100644 --- a/plugins/mcreator-localization/help/zh_CN/gui/when_transferred_from_slot.md +++ b/plugins/mcreator-localization/help/zh_CN/gui/when_transferred_from_slot.md @@ -1 +1 @@ -当储存槽中的物品被拿走时触发一个流程。 \ No newline at end of file +当槽位中的物品被拿走时触发一个流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/bind_gui.md b/plugins/mcreator-localization/help/zh_CN/item/bind_gui.md index 1b85b3e4e59..37f483e349b 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/bind_gui.md +++ b/plugins/mcreator-localization/help/zh_CN/item/bind_gui.md @@ -1,5 +1,5 @@ -在这里选择 GUI 以启用这个物品的物品栏和 GUI 绑定。 +在这里选择 GUI 以启用该物品的物品栏和 GUI 绑定。 -设置为空以禁用物品栏(在大多数情况下您想要这个)。 +设置为空以禁用物品栏(在大多数情况下您想要该)。 启用物品栏将使该物品不可堆叠。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/can_destroy_any_block.md b/plugins/mcreator-localization/help/zh_CN/item/can_destroy_any_block.md index bbfd4f711f4..8129c0a5d1c 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/can_destroy_any_block.md +++ b/plugins/mcreator-localization/help/zh_CN/item/can_destroy_any_block.md @@ -1 +1 @@ -勾选这个参数,如果您想要使用这个物品破坏任何方块,甚至基岩。 \ No newline at end of file +勾选该参数,如果您想要使用该物品破坏任何方块,甚至基岩。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/container_item.md b/plugins/mcreator-localization/help/zh_CN/item/container_item.md index 69375314abe..4d33843cc91 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/container_item.md +++ b/plugins/mcreator-localization/help/zh_CN/item/container_item.md @@ -1 +1 @@ -这个参数控制物品在制作时是否保持在网格中。 这意味着物品将是配方的一部分,但不会被消耗。 \ No newline at end of file +该参数控制物品在合成时是否会留在合成方格中。 这意味着物品将是配方的一部分,但不会被消耗。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/container_item_damage.md b/plugins/mcreator-localization/help/zh_CN/item/container_item_damage.md index 1906c382db2..e454878bbd5 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/container_item_damage.md +++ b/plugins/mcreator-localization/help/zh_CN/item/container_item_damage.md @@ -1 +1 @@ -如果您启用了 ${l10n.t("elementgui.item.container_item")},您可以启用这个选项来损坏物品(即降低耐久值),而不是简单地将其保留在制作网格中。 \ No newline at end of file +如果您启用了 ${l10n.t("elementgui.item.container_item")},您可以启用该选项来损坏物品(即降低耐久值),而不是简单地将其保留在合成方格中。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/custom_property_name.md b/plugins/mcreator-localization/help/zh_CN/item/custom_property_name.md index 9aa4cc2b6bf..be1a962cbff 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/custom_property_name.md +++ b/plugins/mcreator-localization/help/zh_CN/item/custom_property_name.md @@ -1,3 +1,3 @@ -这个参数控制这个属性的名称。不允许使用重复的名称。 +该参数控制该属性的名称。不允许使用重复的名称。 -因为部分属性是为 Minecraft 原版的所有物品定义的,所以他们的名字不能重复使用。 \ No newline at end of file +因为部分属性是为Minecraft 原版的所有物品定义的,所以他们的名字不能重复使用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/custom_property_value.md b/plugins/mcreator-localization/help/zh_CN/item/custom_property_value.md index a938a5e6c30..86f04db2963 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/custom_property_value.md +++ b/plugins/mcreator-localization/help/zh_CN/item/custom_property_value.md @@ -1,3 +1,3 @@ -指定一个流程来确定这个自定义物品属性的值。 +指定一个流程来确定该自定义物品属性的值。 如果实体持有这一物品,则所提供的坐标/世界说明该实体的位置。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/custom_states.md b/plugins/mcreator-localization/help/zh_CN/item/custom_states.md index 025e5ec1977..de13085983f 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/custom_states.md +++ b/plugins/mcreator-localization/help/zh_CN/item/custom_states.md @@ -1,5 +1,5 @@ -在这里您可以列出这个物品的附加属性,并指定它的纹理/模型如何变化 根据给定的属性值组合形成状态。 物品属性可以接受任何数字(整数或小数)作为其值,因这个为了避免需要遵循任何粒度 为了提供接近的值,如果从项中提取的实际属性值_与 或大于_预期值(此处指定)。如果有几个状态有匹配的值, 将使用这些匹配状态中的最后一个。如果没有状态匹配,物品将使用其默认的视觉外观。 +在这里您可以列出该物品的附加属性,并指定它的纹理/模型如何变化 根据给定的属性值组合形成状态。 物品属性可以接受任何数字(整数或小数)作为其值,因该为了避免需要遵循任何粒度 为了提供接近的值,如果从项中提取的实际属性值与 或大于预期值(此处指定)。如果有几个状态有匹配的值, 将使用这些匹配状态中的最后一个。如果没有状态匹配,物品将使用其默认的视觉外观。 -除了自定义属性,您还可以使用一些内置的物品属性来定义代表 Minecraft 的所有物品。 +除了自定义属性,您还可以使用一些内置的物品属性来定义代表Minecraft 的所有物品。 -注意:不允许重复状态。如果两个或多个状态仅在单个属性的值上不同,则删除 该属性将自动删除上述第一种状态的副本。 \ No newline at end of file +注:不允许重复状态。如果两个或多个状态仅在单个属性的值上不同,则删除 该属性将自动删除上述第一种状态的副本。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/damage_vs_entity.md b/plugins/mcreator-localization/help/zh_CN/item/damage_vs_entity.md index 658093c719a..697e1a898a1 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/damage_vs_entity.md +++ b/plugins/mcreator-localization/help/zh_CN/item/damage_vs_entity.md @@ -1 +1 @@ -您可以用这个参数激活您的物品的近战伤害,并设置一个伤害值。 \ No newline at end of file +您可以用该参数激活您的物品的近战伤害,并设置一个伤害值。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/destroy_speed.md b/plugins/mcreator-localization/help/zh_CN/item/destroy_speed.md index cbd4241b243..23f4a8a92f6 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/destroy_speed.md +++ b/plugins/mcreator-localization/help/zh_CN/item/destroy_speed.md @@ -1,6 +1,6 @@ 破坏速度参数控制该物品破坏方块的速度。 常用数值: -* **1** - 一般物品 -* **1.5** - 剑 -* **2 > **收集工具 \ No newline at end of file +* 1 - 一般物品 +* 1.5 - 剑 +* 2 > 收集工具 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/enable_ranged_item.md b/plugins/mcreator-localization/help/zh_CN/item/enable_ranged_item.md index 20b14508548..ee36ddd32e3 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/enable_ranged_item.md +++ b/plugins/mcreator-localization/help/zh_CN/item/enable_ranged_item.md @@ -1 +1,7 @@ -通过启用这个参数让该物品将成为一个远程物品,使它能够像弓和弩一样发射弹射物。 \ No newline at end of file +启用此参数,物品将会变成远程物品。 允许它像弓和弩一样发射弹射物。 + +要让远程物品正常工作,将其动画设置为弓或与弓相似。 同时确保物品使用时间为正数值。 + +如果使用了远程物品,并且物品(ammo,即为弹药)在玩家物品栏内, 则物品只能用于发射。通常是在使用原版箭时是箭,或是你在自定义 弹射物的所需物品参数中指定的物品。 + +如果想要在不使用所需物品下发射投射物, 请使用右击时流程触发器和流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/enchantability.md b/plugins/mcreator-localization/help/zh_CN/item/enchantability.md index 8fa047913bb..70f0be05d02 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/enchantability.md +++ b/plugins/mcreator-localization/help/zh_CN/item/enchantability.md @@ -1,4 +1,4 @@ -在这个物品/工具上得到稀有附魔的概率。 +在该物品/工具上得到稀有附魔的概率。 原版值: diff --git a/plugins/mcreator-localization/help/zh_CN/item/immune_to_fire.md b/plugins/mcreator-localization/help/zh_CN/item/immune_to_fire.md index bfc5e3fe713..63005875094 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/immune_to_fire.md +++ b/plugins/mcreator-localization/help/zh_CN/item/immune_to_fire.md @@ -1 +1 @@ -这个参数控制物品是否对火免疫,比如下界合金物品。 \ No newline at end of file +该参数控制物品是否对火免疫,比如下界合金物品。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/inventory_size.md b/plugins/mcreator-localization/help/zh_CN/item/inventory_size.md index b0694a2a490..e424d125685 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/inventory_size.md +++ b/plugins/mcreator-localization/help/zh_CN/item/inventory_size.md @@ -1,3 +1,3 @@ -选择 GUI/物品栏的储存槽数量。不要忘记给最大的储存槽 ID 加1。 +选择 GUI/物品栏的槽位数量。不要忘记给最大的槽位 ID 加1。 -如果方块绑定到 GUI,则将这个值设置为`GUI 中最大的储存槽ID + 1`。(Minecraft 的计数从 0 开始) \ No newline at end of file +如果方块绑定到 GUI,则将该值设置为`GUI 中最大的槽位ID + 1`。(Minecraft 的计数从 0 开始) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/inventory_stack_size.md b/plugins/mcreator-localization/help/zh_CN/item/inventory_stack_size.md index e1678d8ecf3..53ef1ad5a78 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/inventory_stack_size.md +++ b/plugins/mcreator-localization/help/zh_CN/item/inventory_stack_size.md @@ -1,3 +1,3 @@ -该参数控制物品可放置在其内部物品栏储存槽中的堆叠的最大大小。 +该参数控制物品可放置在其内部物品栏槽位中的堆叠的最大数量。 -请记住,这个参数与最大物品堆叠大小之间的较小数字决定了实际的最大堆叠大小。 \ No newline at end of file +请记住,该参数与最大物品堆叠数量之间的较小数字决定了实际的最大堆叠数量。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/is_food.md b/plugins/mcreator-localization/help/zh_CN/item/is_food.md index dd9543e315a..af269fdfd1d 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/is_food.md +++ b/plugins/mcreator-localization/help/zh_CN/item/is_food.md @@ -1 +1 @@ -选中此框使这个物品可食用(使其具有食物属性)。 \ No newline at end of file +选中该框使该物品可食用(使其具有食物属性)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/model.md b/plugins/mcreator-localization/help/zh_CN/item/model.md index f55d1cc9df6..97ca5e635f5 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/model.md +++ b/plugins/mcreator-localization/help/zh_CN/item/model.md @@ -1,7 +1,7 @@ -选择要与这个物品一起使用的模型。模型只定义视觉外观。 +选择要与该物品一起使用的模型。模型只定义视觉外观。 -* **一般(Normal)** - 一般非工具(例如镐、锹、锄)物品 +* 一般(Normal) - 一般非工具(例如镐、锹、锄)物品 * 工具(Tool) - 工具使用的模型 * 自定义 - 您也可以定义自定义 JSON 和 OBJ 模型 -在创建自定义模型时,建议使用 JSON,因为原版 Minecraft 对这种模型类型支持最好。 \ No newline at end of file +在创建自定义模型时,建议使用 JSON,因为原版Minecraft 对这种模型类型支持最好。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/number_of_uses.md b/plugins/mcreator-localization/help/zh_CN/item/number_of_uses.md index 7d42616cea2..651cd963d92 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/number_of_uses.md +++ b/plugins/mcreator-localization/help/zh_CN/item/number_of_uses.md @@ -1,6 +1,6 @@ -这个参数控制物品的耐久值(物品可以被使用多少次)。 +该参数控制物品的耐久值(物品可以被使用多少次)。 -将这个值设置为 0 以禁用耐久度。 +将该值设置为 0 以禁用耐久度。 可供参考的原版值: @@ -14,7 +14,7 @@ * 打火石:64 * 胡萝卜钓竿:25 * 剪刀:238 -* 三叉戟: 250 +* 三叉戟:250 * 弩:326 * 盾牌:336 * 弓:384 diff --git a/plugins/mcreator-localization/help/zh_CN/item/on_crafted.md b/plugins/mcreator-localization/help/zh_CN/item/on_crafted.md index 6758d4afbb4..6f1f8ed7d90 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/on_crafted.md +++ b/plugins/mcreator-localization/help/zh_CN/item/on_crafted.md @@ -1 +1 @@ -该流程在这个物品被合成或熔炼时执行。 \ No newline at end of file +该流程在该物品被合成或熔炼时执行。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/on_dropped.md b/plugins/mcreator-localization/help/zh_CN/item/on_dropped.md index 32d9289d985..0e1515f044e 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/on_dropped.md +++ b/plugins/mcreator-localization/help/zh_CN/item/on_dropped.md @@ -1 +1 @@ -该物品掉落时执行这个流程。 \ No newline at end of file +该物品掉落时执行该流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/projectile.md b/plugins/mcreator-localization/help/zh_CN/item/projectile.md index 30fd7d35e31..d29041edd49 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/projectile.md +++ b/plugins/mcreator-localization/help/zh_CN/item/projectile.md @@ -1,3 +1,3 @@ -这是这个远程物品可以射出的弹射物类型。 +这是该远程物品可以射出的弹射物类型。 -您可以创建和使用自定义弹射物或使用原版弹射物。 如果您选择了原版弹射物, 那这个值将比这里指定的值更优先。 \ No newline at end of file +您可以创建和使用自定义弹射物或使用原版弹射物。 如果您选择了原版弹射物, 那该值将比这里指定的值更优先。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/ranged_use_condition.md b/plugins/mcreator-localization/help/zh_CN/item/ranged_use_condition.md index c47966c1cca..3a46343dcce 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/ranged_use_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/item/ranged_use_condition.md @@ -1,3 +1,3 @@ -这个流程将在远程物品触发之前调用,以检查所选流程的返回值是否为 true。 +该流程将在远程物品触发之前调用,以检查所选流程的返回值是否为 true。 保留“${l10n.t("condition.common.true")}”来禁用任何附加条件。在这种情况下弹药检查仍然适用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/recipe_remainder.md b/plugins/mcreator-localization/help/zh_CN/item/recipe_remainder.md index 18e8081e3ce..c86121fe5bc 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/recipe_remainder.md +++ b/plugins/mcreator-localization/help/zh_CN/item/recipe_remainder.md @@ -1 +1 @@ -这个参数控制将在工作台中被替换的物品。 这意味着该物品将是配方的一部分,但将被另一个物品替换。 \ No newline at end of file +该参数控制将在工作台中被替换的物品。 这意味着该物品将是配方的一部分,但将被另一个物品替换。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/shoot_constantly.md b/plugins/mcreator-localization/help/zh_CN/item/shoot_constantly.md index fe60877e8df..e202909371c 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/shoot_constantly.md +++ b/plugins/mcreator-localization/help/zh_CN/item/shoot_constantly.md @@ -1 +1 @@ -如果选中这个参数,在玩家右击时远程物品时将不断射击。 \ No newline at end of file +如果选中该参数,在玩家右击时远程物品时将不断射击。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/special_information.md b/plugins/mcreator-localization/help/zh_CN/item/special_information.md index d4f1e4269fd..12dde662549 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/special_information.md +++ b/plugins/mcreator-localization/help/zh_CN/item/special_information.md @@ -1 +1,3 @@ -当你用鼠标点击物品栏中的物品图标时,此参数会给物品添加一个提示框。 如果您使用流程生成的提示框,而您的物品未被实体拿取或不是矿物,`实体(entity)`依赖项将为空(null)。 \ No newline at end of file +当您把鼠标悬停在物品栏的物品图标上时,此参数会给物品添加一个提示框。 + +如果您使用了用流程生成的提示框,而您的物品是未被一个实体持有或目前是掉落物,` entity `依赖项将为空。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/stack_size.md b/plugins/mcreator-localization/help/zh_CN/item/stack_size.md index f5f2b88b0c0..a727fe94d9d 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/stack_size.md +++ b/plugins/mcreator-localization/help/zh_CN/item/stack_size.md @@ -1,3 +1,3 @@ 这是该类型元素在堆栈中所能容纳的最大数值。 -原版示例:末影珍珠的堆叠大小为 16。 \ No newline at end of file +原版示例:末影珍珠的堆叠数量为 16。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/use_duration.md b/plugins/mcreator-localization/help/zh_CN/item/use_duration.md index ec7c1d42ccd..cc60176e124 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/use_duration.md +++ b/plugins/mcreator-localization/help/zh_CN/item/use_duration.md @@ -1,3 +1,3 @@ -这个参数控制物品一次可以使用多长时间。 +该参数控制物品一次可以使用多长时间。 -如果物品是一种食物,那么这个值将定义玩家吃一种食物所需的时间。 \ No newline at end of file +如果物品是一种食物,那么该值将定义玩家吃一种食物所需的时间。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/when_entity_hit.md b/plugins/mcreator-localization/help/zh_CN/item/when_entity_hit.md index a63d4000958..35c6ed6b3e4 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/when_entity_hit.md +++ b/plugins/mcreator-localization/help/zh_CN/item/when_entity_hit.md @@ -1 +1 @@ -当一个生物(类似牛,苦力怕,玩家等)被这个物品击中时,这个流程就会执行。 \ No newline at end of file +当一个生物(类似牛,苦力怕,玩家等)被该物品击中时,该流程就会执行。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/when_entity_swings.md b/plugins/mcreator-localization/help/zh_CN/item/when_entity_swings.md index 23672039fc3..3ead499730f 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/when_entity_swings.md +++ b/plugins/mcreator-localization/help/zh_CN/item/when_entity_swings.md @@ -1,3 +1,3 @@ 当实体在空中挥动该物品时触发一个流程。 -例如,如果您在空中右键单击您的物品,该流程将被执行。 \ No newline at end of file +例如,如果您在空中右击单击您的物品,该流程将被执行。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/when_right_clicked.md b/plugins/mcreator-localization/help/zh_CN/item/when_right_clicked.md index 4f3c570cc9d..722448b98dd 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/when_right_clicked.md +++ b/plugins/mcreator-localization/help/zh_CN/item/when_right_clicked.md @@ -1,3 +1,3 @@ -当玩家右键点击手中的物品时,这个流程就会执行。 +当玩家右击手中的物品时,该流程就会执行。 -如果您想让这个流程只在实体在空中用这个物品右击时被调用, ${l10n.t("elementgui.common.event_right_clicked_block")} 流程应该总是返回 SUCCESS/CONSUME。 \ No newline at end of file +如果您想让该流程只在实体在空中用该物品右击时被调用, ${l10n.t("elementgui.common.event_right_clicked_block")} 流程应该总是返回 SUCCESS/CONSUME。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item/when_right_clicked_block.md b/plugins/mcreator-localization/help/zh_CN/item/when_right_clicked_block.md index eb4121e7177..caa5ff1824a 100644 --- a/plugins/mcreator-localization/help/zh_CN/item/when_right_clicked_block.md +++ b/plugins/mcreator-localization/help/zh_CN/item/when_right_clicked_block.md @@ -1,7 +1,7 @@ -这个流程是在玩家右键点击一个方块时执行的。 +该流程是在玩家右击一个方块时执行的。 如果物品与方块交互,流程应返回类型为 SUCCESS/CONSUME 的操作结果,如果交互失败则返回 FAIL,如果没有交互则返回 PASS。 如果流程没有返回任何值,结果操作类型将是 PASS。 -如果您想要 ${l10n.t("elementgui.common.event_right_clicked_air")} 流程只在实体在空中用这个物品右击时被调用,这个流程应该总是返回 SUCCESS/CONSUME。 \ No newline at end of file +如果您想要 ${l10n.t("elementgui.common.event_right_clicked_air")} 流程只在实体在空中用该物品右击时被调用,该流程应该总是返回 SUCCESS/CONSUME。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item_extension/burn_time.md b/plugins/mcreator-localization/help/zh_CN/item_extension/burn_time.md index ab90c5dc3cb..aaff2eb5028 100644 --- a/plugins/mcreator-localization/help/zh_CN/item_extension/burn_time.md +++ b/plugins/mcreator-localization/help/zh_CN/item_extension/burn_time.md @@ -6,5 +6,5 @@ `#物品熔炼所需的游戏刻数=#您想要的燃料熔炼的物品数 * 200` -点击 [这里](https://mcreator.net/wiki/burn-time-fuels) 查看原版中熔炼常用物品的燃烧时间表。 +单击 [这里](https://mcreator.net/wiki/burn-time-fuels) 查看原版中熔炼常用物品的燃烧时间表。 diff --git a/plugins/mcreator-localization/help/zh_CN/item_extension/dispense_result_itemstack.md b/plugins/mcreator-localization/help/zh_CN/item_extension/dispense_result_itemstack.md index b5c2bad9091..a514fb2a7bf 100644 --- a/plugins/mcreator-localization/help/zh_CN/item_extension/dispense_result_itemstack.md +++ b/plugins/mcreator-localization/help/zh_CN/item_extension/dispense_result_itemstack.md @@ -1,3 +1,3 @@ -这个流程决定了物品在尝试发射会发生什么。 如果没有选择或所选流程没有返回物品栈,则在消耗成功的情况下,当前用于发射的物品栈的物品数量将减少 1 个。 +该流程决定了物品在尝试发射会发生什么。 如果没有选择或所选流程没有返回物品栈,则在消耗成功的情况下,当前用于发射的物品栈的物品数量将减少 1 个。 -您可以使用这个流程消耗该物品、损坏该物品或将其替换为其他物品。 \ No newline at end of file +您可以使用该流程消耗该物品、损坏该物品或将其替换为其他物品。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item_extension/dispense_success_condition.md b/plugins/mcreator-localization/help/zh_CN/item_extension/dispense_success_condition.md index dcd44fbaa72..1dc3926d7bc 100644 --- a/plugins/mcreator-localization/help/zh_CN/item_extension/dispense_success_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/item_extension/dispense_success_condition.md @@ -1,3 +1,3 @@ -这个条件决定是否完成发射。如果条件失败,发射器将显示失败效果。 +该条件决定是否完成发射。如果条件失败,发射器将显示失败效果。 -这个流程的值被传递给 ${l10n.t("elementgui.item_extension.dispense_result_itemstack")} 作为 “SUCCESS” 的依赖项。 \ No newline at end of file +该流程的值被传递给 ${l10n.t("elementgui.item_extension.dispense_result_itemstack")} 作为 “SUCCESS” 的依赖项。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item_extension/enable_fuel.md b/plugins/mcreator-localization/help/zh_CN/item_extension/enable_fuel.md index c8d4c319f46..df9143b2402 100644 --- a/plugins/mcreator-localization/help/zh_CN/item_extension/enable_fuel.md +++ b/plugins/mcreator-localization/help/zh_CN/item_extension/enable_fuel.md @@ -1 +1 @@ -选中这个选项可使所选物品成为熔炉的燃料(如煤炭、木板等)。 \ No newline at end of file +选中该框使所选物品成为熔炉燃料(如煤炭、木板等)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/item_extension/has_dispense_behavior.md b/plugins/mcreator-localization/help/zh_CN/item_extension/has_dispense_behavior.md index f9bb0951c41..93fcb300b81 100644 --- a/plugins/mcreator-localization/help/zh_CN/item_extension/has_dispense_behavior.md +++ b/plugins/mcreator-localization/help/zh_CN/item_extension/has_dispense_behavior.md @@ -1 +1 @@ -如果选中这个选项,则发射器不会使用默认操作删除该物品,而是调用 ${l10n.t("elementgui.item_extension.dispense_success_condition") 和 ${l10n.t("elementgui.item_extension.dispense_result_itemstack")} 流程替代。 +如果选中该选项,则发射器不会使用默认操作删除该物品,而是调用 ${l10n.t("elementgui.item_extension.dispense_success_condition") 和 ${l10n.t("elementgui.item_extension.dispense_result_itemstack")} 流程替代。 diff --git a/plugins/mcreator-localization/help/zh_CN/item_extension/layer_chance.md b/plugins/mcreator-localization/help/zh_CN/item_extension/layer_chance.md index b565a308b8f..7a9db57e4a4 100644 --- a/plugins/mcreator-localization/help/zh_CN/item_extension/layer_chance.md +++ b/plugins/mcreator-localization/help/zh_CN/item_extension/layer_chance.md @@ -1,3 +1,3 @@ -这个数字是该物品添加一层到堆肥桶的概率。 保持数值为 0 来禁用。 +该数字是该物品添加一层到堆肥桶的概率。 保持数值为 0 来禁用。 -原版数值可在[此](https://minecraft.wiki/w/Composter#Composting)找到。
中文链接(Fandom):中文 \ No newline at end of file +原版数值可在此找到。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/keybinding/category.md b/plugins/mcreator-localization/help/zh_CN/keybinding/category.md index 375264ae8a0..6540fadaa31 100644 --- a/plugins/mcreator-localization/help/zh_CN/keybinding/category.md +++ b/plugins/mcreator-localization/help/zh_CN/keybinding/category.md @@ -1,4 +1,4 @@ -按键绑定的类别是显示在控制部分的 Minecraft 设置。 +按键绑定的类别是显示在控制部分的Minecraft 设置。 属于同一类别的所有按键绑定应该具有相同的类别。 diff --git a/plugins/mcreator-localization/help/zh_CN/keybinding/key.md b/plugins/mcreator-localization/help/zh_CN/keybinding/key.md index 9b09c115b68..01b546dc3cd 100644 --- a/plugins/mcreator-localization/help/zh_CN/keybinding/key.md +++ b/plugins/mcreator-localization/help/zh_CN/keybinding/key.md @@ -1,3 +1,3 @@ -这个参数定义用于执行按键绑定流程的按键。 +该参数定义用于执行按键绑定流程的按键。 玩家可以在按键控制中改变它。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/keybinding/name.md b/plugins/mcreator-localization/help/zh_CN/keybinding/name.md index 974f0619154..48f15b64142 100644 --- a/plugins/mcreator-localization/help/zh_CN/keybinding/name.md +++ b/plugins/mcreator-localization/help/zh_CN/keybinding/name.md @@ -1 +1 @@ -这个参数控制在 Minecraft 设置中的选项卡显示的按键名称。 \ No newline at end of file +该参数控制在Minecraft 设置中的选项卡显示的按键名称。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/keybinding/when_key_released.md b/plugins/mcreator-localization/help/zh_CN/keybinding/when_key_released.md index 1a4b0875fa7..050b0edb43c 100644 --- a/plugins/mcreator-localization/help/zh_CN/keybinding/when_key_released.md +++ b/plugins/mcreator-localization/help/zh_CN/keybinding/when_key_released.md @@ -1,3 +1,3 @@ -这个流程将在释放所选的键时执行(在玩家按下键后)。 +该流程将在释放所选的键时执行(在玩家按下键后)。 您可以使用按键按下依赖项来确定在自定义流程中按下键的时间。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/loottable/registry_name.md b/plugins/mcreator-localization/help/zh_CN/loottable/registry_name.md index 3b7cabd8a2b..c35c5541763 100644 --- a/plugins/mcreator-localization/help/zh_CN/loottable/registry_name.md +++ b/plugins/mcreator-localization/help/zh_CN/loottable/registry_name.md @@ -1,3 +1,3 @@ -点击下拉列表,选择战利品表的“类别”。它没有定义战利品表类型。 +单击下拉列表,选择战利品表的“类别”。它没有定义战利品表类型。 这只是为了标准化战利品表的名称。例如,方块战利品表使用 "blocks/registry_name"。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/loottable/type.md b/plugins/mcreator-localization/help/zh_CN/loottable/type.md index 40e4224bffa..a7cc314360c 100644 --- a/plugins/mcreator-localization/help/zh_CN/loottable/type.md +++ b/plugins/mcreator-localization/help/zh_CN/loottable/type.md @@ -1 +1 @@ -这个参数定义了您制作的战利品表的类型。 \ No newline at end of file +该参数定义了您制作的战利品表的类型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/musicdisc/analog_output.md b/plugins/mcreator-localization/help/zh_CN/musicdisc/analog_output.md index 3726c7b7484..b009705ea52 100644 --- a/plugins/mcreator-localization/help/zh_CN/musicdisc/analog_output.md +++ b/plugins/mcreator-localization/help/zh_CN/musicdisc/analog_output.md @@ -1 +1 @@ -当这个音乐唱片存在于其旁边的唱片机时,模拟红石比较器输出的值。 +当该音乐唱片存在于其旁边的唱片机时,模拟红石比较器输出的值。 diff --git a/plugins/mcreator-localization/help/zh_CN/musicdisc/length.md b/plugins/mcreator-localization/help/zh_CN/musicdisc/length.md index 10483eb1c71..f10472c2408 100644 --- a/plugins/mcreator-localization/help/zh_CN/musicdisc/length.md +++ b/plugins/mcreator-localization/help/zh_CN/musicdisc/length.md @@ -1,3 +1,3 @@ 音乐唱片的长度,以游戏刻表示。20 刻是 1 秒。 -这个参数用于在播放开始后,当在这个字段中指定的节拍数通过时,向悦灵发送信号以停止跳动。 +该参数用于在播放开始后,当在该框中指定的节拍数通过时,向悦灵发送信号以停止跳动。 diff --git a/plugins/mcreator-localization/help/zh_CN/overlay/base_texture.md b/plugins/mcreator-localization/help/zh_CN/overlay/base_texture.md index c4cd11cb51e..764f98b010b 100644 --- a/plugins/mcreator-localization/help/zh_CN/overlay/base_texture.md +++ b/plugins/mcreator-localization/help/zh_CN/overlay/base_texture.md @@ -1,5 +1,5 @@ -叠加层的基础纹理。其他组件将被绘制在这个纹理上。 +叠加层的基础纹理。其他组件将被绘制在该纹理上。 -这个参数可以用来制作类似“雕刻南瓜”的图层。 +该参数可以用来制作类似“雕刻南瓜”的图层。 -推荐的覆盖尺寸是1920 x 1080,使是适当的比例。 \ No newline at end of file +推荐的覆盖尺寸是1920X1080,使是适当的比例。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/overlay/display_condition.md b/plugins/mcreator-localization/help/zh_CN/overlay/display_condition.md index ff4b7ae34d8..3bdbb391eba 100644 --- a/plugins/mcreator-localization/help/zh_CN/overlay/display_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/overlay/display_condition.md @@ -1,3 +1,3 @@ -这个流程指定是否应该显示叠加层。 +该流程指定是否应该显示叠加层。 当流程返回 "true" 时,叠加层将显示在屏幕上。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/overlay/rendering_priority.md b/plugins/mcreator-localization/help/zh_CN/overlay/rendering_priority.md index 5339af16717..f6fd360c55d 100644 --- a/plugins/mcreator-localization/help/zh_CN/overlay/rendering_priority.md +++ b/plugins/mcreator-localization/help/zh_CN/overlay/rendering_priority.md @@ -1 +1 @@ -这个参数定义了叠加层的优先级。带 High 的叠加层图层将在带 Low 的叠加层之上渲染。 \ No newline at end of file +该参数定义了叠加层的优先级。带 High 的叠加层图层将在带 Low 的叠加层之上渲染。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/painting/author.md b/plugins/mcreator-localization/help/zh_CN/painting/author.md index 9e5b797a9ba..5c9b62abcc9 100644 --- a/plugins/mcreator-localization/help/zh_CN/painting/author.md +++ b/plugins/mcreator-localization/help/zh_CN/painting/author.md @@ -1,3 +1,3 @@ 该参数定义绘画的作者。 -注意:必需的,但仅用于1.19.4+ \ No newline at end of file +注:必需的,但仅用于1.19.4+ \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/painting/height.md b/plugins/mcreator-localization/help/zh_CN/painting/height.md index 160da94d3d5..8066c5e0377 100644 --- a/plugins/mcreator-localization/help/zh_CN/painting/height.md +++ b/plugins/mcreator-localization/help/zh_CN/painting/height.md @@ -1 +1 @@ -这个参数控制绘画的高度(以格为单位)。 \ No newline at end of file +该参数控制绘画的高度(以格为单位)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/painting/texture.md b/plugins/mcreator-localization/help/zh_CN/painting/texture.md index 7f5e6e8e991..483548b265c 100644 --- a/plugins/mcreator-localization/help/zh_CN/painting/texture.md +++ b/plugins/mcreator-localization/help/zh_CN/painting/texture.md @@ -1,3 +1,3 @@ 选择一个纹理,应该用作这幅画的前景。 -重要提示: 如果纹理名称与元素的注册名不同,则会生成纹理的副本。 \ No newline at end of file +重要提示:如果纹理名称与元素的注册名不同,则会生成纹理的副本。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/painting/title.md b/plugins/mcreator-localization/help/zh_CN/painting/title.md index a5c22454d5b..08cef683985 100644 --- a/plugins/mcreator-localization/help/zh_CN/painting/title.md +++ b/plugins/mcreator-localization/help/zh_CN/painting/title.md @@ -1,3 +1,3 @@ 该参数定义绘画的标题。 -注意:必需的,但仅用于1.19.4+ \ No newline at end of file +注:必需的,但仅用于1.19.4+ \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/painting/width.md b/plugins/mcreator-localization/help/zh_CN/painting/width.md index de9a7521bf1..ed831c131a7 100644 --- a/plugins/mcreator-localization/help/zh_CN/painting/width.md +++ b/plugins/mcreator-localization/help/zh_CN/painting/width.md @@ -1 +1 @@ -这个参数控制该绘画的宽度(以格单位)。 \ No newline at end of file +该参数控制该绘画的宽度(以格和像素为单位)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/particle/angular_acceleration.md b/plugins/mcreator-localization/help/zh_CN/particle/angular_acceleration.md index a194cdc940b..50c832226ed 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/angular_acceleration.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/angular_acceleration.md @@ -1 +1 @@ -这个参数控制粒子的旋转加速度。 \ No newline at end of file +该参数控制粒子的旋转加速度。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/particle/angular_velocity.md b/plugins/mcreator-localization/help/zh_CN/particle/angular_velocity.md index e3f01162342..0e7f585ea5f 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/angular_velocity.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/angular_velocity.md @@ -1,3 +1,3 @@ -这个参数控制粒子的初始旋转速度。 负数值表示逆时针旋转。 +该参数控制粒子的初始旋转速度。 负数值表示逆时针旋转。 0.314 的值大致相当于每秒旋转 1 次。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/particle/animated_frame_duration.md b/plugins/mcreator-localization/help/zh_CN/particle/animated_frame_duration.md index 8caa4dd5bfd..670f80325ff 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/animated_frame_duration.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/animated_frame_duration.md @@ -1 +1 @@ -这个参数控制在切换到下一个动画帧之前应该经过多少个游戏刻。 \ No newline at end of file +该参数控制在切换到下一个动画帧之前应该经过多少个游戏刻。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/particle/animated_texture.md b/plugins/mcreator-localization/help/zh_CN/particle/animated_texture.md index a9ae215678a..6261e305985 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/animated_texture.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/animated_texture.md @@ -1 +1 @@ -如果您的粒子纹理需要动画化,请勾选这个框。 \ No newline at end of file +如果您的粒子纹理需要动画化,请勾选该框。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/particle/gravity.md b/plugins/mcreator-localization/help/zh_CN/particle/gravity.md index fc79cff792d..6e972064007 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/gravity.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/gravity.md @@ -1 +1 @@ -这个参数指定粒子下落速度。 负数值将使这个粒子飞向天空。 \ No newline at end of file +该参数指定粒子下落速度。 负数值将使该粒子飞向天空。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/particle/height.md b/plugins/mcreator-localization/help/zh_CN/particle/height.md index 5a734fcc3a8..074df779446 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/height.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/height.md @@ -1 +1 @@ -这个参数控制这个粒子的高度(以格为单位)。 \ No newline at end of file +该参数控制该粒子的高度(以格为单位)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/particle/max_age.md b/plugins/mcreator-localization/help/zh_CN/particle/max_age.md index f305b20a39f..be434e58169 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/max_age.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/max_age.md @@ -1,3 +1,3 @@ -当粒子的消失时长等于这个刻数时,粒子就会消失。 +当粒子的消失时长等于该刻数时,粒子就会消失。 如果最大时长差大于 0,这种情况会提早发生。 diff --git a/plugins/mcreator-localization/help/zh_CN/particle/max_age_diff.md b/plugins/mcreator-localization/help/zh_CN/particle/max_age_diff.md index 7d1b6486514..3c3930b04fa 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/max_age_diff.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/max_age_diff.md @@ -1 +1 @@ -这个参数控制实际最大粒子存在时间与指定的最大时长之间的正负变化的程度。 \ No newline at end of file +该参数控制实际最大粒子存在时间与指定的最大时长之间的正负变化的程度。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/particle/render_type.md b/plugins/mcreator-localization/help/zh_CN/particle/render_type.md index 4044d5d3588..e1f0d49155d 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/render_type.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/render_type.md @@ -1,5 +1,5 @@ -这个参数定义了应该如何渲染这个粒子: +该参数定义了应该如何渲染该粒子: -* **不透明(Opaque):** 没有 mipmap 的透明(类似于死亡粒子) -* **半透明(Translucent):**部分透明和资源消耗最多的选项(类似于药水效果粒子) -* **被点亮(Lit)**在其生命周期内发光的发光粒子(类似于爆炸粒子) +* 不透明(Opaque): 没有 mipmap 的透明(类似于死亡粒子) +* 半透明(Translucent):部分透明和资源消耗最多的选项(类似于药水效果粒子) +* 被点亮(Lit)在其生命周期内发光的发光粒子(类似于爆炸粒子) diff --git a/plugins/mcreator-localization/help/zh_CN/particle/scale.md b/plugins/mcreator-localization/help/zh_CN/particle/scale.md index 8e5fbe82901..44cbcd2ec3c 100644 --- a/plugins/mcreator-localization/help/zh_CN/particle/scale.md +++ b/plugins/mcreator-localization/help/zh_CN/particle/scale.md @@ -1 +1 @@ -这个参数定义了粒子纹理应该缩放多少。 \ No newline at end of file +该参数定义了粒子纹理应该缩放多少。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/can_be_placed_on.md b/plugins/mcreator-localization/help/zh_CN/plant/can_be_placed_on.md index 1b6b2362ce9..1cbbac2303e 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/can_be_placed_on.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/can_be_placed_on.md @@ -1,3 +1,3 @@ 可放置植物的方块列表。 -注意:覆盖植物类型放置条件。 \ No newline at end of file +注:覆盖植物类型放置条件。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/color_on_map.md b/plugins/mcreator-localization/help/zh_CN/plant/color_on_map.md index dab92326e62..48a5cd37628 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/color_on_map.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/color_on_map.md @@ -1,3 +1,3 @@ -这个参数控制您的植物在地图上显示的颜色。 +该参数控制您的植物在地图上显示的颜色。 如果设置为 Default,颜色将是 FOLIAGE(即跟树叶颜色一样) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/custom_bounding_box.md b/plugins/mcreator-localization/help/zh_CN/plant/custom_bounding_box.md index 1ada565dad0..0d199976671 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/custom_bounding_box.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/custom_bounding_box.md @@ -1 +1 @@ -如果要自定义这个植物的碰撞箱,请选中这个选项。 如果未启用这个功能,则碰撞箱将基于植物类型。 \ No newline at end of file +如果要自定义植物的碰撞箱,请选中该项。 如果未启用该功能,则碰撞箱将基于植物类型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/force_ticking.md b/plugins/mcreator-localization/help/zh_CN/plant/force_ticking.md index d0f55e6f98b..72c32367a95 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/force_ticking.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/force_ticking.md @@ -1 +1 @@ -有些植物类型会自动进行游戏刻更新,有些则不会。选中这个参数在所有情况下都强制更新。 \ No newline at end of file +有些植物类型会自动进行游戏刻更新,有些则不会。选中该参数在所有情况下都强制更新。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/gen_chunk_count.md b/plugins/mcreator-localization/help/zh_CN/plant/gen_chunk_count.md index f728e65515d..49522b6f1e7 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/gen_chunk_count.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/gen_chunk_count.md @@ -1,7 +1,7 @@ -这个参数控制每个区块植物将生成多少次。 +该参数控制每个区块植物将生成多少次。 植物不是单独生长的,而是成片生长的。 -例如,将这个值设置为1并不意味着每个区块中只有一个植物;相反,每个区块将(最多)有一簇这样的植物。 +例如,将该值设置为1并不意味着每个区块中只有一个植物;相反,每个区块将(最多)有一簇这样的植物。 -因此将这个值设置为较低的数量(4或更少)对于大多数目的来说就足够了。 \ No newline at end of file +因此将该值设置为较低的数量(4或更少)对于大多数目的来说就足够了。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/generate_at_any_height.md b/plugins/mcreator-localization/help/zh_CN/plant/generate_at_any_height.md index fd6d122ba75..2774ef6dba7 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/generate_at_any_height.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/generate_at_any_height.md @@ -1,3 +1,3 @@ -选中这个选项以在任何高度生成这个植物,而不是在世界表面。 +选中该选项以在任何高度生成该植物,而不是在世界表面。 -对于在下界中生成的植物,应该启用这个选项。 \ No newline at end of file +对于在下界中生成的植物,应该启用该选项。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/generation_type.md b/plugins/mcreator-localization/help/zh_CN/plant/generation_type.md index 05ba82d2c3e..5043673fe52 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/generation_type.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/generation_type.md @@ -1,3 +1,3 @@ -此参数控制您的植物生成的频率。如果设置为 **Grass**,植物将更频繁地生成。 +此参数控制您的植物生成的频率。如果设置为 Grass,植物将更频繁地生成。 这将影响静态植物和大型植物 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/has_tile_entity.md b/plugins/mcreator-localization/help/zh_CN/plant/has_tile_entity.md index 1bc79968ffc..363f1be8a64 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/has_tile_entity.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/has_tile_entity.md @@ -1,5 +1,5 @@ -选中这个选项可让植物成为方块实体类型。 +选中该项让植物成为方块实体类型。 -当启用该功能时,您将能够在植物中存储数据(如 NBT 标签)。 +当启用该功能时,您将能够在植物中存储数据(如NBT标签)。 -除非出于性能原因,否则不要启用这个选项。 \ No newline at end of file +除非出于性能原因,否则不要启用该选项。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/is_solid.md b/plugins/mcreator-localization/help/zh_CN/plant/is_solid.md index 80c6f21ea67..5dcbb4fdd36 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/is_solid.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/is_solid.md @@ -1 +1 @@ -如果选择这个选项,则实体将无法在植物中移动。 \ No newline at end of file +如果选择该选项,则实体将无法在植物中移动。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/max_height.md b/plugins/mcreator-localization/help/zh_CN/plant/max_height.md index 804cc996922..a1938beb438 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/max_height.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/max_height.md @@ -1 +1 @@ -可生长的植物将一直生长到这个高度。 \ No newline at end of file +可生长的植物将一直生长到该高度。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/patch_size.md b/plugins/mcreator-localization/help/zh_CN/plant/patch_size.md index 517f66b6a8d..db7c3777616 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/patch_size.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/patch_size.md @@ -1 +1 @@ -这个参数决定了在单个植物群落中最多可以生成多少植物。较高的数值意味着单个植物群落中有更多的植物。 \ No newline at end of file +该参数决定了在单个植物群落中最多可以生成多少植物。较高的数值意味着单个植物群落中有更多的植物。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/placing_condition.md b/plugins/mcreator-localization/help/zh_CN/plant/placing_condition.md index a1cb9296a0b..5d97586a5d3 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/placing_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/placing_condition.md @@ -1,3 +1,3 @@ 要为植物的放置添加更多条件,尽管它必须在方块上,请在这里添加具有返回值的流程。 -注意:覆盖植物类型放置条件,并使用这个附加条件扩展“可放置”方块列表。 如果 "可放置" 方块列表为空,则这个流程用作主要放置/生长条件。 \ No newline at end of file +注:覆盖植物类型放置条件,并使用该附加条件扩展“可放置”方块列表。 如果 "可放置" 方块列表为空,则该流程用作主要放置/生长条件。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/suspicious_stew_duration.md b/plugins/mcreator-localization/help/zh_CN/plant/suspicious_stew_duration.md index b99a30e3dae..bf0c46c387d 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/suspicious_stew_duration.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/suspicious_stew_duration.md @@ -1 +1 @@ -这个参数决定用该植物制作的谜之炖菜的效果持续时间。 \ No newline at end of file +该参数决定用该植物制作的谜之炖菜的效果持续时间。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/plant/suspicious_stew_effect.md b/plugins/mcreator-localization/help/zh_CN/plant/suspicious_stew_effect.md index cfadb9bac69..5018d11c10b 100644 --- a/plugins/mcreator-localization/help/zh_CN/plant/suspicious_stew_effect.md +++ b/plugins/mcreator-localization/help/zh_CN/plant/suspicious_stew_effect.md @@ -1,3 +1,3 @@ -这个参数决定了用这种植物制作的谜之炖菜的药水效果。 +该参数决定了用这种植物制作的谜之炖菜的药水效果。 -注意:您必须将植物添加到 `minecraft:small_flowers` 物品标签中才能制作谜之炖菜。 \ No newline at end of file +注:您必须将植物添加到 `minecraft:small_flowers` 物品标签中才能制作谜之炖菜。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potion/ambient.md b/plugins/mcreator-localization/help/zh_CN/potion/ambient.md index 3d75d2c19f8..ccd7187e4c9 100644 --- a/plugins/mcreator-localization/help/zh_CN/potion/ambient.md +++ b/plugins/mcreator-localization/help/zh_CN/potion/ambient.md @@ -1 +1 @@ -这个参数定义是否将效果应用为环境效果。 \ No newline at end of file +该参数定义是否将效果应用为环境效果。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potion/amplifier.md b/plugins/mcreator-localization/help/zh_CN/potion/amplifier.md index b8fefcf0266..654558101fd 100644 --- a/plugins/mcreator-localization/help/zh_CN/potion/amplifier.md +++ b/plugins/mcreator-localization/help/zh_CN/potion/amplifier.md @@ -1 +1 @@ -这个参数定义这个效果条目的强度。 \ No newline at end of file +该参数定义该效果条目的强度。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potion/duration.md b/plugins/mcreator-localization/help/zh_CN/potion/duration.md index 9337e1bf31c..8612936f683 100644 --- a/plugins/mcreator-localization/help/zh_CN/potion/duration.md +++ b/plugins/mcreator-localization/help/zh_CN/potion/duration.md @@ -1 +1 @@ -这个参数定义这个效果条目持续的时间。 \ No newline at end of file +该参数定义该效果条目持续的时间。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potion/lingering_name.md b/plugins/mcreator-localization/help/zh_CN/potion/lingering_name.md index 94552c316e1..108a95cc867 100644 --- a/plugins/mcreator-localization/help/zh_CN/potion/lingering_name.md +++ b/plugins/mcreator-localization/help/zh_CN/potion/lingering_name.md @@ -1 +1 @@ -这个参数控制滞留药水瓶的名称。 \ No newline at end of file +该参数控制滞留药水瓶的名称。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potion/potion_name.md b/plugins/mcreator-localization/help/zh_CN/potion/potion_name.md index 2cfd3c06f56..5e60ea15b00 100644 --- a/plugins/mcreator-localization/help/zh_CN/potion/potion_name.md +++ b/plugins/mcreator-localization/help/zh_CN/potion/potion_name.md @@ -1 +1 @@ -这个参数控制普通药水瓶的名称。 \ No newline at end of file +该参数控制普通药水瓶的名称。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potion/show_particles.md b/plugins/mcreator-localization/help/zh_CN/potion/show_particles.md index f762e3aa1a5..ec7c6f21b7b 100644 --- a/plugins/mcreator-localization/help/zh_CN/potion/show_particles.md +++ b/plugins/mcreator-localization/help/zh_CN/potion/show_particles.md @@ -1 +1 @@ -这个参数定义粒子是否出现在玩家附近。 \ No newline at end of file +该参数定义粒子是否出现在玩家附近。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potion/splash_name.md b/plugins/mcreator-localization/help/zh_CN/potion/splash_name.md index dfd8f78f7d3..f170cde1381 100644 --- a/plugins/mcreator-localization/help/zh_CN/potion/splash_name.md +++ b/plugins/mcreator-localization/help/zh_CN/potion/splash_name.md @@ -1 +1 @@ -这个参数控制喷溅药水瓶的名称。 \ No newline at end of file +该参数控制喷溅药水瓶的名称。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/active_tick_condition.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/active_tick_condition.md index b6f2e370cc9..a76fc2b8483 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/active_tick_condition.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/active_tick_condition.md @@ -1,3 +1,3 @@ -这个条件决定了这个效果是否应该根据等级和剩余的持续时间来启用它的刻流程。 +该条件决定了该效果是否应该根据等级和剩余的持续时间来启用它的刻流程。 -使用这个状态可以产生类似于恢复或中毒的效果。这个流程的流程模板也可用。 \ No newline at end of file +使用该状态可以产生类似于恢复或中毒的效果。该流程的流程模板也可用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/bad.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/bad.md index 3e03480eeca..4c9cba7bf95 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/bad.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/bad.md @@ -1,3 +1,3 @@ -如果您的效果对玩家为负面,请勾选这个参数。 +如果您的效果对玩家为负面,请选中该参数。 例如:中毒或瞬间伤害。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/benefitical.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/benefitical.md index bc99dfd3a17..ca21faf668e 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/benefitical.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/benefitical.md @@ -1,3 +1,3 @@ -如果您的效果对玩家为正面,请勾选这个参数。 +如果您的效果对玩家为正面,请勾选该参数。 例如:生命恢复或瞬间治疗。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/color.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/color.md index e851ba1261e..6e3548ed966 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/color.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/color.md @@ -1,3 +1,3 @@ 选择瓶子和箭的颜色。 -如果您不想要这些物品,则不需勾选这个选项。 \ No newline at end of file +如果您不想要这些物品,则不需勾选该选项。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/effect_display_name.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/effect_display_name.md index a88615a6da6..41d8f628fe9 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/effect_display_name.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/effect_display_name.md @@ -1 +1 @@ -这个参数控制效果的名称(玩家物品栏中显示的名称)。 \ No newline at end of file +该参数控制效果的名称(玩家物品栏中显示的名称)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/icon.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/icon.md index 2a4e25f080b..e15fa84e38f 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/icon.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/icon.md @@ -1,3 +1,3 @@ -这个参数控制药水效果存在时在玩家物品栏右侧的图标 +该参数控制药水效果存在时在玩家物品栏右侧的图标 重要提示:如果纹理名称与元素的注册名不同,则会生成纹理的副本。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/instant.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/instant.md index 6f01cb0ff82..bd1af4a6be9 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/instant.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/instant.md @@ -1 +1 @@ -如果您想让效果像瞬间伤害一样一次性,请勾选这个参数。 \ No newline at end of file +如果您想让效果像瞬间伤害一样一次性,请勾选该参数。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/render_in_inventory.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/render_in_inventory.md index 0c8ca3b277b..74909f6ce39 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/render_in_inventory.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/render_in_inventory.md @@ -1 +1 @@ -启用这个参数以在玩家的物品栏中显示效果. \ No newline at end of file +启用该参数以在玩家的物品栏中显示效果. \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/potioneffect/when_active_tick.md b/plugins/mcreator-localization/help/zh_CN/potioneffect/when_active_tick.md index 556f9c6e3d8..e40aa4afda5 100644 --- a/plugins/mcreator-localization/help/zh_CN/potioneffect/when_active_tick.md +++ b/plugins/mcreator-localization/help/zh_CN/potioneffect/when_active_tick.md @@ -1 +1 @@ -当实体具有这个药水效果时将每游戏刻执行这个流程。 \ No newline at end of file +当实体具有该药水效果时将每游戏刻执行该流程。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/projectile/ignite_fire.md b/plugins/mcreator-localization/help/zh_CN/projectile/ignite_fire.md index 69dfe5db853..df8eda08bc2 100644 --- a/plugins/mcreator-localization/help/zh_CN/projectile/ignite_fire.md +++ b/plugins/mcreator-localization/help/zh_CN/projectile/ignite_fire.md @@ -1,3 +1,3 @@ 如果您要让弹射物击中方块时点燃,请选中此参数。 -注意:这不会使生物着火 \ No newline at end of file +注:这不会使生物着火 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/projectile/item_texture.md b/plugins/mcreator-localization/help/zh_CN/projectile/item_texture.md index 647069d2a93..7d15d03afcc 100644 --- a/plugins/mcreator-localization/help/zh_CN/projectile/item_texture.md +++ b/plugins/mcreator-localization/help/zh_CN/projectile/item_texture.md @@ -1,3 +1,3 @@ -物品纹理代表这个物品,它将与这里选择的物品相同。 +物品纹理代表该物品,它将与这里选择的物品相同。 如果要自定义形状,请使用模型参数。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/projectile/knockback.md b/plugins/mcreator-localization/help/zh_CN/projectile/knockback.md index 90730bd8d52..3420a235a2d 100644 --- a/plugins/mcreator-localization/help/zh_CN/projectile/knockback.md +++ b/plugins/mcreator-localization/help/zh_CN/projectile/knockback.md @@ -1 +1 @@ -这个数字越高,被击中的实体将被弹射物击退得越远。 \ No newline at end of file +该数字越高,被击中的实体将被弹射物击退得越远。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/projectile/when_hits_player.md b/plugins/mcreator-localization/help/zh_CN/projectile/when_hits_player.md index 639e67c1f62..fcb6bdbd5a1 100644 --- a/plugins/mcreator-localization/help/zh_CN/projectile/when_hits_player.md +++ b/plugins/mcreator-localization/help/zh_CN/projectile/when_hits_player.md @@ -1,3 +1,3 @@ 当弹射物击中玩家时,它将执行选定的流程。 -请记住,这个流程也可能在射到射击者时触发。 \ No newline at end of file +请记住,该流程也可能在射到射击者时触发。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/recipe/cooking_time.md b/plugins/mcreator-localization/help/zh_CN/recipe/cooking_time.md index cf607498c39..e45e38291fb 100644 --- a/plugins/mcreator-localization/help/zh_CN/recipe/cooking_time.md +++ b/plugins/mcreator-localization/help/zh_CN/recipe/cooking_time.md @@ -1,3 +1,3 @@ -烹饪类型的配方使用这个参数来确定物品需要烹饪多长时间。 +烹饪类型的配方使用该参数来确定物品需要烹饪多长时间。 单位是游戏刻(tick),所以 1 秒的烹饪时间需要设置为 20 游戏刻。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/recipe/group_name.md b/plugins/mcreator-localization/help/zh_CN/recipe/group_name.md index 64a50c92e1a..e3837c3b241 100644 --- a/plugins/mcreator-localization/help/zh_CN/recipe/group_name.md +++ b/plugins/mcreator-localization/help/zh_CN/recipe/group_name.md @@ -1 +1 @@ -这个参数定义配方书中的组,配方将在其中显示。 \ No newline at end of file +该参数定义配方书中的组,配方将在其中显示。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/recipe/registry_name.md b/plugins/mcreator-localization/help/zh_CN/recipe/registry_name.md index 287721ad2a5..801e7b7fc72 100644 --- a/plugins/mcreator-localization/help/zh_CN/recipe/registry_name.md +++ b/plugins/mcreator-localization/help/zh_CN/recipe/registry_name.md @@ -1,3 +1,3 @@ -配方的配方 ID(例如:diamond_block)。 +配方的配方ID(例如:diamond_block)。 -如果要覆盖原版配方,则必须在这个字段中输入与给定配方的原版注册表名称相同的名称。 \ No newline at end of file +如果要覆盖原版配方,则必须在该框中输入与给定配方的原版注册表名称相同的名称。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/recipe/shapeless.md b/plugins/mcreator-localization/help/zh_CN/recipe/shapeless.md index 2186f7e4ee4..7477cee4707 100644 --- a/plugins/mcreator-localization/help/zh_CN/recipe/shapeless.md +++ b/plugins/mcreator-localization/help/zh_CN/recipe/shapeless.md @@ -1,3 +1,3 @@ -这个参数控制制作配方是否需要指定形状(即有序合成)。 +该参数控制制作配方是否需要指定形状(即有序合成)。 如果勾选,任何与所述物品配置的物品将被接受为配方。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/recipe/type.md b/plugins/mcreator-localization/help/zh_CN/recipe/type.md index ed1053aa390..442f3de5204 100644 --- a/plugins/mcreator-localization/help/zh_CN/recipe/type.md +++ b/plugins/mcreator-localization/help/zh_CN/recipe/type.md @@ -1,4 +1,4 @@ -这个参数控制您的配方在哪个合成系统中可用。 +该参数控制您的配方在哪个合成系统中可用。 * 合成是工作台 * 熔炼是熔炉配方 diff --git a/plugins/mcreator-localization/help/zh_CN/recipe/xp_reward.md b/plugins/mcreator-localization/help/zh_CN/recipe/xp_reward.md index 96496c53c77..ede5963e9f3 100644 --- a/plugins/mcreator-localization/help/zh_CN/recipe/xp_reward.md +++ b/plugins/mcreator-localization/help/zh_CN/recipe/xp_reward.md @@ -1,3 +1,3 @@ -这个参数控制玩家在完成配方后将获得多少经验值。 +该参数控制玩家在完成配方后将获得多少经验值。 -这个参数仅用于烹饪配方。 \ No newline at end of file +该参数仅用于烹饪配方。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/structure/generation_step.md b/plugins/mcreator-localization/help/zh_CN/structure/generation_step.md index 3d053c88438..1570e954329 100644 --- a/plugins/mcreator-localization/help/zh_CN/structure/generation_step.md +++ b/plugins/mcreator-localization/help/zh_CN/structure/generation_step.md @@ -1 +1 @@ -这个设置决定了在世界生成的哪个阶段再增加这个结构。 \ No newline at end of file +该设置决定了在世界生成的哪个阶段再增加该结构。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/structure/ground_detection.md b/plugins/mcreator-localization/help/zh_CN/structure/ground_detection.md index 5cb00c9d1c0..8b2b24c28bc 100644 --- a/plugins/mcreator-localization/help/zh_CN/structure/ground_detection.md +++ b/plugins/mcreator-localization/help/zh_CN/structure/ground_detection.md @@ -1,5 +1,5 @@ 该参数控制如何检测结构的地面。 -例如: 如果我们为一个基于水的生物群系制作一个结构,**第一个可阻塞运动的方块**将在水下面生成结构,因为水不被认为是可阻塞运动的方块,因为实体可以穿过它。 +例如:如果我们为一个基于水的生物群系制作一个结构,第一个可阻塞运动的方块将在水下面生成结构,因为水不被认为是可阻塞运动的方块,因为实体可以穿过它。 -**第一个方块**检测类型将生成水面上的结构。 \ No newline at end of file +第一个方块检测类型将生成水面上的结构。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/structure/separation_spacing.md b/plugins/mcreator-localization/help/zh_CN/structure/separation_spacing.md index a81a3d818bf..61ff72c9958 100644 --- a/plugins/mcreator-localization/help/zh_CN/structure/separation_spacing.md +++ b/plugins/mcreator-localization/help/zh_CN/structure/separation_spacing.md @@ -1,9 +1,9 @@ -结构在区块中生成。这两个参数控制区块内结构生成方式: +结构在区块中生成。这两个参数控制区块内结构生成方式: -* **最小距离** - 区块内两结构的最小距离。需要比两个结构之间的平均距离小。 -* **平均距离** - 这个集合中的两个结构的平均距离。 +* 最小距离 - 区块内两结构的最小距离。需要比两个结构之间的平均距离小。 +* 平均距离 - 该集合中的两个结构的平均距离。 -这是把`最小距离设置为 2`,`平均距离设置为 5 `的示例,这将会只能在 5x5 区块内生成结构,而且结构只能在` x `内生成。 +这是把`最小距离设置为 2`,`平均距离设置为 5 `的示例,这将会只能在 5x5 区块内生成结构,而且结构只能在`X`内生成。 ``` ............. diff --git a/plugins/mcreator-localization/help/zh_CN/structure/terrain_adaptation.md b/plugins/mcreator-localization/help/zh_CN/structure/terrain_adaptation.md index d7b731217e7..c14ab660ac5 100644 --- a/plugins/mcreator-localization/help/zh_CN/structure/terrain_adaptation.md +++ b/plugins/mcreator-localization/help/zh_CN/structure/terrain_adaptation.md @@ -1,6 +1,6 @@ 此参数控制着地形如何适应结构。 -* **none** - 对地形没有影响。 -* **beard_thin** - 在结构下添加地形并移除结构内部,这是村庄使用的适应方式。 -* **beard_box** - Beard_thin 的加强版。这是远古城市的适应方式。 -* **bury** - 在结构周围添加完整地形。这是要塞使用的适应方式。 \ No newline at end of file +* none - 对地形没有影响。 +* beard_thin - 在结构下添加地形并移除结构内部,这是村庄使用的适应方式。 +* beard_box - Beard_thin 的加强版。这是远古城市的适应方式。 +* bury - 在结构周围添加完整地形。这是末地要塞使用的适应方式。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tab/icon.md b/plugins/mcreator-localization/help/zh_CN/tab/icon.md index 146b4c0c380..31717e23142 100644 --- a/plugins/mcreator-localization/help/zh_CN/tab/icon.md +++ b/plugins/mcreator-localization/help/zh_CN/tab/icon.md @@ -1,3 +1,3 @@ -这个图标用于创造模式标签栏,如红石标签栏的红石粉。 +该图标用于区分在创造模式的物品选择栏中的标签页,如红石标签页的图标为红石粉。 -这里只支持物品。没有物品的方块不能显示为图标。 \ No newline at end of file +这里只支持物品形式,没有对应物品形式的方块不能作为图标显示。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tab/name.md b/plugins/mcreator-localization/help/zh_CN/tab/name.md index f22890815b4..b20b264b2f0 100644 --- a/plugins/mcreator-localization/help/zh_CN/tab/name.md +++ b/plugins/mcreator-localization/help/zh_CN/tab/name.md @@ -1 +1 @@ -在创造模式选项卡中显示的名称。 \ No newline at end of file +在创造模式标签页中显示的名称。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tab/search_bar.md b/plugins/mcreator-localization/help/zh_CN/tab/search_bar.md index 7cb730dcedc..717e4ef1d91 100644 --- a/plugins/mcreator-localization/help/zh_CN/tab/search_bar.md +++ b/plugins/mcreator-localization/help/zh_CN/tab/search_bar.md @@ -1 +1 @@ -选中此框可启用选项卡顶部的搜索栏,以便在此创造模式选项卡内搜索。 \ No newline at end of file +选中该框以启用标签页顶部的搜索框,以便在此创造标签页内搜索。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tag/namespace.md b/plugins/mcreator-localization/help/zh_CN/tag/namespace.md index 2f603f7dd8b..b8d55139586 100644 --- a/plugins/mcreator-localization/help/zh_CN/tag/namespace.md +++ b/plugins/mcreator-localization/help/zh_CN/tag/namespace.md @@ -1,5 +1,6 @@ -这个参数定义了标签的功能。 +该参数定义了标签的功能。 -* **forge:** 是矿物词典的替代品。 如果您提供模组命名空间,它们可以用来让其他模组创建者使用您的模组来访问他们的模组。 -* **minecraft:**用于添加自定义方块或物品到原版标签组。 例如,添加您的模组内的原木到 Minecraft 的原木组(通过设置名称为 logs 和命名空间为 Minecraft)。 -* **mod:**用于对模组中的模组元素进行分组,以供内部使用。 \ No newline at end of file +* forge: 是矿物词典的替代品。 如果您提供模组命名空间,它们可以用来让其他模组创建者使用您的模组来访问他们的模组。 +* c:Minecraft Fabric 模组(常用标签命名方案)的命名空间。 +* minecraft:用于添加自定义方块或物品到原版标签组。 例如,添加您的模组内的原木到Minecraft 的原木组(通过设置名称为 logs 和命名空间为Minecraft)。 +* mod:用于对模组中的模组元素进行分组,以供内部使用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tag/registry_name.md b/plugins/mcreator-localization/help/zh_CN/tag/registry_name.md index f8442b420af..57890909ec1 100644 --- a/plugins/mcreator-localization/help/zh_CN/tag/registry_name.md +++ b/plugins/mcreator-localization/help/zh_CN/tag/registry_name.md @@ -1,5 +1,5 @@ 这是标签的注册名。 -在这个字段中编写的文本是您必须编写的文本,以便能够使用您的标签。 +在该框中编写的文本是您必须编写的文本,以便能够使用您的标签。 当扩展原版标签组时,在这里使用适当的原版标签名,并使用原版命名空间。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tag/tag_elements.md b/plugins/mcreator-localization/help/zh_CN/tag/tag_elements.md index 0929b65e3d1..2841dd97ded 100644 --- a/plugins/mcreator-localization/help/zh_CN/tag/tag_elements.md +++ b/plugins/mcreator-localization/help/zh_CN/tag/tag_elements.md @@ -1 +1 @@ -这里列出了属于这个标签组的元素。 \ No newline at end of file +这里列出了属于该标签组的元素。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tag/type.md b/plugins/mcreator-localization/help/zh_CN/tag/type.md index 9dd047ff90f..e05985ab190 100644 --- a/plugins/mcreator-localization/help/zh_CN/tag/type.md +++ b/plugins/mcreator-localization/help/zh_CN/tag/type.md @@ -1,4 +1,5 @@ -* **物品(Items):**使用这个方法将多个物品组合在一起,用于配方,流程,… 物品标签取代旧版矿物词典系统 +* **物品(Items):**使用该方法将多个物品组合在一起,用于配方,流程,… 物品标签取代旧版矿物词典系统 * **方块(Blocks):**只使用方块类型,如果您的目标是一个方块,而不是它的物品(_these标签不能用于recipes_) -* **实体(Entites):**使用这个标签类型将多个实体分组在一起以达到相同的目的。 -* **函数(Functions):**这个标记类型用于将函数标记到组中。 一个这样的组叫做“tick”,来自“minecraft”命名空间。 标记在“tick”命名空间下的函数将在每个游戏刻中执行。 \ No newline at end of file +* **Entity:**使用该标签类型将多个实体分组在一起以达到相同的目的。 +* **Functions:**该标记类型用于将函数标记到组中。 一个这样的组叫做 “tick”,来自 “minecraft” 命名空间。 标记在 “tick” 命名空间下的函数将在每个游戏刻中执行。 +* **Damage types:** 该标签类型将与伤害类型一起使用 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tool/attack_speed.md b/plugins/mcreator-localization/help/zh_CN/tool/attack_speed.md index 63b24e7e73d..360f35423fa 100644 --- a/plugins/mcreator-localization/help/zh_CN/tool/attack_speed.md +++ b/plugins/mcreator-localization/help/zh_CN/tool/attack_speed.md @@ -1,5 +1,5 @@ -这个参数控制您的工具的使用速度。 +该参数控制您的工具的使用速度。 -这个属性控制冷却时间的长度,所用时间为T = 1 /攻击速度* 20刻。 +该属性控制冷却时间的长度,所用时间为T = 1 /攻击速度* 20刻。 伤害乘数为 0.2 +((t + 0.5) / t)²* 0.8, 限制在 0.2 - 1 的范围内,其中 t 是自上次攻击或物品切换以来的时间。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tool/blocks_affected.md b/plugins/mcreator-localization/help/zh_CN/tool/blocks_affected.md index 36003c07950..50dab728542 100644 --- a/plugins/mcreator-localization/help/zh_CN/tool/blocks_affected.md +++ b/plugins/mcreator-localization/help/zh_CN/tool/blocks_affected.md @@ -1,3 +1,3 @@ -这个列表定义了可以在哪些方块上使用该工具。 +该列表定义了可以在哪些方块上使用该工具。 该参数仅用于特殊工具类型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/tool/efficiency.md b/plugins/mcreator-localization/help/zh_CN/tool/efficiency.md index 647c129f2e3..38d014799bb 100644 --- a/plugins/mcreator-localization/help/zh_CN/tool/efficiency.md +++ b/plugins/mcreator-localization/help/zh_CN/tool/efficiency.md @@ -1,4 +1,4 @@ -这个参数定义了工具挖掘的速度。 +该参数定义了工具挖掘的速度。 例如石头工具的效率比钻石工具低。 diff --git a/plugins/mcreator-localization/help/zh_CN/tool/type.md b/plugins/mcreator-localization/help/zh_CN/tool/type.md index 3af942e723b..f1a438d11fd 100644 --- a/plugins/mcreator-localization/help/zh_CN/tool/type.md +++ b/plugins/mcreator-localization/help/zh_CN/tool/type.md @@ -1,3 +1,3 @@ -这个工具的类型。 +该工具的类型。 某些工具类型不使用下面的一些参数。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/villagerprofession/display_name.md b/plugins/mcreator-localization/help/zh_CN/villagerprofession/display_name.md index b5ce2e48cc6..1155799f92c 100644 --- a/plugins/mcreator-localization/help/zh_CN/villagerprofession/display_name.md +++ b/plugins/mcreator-localization/help/zh_CN/villagerprofession/display_name.md @@ -1 +1 @@ -职业的显示名称,这个值会显示在与村民交易时的窗口正上方。 \ No newline at end of file +职业的显示名称,该值会显示在与村民交易时的窗口正上方。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/villagerprofession/hat.md b/plugins/mcreator-localization/help/zh_CN/villagerprofession/hat.md index 68a70457768..38c314deced 100644 --- a/plugins/mcreator-localization/help/zh_CN/villagerprofession/hat.md +++ b/plugins/mcreator-localization/help/zh_CN/villagerprofession/hat.md @@ -1,7 +1,7 @@ -这个参数决定这个村民在拥有这一职业后是否还会戴上由他们的类型定义的帽子: -* **不戴帽子(None):** 在所有情况下都不会戴上类型纹理决定的帽子; -* **部分覆盖(Partial):** 类型纹理决定的帽子没有完全覆盖村民的整个头部; -* **完全覆盖(Full):** 在任何情况下,都会完全覆盖。 +该参数决定该村民在拥有这一职业后是否还会戴上由他们的类型定义的帽子: +* 不戴帽子(None): 在所有情况下都不会戴上类型纹理决定的帽子; +* 部分覆盖(Partial): 类型纹理决定的帽子没有完全覆盖村民的整个头部; +* 完全覆盖(Full): 在任何情况下,都会完全覆盖。 下表是TH相关的帽子(其中TH是类型纹理决定的帽子,PH是职业纹理决定的帽子): diff --git a/plugins/mcreator-localization/help/zh_CN/villagerprofession/profession_block.md b/plugins/mcreator-localization/help/zh_CN/villagerprofession/profession_block.md index aa252a85536..fa16b4c5cb4 100644 --- a/plugins/mcreator-localization/help/zh_CN/villagerprofession/profession_block.md +++ b/plugins/mcreator-localization/help/zh_CN/villagerprofession/profession_block.md @@ -1,3 +1,3 @@ -这个方块用于供给拥有该职业的村民工作 +该方块用于供给拥有该职业的村民工作 -如果有两个模组同时定义相同的工作站点方块,或者另外一个模组通过 POI 将这个工作站点方块用于其他功能,这个职业将不起作用。因此,建议仔细检查该村民的工作站点方块是否有被其它模组所定义 \ No newline at end of file +如果有两个模组同时定义相同的工作站点方块,或者另外一个模组通过 POI 将该工作站点方块用于其他功能,该职业将不起作用。因此,建议仔细检查该村民的工作站点方块是否有被其它模组所定义 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/villagerprofession/profession_texture.md b/plugins/mcreator-localization/help/zh_CN/villagerprofession/profession_texture.md index de4d32ccc02..1822aaf1fda 100644 --- a/plugins/mcreator-localization/help/zh_CN/villagerprofession/profession_texture.md +++ b/plugins/mcreator-localization/help/zh_CN/villagerprofession/profession_texture.md @@ -1 +1 @@ -拥有这个职业的普通村民所展现的纹理 \ No newline at end of file +拥有该职业的普通村民所展现的纹理 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_CN/villagerprofession/zombified_profession_texture.md b/plugins/mcreator-localization/help/zh_CN/villagerprofession/zombified_profession_texture.md index 64449f0fc4d..80237dfc7f2 100644 --- a/plugins/mcreator-localization/help/zh_CN/villagerprofession/zombified_profession_texture.md +++ b/plugins/mcreator-localization/help/zh_CN/villagerprofession/zombified_profession_texture.md @@ -1 +1 @@ -拥有这个职业的僵尸村民所展现的纹理 \ No newline at end of file +拥有该职业的僵尸村民所展现的纹理 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/advancement/parent.md b/plugins/mcreator-localization/help/zh_TW/advancement/parent.md index 4eafa2d53ce..baa8bd1c8df 100644 --- a/plugins/mcreator-localization/help/zh_TW/advancement/parent.md +++ b/plugins/mcreator-localization/help/zh_TW/advancement/parent.md @@ -1,3 +1,3 @@ 這是該進度的上遊進度。 -使用「 No parent: root 」來開啟新的進度選項卡。 \ No newline at end of file +使用 No parent: root 來開啟新的進度選項卡。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/armor/armor_layer_texture.md b/plugins/mcreator-localization/help/zh_TW/armor/armor_layer_texture.md index 3831e4ab9f7..a88351230c3 100644 --- a/plugins/mcreator-localization/help/zh_TW/armor/armor_layer_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/armor/armor_layer_texture.md @@ -1 +1 @@ -盔甲層材質是盔甲穿在身上時的外觀材質。 \ No newline at end of file +盔甲層紋理是盔甲穿在身上時的外觀紋理。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/armor/max_damage_absorbed.md b/plugins/mcreator-localization/help/zh_TW/armor/max_damage_absorbed.md index fbc11225c6a..a214fda4dd0 100644 --- a/plugins/mcreator-localization/help/zh_TW/armor/max_damage_absorbed.md +++ b/plugins/mcreator-localization/help/zh_TW/armor/max_damage_absorbed.md @@ -1,14 +1,15 @@ 該值決定盔甲的最大耐久,實際計算方式如下: -* 頭盔:盔甲耐久度基數 * 13 -* 胸甲:盔甲耐久度基數 * 15 -* 護腿:盔甲耐久度基數 * 16 -* 靴子:盔甲耐久度基數 * 11 +* 頭盔:可吸收的最大傷害量 * 11 +* 胸甲:可吸收的最大傷害量 * 16 +* 護腿:可吸收的最大傷害量 * 15 +* 靴子:可吸收的最大傷害量 * 13 原版預設數值: * 皮革盔甲:5 -* 鎖鏈/鐵盔甲:15 +* 鎖鏈盔甲:15 +* 鐵盔甲:15 * 金盔甲:7 * 鉆石盔甲:33 * 獄髓盔甲:37 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/air_color.md b/plugins/mcreator-localization/help/zh_TW/biome/air_color.md index 1d09a7251fa..b2f13deddc5 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/air_color.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/air_color.md @@ -1 +1 @@ -此參數控製著此生態域中天空的顏色。 \ No newline at end of file +此引數控製著此生態域中天空的顏色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/branch_block.md b/plugins/mcreator-localization/help/zh_TW/biome/branch_block.md index c4bb0db240f..72410ccdac3 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/branch_block.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/branch_block.md @@ -1 +1 @@ -此參數控製自訂樹的樹幹。 \ No newline at end of file +此引數控製自訂樹的樹幹。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/coverage_estimate.md b/plugins/mcreator-localization/help/zh_TW/biome/coverage_estimate.md index 169e758296d..cf49a35596a 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/coverage_estimate.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/coverage_estimate.md @@ -2,4 +2,4 @@ 如果你的生態域在地獄或主世界的洞穴中使用,可能會失效。 -在自訂維度中使用生態域時,覆蓋度取決於該維度擁有的生態域數量,以及該維度中生態域的生成參數。 \ No newline at end of file +在自訂維度中使用生態域時,覆蓋度取決於該維度擁有的生態域數量,以及該維度中生態域的生成引數。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/dead_bushes_per_chunk.md b/plugins/mcreator-localization/help/zh_TW/biome/dead_bushes_per_chunk.md index 27fb446f3f1..d1740f566c9 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/dead_bushes_per_chunk.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/dead_bushes_per_chunk.md @@ -1 +1 @@ -該參數控製生態域的一區塊中枯灌木的數量 \ No newline at end of file +該引數控製生態域的一區塊中枯灌木的數量 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/foliage_color.md b/plugins/mcreator-localization/help/zh_TW/biome/foliage_color.md index 17c8e04d374..849d593dd0c 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/foliage_color.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/foliage_color.md @@ -1 +1 @@ -此參數控製這個生態域中樹葉顏色。 \ No newline at end of file +此引數控製這個生態域中樹葉顏色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/fruits_block.md b/plugins/mcreator-localization/help/zh_TW/biome/fruits_block.md index 02b7bc0ea7d..5270501362e 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/fruits_block.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/fruits_block.md @@ -1,3 +1,3 @@ -此參數控製用於可可豆和叢林樹等水果的方塊,以防自訂樹被啟用。 +此引數控製用於可可豆和叢林樹等水果的方塊,以防自訂樹被啟用。 選擇空氣以停用樹木果實。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/gen_temperature.md b/plugins/mcreator-localization/help/zh_TW/biome/gen_temperature.md index b129ff5676a..439211f5cda 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/gen_temperature.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/gen_temperature.md @@ -1,4 +1,4 @@ -該參數控製生態域的生成,而不是氣候。 +該引數控製生態域的生成,而不是氣候。 温度相近的生態域会生成得临近 并在生成时争夺世界同一位置 太相似的值将导致一些生態域不生成。 diff --git a/plugins/mcreator-localization/help/zh_TW/biome/generate_lakes.md b/plugins/mcreator-localization/help/zh_TW/biome/generate_lakes.md index 5eefa329adc..a17f1b188b5 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/generate_lakes.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/generate_lakes.md @@ -1 +1 @@ -這個參數控製是否應該在這個生態域中生成湖泊。 \ No newline at end of file +這個引數控製是否應該在這個生態域中生成湖泊。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/generate_nether_fossils.md b/plugins/mcreator-localization/help/zh_TW/biome/generate_nether_fossils.md index c16b44db97e..193d637f072 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/generate_nether_fossils.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/generate_nether_fossils.md @@ -1 +1 @@ -勾選此項以在你的生態域中生成遠古遺骸。 \ No newline at end of file +勾選此項以在你的生態域中生成化石。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/grass_color.md b/plugins/mcreator-localization/help/zh_TW/biome/grass_color.md index e82fc7020b7..ab64a312181 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/grass_color.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/grass_color.md @@ -1,3 +1,3 @@ -該參數控製了該生態域中草的顏色。 +該引數控製了該生態域中草的顏色。 該参数也会變更其它植物(叶子)的颜色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/ground_block.md b/plugins/mcreator-localization/help/zh_TW/biome/ground_block.md index cf5a7e94aa8..fe8519a2fbd 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/ground_block.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/ground_block.md @@ -1,5 +1,5 @@ -該參數控製生態域地表的方塊。 +該引數控製生態域地表的方塊。 通常來說,原版的草或模組內製作的草在這裏被用於大多數生態域。 -此方塊應該有 GRASS 材質,並被標記在 minecraft:dirt 標簽中 Forge 模組的植物和樹木在生態域中正常生成。 \ No newline at end of file +此方塊應該有 GRASS 材料,並被標記在 minecraft:dirt 標簽中 Forge 模組的植物和樹木在生態域中正常生成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/minimal_tree_height.md b/plugins/mcreator-localization/help/zh_TW/biome/minimal_tree_height.md index a1616617962..c4bf963bdcb 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/minimal_tree_height.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/minimal_tree_height.md @@ -1,3 +1,3 @@ -此參數定義生成時樹幹的最小高度。 +此引數定義生成時樹幹的最小高度。 僅在選擇自訂樹定義時套用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/raining_possibility.md b/plugins/mcreator-localization/help/zh_TW/biome/raining_possibility.md index 9c805cff76a..56ca5f779b5 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/raining_possibility.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/raining_possibility.md @@ -1 +1 @@ -此參數控制生態域內降雨的可能性。 \ No newline at end of file +此引數控制生態域內降雨的可能性。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/stem_block.md b/plugins/mcreator-localization/help/zh_TW/biome/stem_block.md index ccf22cdcecf..28e3dee1a38 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/stem_block.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/stem_block.md @@ -1 +1 @@ -如果選擇了自訂樹,則此參數控製自訂樹的主幹方塊。 \ No newline at end of file +如果選擇了自訂樹,則此引數控製自訂樹的主幹方塊。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/temperature.md b/plugins/mcreator-localization/help/zh_TW/biome/temperature.md index bfc279537ca..b69db9b0bb8 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/temperature.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/temperature.md @@ -1,4 +1,4 @@ -該參數控製生態域的溫度。 +該引數控製生態域的溫度。 0.0 就像凍原,2.0 就像沙漠。 diff --git a/plugins/mcreator-localization/help/zh_TW/biome/tree_definition.md b/plugins/mcreator-localization/help/zh_TW/biome/tree_definition.md index e660bd301d6..6831e6e1ff6 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/tree_definition.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/tree_definition.md @@ -1 +1 @@ -該參數控製是否使用原版樹的高度和方塊質料,或者使用下面字段提供的質料。 \ No newline at end of file +該引數控製是否使用原版樹的高度和方塊質料,或者使用下面字段提供的質料。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/tree_shape.md b/plugins/mcreator-localization/help/zh_TW/biome/tree_shape.md index 51bf520b514..fe95f28c361 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/tree_shape.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/tree_shape.md @@ -1 +1 @@ -此參數定義自訂樹形狀應該基於哪種樹類型。 \ No newline at end of file +此引數定義自訂樹形狀應該基於哪種樹類型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/trees_per_chunk.md b/plugins/mcreator-localization/help/zh_TW/biome/trees_per_chunk.md index a4c9e732504..69ed2b9ee6d 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/trees_per_chunk.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/trees_per_chunk.md @@ -1,3 +1,3 @@ -這個參數控製每個生態域區塊的樹的數量(你選擇的類型)。 +這個引數控製每個生態域區塊的樹的數量(你選擇的類型)。 設為0以停用樹。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/underground_block.md b/plugins/mcreator-localization/help/zh_TW/biome/underground_block.md index 5ebee6b728f..b4c54bef984 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/underground_block.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/underground_block.md @@ -1,4 +1,4 @@ -該參數控製地表以下的方塊。 +該引數控製地表以下的方塊。 一般來說,原版泥土或自訂泥土在此被用於大多生態域。 diff --git a/plugins/mcreator-localization/help/zh_TW/biome/underwater_block.md b/plugins/mcreator-localization/help/zh_TW/biome/underwater_block.md index 9c7ba817788..d959f8042af 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/underwater_block.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/underwater_block.md @@ -1 +1 @@ -此參數控製水下的方塊。大多數原版生態域使用泥土或礫石。 \ No newline at end of file +此引數控製水下的方塊。大多數原版生態域使用泥土或礫石。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/vines_block.md b/plugins/mcreator-localization/help/zh_TW/biome/vines_block.md index 595c9c7424d..b6c5bb23a86 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/vines_block.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/vines_block.md @@ -1,3 +1,3 @@ -此參數控製用來替換藤蔓的方塊。 +此引數控製用來替換藤蔓的方塊。 選擇空氣,則無藤蔓。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/water_color.md b/plugins/mcreator-localization/help/zh_TW/biome/water_color.md index 15675eff589..50bb113a50a 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/water_color.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/water_color.md @@ -1 +1 @@ -此參數控製著生態域中水面的顏色。 \ No newline at end of file +此引數控製著生態域中水面的顏色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/biome/water_fog_color.md b/plugins/mcreator-localization/help/zh_TW/biome/water_fog_color.md index 6ca3bdcca87..ea339c0b2df 100644 --- a/plugins/mcreator-localization/help/zh_TW/biome/water_fog_color.md +++ b/plugins/mcreator-localization/help/zh_TW/biome/water_fog_color.md @@ -1 +1 @@ -此參數控製生態域內水霧的顏色。 \ No newline at end of file +此引數控製生態域內水霧的顏色。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/ai_path_node_type.md b/plugins/mcreator-localization/help/zh_TW/block/ai_path_node_type.md index fe25eb614cf..2daa4a7b4cf 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/ai_path_node_type.md +++ b/plugins/mcreator-localization/help/zh_TW/block/ai_path_node_type.md @@ -1,3 +1,3 @@ -此參數用於控製生物的 AI 導航如何看到方塊。 +此引數用於控製生物的 AI 導航如何看到方塊。 不同的 AI 路徑節點類型會決定實體在臨近方塊時做出移動的不同決定,這取決於 AI 路徑節點類型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/base.md b/plugins/mcreator-localization/help/zh_TW/block/base.md index 968e6a51d5f..e00954c83c7 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/base.md +++ b/plugins/mcreator-localization/help/zh_TW/block/base.md @@ -1,3 +1,3 @@ -如果使用了基礎方塊,一些參數可能會被停用,或者因為基礎方塊要求它們使用基礎方塊的預設值而無法正常工作。 +如果使用了基礎方塊,一些引數可能會被停用,或者因為基礎方塊要求它們使用基礎方塊的預設值而無法正常工作。 -只有在完全可用的情況下才使用此參數,大多數方塊應該設為預設基礎方塊。 \ No newline at end of file +只有在完全可用的情況下才使用此引數,大多數方塊應該設為預設基礎方塊。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/bind_gui.md b/plugins/mcreator-localization/help/zh_TW/block/bind_gui.md index d90ceb8aa84..bd41c23e4a8 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/bind_gui.md +++ b/plugins/mcreator-localization/help/zh_TW/block/bind_gui.md @@ -1 +1 @@ -此參數用於配置綁定該方塊的介面。當你製作一個類似儲物箱或工作台就需要使用該參數。 \ No newline at end of file +此引數用於配置綁定該方塊的介面。當你製作一個類似儲物箱或工作台就需要使用該引數。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/bonemeal_success_condition.md b/plugins/mcreator-localization/help/zh_TW/block/bonemeal_success_condition.md index ceebd79ccca..fa3685c29cc 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/bonemeal_success_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/block/bonemeal_success_condition.md @@ -1,3 +1,3 @@ 此條件決定了在方塊上是否成功使用骨粉。 -如果返回值為假,骨粉將被消耗,但是 「${l10n.t("elementgui.common.event_on_bonemeal_success")}」函式不會被執行。 \ No newline at end of file +如果返回值為 false,骨粉將被消耗,但是 "${l10n.t("elementgui.common.event_on_bonemeal_success")}" 函式不會被執行。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/bonemeal_target_condition.md b/plugins/mcreator-localization/help/zh_TW/block/bonemeal_target_condition.md index 0c53f43c7c3..87c73109814 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/bonemeal_target_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/block/bonemeal_target_condition.md @@ -1,3 +1,3 @@ 该条件决定了骨粉可否在这个方块上使用。 -如果返回假,骨粉不会被消耗,也不会有事情发生。 \ No newline at end of file +如果返回 false,骨粉不会被消耗,也不会有事情发生。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/bounding_box.md b/plugins/mcreator-localization/help/zh_TW/block/bounding_box.md index 9d3318b849c..7dbe011ee9f 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/bounding_box.md +++ b/plugins/mcreator-localization/help/zh_TW/block/bounding_box.md @@ -2,4 +2,4 @@ 不過,這只會設置大小,而不是形狀。 -要了解碰撞箱參數的具體信息,請點擊[這裏](https://mcreator.net/wiki/block-dimensions-and-bonding-box)。 \ No newline at end of file +要了解碰撞箱引數的具體信息,請點擊[這裏](https://mcreator.net/wiki/block-dimensions-and-bonding-box)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/color_on_map.md b/plugins/mcreator-localization/help/zh_TW/block/color_on_map.md index d3c9f581fb8..808357778c6 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/color_on_map.md +++ b/plugins/mcreator-localization/help/zh_TW/block/color_on_map.md @@ -1,5 +1,5 @@ 這是該方塊顯示在地圖上的顏色。 -如果設定為 Default,則會根據該方塊屬性中「材質」的選擇來選擇顏色。 +如果設定為 Default,則會根據該方塊屬性中材料的選擇來選擇顏色。 要查看準確的 RGB 顏色,請在 [此](https://mcreator.net/wiki/list-block-map-colors)閱讀 Wiki 頁面 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/connected_sides.md b/plugins/mcreator-localization/help/zh_TW/block/connected_sides.md index 65f357e365c..bde468b4703 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/connected_sides.md +++ b/plugins/mcreator-localization/help/zh_TW/block/connected_sides.md @@ -1,3 +1,3 @@ -這個參數只能與透明方塊結合使用。 +這個引數只能與透明方塊結合使用。 這將使方塊的內部兩面連接起來,類似於玻璃、冰和其它類似方塊的樣子。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/creative_pick_item.md b/plugins/mcreator-localization/help/zh_TW/block/creative_pick_item.md index 85182e90f19..437387858a0 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/creative_pick_item.md +++ b/plugins/mcreator-localization/help/zh_TW/block/creative_pick_item.md @@ -1 +1 @@ -這個參數將配置在創造模式下使用鼠標中鍵「拿取」該方塊時,「拿取」出的物品,留空則「拿取」該方塊的物品形式。 \ No newline at end of file +此引數將配置在創造模式下使用鼠標中鍵拿取該方塊時,拿取出的物品,留空則拿取該方塊的物品形式。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/custom_drop.md b/plugins/mcreator-localization/help/zh_TW/block/custom_drop.md index b48044b9538..d0d6bbd75df 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/custom_drop.md +++ b/plugins/mcreator-localization/help/zh_TW/block/custom_drop.md @@ -1,3 +1,3 @@ -此參數定義了該方塊被挖掘/破壞後掉落的物品,留空則掉落該方塊的物品形式。 +此引數定義了該方塊被挖掘/破壞後掉落的物品,留空則掉落該方塊的物品形式。 如果直接被替換/銷毀則不掉落物品,如果設定了挖掘等級也需要使用對應挖掘等級的工具挖掘才可以掉落。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/disable_offset.md b/plugins/mcreator-localization/help/zh_TW/block/disable_offset.md index cd464b451b8..e530500bf7b 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/disable_offset.md +++ b/plugins/mcreator-localization/help/zh_TW/block/disable_offset.md @@ -1,3 +1,3 @@ 如果該方塊啟用隨機模型偏移,除非選中此選項,否則其輪廓也將被移動。 如果輪廓由於偏移而陷到相鄰的方塊中,請勾選此項以防止這種情況。 -例如,該選項對於竹子為假,對於高草為真。 \ No newline at end of file +例如,該選項對於竹子為 false,對於高草為 true。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/drop_amount.md b/plugins/mcreator-localization/help/zh_TW/block/drop_amount.md index fd7bcf7c86a..dfc516fb0fe 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/drop_amount.md +++ b/plugins/mcreator-localization/help/zh_TW/block/drop_amount.md @@ -1 +1 @@ -此參數控製當該方塊被破壞時,該方塊將掉落多少物品或方塊。 \ No newline at end of file +此引數控製當該方塊被破壞時,該方塊將掉落多少物品或方塊。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/drop_inventory_items.md b/plugins/mcreator-localization/help/zh_TW/block/drop_inventory_items.md index add3f9d7f74..63b5abdd918 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/drop_inventory_items.md +++ b/plugins/mcreator-localization/help/zh_TW/block/drop_inventory_items.md @@ -1,3 +1,3 @@ 如果你希望在方塊破壞時掉落內部的物品,請勾選此項。 -例如,儲物箱使用此參數。 \ No newline at end of file +例如,儲物箱使用此引數。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/enable_pitch.md b/plugins/mcreator-localization/help/zh_TW/block/enable_pitch.md index 635bfb30ac3..0fa16534c01 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/enable_pitch.md +++ b/plugins/mcreator-localization/help/zh_TW/block/enable_pitch.md @@ -1 +1 @@ -如果你的方塊水平旋轉,請選中此項以允許它面向任何方向,例如地板、墻壁或天花板。 此選項用於控制桿,砂輪等。 \ No newline at end of file +如果你想讓你的方塊水平旋轉,請選中此項以允許它面向任何方向,例如地板、墻壁或天花板。 此選項用於控制桿,砂輪等。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/enchantments_bonus.md b/plugins/mcreator-localization/help/zh_TW/block/enchantments_bonus.md index b95e6873651..9cde7a16587 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/enchantments_bonus.md +++ b/plugins/mcreator-localization/help/zh_TW/block/enchantments_bonus.md @@ -1,3 +1,3 @@ -此參數控製方塊對附魔台的能力加成。 +此引數控製方塊對附魔台的能力加成。 書架的能量加成是 1,普通方塊的能量加成是 0。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/fire_spread_speed.md b/plugins/mcreator-localization/help/zh_TW/block/fire_spread_speed.md index b498af0165d..1d4da1fe059 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/fire_spread_speed.md +++ b/plugins/mcreator-localization/help/zh_TW/block/fire_spread_speed.md @@ -1 +1 @@ -此參數控製火焰蔓延到其它方塊的速度。 \ No newline at end of file +此引數控製火焰蔓延到其它方塊的速度。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/flammability.md b/plugins/mcreator-localization/help/zh_TW/block/flammability.md index 53c28ae5519..1f92806148c 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/flammability.md +++ b/plugins/mcreator-localization/help/zh_TW/block/flammability.md @@ -1,4 +1,4 @@ -此參數決定了方塊被火燃盡的速度。 +此引數決定了方塊被火燃盡的速度。 原版例子: * 原木的可燃性為5 diff --git a/plugins/mcreator-localization/help/zh_TW/block/fluid_overlay.md b/plugins/mcreator-localization/help/zh_TW/block/fluid_overlay.md index af64349904c..6fa3e029c39 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/fluid_overlay.md +++ b/plugins/mcreator-localization/help/zh_TW/block/fluid_overlay.md @@ -1,3 +1,3 @@ -該參數只能與透明方塊組合使用。 +該引數只能與透明方塊組合使用。 -如果選中此選項,則方塊在浸入水中時將不會顯示流體材質,類似於玻璃。 \ No newline at end of file +如果選中此選項,則方塊在浸入水中時將不會顯示流體紋理,類似於玻璃。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/gen_group_size.md b/plugins/mcreator-localization/help/zh_TW/block/gen_group_size.md index a69980089a5..01774e67f5f 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/gen_group_size.md +++ b/plugins/mcreator-localization/help/zh_TW/block/gen_group_size.md @@ -1,4 +1,4 @@ -該參數控製每個礦脈的平均方塊數量。 +該引數控製每個礦脈的平均方塊數量。 原版礦石組规模: diff --git a/plugins/mcreator-localization/help/zh_TW/block/gen_height.md b/plugins/mcreator-localization/help/zh_TW/block/gen_height.md index 4e185a14802..db7c7f1a22c 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/gen_height.md +++ b/plugins/mcreator-localization/help/zh_TW/block/gen_height.md @@ -1,4 +1,4 @@ -該參數控制方塊可生成的 Y 軸高度的範圍 +該引數控制方塊可生成的 Y 軸高度的範圍 原版生成高度範圍: * 煤礦 - 0 ~ 256 diff --git a/plugins/mcreator-localization/help/zh_TW/block/generation_shape.md b/plugins/mcreator-localization/help/zh_TW/block/generation_shape.md index 1319851ccf4..e079033bd6d 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/generation_shape.md +++ b/plugins/mcreator-localization/help/zh_TW/block/generation_shape.md @@ -1,4 +1,4 @@ 生成形狀允許依方塊高度變更方塊生成方式。 * **Uniform**: 這是一個簡單的矩形。這是Minecraft 1.18之前使用的形狀。 -* **Triangle**: 這種形狀將生成像三角形的塊。最有可能得到這個塊的層將是最小高度和最大高度的中間。請記住,最大和最小代高度可以高於或低於世界極限。 \ No newline at end of file +* **Triangle**: 這種形狀將生成像三角形的塊。最有可能得到這個塊的層將是最小高度和最大高度的中間。注意:最大和最小代高度可以高於或低於世界極限。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/hardness.md b/plugins/mcreator-localization/help/zh_TW/block/hardness.md index bcb87a2c8ce..dad0c824ba8 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/hardness.md +++ b/plugins/mcreator-localization/help/zh_TW/block/hardness.md @@ -1 +1 @@ -該參數控製挖掘方塊所需的時間。 更高的值意味著需要更長的時間來挖掘這個方塊。 \ No newline at end of file +該引數控製挖掘方塊所需的時間。 更高的值意味著需要更長的時間來挖掘這個方塊。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/harvest_tool.md b/plugins/mcreator-localization/help/zh_TW/block/harvest_tool.md index 1cfa41837fa..68c97b2537f 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/harvest_tool.md +++ b/plugins/mcreator-localization/help/zh_TW/block/harvest_tool.md @@ -1,5 +1,5 @@ -此參數控製使用什麽工具來挖掘該方塊。 +此引數控製使用什麽工具來挖掘該方塊。 礦石用 pickaxe ,木頭用 axe,土用 shovel。 -如果設置為「Not specified」,玩家能用手打破這個方塊。 +如果設為 Not specified,玩家能用手打破此方塊。 diff --git a/plugins/mcreator-localization/help/zh_TW/block/has_gravity.md b/plugins/mcreator-localization/help/zh_TW/block/has_gravity.md index 3c8c945f69f..04a21a15cc9 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/has_gravity.md +++ b/plugins/mcreator-localization/help/zh_TW/block/has_gravity.md @@ -1 +1 @@ -如果勾選了此參數,方塊就會像沙子一樣掉下來。 \ No newline at end of file +如果勾選了此引數,方塊就會像沙子一樣掉下來。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/has_inventory.md b/plugins/mcreator-localization/help/zh_TW/block/has_inventory.md index 9747d8dfad4..1eaaf8cf73c 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/has_inventory.md +++ b/plugins/mcreator-localization/help/zh_TW/block/has_inventory.md @@ -1,8 +1,8 @@ -此參數將為你的方塊提供物品欄。該方塊將是一個方塊實體。 +此引數將為你的方塊提供物品欄。該方塊將是一個方塊實體。 -該參數啟用如下特性: +該項在啟用後會有如下特性: * 方塊擁有NBT標籤 * 用於方塊物品存儲的物品欄 -* 與比較器交互 +* 會與比較器交互 如果不勾選此項,這些特性將無法工作。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/has_transparency.md b/plugins/mcreator-localization/help/zh_TW/block/has_transparency.md index 4aed85d360c..7600db45039 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/has_transparency.md +++ b/plugins/mcreator-localization/help/zh_TW/block/has_transparency.md @@ -1,7 +1,7 @@ 如果你的方塊有以下特性請勾選此項: * 是非固體或擁有自訂形狀 -* 或材質有透明的部分 +* 或紋理有透明的部分 勾選此項后,方塊將會: diff --git a/plugins/mcreator-localization/help/zh_TW/block/inventory_size.md b/plugins/mcreator-localization/help/zh_TW/block/inventory_size.md index 056ad89bfb9..d04c5987528 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/inventory_size.md +++ b/plugins/mcreator-localization/help/zh_TW/block/inventory_size.md @@ -1,3 +1,3 @@ -此參數控製方塊將用於內部庫存的物品槽數量。 +此引數控製方塊將用於內部庫存的物品槽數量。 -如果方塊綁定到介面,則將此值設置為 「介面中最大的物品存儲槽ID+ 1」 \ No newline at end of file +如果方塊綁定到介面,則將此值設為介面中最大的物品存儲槽ID+ 1 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/inventory_stack_size.md b/plugins/mcreator-localization/help/zh_TW/block/inventory_stack_size.md index 18750a670ef..b6caf2ddd50 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/inventory_stack_size.md +++ b/plugins/mcreator-localization/help/zh_TW/block/inventory_stack_size.md @@ -1,3 +1,3 @@ -該參數控製可以放置在其內部存儲槽中的堆棧的最大大小。 +該引數控製可以放置在其內部存儲槽中的堆棧的最大大小。 -請記住,該參數與最大物品棧大小之間的較小數字決定了實際的最大堆棧大小。 \ No newline at end of file +注意:該引數與最大物品棧大小之間的較小數字決定了實際的最大堆棧大小。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/is_item_tinted.md b/plugins/mcreator-localization/help/zh_TW/block/is_item_tinted.md index 676cf2183c3..b5130bb2bbb 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/is_item_tinted.md +++ b/plugins/mcreator-localization/help/zh_TW/block/is_item_tinted.md @@ -1,3 +1,3 @@ 如果選中此選項,則當該方塊在物品欄中時,將對其應用與色調類型匹配的固定色調。 -當物品的材質被指定時,著色也會被應用。 \ No newline at end of file +當物品的紋理被指定時,著色也會被應用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/is_ladder.md b/plugins/mcreator-localization/help/zh_TW/block/is_ladder.md index a04530f064f..792a3049b93 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/is_ladder.md +++ b/plugins/mcreator-localization/help/zh_TW/block/is_ladder.md @@ -1,5 +1,5 @@ 如果勾選,實體將能夠爬上方塊。 -方塊的寬度和深度需要小於 1 才能使該參數生效,這樣方塊中的碰撞才能被正確檢測。如果使用此參數,則需變更碰撞箱設定以匹配此參數。 +方塊的寬度和深度需要小於 1 才能使該引數生效,這樣方塊中的碰撞才能被正確檢測。如果使用此引數,則需變更碰撞箱設定以匹配此引數。 原版例子:梯子和藤蔓 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/item_texture.md b/plugins/mcreator-localization/help/zh_TW/block/item_texture.md index 6c84c3fca83..43cecbf2304 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/item_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/block/item_texture.md @@ -1,3 +1,3 @@ -此項將更改物品中的方塊的材質。 +此項將更改物品中的方塊的紋理。 通常用於門或自訂模型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/jump_factor.md b/plugins/mcreator-localization/help/zh_TW/block/jump_factor.md index 4f7a45ef7f5..d5a9c30e6c1 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/jump_factor.md +++ b/plugins/mcreator-localization/help/zh_TW/block/jump_factor.md @@ -1,3 +1,3 @@ -該參數控製實體的跳躍高度 +該引數控製實體的跳躍高度 大多數方塊使用的預設值是1.0。 蜂蜜塊跳躍系數為0.5。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/luminance.md b/plugins/mcreator-localization/help/zh_TW/block/luminance.md index d104878d9d4..0d10eae2350 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/luminance.md +++ b/plugins/mcreator-localization/help/zh_TW/block/luminance.md @@ -1 +1 @@ -該參數控製方塊發出的亮度。範圍為0~15。 如果設為0,該方塊將不會發光。如果設為15,方塊將發出和螢石一樣多的光。 \ No newline at end of file +該引數控製方塊發出的亮度。範圍為0~15。 如果設為0,該方塊將不會發光。如果設為15,方塊將發出和螢石一樣多的光。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/model.md b/plugins/mcreator-localization/help/zh_TW/block/model.md index f90aa29f9ca..469520b8e79 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/model.md +++ b/plugins/mcreator-localization/help/zh_TW/block/model.md @@ -1,10 +1,10 @@ 選擇要與此方塊一起使用的模型。模型只定義視覺外觀,而不定義方塊的碰撞箱。 -* **Normal** - 每一面都有不同材質的普通方塊 -* **Single texture** - 每一面都是相同材質的普通方塊 +* **Normal** - 每一面都有不同紋理的普通方塊 +* **Single texture** - 每一面都是相同紋理的普通方塊 * **Cross** - 植物使用的模型 * **Crop** - 農作物使用的模型 -* **Grass Block** - 草方塊使用的模型(其頂部和側面材質將被著色) +* **Grass Block** - 草方塊使用的模型(其頂部和側面紋理將被著色) * Custom - 你也可以定義自訂 JSON 和 OBJ 模型 在創建自訂模型時,建議使用 JSON,因為 JSON 支援原版模型類型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/offset_type.md b/plugins/mcreator-localization/help/zh_TW/block/offset_type.md index ddac81ce9c8..8557e758f8d 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/offset_type.md +++ b/plugins/mcreator-localization/help/zh_TW/block/offset_type.md @@ -1,3 +1,3 @@ -此參數控製方塊的放置是否應該隨機偏移以及向哪個軸偏移。 +此引數控製方塊的放置是否應該隨機偏移以及向哪個軸偏移。 大多數植物使用一種偏移類型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/particle_texture.md b/plugins/mcreator-localization/help/zh_TW/block/particle_texture.md index 926f8714eae..3d2ebaadd3b 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/particle_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/block/particle_texture.md @@ -1 +1 @@ -此可選屬性將在方塊被打破、實體落在方塊上等情況下變更粒子的材質。 \ No newline at end of file +此可選屬性將在方塊被打破、實體落在方塊上等情況下變更粒子的紋理。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/push_reaction.md b/plugins/mcreator-localization/help/zh_TW/block/push_reaction.md index 385ab69d6eb..26c5e2442be 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/push_reaction.md +++ b/plugins/mcreator-localization/help/zh_TW/block/push_reaction.md @@ -1,4 +1,4 @@ -這個參數決定了方塊如何與活塞反應。 +這個引數決定了方塊如何與活塞反應。 * Normal:正常的活塞反應,像石頭 * Destroy:當活塞推動方塊時,方塊將被破壞。 diff --git a/plugins/mcreator-localization/help/zh_TW/block/redstone_connect.md b/plugins/mcreator-localization/help/zh_TW/block/redstone_connect.md index 59064754b30..4635a142af4 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/redstone_connect.md +++ b/plugins/mcreator-localization/help/zh_TW/block/redstone_connect.md @@ -1,3 +1,3 @@ -如果選中此參數,紅石粉塵將始終連接到此方塊(類似於紅石塊)。 +如果選中此引數,紅石粉塵將始終連接到此方塊(類似於紅石塊)。 -註意:即使不勾選此參數,方塊仍然可以輸出紅石能量。 \ No newline at end of file +註意:即使不勾選此引數,方塊仍然可以輸出紅石能量。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/redstone_power.md b/plugins/mcreator-localization/help/zh_TW/block/redstone_power.md index 9c8c1e5b4ef..8cc41579ac5 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/redstone_power.md +++ b/plugins/mcreator-localization/help/zh_TW/block/redstone_power.md @@ -1,4 +1,4 @@ -如果選中「輸出紅石能量」參數,該參數將允許修改输出的紅石能量。 +如果選中輸出紅石能量引數,該引數將允許修改输出的紅石能量。 當使用這個條件函式並返回一個數字時,此方塊發出的紅石能量將由該過程返回的數字設定。 diff --git a/plugins/mcreator-localization/help/zh_TW/block/resistance.md b/plugins/mcreator-localization/help/zh_TW/block/resistance.md index a6398660b82..49ebff66c84 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/resistance.md +++ b/plugins/mcreator-localization/help/zh_TW/block/resistance.md @@ -1 +1 @@ -該參數控製方塊對爆炸的反應。 數值越高,方塊越能抵抗爆炸。 \ No newline at end of file +該引數控製方塊對爆炸的反應。 數值越高,方塊越能抵抗爆炸。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/slipperiness.md b/plugins/mcreator-localization/help/zh_TW/block/slipperiness.md index 71024e1d0a7..711d4daf7df 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/slipperiness.md +++ b/plugins/mcreator-localization/help/zh_TW/block/slipperiness.md @@ -1,3 +1,3 @@ -該參數控製方塊的粘滑度。 +該引數控製方塊的粘滑度。 大多數方塊使用的預設值是 0.6 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/special_information.md b/plugins/mcreator-localization/help/zh_TW/block/special_information.md index e455a5be78f..770b9b73539 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/special_information.md +++ b/plugins/mcreator-localization/help/zh_TW/block/special_information.md @@ -1 +1,3 @@ -當你用滑鼠點擊物品欄中的方塊圖示時,此參數將會給方塊新增提示框。 如果你使用函式生成的提示框,而你的方塊沒有被實體拿取或不是礦石,`實體`依賴項將為空。 \ No newline at end of file +當你把滑鼠放在物品欄中的方塊上時,此引數為方塊添加一個提示框。 + +如果你使用了用函式生成的提示框,而你的方塊是未被一個實體持有或目前是掉落物, ` entity `依賴項將為 null。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/speed_factor.md b/plugins/mcreator-localization/help/zh_TW/block/speed_factor.md index 7db9fe690d2..8cc6e7e7a3d 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/speed_factor.md +++ b/plugins/mcreator-localization/help/zh_TW/block/speed_factor.md @@ -1,3 +1,3 @@ -此參數控製該方塊上實體的速度。 +此引數控製該方塊上實體的速度。 大多數方塊使用的預設值是1.0。 靈魂沙和蜂蜜塊的速度是0.4 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/stack_size.md b/plugins/mcreator-localization/help/zh_TW/block/stack_size.md index c0246ac5799..a23d4f53b8e 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/stack_size.md +++ b/plugins/mcreator-localization/help/zh_TW/block/stack_size.md @@ -1,3 +1,3 @@ 這是這個區塊的物品欄中的插槽中的物品可以堆疊的數量。 -請記住,對於特定的物品還有另一個存儲槽堆棧大小限製,所以這是可以被物品進一步限製的存儲槽的上限。 \ No newline at end of file +注意:對於特定的物品還有另一個存儲槽堆棧大小限製,所以這是可以被物品進一步限製的存儲槽的上限。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/tick_randomly.md b/plugins/mcreator-localization/help/zh_TW/block/tick_randomly.md index 1476c4391e8..8cd7e53e942 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/tick_randomly.md +++ b/plugins/mcreator-localization/help/zh_TW/block/tick_randomly.md @@ -1,5 +1,5 @@ 在預設情況下,自然生成的方塊通常不會勾選,除非使用隨機刻。 -該參數使方塊隨機更新,其中速度由全域遊戲刻參數控製。 +該引數使方塊隨機更新,其中速度由全域遊戲刻引數控製。 例如,植物就使用這種更新。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/tick_rate.md b/plugins/mcreator-localization/help/zh_TW/block/tick_rate.md index c0ce12332c5..4e032c65d65 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/tick_rate.md +++ b/plugins/mcreator-localization/help/zh_TW/block/tick_rate.md @@ -1,7 +1,7 @@ -該參數控製方塊更新的頻率。如果選擇「隨機」,該參數無效。 +該引數控製方塊更新的頻率。如果選擇隨機,該引數無效。 -請記住,通常情況下,自然生成的方塊在預設情況下不會勾選,除非使用隨機刻。 +注意:通常情況下,自然生成的方塊在預設情況下不會勾選,除非使用隨機刻。 預設的更新速度為0表示方塊不會自動更新。 -如果該參數設為大於0的數字,則方塊將自動勾選。1秒20刻。 \ No newline at end of file +如果該引數設為大於0的數字,則方塊將自動勾選。1秒20刻。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/tint_type.md b/plugins/mcreator-localization/help/zh_TW/block/tint_type.md index 79621022859..6c5acb11351 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/tint_type.md +++ b/plugins/mcreator-localization/help/zh_TW/block/tint_type.md @@ -1 +1 @@ -此選項將基於生態域顏色的色調應用到方塊上,類似於草、樹葉和水面。 為了有最好的效果,著色面應使用灰度材質。 \ No newline at end of file +此選項將基於生態域顏色的色調應用到方塊上,類似於草、樹葉和水面。 為了有最好的效果,著色面應使用灰度紋理。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/transparency_type.md b/plugins/mcreator-localization/help/zh_TW/block/transparency_type.md index 4c97a679980..eca578f7fad 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/transparency_type.md +++ b/plugins/mcreator-localization/help/zh_TW/block/transparency_type.md @@ -2,7 +2,7 @@ 透明類型: -* **Solid:**無透明度(類似於泥土、石頭等) -* **Cutout:**透明方塊沒有貼圖分級細化(類似於玻璃) +* **Solid:**無透明度(類似於泥土、石頭等) +* **Cutout:**透明方塊沒有貼圖分級細化(類似於玻璃) * **剪貼貼圖分級:**像剪貼畫,但有貼圖分級細化 * **半透明:**部分透明,資源最多的選項(類似於冰) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/unbreakable.md b/plugins/mcreator-localization/help/zh_TW/block/unbreakable.md index e89e6385dd6..698af2a1c6c 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/unbreakable.md +++ b/plugins/mcreator-localization/help/zh_TW/block/unbreakable.md @@ -1,3 +1,3 @@ -這個參數定義了玩家是否能否挖掘它。 +這個引數定義了玩家是否能否挖掘它。 原版例子:基岩和指令方塊 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/block/use_loot_table_for_drops.md b/plugins/mcreator-localization/help/zh_TW/block/use_loot_table_for_drops.md index cfc86fdebbd..180a71bc31b 100644 --- a/plugins/mcreator-localization/help/zh_TW/block/use_loot_table_for_drops.md +++ b/plugins/mcreator-localization/help/zh_TW/block/use_loot_table_for_drops.md @@ -2,6 +2,6 @@ 創建戰利品表模組元素,註冊名 `blocks/${registryname}`,命名空間 _mod_,類型 _Block_。 -如果不勾選此參數,戰利品表仍將覆蓋方塊掉落,但當戰利品表不返回任何條目時,方塊模組元素中定義的方塊塊掉落將被使用。 +如果不勾選此引數,戰利品表仍將覆蓋方塊掉落,但當戰利品表不返回任何條目時,方塊模組元素中定義的方塊塊掉落將被使用。 當此項被勾選時,此方塊的更新將被戰利品表控製。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/common/creative_tab.md b/plugins/mcreator-localization/help/zh_TW/common/creative_tab.md index 366fd97943c..4cb58337dd5 100644 --- a/plugins/mcreator-localization/help/zh_TW/common/creative_tab.md +++ b/plugins/mcreator-localization/help/zh_TW/common/creative_tab.md @@ -1,3 +1,3 @@ 它將在哪個創造模式物品欄中。 -使用「CUSTOM:」開頭的選項來選擇自訂的創造模式物品欄。 \ No newline at end of file +使用 CUSTOM: 開頭的選項來選擇自訂的創造模式物品欄。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/damagetype/effects.md b/plugins/mcreator-localization/help/zh_TW/damagetype/effects.md new file mode 100644 index 00000000000..6bf915df44c --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/damagetype/effects.md @@ -0,0 +1 @@ +此參數決定在受到此類型的傷害時播放的聲音 diff --git a/plugins/mcreator-localization/help/zh_TW/damagetype/exhaustion.md b/plugins/mcreator-localization/help/zh_TW/damagetype/exhaustion.md new file mode 100644 index 00000000000..387b76e8428 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/damagetype/exhaustion.md @@ -0,0 +1,3 @@ +此參數決定了當玩家受傷時該減少飽食度的量。 + +值越高,飢餓條消耗越高。 diff --git a/plugins/mcreator-localization/help/zh_TW/damagetype/item_death_message.md b/plugins/mcreator-localization/help/zh_TW/damagetype/item_death_message.md new file mode 100644 index 00000000000..86f10eaf6e9 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/damagetype/item_death_message.md @@ -0,0 +1,7 @@ +當玩家被持有命名物品的實體擊殺時,此消息會在聊天內顯示。 + +你可以在消息中使用以下標識符: + +- ``:死者名 +- ``: 傷害造成者名 +- ``: 傷害造成者持有的物品名 diff --git a/plugins/mcreator-localization/help/zh_TW/damagetype/normal_death_message.md b/plugins/mcreator-localization/help/zh_TW/damagetype/normal_death_message.md new file mode 100644 index 00000000000..bcb86b9efc6 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/damagetype/normal_death_message.md @@ -0,0 +1,8 @@ +多數情況下當玩家死於此類型的傷害時此消息將會顯示在聊天內。 + +你可以在消息中使用以下標識符: + +- ``:死者名 +- ``: 傷害造成者名 + +注意:僅當此傷害類型由生物造成時才使用第二個標識符 diff --git a/plugins/mcreator-localization/help/zh_TW/damagetype/player_death_message.md b/plugins/mcreator-localization/help/zh_TW/damagetype/player_death_message.md new file mode 100644 index 00000000000..d5a7f7029d8 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/damagetype/player_death_message.md @@ -0,0 +1,6 @@ +當玩家因此類型的傷害而死亡,但被距離玩家較近的另一個實體傷害時,此消息會在聊天內顯示。 + +你可以在消息中使用以下標識符: + +- ``:死者名 +- ``: 傷害造成者名 diff --git a/plugins/mcreator-localization/help/zh_TW/damagetype/scaling.md b/plugins/mcreator-localization/help/zh_TW/damagetype/scaling.md new file mode 100644 index 00000000000..b2108be928c --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/damagetype/scaling.md @@ -0,0 +1,5 @@ +此參數決定了所受到的傷害量是否會隨著難度而增加。 + +- `never`: 難度永不影響傷害量。 +- `always`: 不論什麼來源,傷害量總隨難度而增加。 +- `when_caused_by_living_non_player`: 僅當由生物造成傷害時,傷害量才會隨難度增加(例如僵屍或蜘蛛) diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/condition_portal_make.md b/plugins/mcreator-localization/help/zh_TW/dimension/condition_portal_make.md index 792154ede11..367fe405188 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/condition_portal_make.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/condition_portal_make.md @@ -1 +1 @@ -如果指定了條件,玩家需要滿足該條件才能打開傳送門。「Itemstack」依賴項指的是用來激活傳送門的物品。 \ No newline at end of file +如果指定了條件,玩家需要滿足該條件才能打開傳送門。Itemstack 依賴項指的是用來激活傳送門的物品。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/does_water_vaporize.md b/plugins/mcreator-localization/help/zh_TW/dimension/does_water_vaporize.md index b18b3d2025d..73cdfdafff2 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/does_water_vaporize.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/does_water_vaporize.md @@ -1 +1 @@ -該參數將會停用該維度中的水。如果在該維度中放水,水將會立即蒸發,使放水變得幾乎不可能。 \ No newline at end of file +該引數將會停用該維度中的水。如果在該維度中放水,水將會立即蒸發,使放水變得幾乎不可能。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/enable_igniter.md b/plugins/mcreator-localization/help/zh_TW/dimension/enable_igniter.md index 2904b694802..46f3195ef58 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/enable_igniter.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/enable_igniter.md @@ -1,3 +1,3 @@ 勾選此項以使用激活器激活傳送門。如果你打算使用自訂激活器,請不要勾選此項。 -要製作自訂激活器,請創建一個新函式,並使用 「使用自訂激活器激活維度傳送門(Make portal to a dimension using custom igniter item)」 內置範本。 \ No newline at end of file +要製作自訂激活器,請創建一個新函式,並用使用自訂激活器激活維度傳送門(Make portal to a dimension using custom igniter item) 內置範本。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/has_fog.md b/plugins/mcreator-localization/help/zh_TW/dimension/has_fog.md index b25bbff44bd..413ca20c10a 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/has_fog.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/has_fog.md @@ -1 +1 @@ -選中以啟用厚霧。即使「渲染距離」設定得很大厚霧也會出現,在地獄可以看到這樣的例子。 +勾選此項以啟用厚霧。即使渲染距離設定得很大厚霧也會出現,在地獄可以看到這樣的例子。 diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/has_skylight.md b/plugins/mcreator-localization/help/zh_TW/dimension/has_skylight.md index b6a84cb689c..55175fabd47 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/has_skylight.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/has_skylight.md @@ -1,3 +1,3 @@ -該參數將使該維度和主世界的日夜循環一樣,擁有天空光照。 +該引數將使該維度和主世界的日夜循環一樣,擁有天空光照。 -請記住天空光照會被方塊遮擋,所以類似地獄的維度就算有天空光照也是黑暗的。如果想要照亮它,需要啟用全局光照。 \ No newline at end of file +注意:天空光照會被方塊遮擋,所以類似地獄的維度就算有天空光照也是黑暗的。如果想要照亮它,需要啟用全局光照。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/imitate_overworld.md b/plugins/mcreator-localization/help/zh_TW/dimension/imitate_overworld.md index 2ccf07c4ae3..1bd11ba08b5 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/imitate_overworld.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/imitate_overworld.md @@ -1 +1 @@ -該參數控製維度有關天氣、羅盤行為和生物生成等方面的屬性。 \ No newline at end of file +該引數控製維度有關天氣、羅盤行為和生物生成等方面的屬性。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/portal_igniter_texture.md b/plugins/mcreator-localization/help/zh_TW/dimension/portal_igniter_texture.md index f536e028b49..eb6da54e53a 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/portal_igniter_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/portal_igniter_texture.md @@ -1 +1 @@ -用於打開傳送門的觸發器的物品材質。 \ No newline at end of file +用於打開傳送門的觸發器的物品紋理。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/portal_particles.md b/plugins/mcreator-localization/help/zh_TW/dimension/portal_particles.md index 2fa2eb80024..82c842a5df8 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/portal_particles.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/portal_particles.md @@ -1 +1 @@ -該參數選擇當傳送門激活時,放出的粒子類型。 \ No newline at end of file +該引數選擇當傳送門激活時,放出的粒子類型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/portal_sound.md b/plugins/mcreator-localization/help/zh_TW/dimension/portal_sound.md index 73dff4fb2bd..45611e30204 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/portal_sound.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/portal_sound.md @@ -1 +1 @@ -該參數控製當傳送門激活時,每隔一段時間隨機播放的聲音。 \ No newline at end of file +該引數控製當傳送門激活時,每隔一段時間隨機播放的聲音。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/portal_texture.md b/plugins/mcreator-localization/help/zh_TW/dimension/portal_texture.md index d3fc21c5462..d6705ed73f4 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/portal_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/portal_texture.md @@ -1 +1 @@ -該參數控製傳送門方塊的材質,類似地獄傳送門方塊的紫色動態材質。 \ No newline at end of file +該引數控製傳送門方塊的紋理,類似地獄傳送門方塊的紫色動態紋理。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/dimension/sleep_result.md b/plugins/mcreator-localization/help/zh_TW/dimension/sleep_result.md index c368a718458..34203f9abdd 100644 --- a/plugins/mcreator-localization/help/zh_TW/dimension/sleep_result.md +++ b/plugins/mcreator-localization/help/zh_TW/dimension/sleep_result.md @@ -1 +1 @@ -該參數控製玩家在此維度嘗試睡覺時發生的事件。 \ No newline at end of file +該引數控製玩家在此維度嘗試睡覺時發生的事件。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/enchantment/curse.md b/plugins/mcreator-localization/help/zh_TW/enchantment/curse.md index bdf8431c2b5..e4fc6028432 100644 --- a/plugins/mcreator-localization/help/zh_TW/enchantment/curse.md +++ b/plugins/mcreator-localization/help/zh_TW/enchantment/curse.md @@ -1,5 +1,5 @@ 有這種屬性的附魔是不好的(紅名)。 -「消失詛咒」和「綁定詛咒」擁有這種屬性。 +消失詛咒和綁定詛咒擁有這種屬性。 詛咒型附魔不可以從物品上移除。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/enchantment/damage_modifier.md b/plugins/mcreator-localization/help/zh_TW/enchantment/damage_modifier.md index e5db5ddffc9..c436dcc4083 100644 --- a/plugins/mcreator-localization/help/zh_TW/enchantment/damage_modifier.md +++ b/plugins/mcreator-localization/help/zh_TW/enchantment/damage_modifier.md @@ -1,3 +1,3 @@ 該值將與物品現有的附魔等級相乘,得出該附魔減傷的最終值。 -例如,「保護」的該值為 1,所以「保護 I」的減傷數值為 1(你定義的值) * I(附魔等級) = 1。 \ No newline at end of file +例如,保護的該值為 1,所以保護 I 的減傷數值為 1(你定義的值) * I(附魔等級) = 1。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/base.md b/plugins/mcreator-localization/help/zh_TW/entity/base.md index ac11f83e78a..7497e542921 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/base.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/base.md @@ -1,5 +1,5 @@ 給該生物一個原版的實體 AI,使得它像原版實體一樣行動。 -這也會覆蓋一些參數,比如掉落物。 +這也會覆蓋一些引數,比如掉落物。 -通常這個參數不應該使用,應保持為預設(default)。 \ No newline at end of file +通常這個引數不應該使用,應保持為預設(default)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/behaviour.md b/plugins/mcreator-localization/help/zh_TW/entity/behaviour.md index 69f19334ec6..1f99d0c6cc4 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/behaviour.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/behaviour.md @@ -1,5 +1,5 @@ 設定為怪物(Mob)的生物可以攻擊,而設定為動物(Creature)的生物是被動的。 -如果使用了 AI 基礎,該參數會被覆蓋。 +如果使用了 AI 基礎,該引數會被覆蓋。 注意:如果在這裡選擇了動物(Creature)類型,卻給了它攻擊型的 AI 任務,大多數情況下這會導致遊戲崩潰。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/boss_entity.md b/plugins/mcreator-localization/help/zh_TW/entity/boss_entity.md index 943d7f89b1c..1c47db0c216 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/boss_entity.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/boss_entity.md @@ -1,3 +1,3 @@ 選中可使該實體為 BOSS。 -顏色參數控制 BOSS 血條的顏色,風格參數控制 BOSS 血條的風格。 \ No newline at end of file +顏色引數控制 BOSS 血條的顏色,風格引數控制 BOSS 血條的風格。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/bounding_box.md b/plugins/mcreator-localization/help/zh_TW/entity/bounding_box.md index ac08e17278d..b9c9be44e8e 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/bounding_box.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/bounding_box.md @@ -1,3 +1,3 @@ - 該參數控制實體的碰撞箱和陰影的大小,單位是格。 第一個選項設定寬度和厚度,第二個選項設定高度。 最後一個選項設定生物陰影半徑大小 + 該引數控制實體的碰撞箱和陰影的大小,單位是格。 第一個選項設定寬度和厚度,第二個選項設定高度。 最後一個選項設定生物陰影半徑大小 你可以在 [此](https://mcreator.net/wiki/entity-model-sizes) 瞭解更多有關實體模型大小的詳細資訊。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/bounding_box_scale.md b/plugins/mcreator-localization/help/zh_TW/entity/bounding_box_scale.md new file mode 100644 index 00000000000..6a4878633c3 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/entity/bounding_box_scale.md @@ -0,0 +1,3 @@ +此功能允許你控制實體碰撞箱的大小。 + +要控制遊戲中的實體外觀大小,請使用模型外觀大小引數。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/breedable.md b/plugins/mcreator-localization/help/zh_TW/entity/breedable.md index 33c29b7f2e9..62df0e1baa3 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/breedable.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/breedable.md @@ -1 +1 @@ -如果啟用了可繁殖參數,則該參數用於使該實體與另一個實體交配的物品 \ No newline at end of file +如果啟用了可繁殖引數,則該引數用於使該實體與另一個實體交配的物品 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/condition_can_breathe_underwater.md b/plugins/mcreator-localization/help/zh_TW/entity/condition_can_breathe_underwater.md index 79186f1219c..e1315415fb2 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/condition_can_breathe_underwater.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/condition_can_breathe_underwater.md @@ -1 +1 @@ -條件為真時,實體將會像魚類和魷魚一樣在水下無限制的呼吸。 \ No newline at end of file +條件為 true 時,實體將會像魚類和魷魚一樣在水下無限制的呼吸。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/condition_display_model_layer.md b/plugins/mcreator-localization/help/zh_TW/entity/condition_display_model_layer.md new file mode 100644 index 00000000000..292297c8a45 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/entity/condition_display_model_layer.md @@ -0,0 +1 @@ +返回值為 true 時,模型圖層將會可見。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/condition_fluids_can_push.md b/plugins/mcreator-localization/help/zh_TW/entity/condition_fluids_can_push.md index 2ff61d5e6b7..3d5b7c503dc 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/condition_fluids_can_push.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/condition_fluids_can_push.md @@ -1,3 +1,3 @@ -條件為假時,實體不會被流體推動。水生實體通常使用這個。 +條件為 false 時,實體不會被流體推動。水生實體通常使用這個。 -生物預設值為真。 \ No newline at end of file +生物預設值為 true。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/condition_is_model_transparent.md b/plugins/mcreator-localization/help/zh_TW/entity/condition_is_model_transparent.md index 3dd31518d05..2fe4dd2e2a6 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/condition_is_model_transparent.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/condition_is_model_transparent.md @@ -1 +1 @@ -當返回值為真時,實體將會變得透明 當玩家處於旁觀者模式時,他們將滿足這個條件 \ No newline at end of file +當返回值為 true 時,實體將會變得透明 當玩家處於旁觀者模式時,他們將滿足這個條件 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/condition_is_shaking.md b/plugins/mcreator-localization/help/zh_TW/entity/condition_is_shaking.md index c5e82de8c0d..675c294ec7b 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/condition_is_shaking.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/condition_is_shaking.md @@ -1 +1 @@ -當返回值為真時,實體將會抖動 僵尸村民在治療過程中使用這個功能 \ No newline at end of file +當返回值為 true 時,實體將會抖動 僵尸村民在治療過程中使用這個功能 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/data_default_value.md b/plugins/mcreator-localization/help/zh_TW/entity/data_default_value.md new file mode 100644 index 00000000000..388cf03b743 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/entity/data_default_value.md @@ -0,0 +1,5 @@ +這是實體變數的預設值。 + +- **Logic**: _true_ 或 _false_ +- **Number**:從最大負數極限到最大正數極限之間的值 +- **String**: 文字或字串值 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/data_name.md b/plugins/mcreator-localization/help/zh_TW/entity/data_name.md new file mode 100644 index 00000000000..2e68656157e --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/entity/data_name.md @@ -0,0 +1,3 @@ +此參數定義了此變數名。 + +主要使用函式塊來取得或設定其值。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/data_type.md b/plugins/mcreator-localization/help/zh_TW/entity/data_type.md new file mode 100644 index 00000000000..111b5960306 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/entity/data_type.md @@ -0,0 +1 @@ +此選項控制此實體的變數類型。支援類型:Logic、Number 和 String。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/entity_data.md b/plugins/mcreator-localization/help/zh_TW/entity/entity_data.md new file mode 100644 index 00000000000..364bdde95e2 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/entity/entity_data.md @@ -0,0 +1,4 @@ +向你自訂的實體添加自訂變數。 + +這些變數在客戶端和伺服端間會同步。 +只需使用一個就可以了,例如改變你實體的紋理。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/glow_texture.md b/plugins/mcreator-localization/help/zh_TW/entity/glow_texture.md index 9dec5a1daf3..a3224728a2b 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/glow_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/glow_texture.md @@ -1,7 +1 @@ -發光材質是生物上的可選附加材質。 - -該材質應和生物本身的材質擁有同樣的大小和佈置。 - -發光材質將被用於定義生物的發光層。材質越明亮,這些部位發光也會越強。 - -如果你不需要發光材質,請保持預設(空)。 \ No newline at end of file +發光紋理將被用於定義生物的發光層。紋理越明亮,這些部位發光也會越強。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/health.md b/plugins/mcreator-localization/help/zh_TW/entity/health.md index 0557e8271d2..bc919bc9435 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/health.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/health.md @@ -1 +1 @@ -此參數設定了生物的初始(和最大)生命值。 2 點生命值 = 1 顆心 \ No newline at end of file +此引數設定了生物的初始(和最大)生命值。 2 點生命值 = 1 顆心 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/inventory_size.md b/plugins/mcreator-localization/help/zh_TW/entity/inventory_size.md index c37526b5a17..54edff89dab 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/inventory_size.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/inventory_size.md @@ -1,3 +1,3 @@ -該參數控制該實體內建的物品欄擁有多少槽位。 +該引數控制該實體內建的物品欄擁有多少槽位。 請設為`GUI中最大的槽位ID + 1` \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/inventory_stack_size.md b/plugins/mcreator-localization/help/zh_TW/entity/inventory_stack_size.md index 7289e9df667..a420f130e26 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/inventory_stack_size.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/inventory_stack_size.md @@ -1,3 +1,3 @@ -該參數控制該實體內建物品欄中,每個槽位中物品的最大數量。 +該引數控制該實體內建物品欄中,每個槽位中物品的最大數量。 -注意:該物品本身在槽位中的數量限制,以及在此設定的參數,兩者取較小值,才是實際的最大堆疊數量。 \ No newline at end of file +注意:該物品本身在槽位中的數量限制,以及在此設定的引數,兩者取較小值,才是實際的最大堆疊數量。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/knockback_resistance.md b/plugins/mcreator-localization/help/zh_TW/entity/knockback_resistance.md index 8b463f7ed7f..c8cbc28d5b2 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/knockback_resistance.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/knockback_resistance.md @@ -1 +1 @@ -該參數定義實體對攻擊的擊退抗性。 大多數原版實體不使用它,而劫毀獸有 0.5 的擊退抗性。 +該引數定義實體對攻擊的擊退抗性。 大多數原版實體不使用它,而劫毀獸有 0.5 的擊退抗性。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/model.md b/plugins/mcreator-localization/help/zh_TW/entity/model.md index 5bcf1898585..099fcad5fcd 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/model.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/model.md @@ -1 +1 @@ -該參數定義生物的可見模型(形狀)。 \ No newline at end of file +該引數定義生物的可見模型(形狀)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/model_layers.md b/plugins/mcreator-localization/help/zh_TW/entity/model_layers.md new file mode 100644 index 00000000000..539df66b1ef --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/entity/model_layers.md @@ -0,0 +1 @@ +下面的清單中的模型圖層將套用於實體模型的頂部。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/ridable.md b/plugins/mcreator-localization/help/zh_TW/entity/ridable.md index 7e5baa43183..5dfae00db86 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/ridable.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/ridable.md @@ -1,3 +1,3 @@ -該參數將允許玩家騎乘實體。 +該引數將允許玩家騎乘實體。 你也可以啟用對實體的控制(可選)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/spawn_type.md b/plugins/mcreator-localization/help/zh_TW/entity/spawn_type.md index 59014d356eb..007092f2c7f 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/spawn_type.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/spawn_type.md @@ -1,7 +1,7 @@ -該參數控制生物將會屬於什麼生成類型。 +該引數控制生物將會屬於什麼生成類型。 -* 標記為「Monster」的生物只會在黑暗處或晚上生成。 -* 标记为「Creature」的怪物只会在有草方塊的陽光下生成上。請不要讓怪物使用這種類型,因为這會導致它們不会生成 +* 標記為 Monster 的生物只會在黑暗處或晚上生成。 +* 标记为 Creature 的怪物只会在有草方塊的陽光下生成上。請不要讓怪物使用這種類型,因为這會導致它們不会生成 * 标记为「Ambient」的怪物将在任何条件下生成,除非方塊类型阻止它。 但这一类型应该用于渲染環境氛圍的生物,如蝙蝠 * 「WaterCreature」將會沒有限制的在水中生成 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/spawn_weight.md b/plugins/mcreator-localization/help/zh_TW/entity/spawn_weight.md index 604ab6619e5..cfaacc7b02c 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/spawn_weight.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/spawn_weight.md @@ -1,4 +1,4 @@ -該參數控制遊戲選擇生成什麼生物時,生物的優先度。 +該引數控制遊戲選擇生成什麼生物時,生物的優先度。 更高的權重意味著這種生物在遊戲中會生成得更多。 相較於怪物,動物的權重應該小一些。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/step_height.md b/plugins/mcreator-localization/help/zh_TW/entity/step_height.md index 7b96a6fcc8f..3b9bc1f48d9 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/step_height.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/step_height.md @@ -1,3 +1,3 @@ -在此設定實體的可行走高度。 +在此設定實體最大可行走高度。 -大多數正常生物的可行走高度為0.6,而馬等可騎乘實體的可行走高度為1。 \ No newline at end of file +大多數正常生物的最大行走高度為 0.6,而馬等可騎乘實體的最大行走高度為 1。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/texture.md b/plugins/mcreator-localization/help/zh_TW/entity/texture.md index a505d6a17f8..8fbf73aa845 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/texture.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/texture.md @@ -1,3 +1,5 @@ -生物的材質。請保證它符合模型的設定。 +生物的紋理。請保證它符合模型的設定。 -例如,兩足生物模型(Biped models)只支援 64x64 的材質。 \ No newline at end of file +例如,兩足生物模型(Biped models)只支援 64x64 的紋理。 + +對於更複雜的模型圖層定義,請使用 ${l10n.t("elementgui.living_entity.page_model_layers")} 選項卡。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/tracking_range.md b/plugins/mcreator-localization/help/zh_TW/entity/tracking_range.md index 5fa662c74e3..1e6391b852f 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/tracking_range.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/tracking_range.md @@ -1,3 +1,3 @@ 该参数控制玩家追踪了這個實體多遠(以方塊計數)。 -將此參數設為0將完全停用實體的渲染和碰撞。 \ No newline at end of file +將此引數設為0將完全停用實體的渲染和碰撞。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/entity/visual_scale.md b/plugins/mcreator-localization/help/zh_TW/entity/visual_scale.md new file mode 100644 index 00000000000..222a09dd121 --- /dev/null +++ b/plugins/mcreator-localization/help/zh_TW/entity/visual_scale.md @@ -0,0 +1,3 @@ +此功能允許你控制實體在遊戲中的模型外觀大小。 + +要控制實體的碰撞箱大小,請使用碰撞箱大小引數。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/when_hurt.md b/plugins/mcreator-localization/help/zh_TW/entity/when_hurt.md index c1428a77ced..dace022ddc9 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/when_hurt.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/when_hurt.md @@ -2,4 +2,4 @@ `source entity ` 依賴項指的是攻擊方,如果傷害源不是實體,該值為 null。 -如果函式返回的邏輯值為`假`,那麼該實體將不會受到任何傷害。 +如果函式返回的邏輯值為` false`,那麼該實體將不會受到任何傷害。 diff --git a/plugins/mcreator-localization/help/zh_TW/entity/xp_amount.md b/plugins/mcreator-localization/help/zh_TW/entity/xp_amount.md index e6a17b38f6e..7a660723648 100644 --- a/plugins/mcreator-localization/help/zh_TW/entity/xp_amount.md +++ b/plugins/mcreator-localization/help/zh_TW/entity/xp_amount.md @@ -1,3 +1,3 @@ -該參數控制該生物被殺死時掉落的經驗。 +該引數控制該生物被殺死時掉落的經驗。 一般動物是 1-3,怪物是 5。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/feature/generation_condition.md b/plugins/mcreator-localization/help/zh_TW/feature/generation_condition.md index bc2fc881db4..1af15fa5317 100644 --- a/plugins/mcreator-localization/help/zh_TW/feature/generation_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/feature/generation_condition.md @@ -2,4 +2,4 @@ 在地物生成器中的位置修改後之後檢查此條件。 -請記住,在早期生成世界時,某些函式範本可能無法在此觸發器中正常工作。 \ No newline at end of file +注意:在早期生成世界時,某些函式範本可能無法在此觸發器中正常工作。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/bucket_texture.md b/plugins/mcreator-localization/help/zh_TW/fluid/bucket_texture.md index 6454a5c54c3..cf87d44ac9d 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/bucket_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/bucket_texture.md @@ -1 +1 @@ -該可選屬性將變更物品欄中的桶材質,以替代自動生成的材質。 \ No newline at end of file +該可選屬性將變更物品欄中的桶紋理,以替代自動生成的紋理。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/drip_particle.md b/plugins/mcreator-localization/help/zh_TW/fluid/drip_particle.md index 94f4d1ea889..7c54a0e9ff7 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/drip_particle.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/drip_particle.md @@ -1 +1 @@ -該參數控製流體從方塊上滴落時將會生成的粒子。 \ No newline at end of file +該引數控製流體從方塊上滴落時將會生成的粒子。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/empty_sound.md b/plugins/mcreator-localization/help/zh_TW/fluid/empty_sound.md index 43267d30c98..17c90e3a647 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/empty_sound.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/empty_sound.md @@ -1 +1 @@ -該參數控製裝有該流體的桶倒空時發出的聲音。如果沒有選擇任何聲音,將使用預設的桶倒空聲音。 \ No newline at end of file +該引數控製裝有該流體的桶倒空時發出的聲音。如果沒有選擇任何聲音,將使用預設的桶倒空聲音。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/enable_bucket.md b/plugins/mcreator-localization/help/zh_TW/fluid/enable_bucket.md index c5393f4d7d7..5224e1ffba6 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/enable_bucket.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/enable_bucket.md @@ -1 +1 @@ -該參數控製該流體是否能被裝入桶內。 \ No newline at end of file +該引數控製該流體是否能被裝入桶內。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/flow_rate.md b/plugins/mcreator-localization/help/zh_TW/fluid/flow_rate.md index 98ef4b7de7e..b605599f536 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/flow_rate.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/flow_rate.md @@ -1,3 +1,3 @@ -該參數控製流體從一個方塊流到另一個方塊所花的時間。該值越高,流動速度越慢。 +該引數控製流體從一個方塊流到另一個方塊所花的時間。該值越高,流動速度越慢。 預設的水為 5,在主世界的熔岩為 30 , 在地獄的熔岩則為 10 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/flow_strength.md b/plugins/mcreator-localization/help/zh_TW/fluid/flow_strength.md index 42304e28b8f..e5462b061b8 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/flow_strength.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/flow_strength.md @@ -1 +1 @@ -該參數控製流體流動時將會用多大的力推離實體。如果設為負值,流體反而會吸引實體。 \ No newline at end of file +該引數控製流體流動時將會用多大的力推離實體。如果設為負值,流體反而會吸引實體。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/level_decrease.md b/plugins/mcreator-localization/help/zh_TW/fluid/level_decrease.md index 62b872fba2e..caf0a094d2b 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/level_decrease.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/level_decrease.md @@ -1,3 +1,3 @@ -該參數控製該流體每流過一個方塊將會降低多少高度。該值越高,一攤流體覆蓋的面積越小。 +該引數控製該流體每流過一個方塊將會降低多少高度。該值越高,一攤流體覆蓋的面積越小。 對於主世界水和地獄熔岩值為 1,主世界熔岩值為 2。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/slope_find_distance.md b/plugins/mcreator-localization/help/zh_TW/fluid/slope_find_distance.md index 34bad31c4f1..d7f8c00670a 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/slope_find_distance.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/slope_find_distance.md @@ -1 +1 @@ -該參數決定處於多遠的斜坡將會影響流體的流動。流體會直接流向斜坡而不是向四周流動。該值越低,一攤該流體將通常會在不平的地形上覆蓋更大的面積。 \ No newline at end of file +該引數決定處於斜坡對流體的流動的影響。流體會直接流向斜坡而不是向四周擴散。該值越低,流體將通常會在不平的地面上覆蓋更廣的面積。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/fluid/tint_type.md b/plugins/mcreator-localization/help/zh_TW/fluid/tint_type.md index 29ee1e76a75..51cb6653421 100644 --- a/plugins/mcreator-localization/help/zh_TW/fluid/tint_type.md +++ b/plugins/mcreator-localization/help/zh_TW/fluid/tint_type.md @@ -1,3 +1,3 @@ 該選項將基於生態域顏色給流體著色,類似於草、樹葉和水面。 -為了有最好的效果,流體的材質應該是灰度的。 \ No newline at end of file +為了有最好的效果,流體的紋理應該是灰度的。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/function/namespace.md b/plugins/mcreator-localization/help/zh_TW/function/namespace.md index 7a3314f279e..2a1061e76cb 100644 --- a/plugins/mcreator-localization/help/zh_TW/function/namespace.md +++ b/plugins/mcreator-localization/help/zh_TW/function/namespace.md @@ -1,3 +1,3 @@ -* **Mod:** 僅用於你的模組。(該函數的全名為 `${modid}:${registryname}`) +* **Mod:** 僅用於你的模組。(該函數的全名為 `${modid}:${registryname}`) -* **Minecraft:** 可用於覆蓋原版。(該函數的全名為 `minecraft:${registryname}`) \ No newline at end of file +* **Minecraft:** 可用於覆蓋原版。(該函數的全名為 `minecraft:${registryname}`) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/gui/button_display_condition.md b/plugins/mcreator-localization/help/zh_TW/gui/button_display_condition.md index f76ea3c3053..224587f874d 100644 --- a/plugins/mcreator-localization/help/zh_TW/gui/button_display_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/gui/button_display_condition.md @@ -1 +1 @@ -如果啟用,僅當條件通過(條件函式返回為真)時該按鈕才會顯示。 \ No newline at end of file +如果啟用,僅當條件通過(條件函式返回為 true)時該按鈕才會顯示。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/gui/entity_model_rotation.md b/plugins/mcreator-localization/help/zh_TW/gui/entity_model_rotation.md index 597b65deab9..1863206869b 100644 --- a/plugins/mcreator-localization/help/zh_TW/gui/entity_model_rotation.md +++ b/plugins/mcreator-localization/help/zh_TW/gui/entity_model_rotation.md @@ -1,5 +1,5 @@ -實體偏航旋轉參數以 ° 為單位定義所展示實體模型的初始旋轉。 +實體偏航旋轉引數以 ° 為單位定義所展示實體模型的初始旋轉。 -此參數僅適用於 Minecraft 1.19+ 的版本 +此引數僅適用於 Minecraft 1.19+ 的版本 因渲染引擎所限,較大的數值可能會出現些渲染問題。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/gui/image_display_condition.md b/plugins/mcreator-localization/help/zh_TW/gui/image_display_condition.md index bcf10bed478..bbd86ed7002 100644 --- a/plugins/mcreator-localization/help/zh_TW/gui/image_display_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/gui/image_display_condition.md @@ -1 +1 @@ -如果啟用,僅當條件通過(條件函式返回為真)時該圖片才會顯示。 \ No newline at end of file +如果啟用,僅當條件通過(條件函式返回為 true)時該圖片才會顯示。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/gui/label_display_condition.md b/plugins/mcreator-localization/help/zh_TW/gui/label_display_condition.md index 901a3e5baf4..7d48d3ef1d3 100644 --- a/plugins/mcreator-localization/help/zh_TW/gui/label_display_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/gui/label_display_condition.md @@ -1 +1 @@ -如果啟用,僅當條件通過(條件函式返回為真)時該標簽才會顯示。 \ No newline at end of file +如果啟用,僅當條件通過(條件函式返回為true)時該標簽才會顯示。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/gui/label_text.md b/plugins/mcreator-localization/help/zh_TW/gui/label_text.md index fb7dbd0e388..4ccab25c22a 100644 --- a/plugins/mcreator-localization/help/zh_TW/gui/label_text.md +++ b/plugins/mcreator-localization/help/zh_TW/gui/label_text.md @@ -1 +1 @@ -此參數定義了當 GUI 打開時標簽顯示的文字。 你可以使用字串返回類型函式來處理更複雜的文字。 \ No newline at end of file +此引數定義了當 GUI 打開時標簽顯示的文字。 你可以使用字串返回類型函式來處理更複雜的文字。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/gui/slot_pickup_condition.md b/plugins/mcreator-localization/help/zh_TW/gui/slot_pickup_condition.md index 0937b36a4ec..8f7952af0c2 100644 --- a/plugins/mcreator-localization/help/zh_TW/gui/slot_pickup_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/gui/slot_pickup_condition.md @@ -1 +1 @@ -如果條件返回真,玩家將無法將物品拿出此儲存槽中。 然而他們能從儲存槽毫無限制的放入物品。 \ No newline at end of file +如果條件返回 true,玩家將無法將物品拿出此儲存槽中。 然而他們能從儲存槽毫無限制的放入物品。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/gui/slot_placement_condition.md b/plugins/mcreator-localization/help/zh_TW/gui/slot_placement_condition.md index 1735f799c35..e4b10f45e52 100644 --- a/plugins/mcreator-localization/help/zh_TW/gui/slot_placement_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/gui/slot_placement_condition.md @@ -1,3 +1,3 @@ -如果條件返回真,玩家將無法將物品放入此儲存槽中。 然而他們能從儲存槽毫無限制的拿出物品。 +如果條件返回true,玩家將無法將物品放入此儲存槽中。 然而他們能從儲存槽毫無限制的拿出物品。 -註意:此條件覆蓋「限製物品棧輸入」參數。 \ No newline at end of file +註意:此條件覆蓋限製物品棧輸入引數。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/always_edible.md b/plugins/mcreator-localization/help/zh_TW/item/always_edible.md index 5319c50657a..ba69116a156 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/always_edible.md +++ b/plugins/mcreator-localization/help/zh_TW/item/always_edible.md @@ -1 +1 @@ -啟用該參數使飽食度為滿的狀態下也可以攝入食物。(例如:金蘋果) \ No newline at end of file +啟用該引數使飽食度為滿的狀態下也可以攝入食物。(例如:金蘋果) \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/container_item.md b/plugins/mcreator-localization/help/zh_TW/item/container_item.md index 8064c822317..2b6e6c7f26c 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/container_item.md +++ b/plugins/mcreator-localization/help/zh_TW/item/container_item.md @@ -1 +1 @@ -此參數控制物品在合成時是否停留在合成網格中。 這意味著該物品將是配方的一部分,但不會被它消耗。 \ No newline at end of file +此引數控制物品在合成時是否停留在合成方格中。 這意味著該物品將是配方的一部分,但不會被它消耗。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/container_item_damage.md b/plugins/mcreator-localization/help/zh_TW/item/container_item_damage.md index 63a7ffb5a90..a57b838c745 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/container_item_damage.md +++ b/plugins/mcreator-localization/help/zh_TW/item/container_item_damage.md @@ -1 +1 @@ -如果你啟用了"${l10n.t("elementgui.item.container_item")}",你可以啟用這個選項來損壞物品(即降低耐久值),而不是簡單地將其保留在合成網格中。 \ No newline at end of file +如果你啟用了 "${l10n.t("elementgui.item.container_item")}" 你可以啟用這個選項來損壞物品(即降低耐久值),而不是簡單地將其保留在合成方格中。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/custom_property_name.md b/plugins/mcreator-localization/help/zh_TW/item/custom_property_name.md index 718d7bf158b..eeda0392a28 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/custom_property_name.md +++ b/plugins/mcreator-localization/help/zh_TW/item/custom_property_name.md @@ -1,3 +1,3 @@ -此參數控制著該屬性的名稱。注意:不允許使用重複的名稱。 +此引數控制著該屬性的名稱。注意:不允許使用重複的名稱。 因爲有一些屬性是爲原版 Minecraft 的所有物品定義的,因此他們的名字不能重複使用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/custom_states.md b/plugins/mcreator-localization/help/zh_TW/item/custom_states.md index cc7be613122..c8ba6973de6 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/custom_states.md +++ b/plugins/mcreator-localization/help/zh_TW/item/custom_states.md @@ -1,4 +1,4 @@ -在這裏你可以列出這個物品的附加屬性,並指定它的材質/模型如何變更 根據給定的屬性值組合形成狀態。 物品屬性可以接受任何數字(包括整數或小數)作為其值,因此為了避免觀察屬性值是否完全正確 為了提供接近的值,如果從項中提取的實際屬性值_ 大於_預期值(在此指定)。如果有幾個狀態有匹配的值, 將使用這些匹配狀態中的最後一個。如果沒有狀態匹配,物品將使用其默認的外觀。 +在這裏你可以列出這個物品的附加屬性,並指定它的紋理/模型如何變更 根據給定的屬性值組合形成狀態。 物品屬性可以接受任何數字(包括整數或小數)作為其值,因此為了避免觀察屬性值是否完全正確 為了提供接近的值,如果從項中提取的實際屬性值_ 大於_預期值(在此指定)。如果有幾個狀態有匹配的值, 將使用這些匹配狀態中的最後一個。如果沒有狀態匹配,物品將使用其默認的外觀。 除了自訂屬性,你還可以使用一些內置的物品屬性來定義 Minecraft 的所有物品。 diff --git a/plugins/mcreator-localization/help/zh_TW/item/damage_vs_entity.md b/plugins/mcreator-localization/help/zh_TW/item/damage_vs_entity.md index 701d8bc2492..30a92efd3bd 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/damage_vs_entity.md +++ b/plugins/mcreator-localization/help/zh_TW/item/damage_vs_entity.md @@ -1 +1 @@ -你可以用這個參數啟用你的物品的近戰傷害,並設定一個傷害值。 \ No newline at end of file +你可以用這個引數啟用你的物品的近戰傷害,並設定一個傷害值。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/destroy_speed.md b/plugins/mcreator-localization/help/zh_TW/item/destroy_speed.md index a20f40559f3..e89755eaf01 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/destroy_speed.md +++ b/plugins/mcreator-localization/help/zh_TW/item/destroy_speed.md @@ -1,4 +1,4 @@ -破壞速度參數控制該物品破壞方塊的速度。 +破壞速度引數控制該物品破壞方塊的速度。 典型數值: * **1** - 普通物品 diff --git a/plugins/mcreator-localization/help/zh_TW/item/enable_ranged_item.md b/plugins/mcreator-localization/help/zh_TW/item/enable_ranged_item.md index 862be60d126..dcbe473ff92 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/enable_ranged_item.md +++ b/plugins/mcreator-localization/help/zh_TW/item/enable_ranged_item.md @@ -1 +1,7 @@ -啟用此参数以讓该物品成为一个像弓和弩一樣能夠發射物品的遠程物品。 \ No newline at end of file +勾選此項使物品變成遠程物品。 允許它發射投射物,就如弓弩一樣。 + +要让远程物品工作,需要设定一个像弓或与弓一致的发射动画, 同时也要确保物品持续时间为正数。 + +如果你使用了远程物品,则遠程物品只會在玩家物品欄有彈藥時才可以發射。 使用原版的箭時,彈藥就是箭或你在自訂投射物中指定的必需物品。 + +如果您想在不需要设定必需的物品的情况下发射投射物, 使用当物品右击时的函式触发器和函式。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/immune_to_fire.md b/plugins/mcreator-localization/help/zh_TW/item/immune_to_fire.md index 82f00bf9931..4fa05f236af 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/immune_to_fire.md +++ b/plugins/mcreator-localization/help/zh_TW/item/immune_to_fire.md @@ -1 +1 @@ -這個參數控制物品是否對火免疫,比如獄髓物品。 \ No newline at end of file +這個引數控制物品是否對火免疫,比如獄髓物品。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/inventory_stack_size.md b/plugins/mcreator-localization/help/zh_TW/item/inventory_stack_size.md index a443b504201..8202fbeec2c 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/inventory_stack_size.md +++ b/plugins/mcreator-localization/help/zh_TW/item/inventory_stack_size.md @@ -1,3 +1,3 @@ -該參數控制可放置在其內部物品槽中的堆疊的最大大小。 +該引數控制可放置在其內部物品槽中的堆疊的最大大小。 -請記住,該參數與最大物品棧大小之間的較小數字決定了實際的最大堆棧大小。 \ No newline at end of file +注意:該引數與最大物品棧大小之間的較小數字決定了實際的最大堆棧大小。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/is_meat.md b/plugins/mcreator-localization/help/zh_TW/item/is_meat.md index 4b052ed8308..a51217f8fbd 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/is_meat.md +++ b/plugins/mcreator-localization/help/zh_TW/item/is_meat.md @@ -1 +1 @@ -該參數控制該食物是否為食肉動物的食物。 \ No newline at end of file +該引數控制該食物是否為食肉動物的食物。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/number_of_uses.md b/plugins/mcreator-localization/help/zh_TW/item/number_of_uses.md index 43502734274..c40f0a3eefe 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/number_of_uses.md +++ b/plugins/mcreator-localization/help/zh_TW/item/number_of_uses.md @@ -1,4 +1,4 @@ -此參數控制物品的耐久值(物品可以被使用多少次)。 +此引數控制物品的耐久值(物品可以被使用多少次)。 將此值設為0以停用物品耐久度。 diff --git a/plugins/mcreator-localization/help/zh_TW/item/ranged_use_condition.md b/plugins/mcreator-localization/help/zh_TW/item/ranged_use_condition.md index 4d032399d7e..b330aa73a75 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/ranged_use_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/item/ranged_use_condition.md @@ -1,3 +1,3 @@ -此函式將在遠程物品觸發之前呼叫,以檢查所選函式的返回值是否為真。 +此函式將在遠程物品觸發之前呼叫,以檢查所選函式的返回值是否為 true。 -保留“${l10n.t("condition.common.true")}”來停用任何附加條件。彈藥檢查仍然適用於這種情況。 \ No newline at end of file +保留 ${l10n.t("condition.common.true")} 來停用任何附加條件。彈藥檢查仍然適用於這種情況。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/recipe_remainder.md b/plugins/mcreator-localization/help/zh_TW/item/recipe_remainder.md index 274c2e2d678..1cfe1268f02 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/recipe_remainder.md +++ b/plugins/mcreator-localization/help/zh_TW/item/recipe_remainder.md @@ -1 +1 @@ -此參數控制將在工作台中被替換的物品。 這意味著該物品將是配方的一部分,但將被另一個物品替換。 \ No newline at end of file +此引數控制將在工作台中被替換的物品。 這意味著該物品將是配方的一部分,但將被另一個物品替換。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/result_item.md b/plugins/mcreator-localization/help/zh_TW/item/result_item.md index c7df0ff50e1..b4aa869ea31 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/result_item.md +++ b/plugins/mcreator-localization/help/zh_TW/item/result_item.md @@ -1 +1 @@ -該參數定義了食用該食品的實體的物品栏中應新增的物品。 \ No newline at end of file +該引數定義了食用該食品的實體的物品栏中應新增的物品。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/special_information.md b/plugins/mcreator-localization/help/zh_TW/item/special_information.md index 9da98bfaa23..941ffc46f50 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/special_information.md +++ b/plugins/mcreator-localization/help/zh_TW/item/special_information.md @@ -1 +1,3 @@ -當你用滑鼠點擊物品欄中的物品圖示時,此參數將會給物品新增提示框。 如果你使用函式生成的提示框,而你的物品沒有被實體拿取或不是礦物,`實體`依賴項將為空。 \ No newline at end of file +當你把滑鼠放在物品欄的物品圖標上時,此引數會給物品添加一個提示框。 + +如果你使用了用函式生成的提示框,而你的物品是未被一個實體持有或目前是掉落物,` entity `依賴項將為 null。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/use_duration.md b/plugins/mcreator-localization/help/zh_TW/item/use_duration.md index 42fea7b05d1..c941192e5ef 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/use_duration.md +++ b/plugins/mcreator-localization/help/zh_TW/item/use_duration.md @@ -1,3 +1,3 @@ -此參數控制物品一次可以使用多長時間。 +此引數控制物品一次可以使用多長時間。 如果物品是一種食物,那麼此值將定義玩家吃食物所需的時間。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/when_right_clicked.md b/plugins/mcreator-localization/help/zh_TW/item/when_right_clicked.md index ba18f85116e..afa03b9b2e2 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/when_right_clicked.md +++ b/plugins/mcreator-localization/help/zh_TW/item/when_right_clicked.md @@ -1,3 +1,3 @@ 當玩家右鍵點擊手中的物品時,該函式將會被執行。 -如果你想讓該函式只在實體在空中用此物品右鍵點擊時被呼叫,"${l10n.t("elementgui.common.event_right_clicked_block")}"函式應該總是返回 SUCCESS/CONSUME。 \ No newline at end of file +如果你想讓該函式只在實體在空中用此物品右鍵點擊時被呼叫,"${l10n.t("elementgui.common.event_right_clicked_block")}"函式應該總是返回 SUCCESS/CONSUME。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item/when_right_clicked_block.md b/plugins/mcreator-localization/help/zh_TW/item/when_right_clicked_block.md index 59312d10cb1..51a8eecd24a 100644 --- a/plugins/mcreator-localization/help/zh_TW/item/when_right_clicked_block.md +++ b/plugins/mcreator-localization/help/zh_TW/item/when_right_clicked_block.md @@ -4,4 +4,4 @@ 如果函式沒有返回任何值,結果操作類型將是 PASS。 -如果你想要「${l10n.t("elementgui.common.event_right_clicked_air")}」函式僅在實體在空中對此物品右鍵點擊時被呼叫,此函式應總是返回 SUCCESS/CONSUME。 \ No newline at end of file +如果你想要 ${l10n.t("elementgui.common.event_right_clicked_air")}" 函式僅在實體在空中對此物品右鍵點擊時被呼叫,此函式應總是返回 SUCCESS/CONSUME。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item_extension/dispense_success_condition.md b/plugins/mcreator-localization/help/zh_TW/item_extension/dispense_success_condition.md index 8497c6fa488..cd95915e7fa 100644 --- a/plugins/mcreator-localization/help/zh_TW/item_extension/dispense_success_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/item_extension/dispense_success_condition.md @@ -1,3 +1,3 @@ 這個條件決定發射是否完成。如果條件失敗,發射器將顯示失敗效果。 -此函式的值被傳輸給 "${l10n.t("elementgui.item_extension.dispense_result_itemstack")}" 作為「SUCCESS」的依賴項。 \ No newline at end of file +此函式的值被傳輸給 "${l10n.t("elementgui.item_extension.dispense_result_itemstack")}" 作為 SUCCESS 的依賴項。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/item_extension/has_dispense_behavior.md b/plugins/mcreator-localization/help/zh_TW/item_extension/has_dispense_behavior.md index d237cdd9c2a..0867b98f860 100644 --- a/plugins/mcreator-localization/help/zh_TW/item_extension/has_dispense_behavior.md +++ b/plugins/mcreator-localization/help/zh_TW/item_extension/has_dispense_behavior.md @@ -1 +1 @@ -如果勾選此項,則發射器不會使用預設操作刪除該物品,而是調用 "${l10n.t("elementgui.item_extension.dispense_success_condition")}" 和 "${l10n.t("elementgui.item_extension.dispense_result_itemstack")}" 函式。 +如果勾選此項,則發射器不會使用預設操作刪除該物品,而是調用 "${l10n.t("elementgui.item_extension.dispense_success_condition")}" and "${l10n.t("elementgui.item_extension.dispense_result_itemstack")}" 函式 diff --git a/plugins/mcreator-localization/help/zh_TW/item_extension/layer_chance.md b/plugins/mcreator-localization/help/zh_TW/item_extension/layer_chance.md index 4dc87660aa9..a5d322cae19 100644 --- a/plugins/mcreator-localization/help/zh_TW/item_extension/layer_chance.md +++ b/plugins/mcreator-localization/help/zh_TW/item_extension/layer_chance.md @@ -1,3 +1,3 @@ 這個數字是該物品添加一層到堆肥桶的概率。 保持數值為0來停用。 -原版數值可在[此](https://minecraft.wiki/w/Composter#Composting)找到。
中文連結(Fandom):中文 \ No newline at end of file +原版數值可在此找到 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/keybinding/category.md b/plugins/mcreator-localization/help/zh_TW/keybinding/category.md index c85409377af..7fe300c9d0f 100644 --- a/plugins/mcreator-localization/help/zh_TW/keybinding/category.md +++ b/plugins/mcreator-localization/help/zh_TW/keybinding/category.md @@ -2,4 +2,4 @@ 屬於同一類別的所有按鍵綁定應該具有相同的類別。 -要設定按鍵類別名稱,請轉到**${l10n.t("tab.workspace")} -> ${l10n.t("workspace.category.localization")} -> ${l10n.t("workspace.localization.add_entry")}**並使用 `key.category.${data.keyBindingCategoryKey}` 來取得條目名稱,然後將值設定為所需的類別名稱。 \ No newline at end of file +要設定按鍵類別名稱,請轉到 **${l10n.t("tab.workspace")} -> ${l10n.t("workspace.category.localization")} -> ${l10n.t("workspace.localization.add_entry")}** and use `key.category.${data.keyBindingCategoryKey}` 來取得條目名稱,然後將值設定為所需的類別名稱。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/keybinding/key.md b/plugins/mcreator-localization/help/zh_TW/keybinding/key.md index 4d94aa5d067..f4c95f8539c 100644 --- a/plugins/mcreator-localization/help/zh_TW/keybinding/key.md +++ b/plugins/mcreator-localization/help/zh_TW/keybinding/key.md @@ -1,3 +1,3 @@ -此參數定義用於執行按鍵綁定函式的按鍵。 +此引數定義用於執行按鍵綁定函式的按鍵。 玩家可以在按鍵控製中變更它。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/keybinding/name.md b/plugins/mcreator-localization/help/zh_TW/keybinding/name.md index 7bde8ecca48..4e65411a46c 100644 --- a/plugins/mcreator-localization/help/zh_TW/keybinding/name.md +++ b/plugins/mcreator-localization/help/zh_TW/keybinding/name.md @@ -1 +1 @@ -此參數控製在 Minecraft 設定中的控製選項卡中顯示的按鍵的名稱。 \ No newline at end of file +此引數控製在 Minecraft 設定中的控製選項卡中顯示的按鍵的名稱。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/loottable/registry_name.md b/plugins/mcreator-localization/help/zh_TW/loottable/registry_name.md index ed415fce0d0..641a0489473 100644 --- a/plugins/mcreator-localization/help/zh_TW/loottable/registry_name.md +++ b/plugins/mcreator-localization/help/zh_TW/loottable/registry_name.md @@ -1,3 +1,3 @@ -點擊下列清單,選擇戰利品表的「類別」。它沒有定義戰利品表類型。 +點擊下列清單,選擇戰利品表的類別。它沒有定義戰利品表類型。 這只是為了標準化戰利品表的名稱。例如,方塊戰利品表使用blocks/registry_name。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/loottable/type.md b/plugins/mcreator-localization/help/zh_TW/loottable/type.md index d369af66e20..c0f4b3c4fa6 100644 --- a/plugins/mcreator-localization/help/zh_TW/loottable/type.md +++ b/plugins/mcreator-localization/help/zh_TW/loottable/type.md @@ -1 +1 @@ -此參數定義了你製作的戰利品表的類型。 \ No newline at end of file +此引數定義了你製作的戰利品表的類型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/musicdisc/length.md b/plugins/mcreator-localization/help/zh_TW/musicdisc/length.md index 85383e3e6e7..c7cc64acca7 100644 --- a/plugins/mcreator-localization/help/zh_TW/musicdisc/length.md +++ b/plugins/mcreator-localization/help/zh_TW/musicdisc/length.md @@ -1,3 +1,3 @@ 唱片的長度,以遊戲刻表示。20刻是1秒。 -此參數用於在播放開始後,當在此字段中指定的節拍數通過時,向悅靈發送信號以停止跳動。 +此引數用於在播放開始後,當在此字段中指定的節拍數通過時,向悅靈發送信號以停止跳動。 diff --git a/plugins/mcreator-localization/help/zh_TW/overlay/base_texture.md b/plugins/mcreator-localization/help/zh_TW/overlay/base_texture.md index 6d8ac495744..635f71ac029 100644 --- a/plugins/mcreator-localization/help/zh_TW/overlay/base_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/overlay/base_texture.md @@ -1,5 +1,5 @@ -叠加層的基礎材質。其它組件將被繪製在這個材質上。 +叠加層的基礎紋理。其它組件將被繪製在這個紋理上。 -此參數可以用來製作類似戴上雕刻南瓜時顯示的圖層。 +此引數可以用來製作類似戴上雕刻南瓜時顯示的圖層。 推薦的覆蓋大小是1920 x 1080,這是適當的比例。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/overlay/display_condition.md b/plugins/mcreator-localization/help/zh_TW/overlay/display_condition.md index 3a5728246d9..1f35db1af32 100644 --- a/plugins/mcreator-localization/help/zh_TW/overlay/display_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/overlay/display_condition.md @@ -1,3 +1,3 @@ 此函式指定是否應該顯示叠加層。 -當函式返回真時,叠加層將顯示在屏幕上。 \ No newline at end of file +當函式返回 true 時,叠加層將顯示在屏幕上。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/overlay/rendering_priority.md b/plugins/mcreator-localization/help/zh_TW/overlay/rendering_priority.md index 083e32a158c..3e5a431cdde 100644 --- a/plugins/mcreator-localization/help/zh_TW/overlay/rendering_priority.md +++ b/plugins/mcreator-localization/help/zh_TW/overlay/rendering_priority.md @@ -1 +1 @@ -此參數定義了叠加層的優先級。帶有「High」的叠加層將在渲染在帶有「Low」的叠加層之上。 \ No newline at end of file +此引數定義了叠加層的優先級。帶有 High 的叠加層將在渲染在帶有 Low 的叠加層之上。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/painting/author.md b/plugins/mcreator-localization/help/zh_TW/painting/author.md index e56a0be4f38..d392961fa91 100644 --- a/plugins/mcreator-localization/help/zh_TW/painting/author.md +++ b/plugins/mcreator-localization/help/zh_TW/painting/author.md @@ -1,3 +1,3 @@ -該參數定義畫的作者。 +該引數定義畫的作者。 註意:此爲必需的,僅用於1.19.4+ \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/painting/height.md b/plugins/mcreator-localization/help/zh_TW/painting/height.md index ff72db4c52d..90040d6b972 100644 --- a/plugins/mcreator-localization/help/zh_TW/painting/height.md +++ b/plugins/mcreator-localization/help/zh_TW/painting/height.md @@ -1 +1 @@ -此參數控製該繪畫的高度(以格為單位)。 \ No newline at end of file +此引數控製該繪畫的高度(以格為單位)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/painting/texture.md b/plugins/mcreator-localization/help/zh_TW/painting/texture.md index 0093012b6f2..18b29a41885 100644 --- a/plugins/mcreator-localization/help/zh_TW/painting/texture.md +++ b/plugins/mcreator-localization/help/zh_TW/painting/texture.md @@ -1,3 +1,3 @@ -選擇一個材質,應該用作這幅繪畫的前景。 +選擇一個紋理,應該用作這幅繪畫的前景。 -重要提示:如果材質名稱與元素的註冊表名稱不同,則會生成材質的副本。 \ No newline at end of file +重要提示:如果紋理名稱與元素的註冊表名稱不同,則會生成紋理的副本。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/painting/title.md b/plugins/mcreator-localization/help/zh_TW/painting/title.md index 4d61d5da70f..fb6765d5510 100644 --- a/plugins/mcreator-localization/help/zh_TW/painting/title.md +++ b/plugins/mcreator-localization/help/zh_TW/painting/title.md @@ -1,3 +1,3 @@ -該參數定義畫的標題。 +該引數定義畫的標題。 註意:此爲必需的,僅用於1.19.4+ \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/painting/width.md b/plugins/mcreator-localization/help/zh_TW/painting/width.md index 132a3c3db56..c48c35b2d11 100644 --- a/plugins/mcreator-localization/help/zh_TW/painting/width.md +++ b/plugins/mcreator-localization/help/zh_TW/painting/width.md @@ -1 +1 @@ -此參數控製該繪畫的寬度(以格为單位)。 \ No newline at end of file +此引數控製該繪畫的寬度(以格为單位)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/always_show.md b/plugins/mcreator-localization/help/zh_TW/particle/always_show.md index c7d02a7754a..d78adf059be 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/always_show.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/always_show.md @@ -1 +1 @@ -該參數控製是否在所有情況下都顯示粒子, 即使在顯示設定中粒子顯示設定為最小。 \ No newline at end of file +該引數控製是否在所有情況下都顯示粒子, 即使在顯示設定中粒子顯示設定為最小。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/angular_acceleration.md b/plugins/mcreator-localization/help/zh_TW/particle/angular_acceleration.md index bafd467771d..e3bac52073e 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/angular_acceleration.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/angular_acceleration.md @@ -1 +1 @@ -這個參數控製粒子的旋轉的速度。 \ No newline at end of file +這個引數控製粒子的旋轉的速度。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/angular_velocity.md b/plugins/mcreator-localization/help/zh_TW/particle/angular_velocity.md index 65a60a6a0aa..e4f39d9b6e7 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/angular_velocity.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/angular_velocity.md @@ -1,3 +1,3 @@ -這個參數控製粒子的初始旋轉速度。 負值表示逆時針旋轉。 +這個引數控製粒子的初始旋轉速度。 負值表示逆時針旋轉。 将值设定为0.314大致相當於每秒旋轉1次。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/animated_frame_duration.md b/plugins/mcreator-localization/help/zh_TW/particle/animated_frame_duration.md index 0f575a2c062..700867bf275 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/animated_frame_duration.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/animated_frame_duration.md @@ -1 +1 @@ -這個參數控製在切換到下一個動畫幀之前應該經過多少刻。 \ No newline at end of file +這個引數控製在切換到下一個動畫幀之前應該經過多少刻。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/animated_texture.md b/plugins/mcreator-localization/help/zh_TW/particle/animated_texture.md index 40124a16004..9d51935fb23 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/animated_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/animated_texture.md @@ -1 +1 @@ -如果你的粒子材質是動態,請勾選此項。 \ No newline at end of file +如果你的粒子紋理是動態,請勾選此項。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/gravity.md b/plugins/mcreator-localization/help/zh_TW/particle/gravity.md index e9e7c08ee6c..4c4e084d4c9 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/gravity.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/gravity.md @@ -1 +1 @@ -此參數指定粒子下落速度。 負值將使該粒子飛向天空。 \ No newline at end of file +此引數指定粒子下落速度。 負值將使該粒子飛向天空。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/height.md b/plugins/mcreator-localization/help/zh_TW/particle/height.md index 10cb53daf93..390fe0f2413 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/height.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/height.md @@ -1 +1 @@ -該參數控製粒子的高度(以格為單位)。 \ No newline at end of file +該引數控製粒子的高度(以格為單位)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/max_age_diff.md b/plugins/mcreator-localization/help/zh_TW/particle/max_age_diff.md index 56bfe18383e..53a44b66503 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/max_age_diff.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/max_age_diff.md @@ -1 +1 @@ -此參數控製實際最大粒子持續時間,可以從指定的最大時間值來變化多少正值或負值。 \ No newline at end of file +此引數控製實際最大粒子持續時間,可以從指定的最大時間值來變化多少正值或負值。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/render_type.md b/plugins/mcreator-localization/help/zh_TW/particle/render_type.md index 9a266669149..cb56910e9dd 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/render_type.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/render_type.md @@ -1,4 +1,4 @@ -此參數定義了粒子的渲染方式: +此引數定義了粒子的渲染方式: * **Opaque:**不透明(類似於死亡粒子) * ** Translucent:** 像藥水效果一樣半透明,這會消耗很多資源。 diff --git a/plugins/mcreator-localization/help/zh_TW/particle/scale.md b/plugins/mcreator-localization/help/zh_TW/particle/scale.md index e802d365fda..7873dcfe0d1 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/scale.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/scale.md @@ -1 +1 @@ -這個參數定義了粒子材質應該縮放多少。 \ No newline at end of file +這個引數定義了粒子紋理應該縮放多少。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/speed_factor.md b/plugins/mcreator-localization/help/zh_TW/particle/speed_factor.md index 363defe2e93..f2433491417 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/speed_factor.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/speed_factor.md @@ -1 +1 @@ -該參數控製在生成粒子時的外部速度參數。設定為0時,如果粒子的重力大於0,粒子不會移動,只會下落。 \ No newline at end of file +該引數控製在生成粒子時的外部速度引數。設定為0時,如果粒子的重力大於0,粒子不會移動,只會下落。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/texture.md b/plugins/mcreator-localization/help/zh_TW/particle/texture.md index 30b15d46109..e9e9d43f6ef 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/texture.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/texture.md @@ -1,5 +1,5 @@ -如果材質是平鋪材質(垂直條中的多個材質), 材質將從垂直條中隨機選擇一個材質。 +如果紋理是平鋪紋理(垂直條中的多個紋理), 紋理將從垂直條中隨機選擇一個紋理。 -當動態材質參數啟用時,粒子將按照材質貼圖的順序動態化。 +當動態紋理引數啟用時,粒子將按照紋理貼圖的順序動態化。 -重要提示:如果材質名稱與元素的註冊表名稱不同,則會生成該材質的副本。 \ No newline at end of file +重要提示:如果紋理名稱與元素的註冊表名稱不同,則會生成該紋理的副本。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/particle/width.md b/plugins/mcreator-localization/help/zh_TW/particle/width.md index f8f8f2cd85b..c363d5c9b0f 100644 --- a/plugins/mcreator-localization/help/zh_TW/particle/width.md +++ b/plugins/mcreator-localization/help/zh_TW/particle/width.md @@ -1 +1 @@ -該參數控製粒子的寬度(以格為單位)。 \ No newline at end of file +該引數控製粒子的寬度(以格為單位)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/plant/color_on_map.md b/plugins/mcreator-localization/help/zh_TW/plant/color_on_map.md index 7f41e608b0f..fba08ca47d9 100644 --- a/plugins/mcreator-localization/help/zh_TW/plant/color_on_map.md +++ b/plugins/mcreator-localization/help/zh_TW/plant/color_on_map.md @@ -1,3 +1,3 @@ -此參數控製你的植物在地圖上顯示的顏色。 +此引數控製你的植物在地圖上顯示的顏色。 如果設定為預設值,顏色將是和樹葉的顏色一致。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/plant/gen_chunk_count.md b/plugins/mcreator-localization/help/zh_TW/plant/gen_chunk_count.md index fb9270e36d8..4021dcab934 100644 --- a/plugins/mcreator-localization/help/zh_TW/plant/gen_chunk_count.md +++ b/plugins/mcreator-localization/help/zh_TW/plant/gen_chunk_count.md @@ -1,4 +1,4 @@ -此參數控製每個區塊的植物將生成多少次。 +此引數控製每個區塊的植物將生成多少次。 植物不是單獨生長的,而是成片生長的。 diff --git a/plugins/mcreator-localization/help/zh_TW/plant/generation_type.md b/plugins/mcreator-localization/help/zh_TW/plant/generation_type.md index 19012c13ef7..bb974fb85e1 100644 --- a/plugins/mcreator-localization/help/zh_TW/plant/generation_type.md +++ b/plugins/mcreator-localization/help/zh_TW/plant/generation_type.md @@ -1,3 +1,3 @@ -此參數控制你植物生成的頻率。如果設為 **Grass**,植物將更頻繁地生成。 +此引數控制你植物生成的頻率。如果設為 **Grass**,植物將更頻繁地生成。 注意:這將影響靜態植物和大型植物 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/plant/patch_size.md b/plugins/mcreator-localization/help/zh_TW/plant/patch_size.md index 835e15fe0f3..dcaa9d66959 100644 --- a/plugins/mcreator-localization/help/zh_TW/plant/patch_size.md +++ b/plugins/mcreator-localization/help/zh_TW/plant/patch_size.md @@ -1 +1 @@ -此參數決定了在生態域內的一小塊區域中最多可以生成多少植物。數值越高,意味著生態域內的一小塊區域上的植物越多。 \ No newline at end of file +此引數決定了在生態域內的一小塊區域中最多可以生成多少植物。數值越高,意味著生態域內的一小塊區域上的植物越多。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/plant/placing_condition.md b/plugins/mcreator-localization/help/zh_TW/plant/placing_condition.md index 635d48a25c0..6fc385e26c9 100644 --- a/plugins/mcreator-localization/help/zh_TW/plant/placing_condition.md +++ b/plugins/mcreator-localization/help/zh_TW/plant/placing_condition.md @@ -1,3 +1,3 @@ 要為植物的放置添加更多條件,前提是它必須在方塊上, 在此處添加帶有返回值的函式。 -註意:覆蓋植物類型放置條件並使用此附加條件擴展「可放置」的方塊清單中。 如果「可用」方塊清單為空,則此函式用作主要放置/生長條件。 \ No newline at end of file +註意:覆蓋植物類型放置條件並使用此附加條件擴展「可放置」的方塊清單中。 如果可用方塊清單為空,則此函式用作主要放置/生長條件。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/plant/suspicious_stew_duration.md b/plugins/mcreator-localization/help/zh_TW/plant/suspicious_stew_duration.md index d1f0a790715..2b026efb34d 100644 --- a/plugins/mcreator-localization/help/zh_TW/plant/suspicious_stew_duration.md +++ b/plugins/mcreator-localization/help/zh_TW/plant/suspicious_stew_duration.md @@ -1 +1 @@ -此參數決定用該植物製作的可疑的燉湯的藥水效果的持續時間。 \ No newline at end of file +此引數決定用該植物製作的可疑的燉湯的藥水效果的持續時間。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/plant/suspicious_stew_effect.md b/plugins/mcreator-localization/help/zh_TW/plant/suspicious_stew_effect.md index af79fe3b3aa..15161dade6b 100644 --- a/plugins/mcreator-localization/help/zh_TW/plant/suspicious_stew_effect.md +++ b/plugins/mcreator-localization/help/zh_TW/plant/suspicious_stew_effect.md @@ -1,3 +1,3 @@ -這個參數決定了用這種植物製作的可疑的燉湯的藥水效果。 +這個引數決定了用這種植物製作的可疑的燉湯的藥水效果。 -註意:你必須將植物添加到「minecraft:small_flowers」標籤中才能製作可疑的燉湯。 \ No newline at end of file +註意:你必須將植物添加到 minecraft:small_flowers 標籤中才能製作可疑的燉湯。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/plant/type.md b/plugins/mcreator-localization/help/zh_TW/plant/type.md index 577c62e857c..c98d35bffc0 100644 --- a/plugins/mcreator-localization/help/zh_TW/plant/type.md +++ b/plugins/mcreator-localization/help/zh_TW/plant/type.md @@ -1,3 +1,3 @@ -植物類型決定了玩家可以將植物放置在何處以及在世界生成期間。 請記住,靜態植物總是可以留在粗泥、泥土、灰壤、草地和耕地上, 而可生長的植物總是能自己生長。 +植物類型決定了玩家可以將植物放置在何處以及在世界生成期間。 注意:靜態植物總是可以留在粗泥、泥土、灰壤、草地和耕地上, 而可生長的植物總是能自己生長。 你可以在此找到完整的植物類型清單。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potion/ambient.md b/plugins/mcreator-localization/help/zh_TW/potion/ambient.md index fbeda518de2..ee6730faf9b 100644 --- a/plugins/mcreator-localization/help/zh_TW/potion/ambient.md +++ b/plugins/mcreator-localization/help/zh_TW/potion/ambient.md @@ -1 +1 @@ -此參數定義是否將效果應用為環境效果(即烽火台賦予的效果)。 \ No newline at end of file +此引數定義是否將效果應用為環境效果(即烽火台賦予的效果)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potion/amplifier.md b/plugins/mcreator-localization/help/zh_TW/potion/amplifier.md index dfce7abb3b3..519845c9749 100644 --- a/plugins/mcreator-localization/help/zh_TW/potion/amplifier.md +++ b/plugins/mcreator-localization/help/zh_TW/potion/amplifier.md @@ -1 +1 @@ -此參數定義此藥水效果的等級。 \ No newline at end of file +此引數定義此藥水效果的等級。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potion/arrow_name.md b/plugins/mcreator-localization/help/zh_TW/potion/arrow_name.md index 505305ec1ed..89950fc1c3f 100644 --- a/plugins/mcreator-localization/help/zh_TW/potion/arrow_name.md +++ b/plugins/mcreator-localization/help/zh_TW/potion/arrow_name.md @@ -1 +1 @@ -此參數控製藥箭的名稱。 \ No newline at end of file +此引數控製藥箭的名稱。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potion/duration.md b/plugins/mcreator-localization/help/zh_TW/potion/duration.md index 0a9887946a6..2b6f82413a3 100644 --- a/plugins/mcreator-localization/help/zh_TW/potion/duration.md +++ b/plugins/mcreator-localization/help/zh_TW/potion/duration.md @@ -1 +1 @@ -此參數定義此藥水效果持續時間。 \ No newline at end of file +此引數定義此藥水效果持續時間。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potion/lingering_name.md b/plugins/mcreator-localization/help/zh_TW/potion/lingering_name.md index 88e14d733f6..d645c5d9f8e 100644 --- a/plugins/mcreator-localization/help/zh_TW/potion/lingering_name.md +++ b/plugins/mcreator-localization/help/zh_TW/potion/lingering_name.md @@ -1 +1 @@ -此參數控製滯留藥水瓶的名稱。 \ No newline at end of file +此引數控製滯留藥水瓶的名稱。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potion/potion_name.md b/plugins/mcreator-localization/help/zh_TW/potion/potion_name.md index b470a2f2b89..3603ad8186c 100644 --- a/plugins/mcreator-localization/help/zh_TW/potion/potion_name.md +++ b/plugins/mcreator-localization/help/zh_TW/potion/potion_name.md @@ -1 +1 @@ -此參數控製普通藥水瓶的名稱。 \ No newline at end of file +此引數控製普通藥水瓶的名稱。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potion/show_particles.md b/plugins/mcreator-localization/help/zh_TW/potion/show_particles.md index e368b94b6a9..1f36a47f13f 100644 --- a/plugins/mcreator-localization/help/zh_TW/potion/show_particles.md +++ b/plugins/mcreator-localization/help/zh_TW/potion/show_particles.md @@ -1 +1 @@ -此參數定義粒子是否出現在玩家附近。 \ No newline at end of file +此引數定義粒子是否出現在玩家附近。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potion/splash_name.md b/plugins/mcreator-localization/help/zh_TW/potion/splash_name.md index 6401cc4b0bf..86fb16dd397 100644 --- a/plugins/mcreator-localization/help/zh_TW/potion/splash_name.md +++ b/plugins/mcreator-localization/help/zh_TW/potion/splash_name.md @@ -1 +1 @@ -此參數控製飛濺藥水瓶的名稱。 \ No newline at end of file +此引數控製飛濺藥水瓶的名稱。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potioneffect/effect_display_name.md b/plugins/mcreator-localization/help/zh_TW/potioneffect/effect_display_name.md index 934678026aa..7f8c1083466 100644 --- a/plugins/mcreator-localization/help/zh_TW/potioneffect/effect_display_name.md +++ b/plugins/mcreator-localization/help/zh_TW/potioneffect/effect_display_name.md @@ -1 +1 @@ -此參數控制效果的名稱(在玩家的物品欄中顯示的名稱)。 \ No newline at end of file +此引數控制效果的名稱(在玩家的物品欄中顯示的名稱)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potioneffect/icon.md b/plugins/mcreator-localization/help/zh_TW/potioneffect/icon.md index d407efdb644..7953f460708 100644 --- a/plugins/mcreator-localization/help/zh_TW/potioneffect/icon.md +++ b/plugins/mcreator-localization/help/zh_TW/potioneffect/icon.md @@ -1,3 +1,3 @@ -此參數控製藥水啟用時玩家物品欄右側中顯示的圖示。 +此引數控製藥水啟用時玩家物品欄右側中顯示的圖示。 -重要提示:如果材質名稱與元素的註冊表名稱不同,則會生成該材質的副本。 \ No newline at end of file +重要提示:如果紋理名稱與元素的註冊表名稱不同,則會生成該紋理的副本。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/potioneffect/instant.md b/plugins/mcreator-localization/help/zh_TW/potioneffect/instant.md index 50a2f2daee8..327a24bcb23 100644 --- a/plugins/mcreator-localization/help/zh_TW/potioneffect/instant.md +++ b/plugins/mcreator-localization/help/zh_TW/potioneffect/instant.md @@ -1 +1 @@ -如果你的效果應該像「立即傷害」一樣一次性,請勾選此項。 \ No newline at end of file +如果你的效果應該像立即傷害一樣一次性,請勾選此項。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/projectile/action_sound.md b/plugins/mcreator-localization/help/zh_TW/projectile/action_sound.md index 292a6200ef9..2209c1292da 100644 --- a/plugins/mcreator-localization/help/zh_TW/projectile/action_sound.md +++ b/plugins/mcreator-localization/help/zh_TW/projectile/action_sound.md @@ -1 +1 @@ -此參數控制投射物時被發射時播放的聲音。 \ No newline at end of file +此引數控制投射物時被發射時播放的聲音。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/projectile/ignite_fire.md b/plugins/mcreator-localization/help/zh_TW/projectile/ignite_fire.md index d91b1f63f10..27d221063aa 100644 --- a/plugins/mcreator-localization/help/zh_TW/projectile/ignite_fire.md +++ b/plugins/mcreator-localization/help/zh_TW/projectile/ignite_fire.md @@ -1,3 +1,3 @@ -如果您要讓投射物像熔岩一樣擊中方塊時點燃,請勾選此項。 +如果你要讓投射物像熔岩一樣擊中方塊時點燃,請勾選此項。 -注意:這不會讓生物著火 \ No newline at end of file +注意:這不會讓生物著火 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/projectile/item_texture.md b/plugins/mcreator-localization/help/zh_TW/projectile/item_texture.md index d6fc5dbf8b5..d3584263a66 100644 --- a/plugins/mcreator-localization/help/zh_TW/projectile/item_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/projectile/item_texture.md @@ -1,3 +1,3 @@ -物品材質代表這個物品呈現的樣貌。它將與這選擇的物品有著相同材質。 +物品紋理代表這個物品呈現的樣貌。它將與這選擇的物品有著相同紋理。 -如果要自訂物品形狀,請使用模型參數。 \ No newline at end of file +如果要自訂物品形狀,請使用模型引數。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/projectile/model.md b/plugins/mcreator-localization/help/zh_TW/projectile/model.md index eefa2582180..67270327fe1 100644 --- a/plugins/mcreator-localization/help/zh_TW/projectile/model.md +++ b/plugins/mcreator-localization/help/zh_TW/projectile/model.md @@ -1,3 +1,3 @@ -你在這定義的投射物模型將是您的遠程物品發射出去的實體模型。 +你在這定義的投射物模型將是你的遠程物品發射出去的實體模型。 -使用時此參數將覆蓋材質參數項。 \ No newline at end of file +使用時此引數將覆蓋紋理引數項。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/projectile/model_texture.md b/plugins/mcreator-localization/help/zh_TW/projectile/model_texture.md index da90cc22389..1ec75a520dc 100644 --- a/plugins/mcreator-localization/help/zh_TW/projectile/model_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/projectile/model_texture.md @@ -1 +1 @@ -若使用自訂模型,這將是投射物使用的材質 \ No newline at end of file +若使用自訂模型,這將是投射物使用的紋理 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/projectile/power.md b/plugins/mcreator-localization/help/zh_TW/projectile/power.md index 7168639d874..df051e3a116 100644 --- a/plugins/mcreator-localization/help/zh_TW/projectile/power.md +++ b/plugins/mcreator-localization/help/zh_TW/projectile/power.md @@ -1 +1 @@ -此參數控制投射物的速度 (動能)。 \ No newline at end of file +此引數控制投射物的速度 (動能)。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/projectile/when_hits_player.md b/plugins/mcreator-localization/help/zh_TW/projectile/when_hits_player.md index e1f45c196f9..24c0d3ed924 100644 --- a/plugins/mcreator-localization/help/zh_TW/projectile/when_hits_player.md +++ b/plugins/mcreator-localization/help/zh_TW/projectile/when_hits_player.md @@ -1,3 +1,3 @@ 當投射物擊中玩家時,選定的函式將被執行。 -注意:函式可能會在投射物擊中投射者時觸發 \ No newline at end of file +注意:函式可能會在投射物擊中投射者時觸發 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/recipe/cooking_time.md b/plugins/mcreator-localization/help/zh_TW/recipe/cooking_time.md index 567fc82fc22..81207795cce 100644 --- a/plugins/mcreator-localization/help/zh_TW/recipe/cooking_time.md +++ b/plugins/mcreator-localization/help/zh_TW/recipe/cooking_time.md @@ -1,3 +1,3 @@ -烹飪類型的配方使用此參數來確定物品需要烹飪多久。 +烹飪類型的配方使用此引數來確定物品需要烹飪多久。 預設單位是刻,所以1秒的烹飪時間需要設為20刻。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/recipe/group_name.md b/plugins/mcreator-localization/help/zh_TW/recipe/group_name.md index 32d83f2537c..27c67bf1958 100644 --- a/plugins/mcreator-localization/help/zh_TW/recipe/group_name.md +++ b/plugins/mcreator-localization/help/zh_TW/recipe/group_name.md @@ -1 +1 @@ -此參數定義配方書中的組群,配方將在其中顯示。 \ No newline at end of file +此引數定義配方書中的組群,配方將在其中顯示。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/recipe/namespace.md b/plugins/mcreator-localization/help/zh_TW/recipe/namespace.md index bec6c50de08..0b9968d52c2 100644 --- a/plugins/mcreator-localization/help/zh_TW/recipe/namespace.md +++ b/plugins/mcreator-localization/help/zh_TW/recipe/namespace.md @@ -1,2 +1,2 @@ -* 使用「Mod」命名空間為你的模組/數據包創建一個新的配方。 -* 使用「Minecraft」覆蓋原版配方。 \ No newline at end of file +* 使用 Mod 命名空間為你的模組/資料包創建一個新的配方。 +* 使用 Minecraft 覆蓋原版配方。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/recipe/shapeless.md b/plugins/mcreator-localization/help/zh_TW/recipe/shapeless.md index 4dc0ae4607a..c5a19ffb7d8 100644 --- a/plugins/mcreator-localization/help/zh_TW/recipe/shapeless.md +++ b/plugins/mcreator-localization/help/zh_TW/recipe/shapeless.md @@ -1,3 +1,3 @@ -此參數控製合成配方是否需要有序擺放。 +此引數控製合成配方是否需要有序擺放。 如果勾選此項,則可以無序合成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/recipe/type.md b/plugins/mcreator-localization/help/zh_TW/recipe/type.md index 6e2a4509310..79f9401e87c 100644 --- a/plugins/mcreator-localization/help/zh_TW/recipe/type.md +++ b/plugins/mcreator-localization/help/zh_TW/recipe/type.md @@ -1,4 +1,4 @@ -這個參數控製你的配方在哪個合成系統中可用。 +這個引數控製你的配方在哪個合成系統中可用。 * 合成是工作台內的配方 * 熔煉是熔爐內的配方 diff --git a/plugins/mcreator-localization/help/zh_TW/recipe/xp_reward.md b/plugins/mcreator-localization/help/zh_TW/recipe/xp_reward.md index c0fc644e4a4..c38f8585cff 100644 --- a/plugins/mcreator-localization/help/zh_TW/recipe/xp_reward.md +++ b/plugins/mcreator-localization/help/zh_TW/recipe/xp_reward.md @@ -1,3 +1,3 @@ -此參數控製玩家在完成配方後將取得多少經驗值。 +此引數控製玩家在完成配方後將取得多少經驗值。 -此參數僅用於烹飪配方。 \ No newline at end of file +此引數僅用於烹飪配方。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/structure/ground_detection.md b/plugins/mcreator-localization/help/zh_TW/structure/ground_detection.md index 7c244cca56a..29c0d58be29 100644 --- a/plugins/mcreator-localization/help/zh_TW/structure/ground_detection.md +++ b/plugins/mcreator-localization/help/zh_TW/structure/ground_detection.md @@ -1,4 +1,4 @@ -該參數控制如何檢測結構的地面。 +該引數控制如何檢測結構的地面。 例如: 如果我們為一個基於水的生态域製作一個結構,**第一個可阻塞運動的方塊**將在水下生成結構,因為水不被認為是可阻塞運動的方塊,因為實體可以穿過它。 diff --git a/plugins/mcreator-localization/help/zh_TW/structure/projection.md b/plugins/mcreator-localization/help/zh_TW/structure/projection.md index ae97ed9c962..6bf9ce7b2dc 100644 --- a/plugins/mcreator-localization/help/zh_TW/structure/projection.md +++ b/plugins/mcreator-localization/help/zh_TW/structure/projection.md @@ -1,5 +1,5 @@ -此參數控制結構適應地形的方式。 +此引數控制結構適應地形的方式。 -如果您希望結構與地形匹配,請使用 terrain_matching,就像村莊道路一樣。 這將改變結構內某些部分的高度。 +如果你希望結構與地形匹配,請使用 terrain_matching,就像村莊道路一樣。 這將改變結構內某些部分的高度。 其它結構仍造常生成。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/structure/separation_spacing.md b/plugins/mcreator-localization/help/zh_TW/structure/separation_spacing.md index 1555e6bb40c..ae724e2f73b 100644 --- a/plugins/mcreator-localization/help/zh_TW/structure/separation_spacing.md +++ b/plugins/mcreator-localization/help/zh_TW/structure/separation_spacing.md @@ -1,4 +1,4 @@ -結構在區塊中生成。這兩個參數控制區塊內結構生成: +結構在區塊中生成。這兩個引數控制區塊內結構生成: * **最小距離** - 區塊內兩結構的最小距離。需要比兩個結構之間的平均距離小。 * **平均距離** - 這個集合中的兩個結構的平均距離。 diff --git a/plugins/mcreator-localization/help/zh_TW/structure/terrain_adaptation.md b/plugins/mcreator-localization/help/zh_TW/structure/terrain_adaptation.md index e4140cdb98b..3b37dc06211 100644 --- a/plugins/mcreator-localization/help/zh_TW/structure/terrain_adaptation.md +++ b/plugins/mcreator-localization/help/zh_TW/structure/terrain_adaptation.md @@ -1,4 +1,4 @@ -此參數控制著地形適應結構的方式。 +此引數控制著地形適應結構的方式。 * **none** - 對地形無影響。 * **beard_thin** - 在結構下添加地形並移除結構內部,村莊使用這種適應方式。 diff --git a/plugins/mcreator-localization/help/zh_TW/tag/namespace.md b/plugins/mcreator-localization/help/zh_TW/tag/namespace.md index a7fcf40a0ed..f31382c2368 100644 --- a/plugins/mcreator-localization/help/zh_TW/tag/namespace.md +++ b/plugins/mcreator-localization/help/zh_TW/tag/namespace.md @@ -1,5 +1,6 @@ -這個參數定義了標簽的功能。 +這個引數定義了標簽的功能。 * **forge:** 是礦物詞典的替代品。 如果你提供模組命名空間,它們可以用來讓其它模組作者使用你的模組註冊項來相容他們的模組。 +* **c**:Minecraft Fabric 模組(常用標籤命名方案)的命名空間。 * **minecraft:**用於添加自訂方塊或物品到原版標簽組。 例如,添加你的模組內的原木到 Minecraft 的原木組(通過設定名稱為 logs 和命名空間為 Minecraft)。 * **mod:**用於對模組中的模組元素進行分組,以供內部使用。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/tag/type.md b/plugins/mcreator-localization/help/zh_TW/tag/type.md index 49aa22c98ec..2695187f3f8 100644 --- a/plugins/mcreator-localization/help/zh_TW/tag/type.md +++ b/plugins/mcreator-localization/help/zh_TW/tag/type.md @@ -1,4 +1,5 @@ * **Items:**使用它可以將多個物品組合在一起,用於配方、函式等。 物品標簽於 1.13+ 取代了舊的礦物詞典系統 * **Blocks:**只有當你的目標是一個方塊而不是它的物品形式時,才使用 block 類型(_these 標簽不能在 recipes 中使用_) * **Entities:**使用此標籤類型將多個實體分為一類以達到同樣目的 -* **Functions:**這種標記類型用於將函數標記到組中。 其中一組被稱為「tick」,來自「minecraft」命名空間。 標記在「tick」命名空間下的函數將在每個遊戲刻下執行。 \ No newline at end of file +* **Functions:**此標籤類型用於將函數標記到組中。 其中一組被稱為 tick ,來自 minecraft 命名空間。 標記在 tick 命名空間下的函數將在每遊戲刻下執行。 +* **Damage types:** 此標籤類型將與傷害類型一起使用 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/tool/attack_speed.md b/plugins/mcreator-localization/help/zh_TW/tool/attack_speed.md index bcb62deeb1d..ba1c4d471d2 100644 --- a/plugins/mcreator-localization/help/zh_TW/tool/attack_speed.md +++ b/plugins/mcreator-localization/help/zh_TW/tool/attack_speed.md @@ -1,4 +1,4 @@ -此參數控製你的工具的使用速度。 +此引數控製你的工具的使用速度。 此屬性控製冷卻時間的長度,所用時間為T = 1 /攻擊速度* 20刻。 diff --git a/plugins/mcreator-localization/help/zh_TW/tool/blocks_affected.md b/plugins/mcreator-localization/help/zh_TW/tool/blocks_affected.md index e599b327ca7..797655f77e9 100644 --- a/plugins/mcreator-localization/help/zh_TW/tool/blocks_affected.md +++ b/plugins/mcreator-localization/help/zh_TW/tool/blocks_affected.md @@ -1,3 +1,3 @@ 這個清單定義了可以在哪些方塊上使用該工具。 -該參數僅用於特殊工具類型。 \ No newline at end of file +該引數僅用於特殊工具類型。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/tool/efficiency.md b/plugins/mcreator-localization/help/zh_TW/tool/efficiency.md index b8a5c8d3949..8640ab20276 100644 --- a/plugins/mcreator-localization/help/zh_TW/tool/efficiency.md +++ b/plugins/mcreator-localization/help/zh_TW/tool/efficiency.md @@ -1,4 +1,4 @@ -此參數定義了工具挖掘的速度。 +此引數定義了工具挖掘的速度。 例如石質工具的效率比鑽石工具低。 diff --git a/plugins/mcreator-localization/help/zh_TW/tool/type.md b/plugins/mcreator-localization/help/zh_TW/tool/type.md index f92cc610d9d..4576c6cd02e 100644 --- a/plugins/mcreator-localization/help/zh_TW/tool/type.md +++ b/plugins/mcreator-localization/help/zh_TW/tool/type.md @@ -1,3 +1,3 @@ 此工具的類型。 -部分工具類型不使用下面的一些參數。 \ No newline at end of file +部分工具類型不使用下面的一些引數。 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/villagerprofession/hat.md b/plugins/mcreator-localization/help/zh_TW/villagerprofession/hat.md index 300db671c51..6b01d824ded 100644 --- a/plugins/mcreator-localization/help/zh_TW/villagerprofession/hat.md +++ b/plugins/mcreator-localization/help/zh_TW/villagerprofession/hat.md @@ -1,9 +1,9 @@ -此參數決定這個村民在擁有這一職業後是否還會戴上由他們的類型定義的帽子: +此引數決定這個村民在擁有這一職業後是否還會戴上由他們的類型定義的帽子: * **None:** 無論如何村民都不會戴帽子 * **Partial:** 帽子不會完全覆蓋村民的頭部 * **Full:** 帽子會完全覆蓋村民的頭部 -下表是TH相關的帽子(其中TH是類型材質決定的帽子,PH是職業材質決定的帽子): +下表是TH相關的帽子(其中TH是類型紋理決定的帽子,PH是職業紋理決定的帽子): | TH 是否顯示 | TH = None | TH = Partial | TH = Full | | ------------ |:---------:|:------------:|:---------:| diff --git a/plugins/mcreator-localization/help/zh_TW/villagerprofession/profession_texture.md b/plugins/mcreator-localization/help/zh_TW/villagerprofession/profession_texture.md index 3962cb84124..71a55228bef 100644 --- a/plugins/mcreator-localization/help/zh_TW/villagerprofession/profession_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/villagerprofession/profession_texture.md @@ -1 +1 @@ -擁有這個職業的普通村民所呈現的材質 \ No newline at end of file +擁有這個職業的普通村民所呈現的紋理 \ No newline at end of file diff --git a/plugins/mcreator-localization/help/zh_TW/villagerprofession/zombified_profession_texture.md b/plugins/mcreator-localization/help/zh_TW/villagerprofession/zombified_profession_texture.md index 6807430ce9f..06bc415cd8f 100644 --- a/plugins/mcreator-localization/help/zh_TW/villagerprofession/zombified_profession_texture.md +++ b/plugins/mcreator-localization/help/zh_TW/villagerprofession/zombified_profession_texture.md @@ -1 +1 @@ -擁有這個職業的僵屍村民所呈現的材質 \ No newline at end of file +擁有這個職業的僵屍村民所呈現的紋理 \ No newline at end of file diff --git a/plugins/mcreator-localization/lang/texts.properties b/plugins/mcreator-localization/lang/texts.properties index 75dbf32fa2a..b5ad57f524c 100644 --- a/plugins/mcreator-localization/lang/texts.properties +++ b/plugins/mcreator-localization/lang/texts.properties @@ -89,10 +89,10 @@ dialog.animation_maker.settings=Animation settings dialog.animation_maker.next_frame=Next frame dialog.animation_maker.previous_frame=Previous frame dialog.animation_maker.animation_timeline=Animation timeline -dialog.animation_maker.add_frames=Add frame(s) ... -dialog.animation_maker.add_frames_from_template=Add frames from template ... -dialog.animation_maker.add_frames_from_strip=Add frames from animation strip ... -dialog.animation_maker.add_frames_from_gif=Add frames from GIF ... +dialog.animation_maker.add_frames=Add frames... +dialog.animation_maker.add_frames_from_template=Add frames from template... +dialog.animation_maker.add_frames_from_strip=Add frames from animation strip... +dialog.animation_maker.add_frames_from_gif=Add frames from GIF... dialog.animation_maker.gif_importing=GIF import dialog.animation_maker.gif_reading=Reading GIF dialog.animation_maker.gif_processing=Processing GIF @@ -129,9 +129,18 @@ dialog.cache_cleanup.title=Gradle caches cleanup dialog.cache_cleanup.progress.stopping_daemons=Stopping running Gradle daemons dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Clearing the Gradle caches folder dialog.cache_cleanup.progress.build_task=Running Gradle build task -dialog.code_error.compilation_desc=One or more of your main mod files did not compile properly.

This is usually caused by inconsistencies in the mod code during builds.
MCreator can solve this issue for you by regenerating entire mod''s code.

If you have locked mod elements or mod base files, they can cause this error too.

Click Regenerate code button to proceed with this action.
+dialog.code_error.compilation_desc=One or more of your main mod files did not compile properly.

\ + This is usually caused by inconsistencies in the mod code during builds.
\ + MCreator may be able to solve this for you by regenerating entire mod''s code.

\ + If you have locked mod elements or mod base files, they can cause this error too.

\ + Click Regenerate code button to proceed with this action.
dialog.code_error.compilation_title=Main mod file compilation errors -dialog.code_error.compilation_list=Your workspace contains mod elements that don''t compile properly.

This was most likely caused by the last mod element you added or edited. Try altering the settings of mod elements
that cause build errors (such elements are listed below) to try to fix this problem.

If you can''t resolve this problem, export the workspace to shareable ZIP file from the File menu and send it to us via
our Issue tracker on GitHub so we can try to help you.

List of mod elements that cause compilation errors (trimmed to up to 10 elements):

+dialog.code_error.compilation_list=Your workspace contains mod elements that don''t compile properly.

\ + This was most likely caused by the last mod element you added or edited. Try altering the settings of mod elements
\ + that cause build errors (such elements are listed below) to try to fix this problem.

\ + If you can''t resolve this problem, export the workspace to shareable ZIP file from the File menu and send it to us via
\ + our Issue tracker on GitHub so we can try to help you.

\ + List of mod elements that cause compilation errors:

dialog.code_error.regenerate_code=Regenerate code dialog.code_error.ignore_error=Ignore error dialog.code_error.show_in_workspace=Show in workspace @@ -284,12 +293,14 @@ dialog.imageeditor_tool.use_canvas=Click on the canvas to use dialog.imageeditor.layer_panel_no_image=No image dialog.imageeditor.layer_panel_no_layers=No layers dialog.imageeditor.layer_panel_new_layer=New layer +dialog.imageeditor.layer_panel_new_layer.floating=New layer from floating dialog.imageeditor.layer_panel_move_up=Move up dialog.imageeditor.layer_panel_move_down=Move down dialog.imageeditor.layer_panel_rename_layer=Rename layer dialog.imageeditor.layer_panel_toggle_visibility=Toggle visibility dialog.imageeditor.layer_panel_delete_layer=Delete layer dialog.imageeditor.layer_panel_duplicate_layer=Duplicate layer +dialog.imageeditor.layer_panel_merge_layers_down=Merge the layer with the layer below dialog.imageeditor.layer_panel_confirm_layer_deletion_message=Are you sure you want to delete following layers:
dialog.imageeditor.layer_panel_confirm_layer_deletion_title=Delete layer dialog.imageeditor.layer_panel_enter_new_name=Enter new layer name: @@ -337,6 +348,8 @@ dialog.image_maker.tools.types.noise_description=A tool for adding noise to laye dialog.image_maker.tools.types.move=Move tool dialog.image_maker.tools.types.move_layer=Move layer dialog.image_maker.tools.types.move_description=A tool for moving active layers +dialog.image_maker.tools.types.select=Select tool +dialog.image_maker.tools.types.select_description=A tool for selecting areas dialog.image_maker.tools.types.pencil=Pencil dialog.image_maker.tools.types.pencil_description=A basic drawing tool dialog.image_maker.tools.types.resizecanvas=Resize canvas @@ -375,6 +388,7 @@ dialog.item_selector.enter_tag_name.blocks=Enter block tag name below (che dialog.item_selector.enter_tag_name.items=Enter item tag name below (check the list for templates):
dialog.item_selector.enter_tag_name.biomes=Enter biome tag name below (check the list for templates):
dialog.item_selector.enter_tag_name.entities=Enter entity tag name below (check the list for templates):
+dialog.item_selector.enter_tag_name.damage_types=Enter damage type tag name below (check the list for templates):
dialog.item_selector.error_invalid_tag_name_title=Invalid tag name dialog.item_selector.all=All dialog.item_selector.blocks=Blocks @@ -394,7 +408,8 @@ dialog.modelement_id.info_message_title=Mod element code is locked dialog.modelement_id.registry_name=Registry name: dialog.modelement_id.registry_name_info=Registry name (not all mod elements use it) dialog.modelement_id.registry_name_validator=Registry name -dialog.modelement_id.use_caution_warn=Use this tool with caution!

Changing registry names can break your existing world saves and cause
conflicts with other mod element from your mod! +dialog.modelement_id.use_caution_warn=Use this tool with extreme caution! Make sure to not use duplicate names!

\ +
Changing registry names can break your existing world saves and cause
conflicts with other mod element from your mod! dialog.modelement_id.id_and_registry_names="{0} - Registry name" dialog.modelement_id.invalid_registry_name=The registry name you entered is not valid!
The changes have not been saved. dialog.modelement_id.invalid_registry_name_title=Invalid registry name @@ -439,6 +454,24 @@ dialog.preferences.themes.list=
List of dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}:
{1} dialog.preferences.unknown_property_type={0}: unknown property type +dialog.search_usages.list=List of mod elements using selected {0}s: +dialog.search_usages.list.empty=No mod elements using any of the selected {0}s found. +dialog.search_usages.open_selected=Edit selected mod element +dialog.search_usages.title=Element usages +dialog.search_usages.deletion.confirm_msg=Are you sure that you want to delete the selected {0}s?

\ + Some of the selected {0}s are still used by the mod elements listed below.
\ + If you proceed with the deletion, the workspace might get broken and/or fail to build! +dialog.search_usages.deletion_safe.confirm_msg=Are you sure that you want to delete selected {0}s?

\ + There are no mod elements using any {0} from the selected list. However, they may still be used in custom code.
\ + If you proceed, these references will become invalid, which may lead to broken resources or game crashes. +dialog.search_usages.deletion.confirm=Delete anyway +dialog.search_usages.type.mod_element=mod element +dialog.search_usages.type.resource.texture=texture +dialog.search_usages.type.resource.model=model +dialog.search_usages.type.resource.sound=sound +dialog.search_usages.type.resource.structure=structure +dialog.search_usages.type.global_variable=global variable +dialog.search_usages.type.localization_key=localization key dialog.sounds.name=Sound name dialog.sounds.registry_name=Sound registry name:
If you rename the sound in use, existing references will break dialog.sounds.files=Sound files: @@ -473,7 +506,7 @@ dialog.textures_mapping.title_for_model=Texture mappings for model dialog.textures_mapping.add_new=Add new texture mapping dialog.textures_mapping.enter_name_message=Enter your texture mapping name.
This name is used to identify your set of textures when
selecting a texture mapping for your model. dialog.textures_mapping.enter_name_title=New texture mapping -dialog.textures_mapping.jump_to=Jump to ... +dialog.textures_mapping.jump_to=Jump to... dialog.textures_mapping.save=Save mappings dialog.textures_mapping.model_texture_part=Model texture part:
{0} dialog.textures_mapping.confirm_deletion_message=Are you sure that you want to delete this texture mapping?
You can get broken textures if the mapping is still in use! @@ -561,6 +594,7 @@ dialog.variables.variable_name=Variable name: dialog.variables.variable_type=Variable type: dialog.variables.variable_scope=Variable scope: dialog.variables.new_title=New variable +workspace.loading=Loading the workspace... workspace.elements.list.locked=Locked workspace.elements.folders.add_tooltip=Add new folder into the current folder workspace.elements.folders.up_tooltip=Move back to the parent folder @@ -571,6 +605,7 @@ workspace.elements.folders.add.error_letters=Folder name can only contain Englis workspace.elements.folders.add.error_exists=Folder with this name already exists. workspace.elements.folders.rename.title=Rename folder workspace.elements.folders.rename.message=Enter new folder name: +workspace.elements.list.special.item={0}
Type: {1} workspace.elements.list.folder=Folder workspace.elements.list.notlocked=Not locked workspace.elements.list.compiles=Compiles @@ -600,7 +635,7 @@ workspace.elements.list.filter_all=Show all workspace.elements.list.filter_locked=Locked elements workspace.elements.list.filter_witherrors=Elements with build errors workspace.elements.list.ascending=Ascending -workspace.category.mod_elements=Mod elements +workspace.category.mod_elements=Mod elements workspace.category.resources=Resources workspace.category.variables=Variables workspace.category.localization=Localization @@ -617,17 +652,20 @@ workspace.elements.list.edit.delete=Delete workspace.elements.list.edit.duplicate=Duplicate mod element... workspace.elements.list.edit.code=Open mod element in code editor workspace.elements.list.edit.lock=Lock/unlock mod element -workspace.elements.list.edit.id=Edit mod element IDs... +workspace.elements.list.edit.id=Edit registry names... +workspace.elements.list.edit.usages.tags=Selected elements list contains tag type mod elements.

\ + Tags with same registry names may also be defined by other mods and could be weakly referenced.
\ + Therefore usage search for these elements is not possible. +workspace.elements.list.edit.usages.tags.title=Tag usages workspace.elements.list.edit.add.folder=Add new folder... workspace.elements.list.edit.rename.folder=Rename selected folder... -workspace.elements.confirm_delete_message=Are you sure that you want to delete selected ({0}) elements?\ -

If you used selected mod elements''s data in other mod elements (as recipe, in event, as tab, ...) you\ -
have to delete elements that are dependent on this one too! Otherwise your will get build errors.\ -

Mod elements in deleted folder and sub-folders will be moved to the parent folder +workspace.elements.confirm_delete_msg_suffix=Mod elements in deleted folder and sub-folders will be moved to the parent folder. workspace.elements.delete.tooltip=Delete selected mod element workspace.elements.edit_code.tooltip=Edit code of selected mod element workspace.elements.lock_code_tooltip=Lock/unlock element''s code
When you lock the code, MCreator won''t change the code, so the mod type becomes
editable from the code view and the code is preserved even when switching workspaces.
Use this only if you intend to manually edit the code and are aware of the consequences
of locking the code of a mod element! -workspace.elements.edit_registry_names.tooltip=Edit mod element IDs and registry names +workspace.elements.edit_registry_names.not_possible_message=It is not possible to use this tool to edit registry names of this mod element type. +workspace.elements.edit_registry_names.not_possible_title=Can''t edit registry name +workspace.elements.edit_registry_names.tooltip=Edit registry names workspace.elements.empty.tip=Press %1 to add mod elements workspace.elements.lock_modelement_message=You are trying to lock/unlock the code of the mod element!

When the code is locked, MCreator won''t change the source code, but this means
that when updating MCreator, bug fixes and Minecraft version upgrades won''t be
applied to the elements that are locked.

The mod elements that are locked right now and were selected will be unlocked.
This means that any custom code for these mod element will be overwritten by MCreator.

Please read the wiki page on MCreator''s website about locking code before using this action. workspace.elements.lock_modelement_confirm=Lock/unlock mod element code? @@ -701,8 +739,8 @@ trigger.entity_travels_to_dimension=Entity travels to a dimension trigger.entity_uses_totem=Entity uses a totem trigger.explosion_occurs=An explosion occurs trigger.farmland_trampled=Farmland is trampled -trigger.gem_dropped=Gem dropped -trigger.gem_expired=Gem expires +trigger.gem_dropped=Item is dropped +trigger.gem_expired=Dropped item expires trigger.item_crafted=Item is crafted trigger.item_destroyed=Item is destroyed trigger.item_smelted=Item is smelted @@ -755,6 +793,7 @@ blockly.category.guimanagement=Slot & GUI procedures blockly.category.worldprocedures=World procedures blockly.category.worlddata=Data blockly.category.worldmanagement=Actions +blockly.category.scoreboard=Scoreboard blockly.category.basictasks=Basic tasks blockly.category.combattasks=Combat tasks blockly.category.movementtasks=Movement tasks @@ -892,11 +931,18 @@ blockly.block.entity_allow_flying=Allow %2 to fly if %1 otherwise don''t blockly.block.entity_armor_value=Armor value of %1 blockly.block.entity_canusecommand=Does %2 have command permission level %1 blockly.block.entity_check_creature_type=Is %1 creature type %2 +blockly.block.entity_check_main_hand=Is %1 %2-handed blockly.block.entity_checkgamemode=Is %1 in game mode %2 blockly.block.entity_clear_inventory=Clear inventory of %1 blockly.block.entity_clearpotions=Clear all potion effects of %1 blockly.block.entity_close_gui=Close any GUI open for %1 blockly.block.entity_create=%1 Static entity instance of type %2 (no spawning) +blockly.block.entity_data_logic_get=For custom entity %1 of type %2 get logic data parameter %3 value +blockly.block.entity_data_logic_set=For custom entity %1 of type %2 set logic data parameter %3 value to %4 +blockly.block.entity_data_integer_get=For custom entity %1 of type %2 get integer data parameter %3 value +blockly.block.entity_data_integer_set=For custom entity %1 of type %2 set integer data parameter %3 value to %4 +blockly.block.entity_data_string_get=For custom entity %1 of type %2 get string data parameter %3 value +blockly.block.entity_data_string_set=For custom entity %1 of type %2 set string data parameter %3 value to %4 blockly.block.entity_deal_custom_damage=Deal %1 custom damage to %2 localized as death.attack.%3(.player/.item) blockly.block.entity_despawn=Despawn %1 %2 blockly.block.entity_dimension_id=ID of dimension %1 is in @@ -911,10 +957,9 @@ blockly.block.entity_get_armor_slot_item=Get item from armor slot %1 of %2 blockly.block.entity_get_controlling_passenger=%2 Get passenger that is controlling %1 blockly.block.entity_get_first_passenger=%2 Get first passenger of %1 blockly.block.entity_get_fire_ticks=Get remaining ticks on fire of %1 -blockly.block.entity_get_fly_speed=Get fly speed of %1 blockly.block.entity_get_oxygen=Get oxygen of %1 blockly.block.entity_get_percent_frozen=Get frozen percentage of %1 -blockly.block.entity_get_root_vehicle=Get lowest entity that %1 is riding, or self if not riding anything +blockly.block.entity_get_root_vehicle=Get the lowest entity that %1 is riding, or self if not riding anything blockly.block.entity_get_saturation=Get food saturation level of %1 blockly.block.entity_get_scoreboard_score=Get %2 scoreboard score for %1 blockly.block.entity_get_shootpower=Get shoot power if %1 is a projectile @@ -923,8 +968,11 @@ blockly.block.entity_get_spawn_x=Get X spawn coordinate of %1 for its current wo blockly.block.entity_get_spawn_y=Get Y spawn coordinate of %1 for its current world %2 blockly.block.entity_get_spawn_z=Get Z spawn coordinate of %1 for its current world %2 blockly.block.entity_get_stepheight=Get step height of %1 +blockly.block.entity_get_use_item=Get item %1 is using +blockly.block.entity_get_use_item_ticks=Get number of ticks %1 has been using item for blockly.block.entity_get_uuid=Get UUID of %1 -blockly.block.entity_get_walk_speed=Get walk speed of %1 +blockly.block.entity_get_walk_speed=Get base walk speed parameter of %1 +blockly.block.entity_get_fly_speed=Get base fly speed parameter of %1 blockly.block.entity_getowner=%2 Get owner of %1 if tamed blockly.block.entity_getridingentity=%2 Get entity %1 is riding blockly.block.entity_gettargetentity=%2 Get entity %1 is targeting for attack @@ -1038,9 +1086,9 @@ blockly.block.entity_submerged_height=Get submerged height of %1 blockly.block.entity_swing_mainhand=Swing main hand of %1 blockly.block.entity_swing_offhand=Swing off hand of %1 blockly.block.entity_switch_dimension=Switch dimension of %1 to %2 -blockly.block.entity_vel_x=X velocity of %1 %2 -blockly.block.entity_vel_y=Y velocity of %1 %2 -blockly.block.entity_vel_z=Z velocity of %1 %2 +blockly.block.entity_vel_x=X delta movement of %1 %2 +blockly.block.entity_vel_y=Y delta movement of %1 %2 +blockly.block.entity_vel_z=Z delta movement of %1 %2 blockly.block.entity_xplevel=Get XP level of %1 blockly.block.entity_xp_until_next_level=Get amount of XP needed by %1 to gain a level blockly.block.execute_command=Execute command /%1 at x: %2 y: %3 z: %4 %5 @@ -1077,9 +1125,11 @@ blockly.block.item_cooldown_for=Cooldown %3 for %1 ticks for %2 blockly.block.item_damage=Deal %1 damage to %2 blockly.block.item_enchanted_with_xp=%1 enchanted with %2 XP levels, treasure enchantments: %3 blockly.block.item_fuel_power=Get fuel power of %1 +blockly.block.item_get_cooldown=Get remaining cooldown percentage of %2 for %1 blockly.block.item_get_damage=Get damage of %1 blockly.block.item_get_enhancement=Get level of enchantment %2 of %1 blockly.block.item_get_max_damage=Get max possible damage of %1 +blockly.block.item_is_cooldown=Is %2 on cooldown for %1 blockly.block.item_is_enchantable=Is %1 enchantable blockly.block.item_is_enchanted=Is %1 enchanted blockly.block.item_istype=Is %1 of item type %2 @@ -1123,7 +1173,7 @@ blockly.block.math_random_number_between=Random number between min: %1 and max: blockly.block.mcitem_to_block=Convert %2 %1 to %3 or AIR if conversion fails blockly.block.move_entity=Set location of %4 to x: %1 y: %2 z: %3 blockly.block.place_schematic=Place NBT structure file %6 %7 at x: %1 y: %2 z: %3 with rotation: %4 mirror: %5 %8 -blockly.block.play_sound=Play %6 at x: %1 y: %2 z: %3 level: %4 pitch: %5 category: %7 +blockly.block.play_sound=Play sound %6 at x: %1 y: %2 z: %3 level: %4 pitch: %5 category: %7 blockly.block.projectile_shoot_from_entity=Shoot %1 from entity: %2 with speed: %3 inaccuracy: %4 %5 blockly.block.projectile_shoot_from_pos=Shoot %1 from x: %2 y: %3 z: %4 with direction dx: %5 dy: %6 dz: %7 speed: %8 inaccuracy: %9 %10 blockly.block.projectiles_arrow=Arrow of type %1 with damage: %2 knockback: %3 piercing: %4 shooter: %5 fire: %6 particles: %7 pickup type: %8 @@ -1136,11 +1186,19 @@ blockly.block.set_time=Set time to %1 %2 blockly.block.spawn_entity=Spawn entity: %4 at x: %1 y: %2 z: %3 %5 blockly.block.spawn_entity_with_rotation=Spawn entity: %6 at x: %1 y: %2 z: %3 with yaw: %4 pitch: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Spawn entity: %9 at x: %1 y: %2 z: %3 with yaw: %4 pitch: %5 vx: %6 vy: %7 vz: %8 %10 -blockly.block.spawn_gem=Spawn item/gem %1 at x: %2 y: %3 z: %4 pickup delay: %5 despawn: %6 %7 +blockly.block.spawn_gem=Spawn dropped item %1 at x: %2 y: %3 z: %4 pickup delay: %5 despawn: %6 %7 blockly.block.spawn_particle=Spawn single particle at x: %1 y: %2 z: %3 with vx: %4 vy: %5 vz: %6 type: %7 blockly.block.spawn_particle_multi=Spawn %8 particles on server-side at x: %1 y: %2 z: %3 in area dx: %4 dy: %5 dz: %6 with speed %7 type: %9 %10 blockly.block.spawn_xporb=Spawn XP orb at x: %2 y: %3 z: %4 with xp amount of %1 %5 blockly.block.strike_lightning=Strike lightning at x: %1 y: %2 z: %3 effect only: %4 %5 +blockly.block.team_add_entity=Add entity %2 to team %1 +blockly.block.team_create_new=Create new team with name %1 +blockly.block.team_delete=Delete team with name %1 +blockly.block.team_get_entity_team=Get team of entity %1 +blockly.block.team_get_friendlyfire=Is friendly fire for team with name %1 enabled +blockly.block.team_remove_entity=Remove entity %2 from team %1 +blockly.block.team_set_friendlyfire=Set friendly fire for team with name %1 to %2 +blockly.block.team_set_friendlyfire.tooltip=Friendly fire only works with players blockly.block.wait=Wait %1 %2 ticks then on server-side %5 %3 do %4 blockly.block.world_data_heightat=Get %3 height at x: %1 z: %2 blockly.block.world_data_biomeat=Is biome at x: %1 y: %2 z: %3 type %4 @@ -1215,7 +1273,7 @@ blockly.block.restrict_sun=Restrict sun %1 blockly.block.swim=Swim randomly with speed factor %1 %2 blockly.block.swim_in_water=Float in water %1 blockly.block.try_and_find_water=Try and find water %1 -blockly.block.watch_closest_entity=Watch closest entity of type %2 in radius %1 %3 +blockly.block.watch_closest_entity=Watch the closest entity of type %2 in radius %1 %3 blockly.block.wander=Wander around (enables walking) with speed factor %1 %2 blockly.block.wander_avoid_water=Wander around and avoid water with speed factor %1 %2 blockly.block.biome_entered=If player enters biome %1 @@ -1415,6 +1473,7 @@ blockly.block.damagesource_get_entity=%2 Get entity that caused %1 blockly.block.damagesource_get_exhaustion=Get exhaustion value of %1 blockly.block.damagesource_is_cause_creative=Is %1 caused by a player in creative mode blockly.block.damagesource_is_indirect=Is %1 indirect +blockly.block.damagesource_is_tagged_in=Is type of %1 tagged in damage type tags as %2 blockly.block.damagesource_scales_with_difficulty=Does %1 scale with difficulty blockly.block.direction_from_deps=Trigger direction/face blockly.block.direction_unspecified=Any direction @@ -1481,7 +1540,7 @@ blockly.extension.feature_delta.rimSize=Rim size must be between 0 and 16 blockly.extension.feature_replace_sphere.radius=Radius must be between 0 and 12 blockly.extension.feature_block_column_simple.height=Height must be at least 0 blockly.extension.feature_tree_pine.foliage_height=Foliage height must be between 0 and 24 -blockly.extension.feature_tree_spruce.radius=Foliage radius must be between 0 and 24 +blockly.extension.feature_tree_spruce.radius=Foliage radius must be between 0 and 16 blockly.extension.feature_tree_spruce.trunk_height=Exposed trunk height must be between 0 and 24 action.workspace.export_mod=Export the mod for distribution... action.workspace.export_mod_deobf=Export deobfuscated mod... @@ -1508,6 +1567,12 @@ dialog.workspace.export_workspace.compressing=Compressing workspace dialog.workspace.export_workspace.title=Workspace export dialog.workspace.export_backup=Workspace backup action.workspace.regenerate_and_build=Regenerate code and build +tag.type.items=Items +tag.type.blocks=Blocks +tag.type.entities=Entities +tag.type.functions=Functions +tag.type.biomes=Biomes +tag.type.damage_types=Damage types modelement.unknown=Unknown modelement.achievement=Advancement modelement.armor=Armor @@ -1515,6 +1580,7 @@ modelement.biome=Biome modelement.block=Block modelement.code=Custom element modelement.command=Command +modelement.damagetype=Damage type modelement.dimension=Dimension modelement.enchantment=Enchantment modelement.gamerule=Game rule @@ -1552,6 +1618,7 @@ modelement.biome.description=Biome is a specific area with defined world generat modelement.block.description=Block is the basic unit in Minecraft. It is 3D object that can be placed in the world. modelement.code.description=Custom element is defined using custom code in code editor. modelement.command.description=Command is a set of text that triggers action when user types it into chat. +modelement.damagetype.description=Damage type determines how damage should be applied to entities. modelement.dimension.description=Dimension is a world that is generated, has own properties and can have a portal. modelement.enchantment.description=Enchantment is a modifier that adds special abilities to items when applied. modelement.gamerule.description=Game rule is a customizable parameter for a specific in-game world @@ -2160,6 +2227,15 @@ elementgui.command.type=Type: elementgui.command.permission_level=Execution permission level:
Minimal level for the command to run elementgui.command.warning.empty_string=Command can''t be empty string elementgui.command.arguments=Command parameters and actions builder +elementgui.damagetype.damage_properties=Damage properties +elementgui.damagetype.exhaustion=Exhaustion amount:
Default value is 0.1 +elementgui.damagetype.scaling=Does damage scale with difficulty? +elementgui.damagetype.effects=Damage sound effect: +elementgui.damagetype.death_messages=Death messages +elementgui.damagetype.normal_death_message=Normal death message: +elementgui.damagetype.item_death_message=Item death message:
Shown when player is killed by an entity holding a named item +elementgui.damagetype.player_death_message=Assisted death message:
Shown when player dies while escaping from an entity +elementgui.damagetype.error_empty_death_message=Death message cannot be empty elementgui.dimension.can_player_respawn=Can player respawn here elementgui.dimension.has_fog=Enable dense fog elementgui.dimension.is_dark=Disable ambient light source @@ -2180,7 +2256,7 @@ elementgui.dimension.biomes_in=Biomes in this dimension: elementgui.dimension.main_filler_block=Main filler block:
Normal, Nether, End elementgui.dimension.fluid_block=Fluid block:
Normal, Nether, End elementgui.dimension.sleep_result=Sleep attempt result: -elementgui.dimension.fog_air_color=Sky / fog color override:
Leave DEFAULT for default handling per Minecraft version +elementgui.dimension.fog_air_color=Sky / fog color override:
Leave DEFAULT for default handling elementgui.dimension.enable_dimension_portal=Enable dimension portal: elementgui.dimension.portal_frame_block=Portal frame block: elementgui.dimension.portal_particles=Portal block particles: @@ -2204,8 +2280,8 @@ elementgui.enchantment.curse=Is this enchantment curse? elementgui.enchantment.allowed_on_books=Is this enchantment allowed on books? elementgui.enchantment.can_generate_in_loot_tables=Can this enchantment generate in loot tables? elementgui.enchantment.can_villager_trade=Can this enchantment appear in villager trades? -elementgui.enchantment.compatible_enchantments=Can be combined with:
Leave empty to allow combining with any enchantment -elementgui.enchantment.can_apply_to=Can be applied to:
Leave empty to allow applying to all applicable items +elementgui.enchantment.compatible_enchantments=Can be combined with:
Leave empty (works in include and exclude mode) to allow combining with any enchantment +elementgui.enchantment.can_apply_to=Can be applied to:
Leave empty (works in include and exclude mode) to allow applying to all applicable items elementgui.enchantment.needs_name=Enchantment needs a name elementgui.gamerule.name=Machine name: elementgui.gamerule.display_name=Game rule name:
This name will be used for game rule settings screen @@ -2358,9 +2434,11 @@ elementgui.keybind.key_binding_category=Key binding category translation key: elementgui.keybind.key_procedure_triggers=Key binding procedure triggers elementgui.keybind.error_key_needs_name=Key binding needs a name elementgui.keybind.error_key_category_needs_name=Key binding category key name +elementgui.living_entity.visual_scale=Model visual scale: +elementgui.living_entity.bounding_box_scale=Bounding box scale: elementgui.living_entity.condition_solid_bounding_box=Is bounding box solid? elementgui.living_entity.disable_collisions=Disable collisions -elementgui.living_entity.has_ai=Enable AI
When using AI, make sure to have some AI tasks defined below +elementgui.living_entity.has_ai=Enable AI
Make sure to have some AI tasks defined below elementgui.living_entity.immune_fire=Fire elementgui.living_entity.immune_arrows=Arrows elementgui.living_entity.immune_fall_damage=Fall damage @@ -2382,9 +2460,9 @@ elementgui.living_entity.spawn_dungeons=Spawn in dungeons elementgui.living_entity.is_rideable=Rideable elementgui.living_entity.control_forward=Forward movement control elementgui.living_entity.control_strafe=Strafe movement control -elementgui.living_entity.is_breedable=Make this entity animal type, breed items:
Entity base and behaviour type will be ignored if checked +elementgui.living_entity.is_breedable=Make this entity animal type, breed items:
Entity base and behaviour type will be ignored elementgui.living_entity.is_tameable=Can tame -elementgui.living_entity.is_ranged=Make entity do ranged attacks with item, attack interval and radius:
\ +elementgui.living_entity.is_ranged=Enable ranged attacks with item, attack interval and radius:
\ Add at least one Act aggressively against AI task to define attack targets.
\ If \"Default item\" is selected, select projectile item or keep empty to use arrow elementgui.living_entity.event_struck_by_lightning=When it is struck by lightning @@ -2399,9 +2477,10 @@ elementgui.living_entity.event_initial_spawn=On initial entity spawn elementgui.living_entity.condition_natural_spawn=Natural entity spawning condition elementgui.living_entity.condition_is_model_transparent=Is entity model transparent? elementgui.living_entity.condition_is_shaking=Is entity model shaking? -elementgui.living_entity.behaviour=Behavioural characteristics (Mob is aggressive, Creature is passive): +elementgui.living_entity.behaviour=Behavioral characteristics (Mob is aggressive, Creature is passive): elementgui.living_entity.creature_type=Creature type (defines some special entity attributes): elementgui.living_entity.drop_health_xp_amount=Optional drop, health value, experience amount: +elementgui.living_entity.model_layers=Model layers list elementgui.living_entity.follow_range_tracking_range=Follow range, tracking range: elementgui.living_entity.attack_strenght_armor_value_knockback=Attack strength, armor protection, attack knockback, knockback resistance: elementgui.living_entity.movement_speed_step_height=Movement speed, step height: @@ -2410,11 +2489,16 @@ elementgui.living_entity.is_immune_to=Entity immune to: elementgui.living_entity.ridable=Check to make this entity rideable by player
You can optionally turn on living entity controls too elementgui.living_entity.water_mob=Check if this entity is water entity:
NOTE: You still need AI tasks to make mob use these properties elementgui.living_entity.flying_mob=Check if this entity is flying entity:
NOTE: You still need AI tasks to make mob use these properties +elementgui.living_entity.add_model_layer=Add a new model layer +elementgui.living_entity.layer_model=Model: +elementgui.living_entity.layer_texture=Texture: +elementgui.living_entity.layer_should_glow=Make texture glow +elementgui.living_entity.layer_display_condition=Display condition +elementgui.living_entity.layer_needs_texture=The model layer must have a texture elementgui.living_entity.name=Name of entity: elementgui.living_entity.entity_model=Entity model:
Supported: JAVA elementgui.living_entity.entity_model_import=Click this to import entity model texture elementgui.living_entity.texture=Texture of entity:
Texture needs to fit to the model (e.g. player skin texture is NOT biped model texture) -elementgui.living_entity.glow_texture=Glow texture of entity (optional):
Glow texture needs to fit to the model, image brightness determines glow elementgui.living_entity.bounding_box=Entity model bounding box:
Width/Depth, Height, Shadow Size, Mounted Entity Y Offset elementgui.living_entity.spawn_egg_options=Spawn egg options:
Enable, base color, dot color, creative tab elementgui.living_entity.mob_boss=Select if you want your entity to be boss with health bar: @@ -2437,14 +2521,24 @@ elementgui.living_entity.spawn_general_condition=Custom spawning condition
with it, but spawning type grouping and weighting will still be used.
elementgui.living_entity.bind_to_gui=Bind this entity to GUI:
Set to Empty to disable inventory (you want this in most cases)
elementgui.living_entity.inventory_size=Size of inventory (slot count):
Set this value to the biggest slot ID in the GUI + 1 +elementgui.living_entity.entity_data=Entity data accessors
Synced between client and server sides +elementgui.living_entity.entity_data_entries=Data entries +elementgui.living_entity.entity_data_entries.name=Name: +elementgui.living_entity.entity_data_entries.type=Type: +elementgui.living_entity.entity_data_entries.default_value=Default value: +elementgui.living_entity.entity_data_entries.add_entry=Add new entry +elementgui.living_entity.entity_data_entries.add_entry.name=Data entry name: +elementgui.living_entity.entity_data_entries.add_entry.type=Data entry type: +elementgui.living_entity.entity_data_entries.add_entry.title=New data entry elementgui.living_entity.error_entity_model_needs_texture=Entity model needs to have a texture elementgui.living_entity.error_entity_needs_name=Entity needs a name elementgui.living_entity.page_visual=Visual +elementgui.living_entity.page_model_layers=Model layers elementgui.living_entity.page_sound=Sound -elementgui.living_entity.page_behaviour=Behaviour +elementgui.living_entity.page_behaviour=Behavior +elementgui.living_entity.page_entity_data=Synced data elementgui.living_entity.page_ai_and_goals=AI and goals elementgui.living_entity.page_spawning=Spawning -elementgui.loot_table.name=Loot table elementgui.loot_table.registry_name=Loot table registry name:
Use prefix such as blocks/ to specify category elementgui.loot_table.namespace=Loot table namespace:
Use minecraft namespace to alter vanilla loot tables elementgui.loot_table.type=Loot table type: @@ -2617,7 +2711,7 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=Smithing reci elementgui.recipe.error_brewing_no_input_ingredient_and_result=Brewing recipe needs to have input, ingredient, and output defined (air does not count) elementgui.structuregen.event_structure_instance_generated=On structure instance generated elementgui.structuregen.import_tooltip=Click this to import nbt structure file
Use Structures section in Workspace tab for more options. -elementgui.structuregen.select_tooltip=Structure to spawn:
For more structure import options, use the structures section of the workspace tab +elementgui.structuregen.select_tooltip=Structure to generate:
For more structure import options, use the structures section of the workspace tab elementgui.structuregen.ignore_blocks=Blocks to ignore when placing: elementgui.structuregen.surface_detection_type=Type of reference ground detection: elementgui.structuregen.terrain_adaptation=Terrain adaptation type: @@ -2628,7 +2722,7 @@ elementgui.structuregen.separation_spacing=Structure chunk distribution: elementgui.structuregen.separation=Separation: elementgui.structuregen.spacing=Spacing: elementgui.structuregen.error_select_biomes=Select at least one biome where this structure generates -elementgui.structuregen.error_select_structure_spawn=You need to select a structure that will be spawned by this structure spawn in order to proceed. +elementgui.structuregen.error_select_structure_spawn=You need to select a structure to generate elementgui.tab.name=Creative tab name: elementgui.tab.icon=Tab icon: elementgui.tab.search_bar=Show search bar: @@ -2696,11 +2790,10 @@ workspace.resources.tab.structures=Structures workspace.resources.tab.screenshots=Screenshots workspace.textures.new=Create new texture workspace.textures.import=Import textures -workspace.textures.edit_selected=Edit selected ... -workspace.textures.duplicate_selected=Duplicate selected ... -workspace.textures.delete_selected=Delete selected -workspace.textures.export_selected=Export selected ... -workspace.textures.confirm_deletion_message=Are you sure that you want to delete this file?
NOTE: If you use this file anywhere, you might have broken textures! +workspace.textures.edit_selected=Edit selected... +workspace.textures.duplicate_selected=Duplicate selected... +workspace.textures.replace_selected=Replace selected... +workspace.textures.export_selected=Export selected... workspace.textures.select_dupplicate_type=Select the type of texture you would like to duplicate into: workspace.textures.select_texture_type=What kind of texture is this file? workspace.textures.category.block=Textures for blocks: @@ -2712,50 +2805,36 @@ workspace.textures.category.screen=Textures for screens (advancements, GUIs, ove workspace.textures.category.armor=Textures for armors: workspace.textures.category.other=Other textures (paintings, mod logo, ...): workspace.3dmodel.description={0}
Texture mapping: {1} -workspace.3dmodels.edit_texture_mappings=Edit texture mappings ... -workspace.3dmodels.redefine_animations=Redefine model animations ... -workspace.3dmodels.delete_selected=Delete selected -workspace.3dmodels.delete_confirm_message=Are you sure that you want to delete this model?
NOTE: If you use this model anywhere, you might have broken textures
and some mod elements might not compile! -workspace.3dmodels.regenerating_code=Regenerating code -workspace.3dmodels.regenerating_entity_code=Regenerating code of entities -workspace.3dmodels.rebuilding_workspace=Rebuilding workspace +workspace.3dmodels.edit_texture_mappings=Edit texture mappings... +workspace.3dmodels.redefine_animations=Redefine model animations... workspace.3dmodels.animation_unsupported_title=Animations not supported workspace.3dmodels.animation_unsupported_message=This model does not support animations! workspace.3dmodels.mappings_unsupported_title=No mapping workspace.3dmodels.mappings_unsupported_message=This model does not support texture mappings! -workspace.sounds.confirm_deletion_message=Are you sure that you want to delete this sound?
NOTE: If you use this sound anywhere, it won''t work anymore! -workspace.sounds.edit_selected=Edit selected ... +workspace.sounds.edit_selected=Edit selected... workspace.sounds.play_selected=Play selected -workspace.sounds.delete_selected=Delete selected workspace.sounds.category=Sound category: {0} workspace.sounds.files=Sound files: {0} workspace.sounds.subtitle_and_category=Subtitle: {0}, Sound category: {1} -workspace.screenshots.export_selected=Export selected ... -workspace.screenshots.delete_selected=Delete selected +workspace.screenshots.export_selected=Export selected... workspace.screenshots.action_complete=Action complete workspace.screenshots.use_background_message=Selected screenshots will be used as potential background on the next launch. -workspace.screenshots.use_as_background=Use selected as MCreator background ... -workspace.structure.confirm_deletion_message=Are you sure you want to delete selected structures?
NOTE: If you use them anywhere, they won''t spawn anymore! +workspace.screenshots.use_as_background=Use selected as MCreator background... workspace.variables.variable_name=Variable name workspace.variables.variable_type=Variable type workspace.variables.variable_scope=Variable scope workspace.variables.initial_value=Initial value workspace.variables.add_new=Add new variable -workspace.variables.remove_selected=Remove selected workspace.variables.help=Help with variables workspace.variables.change_type=Are you sure that you want to change this variable?\
If this variable is in use, this action might cause compilation errors.\
If you just created it, it is perfectly fine to change it. -workspace.variables.remove_variable_confirmation=Are you sure that you want to remove selected variables?\ -
If this variable is in use, this action might cause compilation errors. workspace.localization.add_entry=Add localization entry -workspace.localization.remove_selected=Remove selected workspace.localization.export_to_csv=Export current language to CSV workspace.localization.import_csv=Import CSV to current language workspace.localization.key_name_title=Key name workspace.localization.key_name_message=Enter the key name for your custom language entry: workspace.localization.confirm_delete_map=Are you sure that you want to delete this localization map? -workspace.localization.confirm_delete_entry=Are you sure that you want to remove selected entries?
NOTE: If they are still in use, the names of elements bound to them won''t work! workspace.localization.export_translation=Export translation workspace.localization.confirm_export=Default translation (en_us) can''t be exported!
English texts are defined in mod elements. workspace.localization.warning_export=You can''t import CSV to default translation (en_us)!
English texts are defined in mod elements. @@ -3004,6 +3083,8 @@ dialog.list_field.biome_list_title=Select biomes dialog.list_field.biome_list_message=Select biomes you would like to add to the list: dialog.list_field.biome_default_feature_title=Select biome default features dialog.list_field.biome_default_feature_message=Select biome default features you would like to add to the list: +dialog.list_field.damage_type_list_title=Select damage types +dialog.list_field.damage_type_list_message=Select damage types you would like to add to the list: dialog.list_field.dimension_title=Select dimensions dialog.list_field.dimension_message=Select dimensions you would like to add to the list: dialog.list_field.enchantment_title=Select enchantments @@ -3021,6 +3102,7 @@ dialog.selector.damagesources.message=Please select a damage type: dialog.selector.dimension.message=Please select a dimension: dialog.selector.enchantments.message=Please select an enchantment: dialog.selector.entity.message=Please select an entity: +dialog.selector.entity_data.message=Please select a data parameter: dialog.selector.fluids.message=Please select a fluid: dialog.selector.gamerules.message=Please select a game rule: dialog.selector.gui.message=Please select a GUI: @@ -3077,6 +3159,17 @@ dialog.tools.inject_tags.tag.biomes.minecraft.is_river=Marks biomes that are of dialog.tools.inject_tags.tag.biomes.minecraft.is_hill=Marks biomes that are of hill type. dialog.tools.inject_tags.tag.biomes.minecraft.is_forest=Marks biomes that are of forest type. dialog.tools.inject_tags.tag.biomes.minecraft.is_savanna=Marks biomes that are of savanna type. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_drowning=Damage types in this tag group are affected by water breathing effect and "drowningDamage" game rule. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_explosion=Damage types in this tag group are affected by blast protection enchantment. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fall=Damage types in this tag group are affected by slow falling effect, feather falling enchantment and "fallDamage" game rule. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fire=Damage types in this tag group are affected by fire resistance effect, fire protection enchantment and "fireDamage" game rule. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_freezing=Damage types in this tag group are affected by leather armor and "freezeDamage" game rule. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_projectile=Damage types in this tag group are affected by projectile protection enchantment. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_armor=Damage types in this tag group aren''t reduced by armor or shields. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_cooldown=Damage types in this tag group bypass invulnerability frames. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_effects=Damage types in this tag group ignore all damage reductions like protection effect, armor or enchantments. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_enchantments=Damage types in tag group ignore armor enchantments (such as protection). +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_shield=Damage types in this tag group can''t be blocked by shields. workspace_file_browser.title=Workspace file browser workspace_file_browser.search=Search by file name workspace_file_browser.open=Open @@ -3207,6 +3300,18 @@ action.image_editor.save=Save action.image_editor.save.tooltip=Click this to save changes to the existing file. A "Save as" dialog is opened if it''s a new file. action.image_editor.redo=Redo changes action.image_editor.redo.tooltip=Click this to redo previous changes +action.image_editor.selection.clear=Clear selection +action.image_editor.selection.clear.tooltip=Click this to clear selection +action.image_editor.copy=Copy +action.image_editor.copy.tooltip=Click this to copy selected area to clipboard +action.image_editor.copy_all=Copy All +action.image_editor.copy_all.tooltip=Click this to copy the entire image to clipboard +action.image_editor.cut=Cut +action.image_editor.cut.tooltip=Click this to cut selected area to clipboard +action.image_editor.paste=Paste +action.image_editor.paste.tooltip=Click this to paste clipboard contents +action.image_editor.delete=Delete +action.image_editor.delete.tooltip=Click this to delete selected area action.ide.save=Save code action.ide.save.result=Code saved action.ide.save.tooltip=Click this to save code in current code editor @@ -3219,11 +3324,13 @@ common.add=Add common.close=Close common.cancel=Cancel common.confirmation=Confirmation +common.delete_selected=Delete selected common.dependency={0}, type: {1} common.mod_element_name=Mod element name common.namespace=Namespace common.name_already_exists=This name already exists common.not_applicable=N/A +common.search_usages=Search usages in workspace common.warning=Warning components.collapsible_panel.expand=Click to expand components.collapsible_panel.collapse=Click to collapse diff --git a/plugins/mcreator-localization/lang/texts_ar_SA.properties b/plugins/mcreator-localization/lang/texts_ar_SA.properties index a081440c4cc..7aaf5da21a9 100644 --- a/plugins/mcreator-localization/lang/texts_ar_SA.properties +++ b/plugins/mcreator-localization/lang/texts_ar_SA.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=إعدادات حركة الرسوم dialog.animation_maker.next_frame=الإطار التالي dialog.animation_maker.previous_frame=إطار السابق dialog.animation_maker.animation_timeline=خيط الزمني للرسوم المتحركة -dialog.animation_maker.add_frames=إضافة إطار(ات) ... -dialog.animation_maker.add_frames_from_template=إضافة أطر من القالب... -dialog.animation_maker.add_frames_from_strip=إضافة أطر من شريط الرسوم المتحركة... -dialog.animation_maker.add_frames_from_gif=إضافة أطر من GIF ... dialog.animation_maker.gif_importing=استيراد صورة GIF dialog.animation_maker.gif_reading=قراءة GIF dialog.animation_maker.gif_processing=معالجة GIF @@ -119,9 +115,8 @@ dialog.cache_cleanup.title=تنظيف ذاكرة التخزين المؤقت dialog.cache_cleanup.progress.stopping_daemons=إيقاف تشغيل Daemons Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=مسح مجلد ذاكرة التخزين المؤقت للصف dialog.cache_cleanup.progress.build_task=تشغيل مهمة بناء الدرجات -dialog.code_error.compilation_desc=لم يتم تجميع ملف التعديل الرئيسي الخاص بك بشكل صحيح.

هذا ناتج عادة عن عدم الاتساق في رمز المود أثناء الإنشاءات.
يمكن للمنشئ حل هذه المشكلة لك عن طريق تجديد رمز الوضع بأكمله.

إذا كان لديك عناصر مقفلة أو ملفات Mod الأساسية، فإنها يمكن أن تسبب هذا الخطأ أيضا.


انقر فوق إعادة إنشاء الرمز الزر للمضي قدما في هذا الإجراء
+dialog.code_error.compilation_desc=لم يتم تجميع ملف التعديل الرئيسي الخاص بك بشكل صحيح.

هذا ناتج عادة عن عدم الاتساق في رمز المود أثناء الإنشاءات.
قد يمكن للمنشئ حل هذه المشكلة لك عن طريق تجديد رمز الوضع بأكمله.

إذا كان لديك عناصر مقفلة أو ملفات Mod الأساسية، فإنها يمكن أن تسبب هذا الخطأ أيضا.


انقر فوق إعادة إنشاء الرمز الزر للمضي قدما في هذا الإجراء
dialog.code_error.compilation_title=الأخطاء في تجميع ملف المود الرئيسي -dialog.code_error.compilation_list=مساحة العمل الخاصة بك تحتوي على عناصر التعديل التي لا تجمع بشكل صحيح.

كان ذلك على الأرجح بسبب آخر عنصر من التعديل قمت بإضافته أو تعديله. حاول تغيير إعدادات عناصر المود
التي تسبب أخطاء في الإنشاء (مثل العناصر المدرجة أدناه) لمحاولة إصلاح هذه المشكلة.

إذا لم تتمكن من حل هذه المشكلة، تصدير فضاء العمل إلى ملف ZIP القابل للمشاركة من قائمة الملف وإرساله إلينا عبر
متعقب المشاكل على موقعنا الإلكتروني حتى نتمكن من محاولة مساعدتك.

قائمة عناصر التعديل التي تسبب أخطاء في التجميع (مقتصرة على 10 عناصر)\:

dialog.code_error.regenerate_code=إعادة إنشاء الكود dialog.code_error.ignore_error=اهمال الاخطاء dialog.code_error.show_in_workspace=عرض في فضاء العمل @@ -339,7 +334,6 @@ dialog.modelement_id.info_message_title=رمز عنصر المود مقفل dialog.modelement_id.registry_name=اسم السجلة\: dialog.modelement_id.registry_name_info=اسم السجل (ليس كل عناصر التعديل تستخدمه) dialog.modelement_id.registry_name_validator=اسم السجلة -dialog.modelement_id.use_caution_warn=استخدم هذه الأداة بحذر\!

يمكن أن يؤدي تغيير المعرفات إلى كسر العالم الحالي الخاص بك إلى حفظ و التسبب
في تضارب مع عنصر المود الآخر من المود الخاص بك\! dialog.modelement_id.id_and_registry_names="{0} - اسم السجل" dialog.modelement_id.invalid_registry_name=اسم السجل الذي أدخلته غير صالح\!
لم يتم حفظ التغييرات. dialog.modelement_id.invalid_registry_name_title=اسم السجل غير صالح @@ -405,7 +399,6 @@ dialog.textures_mapping.title_for_model=تعيينات النسيج للنموذ dialog.textures_mapping.add_new=إضافة تعيين نسيج جديد dialog.textures_mapping.enter_name_message=أدخل اسم رسم النسيج الخاص بك.
يستخدم هذا الاسم لتحديد مجموعة المنسوجات الخاصة بك عند
اختيار تعيين نسيج للنموذج الخاص بك. dialog.textures_mapping.enter_name_title=تعيين نسيج جديد -dialog.textures_mapping.jump_to=إنتقل إلى ... dialog.textures_mapping.save=حفظ تعيينات dialog.textures_mapping.model_texture_part=جزء نسيج النموذج\:
{0} dialog.textures_mapping.confirm_deletion_message=هل أنت متأكد من أنك تريد حذف خرائط النسيج هذه؟
يمكنك الحصول على نصور مكسورة إذا كانت الخريطة لا تزال قيد الاستخدام\! @@ -526,7 +519,6 @@ workspace.elements.list.filter_all=اظهار الكل workspace.elements.list.filter_locked=العناصر المقفلة workspace.elements.list.filter_witherrors=عناصر مع أخطاء البناء workspace.elements.list.ascending=تصاعدي -workspace.category.mod_elements=عناصر المود workspace.category.resources=موارد workspace.category.variables=المتغيرات workspace.category.localization=توطين @@ -543,14 +535,11 @@ workspace.elements.list.edit.delete=حذف workspace.elements.list.edit.duplicate=انسخ عنصر المود... workspace.elements.list.edit.code=فتح عنصر المود في محرر التعليمات البرمجية workspace.elements.list.edit.lock=قفل/فتح عنصر المود -workspace.elements.list.edit.id=تحرير معرفات عنصر المود... workspace.elements.list.edit.add.folder=إضافة مجلد جديد... workspace.elements.list.edit.rename.folder=إعادة تسمية المجلد المحدد... -workspace.elements.confirm_delete_message=هل أنت متأكد من أنك تريد حذف العناصر المحددة ({0}) ؟

إذا كنت تستخدم بيانات عناصر المود المحددة في عناصر الموديل الأخرى (كوصفة، في الحدث، كعلامة التبويب، .) يجب عليك
حذف العناصر التي تعتمد على هذا العنصر أيضا\! وإلا ستحصل على أخطاء في البناء.

سيتم نقل عناصر الموديل في المجلد والمجلدات الفرعية المحذوفة إلى المجلد الأصلي workspace.elements.delete.tooltip=حذف عنصر التعديل المختار workspace.elements.edit_code.tooltip=تعديل رمز عنصر المود المحدد workspace.elements.lock_code_tooltip=قفل / فتح رمز العنصر
عند قفل الكود البرمجي ، لن يغير MCreator الكود البرمجي ، لذا يصبح نوع التعديل
قابلاً للتعديل من عرض الكود ويتم الحفاظ على الكود حتى عند تبديل مساحات العمل.
استخدم هذا فقط إذا كنت تنوي تعديل التعليمة البرمجية يدويًا وتدرك عواقب
قفل رمز عنصر المود\! -workspace.elements.edit_registry_names.tooltip=تعديل معرفات عنصر الl,] وأسماء السجل workspace.elements.empty.tip=اضغط على %1 لإضافة عناصر المود workspace.elements.lock_modelement_message= أنت تحاول قفل / إلغاء قفل رمز عنصر التعديل\!

عندما يتم قفل الرمز ، لن يغير MCreator شفرة المصدر ، ولكن هذا يعني
ذلك عند تحديث MCreator ، لن يتم تطبيق إصلاحات الأخطاء وترقيات إصدار Minecraft على العناصر المقفلة.

سيتم إلغاء قفل عناصر التعديل التي تم تأمينها الآن والتي تم تحديدها.
هذا يعني أن أي كود مخصص لعنصر التعديل هذا سيتم استبداله بواسطة MCreator.

يرجى قراءة صفحة wiki على موقع MCreator حول رمز القفل قبل استخدام هذا الإجراء. workspace.elements.lock_modelement_confirm=رمز عنصر القفل/فتح القفل؟ @@ -599,8 +588,6 @@ trigger.entity_tamed=تم تبويب الكائن trigger.entity_travels_to_dimension=عند سفر الكائن إلى بُعد آخر trigger.explosion_occurs=اذا حدث انفجار trigger.farmland_trampled=بعد تدويس مزارع الأرض -trigger.gem_dropped=بعد أسقطت العنصر -trigger.gem_expired=عند انتهاء صلاحية العنصر trigger.item_crafted=تم صنع العنصر trigger.item_destroyed=تم تدمير العنصر trigger.item_smelted=عند صهر العنصر @@ -762,14 +749,11 @@ blockly.block.entity_get_absorption=احصل على مستوى الصحة الا blockly.block.entity_get_armor_slot_item=الحصول على عنصر من فتحة الدرع %1 من %2 blockly.block.entity_get_controlling_passenger=%2 احصل على راكب يتحكم في %1 blockly.block.entity_get_fire_ticks=احصل على التكات المتبقية في النار من %1 -blockly.block.entity_get_fly_speed=الحصول على سرعة طيران %1 blockly.block.entity_get_oxygen=احصل على أكسجين من %1 -blockly.block.entity_get_root_vehicle=احصل على الحد الأدنى من الكيان الذي %1 يركب، أو الذات إن لم يكن يركب أي شيء blockly.block.entity_get_saturation=احصل على مستوى تشبع الطعام من %1 blockly.block.entity_get_scoreboard_score=احصل على %2 نتيجة لوحة النتائج لـ %1 blockly.block.entity_get_shootpower=احصل على قوة اطلاق النار إذا كان %1 مقذوفاً blockly.block.entity_get_slot=الحصول على نسخة من العنصر من فتحة %1 من %2 إذا كان لديه مخزون -blockly.block.entity_get_walk_speed=الحصول على سرعة المشي من %1 blockly.block.entity_getowner=%2 الحصول على مالك %1 إذا تم تبويضه blockly.block.entity_getridingentity=%2 الحصول على كائن %1 يقود سيارة blockly.block.entity_gettargetentity=%2 الحصول على كائن %1 مستهدف للهجوم @@ -850,9 +834,6 @@ blockly.block.entity_size_width=الحصول على عرض ال %1 blockly.block.entity_submerged_height=الحصول على ارتفاع غمر من %1 blockly.block.entity_swing_mainhand=الاستيلاء على اليد الرئيسية من %1 blockly.block.entity_swing_offhand=إيقاف اليد من %1 -blockly.block.entity_vel_x=سرعة X من %1 -blockly.block.entity_vel_y=سرعة Y من %1 -blockly.block.entity_vel_z=سرعة Z من %1 %2 blockly.block.entity_xplevel=الحصول على مستوى XP من %1 blockly.block.entity_xp_until_next_level=احصل على كمية من XP يحتاجها %1 للحصول على لفل واحد blockly.block.get_localized_text=الحصول على نص مترجم للمفتاح %1 %2 diff --git a/plugins/mcreator-localization/lang/texts_cs_CZ.properties b/plugins/mcreator-localization/lang/texts_cs_CZ.properties index aa94443b8da..74430dd0f41 100644 --- a/plugins/mcreator-localization/lang/texts_cs_CZ.properties +++ b/plugins/mcreator-localization/lang/texts_cs_CZ.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=Nastavení animací dialog.animation_maker.next_frame=Další snímek dialog.animation_maker.previous_frame=Předchozí snímek dialog.animation_maker.animation_timeline=Časová osa animace -dialog.animation_maker.add_frames=Přidat snímek (snímky) ... -dialog.animation_maker.add_frames_from_template=Přidat snímky ze šablony ... -dialog.animation_maker.add_frames_from_strip=Přidat snímky z pásu animace ... -dialog.animation_maker.add_frames_from_gif=Přidat snímky ze souboru GIF ... dialog.animation_maker.gif_importing=Import GIFu dialog.animation_maker.gif_reading=Čtení GIFu dialog.animation_maker.gif_processing=Zpracovávání GIFu @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=Vyčištění mezipaměti Gradle dialog.cache_cleanup.progress.stopping_daemons=Zastavuji běh Gradle daemons dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Probíhá mazání složky mezipaměti Gradle dialog.cache_cleanup.progress.build_task=Sestavit Gradle -dialog.code_error.compilation_desc=Jedna nebo více ze souborů hlavního módu se nepodařilo správně kompilovat.

Toto je obvykle způsobeno nesrovnalostí v kódu během sestavování.
MCreator může vyřešit tento problém za Vás regenerací celého kódu modifikace.

Problémy mohou také nastat, pokud jste uzamkli některé prvky módu nebo základní soubory módu.


Zmáčkněte tlačítkoRegenerace kódupro pokračování v této akcí.
dialog.code_error.compilation_title=Chyby s kompilací hlavního souboru módu -dialog.code_error.compilation_list=Vaše pracovní plocha obsahuje prvek, který se špatně sestavil.

Toto je pravděpodobně způsobeno posledním prvkem, který jste přidali nebo upravili. Zkuste poupravit prvky,
které způsobují problémy (ty, co jsou uvedené dole), abyste tento problém vyřešili.

Pokud nedokážete vyřešit tento problém, vyexportujte pracovní plochu do ZIP souboru ke sdílení z menu „Soubory“a pošlete nám tento soubor přes
náš Issue tracker na GitHub, abychom Vám mohli pomoci.

Seznam prvků způsobujících problémy (zkráceno na 10 prvků)\:

dialog.code_error.regenerate_code=Obnovit kód dialog.code_error.ignore_error=Ignorovat chybu dialog.code_error.show_in_workspace=Zobrazit v pracovním prostoru @@ -343,7 +337,6 @@ dialog.modelement_id.info_message_title=Kód prvku je uzamčen dialog.modelement_id.registry_name=Název registru\: dialog.modelement_id.registry_name_info=Název v registru (některé prvky ho nemusí využívat) dialog.modelement_id.registry_name_validator=Název v registru -dialog.modelement_id.use_caution_warn=Používejte tento nástroj s opatrností\!

Změna jména registru může poškodit existující světy a způsobit
konflikty s jinými prvky v modu\! dialog.modelement_id.id_and_registry_names="{0} - Název registru" dialog.modelement_id.invalid_registry_name=Zadaný název registru není platný\!
Změny nebyly uloženy. dialog.modelement_id.invalid_registry_name_title=Neplatný název registru @@ -411,7 +404,6 @@ dialog.textures_mapping.title_for_model=Mapování textury modelu dialog.textures_mapping.add_new=Přidat nové mapování textury dialog.textures_mapping.enter_name_message=Zadejte název mapování textury.
Tento název se používá k identifikaci vaší sady textur, když
vybíráte mapování textury vašeho modelu. dialog.textures_mapping.enter_name_title=Nové mapování textury -dialog.textures_mapping.jump_to=Přejít na ... dialog.textures_mapping.save=Uložit mapování dialog.textures_mapping.model_texture_part=Textura modelu část\:
{0} dialog.textures_mapping.confirm_deletion_message=Jste si jisti, že chcete odstranit toto mapování textury?
Pokud je mapování stále používáno, může to rozbít vaše textury\! @@ -533,7 +525,6 @@ workspace.elements.list.filter_all=Zobrazit vše workspace.elements.list.filter_locked=Uzamčené prvky workspace.elements.list.filter_witherrors=Prvky s chybami sestavení workspace.elements.list.ascending=Vzestupně -workspace.category.mod_elements=Prvky modů workspace.category.resources=Zdroje workspace.category.variables=Proměnné workspace.category.localization=Lokalizace @@ -550,14 +541,11 @@ workspace.elements.list.edit.delete=Odstranit workspace.elements.list.edit.duplicate=Duplikovat prvek módu... workspace.elements.list.edit.code=Otevřít prvek módu v editoru kódu workspace.elements.list.edit.lock=Uzamknout/odemknout kód prvku módu -workspace.elements.list.edit.id=Upravit ID prvku módu... workspace.elements.list.edit.add.folder=Přidat novou složku... workspace.elements.list.edit.rename.folder=Přejmenovat vybranou složku... -workspace.elements.confirm_delete_message=Jste si jisti, že chcete odstranit vybrané ({0}) prvky?

Pokud jste použili data vybraných prvků v jiných prvcích modu (jako je recept, událost, štítek, ...),
musíte také odstranit prvky, které jsou na tomto závislé\! Jinak dojde k chybám v sestavování.

Prvky v odstraněných složkách a podsložkách budou přesunuty do nadřazené složky workspace.elements.delete.tooltip=Smazat vybraný prvek modu workspace.elements.edit_code.tooltip=Upravit kód vybraného prvku modu workspace.elements.lock_code_tooltip=Uzamknout/odemknout kód prvku
Když kód uzamknete, MCreator kód nezmění, takže je typ modu
upravitelný z pohledu kódu a kód je zachován i při přepínání pracovních ploch.
Použijte pouze v případě, že máte v úmyslu kód ručně upravit a jste si vědomi důsledků
uzamčení kódu prvku\! -workspace.elements.edit_registry_names.tooltip=Upravit ID a názvy registrů prvků workspace.elements.empty.tip=Zmáčkněte %1 pro přidání elementů workspace.elements.lock_modelement_message=Pokoušíte se uzamknout/odemknout kód prvku modu\!

Když je kód uzamčen, MCreator nebude měnit zdrojový kód, ale to znamená
, že při aktualizaci MCreator nebudou aplikovány opravy chyb a upgrady Minecraft verze
na prvky, které jsou uzamčeny.

Prvky módu, které jsou momentálně uzamčeny a byly vybrány, budou odemčeny.
To znamená, že libovolný vlastní kód pro tento prvek modu bude přepsán pomocí MCreator.

Před použitím této akce si prosím přečtěte wiki stránku na webových stránkách MCreator o uzamčení kódu. workspace.elements.lock_modelement_confirm=Uzamknout/odemknout kód prvku modu? @@ -620,8 +608,6 @@ trigger.entity_tamed=Entita je ochočena trigger.entity_travels_to_dimension=Entita cestuje do dimenze trigger.explosion_occurs=Dojde k explozi trigger.farmland_trampled=Zemědělská půda je pošlapaná -trigger.gem_dropped=Gem je zahozen -trigger.gem_expired=Gem zmizí trigger.item_crafted=Předmět je vyroben trigger.item_destroyed=Předmět je zničen trigger.item_smelted=Předmět je taven @@ -779,14 +765,12 @@ blockly.block.entity_extinguish=Uhasit %1 blockly.block.entity_foodlevel=Získat úroveň hladu od %1 blockly.block.entity_get_absorption=Získat úroveň absorbčního zdraví %1 blockly.block.entity_get_armor_slot_item=Získat předmět ze slotu zbroje %1 z %2 -blockly.block.entity_get_fly_speed=Záskat rychlost letu %1 blockly.block.entity_get_oxygen=Získat hodnoty kyslíku %1 blockly.block.entity_get_saturation=Získat úroveň nasycenosti od %1 blockly.block.entity_get_scoreboard_score=Získat skóre z bodovací tabulky %2 pro %1 blockly.block.entity_get_shootpower=Získat sílu střely pokud %1 je střela blockly.block.entity_get_slot=Získat kopii předmětu ze slotu %1 z %2 pokud má inventář blockly.block.entity_get_spawn_x=Získat X spawn souřadnice %1 pro aktuální svět %2 -blockly.block.entity_get_walk_speed=Záskat rychlost chůze %1 blockly.block.entity_getowner=%2 Získat vlastníka, %1 pokud je ochočen blockly.block.entity_getridingentity=%2 Získat jestli entita %1 jede blockly.block.entity_gettargetentity=%2 Získat jestli se entita %1 připravuje k útoku @@ -877,9 +861,6 @@ blockly.block.entity_stop_navigation=Pokusit se zastavit navigaci %1 blockly.block.entity_submerged_height=Získat ponořenou výšku %1 blockly.block.entity_swing_mainhand=Máchnout hlavní rukou %1 blockly.block.entity_swing_offhand=Máchnout vedlejší rukou %1 -blockly.block.entity_vel_x=Rychlost X %1 %2 -blockly.block.entity_vel_y=Rychlost Y %1 %2 -blockly.block.entity_vel_z=Rychlost Z %1 %2 blockly.block.entity_xplevel=Získat XP úroveň %1 blockly.block.entity_xp_until_next_level=Získej množství XP potřebné uživatelem %1 pro získání úrovně blockly.block.execute_command=Provést příkaz /%1 na pozici x\: %2 y\: %3 z\: %4 %5 @@ -1599,7 +1580,6 @@ elementgui.dimension.biomes_in=Biomy v této dimenzi\: elementgui.dimension.main_filler_block=Hlavní blok výplně\:
Běžný, Nether, End elementgui.dimension.fluid_block=Blok kapaliny\:
Bežný, Nether, End elementgui.dimension.sleep_result=Výsledek pokusu o spánek\: -elementgui.dimension.fog_air_color=Přepsání barev nebe / mlhy\:
Ponechte DEFAULT pro výchozí zpracování dle verze Minecraftu elementgui.dimension.enable_dimension_portal=Povolit portál dimenze\: elementgui.dimension.portal_frame_block=Blok rámu portálu\: elementgui.dimension.portal_igniter_name=Název předmětu zapalovače portálu\: @@ -1618,8 +1598,6 @@ elementgui.enchantment.curse=Je toto očarování prokleté? elementgui.enchantment.allowed_on_books=Je toto očarování povoleno na knihách? elementgui.enchantment.can_generate_in_loot_tables=Může tento enchant generovat v kořistěné tabulkách? elementgui.enchantment.can_villager_trade=Může se tento enchant objevit u obchodů vesničana? -elementgui.enchantment.compatible_enchantments=Lze kombinovat s\:
Ponechte prázdné pro umožnění kombinování s jakýmkoliv očarováním -elementgui.enchantment.can_apply_to=Může být aplikováno na\:
Ponechte prázdné, aby bylo možné aplikovat na všechny příslušné ppředměty elementgui.enchantment.needs_name=Očarování musí mít název elementgui.gamerule.name=Název stroje\: elementgui.gamerule.display_name=Název herního pravidla\:
Toto jméno bude použito pro obrazovku nastavení herního pravidla @@ -1722,7 +1700,6 @@ elementgui.keybind.key_binding_category=Klávesová zkratka pro překlad do kate elementgui.keybind.key_procedure_triggers=Klíčová vazba spouštěče elementgui.keybind.error_key_needs_name=Klávesová zkratka musí mít jméno elementgui.keybind.error_key_category_needs_name=Kategorie Vazby klíče klíčové jméno -elementgui.living_entity.has_ai=Povolit AI
Pokud používáte AI, ujistěte se, že máte přiřazenou alespoň nějakou z níže uvedených AI úloh elementgui.living_entity.immune_fire=Oheň elementgui.living_entity.immune_arrows=Šípy elementgui.living_entity.immune_fall_damage=Poškození pádem @@ -1750,7 +1727,6 @@ elementgui.living_entity.event_mob_tick_update=Při aktualizaci ticků entity elementgui.living_entity.event_player_collides_with=Když se hráč srazí s touto entitou elementgui.living_entity.event_initial_spawn=Při prvním spawnu entity elementgui.living_entity.condition_natural_spawn=Podmínky přirozeného spawnování entity -elementgui.living_entity.behaviour=Charakteristika chování (Mob je agresivní, Stvoření je pasivní)\: elementgui.living_entity.creature_type=Typ stvoření (definuje některé speciální vlastnosti entity)\: elementgui.living_entity.is_immune_to=Entita imunní na\: elementgui.living_entity.ridable=Zaškrtněte, aby hráč mohl osedlat tuto entitu
Volitelně můžete také umožnit ovládání živoucí entity @@ -1760,7 +1736,6 @@ elementgui.living_entity.name=Název entity\: elementgui.living_entity.entity_model=Model entity\:
Podporováno\: JAVA elementgui.living_entity.entity_model_import=Klikněte zde pro vložení textury modelu entity elementgui.living_entity.texture=Textura entity\:
Textura musí být přizpůsobena modelu (např. textura skinu hráče NENÍ textura biped modelu) -elementgui.living_entity.glow_texture=Zářivá textura entity (volitelné)\:
Zářivá textura musí být přizpůsobena modelu, jas obrázku vyjadřuje intenzitu záření elementgui.living_entity.bounding_box=Ohraničení modelu entity\:
Šířka/hloubka, výška, velikost stínu, Y odsazení osedlávající entity elementgui.living_entity.spawn_egg_options=Možnosti spawnovacího vejce\:
Povolit, základní barva, barva teček, kreativní záložka elementgui.living_entity.mob_boss=Vyberte, pokud chcete, aby vaše entita byla boss s ukazatelem zdraví\: @@ -1782,10 +1757,8 @@ elementgui.living_entity.bind_to_gui=Spojit tuto entitu s GUI\:
elementgui.living_entity.inventory_size=Velikost inventáře (počet slotů)\:
Nastavte tuto hodnotu na největší ID slotu v GUI + 1 elementgui.living_entity.error_entity_model_needs_texture=Model entity musí mít texturu elementgui.living_entity.error_entity_needs_name=Entita musí mít název -elementgui.living_entity.page_behaviour=Chování elementgui.living_entity.page_ai_and_goals=AI a cíle elementgui.living_entity.page_spawning=Spawnování -elementgui.loot_table.name=Kořist elementgui.loot_table.registry_name=Název registru Lootů\:
Použijte prefix jako je blocks/ pro určení kategorie elementgui.loot_table.namespace=Jmenný prostor kořistěné tabulky\:
Použijte jmenný prostor minecraft ke změně vanilových lootů elementgui.loot_table.type=Typ kořisti\: @@ -1906,9 +1879,7 @@ elementgui.recipe.xp_reward=Odměna XP\: elementgui.recipe.cooking_time=Doba vaření\: elementgui.structuregen.event_structure_instance_generated=Když struktura je vygenerována elementgui.structuregen.import_tooltip=Klikněte zde pro vložení souboru nbt struktury
Pro více možností použijte sekci Struktury v záložce Pracovní plocha. -elementgui.structuregen.select_tooltip=Struktura ke spawnu\:
Pro více možností importu struktury, použijte sekci struktur na kartě pracovního prostoru elementgui.structuregen.ignore_blocks=Při umístění ignorovat tyto bloky\: -elementgui.structuregen.error_select_structure_spawn=Abyste mohli pokračovat, musíte zvolit strukturu, která bude spawnována tímto spawnem struktury. elementgui.tab.name=Název záložky v tvořivé hře\: elementgui.tab.icon=Ikona záložky\: elementgui.tab.search_bar=Zobrazit vyhledávací lištu\: @@ -1946,56 +1917,33 @@ workspace.resources.tab.structures=Struktury workspace.resources.tab.screenshots=Snímky obrazovky workspace.textures.new=Vytvořit novou texturu workspace.textures.import=Vložit textury -workspace.textures.edit_selected=Upravit vybrané... -workspace.textures.duplicate_selected=Duplikovat vybrané ... -workspace.textures.delete_selected=Smazat vybrané -workspace.textures.export_selected=Exportovat vybrané... -workspace.textures.confirm_deletion_message=Jste si jisti, že chcete odstranit tento soubor?
POZNÁMKA\: Pokud je tento soubor používán, může dojít k poškození textur\! workspace.textures.select_dupplicate_type=Vyberte typ textury, do které chcete duplikovat\: workspace.textures.select_texture_type=O jaký typ textury se jedná? workspace.textures.category.block=Textury pro bloky\: workspace.textures.category.item=Texty pro předměty\: -workspace.3dmodels.edit_texture_mappings=Upravit mapování textur... -workspace.3dmodels.redefine_animations=Upřesnit animace modelu... -workspace.3dmodels.delete_selected=Smazat vybrané -workspace.3dmodels.delete_confirm_message=Jste si jisti, že chcete odstranit tento model?
POZNÁMKA\: Pokud tento model někde používáte, může dojít k poškození textur
a u některých prvků modu nemusí dojít ke kompilaci\! -workspace.3dmodels.regenerating_code=Obnovování kódu -workspace.3dmodels.regenerating_entity_code=Obnovování kódu entit -workspace.3dmodels.rebuilding_workspace=Předělává se pracovní plocha workspace.3dmodels.animation_unsupported_title=Animace nejsou podporovány workspace.3dmodels.animation_unsupported_message=Tento model nepodporuje animace\! workspace.3dmodels.mappings_unsupported_title=Žádné mapování workspace.3dmodels.mappings_unsupported_message=Tento model nepodporuje mapování textur\! -workspace.sounds.confirm_deletion_message=Jste si jisti, že chcete odstranit tento zvuk?
POZNÁMKA\: Pokud je tento zvuk někde používán, již nebude fungovat\! -workspace.sounds.edit_selected=Upravit vybrané... workspace.sounds.play_selected=Přehrát vybrané -workspace.sounds.delete_selected=Smazat vybrané workspace.sounds.category=Kategorie zvuku\: {0} workspace.sounds.files=Zvukové soubory\: {0} workspace.sounds.subtitle_and_category=Titulky\: {0}, Kategorie zvuku\: {1} -workspace.screenshots.export_selected=Exportovat vybrané... -workspace.screenshots.delete_selected=Smazat vybrané workspace.screenshots.action_complete=Akce dokončena workspace.screenshots.use_background_message=Vybrané snímky obrazovky budou použity jako potenciální pozadí při příštím spuštění. -workspace.screenshots.use_as_background=Použít vybrané jako pozadí MCreator... -workspace.structure.confirm_deletion_message=Jste si jisti, že chcete odstranit vybrané struktury?
POZNÁMKA\: Pokud je někde používáte, už nedojde k jejich spawnutí\! workspace.variables.variable_name=Název proměnné workspace.variables.variable_type=Typ proměnné workspace.variables.variable_scope=Typ rozsahu workspace.variables.initial_value=Výchozí hodnota workspace.variables.add_new=Přidat novou proměnnou -workspace.variables.remove_selected=Odstranit vybrané workspace.variables.help=Pomoc s proměnnými workspace.variables.change_type=Jste si jisti, že chcete změnit tuto variaci?
Pokud je tato variace používána, může to způsobit chyby při kompilaci.
Pokud jste ho právě vytvořili, je naprosto v pořádku ho změnit. -workspace.variables.remove_variable_confirmation=Jste si jisti, že chcete odstranit tuto variaci?
Pokud je tato variace používána, může to způsobit chyby při kompilaci. workspace.localization.add_entry=Přidat položku lokalizace -workspace.localization.remove_selected=Odstranit vybrané workspace.localization.export_to_csv=Exportovat aktuální jazyk do CSV workspace.localization.import_csv=Importovat CSV do aktuálního jazyka workspace.localization.key_name_title=Název klávesy workspace.localization.key_name_message=Zadejte klíčový slovo pro položku vlastního jazyka\: workspace.localization.confirm_delete_map=Jste si jisti, že chcete odstranit tuto mapu překladu? -workspace.localization.confirm_delete_entry=Jste si jisti, že chcete odstranit vybrané položky?
POZNÁMKA\: Pokud jsou stále používány, názvy prvků, které jsou k nim vázány, nebudou fungovat\! workspace.localization.export_translation=Exportovat překlad workspace.localization.confirm_export=Výchozí překlad (en_us) nemůže být exportován\!
Anglické texty jsou definovány v prvcích módu. workspace.localization.warning_export=Nelze importovat CSV do výchozího překladu (en_us)\!
Anglické texty jsou definovány v prvcích módu. diff --git a/plugins/mcreator-localization/lang/texts_de_DE.properties b/plugins/mcreator-localization/lang/texts_de_DE.properties index d00e6d33160..eaeaa4133f1 100644 --- a/plugins/mcreator-localization/lang/texts_de_DE.properties +++ b/plugins/mcreator-localization/lang/texts_de_DE.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=Animationseinstellungen dialog.animation_maker.next_frame=Nächstes Bild dialog.animation_maker.previous_frame=Vorheriges Bild dialog.animation_maker.animation_timeline=Animations-Zeitleiste -dialog.animation_maker.add_frames=Bild(er) hinzufügen... -dialog.animation_maker.add_frames_from_template=Bilder aus Vorlage hinzufügen ... -dialog.animation_maker.add_frames_from_strip=Füge Bilder aus Animationsstreifen hinzu ... -dialog.animation_maker.add_frames_from_gif=Füge Bilder von GIF hinzu ... dialog.animation_maker.gif_importing=GIF importieren dialog.animation_maker.gif_reading=GIF lesen dialog.animation_maker.gif_processing=GIF verarbeiten @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=Gradle-Zwischenspeicher aufräumen dialog.cache_cleanup.progress.stopping_daemons=Stoppe die laufenden Gradle-deamons dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Leere den Gradle-Zwischenspeicher Ordner dialog.cache_cleanup.progress.build_task=Gradle-Bauprozess läuft -dialog.code_error.compilation_desc=Deine Mod-Hauptdatei wurde nicht korrekt kompiliert.

Dies wird üblicherweise durch Inkonsistenzen im Mod-Code während des Aufbaus verursacht.
MCreator kann dieses Problem für dich lösen, indem es den gesamten Mod-Code regeneriert.

Wenn du Mod-Elemente oder Mod-Basisdateien gesperrt hast, können sie auch diesen Fehler verursachen.


Klick auf Code regenerieren, um mit dieser Aktion fortzufahren.
dialog.code_error.compilation_title=Hauptmod-Datei-Kompilierungsfehler -dialog.code_error.compilation_list=Deine Arbeitsumgebung enthält Mod-Elemente, die sich nicht richtig kompilieren lassen.

Dies wird wahrscheinlich durch das letzte von dir hinzugefügte oder geänderte Mod-Element verursacht. Versuche, die Einstellung deiner Mod-Elemente zu ändern,
die Build-Fehler verursachen (weiter unten werden solche Elemente aufgelistet), um dieses Problem zu lösen.

Wenn du das Problem nicht lösen kannst, dann exportiere es mit einer ausführbaren ZIP-Datei aus dem Datei-Menü und sende es an uns mit unserem
Problem-Melder unserer Webseite, so dass wir versuchen können, dir zu helfen.

Liste der Mod-Elemente, die Fehler verursachen können (auf bis zu 10 Elemente gekürzt)\:

dialog.code_error.regenerate_code=Code neu generieren dialog.code_error.ignore_error=Fehler ignorieren dialog.code_error.show_in_workspace=In Arbeitsumgebung zeigen @@ -370,7 +364,6 @@ dialog.modelement_id.info_message_title=Der Code für dieses Mod-Element ist ges dialog.modelement_id.registry_name=Registrierungsname\: dialog.modelement_id.registry_name_info=Registrierungsname (wird nicht von allen Mod-Elementen verwendet) dialog.modelement_id.registry_name_validator=Registrierungsname -dialog.modelement_id.use_caution_warn=Verwende dieses Werkzeug mit Vorsicht\!

Das Ändern von Registrierungsnamen kann vorhandene Spielstände zerstören und
Konflikte mit anderen Mod-Elementen in der Mod verursachen\! dialog.modelement_id.id_and_registry_names="{0} - Registrierungsname" dialog.modelement_id.invalid_registry_name=Der eingegebene Registrierungsname ist ungültig\!
Die Änderungen wurden nicht gespeichert. dialog.modelement_id.invalid_registry_name_title=Ungültiger Registrierungsname @@ -411,6 +404,12 @@ dialog.preferences.themes.list=
Liste dialog.preferences.description={0}
{1} dialog.preferences.entry_description=
{0}{1} dialog.preferences.unknown_property_type={0}\: unbekannter Objekttyp +dialog.search_usages.type.mod_element=mod-Elemente +dialog.search_usages.type.resource.texture=Textur +dialog.search_usages.type.resource.model=Modell +dialog.search_usages.type.resource.structure=Struktur +dialog.search_usages.type.global_variable=Globale Variable +dialog.search_usages.type.localization_key=Lokalisierungsschlüssel dialog.sounds.name=Ton-Name dialog.sounds.registry_name=Registrierungsname des Geräusches\:
Wenn du das verwendete Geräusch umbenennst, werden bestehende Verbindungen unterbrochen dialog.sounds.files=Tondateien\: @@ -445,7 +444,6 @@ dialog.textures_mapping.title_for_model=Texturzuordnungen für Modell dialog.textures_mapping.add_new=Neue Texturzuordnung hinzufügen dialog.textures_mapping.enter_name_message=Gib deinen Textur-Mapping-Namen ein.
Dieser Name wird verwendet, um deine Texturen zu identifizieren, wenn
ein Textur-Mapping für dein Modell ausgewählt wird. dialog.textures_mapping.enter_name_title=Neue Texturzuordnung -dialog.textures_mapping.jump_to=Gehe zu... dialog.textures_mapping.save=Mapping speichern dialog.textures_mapping.model_texture_part=Modell-Texturteil\:
{0} dialog.textures_mapping.confirm_deletion_message=Bist du sicher, diese Textur-Zuordnung zu löschen?
Du könnest defekte Texturen erhalten, wenn das Mapping noch verwendet wird\! @@ -568,7 +566,7 @@ workspace.elements.list.filter_all=Zeige alle workspace.elements.list.filter_locked=Gesperrte Elemente workspace.elements.list.filter_witherrors=Elemente mit Erstellungsfehlern workspace.elements.list.ascending=Absteigend -workspace.category.mod_elements=Mod Elemente +workspace.category.mod_elements=Modelemente workspace.category.resources=Resourcen workspace.category.variables=Variablen workspace.category.localization=Lokalisierung @@ -585,14 +583,11 @@ workspace.elements.list.edit.delete=Löschen workspace.elements.list.edit.duplicate=Mod-Element duplizieren... workspace.elements.list.edit.code=Mod-Element im Code Editor öffnen workspace.elements.list.edit.lock=Mod-Element sperren/entsperren -workspace.elements.list.edit.id=Mod-Element-IDs bearbeiten... workspace.elements.list.edit.add.folder=Neuen Ordner hinzufügen... workspace.elements.list.edit.rename.folder=Ausgewählten Ordner umbenennen... -workspace.elements.confirm_delete_message=Bist du sicher, dass du die ausgewählten ({0}) Elemente löschen möchten?

Wenn die Daten der ausgewählten Mod-Elemente in anderen Mod-Elementen verwendet werden (als Rezept, in Auslöser, als Tab, ...), dann musst du
auch alle Elemente löschen, die von diesem abhängen\! Andernfalls wird es zu Fehlern im Bauprozess bekommen.

Mod-Elemente in gelöschtem Ordner und Unterordner werden in den übergeordneten Ordner verschoben workspace.elements.delete.tooltip=Lösche das ausgewählte Mod-Element workspace.elements.edit_code.tooltip=Bearbeite den Quellcode des ausgewählten Mod-Elements workspace.elements.lock_code_tooltip=Code des Elements sperren/entsperren
Wenn du den Code sperrst, ändert MCreator den Code nicht. So wird der Mod-Typ
aus der Code-Ansicht editierbar und der Code bleibt auch beim Wechsel von Arbeitsumgebungen erhalten.
Benutze dies nur, wenn du vorhast, den Code manuell zu bearbeiten
und dich der Sperre des Codes eines Mod-Elements und dessen Folgen im Klaren bist\! -workspace.elements.edit_registry_names.tooltip=Bearbeite die Element-IDs und Registrierungsnamen workspace.elements.empty.tip=Drücke %1 um Mod-Elemente hinzuzufügen workspace.elements.lock_modelement_message=Du versucht, den Code des Mod-Elements zu sperren/entsperren\!

Wenn der Code gesperrt ist, ändert MCreator den Quelltext nicht, aber dies bedeutet,
dass beim Aktualisieren von MCreator Fehlerkorrekturen oder Updates der Minecraft-Version nicht
auf die Elemente angewendet werden, die gesperrt sind.

Die Mod-Elemente, die gerade gesperrt sind und ausgewählt wurden, werden freigeschaltet.
Das bedeutet, dass jeder benutzerdefinierte Code für dieses Mod-Element von MCreator überschrieben wird.

Bitte ließ die Wiki-Seite über das Sperren von Code auf der MCreator-Website, bevor du diese Aktion benutzt. workspace.elements.lock_modelement_confirm=Mod-Element-Code sperren/entsperren? @@ -666,8 +661,6 @@ trigger.entity_travels_to_dimension=Entität reist zu einer Dimension trigger.entity_uses_totem=Entität nutzt ein Totem trigger.explosion_occurs=Eine explosion findet statt trigger.farmland_trampled=Farmland wird zertrampelt -trigger.gem_dropped=Gegenstand fallengelassen -trigger.gem_expired=Gegenstand läuft aus trigger.item_crafted=Gegenstand wurde hergestellt trigger.item_destroyed=Gegenstand wurde zerstört trigger.item_smelted=Gegenstand wurde geschmolzen @@ -700,9 +693,21 @@ trigger.sapling_glow=Setzling wächst trigger.village_siege=Zombies belagern ein Dorf trigger.world_ticks=Wenn Welt-tick aktualisiert trigger.no_ext_trigger=Kein zusätzlicher Auslöser +blockly.category.blockprocedures=Block-Verfahren +blockly.category.blockactions=Aktionen blockly.category.directionactions=Richtungsverfahren +blockly.category.entitydata=Daten +blockly.category.entitymanagement=Aktionen +blockly.category.itemdata=Daten +blockly.category.itemmanagement=Aktionen +blockly.category.itemprocedures=Gegenstand-Verfahren +blockly.category.playerdata=Daten +blockly.category.playermanagement=Aktionen blockly.category.projectilemanagement=Projektilverfahren blockly.category.guimanagement=Slot- & GUI-Verfahren +blockly.category.worldprocedures=Weltverfahren +blockly.category.worlddata=Daten +blockly.category.worldmanagement=Aktionen blockly.category.basictasks=Grund-Prozesse blockly.category.combattasks=Kampf-Prozesse blockly.category.movementtasks=Bewegungs-Prozesse @@ -793,6 +798,7 @@ blockly.block.blockat_is_solid=Ist der Block bei x\: %1 y\: %2 z\: %3 solide blockly.block.blockat_is_side_solid=Ist Seite %1 des Blocks um x\: %2 y\: %3 z\: %4 solide blockly.block.blockat_lightlevel=Erhalte das Helligkeitslevel vom Block bei x\: %1 y\: %2 z\: %3 blockly.block.blockat_opacity=Deckkraft eines Blocks abfragen bei x\: %1 y\: %2 z\: %3 +blockly.block.blockat_plant_type=Ist Block bei x\: %1 y\: %2 z\: %3 vom Pflanzen Typ %4 blockly.block.blockitem_to_mcitem=%3 %1 in %2 umwandeln blockly.block.blockstate_from_deps=Angegebener Blockstatus blockly.block.blockstate_get_boolean_property=Erhalte Boolesche Eigenschaft %1 von %3 %2 @@ -839,6 +845,7 @@ blockly.block.entity_allow_flying=Erlaube %2 zu fliegen, wenn %1, sonst nicht blockly.block.entity_armor_value=Rüstungswert von %1 blockly.block.entity_canusecommand=Hat %2 das Berechtigungslevel %1 blockly.block.entity_check_creature_type=Ist %1 eine Kreatur vom Type %2 +blockly.block.entity_checkgamemode=Ist %1 im Spielmodus %2 blockly.block.entity_clear_inventory=Lösche Inventar von %1 blockly.block.entity_clearpotions=Entferne alle Trank Effekte von %1 blockly.block.entity_close_gui=Schließe jegliches geöffnete GUI für %1 @@ -857,9 +864,7 @@ blockly.block.entity_get_armor_slot_item=Erhalte Gegenstand vom Rüstungs-Slot % blockly.block.entity_get_controlling_passenger=%2 Bekomme Passagier, der %1 kontrolliert blockly.block.entity_get_first_passenger=%2 Ersten Passagier von %1 bekommen blockly.block.entity_get_fire_ticks=Erhalte verbleibende Ticks im Feuer von %1 -blockly.block.entity_get_fly_speed=Erhalte Fluggeschwindigkeit von %1 blockly.block.entity_get_oxygen=Erhalte Sauerstoff von %1 -blockly.block.entity_get_root_vehicle=Erhalte die niedrigste Entität, die %1 reitet, oder dich selbst, wenn nichts reist blockly.block.entity_get_saturation=Erreiche Nahrungssättigungslevel von %1 blockly.block.entity_get_scoreboard_score=Erhalte %2 Wert der Anzeigetafel (Scoreboard) von %1 blockly.block.entity_get_shootpower=Erhalte die Schussstärke, wenn %1 ein Projektil ist @@ -869,7 +874,6 @@ blockly.block.entity_get_spawn_y=Y-Spawn-Koordinate von %1 für die aktuelle Wel blockly.block.entity_get_spawn_z=Z-Spawn-Koordinate von %1 für die aktuelle Welt %2 ermitteln blockly.block.entity_get_stepheight=Stufenhöhe von %1 ermitteln blockly.block.entity_get_uuid=UUID von %1 abrufen -blockly.block.entity_get_walk_speed=Erhalte Laufgeschwindigkeit von %1 blockly.block.entity_getowner=%2 erhält den Besitzer von %1, wenn gezähmt blockly.block.entity_getridingentity=%2 Erhalte Lebewesen, das %1 reitet blockly.block.entity_gettargetentity=%2 Erhalte Lebewesen, das %1 zum Angriff anvisiert @@ -956,6 +960,7 @@ blockly.block.entity_set_display_name=Setze Anzeigename von %2 zu %1 blockly.block.entity_set_fire=Setze %2 für %1 Sekunden in Brand blockly.block.entity_set_flying=Lass %2 fliegen, falls %1 blockly.block.entity_set_foodlevel=Setze Hungerlevel von %2 auf %1 +blockly.block.entity_set_gamemode=Setze Spielmodus von %1 auf\: %2 blockly.block.entity_set_health=Setze das Leben von %2 auf %1 blockly.block.entity_set_invisible=Unsichtbarkeit von %1 auf %2 setzen blockly.block.entity_set_mainhand_item=Setzte den Gegenstand in der Haupthand von %3 zu %2 %1 @@ -980,9 +985,6 @@ blockly.block.entity_submerged_height=Erhalte Unterwasserhöhe von %1 blockly.block.entity_swing_mainhand=Schwinge die Haupthand von %1 blockly.block.entity_swing_offhand=Schwinge die Nebenhand von %1 blockly.block.entity_switch_dimension=Dimension von %1 auf %2 umschalten -blockly.block.entity_vel_x=X-Geschwindigkeit von %1 %2 -blockly.block.entity_vel_y=Y-Geschwindigkeit von %1 %2 -blockly.block.entity_vel_z=Z-Geschwindigkeit von %1 %2 blockly.block.entity_xplevel=Erhalte XP Level von %1 blockly.block.entity_xp_until_next_level=Hol dir die Menge an XP von %1 für ein Level blockly.block.execute_command=Führe Befehl /%1 bei x\: %2 aus\: %3 z\: %4 %5 @@ -1076,7 +1078,6 @@ blockly.block.set_time=Setze Zeit auf %1 %2 blockly.block.spawn_entity=Erschaffe Entität\: %4 um x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Erschaffe Entität\: %6 um x\: %1 y\: %2 z\: %3 mit dem Rasen\: %4 Pitch\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Erschaffe Entität\: %9 um x\: %1 y\: %2 z\: %3 mit dem Kiew\: %4 Pitch\: %5 vx\: %6 vt\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Erschaffe Gegenstand/Edelstein %1 um x\: %2 y\: %3 z\: %4 Abholverzögerung\: %5 Despawn\: %6 %7 blockly.block.spawn_particle=Erschaffe einen einzelnen Partikel bei x\: %1 y\: %2 z\: %3 mit vx\: %4 vy\: %5 vz\: %6 Typ\: %7 blockly.block.spawn_particle_multi=Spawne %8 Partikel auf Serverseite bei x\: %1 y\: %2 z\: %3 im Bereich dx\: %4 dy\: %5 dz\: %6 mit Geschwindigkeit %7 Typ\: %9 %10 blockly.block.spawn_xporb=Erschaffe XP Orb um x\: %2 y\: %3 z\: %4 mit xp Betrag %1 %5 @@ -1155,7 +1156,6 @@ blockly.block.restrict_sun=Sonne einschränken %1 blockly.block.swim=Schwimme zufällig mit dem Geschwindigkeitsfaktor %1 %2 blockly.block.swim_in_water=Schwimmen im Wasser %1 blockly.block.try_and_find_water=Versuche, Wasser %1 zu finden -blockly.block.watch_closest_entity=Nächste Entität des Typs %2 im Radius %1 %3 ansehen blockly.block.wander=Wander herum (ermöglicht Gehen) mit Geschwindigkeitsfaktor %1 %2 blockly.block.wander_avoid_water=Wander um und vermeide Wasser mit dem Geschwindigkeitsfaktor %1 %2 blockly.block.biome_entered=Wenn der Spieler das Biom %1 betritt @@ -1994,7 +1994,6 @@ elementgui.dimension.biomes_in=Biome in dieser Dimension\: elementgui.dimension.main_filler_block=Hauptfüllblock\:
Normal, Nether, Ende elementgui.dimension.fluid_block=Flüssigkeitsblock\:
Normal, Nether, Ende elementgui.dimension.sleep_result=Ergebnis Schlafversuch\: -elementgui.dimension.fog_air_color=Himmel/Nebelfarbe überschreiben\:
Belassen Sie DEFAULT für die Standardbehandlung pro Minecraft-Version elementgui.dimension.enable_dimension_portal=Dimensionsportal aktivieren\: elementgui.dimension.portal_frame_block=Portalrahmenblock\: elementgui.dimension.portal_particles=Portalblockpartikel\: @@ -2018,8 +2017,6 @@ elementgui.enchantment.curse=Ist die Verzauberung ein Fluch? elementgui.enchantment.allowed_on_books=Ist diese Verzauberung auf Büchern erlaubt? elementgui.enchantment.can_generate_in_loot_tables=Kann diese Verzauberung in Beute Tabellen generieren? elementgui.enchantment.can_villager_trade=Kann diese Verzauberung in den Handwerksbetrieben der Dorfbewohner auftauchen? -elementgui.enchantment.compatible_enchantments=Kombinierbar mit\:
Leer lassen um Kombinationen mit jeder Verzauberung zuzulassen -elementgui.enchantment.can_apply_to=Kann angewendet werden auf\:
Leer lassen, um auf alle passenden Artikel anwendbar zu machen elementgui.enchantment.needs_name=Verzauberung benötigt einen Namen elementgui.gamerule.name=Maschinenname\: elementgui.gamerule.display_name= Name der Spielregel\:
Dieser Name wird für den Bildschirm mit den Einstellungen für Spielregeln verwendet @@ -2165,7 +2162,6 @@ elementgui.keybind.key_procedure_triggers=Tastenbelegungs Prozedur Auslöser elementgui.keybind.error_key_needs_name=Tastaturbelegung benötigt einen Namen elementgui.keybind.error_key_category_needs_name=Tastaturbelegungs Kategorie Schlüsselname elementgui.living_entity.disable_collisions=Kollisionsbox deaktivieren -elementgui.living_entity.has_ai=KI aktivieren
Wenn du KI verwendest achte bitte darauf, dass unten einige KI-Aufgaben definiert sind elementgui.living_entity.immune_fire=Feuer elementgui.living_entity.immune_arrows=Pfeile elementgui.living_entity.immune_fall_damage=Fallschaden @@ -2182,9 +2178,7 @@ elementgui.living_entity.spawn_dungeons=Im Verlies entstehen lassen elementgui.living_entity.is_rideable=Reitbar elementgui.living_entity.control_forward=Vorwärtsbewegung Steuerung elementgui.living_entity.control_strafe=Strafe Bewegungssteuerung -elementgui.living_entity.is_breedable=Diese Entität zum Tiertyp machen, Zücht-Gegenstände\:
Entitätsbasis und Verhaltenstyp werden ignoriert, wenn sie aktiviert sind elementgui.living_entity.is_tameable=Kann gezähmt werden -elementgui.living_entity.is_ranged=Lasse die Entität Fernangriffe mit Gegenstand, Angriffsintervall und Radius ausführen\:
Füge mindestens eine KI-Aufgabe aggressiv vorgehen gegen hinzu, um Angriffsziele zu definieren.
Wenn „Standardgegenstand“ ausgewählt ist, wähle ein Projektilgegenstand oder lasse ihn leer, um den Pfeil zu verwenden elementgui.living_entity.event_struck_by_lightning=Wenn vom Blitz getroffen elementgui.living_entity.event_mob_falls=Wenn Entität scheitert elementgui.living_entity.event_mob_dies=Wenn Entität stirbt @@ -2195,7 +2189,6 @@ elementgui.living_entity.event_mob_tick_update=Bei Entity Tick-Update elementgui.living_entity.event_player_collides_with=Wenn Spieler mit dieser Einheit zusammenstößt elementgui.living_entity.event_initial_spawn=Bei Erstellung des ersten Objects elementgui.living_entity.condition_natural_spawn=Natürliche Entität-Entstehungsbedingung -elementgui.living_entity.behaviour=Verhaltenseigenschaften (Mob ist aggressiv, Kreatur ist passiv)\: elementgui.living_entity.creature_type=Kreaturentyp (definiert einige spezielle Entität-Eigenschaften)\: elementgui.living_entity.follow_range_tracking_range=Folge-Bereich, Tracking-Bereich\: elementgui.living_entity.movement_speed_step_height=Bewegungsgeschwindigkeit, Schritthöhe\: @@ -2208,7 +2201,6 @@ elementgui.living_entity.name=Objektname\: elementgui.living_entity.entity_model=Objektmodell\:
Unterstützt\: JAVA elementgui.living_entity.entity_model_import=Hier klicken, um Modelltextur des Objektes zu importieren elementgui.living_entity.texture=Textur des Objektes\:
Textur muss zum Modell passen (z.B. Spielerskin-Textur ist KEINE Biped-Modell-Textur) -elementgui.living_entity.glow_texture=Glühtextur des Objektes (optional)\:
Glühtextur muss zum Modell passen, Bildhelligkeit bestimmt Glühkraft elementgui.living_entity.bounding_box=Objekt-Modell Begrenzungsbox\:
Breite/Tiefe, Höhe, Schattengröße, berittene Entität Y Versatz elementgui.living_entity.spawn_egg_options=Optionen für Eier-Generierung\:
Aktivieren, Grundfarbe, Punktfarbe, Kreativ-Tab elementgui.living_entity.mob_boss=Auswählen wenn das Objekt als Chef mit Gesundheitsleiste verwenden werden soll\: @@ -2234,10 +2226,8 @@ elementgui.living_entity.error_entity_model_needs_texture=Objektmodell muss eine elementgui.living_entity.error_entity_needs_name=Objekt benötigt einen Namen elementgui.living_entity.page_visual=Optisch elementgui.living_entity.page_sound=Geräusch -elementgui.living_entity.page_behaviour=Verhalten elementgui.living_entity.page_ai_and_goals=KI und Ziele elementgui.living_entity.page_spawning=Spawnen -elementgui.loot_table.name=Loot-Tabelle elementgui.loot_table.registry_name=Registrierungsname der Beutetabelle\:
Verwende einen Präfix wie "blocks/", um die Kategorie anzugeben elementgui.loot_table.namespace=Beute Tabellen namnsraum\:
Benutze Minecraft-Namensraum um Vanilla-Tabellen zu ändern elementgui.loot_table.type=Beute Tabellentyp\: @@ -2392,9 +2382,7 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=Schmiederezep elementgui.recipe.error_brewing_no_input_ingredient_and_result=Braurezept muss Eingabe, Zutat und Ausgabe definiert sein (Luft zählt nicht) elementgui.structuregen.event_structure_instance_generated=Auf Strukturinstanz generiert elementgui.structuregen.import_tooltip=Klicke hier, um die nbt-Strukturdatei zu importieren.
Benutze die Sektion "Strukturen" im Arbeitsumgebungs-Tab für weitere Optionen. -elementgui.structuregen.select_tooltip=Zu generierende Struktur\:
Für weitere Optionen über die Importierung von Strukturen, benutze die Sektion "Struktur" im Arbeitsumgebungs-Tab elementgui.structuregen.ignore_blocks=Blöcke, die beim platzieren ignoriert werden sollen\: -elementgui.structuregen.error_select_structure_spawn=Du musst eine Struktur auswählen, die von diesem Struktur-Spawn erzeugt wird, um fortzufahren. elementgui.tab.name=Kreativ Tab-Name\: elementgui.tab.icon=Tab Symbol\: elementgui.tab.search_bar=Suchleiste anzeigen\: @@ -2461,11 +2449,6 @@ workspace.resources.tab.structures=Strukturen workspace.resources.tab.screenshots=Bildschirmfotos workspace.textures.new=Neue Textur erstellen workspace.textures.import=Texturen importieren -workspace.textures.edit_selected=Ausgewähltes bearbeiten ... -workspace.textures.duplicate_selected=Verdoppele ausgewählte ... -workspace.textures.delete_selected=Ausgewählte löschen -workspace.textures.export_selected=Ausgewähltes exportieren ... -workspace.textures.confirm_deletion_message=Sind Sie sicher, dass Sie diese Datei löschen möchten?
HINWEIS\: Wenn Sie diese Datei irgendwo verwenden, können Sie fehlerhafte Texturen haben\! workspace.textures.select_dupplicate_type=Wählen Sie die Art der Textur aus, in die Sie duplizieren möchten\: workspace.textures.select_texture_type=Welche Art von Textur ist diese Datei? workspace.textures.category.block=Blocktexturen\: @@ -2477,47 +2460,29 @@ workspace.textures.category.screen=Texturen für Bildschirme (Erweiterungen, GUI workspace.textures.category.armor=Texturen für Rüstungen\: workspace.textures.category.other=Andere Texturen (Gemälde, Mod-Logo, ...)\: workspace.3dmodel.description={0}
Textur-Zuordnung\: {1} -workspace.3dmodels.edit_texture_mappings=Textur-Mappings bearbeiten ... -workspace.3dmodels.redefine_animations=Model-Animationen neu definieren ... -workspace.3dmodels.delete_selected=Ausgewähltes löschen -workspace.3dmodels.delete_confirm_message=Sind Sie sicher, dass Sie dieses Modell löschen möchten?
HINWEIS\: Wenn Sie dieses Modell irgendwo verwenden, haben Sie möglicherweise fehlerhafte Texturen
und einige Mod-Elemente werden möglicherweise nicht kompiliert\! -workspace.3dmodels.regenerating_code=Code neu generieren -workspace.3dmodels.regenerating_entity_code=Code von Entitäten neu generieren -workspace.3dmodels.rebuilding_workspace=Arbeitsumgebung neu bauen workspace.3dmodels.animation_unsupported_title=Animationen werden nicht unterstützt workspace.3dmodels.animation_unsupported_message=Dieses Model unterstützt keine Animationen\! workspace.3dmodels.mappings_unsupported_title=Keine Zuordnung workspace.3dmodels.mappings_unsupported_message=Dieses Modell unterstützt keine Texturzuordnungen\! -workspace.sounds.confirm_deletion_message=Bist du sicher, dass Sie dieses Geräusch löschen möchten?
HINWEIS\: Wenn du dieses Geräusch irgendwo verwendest, funktioniert es nicht mehr\! -workspace.sounds.edit_selected=Ausgewähltes bearbeiten ... workspace.sounds.play_selected=Spiel ausgewählt -workspace.sounds.delete_selected=Ausgewähltes löschen workspace.sounds.category=Klangkategorie\: {0} workspace.sounds.files=Audiodateien\: {0} workspace.sounds.subtitle_and_category=Untertitel\: {0}, Klangkategorie\: {1} -workspace.screenshots.export_selected=Ausgewähltes exportieren ... -workspace.screenshots.delete_selected=Ausgewähltes löschen workspace.screenshots.action_complete=Aktion abgeschlossen workspace.screenshots.use_background_message=Ausgewählte Screenshots werden beim nächsten Start als potenzieller Hintergrund verwendet. -workspace.screenshots.use_as_background=Markiertes als MCreator Hintergrund wählen ... -workspace.structure.confirm_deletion_message=Möchten Sie wirklich ausgewählte Strukturen löschen?
HINWEIS\: Wenn Sie sie irgendwo verwenden, werden sie nicht mehr erzeugt\! workspace.variables.variable_name=Variable Name workspace.variables.variable_type=Variable-Typ workspace.variables.variable_scope=Variable Umfang workspace.variables.initial_value=Anfangswert workspace.variables.add_new=Neue Variable hinzufügen -workspace.variables.remove_selected=Ausgewählte löschen workspace.variables.help=Hilfe mit Variablen workspace.variables.change_type=Sind Sie sicher, dass Sie diese Variable ändern möchten?
Wenn diese Variable verwendet wird, könnte diese Aktion zu Kompilierungsfehlern führen.
Wenn Sie es gerade erstellt haben, ist es in Ordnung, es zu ändern. -workspace.variables.remove_variable_confirmation=Bist du dir sicher, diese Variable zu löschen?
Wenn diese Variable verwendet wird, könnte diese Aktion zu Kompilierungsfehlern führen. workspace.localization.add_entry=Lokalisierungs-Eintrag hinzufügen -workspace.localization.remove_selected=Ausgewählte löschen workspace.localization.export_to_csv=Aktuelle Sprache als CSV exportieren workspace.localization.import_csv=CSV in die aktuelle Sprache importieren workspace.localization.key_name_title=Schlüsselname workspace.localization.key_name_message=Geben Sie den Schlüsselnamen für Ihren benutzerdefinierten Spracheintrag ein\: workspace.localization.confirm_delete_map=Sind Sie sicher, dass Sie diese Lokalisierungskarte löschen möchten? -workspace.localization.confirm_delete_entry=Sind Sie sicher, dass Sie ausgewählte Einträge entfernen möchten?
HINWEIS\: Wenn sie noch verwendet werden, funktionieren die Namen der an sie gebundenen Elemente nicht\! workspace.localization.export_translation=Übersetzung exportieren workspace.localization.confirm_export=Standardübersetzung (en_us) kann nicht exportiert werden\!
Englische Texte werden in Mod-Elementen definiert. workspace.localization.warning_export=Sie können CSV nicht in die Standardübersetzung (en_us) importieren\!
Englische Texte werden in Mod-Elementen definiert. diff --git a/plugins/mcreator-localization/lang/texts_es_AR.properties b/plugins/mcreator-localization/lang/texts_es_AR.properties index 2f1c4f87ffb..94e3d303703 100644 --- a/plugins/mcreator-localization/lang/texts_es_AR.properties +++ b/plugins/mcreator-localization/lang/texts_es_AR.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=Ajustes de animación dialog.animation_maker.next_frame=Siguiente fotograma dialog.animation_maker.previous_frame=Fotograma anterior dialog.animation_maker.animation_timeline=Línea de tiempo de la animación -dialog.animation_maker.add_frames=Añadir fotograma(s)... -dialog.animation_maker.add_frames_from_template=Añadir fotogramas desde plantilla... -dialog.animation_maker.add_frames_from_strip=Añadir fotogramas desde la animación... -dialog.animation_maker.add_frames_from_gif=Añadir fotograma desde GIF... dialog.animation_maker.gif_importing=Importar GIF dialog.animation_maker.gif_reading=Leyendo GIF dialog.animation_maker.gif_processing=Procesando GIF @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=Limpieza de caches dialog.cache_cleanup.progress.stopping_daemons=Desactivar las acciones de fondo dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Limpiando la carpeta de caches dialog.cache_cleanup.progress.build_task=Ejecutando la tarea de build -dialog.code_error.compilation_desc=Uno o mas de los archivos principales del mod no se compiló correctamente.

Esto normalmente es causado por inconsistencias en el código de mod durante la build.
MCreator puede resolver este problema regenerando el código completo del mod.

Si ha bloqueado elementos o archivos base, también podria haber sido la causa del error.


Haga clic en Regenerar código para continuar con esta acción.
dialog.code_error.compilation_title=Errores al compilar el archivo del mod -dialog.code_error.compilation_list=Su espacio de trabajo contiene elementos de mod que no compilan correctamente.

Esto fue probablemente causado por el último elemento de mod que agregó o editó. Intente alterar la configuración de los elementos de mod
que causan errores de compilación (estos elementos se listan a continuación) para intentar solucionar este problema.

Si no puede resolver este problema, exportar el espacio de trabajo a archivo ZIP compartible desde el menú Archivo y enviarlo a través de
nuestro seguimiento de incidencias en GitHub para que podamos intentar ayudarle.

Lista de elementos del mod que causan errores de compilación (recortado hasta 10 elementos)\:

dialog.code_error.regenerate_code=Regenerar código dialog.code_error.ignore_error=Ignorar error dialog.code_error.show_in_workspace=Mostrar en el espacio de trabajo @@ -152,6 +146,7 @@ dialog.gui.button_add_title=Editor de botones dialog.gui.button_change_width=Después de tocar en Ok, haga click derecho para cambiar las proporciones del botón dialog.gui.button_resize=Para cambiar el tamaño del botón use la herramienta mover y precione click derecho dialog.gui.button_text=Texto del botón\: +dialog.gui.button_is_undecorated=¿El botón está sin decorar? dialog.gui.button_event_on_clicked=Al tocar el botón dialog.gui.button_display_condition=Condición para mostrar el botón dialog.gui.image_button_add_title=Editor de botón de imagen @@ -173,6 +168,16 @@ dialog.gui.model_rotation_x=Rotación del modelo en X en grados dialog.gui.model_follow_mouse=Seguir el movimiento del ratón con giro dialog.gui.add_tooltip=Editor de información dialog.gui.tooltip_display_condition=Condición de visualización de la información +dialog.gui.anchor=Anclar a\: +dialog.gui.anchor.top_left=Izquierda superior +dialog.gui.anchor.top_center=Centro superior +dialog.gui.anchor.top_right=Derecha superior +dialog.gui.anchor.center_left=Centro izquierda +dialog.gui.anchor.center=Centro +dialog.gui.anchor.center_right=Centro derecha +dialog.gui.anchor.bottom_left=Izquierda inferior +dialog.gui.anchor.bottom_center=Centro inferior +dialog.gui.anchor.bottom_right=Derecha inferior dialog.gradle_console.clear_log=Borrar informe dialog.gradle_console.search=Buscar en la consola dialog.gradle_console.start_build=Haga click en esto para ejecutar una build del espacio de trabajo
Puede comenzar una build usando Ctrl + haciendo click en la pestaña de Consola @@ -327,7 +332,12 @@ dialog.image_maker.tools.types.stamp=Sello dialog.image_maker.tools.types.stamp_description=Una herramienta para aplicar texturas de plantillas dialog.image_maker.tools.types.threshold=Límite\: dialog.image_maker.tools.types.shape=Forma\: +dialog.image_maker.tools.types.shape.square=CUADRADO +dialog.image_maker.tools.types.shape.frame=MARCO +dialog.image_maker.tools.types.shape.circle=CÍRCULO +dialog.image_maker.tools.types.shape.ring=ARO dialog.image_maker.tools.types.smooth_edge=Borde liso +dialog.image_maker.tools.types.pick_opacity=Herramienta cuentagotas de opacidad dialog.image_maker.tools.types.saturation=Saturación\: dialog.image_maker.tools.types.drawing_size=Tamaño\: dialog.image_maker.tools.types.drawing_connect_points=Conectar puntos @@ -338,7 +348,13 @@ dialog.image_maker.tools.component.colorselector_swap=Intercambiar colores de fo dialog.image_maker.tools.component.colorselector_select_foreground=Seleccionar color de adelante\: dialog.image_maker.tools.component.colorselector_select_background=Seleccionar color de fondo\: dialog.item_selector.title=Selector de bloque/objeto +dialog.item_selector.use_selected=Usar lo elegido dialog.item_selector.use_tag=Usar tag +dialog.item_selector.use_tag.entities=Usar etiqueta de entidad +dialog.item_selector.enter_tag_name.blocks=Escribe el nombre de la etiqueta del bloque debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.items=Escribe el nombre de la etiqueta del ítem debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.biomes=Escribe el nombre de la etiqueta del bioma debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.entities=Escribe el nombre de la etiqueta de la entidad debajo (ver la lista para plantillas)\:
dialog.item_selector.error_invalid_tag_name_title=Nombre de tag inválido dialog.item_selector.all=Todo dialog.item_selector.blocks=Bloques @@ -347,12 +363,18 @@ dialog.item_selector.potions=Pociones dialog.item_selector.custom_elements=Elementos personalizados dialog.item_selector.name=Nombre\: dialog.item_selector.display_filter=\ Mostrar filtro\: +dialog.list_editor.title=Editor de lista de cadena de texto +dialog.list_editor.add=Añadir entrada nueva +dialog.list_editor.clear=Eliminar todas las entradas +dialog.list_editor.validator=Lista de entradas +dialog.list_editor.errors.message=Algunas entradas en la lista no están bien definidas. +dialog.list_editor.errors.title=Entradas en la lista no válidas dialog.modelement_id.info_message=¡El código de este elemento está bloqueado\!
Cuando el código está bloqueado, MCreator no puede modificar su código fuente. dialog.modelement_id.info_message_title=El código del elemento está bloqueado dialog.modelement_id.registry_name=Nombre del elemento\: dialog.modelement_id.registry_name_info=Nombre del elemento (no todos los elementos lo usan) dialog.modelement_id.registry_name_validator=Nombre del elemento -dialog.modelement_id.use_caution_warn=Usa esta herramienta con cuidado\!

Cambiar las Ids registro puede corromper mundos existentes y
causar conflictos con otros elementos de tu mod\! +dialog.modelement_id.use_caution_warn=¡Use esta herramienta con cuidado\! Asegúrate de no usar nombres duplicados.

¡Cambiar nombres de registro puede corromper mundos existentes y causar
conflictos con otros elementos del mod\! dialog.modelement_id.id_and_registry_names="{0} - Nombre de registro" dialog.modelement_id.invalid_registry_name=¡El nombre de registro introducido es inválido\!
Los cambios no se han guardado. dialog.modelement_id.invalid_registry_name_title=Nombre de registro inválido @@ -393,6 +415,12 @@ dialog.preferences.themes.list=
Lista dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: tipo de propiedad desconocido +dialog.search_usages.type.resource.texture=textura +dialog.search_usages.type.resource.model=modelo +dialog.search_usages.type.resource.sound=sonido +dialog.search_usages.type.resource.structure=estructura +dialog.search_usages.type.global_variable=variable global +dialog.search_usages.type.localization_key=clave de localización dialog.sounds.name=Nombre del sonido dialog.sounds.registry_name=Nombre del sonido\:
Si renombra el sonido en uso, las referencias existentes se corromperán dialog.sounds.files=Archivos de sonido\: @@ -427,7 +455,6 @@ dialog.textures_mapping.title_for_model=Texturas del modelo dialog.textures_mapping.add_new=Añadir texturas al modelo dialog.textures_mapping.enter_name_message=Introduzca el nombre de sus texturas.
Este nombre se utiliza para identificar sus texturas cuando
selecciona texturas para su modelo. dialog.textures_mapping.enter_name_title=Texturas nuevas -dialog.textures_mapping.jump_to=Saltar a... dialog.textures_mapping.save=Guardar texturas dialog.textures_mapping.model_texture_part=Parte de texturas del modelo\:
{0} dialog.textures_mapping.confirm_deletion_message=¿Está seguro de que desea eliminar estas texturas?
¡Puede obtener texturas corrompidas si aún están en uso\! @@ -550,7 +577,6 @@ workspace.elements.list.filter_all=Mostrar todos workspace.elements.list.filter_locked=Elementos bloqueados workspace.elements.list.filter_witherrors=Elementos con errores workspace.elements.list.ascending=Ascendente -workspace.category.mod_elements=Elementos del mod workspace.category.resources=Recursos workspace.category.variables=Variables workspace.category.localization=Idiomas @@ -567,14 +593,15 @@ workspace.elements.list.edit.delete=Eliminar workspace.elements.list.edit.duplicate=Duplicar elemento... workspace.elements.list.edit.code=Abrir elemento en un editor de código workspace.elements.list.edit.lock=Bloquear / Desbloquear -workspace.elements.list.edit.id=Editar ID del elemento... +workspace.elements.list.edit.id=Editar nombres de registro... workspace.elements.list.edit.add.folder=Añadir carpeta... workspace.elements.list.edit.rename.folder=Renombrar la carpeta seleccionada... -workspace.elements.confirm_delete_message=¿Está seguro de que quiere eliminar los elementos seleccionados ({0})?

Si otros elementos usan información de estos (Como una receta, Tab o evento) tendrá
que eliminarlos también. De otro modo habrá errores.

Elementos en carpetas y subcarpetas serán movidos a la carpeta base workspace.elements.delete.tooltip=Eliminar el elemento seleccionado workspace.elements.edit_code.tooltip=Editar código del elemento seleccionado workspace.elements.lock_code_tooltip=Bloquear/Desbloquear código de elementos
Al bloquear el código, MCreator no lo cambiará, por eso se vuelve editable
desde el punto de vista del programador y no cambia incluso al cambiarlo de espacio de trabajo.
¡Use esta opción sólo si sabe como y es conciente del riesgo que conlleva
bloquear el código\! -workspace.elements.edit_registry_names.tooltip=Editar las IDs de los elementos del mod +workspace.elements.edit_registry_names.not_possible_message=No es posible utilizar esta herramienta para editar nombres de registro de este tipo de elemento. +workspace.elements.edit_registry_names.not_possible_title=No es posible editar nombre de registro +workspace.elements.edit_registry_names.tooltip=Editar nombres de registro workspace.elements.empty.tip=Presione %1 para añadir elementos workspace.elements.lock_modelement_message=¡Estás intentando bloquear o desbloquear el código de un elemento\!

Al bloquearlo, MCreator no lo cambiará, incluso si
al actualizarse esto implique no solucionar errores
en los elementos bloqueados.

Los elementos seleccionados y bloqueados se desbloquearán con esta acción.
Esto implica que los elementos con códigos personalizados se verán modificados.

Por favor lea la página en la Web de MCreator sobre bloqueo de elementos antes de usar esta opción. workspace.elements.lock_modelement_confirm=¿Bloquear o desbloquear el código de este elemento? @@ -648,8 +675,6 @@ trigger.entity_travels_to_dimension=Al entidad cambiar de dimensión trigger.entity_uses_totem=La entidad usa un tótem trigger.explosion_occurs=Al suceder una explosión trigger.farmland_trampled=Al ser pisoteada la tierra de cultivo -trigger.gem_dropped=Al soltar una gema -trigger.gem_expired=Gema expira trigger.item_crafted=Al objeto ser creado trigger.item_destroyed=Al objeto ser destruido trigger.item_smelted=Al fundirse el objeto @@ -682,9 +707,26 @@ trigger.sapling_glow=Al crecer un brote trigger.village_siege=Al zombies atacar una aldea trigger.world_ticks=Cada tick del mundo trigger.no_ext_trigger=Sin evento adicional +blockly.category.blockprocedures=Procedimientos de bloque +blockly.category.blockactions=Acciones +blockly.category.blockdata=Datos +blockly.category.energyandfluid=Energía & fluido +blockly.category.damagesources=Procedimientos de daño blockly.category.directionactions=Cuadros de dirección +blockly.category.entityprocedures=Procedimientos de entidad +blockly.category.entitydata=Datos +blockly.category.entitymanagement=Acciones +blockly.category.itemdata=Datos +blockly.category.itemmanagement=Acciones +blockly.category.itemprocedures=Procedimientos de ítem +blockly.category.playerprocedures=Procedimientos de jugador +blockly.category.playerdata=Datos +blockly.category.playermanagement=Acciones blockly.category.projectilemanagement=Cuadros de proyectiles blockly.category.guimanagement=Slot & Procedures de la GUI +blockly.category.worldprocedures=Procedimientos de mundo +blockly.category.worlddata=Datos +blockly.category.worldmanagement=Acciones blockly.category.basictasks=Tareas básicas blockly.category.combattasks=Tareas de combate blockly.category.movementtasks=Tareas de movimiento @@ -714,6 +756,7 @@ blockly.category.intproviders=Proveedores de entero blockly.category.heightplacements=Posicionamiento de altura blockly.category.orefeatures=Características de mena blockly.category.placements=Posicionamientos comunes +blockly.category.treefeatures=Detalles de árbol blockly.category.arg_types=Parámetros blockly.category.actions=Acciones blockly.block.action_result_type=Resultado de la acción del tipo %1 @@ -774,6 +817,7 @@ blockly.block.blockat_is_solid=El bloque en x\: %1 y\: %2 z\: %3 es sólido blockly.block.blockat_is_side_solid=El lado %1 del bloque en x\: %2 y\: %3 z\: %4 es sólido blockly.block.blockat_lightlevel=Nivel de luz del bloque en x\: %1 y\: %2 z\: %3 blockly.block.blockat_opacity=Opacidad del bloque en x\: %1 y\: %2 z\: %3 +blockly.block.blockat_plant_type=Hay un bloque en x\: %1 y\: %2 z\: %3 de tipo de planta %4 blockly.block.blockitem_to_mcitem=Convertir %3 %1 en %2 blockly.block.blockstate_from_deps=Estado en cuestión del bloque blockly.block.blockstate_get_boolean_property=Obtener propiedad booleana %1 de %3 %2 @@ -787,6 +831,7 @@ blockly.block.blockstate_with_integer_property=%1 con propiedad entera %2 establ blockly.block.compare_blockstates=Es %3 %1 el mismo Estado de bloqueo que %4 %2 blockly.block.compare_dimensionids=%1 \= %2 blockly.block.compare_directions=%1 \= %2 +blockly.block.compare_entities=Es %1 la misma entidad que %2 blockly.block.compare_mcblocks=Es %3 %1 el mismo bloque que %4 %2 blockly.block.compare_mcitems=%3 %1 \= %4 %2 blockly.block.compare_mcitems_oredictionary=Está %1 tagged en tags de objetos como %2 @@ -819,10 +864,18 @@ blockly.block.entity_allow_flying=Permitir a %2 volar si %1 sino no blockly.block.entity_armor_value=Valor de armadura de %1 blockly.block.entity_canusecommand=%2 tiene permisos de comandos nivel %1 blockly.block.entity_check_creature_type=Es %1 un tipo de criatura %2 +blockly.block.entity_checkgamemode=Está %1 en modo de juego %2 blockly.block.entity_clear_inventory=Vaciar inventario de %1 blockly.block.entity_clearpotions=Quitar efectos de poción de %1 blockly.block.entity_close_gui=Cerrar GUIs abiertas de %1 blockly.block.entity_create=%1 instancia de entidad estática de tipo %2 (no generar) +blockly.block.entity_data_logic_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos lógicos %3 +blockly.block.entity_data_logic_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos lógicos %3 a %4 +blockly.block.entity_data_integer_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos enteros %3 +blockly.block.entity_data_integer_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos enteros %3 a %4 +blockly.block.entity_data_string_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos de texto %3 +blockly.block.entity_data_string_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos de texto %3 a %4 +blockly.block.entity_deal_custom_damage=Infligir %1 de daño personalizado a %2 localizado como death.attack.%3(.player/.item) blockly.block.entity_despawn=Despawnear %1 %2 blockly.block.entity_dimension_id=ID de la dimensión %1 está en blockly.block.entity_direction=Dirección (yaw) en punto relativo a S de %1 @@ -836,9 +889,8 @@ blockly.block.entity_get_armor_slot_item=Objeto en el slot de armadura %1 de %2 blockly.block.entity_get_controlling_passenger=%2 Obtener pasajero que controle %1 blockly.block.entity_get_first_passenger=%2 Obtén el primer pasajero de %1 blockly.block.entity_get_fire_ticks=Obtén ticks restantes en fuego de %1 -blockly.block.entity_get_fly_speed=Velocidad del vuelo de %1 blockly.block.entity_get_oxygen=Oxígeno de %1 -blockly.block.entity_get_root_vehicle=Obtén la entidad más baja que %1 está montando, o si no monta nada +blockly.block.entity_get_percent_frozen=Obtener porcentaje estático de %1 blockly.block.entity_get_saturation=Nivel de saturación de %1 blockly.block.entity_get_scoreboard_score=Puntos en el scoreboard de %2 para %1 blockly.block.entity_get_shootpower=Poder de disparo de %1 si es un proyectil @@ -847,7 +899,7 @@ blockly.block.entity_get_spawn_x=Obtén coordenada de aparición X de %1 para su blockly.block.entity_get_spawn_y=Obtén coordenada de aparición Y de %1 para su mundo actual %2 blockly.block.entity_get_spawn_z=Obtén coordenada de spawn Z de %1 para su mundo actual %2 blockly.block.entity_get_stepheight=Obtener altura del paso de %1 -blockly.block.entity_get_walk_speed=Velocidad de la caminata de %1 +blockly.block.entity_get_uuid=Obtener UUID de %1 blockly.block.entity_getowner=%2 Dueño de %1 si está domesticado blockly.block.entity_getridingentity=%2 Entidad %1 está montando blockly.block.entity_gettargetentity=%2 Entidad %1 está persiguiendo para atacar @@ -860,10 +912,12 @@ blockly.block.entity_haspotioneffect=Tiene %1 poción activa %2 blockly.block.entity_health=Vida actual de %1 blockly.block.entity_health_max=Vida máxima de %1 blockly.block.entity_inventory_foreach=Por cada slot en el inventario de %1 copiar contenido como %2 hacer %3 +blockly.block.entity_is_attackable=Puede %1 ser atacado blockly.block.entity_is_elytra_flying=Está %1 volando con una elitra blockly.block.entity_is_glowing=Esta %1 brillando blockly.block.entity_is_swimming=Está %1 nadando blockly.block.entity_is_tagged_in=Está %1 tagged en tags de entidades como %2 +blockly.block.entity_is_underwater=%1 está bajo el agua blockly.block.entity_isalive=Está %1 vivo blockly.block.entity_isbeingridden=Está %1 siendo montado blockly.block.entity_isblocking=Está %1 bloqueando @@ -934,7 +988,9 @@ blockly.block.entity_set_display_name=Fijar nombre visual de %2 a %1 blockly.block.entity_set_fire=Hacer arder a %2 por %1 segundos blockly.block.entity_set_flying=Hacer volar a %2 si %1 sino no blockly.block.entity_set_foodlevel=Fijar nivel de comida de %2 a %1 +blockly.block.entity_set_gamemode=Fijar modo de juego de %1 a %2 blockly.block.entity_set_health=Fijar vida de %2 a %1 +blockly.block.entity_set_invisible=Fijar invisibilidad de %1 a %2 blockly.block.entity_set_mainhand_item=Establecer objeto en la mano principal de %3 como %2 %1 blockly.block.entity_set_movement=Intentar anular el vector de movimiento de %4 a vx\: %1 vy\: %2 vz\: %3 blockly.block.entity_set_nogravity=Que no afecte la gravedad a %1 %2 @@ -957,9 +1013,6 @@ blockly.block.entity_submerged_height=Altura sumergida de %1 blockly.block.entity_swing_mainhand=Rotar mano principal de %1 blockly.block.entity_swing_offhand=Rotar mano secundaria de %1 blockly.block.entity_switch_dimension=Cambiar dimensión de %1 a %2 -blockly.block.entity_vel_x=Velocidad X de %1 %2 -blockly.block.entity_vel_y=Velocidad Y de %1 %2 -blockly.block.entity_vel_z=Velocidad Z de %1 %2 blockly.block.entity_xplevel=Nivel de experiencia de %1 blockly.block.entity_xp_until_next_level=Obtén la cantidad de XP necesaria por %1 para ganar un nivel blockly.block.execute_command=Ejecutar comando /%1 en x\: %2 y\: %3 z\: %4 %5 @@ -996,9 +1049,11 @@ blockly.block.item_cooldown_for=Dar cooldown %3 por %1 ticks a %2 blockly.block.item_damage=Aplicar %1 de daño a %2 blockly.block.item_enchanted_with_xp=%1 encantado con %2 niveles de experiencia, encantamientos tesoro\: %3 blockly.block.item_fuel_power=Capacidad de fundición de %1 +blockly.block.item_get_cooldown=Obtener el porcentaje de enfriamiento restante de %2 para %1 blockly.block.item_get_damage=Daño de %1 blockly.block.item_get_enhancement=Consigue el nivel de encantamiento %2 de %1 blockly.block.item_get_max_damage=Daño máximo posible de %1 +blockly.block.item_is_cooldown=Está %2 en enfrentamiento para %1 blockly.block.item_is_enchantable=Es %1 encantable blockly.block.item_is_enchanted=Está %1 encantado blockly.block.item_istype=Es %1 del tipo de objeto %2 @@ -1041,6 +1096,7 @@ blockly.block.math_random_int_between=Entero aleatorio entre min\: %1 y max\: %2 blockly.block.math_random_number_between=Número aleatorio entre min\: %1 y max\: %2 blockly.block.mcitem_to_block=Convertir %2 %1 a %3 o a aire si la conversión falla blockly.block.move_entity=Fijar locación de %4 a x\: %1 y\: %2 z\: %3 +blockly.block.place_schematic=Colocar archivo de estructura NBT %6 %7 en x\: %1 y\: %2 z\: %3 con rotación\: %4 espejo\: %5 %8 blockly.block.projectile_shoot_from_entity=Dispara %1 desde la entidad\: %2 con velocidad\: %3 imprecisión\: %4 %5 blockly.block.projectile_shoot_from_pos=Disparar %1 de x\: %2 y\: %3 z\: %4 con dirección dx\: %5 dy\: %6 dz\: %7 velocidad\: %8 inprecisión\: %9 %10 blockly.block.projectiles_arrow=Flecha de tipo %1 con daño\: %2 empuje\: %3 perforador\: %4 disparador\: %5 fuego\: %6 partículas\: %7 tipo de recogida\: %8 @@ -1053,7 +1109,7 @@ blockly.block.set_time=Fijar hora a %1 %2 blockly.block.spawn_entity=Invocar entidad\: %4 en x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Generar %6 en x\: %1 y\: %2 z\: %3 con yaw\: %4 pitch\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Generar %9 en x\: %1 y\: %2 z\: %3 con yaw\: %4 pitch\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Generar objeto/gema %1 en x\: %2 y\: %3 z\: %4 tiempo para agarrar\: %5 desaparecer\: %6 %7 +blockly.block.spawn_gem=Generar ítem soltado %1 en x\: %2 y\: %3 z\: %4 retraso de recogida\: %5 desaparición\: %6 %7 blockly.block.spawn_particle=Generar una única partícula en x\: %1 y\: %2 z\: %3 con vx\: %4 vy\: %5 vz\: %6 de tipo\: %7 blockly.block.spawn_particle_multi=Generar %8 partículas en el lado del servidor en x\: %1 y\: %2 z\: %3 en área dx\: %4 dy\: %5 dz\: %6 con velocidad %7 de tipo\: %9 %10 blockly.block.spawn_xporb=Generar orbe de experiencia en x\: %2 y\: %3 z\: %4 con cantidad de experiencia de %1 %5 @@ -1109,13 +1165,16 @@ blockly.block.attack_on_collide=Haz un ataque cuerpo a cuerpo/de contacto con el blockly.block.attack_with_range=Haz un ataque cuerpo a cuerpo con el factor de velocidad %2 %1 (perseguir después de perder la vista %3) %4 blockly.block.avoid_entity=Evitar entidad de tipo %4 en radio %1 velocidad cercana %2 velocidad lejana %3 %5 blockly.block.break_blocks=Romper bloques de tipo %2 velocidad %1 altura máxima de detección %3 %4 +blockly.block.find_and_move_to_air=Encontrar y moverse hacia aire %1 blockly.block.breed=Cría, encuentra pareja con velocidad %1 si animal %2 +blockly.block.climb_powder_snow=Trepar encima de nieve en polvo %1 blockly.block.doors_break=Romper puertas %1 blockly.block.doors_close=Cerrar puertas %1 blockly.block.doors_open=Puertas abiertas %1 blockly.block.eat_grass=Comer hierba %1 blockly.block.fight_as_owner=Dañar entidades a las que el dueño atacó un %1 blockly.block.fly=Vuela alrededor con el multiplicador de velocidad %1 (solo para entidades voladoras) %2 +blockly.block.follow_boat=Seguir un barco %1 blockly.block.follow_entity=Seguir a criaturas iguales con velocidad %1, máxima distancia %2 y área de seguimiento %3 %4 blockly.block.follow_item_in_hands=Seguir a quién tenga %2 en la mano con velocidad %1 se asusta del movimiento %3 %4 blockly.block.follow_owner=Seguir al dueño con velocidad %1 distancia mínima %2 distancia máxima %3 si está domesticado %4 @@ -1128,7 +1187,7 @@ blockly.block.protect_owner=Dañar entidades que atacaron al dueño %1 blockly.block.restrict_sun=Restringir el sol %1 blockly.block.swim=Nadar erraticamente con velocidad %1 %2 blockly.block.swim_in_water=Flota en el agua %1 -blockly.block.watch_closest_entity=Vigilar a la entidad más cercana de tipo %2 en un radio de %1 %3 +blockly.block.try_and_find_water=Intentar encontrar agua %1 blockly.block.wander=Vagar (activa caminar) con velocidad %1 %2 blockly.block.wander_avoid_water=Vagar evitando agua con velocidad %1 %2 blockly.block.biome_entered=Si el jugador entra en el bioma %1 @@ -1182,6 +1241,7 @@ blockly.block.block_predicate_any_of=Se cumple cualquier condición\: blockly.block.block_predicate_any_of.empty=(Nunca) blockly.block.block_predicate_any_of.input=condición\: blockly.block.block_predicate_inside_world=Posición desplazada por x\: %1 y\: %2 z\: %3 está dentro de los límites del mundo +blockly.block.block_predicate_has_sturdy_face=Bloque en posición de desplazada x\: %1 y\: %2 z\: %3 tiene la cara sólida %4 blockly.block.block_predicate_is_air=Hay aire en la posición actual blockly.block.block_predicate_is_air_or_water=Es aire o agua en la posición actual blockly.block.block_predicate_matching_blocks=Bloque en posición de desplazamiento x\: %2 y\: %3 z\: %4 está en la lista de bloques o tiene la tag\: %1 @@ -1200,6 +1260,7 @@ blockly.block.feature_block_column_simple=Función de columna de bloque con altu blockly.block.feature_coral_claw=Función de garra de coral submarino blockly.block.feature_coral_mushroom=Función de champiñón de coral submarino blockly.block.feature_coral_tree=Característica del árbol de coral subacuático +blockly.block.feature_custom_structure=Estructura personalizada\: %1 %2 desplazada por x\: %3 y\: %4 z\: %5 %6 con rotación aleatoria\: %7 %8 volteo aleatorio\: %9 %10 no colocar bloques en la lista de bloques o etiqueta\: %11 blockly.block.feature_delta=Característica delta con contenido\: %1 borde\: %2 tamaño\: %3 tamaño\: %4 blockly.block.feature_forest_rock=Función de roca del bosque con bloque\: %1 blockly.block.feature_geode_simple=Característica de geodas con tamaño %1 %2 no puede reemplazar los bloques en la etiqueta\: %3 %4 descartar si %5 bloques en la etiqueta %6 se encuentran %7 llenando\: %8 capa interna\: %9 variante de cambio\: %10 capa media\: %11 capa externa\: %12 @@ -1226,6 +1287,9 @@ blockly.block.feature_simple_random_mutator.input=Característica blockly.block.feature_simple_random_selector=Característica aleatoria de la lista\: blockly.block.feature_simple_random_selector.input=característica\: blockly.block.feature_simple_random_selector.empty=La lista no puede estar vacía +blockly.block.feature_tree.decorator_input=decorador\: +blockly.block.feature_tree_pine.empty=(Ninguno) +blockly.block.feature_tree_simple.empty=(Ninguno) blockly.block.placed_feature_inline=Característica configurada\: %1 con posición extra\: %2 blockly.block.placed_feature_inline.disabled_placement=Esta colocación no se puede utilizar dentro de las características colocadas en línea blockly.block.placement_biome_filter=Sólo si el bioma en la posición actual tiene esta característica @@ -1408,6 +1472,7 @@ modelement.plant=Planta modelement.potioneffect=Efecto de poción modelement.potion=Objeto de poción modelement.procedure=Procedure +modelement.projectile=Proyectil modelement.recipe=Receta modelement.structure=Estructura modelement.tab=Tab del creativo @@ -1946,6 +2011,7 @@ elementgui.block.error_block_must_have_name=El bloque debe tener un nombre elementgui.block.page_tile_entity=Bloque de entidad elementgui.block.page_energy_fluid_storage=Almacenamiento de energía y fluidos elementgui.command.name=Nombre del comando (sin /)\: +elementgui.command.type=Tipo\: elementgui.command.permission_level=Nivel de permisos para ejecutarlo\:
Nivel mínimo para ejecutar el comando elementgui.command.warning.empty_string=El comando no puede estar vacío elementgui.command.arguments=Parámetros de comando y generador de acciones @@ -1969,7 +2035,6 @@ elementgui.dimension.biomes_in=Biomas en la dimensión\: elementgui.dimension.main_filler_block=Bloque base para rellenar\:
Normal, Nether, End elementgui.dimension.fluid_block=Fluido\:
Normal, Nether, End elementgui.dimension.sleep_result=Resultado de intentar dormir\: -elementgui.dimension.fog_air_color=Color del cielo/niebla\:
Deje en POR DEFECTO para que funcione como en Minecraft elementgui.dimension.enable_dimension_portal=Activar portal para la dimensión\: elementgui.dimension.portal_frame_block=Bloque del marco del portal\: elementgui.dimension.portal_particles=Partículas para el bloque del marco\: @@ -1993,8 +2058,6 @@ elementgui.enchantment.curse=¿Es este encantamiento una maldición? elementgui.enchantment.allowed_on_books=¿Libros pueden estar encantados con este encantamiento? elementgui.enchantment.can_generate_in_loot_tables=¿Puede este encantamiento generar tablas de botín? elementgui.enchantment.can_villager_trade=¿Puede este encantamiento aparecer en comercios de aldeanos? -elementgui.enchantment.compatible_enchantments=Se puede combinar con\:
Dejar en blanco para seleccionar todos -elementgui.enchantment.can_apply_to=Se puede aplicar a\:
Deje en blanco para seleccionar todos elementgui.enchantment.needs_name=El encantamiento necesita un nombre elementgui.gamerule.name=Nombre visual\: elementgui.gamerule.display_name=Nombre de la regla del juego\:
Este nombre se usará en la pestaña de configuración de reglas del juego @@ -2100,6 +2163,7 @@ elementgui.item.number_of_uses=Durabilidad del objeto (Deje 0 para que no elementgui.item.is_immune_to_fire=¿Es inmune al fuego? elementgui.item.recipe_remainder=Receta que deja
Asegúrese de maracar "¿No se gasta al usarse en una receta?" y deje en blanco para usar el artículo actual. elementgui.item.damage_vs_entity=Daño que infringe a mobs\:
Daño cuerpo a cuerpo +elementgui.item.glowing_effect=¿Ítem tiene efecto de brillo? elementgui.item.item_3d_model=Modelo 3D del objeto elementgui.item.bind_gui=Enlace este objeto a la GUI\:
Establecer a <NONE> para desactivar el inventario elementgui.item.inventory_size=Tamaño del inventario (cantidad de slots)\:
Establecer este valor a la ID de slot más grande en el GUI + 1 @@ -2130,6 +2194,9 @@ elementgui.item.custom_states.add=Añadir definición de estado elementgui.item.custom_state.model=Modelo 3D del objeto\: elementgui.item.custom_state.remove=Eliminar este estado elementgui.item.page_item_states=Estados del objeto +elementgui.item.projectile=Proyectil que dispara\: +elementgui.item.shoot_constantly=¿Disparar constantemente cuando está activo? +elementgui.item.error_needs_name=Comida necesita un nombre elementgui.item.error_item_needs_name=El objeto necesita un nombre elementgui.keybind.event_key_pressed=Al ser presionada elementgui.keybind.event_key_released=Al ser soltada @@ -2139,8 +2206,8 @@ elementgui.keybind.key_binding_category=Tecla vinculada a la categoría de tradu elementgui.keybind.key_procedure_triggers=Eventos de la acción ejecutada elementgui.keybind.error_key_needs_name=La acción necesita un nombre elementgui.keybind.error_key_category_needs_name=Nombre de la categoría de la acción +elementgui.living_entity.condition_solid_bounding_box=¿La caja delimitadora es sólida? elementgui.living_entity.disable_collisions=Deshabilitar colisiones -elementgui.living_entity.has_ai=Habilitar IA
Al utilizar la IA, asegúrese de tener algunas tareas de IA definidas a continuación elementgui.living_entity.immune_fire=Fuego elementgui.living_entity.immune_arrows=Flechas elementgui.living_entity.immune_fall_damage=Daño por caída @@ -2148,18 +2215,21 @@ elementgui.living_entity.immune_cactus=Cactus elementgui.living_entity.immune_drowning=Agua (Ahogarse) elementgui.living_entity.immune_lightning=Rayo elementgui.living_entity.immune_potions=Efectos de poción +elementgui.living_entity.immune_player=Cuerpo a cuerpo de jugador elementgui.living_entity.immune_explosions=Explosiones elementgui.living_entity.immune_trident=Tridentes elementgui.living_entity.immune_anvil=Yunque elementgui.living_entity.immune_wither=Wither +elementgui.living_entity.immune_dragon_breath=Aliento de Dragón +elementgui.living_entity.is_water_mob=Agua es entidad +elementgui.living_entity.condition_can_breathe_underwater=Puede respirar bajo el agua +elementgui.living_entity.condition_fluids_can_push=Es empujado por fluidos elementgui.living_entity.is_flying_mob=Es la entidad voladora (La gravedad no le afecta) elementgui.living_entity.spawn_dungeons=Se generar en mazmorras elementgui.living_entity.is_rideable=Se puede montar elementgui.living_entity.control_forward=Control de movimiento hacia adelante elementgui.living_entity.control_strafe=Control de movimiento especial -elementgui.living_entity.is_breedable=Hacer esta entidad tipo animal, objeto de reproducción\:
La entidad base y el tipo de comportamiento se ignorarán si se marca elementgui.living_entity.is_tameable=Se puede domesticar -elementgui.living_entity.is_ranged=Haz que la entidad haga ataques a distancia de con un objeto, intervalo de ataque y radio\:
Añade al menos un Actúa de forma agresiva contra tareas de IA para definir objetivos de ataque.
Si se selecciona "Elemento predeterminado", selecciona el objeto proyectil o mantén vacío para usar la flecha elementgui.living_entity.event_struck_by_lightning=Al ser impactado por un rayo elementgui.living_entity.event_mob_falls=Al caerse elementgui.living_entity.event_mob_dies=Al morir @@ -2170,7 +2240,8 @@ elementgui.living_entity.event_mob_tick_update=Al estar viva elementgui.living_entity.event_player_collides_with=Al jugador colisionar con la entidad elementgui.living_entity.event_initial_spawn=Al generarse elementgui.living_entity.condition_natural_spawn=Condición de generación -elementgui.living_entity.behaviour=Características de comportamiento (Los mobs son agresivos, las criaturas son pacíficas)\: +elementgui.living_entity.condition_is_model_transparent=¿Modelo de entidad es transparente? +elementgui.living_entity.condition_is_shaking=¿Modelo de entidad está agitando? elementgui.living_entity.creature_type=Tipo de criatura (define algunos atributos especiales)\: elementgui.living_entity.follow_range_tracking_range=Distancia de seguimiento, distancia de rastreo\: elementgui.living_entity.movement_speed_step_height=Velocidad de movimiento, altura del paso\: @@ -2183,7 +2254,6 @@ elementgui.living_entity.name=Nombre de la entidad\: elementgui.living_entity.entity_model=Modelo de la entidad\:
Aceptados\: JAVA elementgui.living_entity.entity_model_import=Toque acá para importar una textura para la entidad elementgui.living_entity.texture=Textura de la entidad\:
La textura necesita encajar con el modelo (No use skins de jugadores para bípedos, no funcionarán) -elementgui.living_entity.glow_texture=Textura brillante de la entidad (Optativo)\:
Para hacer texturas brillantes, no emitirán luz elementgui.living_entity.bounding_box=Caja de colisión de la entidad\:
Ancho, profundidad, altura, tamaño de la sombra, Posición Y de la entidad montada elementgui.living_entity.spawn_egg_options=Opciones del generador (Huevo)\:
Habilitar, color principal, color secundario y tab del creativo elementgui.living_entity.mob_boss=La entidad tiene una barra de vida de jefe final\: @@ -2205,14 +2275,22 @@ elementgui.living_entity.does_spawn_in_dungeons=¿Esta entidad aparece en mazmor elementgui.living_entity.spawn_general_condition=Condición de generación personalizada\:
Si usa una condición personalizada se sobrescribirá el tipo de generación
Sin embargo, la probabilidad de generación si se utilizará.
elementgui.living_entity.bind_to_gui=Ligar esta entidad a una GUI\:
Deje en blanco para desactivar el inventario (Querrá eso en la mayoría de los casos)
elementgui.living_entity.inventory_size=Tamaño del inventario (cantidad de slots)\:
Establecer este valor a la ID de slot más grande en el GUI + 1 +elementgui.living_entity.entity_data=Accesores de datos de entidad
Sincronizados entre los lados del cliente y el servidor +elementgui.living_entity.entity_data_entries=Entradas de datos +elementgui.living_entity.entity_data_entries.name=Nombre\: +elementgui.living_entity.entity_data_entries.type=Tipo\: +elementgui.living_entity.entity_data_entries.default_value=Valor por defecto\: +elementgui.living_entity.entity_data_entries.add_entry=Añadir nueva entrada +elementgui.living_entity.entity_data_entries.add_entry.name=Nombre de la entrada de datos\: +elementgui.living_entity.entity_data_entries.add_entry.type=Tipo de entrada de datos\: +elementgui.living_entity.entity_data_entries.add_entry.title=Nueva entrada de datos elementgui.living_entity.error_entity_model_needs_texture=El modelo de la entidad necesita una textura elementgui.living_entity.error_entity_needs_name=La entidad necesita un nombre elementgui.living_entity.page_visual=Visual elementgui.living_entity.page_sound=Sonido -elementgui.living_entity.page_behaviour=Comportamiento +elementgui.living_entity.page_entity_data=Datos sincronizados elementgui.living_entity.page_ai_and_goals=AI y objetivos elementgui.living_entity.page_spawning=Generación -elementgui.loot_table.name=LootTable elementgui.loot_table.registry_name=Nombre de registro de la LootTalbe\:
Use prefijos como "blocks/" para especificar categorías elementgui.loot_table.namespace=Espacio de nombre de la LootTable
Usar nombres de Minecraft para modificar LootTables Vanilla elementgui.loot_table.type=Tipo de LootTable\: @@ -2346,6 +2424,14 @@ elementgui.procedure.confirm_delete_var_msg=¿Está seguro de que desea el elementgui.procedure.required_dependencies=Dependencias requeridas elementgui.procedure.provided_dependencies=\ Dependencias proporcionadas elementgui.procedure.external_trigger_does_not_provide_all_dependencies=¡El evento que seleccionó no proporciona
todas las dependencias que su procedure requiere\! +elementgui.projectile.damage=Daño por defecto del proyectil\: +elementgui.projectile.ignite_fire=¿El proyectil empieza a arder al impacto? +elementgui.projectile.action_sound=Sonido de acción de lanzamiento de proyectil\: +elementgui.projectile.event_hits_block=Cuando el proyectil alcanza un bloque +elementgui.projectile.event_hits_player=Cuando el proyectil alcanza a un jugador +elementgui.projectile.event_hits_entity=Cuando el proyectil alcanca una entidad viva +elementgui.projectile.event_flying_tick=Tick mientras el proyectil vuela +elementgui.projectile.error_custom_model_needs_texture=Modelo personalizado de proyectil necesita una textura elementgui.recipe.is_shapeless=¿Es una receta sin posición? elementgui.recipe.definition=Definición de la receta elementgui.recipe.crafting_book_category=Categoría del libro de fabricación\: @@ -2367,9 +2453,16 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=La receta de elementgui.recipe.error_brewing_no_input_ingredient_and_result=La receta de la elaboración necesita tener una entrada, un ingrediente y una salida definidos (el aire no cuenta) elementgui.structuregen.event_structure_instance_generated=Al generarse la estructura elementgui.structuregen.import_tooltip=Toque acá para importar el archivo de estructura NBT
Use la sección de estructuras en el espacio de trabajo para más opciones. -elementgui.structuregen.select_tooltip=Estructura a generar\:
Para más opciones, use la sección de estructuras del espacio de trabajo elementgui.structuregen.ignore_blocks=Bloques a ignorar al colocar\: -elementgui.structuregen.error_select_structure_spawn=Necesita seleccionar una estructura que será generada para continuar. +elementgui.structuregen.surface_detection_type=Tipo de referencia de detección de suelo\: +elementgui.structuregen.terrain_adaptation=Tipo de adaptación del terreno\: +elementgui.structuregen.generation_stage=Etapa de generación\: +elementgui.structuregen.biomes_to_spawn=Biomas en los que generar la estructura\: +elementgui.structuregen.projection=Proyección al terreno\: +elementgui.structuregen.separation_spacing=Distribución de estructuras por chunk\: +elementgui.structuregen.separation=Separación\: +elementgui.structuregen.spacing=Espaciamiento\: +elementgui.structuregen.error_select_biomes=Selecciona al menos un bioma en el que esta estructura se genera elementgui.tab.name=Nombre de la tab\: elementgui.tab.icon=Ícono de la tab\: elementgui.tab.search_bar=Mostrar barra de búsqueda\: @@ -2437,11 +2530,6 @@ workspace.resources.tab.structures=Estructuras workspace.resources.tab.screenshots=Capturas de pantalla workspace.textures.new=Crear nueva textura workspace.textures.import=Importar texturas -workspace.textures.edit_selected=Editar... -workspace.textures.duplicate_selected=Duplicar... -workspace.textures.delete_selected=Eliminar -workspace.textures.export_selected=Exportar... -workspace.textures.confirm_deletion_message=¿Está seguro de que quiere eliminar este archivo?
Nota\: Si usó este archivo donde sea, podrían romperse texturas. workspace.textures.select_dupplicate_type=Seleccione el tipo de textura en la que quiere duplicar\: workspace.textures.select_texture_type=¿Qué tipo de textura es? workspace.textures.category.block=Texturas para bloques\: @@ -2453,47 +2541,29 @@ workspace.textures.category.screen=Texturas para pantallas (logros, GUIs, Imáge workspace.textures.category.armor=Texturas para armaduras\: workspace.textures.category.other=Otras texturas (pinturas, logo, ...)\: workspace.3dmodel.description={0}
Mapeo de Textura\: {1} -workspace.3dmodels.edit_texture_mappings=Editar texturas del modelo... -workspace.3dmodels.redefine_animations=Definir animaciones del modelo... -workspace.3dmodels.delete_selected=Eliminar -workspace.3dmodels.delete_confirm_message=¿Está seguro de que desea eliminar este modelo?
Nota\: Si ya usa este modelo dónde sea, podría romper las texturas
y algunos elementos podrían no funcionar. -workspace.3dmodels.regenerating_code=Regenerando código -workspace.3dmodels.regenerating_entity_code=Regenerando código de las entidades -workspace.3dmodels.rebuilding_workspace=Recompilando espacio de trabajo workspace.3dmodels.animation_unsupported_title=Animaciones no aceptadas workspace.3dmodels.animation_unsupported_message=¡Este modelo no funciona con animaciones\! workspace.3dmodels.mappings_unsupported_title=Sin texturas workspace.3dmodels.mappings_unsupported_message=¡Este modelo no funciona con esto\! -workspace.sounds.confirm_deletion_message=¿Está seguro de que quiere eliminar este sonido?
Nota\: Si usa este sonido dónde sea, ya no funcionará. -workspace.sounds.edit_selected=Editar... workspace.sounds.play_selected=Reproducir el seleccionado -workspace.sounds.delete_selected=Eliminar workspace.sounds.category=Categoría de sonido\:{0} workspace.sounds.files=Archivos de sonido\: {0} workspace.sounds.subtitle_and_category=Subtítulo\: {0}, Categoría de sonido\: {1} -workspace.screenshots.export_selected=Exportar... -workspace.screenshots.delete_selected=Eliminar workspace.screenshots.action_complete=Acción completada workspace.screenshots.use_background_message=Las capturas de pantalla seleccionadas se utilizarán como fondo cuando vuelva a abrir el programa. -workspace.screenshots.use_as_background=Usar como fondo de MCreator... -workspace.structure.confirm_deletion_message=¿Está seguro de que quiere eliminar las estructuras seleccionadas?
Nota\: Si las usa en cualquier lugar, ya no se generarán. workspace.variables.variable_name=Nombre de la variable workspace.variables.variable_type=Tipo de variable workspace.variables.variable_scope=Ámbito de la variable workspace.variables.initial_value=Valor inicial workspace.variables.add_new=Añadir nueva variable -workspace.variables.remove_selected=Eliminar workspace.variables.help=Ayuda con las variables workspace.variables.change_type=¿Está seguro que de quiere cambiar esta variable?
Si esta variable está en uso, esta acción puede causar problemas al compilar.
Si la acaba de crear, el cambió se hará correctamente. -workspace.variables.remove_variable_confirmation=¿Está seguro de que quiere eliminar la variable?
Si esta variable está en uso, la acción causará problemas al compliar. workspace.localization.add_entry=Añadir entrada de idioma -workspace.localization.remove_selected=Eliminar workspace.localization.export_to_csv=Exportar el idioma actual a CSV workspace.localization.import_csv=Importar CSV al idioma actual workspace.localization.key_name_title=Nombre clave workspace.localization.key_name_message=Ingrese un nombre clave para su entrada de idioma personalizada\: workspace.localization.confirm_delete_map=¿Está seguro de que quiere eliminar este mapa de idioma? -workspace.localization.confirm_delete_entry=¿Está seguro de que desea eliminar las entradas seleccionadas?
Nota\: Si todavía están en uso, los nombres de los elementos vinculados no funcionarán. workspace.localization.export_translation=Exportar traducción workspace.localization.confirm_export=¡Las traducciones por defecto (en_us) no se pueden exportar\!
Los textos en inglés se definen en los elementos. workspace.localization.warning_export=¡No puede importar un CSV como traducción por defecto (en_us)\!
Los textos en inglés se definen en los elementos. @@ -2595,6 +2665,7 @@ dialog.new_workspace.forge.modid=ID del Mod\:
Usado para identif dialog.new_workspace.forge.generator=Versión de Minecraft (generador)\:
Versión de la edición de Java dialog.new_workspace.forge.package=Nombre del paquete de Plugins Java\:
Usado para la raíz del generador de código dialog.new_workspace.forge.folder=Carpeta del espacio de trabajo\: +dialog.new_workspace.forge.toggle=\ Mod de Minecraft Forge dialog.new_workspace.fabric.display_name=Nombre visual del mod de Fabric\:
Este nombre se muestra en el juego dialog.new_workspace.fabric.modid=ID del Mod\:
Usado para identificar el mod dialog.new_workspace.fabric.generator=Versión de Minecraft (generador)\:
Versión de la edición de Java @@ -2718,6 +2789,7 @@ dialog.selector.damagesources.message=Por favor, seleccione un tipo de daño\: dialog.selector.dimension.message=Por favor, seleccione una dimensión\: dialog.selector.enchantments.message=Por favor, seleccione un encantamiento\: dialog.selector.entity.message=Por favor seleccione una entidad\: +dialog.selector.entity_data.message=Por favor, seleccione un parámetro de datos\: dialog.selector.fluids.message=Por favor, seleccione un fluido\: dialog.selector.gamerules.message=Por favor, seleccione una regla de juego\: dialog.selector.gui.message=Por favor selecciona una GUI\: @@ -2873,6 +2945,7 @@ common.add=Añadir common.close=Cerrar common.cancel=Cancelar common.confirmation=Confirmacion +common.delete_selected=Eliminar selección common.dependency={0}, tipo\: {1} common.mod_element_name=Nombre del elemento del mod common.name_already_exists=Este nombre ya existe diff --git a/plugins/mcreator-localization/lang/texts_es_CL.properties b/plugins/mcreator-localization/lang/texts_es_CL.properties index c6c4400c1ce..041f9087a74 100644 --- a/plugins/mcreator-localization/lang/texts_es_CL.properties +++ b/plugins/mcreator-localization/lang/texts_es_CL.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=Ajustes de animación dialog.animation_maker.next_frame=Siguiente fotograma dialog.animation_maker.previous_frame=Fotograma anterior dialog.animation_maker.animation_timeline=Línea de tiempo de la animación -dialog.animation_maker.add_frames=Añadir fotograma(s)... -dialog.animation_maker.add_frames_from_template=Añadir fotogramas desde plantilla... -dialog.animation_maker.add_frames_from_strip=Añadir fotogramas desde la animación... -dialog.animation_maker.add_frames_from_gif=Añadir fotograma desde GIF... dialog.animation_maker.gif_importing=GIF import dialog.animation_maker.gif_reading=Leyendo GIF dialog.animation_maker.gif_processing=Procesando GIF @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=Limpieza de caches dialog.cache_cleanup.progress.stopping_daemons=Desactivar las acciones de fondo dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Limpiando la carpeta de caches dialog.cache_cleanup.progress.build_task=Ejecutando la tarea de build -dialog.code_error.compilation_desc=Uno o más de sus archivos de mod principales no se compilaron correctamente.

Esto normalmente es causado por inconsistencias en el código mod durante compilaciones.
MCreator puede resolver este problema regenerando el código del mod completo.

Si ha bloqueado elementos de mod o archivos base de mods, también puede causar este error.


Clic Regenerar código botón para continuar con esta acción.
dialog.code_error.compilation_title=Errores al compilar el archivo del mod -dialog.code_error.compilation_list=Su espacio de trabajo contiene elementos de mod que no se compilan correctamente.

Esto fue probablemente causado por el último elemento mod que agregó o editó. Intente alterar la configuración de los elementos de mod
que causan errores de compilación (estos elementos se listan a continuación) para tratar de solucionar este problema.

Si no puedes resolver este problema, exportar el espacio de trabajo a archivo ZIP compartible desde el menú Archivo y enviarlo a través de
nuestro seguimiento de problemas en GitHub para que podamos intentar ayudarle.

Lista de elementos de mod que causan errores de compilación (recortado hasta 10 elementos)\:

dialog.code_error.regenerate_code=Regenerar código dialog.code_error.ignore_error=Ignorar error dialog.code_error.show_in_workspace=Mostrar en el espacio de trabajo @@ -152,6 +146,7 @@ dialog.gui.button_add_title=Editor de botones dialog.gui.button_change_width=Después de tocar en Ok, haga click derecho para cambiar las proporciones del botón dialog.gui.button_resize=Para cambiar el tamaño del botón use la herramienta mover y precione click derecho dialog.gui.button_text=Texto del botón\: +dialog.gui.button_is_undecorated=¿El botón está sin decorar? dialog.gui.button_event_on_clicked=Al tocar el botón dialog.gui.button_display_condition=Condición para mostrar el botón dialog.gui.image_button_add_title=Editor de botón de imagen @@ -173,6 +168,16 @@ dialog.gui.model_rotation_x=Rotación del modelo en X en grados dialog.gui.model_follow_mouse=Seguir el movimiento del ratón con giro dialog.gui.add_tooltip=Editor de información de herramientas dialog.gui.tooltip_display_condition=Condición de visualización de información de herramientas +dialog.gui.anchor=Anclar a\: +dialog.gui.anchor.top_left=Izquierda superior +dialog.gui.anchor.top_center=Centro superior +dialog.gui.anchor.top_right=Derecha superior +dialog.gui.anchor.center_left=Centro izquierda +dialog.gui.anchor.center=Centro +dialog.gui.anchor.center_right=Centro derecha +dialog.gui.anchor.bottom_left=Izquierda inferior +dialog.gui.anchor.bottom_center=Centro inferior +dialog.gui.anchor.bottom_right=Derecha inferior dialog.gradle_console.clear_log=Borrar informe dialog.gradle_console.search=Buscar en la consola dialog.gradle_console.start_build=Haga click en esto para ejecutar una build del espacio de trabajo
Puede comenzar una build usando Ctrl + haciendo click en la pestaña de Consola @@ -327,7 +332,12 @@ dialog.image_maker.tools.types.stamp=Sello dialog.image_maker.tools.types.stamp_description=Una herramienta para aplicar texturas de plantillas dialog.image_maker.tools.types.threshold=Límite\: dialog.image_maker.tools.types.shape=Forma\: +dialog.image_maker.tools.types.shape.square=CUADRADO +dialog.image_maker.tools.types.shape.frame=MARCO +dialog.image_maker.tools.types.shape.circle=CÍRCULO +dialog.image_maker.tools.types.shape.ring=ARO dialog.image_maker.tools.types.smooth_edge=Borde liso +dialog.image_maker.tools.types.pick_opacity=Herramienta cuentagotas de opacidad dialog.image_maker.tools.types.saturation=Saturación\: dialog.image_maker.tools.types.drawing_size=Tamaño\: dialog.image_maker.tools.types.drawing_connect_points=Conectar puntos @@ -338,7 +348,13 @@ dialog.image_maker.tools.component.colorselector_swap=Intercambiar colores de fo dialog.image_maker.tools.component.colorselector_select_foreground=Seleccionar color de adelante\: dialog.image_maker.tools.component.colorselector_select_background=Seleccionar color de fondo\: dialog.item_selector.title=Selector de bloque/objeto +dialog.item_selector.use_selected=Usar lo elegido dialog.item_selector.use_tag=Usar tag +dialog.item_selector.use_tag.entities=Usar etiqueta de entidad +dialog.item_selector.enter_tag_name.blocks=Escribe el nombre de la etiqueta del bloque debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.items=Escribe el nombre de la etiqueta del ítem debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.biomes=Escribe el nombre de la etiqueta del bioma debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.entities=Escribe el nombre de la etiqueta de la entidad debajo (ver la lista para plantillas)\:
dialog.item_selector.error_invalid_tag_name_title=Nombre de tag inválido dialog.item_selector.all=Todo dialog.item_selector.blocks=Bloques @@ -347,12 +363,18 @@ dialog.item_selector.potions=Pociones dialog.item_selector.custom_elements=Elementos personalizados dialog.item_selector.name=Nombre\: dialog.item_selector.display_filter=\ Mostrar filtro\: +dialog.list_editor.title=Editor de lista de cadena de texto +dialog.list_editor.add=Añadir entrada nueva +dialog.list_editor.clear=Eliminar todas las entradas +dialog.list_editor.validator=Lista de entradas +dialog.list_editor.errors.message=Algunas entradas en la lista no están bien definidas. +dialog.list_editor.errors.title=Entradas en la lista no válidas dialog.modelement_id.info_message=¡El código de este elemento está bloqueado\!
Cuando el código está bloqueado, MCreator no puede modificar su código fuente. dialog.modelement_id.info_message_title=El código del elemento está bloqueado dialog.modelement_id.registry_name=Nombre del elemento\: dialog.modelement_id.registry_name_info=Nombre del elemento (no todos los elementos lo usan) dialog.modelement_id.registry_name_validator=Nombre del elemento -dialog.modelement_id.use_caution_warn=¡Usa esta herramienta con precaución\!

¡Cambiar nombres de registro puede romper tus ahorros de mundo existentes y causar
conflictos con otro elemento mod de tu mod\! +dialog.modelement_id.use_caution_warn=¡Use esta herramienta con cuidado\! Asegúrate de no usar nombres duplicados.

¡Cambiar nombres de registro puede corromper mundos existentes y causar
conflictos con otros elementos del mod\! dialog.modelement_id.id_and_registry_names="{0} - Nombre del registro" dialog.modelement_id.invalid_registry_name=¡El nombre de registro introducido es inválido\!
Los cambios no se han guardado. dialog.modelement_id.invalid_registry_name_title=Nombre de registro inválido @@ -393,6 +415,12 @@ dialog.preferences.themes.list=
Lista dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: tipo de propiedad desconocido +dialog.search_usages.type.resource.texture=textura +dialog.search_usages.type.resource.model=modelo +dialog.search_usages.type.resource.sound=sonido +dialog.search_usages.type.resource.structure=estructura +dialog.search_usages.type.global_variable=variable global +dialog.search_usages.type.localization_key=clave de localización dialog.sounds.name=Nombre del sonido dialog.sounds.registry_name=Nombre del sonido\:
Si renombra el sonido en uso, las referencias existentes se corromperán dialog.sounds.files=Archivos de sonido\: @@ -427,7 +455,6 @@ dialog.textures_mapping.title_for_model=Texturas del modelo dialog.textures_mapping.add_new=Añadir texturas al modelo dialog.textures_mapping.enter_name_message=Introduzca el nombre de sus texturas.
Este nombre se utiliza para identificar sus texturas cuando
selecciona texturas para su modelo. dialog.textures_mapping.enter_name_title=Texturas nuevas -dialog.textures_mapping.jump_to=Saltar a... dialog.textures_mapping.save=Guardar texturas dialog.textures_mapping.model_texture_part=Parte de texturas del modelo\:
{0} dialog.textures_mapping.confirm_deletion_message=¿Está seguro de que desea eliminar estas texturas?
¡Puede obtener texturas corrompidas si aún están en uso\! @@ -550,7 +577,6 @@ workspace.elements.list.filter_all=Mostrar todos workspace.elements.list.filter_locked=Elementos bloqueados workspace.elements.list.filter_witherrors=Elementos con errores workspace.elements.list.ascending=Ascendente -workspace.category.mod_elements=Elementos del mod workspace.category.resources=Recursos workspace.category.variables=Variables workspace.category.localization=Idiomas @@ -567,14 +593,15 @@ workspace.elements.list.edit.delete=Eliminar workspace.elements.list.edit.duplicate=Duplicar elemento... workspace.elements.list.edit.code=Abrir elemento en un editor de código workspace.elements.list.edit.lock=Bloquear / Desbloquear -workspace.elements.list.edit.id=Editar ID del elemento... +workspace.elements.list.edit.id=Editar nombres de registro... workspace.elements.list.edit.add.folder=Añadir carpeta... workspace.elements.list.edit.rename.folder=Renombrar la carpeta seleccionada... -workspace.elements.confirm_delete_message=¿Está seguro de que quiere eliminar los elementos seleccionados ({0})?

Si otros elementos usan información de estos (Como una receta, Tab o evento) tendrá
que eliminarlos también. De otro modo habrá errores.

Elementos en carpetas y subcarpetas serán movidos a la carpeta base workspace.elements.delete.tooltip=Eliminar el elemento seleccionado workspace.elements.edit_code.tooltip=Editar código del elemento seleccionado workspace.elements.lock_code_tooltip=Bloquear/Desbloquear código de elementos
Al bloquear el código, MCreator no lo cambiará, por eso se vuelve editable
desde el punto de vista del programador y no cambia incluso al cambiarlo de espacio de trabajo.
¡Use esta opción sólo si sabe como y es conciente del riesgo que conlleva
bloquear el código\! -workspace.elements.edit_registry_names.tooltip=Editar las IDs de los elementos del mod +workspace.elements.edit_registry_names.not_possible_message=No es posible utilizar esta herramienta para editar nombres de registro de este tipo de elemento. +workspace.elements.edit_registry_names.not_possible_title=No es posible editar nombre de registro +workspace.elements.edit_registry_names.tooltip=Editar nombres de registro workspace.elements.empty.tip=Presione %1 para añadir elementos workspace.elements.lock_modelement_message=¡Estás intentando bloquear o desbloquear el código de un elemento\!

Al bloquearlo, MCreator no lo cambiará, incluso si
al actualizarse esto implique no solucionar errores
en los elementos bloqueados.

Los elementos seleccionados y bloqueados se desbloquearán con esta acción.
Esto implica que los elementos con códigos personalizados se verán modificados.

Por favor lea la página en la Web de MCreator sobre bloqueo de elementos antes de usar esta opción. workspace.elements.lock_modelement_confirm=¿Bloquear o desbloquear el código de este elemento? @@ -648,8 +675,6 @@ trigger.entity_travels_to_dimension=Al entidad cambiar de dimensión trigger.entity_uses_totem=Entidad utiliza un tótem trigger.explosion_occurs=Al suceder una explosión trigger.farmland_trampled=Al ser pisoteada la tierra de cultivo -trigger.gem_dropped=Al soltar una gema -trigger.gem_expired=Gema expira trigger.item_crafted=Al objeto ser creado trigger.item_destroyed=Al objeto ser destruido trigger.item_smelted=Al fundirse el objeto @@ -682,9 +707,26 @@ trigger.sapling_glow=Al crecer un brote trigger.village_siege=Al zombies atacar una aldea trigger.world_ticks=Cada tick del mundo trigger.no_ext_trigger=Sin evento adicional +blockly.category.blockprocedures=Procedimientos de bloque +blockly.category.blockactions=Acciones +blockly.category.blockdata=Datos +blockly.category.energyandfluid=Energía & fluido +blockly.category.damagesources=Procedimientos de daño blockly.category.directionactions=Cuadros de dirección +blockly.category.entityprocedures=Procedimientos de entidad +blockly.category.entitydata=Datos +blockly.category.entitymanagement=Acciones +blockly.category.itemdata=Datos +blockly.category.itemmanagement=Acciones +blockly.category.itemprocedures=Procedimientos de ítem +blockly.category.playerprocedures=Procedimientos de jugador +blockly.category.playerdata=Datos +blockly.category.playermanagement=Acciones blockly.category.projectilemanagement=Procedimientos de proyectil blockly.category.guimanagement=Slot & Procedures de la GUI +blockly.category.worldprocedures=Procedimientos de mundo +blockly.category.worlddata=Datos +blockly.category.worldmanagement=Acciones blockly.category.basictasks=Tareas básicas blockly.category.combattasks=Tareas de combate blockly.category.movementtasks=Tareas de movimiento @@ -714,6 +756,7 @@ blockly.category.intproviders=Proveedores de entero blockly.category.heightplacements=Posicionamiento de altura blockly.category.orefeatures=Funciones mineras blockly.category.placements=Posicionamientos comunes +blockly.category.treefeatures=Detalles de árbol blockly.category.arg_types=Parámetros blockly.category.actions=Acciones blockly.block.action_result_type=Resultado de la acción del tipo %1 @@ -774,6 +817,7 @@ blockly.block.blockat_is_solid=El bloque en x\: %1 y\: %2 z\: %3 es sólido blockly.block.blockat_is_side_solid=El lado %1 del bloque en x\: %2 y\: %3 z\: %4 es sólido blockly.block.blockat_lightlevel=Nivel de luz del bloque en x\: %1 y\: %2 z\: %3 blockly.block.blockat_opacity=Opacidad del bloque en x\: %1 y\: %2 z\: %3 +blockly.block.blockat_plant_type=Hay un bloque en x\: %1 y\: %2 z\: %3 de tipo de planta %4 blockly.block.blockitem_to_mcitem=Convertir %3 %1 en %2 blockly.block.blockstate_from_deps=Estado en cuestión del bloque blockly.block.blockstate_get_boolean_property=Obtener propiedad booleana %1 de %3 %2 @@ -787,6 +831,7 @@ blockly.block.blockstate_with_integer_property=%1 con propiedad entera %2 establ blockly.block.compare_blockstates=Es %3 %1 el mismo estado de bloque que %4 %2 blockly.block.compare_dimensionids=%1 \= %2 blockly.block.compare_directions=%1 \= %2 +blockly.block.compare_entities=Es %1 la misma entidad que %2 blockly.block.compare_mcblocks=Es %3 %1 el mismo bloque que %4 %2 blockly.block.compare_mcitems=%3 %1 \= %4 %2 blockly.block.compare_mcitems_oredictionary=Está %1 tagged en tags de objetos como %2 @@ -819,10 +864,18 @@ blockly.block.entity_allow_flying=Permitir a %2 volar si %1 sino no blockly.block.entity_armor_value=Valor de armadura de %1 blockly.block.entity_canusecommand=%2 tiene permisos de comandos nivel %1 blockly.block.entity_check_creature_type=Es %1 un tipo de criatura %2 +blockly.block.entity_checkgamemode=Está %1 en modo de juego %2 blockly.block.entity_clear_inventory=Vaciar inventario de %1 blockly.block.entity_clearpotions=Quitar efectos de poción de %1 blockly.block.entity_close_gui=Cerrar GUIs abiertas de %1 blockly.block.entity_create=%1 instancia de entidad estática de tipo %2 (no generar) +blockly.block.entity_data_logic_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos lógicos %3 +blockly.block.entity_data_logic_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos lógicos %3 a %4 +blockly.block.entity_data_integer_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos enteros %3 +blockly.block.entity_data_integer_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos enteros %3 a %4 +blockly.block.entity_data_string_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos de texto %3 +blockly.block.entity_data_string_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos de texto %3 a %4 +blockly.block.entity_deal_custom_damage=Infligir %1 de daño personalizado a %2 localizado como death.attack.%3(.player/.item) blockly.block.entity_despawn=Desaparecer %1 %2 blockly.block.entity_dimension_id=ID de la dimensión %1 está en blockly.block.entity_direction=Dirección (yaw) en punto relativo a S de %1 @@ -836,9 +889,8 @@ blockly.block.entity_get_armor_slot_item=Objeto en el slot de armadura %1 de %2 blockly.block.entity_get_controlling_passenger=%2 Obtener pasajero que controle %1 blockly.block.entity_get_first_passenger=%2 Obtén el primer pasajero de %1 blockly.block.entity_get_fire_ticks=Obtenga los ticks restantes en llamas de %1 -blockly.block.entity_get_fly_speed=Velocidad del vuelo de %1 blockly.block.entity_get_oxygen=Oxígeno de %1 -blockly.block.entity_get_root_vehicle=Obtenga la entidad en el nivel más bajo que %1 está montando, o a si mismo si no está montando nada +blockly.block.entity_get_percent_frozen=Obtener porcentaje estático de %1 blockly.block.entity_get_saturation=Nivel de saturación de %1 blockly.block.entity_get_scoreboard_score=Puntos en el scoreboard de %2 para %1 blockly.block.entity_get_shootpower=Poder de disparo de %1 si es un proyectil @@ -847,7 +899,7 @@ blockly.block.entity_get_spawn_x=Obtener coordenada X del punto de reaparición blockly.block.entity_get_spawn_y=Obtener coordenada Y del punto de reaparición de %1 para el mundo actual %2 blockly.block.entity_get_spawn_z=Obtener coordenada Z del punto de reaparición de %1 para el mundo actual %2 blockly.block.entity_get_stepheight=Obtener altura del paso de %1 -blockly.block.entity_get_walk_speed=Velocidad de la caminata de %1 +blockly.block.entity_get_uuid=Obtener UUID de %1 blockly.block.entity_getowner=%2 Dueño de %1 si está domesticado blockly.block.entity_getridingentity=%2 Entidad %1 está montando blockly.block.entity_gettargetentity=%2 Entidad %1 está persiguiendo para atacar @@ -860,10 +912,12 @@ blockly.block.entity_haspotioneffect=Tiene %1 activado el efecto de poción\: %2 blockly.block.entity_health=Vida actual de %1 blockly.block.entity_health_max=Vida máxima de %1 blockly.block.entity_inventory_foreach=Por cada slot en el inventario de %1 copiar contenido como %2 hacer %3 +blockly.block.entity_is_attackable=Puede %1 ser atacado blockly.block.entity_is_elytra_flying=Está %1 volando con una elitra blockly.block.entity_is_glowing=%1 está brillando blockly.block.entity_is_swimming=%1 está nadando blockly.block.entity_is_tagged_in=Está %1 tagged en tags de entidades como %2 +blockly.block.entity_is_underwater=%1 está bajo el agua blockly.block.entity_isalive=Está %1 vivo blockly.block.entity_isbeingridden=Está %1 siendo montado blockly.block.entity_isblocking=Está %1 bloqueando @@ -934,7 +988,9 @@ blockly.block.entity_set_display_name=Fijar nombre visual de %2 a %1 blockly.block.entity_set_fire=Hacer arder a %2 por %1 segundos blockly.block.entity_set_flying=Hacer volar a %2 si %1 sino no blockly.block.entity_set_foodlevel=Fijar nivel de comida de %2 a %1 +blockly.block.entity_set_gamemode=Fijar modo de juego de %1 a %2 blockly.block.entity_set_health=Fijar vida de %2 a %1 +blockly.block.entity_set_invisible=Fijar invisibilidad de %1 a %2 blockly.block.entity_set_mainhand_item=Establecer objeto en la mano principal de %3 como %2 %1 blockly.block.entity_set_movement=Intentar anular el vector de movimiento de %4 a vx\: %1 vy\: %2 vz\: %3 blockly.block.entity_set_nogravity=Que no afecte la gravedad a %1 %2 @@ -957,9 +1013,6 @@ blockly.block.entity_submerged_height=Altura sumergida de %1 blockly.block.entity_swing_mainhand=Rotar mano principal de %1 blockly.block.entity_swing_offhand=Rotar mano secundaria de %1 blockly.block.entity_switch_dimension=Cambiar dimensión de %1 a %2 -blockly.block.entity_vel_x=Velocidad X de %1 %2 -blockly.block.entity_vel_y=Velocidad Y de %1 %2 -blockly.block.entity_vel_z=Velocidad Z de %1 %2 blockly.block.entity_xplevel=Nivel de experiencia de %1 blockly.block.entity_xp_until_next_level=Obtén la cantidad de XP necesaria por %1 para obtener un nivel blockly.block.execute_command=Ejecutar comando /%1 en x\:%2 y\: %3 z\:%4 %5 @@ -996,9 +1049,11 @@ blockly.block.item_cooldown_for=Dar cooldown %3 por %1 ticks a %2 blockly.block.item_damage=Aplicar %1 de daño a %2 blockly.block.item_enchanted_with_xp=%1 encantado con %2 niveles de experiencia, encantamientos tesoro\: %3 blockly.block.item_fuel_power=Capacidad de fundición de %1 +blockly.block.item_get_cooldown=Obtener el porcentaje de enfriamiento restante de %2 para %1 blockly.block.item_get_damage=Daño de %1 blockly.block.item_get_enhancement=Nivel de encantamiento de %1 blockly.block.item_get_max_damage=Daño máximo posible de %1 +blockly.block.item_is_cooldown=Está %2 en enfrentamiento para %1 blockly.block.item_is_enchantable=Es %1 encantable blockly.block.item_is_enchanted=Está %1 encantado blockly.block.item_istype=Es %1 del tipo de objeto %2 @@ -1041,6 +1096,7 @@ blockly.block.math_random_int_between=Entero aleatorio entre min\: %1 y máximo\ blockly.block.math_random_number_between=Número aleatorio entre min\: %1 y máx\: %2 blockly.block.mcitem_to_block=Convertir %2 %1 a %3 o a aire si la conversión falla blockly.block.move_entity=Fijar locación de %4 a x\: %1 y\: %2 z\: %3 +blockly.block.place_schematic=Colocar archivo de estructura NBT %6 %7 en x\: %1 y\: %2 z\: %3 con rotación\: %4 espejo\: %5 %8 blockly.block.projectile_shoot_from_entity=Disparar %1 desde entidad\: %2 con velocidad\: %3 con una imprecisión de\: %4 %5 blockly.block.projectile_shoot_from_pos=Disparar %1 desde x\: %2 y\: %3 z\: %4 con dirección dx\: %5 dy\: %6 dz\: %7 velocidad %8 imprecisión\: %9 %10 blockly.block.projectiles_arrow=Flecha de tipo %1 con daño\: %2 retroceso\: %3 perforación\: %4 tirador\: %5 fuego\: %6 partículas\: %7 tipo de recogida\: %8 @@ -1053,7 +1109,7 @@ blockly.block.set_time=Establecer tiempo a %1 %2 blockly.block.spawn_entity=Generar entidad\: %4 en x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Generar entidad\: %6 en x\: %1 y\: %2 z\: %3 con yaw\: %4 pitch\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Generar entidad\: %9 en x\: %1 y\: %2 z\: %3 con yaw\: %4 pitch\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Generar item/gema %1 en x\: %2 y\: %3 z\: %4 con delay de recolección\: %5 desaparecer\: %6 %7 +blockly.block.spawn_gem=Generar ítem soltado %1 en x\: %2 y\: %3 z\: %4 retraso de recogida\: %5 desaparición\: %6 %7 blockly.block.spawn_particle=Generar partícula en x\: %1 y\: %2 z\: %3 con vx\: %4 vy\: %5 vz\: %6 de tipo\: blockly.block.spawn_particle_multi=Generar particulas %8 en lado del servidor en x\: %1 y\: %2 z\: %3 en el area dx\: %4 dy\: %5 dz\: %6 con velocidad %7 tipo\: %9 %10 blockly.block.spawn_xporb=Generar orbe de XP en x\: %2 y\: %3 z\: %4 con una cantidad de experiencia de %1 %5 @@ -1109,13 +1165,16 @@ blockly.block.attack_on_collide=Haz un ataque cuerpo a cuerpo/de contacto con el blockly.block.attack_with_range=Haz un ataque cuerpo a cuerpo con el factor de velocidad %2 %1 (perseguir después de perder la vista %3) %4 blockly.block.avoid_entity=Evitar entidad de tipo %4 en radio %1 velocidad cercana %2 velocidad lejana %3 %5 blockly.block.break_blocks=Romper bloques de tipo %2 velocidad %1 altura máxima de detección %3 %4 +blockly.block.find_and_move_to_air=Encontrar y moverse hacia aire %1 blockly.block.breed=Cría, encuentra pareja con velocidad %1 si animal %2 +blockly.block.climb_powder_snow=Trepar encima de nieve en polvo %1 blockly.block.doors_break=Romper puertas %1 blockly.block.doors_close=Cerrar puertas %1 blockly.block.doors_open=Puertas abiertas %1 blockly.block.eat_grass=Comer hierba %1 blockly.block.fight_as_owner=Dañar entidades a las que el dueño atacó un %1 blockly.block.fly=Vuela alrededor con el multiplicador de velocidad %1 (solo para entidades voladoras) %2 +blockly.block.follow_boat=Seguir un barco %1 blockly.block.follow_entity=Seguir a criaturas iguales con velocidad %1, máxima distancia %2 y área de seguimiento %3 %4 blockly.block.follow_item_in_hands=Seguir a quién tenga %2 en la mano con velocidad %1 se asusta del movimiento %3 %4 blockly.block.follow_owner=Seguir al dueño con velocidad %1 distancia mínima %2 distancia máxima %3 si está domesticado %4 @@ -1128,7 +1187,7 @@ blockly.block.protect_owner=Dañar entidades que atacaron al dueño %1 blockly.block.restrict_sun=Restringir el sol %1 blockly.block.swim=Nadar erraticamente con velocidad %1 %2 blockly.block.swim_in_water=Flota en el agua %1 -blockly.block.watch_closest_entity=Vigilar a la entidad más cercana de tipo %2 en un radio de %1 %3 +blockly.block.try_and_find_water=Intentar encontrar agua %1 blockly.block.wander=Vagar (activa caminar) con velocidad %1 %2 blockly.block.wander_avoid_water=Vagar evitando agua con velocidad %1 %2 blockly.block.biome_entered=Si el jugador entra en el bioma %1 @@ -1182,6 +1241,7 @@ blockly.block.block_predicate_any_of=Se cumple cualquier condición\: blockly.block.block_predicate_any_of.empty=(Nunca) blockly.block.block_predicate_any_of.input=condición\: blockly.block.block_predicate_inside_world=Posición desplazada por x\: %1 y\: %2 z\: %3 está dentro de los límites del mundo +blockly.block.block_predicate_has_sturdy_face=Bloque en posición de desplazada x\: %1 y\: %2 z\: %3 tiene la cara sólida %4 blockly.block.block_predicate_is_air=Hay aire en la posición actual blockly.block.block_predicate_is_air_or_water=Es aire o agua en la posición actual blockly.block.block_predicate_matching_blocks=Bloque en posición de desplazamiento x\: %2 y\: %3 z\: %4 está en la lista de bloques o tiene la tag\: %1 @@ -1200,6 +1260,7 @@ blockly.block.feature_block_column_simple=Función de columna de bloque con altu blockly.block.feature_coral_claw=Función de garra de coral submarino blockly.block.feature_coral_mushroom=Función de champiñón de coral submarino blockly.block.feature_coral_tree=Característica del árbol de coral subacuático +blockly.block.feature_custom_structure=Estructura personalizada\: %1 %2 desplazada por x\: %3 y\: %4 z\: %5 %6 con rotación aleatoria\: %7 %8 volteo aleatorio\: %9 %10 no colocar bloques en la lista de bloques o etiqueta\: %11 blockly.block.feature_delta=Característica delta con contenido\: %1 borde\: %2 tamaño\: %3 tamaño\: %4 blockly.block.feature_forest_rock=Función de roca del bosque con bloque\: %1 blockly.block.feature_geode_simple=Geoda de tamaño %1 %2 no puede reemplazar bloques bajo la etiqueta\: %3 %4 descartar si %5 bloque bajo la etiqueta %6 son encontrados %7 llenar\: %8 capa interior\: %9 variante productora\: %10 capa central\: %11 capa externa\: %12 @@ -1226,6 +1287,9 @@ blockly.block.feature_simple_random_mutator.input=Característica blockly.block.feature_simple_random_selector=Característica aleatoria de la lista\: blockly.block.feature_simple_random_selector.input=característica\: blockly.block.feature_simple_random_selector.empty=La lista no puede estar vacía +blockly.block.feature_tree.decorator_input=decorador\: +blockly.block.feature_tree_pine.empty=(Ninguno) +blockly.block.feature_tree_simple.empty=(Ninguno) blockly.block.placed_feature_inline=Característica configurada\: %1 con posición extra\: %2 blockly.block.placed_feature_inline.disabled_placement=Esta colocación no se puede utilizar dentro de las características colocadas en línea blockly.block.placement_biome_filter=Sólo si el bioma en la posición actual tiene esta característica @@ -1408,6 +1472,7 @@ modelement.plant=Planta modelement.potioneffect=Efecto de poción modelement.potion=Objeto de poción modelement.procedure=Procedimiento +modelement.projectile=Proyectil modelement.recipe=Receta modelement.structure=Estructura modelement.tab=Tab del creativo @@ -1946,6 +2011,7 @@ elementgui.block.error_block_must_have_name=El bloque debe tener un nombre elementgui.block.page_tile_entity=Entidad de bloque elementgui.block.page_energy_fluid_storage=Almacenamiento de energía y fluidos elementgui.command.name=Nombre del comando (sin /)\: +elementgui.command.type=Tipo\: elementgui.command.permission_level=Nivel de permisos para ejecutarlo\:
Nivel mínimo para ejecutar el comando elementgui.command.warning.empty_string=El comando no puede estar vacío elementgui.command.arguments=Constructor de parámetros y acciones del comando @@ -1969,7 +2035,6 @@ elementgui.dimension.biomes_in=Biomas en la dimensión\: elementgui.dimension.main_filler_block=Bloque base para rellenar\:
Normal, Nether, End elementgui.dimension.fluid_block=Fluido\:
Normal, Nether, End elementgui.dimension.sleep_result=Resultado de intentar dormir\: -elementgui.dimension.fog_air_color=Color del cielo/niebla\:
Deje en POR DEFECTO para que funcione como en Minecraft elementgui.dimension.enable_dimension_portal=Activar portal para la dimensión\: elementgui.dimension.portal_frame_block=Bloque del marco del portal\: elementgui.dimension.portal_particles=Partículas para el bloque del marco\: @@ -1993,8 +2058,6 @@ elementgui.enchantment.curse=¿Es este encantamiento una maldición? elementgui.enchantment.allowed_on_books=¿Libros pueden estar encantados con este encantamiento? elementgui.enchantment.can_generate_in_loot_tables=¿Puede este encantamiento generar tablas de botín? elementgui.enchantment.can_villager_trade=¿Puede este encantamiento aparecer en comercios de aldeanos? -elementgui.enchantment.compatible_enchantments=Se puede combinar con\:
Dejar en blanco para seleccionar todos -elementgui.enchantment.can_apply_to=Se puede aplicar a\:
Deje en blanco para seleccionar todos elementgui.enchantment.needs_name=El encantamiento necesita un nombre elementgui.gamerule.name=Nombre visual\: elementgui.gamerule.display_name=Nombre de la regla del juego\:
Este nombre se usará en la pestaña de configuración de reglas del juego @@ -2100,6 +2163,7 @@ elementgui.item.number_of_uses=Durabilidad del objeto (Deje 0 para que no elementgui.item.is_immune_to_fire=¿Es inmune al fuego? elementgui.item.recipe_remainder=Receta que deja
Asegúrese de maracar "¿No se gasta al usarse en una receta?" y deje en blanco para usar el artículo actual. elementgui.item.damage_vs_entity=Daño que infringe a mobs\:
Daño cuerpo a cuerpo +elementgui.item.glowing_effect=¿Ítem tiene efecto de brillo? elementgui.item.item_3d_model=Modelo 3D del objeto elementgui.item.bind_gui=Enlace este objeto a la GUI\:
Establecer a <NONE> para desactivar el inventario elementgui.item.inventory_size=Tamaño del inventario (cantidad de slots)\:
Establecer este valor a la ID de slot más grande en el GUI + 1 @@ -2130,6 +2194,9 @@ elementgui.item.custom_states.add=Añadir definición de estado elementgui.item.custom_state.model=Modelo 3D del objeto\: elementgui.item.custom_state.remove=Eliminar este estado elementgui.item.page_item_states=Estados del objeto +elementgui.item.projectile=Proyectil que dispara\: +elementgui.item.shoot_constantly=¿Disparar constantemente cuando está activo? +elementgui.item.error_needs_name=Comida necesita un nombre elementgui.item.error_item_needs_name=El objeto necesita un nombre elementgui.keybind.event_key_pressed=Al ser presionada elementgui.keybind.event_key_released=Al ser soltada @@ -2139,8 +2206,8 @@ elementgui.keybind.key_binding_category=Tecla vinculada a la categoría de tradu elementgui.keybind.key_procedure_triggers=Eventos de la acción ejecutada elementgui.keybind.error_key_needs_name=La acción necesita un nombre elementgui.keybind.error_key_category_needs_name=Nombre de la categoría de la acción +elementgui.living_entity.condition_solid_bounding_box=¿La caja delimitadora es sólida? elementgui.living_entity.disable_collisions=Deshabilitar colisiones -elementgui.living_entity.has_ai=Habilitar IA
Al utilizar la IA, asegúrese de tener algunas tareas de IA definidas a continuación elementgui.living_entity.immune_fire=Fuego elementgui.living_entity.immune_arrows=Flechas elementgui.living_entity.immune_fall_damage=Daño por caída @@ -2148,18 +2215,21 @@ elementgui.living_entity.immune_cactus=Cactus elementgui.living_entity.immune_drowning=Agua (Ahogarse) elementgui.living_entity.immune_lightning=Rayo elementgui.living_entity.immune_potions=Efectos de poción +elementgui.living_entity.immune_player=Cuerpo a cuerpo de jugador elementgui.living_entity.immune_explosions=Explosiones elementgui.living_entity.immune_trident=Tridentes elementgui.living_entity.immune_anvil=Yunque elementgui.living_entity.immune_wither=Wither +elementgui.living_entity.immune_dragon_breath=Aliento de Dragón +elementgui.living_entity.is_water_mob=Agua es entidad +elementgui.living_entity.condition_can_breathe_underwater=Puede respirar bajo el agua +elementgui.living_entity.condition_fluids_can_push=Es empujado por fluidos elementgui.living_entity.is_flying_mob=Es la entidad voladora (La gravedad no le afecta) elementgui.living_entity.spawn_dungeons=Se generar en mazmorras elementgui.living_entity.is_rideable=Se puede montar elementgui.living_entity.control_forward=Control de movimiento hacia adelante elementgui.living_entity.control_strafe=Control de movimiento especial -elementgui.living_entity.is_breedable=Hacer esta entidad tipo animal, objeto de reproducción\:
La entidad base y el tipo de comportamiento se ignorarán si se marca elementgui.living_entity.is_tameable=Se puede domesticar -elementgui.living_entity.is_ranged=Haz que la entidad haga ataques a distancia de con un objeto, intervalo de ataque y radio\:
Añade al menos un Actúa de forma agresiva contra tareas de IA para definir objetivos de ataque.
Si se selecciona "Elemento predeterminado", selecciona el objeto proyectil o mantén vacío para usar la flecha elementgui.living_entity.event_struck_by_lightning=Al ser impactado por un rayo elementgui.living_entity.event_mob_falls=Al caerse elementgui.living_entity.event_mob_dies=Al morir @@ -2170,7 +2240,8 @@ elementgui.living_entity.event_mob_tick_update=Al estar viva elementgui.living_entity.event_player_collides_with=Al jugador colisionar con la entidad elementgui.living_entity.event_initial_spawn=Al generarse elementgui.living_entity.condition_natural_spawn=Condición de generación -elementgui.living_entity.behaviour=Características de comportamiento (Los mobs son agresivos, las criaturas son pacíficas)\: +elementgui.living_entity.condition_is_model_transparent=¿Modelo de entidad es transparente? +elementgui.living_entity.condition_is_shaking=¿Modelo de entidad está agitando? elementgui.living_entity.creature_type=Tipo de criatura (define algunos atributos especiales)\: elementgui.living_entity.follow_range_tracking_range=Rango de seguimiento, rango de rastreo\: elementgui.living_entity.movement_speed_step_height=Velocidad de movimiento, altura del paso\: @@ -2183,7 +2254,6 @@ elementgui.living_entity.name=Nombre de la entidad\: elementgui.living_entity.entity_model=Modelo de la entidad\:
Aceptados\: JAVA elementgui.living_entity.entity_model_import=Toque acá para importar una textura para la entidad elementgui.living_entity.texture=Textura de la entidad\:
La textura necesita encajar con el modelo (No use skins de jugadores para bípedos, no funcionarán) -elementgui.living_entity.glow_texture=Textura brillante de la entidad (Optativo)\:
Para hacer texturas brillantes, no emitirán luz elementgui.living_entity.bounding_box=Caja de colisión de la entidad\:
Ancho, profundidad, altura, tamaño de la sombra, Posición Y de la entidad montada elementgui.living_entity.spawn_egg_options=Opciones del generador (Huevo)\:
Habilitar, color principal, color secundario y tab del creativo elementgui.living_entity.mob_boss=La entidad tiene una barra de vida de jefe final\: @@ -2205,14 +2275,22 @@ elementgui.living_entity.does_spawn_in_dungeons=¿Esta entidad aparece en mazmor elementgui.living_entity.spawn_general_condition=Condición de generación personalizada\:
Si usa una condición personalizada se sobrescribirá el tipo de generación
Sin embargo, la probabilidad de generación si se utilizará.
elementgui.living_entity.bind_to_gui=Ligar esta entidad a una GUI\:
Deje en blanco para desactivar el inventario (Querrá eso en la mayoría de los casos)
elementgui.living_entity.inventory_size=Tamaño del inventario (cantidad de slots)\:
Establecer este valor a la ID de slot más grande en el GUI + 1 +elementgui.living_entity.entity_data=Accesores de datos de entidad
Sincronizados entre los lados del cliente y el servidor +elementgui.living_entity.entity_data_entries=Entradas de datos +elementgui.living_entity.entity_data_entries.name=Nombre\: +elementgui.living_entity.entity_data_entries.type=Tipo\: +elementgui.living_entity.entity_data_entries.default_value=Valor por defecto\: +elementgui.living_entity.entity_data_entries.add_entry=Añadir nueva entrada +elementgui.living_entity.entity_data_entries.add_entry.name=Nombre de la entrada de datos\: +elementgui.living_entity.entity_data_entries.add_entry.type=Tipo de entrada de datos\: +elementgui.living_entity.entity_data_entries.add_entry.title=Nueva entrada de datos elementgui.living_entity.error_entity_model_needs_texture=El modelo de la entidad necesita una textura elementgui.living_entity.error_entity_needs_name=La entidad necesita un nombre elementgui.living_entity.page_visual=Visual elementgui.living_entity.page_sound=Sonido -elementgui.living_entity.page_behaviour=Comportamiento +elementgui.living_entity.page_entity_data=Datos sincronizados elementgui.living_entity.page_ai_and_goals=AI y objetivos elementgui.living_entity.page_spawning=Generación -elementgui.loot_table.name=LootTable elementgui.loot_table.registry_name=Nombre de registro de la LootTalbe\:
Use prefijos como "blocks/" para especificar categorías elementgui.loot_table.namespace=Espacio de nombre de la LootTable
Usar nombres de Minecraft para modificar LootTables Vanilla elementgui.loot_table.type=Tipo de LootTable\: @@ -2346,6 +2424,14 @@ elementgui.procedure.confirm_delete_var_msg=¿Está seguro de que desea el elementgui.procedure.required_dependencies=Dependencias requeridas elementgui.procedure.provided_dependencies=\ Dependencias proporcionadas elementgui.procedure.external_trigger_does_not_provide_all_dependencies=¡El evento que seleccionó no proporciona
todas las dependencias que su procedure requiere\! +elementgui.projectile.damage=Daño por defecto del proyectil\: +elementgui.projectile.ignite_fire=¿El proyectil empieza a arder al impacto? +elementgui.projectile.action_sound=Sonido de acción de lanzamiento de proyectil\: +elementgui.projectile.event_hits_block=Cuando el proyectil alcanza un bloque +elementgui.projectile.event_hits_player=Cuando el proyectil alcanza a un jugador +elementgui.projectile.event_hits_entity=Cuando el proyectil alcanca una entidad viva +elementgui.projectile.event_flying_tick=Tick mientras el proyectil vuela +elementgui.projectile.error_custom_model_needs_texture=Modelo personalizado de proyectil necesita una textura elementgui.recipe.is_shapeless=¿Es una receta sin posición? elementgui.recipe.definition=Definición de la receta elementgui.recipe.crafting_book_category=Categoría del libro de fabricación\: @@ -2367,9 +2453,16 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=La receta de elementgui.recipe.error_brewing_no_input_ingredient_and_result=La receta de la elaboración necesita tener una entrada, un ingrediente y una salida definidos (el aire no cuenta) elementgui.structuregen.event_structure_instance_generated=Al generarse la estructura elementgui.structuregen.import_tooltip=Toque acá para importar el archivo de estructura NBT
Use la sección de estructuras en el espacio de trabajo para más opciones. -elementgui.structuregen.select_tooltip=Estructura a generar\:
Para más opciones, use la sección de estructuras del espacio de trabajo elementgui.structuregen.ignore_blocks=Bloques a ignorar al colocar\: -elementgui.structuregen.error_select_structure_spawn=Necesita seleccionar una estructura que será generada para continuar. +elementgui.structuregen.surface_detection_type=Tipo de referencia de detección de suelo\: +elementgui.structuregen.terrain_adaptation=Tipo de adaptación del terreno\: +elementgui.structuregen.generation_stage=Etapa de generación\: +elementgui.structuregen.biomes_to_spawn=Biomas en los que generar la estructura\: +elementgui.structuregen.projection=Proyección al terreno\: +elementgui.structuregen.separation_spacing=Distribución de estructuras por chunk\: +elementgui.structuregen.separation=Separación\: +elementgui.structuregen.spacing=Espaciamiento\: +elementgui.structuregen.error_select_biomes=Selecciona al menos un bioma en el que esta estructura se genera elementgui.tab.name=Nombre de la tab\: elementgui.tab.icon=Ícono de la tab\: elementgui.tab.search_bar=Mostrar barra de búsqueda\: @@ -2437,11 +2530,6 @@ workspace.resources.tab.structures=Estructuras workspace.resources.tab.screenshots=Capturas de pantalla workspace.textures.new=Crear nueva textura workspace.textures.import=Importar texturas -workspace.textures.edit_selected=Editar... -workspace.textures.duplicate_selected=Duplicar... -workspace.textures.delete_selected=Eliminar -workspace.textures.export_selected=Exportar... -workspace.textures.confirm_deletion_message=¿Está seguro de que quiere eliminar este archivo?
Nota\: Si usó este archivo donde sea, podrían romperse texturas. workspace.textures.select_dupplicate_type=Seleccione el tipo de textura en la que quiere duplicar\: workspace.textures.select_texture_type=¿Qué tipo de textura es este archivo? workspace.textures.category.block=Texturas para bloques\: @@ -2453,47 +2541,29 @@ workspace.textures.category.screen=Texturas para pantallas (logros, GUIs, overla workspace.textures.category.armor=Texturas para armaduras\: workspace.textures.category.other=Otras texturas (pinturas, mod logo, ...)\: workspace.3dmodel.description={0}
Mapeo de textura\: {1} -workspace.3dmodels.edit_texture_mappings=Editar texturas del modelo... -workspace.3dmodels.redefine_animations=Definir animaciones del modelo... -workspace.3dmodels.delete_selected=Eliminar -workspace.3dmodels.delete_confirm_message=¿Está seguro de que desea eliminar este modelo?
Nota\: Si ya usa este modelo dónde sea, podría romper las texturas
y algunos elementos podrían no funcionar. -workspace.3dmodels.regenerating_code=Regenerando código -workspace.3dmodels.regenerating_entity_code=Regenerando código de las entidades -workspace.3dmodels.rebuilding_workspace=Recompilando espacio de trabajo workspace.3dmodels.animation_unsupported_title=Animaciones no aceptadas workspace.3dmodels.animation_unsupported_message=¡Este modelo no funciona con animaciones\! workspace.3dmodels.mappings_unsupported_title=Sin texturas workspace.3dmodels.mappings_unsupported_message=¡Este modelo no funciona con esto\! -workspace.sounds.confirm_deletion_message=¿Está seguro de que quiere eliminar este sonido?
Nota\: Si usa este sonido dónde sea, ya no funcionará. -workspace.sounds.edit_selected=Editar... workspace.sounds.play_selected=Reproducir el seleccionado -workspace.sounds.delete_selected=Eliminar workspace.sounds.category=Categoría de sonido\:{0} workspace.sounds.files=Archivos de sonido\: {0} workspace.sounds.subtitle_and_category=Subtítulo\: {0}, Categoría de sonido\: {1} -workspace.screenshots.export_selected=Exportar... -workspace.screenshots.delete_selected=Eliminar workspace.screenshots.action_complete=Acción completada workspace.screenshots.use_background_message=Las capturas de pantalla seleccionadas se utilizarán como fondo cuando vuelva a abrir el programa. -workspace.screenshots.use_as_background=Usar como fondo de MCreator... -workspace.structure.confirm_deletion_message=¿Está seguro de que quiere eliminar las estructuras seleccionadas?
Nota\: Si las usa en cualquier lugar, ya no se generarán. workspace.variables.variable_name=Nombre de la variable workspace.variables.variable_type=Tipo de variable workspace.variables.variable_scope=Ámbito de la variable workspace.variables.initial_value=Valor inicial workspace.variables.add_new=Añadir nueva variable -workspace.variables.remove_selected=Eliminar workspace.variables.help=Ayuda con las variables workspace.variables.change_type=¿Está seguro que de quiere cambiar esta variable?
Si esta variable está en uso, esta acción puede causar problemas al compilar.
Si la acaba de crear, el cambió se hará correctamente. -workspace.variables.remove_variable_confirmation=¿Está seguro de que quiere eliminar la variable?
Si esta variable está en uso, la acción causará problemas al compliar. workspace.localization.add_entry=Añadir entrada de idioma -workspace.localization.remove_selected=Eliminar workspace.localization.export_to_csv=Exportar el idioma actual a CSV workspace.localization.import_csv=Importar CSV al idioma actual workspace.localization.key_name_title=Nombre clave workspace.localization.key_name_message=Ingrese un nombre clave para su entrada de idioma personalizada\: workspace.localization.confirm_delete_map=¿Está seguro de que quiere eliminar este mapa de idioma? -workspace.localization.confirm_delete_entry=¿Está seguro de que desea eliminar las entradas seleccionadas?
Nota\: Si todavía están en uso, los nombres de los elementos vinculados no funcionarán. workspace.localization.export_translation=Exportar traducción workspace.localization.confirm_export=¡Las traducciones por defecto (en_us) no se pueden exportar\!
Los textos en inglés se definen en los elementos. workspace.localization.warning_export=¡No puede importar un CSV como traducción por defecto (en_us)\!
Los textos en inglés se definen en los elementos. @@ -2595,6 +2665,7 @@ dialog.new_workspace.forge.modid=ID del Mod\:
Usado para identif dialog.new_workspace.forge.generator=Versión de Minecraft (generador)\:
Versión de la edición de Java dialog.new_workspace.forge.package=Nombre del paquete de Plugins Java\:
Usado para la raíz del generador de código dialog.new_workspace.forge.folder=Carpeta del espacio de trabajo\: +dialog.new_workspace.forge.toggle=\ Mod de Minecraft Forge dialog.new_workspace.fabric.display_name=Nombre visual del mod de Fabric\:
Este nombre se muestra en el juego dialog.new_workspace.fabric.modid=ID del Mod\:
Usado para identificar el mod dialog.new_workspace.fabric.generator=Versión de Minecraft (generador)\:
Versión de la edición de Java @@ -2718,6 +2789,7 @@ dialog.selector.damagesources.message=Por favor, seleccione un tipo de daño\: dialog.selector.dimension.message=Por favor, seleccione una dimensión\: dialog.selector.enchantments.message=Por favor, seleccione un encantamiento\: dialog.selector.entity.message=Por favor, seleccione una entidad\: +dialog.selector.entity_data.message=Por favor, seleccione un parámetro de datos\: dialog.selector.fluids.message=Por favor, seleccione un fluido\: dialog.selector.gamerules.message=Por favor, seleccione una regla de juego\: dialog.selector.gui.message=Por favor selecciona una GUI\: @@ -2873,6 +2945,7 @@ common.add=Añadir common.close=Cerrar common.cancel=Cancelar common.confirmation=Confirmación +common.delete_selected=Eliminar selección common.dependency={0}, tipo\: {1} common.mod_element_name=Nombre del elemento del mod common.name_already_exists=Este nombre ya existe diff --git a/plugins/mcreator-localization/lang/texts_es_ES.properties b/plugins/mcreator-localization/lang/texts_es_ES.properties index d293f0dbe41..28925eb4bc5 100644 --- a/plugins/mcreator-localization/lang/texts_es_ES.properties +++ b/plugins/mcreator-localization/lang/texts_es_ES.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=Ajustes de animación dialog.animation_maker.next_frame=Siguiente fotograma dialog.animation_maker.previous_frame=Fotograma anterior dialog.animation_maker.animation_timeline=Línea de tiempo de la animación -dialog.animation_maker.add_frames=Añadir fotograma(s)... -dialog.animation_maker.add_frames_from_template=Añadir fotogramas desde plantilla... -dialog.animation_maker.add_frames_from_strip=Añadir fotogramas desde la animación... -dialog.animation_maker.add_frames_from_gif=Añadir fotograma desde GIF... dialog.animation_maker.gif_importing=Importar GIF dialog.animation_maker.gif_reading=Leyendo GIF dialog.animation_maker.gif_processing=Procesando GIF @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=Limpieza de caches de gradle dialog.cache_cleanup.progress.stopping_daemons=Desactivar las acciones de fondo de gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Limpiando la carpeta de cachés de Gradle dialog.cache_cleanup.progress.build_task=Ejecutando la tarea de build de gradle -dialog.code_error.compilation_desc=El archivo principal de mod no se compiló correctamente.

Esto normalmente es causado por inconsistencias en el código de mod durante la build.
MCreator puede resolver este problema regenerando el código completo del mod.

Si ha bloqueado elementos o archivos base, también puede causar este error.


Haga clic en Regenerar código para continuar con esta acción.
dialog.code_error.compilation_title=Errores al compilar el archivo del mod -dialog.code_error.compilation_list=Su espacio de trabajo contiene elementos mal compilados.

Probablemente esto fue causado por el último elemento que agregó o editó. Intente alterar la configuración de los elementos
que causan errores de compilación (están listados a continuación) para intentar solucionar este problema.

Si no puede resolver este problema, exporte el espacio de trabajo a un archivo ZIP que pueda enviar desde el menú Archivo y enviarlo a través de
nuestra página de asistencia en nuestro sitio web para que podamos intentar ayudarlo.

Lista de elementos del mod que causan errores de compilación (recortado hasta 10 elementos)\:

dialog.code_error.regenerate_code=Regenerar código dialog.code_error.ignore_error=Ignorar error dialog.code_error.show_in_workspace=Mostrar en el espacio de trabajo @@ -152,6 +146,7 @@ dialog.gui.button_add_title=Editor de botones dialog.gui.button_change_width=Después de tocar en Ok, haga click derecho para cambiar las proporciones del botón dialog.gui.button_resize=Para cambiar el tamaño del botón use la herramienta mover y precione click derecho dialog.gui.button_text=Texto del botón\: +dialog.gui.button_is_undecorated=¿El botón está sin decorar? dialog.gui.button_event_on_clicked=Al tocar el botón dialog.gui.button_display_condition=Condición para mostrar el botón dialog.gui.image_button_add_title=Editor de botón de imagen @@ -173,6 +168,16 @@ dialog.gui.model_rotation_x=Rotación del modelo en X en grados dialog.gui.model_follow_mouse=Seguir el movimiento del ratón con giro dialog.gui.add_tooltip=Editor de información dialog.gui.tooltip_display_condition=Condición de visualización de la información +dialog.gui.anchor=Anclar a\: +dialog.gui.anchor.top_left=Izquierda superior +dialog.gui.anchor.top_center=Centro superior +dialog.gui.anchor.top_right=Derecha superior +dialog.gui.anchor.center_left=Centro izquierda +dialog.gui.anchor.center=Centro +dialog.gui.anchor.center_right=Centro derecha +dialog.gui.anchor.bottom_left=Izquierda inferior +dialog.gui.anchor.bottom_center=Centro inferior +dialog.gui.anchor.bottom_right=Derecha inferior dialog.gradle_console.clear_log=Borrar informe dialog.gradle_console.search=Buscar en la consola dialog.gradle_console.start_build=Haga click en esto para ejecutar una build del espacio de trabajo
Puede comenzar una build usando Ctrl + haciendo click en la pestaña de Consola @@ -327,7 +332,12 @@ dialog.image_maker.tools.types.stamp=Sello dialog.image_maker.tools.types.stamp_description=Una herramienta para aplicar texturas de plantillas dialog.image_maker.tools.types.threshold=Umbral\: dialog.image_maker.tools.types.shape=Forma\: +dialog.image_maker.tools.types.shape.square=CUADRADO +dialog.image_maker.tools.types.shape.frame=MARCO +dialog.image_maker.tools.types.shape.circle=CÍRCULO +dialog.image_maker.tools.types.shape.ring=ARO dialog.image_maker.tools.types.smooth_edge=Suavizar bordes +dialog.image_maker.tools.types.pick_opacity=Herramienta cuentagotas de opacidad dialog.image_maker.tools.types.saturation=Saturación\: dialog.image_maker.tools.types.drawing_size=Tamaño\: dialog.image_maker.tools.types.drawing_connect_points=Conectar puntos @@ -338,7 +348,13 @@ dialog.image_maker.tools.component.colorselector_swap=Intercambiar colores de fo dialog.image_maker.tools.component.colorselector_select_foreground=Seleccionar el color en primer plano\: dialog.image_maker.tools.component.colorselector_select_background=Seleccionar color de fondo\: dialog.item_selector.title=Selector de bloque/objeto +dialog.item_selector.use_selected=Usar lo elegido dialog.item_selector.use_tag=Usar tag +dialog.item_selector.use_tag.entities=Usar etiqueta de entidad +dialog.item_selector.enter_tag_name.blocks=Escribe el nombre de la etiqueta del bloque debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.items=Escribe el nombre de la etiqueta del ítem debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.biomes=Escribe el nombre de la etiqueta del bioma debajo (ver la lista para plantillas)\:
+dialog.item_selector.enter_tag_name.entities=Escribe el nombre de la etiqueta de la entidad debajo (ver la lista para plantillas)\:
dialog.item_selector.error_invalid_tag_name_title=Nombre de tag inválido dialog.item_selector.all=Todo dialog.item_selector.blocks=Bloques @@ -347,12 +363,18 @@ dialog.item_selector.potions=Pociones dialog.item_selector.custom_elements=Elementos personalizados dialog.item_selector.name=Nombre\: dialog.item_selector.display_filter=\ Mostrar filtro\: +dialog.list_editor.title=Editor de lista de cadena de texto +dialog.list_editor.add=Añadir entrada nueva +dialog.list_editor.clear=Eliminar todas las entradas +dialog.list_editor.validator=Lista de entradas +dialog.list_editor.errors.message=Algunas entradas en la lista no están bien definidas. +dialog.list_editor.errors.title=Entradas en la lista no válidas dialog.modelement_id.info_message=¡El código de este elemento está bloqueado\!
Cuando el código está bloqueado, MCreator no puede modificar su código fuente. dialog.modelement_id.info_message_title=El código del elemento está bloqueado dialog.modelement_id.registry_name=Nombre del elemento\: dialog.modelement_id.registry_name_info=Nombre del elemento (no todos los elementos lo usan) dialog.modelement_id.registry_name_validator=Nombre del elemento -dialog.modelement_id.use_caution_warn=¡Use esta herramienta con cuidado\!

¡Cambiar IDs puede corromper mundos existentes y causar
conflictos con otro elemento del mod\! +dialog.modelement_id.use_caution_warn=¡Use esta herramienta con cuidado\! Asegúrate de no usar nombres duplicados.

¡Cambiar nombres de registro puede corromper mundos existentes y causar
conflictos con otros elementos del mod\! dialog.modelement_id.id_and_registry_names="{0} - IDs y nombres de registro" dialog.modelement_id.invalid_registry_name=¡El nombre de registro introducido es inválido\!
Los cambios no se han guardado. dialog.modelement_id.invalid_registry_name_title=Nombre de registro inválido @@ -393,6 +415,12 @@ dialog.preferences.themes.list=
Lista dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: tipo de propiedad desconocido +dialog.search_usages.type.resource.texture=textura +dialog.search_usages.type.resource.model=modelo +dialog.search_usages.type.resource.sound=sonido +dialog.search_usages.type.resource.structure=estructura +dialog.search_usages.type.global_variable=variable global +dialog.search_usages.type.localization_key=clave de localización dialog.sounds.name=Nombre del sonido dialog.sounds.registry_name=Nombre del sonido\:
Si renombra el sonido en uso, las referencias existentes se corromperán dialog.sounds.files=Archivos de sonido\: @@ -427,7 +455,6 @@ dialog.textures_mapping.title_for_model=Texturas del modelo dialog.textures_mapping.add_new=Añadir texturas al modelo dialog.textures_mapping.enter_name_message=Introduzca el nombre de sus texturas.
Este nombre se utiliza para identificar sus texturas cuando
selecciona texturas para su modelo. dialog.textures_mapping.enter_name_title=Texturas nuevas -dialog.textures_mapping.jump_to=Saltar a... dialog.textures_mapping.save=Guardar texturas dialog.textures_mapping.model_texture_part=Parte de texturas del modelo\:
{0} dialog.textures_mapping.confirm_deletion_message=¿Está seguro de que desea eliminar estas texturas?
¡Puede obtener texturas corrompidas si aún están en uso\! @@ -550,7 +577,6 @@ workspace.elements.list.filter_all=Mostrar todos workspace.elements.list.filter_locked=Elementos bloqueados workspace.elements.list.filter_witherrors=Elementos con errores workspace.elements.list.ascending=Ascendente -workspace.category.mod_elements=Elementos del mod workspace.category.resources=Recursos workspace.category.variables=Variables workspace.category.localization=Idiomas @@ -567,14 +593,15 @@ workspace.elements.list.edit.delete=Eliminar workspace.elements.list.edit.duplicate=Duplicar elemento... workspace.elements.list.edit.code=Abrir elemento en un editor de código workspace.elements.list.edit.lock=Bloquear / Desbloquear -workspace.elements.list.edit.id=Editar ID del elemento... +workspace.elements.list.edit.id=Editar nombres de registro... workspace.elements.list.edit.add.folder=Añadir carpeta... workspace.elements.list.edit.rename.folder=Renombrar la carpeta seleccionada... -workspace.elements.confirm_delete_message=¿Está seguro de que quiere eliminar los elementos seleccionados ({0})?

Si otros elementos usan información de estos (Como una receta, Tab o evento) tendrá
que eliminarlos también. De otro modo habrá errores.

Elementos en carpetas y subcarpetas serán movidos a la carpeta base workspace.elements.delete.tooltip=Eliminar el elemento seleccionado workspace.elements.edit_code.tooltip=Editar código del elemento seleccionado workspace.elements.lock_code_tooltip=Bloquear/Desbloquear código de elementos
Al bloquear el código, MCreator no lo cambiará, por eso se vuelve editable
desde el punto de vista del programador y no cambia incluso al cambiarlo de espacio de trabajo.
¡Use esta opción sólo si sabe como y es conciente del riesgo que conlleva
bloquear el código\! -workspace.elements.edit_registry_names.tooltip=Editar las IDs de los elementos del mod +workspace.elements.edit_registry_names.not_possible_message=No es posible utilizar esta herramienta para editar nombres de registro de este tipo de elemento. +workspace.elements.edit_registry_names.not_possible_title=No es posible editar nombre de registro +workspace.elements.edit_registry_names.tooltip=Editar nombres de registro workspace.elements.empty.tip=Presione %1 para añadir elementos workspace.elements.lock_modelement_message=¡Estás intentando bloquear o desbloquear el código de un elemento\!

Al bloquearlo, MCreator no lo cambiará, incluso si
al actualizarse esto implique no solucionar errores
en los elementos bloqueados.

Los elementos seleccionados y bloqueados se desbloquearán con esta acción.
Esto implica que los elementos con códigos personalizados se verán modificados.

Por favor lea la página en la Web de MCreator sobre bloqueo de elementos antes de usar esta opción. workspace.elements.lock_modelement_confirm=¿Bloquear o desbloquear el código de este elemento? @@ -648,8 +675,6 @@ trigger.entity_travels_to_dimension=Al entidad cambiar de dimensión trigger.entity_uses_totem=La entidad usa un tótem trigger.explosion_occurs=Al suceder una explosión trigger.farmland_trampled=Al ser pisoteada la tierra de cultivo -trigger.gem_dropped=Al soltar una gema -trigger.gem_expired=Gema expira trigger.item_crafted=Al objeto ser creado trigger.item_destroyed=Al objeto ser destruido trigger.item_smelted=Al fundirse el objeto @@ -682,9 +707,26 @@ trigger.sapling_glow=Al crecer un brote trigger.village_siege=Al zombies atacar una aldea trigger.world_ticks=Cada tick del mundo trigger.no_ext_trigger=Sin evento adicional +blockly.category.blockprocedures=Procedimientos de bloque +blockly.category.blockactions=Acciones +blockly.category.blockdata=Datos +blockly.category.energyandfluid=Energía & fluido +blockly.category.damagesources=Procedimientos de daño blockly.category.directionactions=Cuadros de dirección +blockly.category.entityprocedures=Procedimientos de entidad +blockly.category.entitydata=Datos +blockly.category.entitymanagement=Acciones +blockly.category.itemdata=Datos +blockly.category.itemmanagement=Acciones +blockly.category.itemprocedures=Procedimientos de ítem +blockly.category.playerprocedures=Procedimientos de jugador +blockly.category.playerdata=Datos +blockly.category.playermanagement=Acciones blockly.category.projectilemanagement=Procedimientos de proyectil blockly.category.guimanagement=Slot & Procedures de la GUI +blockly.category.worldprocedures=Procedimientos de mundo +blockly.category.worlddata=Datos +blockly.category.worldmanagement=Acciones blockly.category.basictasks=Tareas básicas blockly.category.combattasks=Tareas de combate blockly.category.movementtasks=Tareas de movimiento @@ -714,6 +756,7 @@ blockly.category.intproviders=Proveedores de entero blockly.category.heightplacements=Posicionamiento de altura blockly.category.orefeatures=Características de mena blockly.category.placements=Posicionamientos comunes +blockly.category.treefeatures=Detalles de árbol blockly.category.arg_types=Parámetros blockly.category.actions=Acciones blockly.block.action_result_type=Resultado de la acción del tipo %1 @@ -774,6 +817,7 @@ blockly.block.blockat_is_solid=El bloque en x\: %1 y\: %2 z\: %3 es sólido blockly.block.blockat_is_side_solid=Es el lado %1 del bloque en x\: %2 y\: %3 z\: %4 sólido blockly.block.blockat_lightlevel=Nivel de luz del bloque en x\: %1 y\: %2 z\: %3 blockly.block.blockat_opacity=Opacidad del bloque en x\: %1 y\: %2 z\: %3 +blockly.block.blockat_plant_type=Hay un bloque en x\: %1 y\: %2 z\: %3 de tipo de planta %4 blockly.block.blockitem_to_mcitem=Convertir %3 %1 en %2 blockly.block.blockstate_from_deps=Estado del bloque proporcionado blockly.block.blockstate_get_boolean_property=Obtener propiedad booleana %1 de %3 %2 @@ -787,6 +831,7 @@ blockly.block.blockstate_with_integer_property=%1 con propiedad entera %2 establ blockly.block.compare_blockstates=¿Es %3 %1 el mismo estado de bloque que %4 %2? blockly.block.compare_dimensionids=%1 \= %2 blockly.block.compare_directions=%1 \= %2 +blockly.block.compare_entities=Es %1 la misma entidad que %2 blockly.block.compare_mcblocks=%3 %1 \= %4 %2 blockly.block.compare_mcitems=%3 %1 \= %4 %2 blockly.block.compare_mcitems_oredictionary=Está %1 tagged en tags de objetos como %2 @@ -819,10 +864,18 @@ blockly.block.entity_allow_flying=Permitir a %2 volar si %1 sino no blockly.block.entity_armor_value=Valor de armadura de %1 blockly.block.entity_canusecommand=%2 tiene permisos de comandos nivel %1 blockly.block.entity_check_creature_type=Es %1 un tipo de criatura %2 +blockly.block.entity_checkgamemode=Está %1 en modo de juego %2 blockly.block.entity_clear_inventory=Vaciar inventario de %1 blockly.block.entity_clearpotions=Quitar efectos de poción de %1 blockly.block.entity_close_gui=Cerrar GUIs abiertas de %1 blockly.block.entity_create=%1 instancia de entidad estática de tipo %2 (no generar) +blockly.block.entity_data_logic_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos lógicos %3 +blockly.block.entity_data_logic_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos lógicos %3 a %4 +blockly.block.entity_data_integer_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos enteros %3 +blockly.block.entity_data_integer_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos enteros %3 a %4 +blockly.block.entity_data_string_get=Para la entidad personalizada %1 de tipo %2 obtener el valor del parámetro de datos de texto %3 +blockly.block.entity_data_string_set=Para la entidad personalizada %1 de tipo %2 establecer el valor del parámetro de datos de texto %3 a %4 +blockly.block.entity_deal_custom_damage=Infligir %1 de daño personalizado a %2 localizado como death.attack.%3(.player/.item) blockly.block.entity_despawn=Despawnear %1 %2 blockly.block.entity_dimension_id=ID de la dimensión %1 está en blockly.block.entity_direction=Dirección (yaw) en punto relativo a S de %1 @@ -836,9 +889,8 @@ blockly.block.entity_get_armor_slot_item=Objeto en el slot de armadura %1 de %2 blockly.block.entity_get_controlling_passenger=%2 Consigue pasajero que controla %1 blockly.block.entity_get_first_passenger=%2 Obtén el primer pasajero de %1 blockly.block.entity_get_fire_ticks=Obtenga los ticks restantes en llamas de %1 -blockly.block.entity_get_fly_speed=Obtener velocidad de vuelo de %1 blockly.block.entity_get_oxygen=Obtener oxígeno de %1 -blockly.block.entity_get_root_vehicle=Obtenga la entidad en el nivel más bajo que %1 está montando, o a si mismo si no está montando nada +blockly.block.entity_get_percent_frozen=Obtener porcentaje estático de %1 blockly.block.entity_get_saturation=Nivel de saturación de %1 blockly.block.entity_get_scoreboard_score=Puntos en el scoreboard de %2 para %1 blockly.block.entity_get_shootpower=Poder de disparo de %1 si es un proyectil @@ -847,10 +899,10 @@ blockly.block.entity_get_spawn_x=Obtén coordenada de aparición X de %1 para su blockly.block.entity_get_spawn_y=Obtén coordenada de aparición Y de %1 para su mundo actual %2 blockly.block.entity_get_spawn_z=Obtén coordenada de spawn Z de %1 para su mundo actual %2 blockly.block.entity_get_stepheight=Obtener altura del paso de %1 -blockly.block.entity_get_walk_speed=Obtener velocidad de caminar de %1 +blockly.block.entity_get_uuid=Obtener UUID de %1 blockly.block.entity_getowner=%2 Dueño de %1 si está domesticado blockly.block.entity_getridingentity=%2 Entidad %1 está montando -blockly.block.entity_gettargetentity=%2 Entidad %1 está persiguiendo para atacar +blockly.block.entity_gettargetentity=%2 Entidad que %1 está persiguiendo para atacar blockly.block.entity_has_achievement=Tiene %1 progreso completado %2 %3 blockly.block.entity_has_recipe=Tiene %1 desbloqueada la receta %2 blockly.block.entity_has_screen_open=Está actualmente abierta la GUI %2 para %1 @@ -860,10 +912,12 @@ blockly.block.entity_haspotioneffect=Tiene %1 activado el efecto de poción\: blockly.block.entity_health=Vida actual de %1 blockly.block.entity_health_max=Vida máxima de %1 blockly.block.entity_inventory_foreach=Por cada slot en el inventario de %1 copiar contenido como %2 hacer %3 +blockly.block.entity_is_attackable=Puede %1 ser atacado blockly.block.entity_is_elytra_flying=Está %1 elytra volando blockly.block.entity_is_glowing=Está %1 brillando blockly.block.entity_is_swimming=Está %1 nadando blockly.block.entity_is_tagged_in=Está %1 tagged en tags de entidades como %2 +blockly.block.entity_is_underwater=%1 está bajo el agua blockly.block.entity_isalive=Está %1 vivo blockly.block.entity_isbeingridden=Está %1 siendo montado blockly.block.entity_isblocking=Está %1 bloqueando @@ -934,7 +988,9 @@ blockly.block.entity_set_display_name=Fijar nombre visual de %2 a %1 blockly.block.entity_set_fire=Hacer arder a %2 por %1 segundos blockly.block.entity_set_flying=Hacer volar a %2 si %1 sino no blockly.block.entity_set_foodlevel=Fijar nivel de comida de %2 a %1 +blockly.block.entity_set_gamemode=Fijar modo de juego de %1 a %2 blockly.block.entity_set_health=Fijar vida de %2 a %1 +blockly.block.entity_set_invisible=Fijar invisibilidad de %1 a %2 blockly.block.entity_set_mainhand_item=Establecer objeto en la mano principal de %3 como %2 %1 blockly.block.entity_set_movement=Intentar anular el vector de movimiento de %4 a vx\: %1 vy\: %2 vz\: %3 blockly.block.entity_set_nogravity=Que no afecte la gravedad a %1 %2 @@ -957,9 +1013,6 @@ blockly.block.entity_submerged_height=Altura sumergida de %1 blockly.block.entity_swing_mainhand=Rotar mano principal de %1 blockly.block.entity_swing_offhand=Rotar mano secundaria de %1 blockly.block.entity_switch_dimension=Cambiar dimensión de %1 a %2 -blockly.block.entity_vel_x=Velocidad X de %1 -blockly.block.entity_vel_y=Velocidad Y de %1 -blockly.block.entity_vel_z=Velocidad Z de %1 blockly.block.entity_xplevel=Nivel de experiencia de %1 blockly.block.entity_xp_until_next_level=Obtén la cantidad de XP necesaria por %1 para ganar un nivel blockly.block.execute_command=Ejecutar comando /%1 en x\: %2 y\: %3 z\: %4 %5 @@ -996,9 +1049,11 @@ blockly.block.item_cooldown_for=Dar cooldown %3 por %1 ticks a %2 blockly.block.item_damage=Aplicar %1 de daño a %2 blockly.block.item_enchanted_with_xp=%1 encantado con %2 niveles de experiencia, encantamientos tesoro\: %3 blockly.block.item_fuel_power=Capacidad de fundición de %1 +blockly.block.item_get_cooldown=Obtener el porcentaje de enfriamiento restante de %2 para %1 blockly.block.item_get_damage=Daño de %1 blockly.block.item_get_enhancement=Nivel de encantamiento de %1 blockly.block.item_get_max_damage=Daño máximo posible de %1 +blockly.block.item_is_cooldown=Está %2 en enfrentamiento para %1 blockly.block.item_is_enchantable=Es %1 encantable blockly.block.item_is_enchanted=Está %1 encantado blockly.block.item_istype=Es %1 del tipo de objeto %2 @@ -1041,6 +1096,7 @@ blockly.block.math_random_int_between=Entero aleatorio entre min\: %1 y max\: %2 blockly.block.math_random_number_between=Número aleatorio entre min\: %1 y max\: %2 blockly.block.mcitem_to_block=Convertir %2 %1 a %3 o a aire si la conversión falla blockly.block.move_entity=Fijar locación de %4 a x\: %1 y\: %2 z\: %3 +blockly.block.place_schematic=Colocar archivo de estructura NBT %6 %7 en x\: %1 y\: %2 z\: %3 con rotación\: %4 espejo\: %5 %8 blockly.block.projectile_shoot_from_entity=Dispara %1 desde la entidad\: %2 con velocidad\: %3 imprecisión\: %4 %5 blockly.block.projectile_shoot_from_pos=Disparar %1 de x\: %2 y\: %3 z\: %4 con dirección dx\: %5 dy\: %6 dz\: %7 velocidad\: %8 inprecisión\: %9 %10 blockly.block.projectiles_arrow=Flecha de tipo %1 con daño\: %2 retroceso\: %3 perforación\: %4 tirador\: %5 fuego\: %6 partículas\: %7 tipo de recogida\: %8 @@ -1053,7 +1109,7 @@ blockly.block.set_time=Fijar hora a %1 %2 blockly.block.spawn_entity=Invocar entidad\: %4 en x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Generar %6 en x\: %1 y\: %2 z\: %3 con yaw\: %4 pitch\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Generar %9 en x\: %1 y\: %2 z\: %3 con yaw\: %4 pitch\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Generar objeto/gema %1 en x\: %2 y\: %3 z\: %4 tiempo para agarrar\: %5 desaparecer\: %6 %7 +blockly.block.spawn_gem=Generar ítem soltado %1 en x\: %2 y\: %3 z\: %4 retraso de recogida\: %5 desaparición\: %6 %7 blockly.block.spawn_particle=Generar partícula en x\: %1 y\: %2 z\: %3 con vx\: %4 vy\: %5 vz\: %6 de tipo\: blockly.block.spawn_particle_multi=Generar %8 partículas en el lado del servidor en x\: %1 y\: %2 z\: %3 en área dx\: %4 dy\: %5 dz\: %6 con velocidad %7 de tipo\: %9 %10 blockly.block.spawn_xporb=Generar orbe de experiencia en x\: %2 y\: %3 z\: %4 con cantidad de experiencia de %1 %5 @@ -1109,13 +1165,16 @@ blockly.block.attack_on_collide=Haz un ataque cuerpo a cuerpo/de contacto con el blockly.block.attack_with_range=Haz un ataque cuerpo a cuerpo con el factor de velocidad %2 %1 (perseguir después de perder la vista %3) %4 blockly.block.avoid_entity=Evitar entidad de tipo %4 en radio %1 velocidad cercana %2 velocidad lejana %3 %5 blockly.block.break_blocks=Romper bloques de tipo %2 velocidad %1 altura máxima de detección %3 %4 +blockly.block.find_and_move_to_air=Encontrar y moverse hacia aire %1 blockly.block.breed=Cría, encuentra pareja con velocidad %1 si animal %2 +blockly.block.climb_powder_snow=Trepar encima de nieve en polvo %1 blockly.block.doors_break=Romper puertas %1 blockly.block.doors_close=Cerrar puertas %1 blockly.block.doors_open=Puertas abiertas %1 blockly.block.eat_grass=Comer hierba %1 blockly.block.fight_as_owner=Dañar entidades a las que el dueño atacó un %1 blockly.block.fly=Vuela alrededor con el multiplicador de velocidad %1 (solo para entidades voladoras) %2 +blockly.block.follow_boat=Seguir un barco %1 blockly.block.follow_entity=Seguir a criaturas iguales con velocidad %1, máxima distancia %2 y área de seguimiento %3 %4 blockly.block.follow_item_in_hands=Seguir a quién tenga %2 en la mano con velocidad %1 se asusta del movimiento %3 %4 blockly.block.follow_owner=Seguir al dueño con velocidad %1 distancia mínima %2 distancia máxima %3 si está domesticado %4 @@ -1128,7 +1187,7 @@ blockly.block.protect_owner=Dañar entidades que atacaron al dueño %1 blockly.block.restrict_sun=Restringir el sol %1 blockly.block.swim=Nadar erraticamente con velocidad %1 %2 blockly.block.swim_in_water=Flota en el agua %1 -blockly.block.watch_closest_entity=Vigilar a la entidad más cercana de tipo %2 en un radio de %1 %3 +blockly.block.try_and_find_water=Intentar encontrar agua %1 blockly.block.wander=Vagar (activa caminar) con velocidad %1 %2 blockly.block.wander_avoid_water=Vagar evitando agua con velocidad %1 %2 blockly.block.biome_entered=Si el jugador entra al bioma @@ -1182,6 +1241,7 @@ blockly.block.block_predicate_any_of=Se cumple cualquier condición\: blockly.block.block_predicate_any_of.empty=(Nunca) blockly.block.block_predicate_any_of.input=condición\: blockly.block.block_predicate_inside_world=Posición desplazada por x\: %1 y\: %2 z\: %3 está dentro de los límites del mundo +blockly.block.block_predicate_has_sturdy_face=Bloque en posición de desplazada x\: %1 y\: %2 z\: %3 tiene la cara sólida %4 blockly.block.block_predicate_is_air=Hay aire en la posición actual blockly.block.block_predicate_is_air_or_water=Es aire o agua en la posición actual blockly.block.block_predicate_matching_blocks=Bloque en posición de desplazamiento x\: %2 y\: %3 z\: %4 está en la lista de bloques o tiene la tag\: %1 @@ -1200,6 +1260,7 @@ blockly.block.feature_block_column_simple=Función de columna de bloque con altu blockly.block.feature_coral_claw=Función de garra de coral submarino blockly.block.feature_coral_mushroom=Función de champiñón de coral submarino blockly.block.feature_coral_tree=Característica del árbol de coral subacuático +blockly.block.feature_custom_structure=Estructura personalizada\: %1 %2 desplazada por x\: %3 y\: %4 z\: %5 %6 con rotación aleatoria\: %7 %8 volteo aleatorio\: %9 %10 no colocar bloques en la lista de bloques o etiqueta\: %11 blockly.block.feature_delta=Característica delta con contenido\: %1 borde\: %2 tamaño\: %3 tamaño\: %4 blockly.block.feature_forest_rock=Función de roca del bosque con bloque\: %1 blockly.block.feature_geode_simple=Característica de geodas con tamaño %1 %2 no puede reemplazar los bloques en la etiqueta\: %3 %4 descartar si %5 bloques en la etiqueta %6 se encuentran %7 llenando\: %8 capa interna\: %9 variante de cambio\: %10 capa media\: %11 capa externa\: %12 @@ -1226,6 +1287,9 @@ blockly.block.feature_simple_random_mutator.input=Característica blockly.block.feature_simple_random_selector=Característica aleatoria de la lista\: blockly.block.feature_simple_random_selector.input=característica\: blockly.block.feature_simple_random_selector.empty=La lista no puede estar vacía +blockly.block.feature_tree.decorator_input=decorador\: +blockly.block.feature_tree_pine.empty=(Ninguno) +blockly.block.feature_tree_simple.empty=(Ninguno) blockly.block.placed_feature_inline=Característica configurada\: %1 con posición extra\: %2 blockly.block.placed_feature_inline.disabled_placement=Esta colocación no se puede utilizar dentro de las características colocadas en línea blockly.block.placement_biome_filter=Sólo si el bioma en la posición actual tiene esta característica @@ -1408,6 +1472,7 @@ modelement.plant=Planta modelement.potioneffect=Efecto de poción modelement.potion=Artículo de poción modelement.procedure=Procedure +modelement.projectile=Proyectil modelement.recipe=Receta modelement.structure=Estructura modelement.tab=Tab del creativo @@ -1946,6 +2011,7 @@ elementgui.block.error_block_must_have_name=El bloque debe tener un nombre elementgui.block.page_tile_entity=TileEntity elementgui.block.page_energy_fluid_storage=Almacenamiento de energía y fluidos elementgui.command.name=Nombre del comando (sin /)\: +elementgui.command.type=Tipo\: elementgui.command.permission_level=Nivel de permisos para ejecutarlo\:
Nivel mínimo para ejecutar el comando elementgui.command.warning.empty_string=El comando no puede estar vacío elementgui.command.arguments=Constructor de parámetros de comando y acciones @@ -1969,7 +2035,6 @@ elementgui.dimension.biomes_in=Biomas en la dimensión\: elementgui.dimension.main_filler_block=Bloque base para rellenar\:
Normal, Nether, End elementgui.dimension.fluid_block=Fluido\:
Normal, Nether, End elementgui.dimension.sleep_result=Resultado de intentar dormir\: -elementgui.dimension.fog_air_color=Color del cielo/niebla\:
Deje en POR DEFECTO para que funcione como en Minecraft elementgui.dimension.enable_dimension_portal=Activar portal para la dimensión\: elementgui.dimension.portal_frame_block=Bloque del marco del portal\: elementgui.dimension.portal_particles=Partículas para el bloque del marco\: @@ -1993,8 +2058,6 @@ elementgui.enchantment.curse=¿Es este encantamiento una maldición? elementgui.enchantment.allowed_on_books=¿Libros pueden estar encantados con este encantamiento? elementgui.enchantment.can_generate_in_loot_tables=¿Se puede generar este encantamiento en las tablas de botín? elementgui.enchantment.can_villager_trade=¿Puede aparecer este encantamiento en los intercambios con aldeanos? -elementgui.enchantment.compatible_enchantments=Se puede combinar con\:
Dejar en blanco para seleccionar todos -elementgui.enchantment.can_apply_to=Se puede aplicar a\:
Deje en blanco para seleccionar todos elementgui.enchantment.needs_name=El encantamiento necesita un nombre elementgui.gamerule.name=Nombre visual\: elementgui.gamerule.display_name=Nombre de la regla del juego\:
Este nombre se usará en la pestaña de configuración de reglas del juego @@ -2100,6 +2163,7 @@ elementgui.item.number_of_uses=Durabilidad del objeto (Deje 0 para que no elementgui.item.is_immune_to_fire=¿Es inmune al fuego? elementgui.item.recipe_remainder=Receta que deja
Asegúrese de maracar "¿No se gasta al usarse en una receta?" y deje en blanco para usar el artículo actual. elementgui.item.damage_vs_entity=Daño que infringe a mobs\:
Daño cuerpo a cuerpo +elementgui.item.glowing_effect=¿Ítem tiene efecto de brillo? elementgui.item.item_3d_model=Modelo 3D del objeto elementgui.item.bind_gui=Enlazar este elemento a GUI\:
Establecer a <NONE> para desactivar el inventario elementgui.item.inventory_size=Tamaño del inventario (cantidad de slots)\:
Establecer este valor a la ID de slot más grande en el GUI + 1 @@ -2130,6 +2194,9 @@ elementgui.item.custom_states.add=Añadir definición de estado elementgui.item.custom_state.model=Modelo 3D del objeto\: elementgui.item.custom_state.remove=Eliminar este estado elementgui.item.page_item_states=Estados del objeto +elementgui.item.projectile=Proyectil que dispara\: +elementgui.item.shoot_constantly=¿Disparar constantemente cuando está activo? +elementgui.item.error_needs_name=Comida necesita un nombre elementgui.item.error_item_needs_name=El objeto necesita un nombre elementgui.keybind.event_key_pressed=Al ser presionada elementgui.keybind.event_key_released=Al ser soltada @@ -2139,8 +2206,8 @@ elementgui.keybind.key_binding_category=Clave de traducción de categoría de co elementgui.keybind.key_procedure_triggers=Eventos de la acción ejecutada elementgui.keybind.error_key_needs_name=La acción necesita un nombre elementgui.keybind.error_key_category_needs_name=Nombre de la categoría de la acción +elementgui.living_entity.condition_solid_bounding_box=¿La caja delimitadora es sólida? elementgui.living_entity.disable_collisions=Deshabilitar colisiones -elementgui.living_entity.has_ai=Habilitar IA
Al utilizar la IA, asegúrese de tener algunas tareas de IA definidas a continuación elementgui.living_entity.immune_fire=Fuego elementgui.living_entity.immune_arrows=Flechas elementgui.living_entity.immune_fall_damage=Daño por caída @@ -2148,18 +2215,21 @@ elementgui.living_entity.immune_cactus=Cactus elementgui.living_entity.immune_drowning=Agua (Ahogarse) elementgui.living_entity.immune_lightning=Rayo elementgui.living_entity.immune_potions=Pociones +elementgui.living_entity.immune_player=Cuerpo a cuerpo de jugador elementgui.living_entity.immune_explosions=Explosiones elementgui.living_entity.immune_trident=Tridentes elementgui.living_entity.immune_anvil=Yunque elementgui.living_entity.immune_wither=Wither +elementgui.living_entity.immune_dragon_breath=Aliento de Dragón +elementgui.living_entity.is_water_mob=Agua es entidad +elementgui.living_entity.condition_can_breathe_underwater=Puede respirar bajo el agua +elementgui.living_entity.condition_fluids_can_push=Es empujado por fluidos elementgui.living_entity.is_flying_mob=Es la entidad voladora (La gravedad no le afecta) elementgui.living_entity.spawn_dungeons=Se generar en mazmorras elementgui.living_entity.is_rideable=Se puede montar elementgui.living_entity.control_forward=Control de movimiento hacia adelante elementgui.living_entity.control_strafe=Control de movimiento especial -elementgui.living_entity.is_breedable=Hacer esta entidad tipo animal, objeto de reproducción\:
La entidad base y el tipo de comportamiento se ignorarán si se marca elementgui.living_entity.is_tameable=Se puede domesticar -elementgui.living_entity.is_ranged=Haz que la entidad haga ataques a distancia de con un objeto, intervalo de ataque y radio\:
Añade al menos un Actúa de forma agresiva contra tareas de IA para definir objetivos de ataque.
Si se selecciona "Elemento predeterminado", selecciona el objeto proyectil o mantén vacío para usar la flecha elementgui.living_entity.event_struck_by_lightning=Al ser impactado por un rayo elementgui.living_entity.event_mob_falls=Al caerse elementgui.living_entity.event_mob_dies=Al morir @@ -2170,7 +2240,8 @@ elementgui.living_entity.event_mob_tick_update=Al estar viva elementgui.living_entity.event_player_collides_with=Al jugador colisionar con la entidad elementgui.living_entity.event_initial_spawn=Al generarse elementgui.living_entity.condition_natural_spawn=Condición de generación -elementgui.living_entity.behaviour=Características de comportamiento (Los mobs son agresivos, las criaturas son pacíficas)\: +elementgui.living_entity.condition_is_model_transparent=¿Modelo de entidad es transparente? +elementgui.living_entity.condition_is_shaking=¿Modelo de entidad está agitando? elementgui.living_entity.creature_type=Tipo de criatura (define algunos atributos especiales)\: elementgui.living_entity.follow_range_tracking_range=Rango de seguimiento, rango de rastreo\: elementgui.living_entity.movement_speed_step_height=Velocidad de movimiento, altura del paso\: @@ -2183,7 +2254,6 @@ elementgui.living_entity.name=Nombre de la entidad\: elementgui.living_entity.entity_model=Modelo de la entidad\:
Aceptados\: JAVA elementgui.living_entity.entity_model_import=Toque acá para importar una textura para la entidad elementgui.living_entity.texture=Textura de la entidad\:
La textura necesita encajar con el modelo (No use skins de jugadores para bípedos, no funcionarán) -elementgui.living_entity.glow_texture=Textura brillante de la entidad (Optativo)\:
Para hacer texturas brillantes, no emitirán luz elementgui.living_entity.bounding_box=Caja de colisión de la entidad\:
Ancho, profundidad, altura, tamaño de la sombra, Posición Y de la entidad montada elementgui.living_entity.spawn_egg_options=Opciones del generador (Huevo)\:
Habilitar, color principal, color secundario y tab del creativo elementgui.living_entity.mob_boss=La entidad tiene una barra de vida de jefe final\: @@ -2205,14 +2275,22 @@ elementgui.living_entity.does_spawn_in_dungeons=¿Esta entidad aparece en mazmor elementgui.living_entity.spawn_general_condition=Condición de generación personalizada\:
Si usa una condición personalizada se sobrescribirá el tipo de generación
Sin embargo, la probabilidad de generación si se utilizará.
elementgui.living_entity.bind_to_gui=Ligar esta entidad a una GUI\:
Deje en blanco para desactivar el inventario (Querrá eso en la mayoría de los casos)
elementgui.living_entity.inventory_size=Tamaño del inventario (cantidad de slots)\:
Establecer este valor a la ID de slot más grande en el GUI + 1 +elementgui.living_entity.entity_data=Accesores de datos de entidad
Sincronizados entre los lados del cliente y el servidor +elementgui.living_entity.entity_data_entries=Entradas de datos +elementgui.living_entity.entity_data_entries.name=Nombre\: +elementgui.living_entity.entity_data_entries.type=Tipo\: +elementgui.living_entity.entity_data_entries.default_value=Valor por defecto\: +elementgui.living_entity.entity_data_entries.add_entry=Añadir nueva entrada +elementgui.living_entity.entity_data_entries.add_entry.name=Nombre de la entrada de datos\: +elementgui.living_entity.entity_data_entries.add_entry.type=Tipo de entrada de datos\: +elementgui.living_entity.entity_data_entries.add_entry.title=Nueva entrada de datos elementgui.living_entity.error_entity_model_needs_texture=El modelo de la entidad necesita una textura elementgui.living_entity.error_entity_needs_name=La entidad necesita un nombre elementgui.living_entity.page_visual=Visual elementgui.living_entity.page_sound=Sonido -elementgui.living_entity.page_behaviour=Comportamiento +elementgui.living_entity.page_entity_data=Datos sincronizados elementgui.living_entity.page_ai_and_goals=AI y objetivos elementgui.living_entity.page_spawning=Generación -elementgui.loot_table.name=LootTable elementgui.loot_table.registry_name=Nombre de registro de la LootTalbe\:
Use prefijos como "blocks/" para especificar categorías elementgui.loot_table.namespace=Espacio de nombre de la LootTable
Usar nombres de Minecraft para modificar LootTables Vanilla elementgui.loot_table.type=Tipo de LootTable\: @@ -2346,6 +2424,14 @@ elementgui.procedure.confirm_delete_var_msg=¿Está seguro de que desea el elementgui.procedure.required_dependencies=Dependencias requeridas elementgui.procedure.provided_dependencies=\ Dependencias proporcionadas elementgui.procedure.external_trigger_does_not_provide_all_dependencies=¡El evento que seleccionó no proporciona
todas las dependencias que su procedure requiere\! +elementgui.projectile.damage=Daño por defecto del proyectil\: +elementgui.projectile.ignite_fire=¿El proyectil empieza a arder al impacto? +elementgui.projectile.action_sound=Sonido de acción de lanzamiento de proyectil\: +elementgui.projectile.event_hits_block=Cuando el proyectil alcanza un bloque +elementgui.projectile.event_hits_player=Cuando el proyectil alcanza a un jugador +elementgui.projectile.event_hits_entity=Cuando el proyectil alcanca una entidad viva +elementgui.projectile.event_flying_tick=Tick mientras el proyectil vuela +elementgui.projectile.error_custom_model_needs_texture=Modelo personalizado de proyectil necesita una textura elementgui.recipe.is_shapeless=¿Es una receta sin posición? elementgui.recipe.definition=Definición de la receta elementgui.recipe.crafting_book_category=Categoría del libro de fabricación\: @@ -2367,9 +2453,16 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=La receta de elementgui.recipe.error_brewing_no_input_ingredient_and_result=La receta de la elaboración necesita tener una entrada, un ingrediente y una salida definidos (el aire no cuenta) elementgui.structuregen.event_structure_instance_generated=Al generarse la estructura elementgui.structuregen.import_tooltip=Toque acá para importar el archivo de estructura NBT
Use la sección de estructuras en el espacio de trabajo para más opciones. -elementgui.structuregen.select_tooltip=Estructura a generar\:
Para más opciones, use la sección de estructuras del espacio de trabajo elementgui.structuregen.ignore_blocks=Bloques a ignorar al colocar\: -elementgui.structuregen.error_select_structure_spawn=Necesita seleccionar una estructura que será generada para continuar. +elementgui.structuregen.surface_detection_type=Tipo de referencia de detección de suelo\: +elementgui.structuregen.terrain_adaptation=Tipo de adaptación del terreno\: +elementgui.structuregen.generation_stage=Etapa de generación\: +elementgui.structuregen.biomes_to_spawn=Biomas en los que generar la estructura\: +elementgui.structuregen.projection=Proyección al terreno\: +elementgui.structuregen.separation_spacing=Distribución de estructuras por chunk\: +elementgui.structuregen.separation=Separación\: +elementgui.structuregen.spacing=Espaciamiento\: +elementgui.structuregen.error_select_biomes=Selecciona al menos un bioma en el que esta estructura se genera elementgui.tab.name=Nombre de la tab\: elementgui.tab.icon=Ícono de la tab\: elementgui.tab.search_bar=Mostrar barra de búsqueda\: @@ -2437,11 +2530,6 @@ workspace.resources.tab.structures=Estructuras workspace.resources.tab.screenshots=Capturas de pantalla workspace.textures.new=Crear nueva textura workspace.textures.import=Importar texturas -workspace.textures.edit_selected=Editar... -workspace.textures.duplicate_selected=Duplicar... -workspace.textures.delete_selected=Eliminar -workspace.textures.export_selected=Exportar... -workspace.textures.confirm_deletion_message=¿Está seguro de que quiere eliminar este archivo?
Nota\: Si usó este archivo donde sea, podrían romperse texturas. workspace.textures.select_dupplicate_type=Seleccione el tipo de textura en la que quiere duplicar\: workspace.textures.select_texture_type=¿Qué tipo de textura es este archivo? workspace.textures.category.block=Texturas para bloques\: @@ -2453,47 +2541,29 @@ workspace.textures.category.screen=Texturas para pantallas (logros, GUIs, overla workspace.textures.category.armor=Texturas para armaduras\: workspace.textures.category.other=Otras texturas (pinturas, mod logo, ...)\: workspace.3dmodel.description={0}
Mapeo de textura\: {1} -workspace.3dmodels.edit_texture_mappings=Editar texturas del modelo... -workspace.3dmodels.redefine_animations=Definir animaciones del modelo... -workspace.3dmodels.delete_selected=Eliminar -workspace.3dmodels.delete_confirm_message=¿Está seguro de que desea eliminar este modelo?
Nota\: Si ya usa este modelo dónde sea, podría romper las texturas
y algunos elementos podrían no funcionar. -workspace.3dmodels.regenerating_code=Regenerando código -workspace.3dmodels.regenerating_entity_code=Regenerando código de las entidades -workspace.3dmodels.rebuilding_workspace=Reconstruyendo espacio de trabajo workspace.3dmodels.animation_unsupported_title=Animaciones no aceptadas workspace.3dmodels.animation_unsupported_message=¡Este modelo no funciona con animaciones\! workspace.3dmodels.mappings_unsupported_title=Sin texturas workspace.3dmodels.mappings_unsupported_message=¡Este modelo no funciona con esto\! -workspace.sounds.confirm_deletion_message=¿Está seguro de que quiere eliminar este sonido?
Nota\: Si usa este sonido dónde sea, ya no funcionará. -workspace.sounds.edit_selected=Editar... workspace.sounds.play_selected=Reproducir el seleccionado -workspace.sounds.delete_selected=Eliminar workspace.sounds.category=Categoría de sonido\:{0} workspace.sounds.files=Archivos de sonido\: {0} workspace.sounds.subtitle_and_category=Subtítulo\: {0}, Categoría de sonido\: {1} -workspace.screenshots.export_selected=Exportar... -workspace.screenshots.delete_selected=Eliminar workspace.screenshots.action_complete=Acción completada workspace.screenshots.use_background_message=Las capturas de pantalla seleccionadas se utilizarán como fondo cuando vuelva a abrir el programa. -workspace.screenshots.use_as_background=Usar como fondo de MCreator... -workspace.structure.confirm_deletion_message=¿Está seguro de que quiere eliminar las estructuras seleccionadas?
Nota\: Si las usa en cualquier lugar, ya no se generarán. workspace.variables.variable_name=Nombre de la variable workspace.variables.variable_type=Tipo de variable workspace.variables.variable_scope=Ámbito de la variable workspace.variables.initial_value=Valor inicial workspace.variables.add_new=Añadir nueva variable -workspace.variables.remove_selected=Eliminar workspace.variables.help=Ayuda con las variables workspace.variables.change_type=¿Seguro que quieres cambiar esta variable?
Si esta variable está en uso, esta acción puede causar errores de compilación.
Si acabas de crearlo, está muy bien cambiarlo. -workspace.variables.remove_variable_confirmation=¿Está seguro que desea eliminar las variables seleccionadas?
Si esta variable está en uso, esta acción puede causar errores de compilación. workspace.localization.add_entry=Añadir entrada de idioma -workspace.localization.remove_selected=Eliminar workspace.localization.export_to_csv=Exportar el idioma actual a CSV workspace.localization.import_csv=Importar CSV al idioma actual workspace.localization.key_name_title=Nombre clave workspace.localization.key_name_message=Ingrese un nombre clave para su entrada de idioma personalizada\: workspace.localization.confirm_delete_map=¿Está seguro de que quiere eliminar este mapa de idioma? -workspace.localization.confirm_delete_entry=¿Está seguro de que desea eliminar las entradas seleccionadas?
Nota\: Si todavía están en uso, los nombres de los elementos vinculados no funcionarán. workspace.localization.export_translation=Exportar traducción workspace.localization.confirm_export=¡Las traducciones por defecto (en_us) no se pueden exportar\!
Los textos en inglés se definen en los elementos. workspace.localization.warning_export=¡No puede importar un CSV como traducción por defecto (en_us)\!
Los textos en inglés se definen en los elementos. @@ -2595,6 +2665,7 @@ dialog.new_workspace.forge.modid=ID del Mod\:
Usado para identif dialog.new_workspace.forge.generator=Versión de Minecraft (generador)\:
Versión de la edición de Java dialog.new_workspace.forge.package=Nombre del paquete de Plugins Java\:
Usado para la raíz del generador de código dialog.new_workspace.forge.folder=Carpeta del espacio de trabajo\: +dialog.new_workspace.forge.toggle=\ Mod de Minecraft Forge dialog.new_workspace.fabric.display_name=Nombre visual del mod de Fabric\:
Este nombre se muestra en el juego dialog.new_workspace.fabric.modid=ID del Mod\:
Usado para identificar el mod dialog.new_workspace.fabric.generator=Versión de Minecraft (generador)\:
Versión de la edición de Java @@ -2718,6 +2789,7 @@ dialog.selector.damagesources.message=Por favor, seleccione un tipo de daño\: dialog.selector.dimension.message=Por favor, seleccione una dimensión\: dialog.selector.enchantments.message=Por favor, seleccione un encantamiento\: dialog.selector.entity.message=Por favor, seleccione una entidad\: +dialog.selector.entity_data.message=Por favor, seleccione un parámetro de datos\: dialog.selector.fluids.message=Por favor, seleccione un fluido\: dialog.selector.gamerules.message=Por favor, seleccione una regla de juego\: dialog.selector.gui.message=Por favor selecciona una GUI\: @@ -2873,6 +2945,7 @@ common.add=Añadir common.close=Cerrar common.cancel=Cancelar common.confirmation=Confirmación +common.delete_selected=Eliminar selección common.dependency={0}, tipo\: {1} common.mod_element_name=Nombre del elemento del mod common.name_already_exists=Este nombre ya existe diff --git a/plugins/mcreator-localization/lang/texts_fa_IR.properties b/plugins/mcreator-localization/lang/texts_fa_IR.properties index 55e5300e7de..ad0d15d96d2 100644 --- a/plugins/mcreator-localization/lang/texts_fa_IR.properties +++ b/plugins/mcreator-localization/lang/texts_fa_IR.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=تنظیمات انیمیشن dialog.animation_maker.next_frame=فریم بعدی dialog.animation_maker.previous_frame=فریم قبلی dialog.animation_maker.animation_timeline=جدول زمانی انیمیشن -dialog.animation_maker.add_frames=اضافه کردن فریم(ها)... -dialog.animation_maker.add_frames_from_template=اضافه کردن فریم از قالب ... -dialog.animation_maker.add_frames_from_strip=اضافه کردن فریم از نوار انیمیشن ... -dialog.animation_maker.add_frames_from_gif=افزودن فریم از GIF ... dialog.animation_maker.gif_importing=وارد کردن GIF dialog.animation_maker.gif_reading=خواندن GIF dialog.animation_maker.gif_processing=در حال پردازش GIF @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=پاکسازی حافظه پنهان Gradle dialog.cache_cleanup.progress.stopping_daemons=توقف اجرای دیمون های Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=پاک کردن پوشه Gradle caches dialog.cache_cleanup.progress.build_task=اجرای وظیفه ساخت Gradle -dialog.code_error.compilation_desc=یک یا چند فایل ماد اصلی شما به درستی کامپایل نشده است.

این معمولاً به دلیل ناسازگاری در کد ماد در طول ساخت‌ها ایجاد می‌شود.
MCreator می‌تواند این مشکل را با ایجاد مجدد کل کد ماد برای شما حل کند.

اگر عناصر ماد یا فایل‌های پایه ماد را قفل کرده‌اید، آنها نیز می‌توانند این خطا را ایجاد کنند.


کلیک کنید برای ادامه این عمل، دکمه Regenerate code.
dialog.code_error.compilation_title=خطاهای کامپایل فایل های اصلی ماد -dialog.code_error.compilation_list=فضای کاری شما حاوی عناصر ماد است که به درستی کامپایل نمی‌شوند.

این به احتمال زیاد به دلیل آخرین عنصر مادی که اضافه یا ویرایش کرده‌اید ایجاد شده است. سعی کنید تنظیمات عناصر ماد
که باعث ایجاد خطاهای ساخت می‌شوند (این عناصر در زیر فهرست شده‌اند) را تغییر دهید تا این مشکل را برطرف کنید.

اگر نمی‌توانید این مشکل را حل کنید، فضای کاری را به فایل ZIP قابل اشتراک‌گذاری صادر کنید. از منوی فایل و آن را از طریق
ردیاب مشکل ما در GitHub برای ما ارسال کنید تا بتوانیم به شما کمک کنیم.

فهرست عناصر ماد که باعث ایجاد خطا در کامپایل می شوند (تا 10 عنصر بریده شده)\:

dialog.code_error.regenerate_code=تولید دوباره کد dialog.code_error.ignore_error=نادیده گرفتن خطا dialog.code_error.show_in_workspace=نمایش در فضای کار @@ -345,7 +339,6 @@ dialog.modelement_id.info_message_title=کد عنصر ماد قفل شده اس dialog.modelement_id.registry_name=نام رجیستری\: dialog.modelement_id.registry_name_info=نام رجیستری (همه عناصر ماد از آن استفاده نمی کنند) dialog.modelement_id.registry_name_validator=نام رجیستری -dialog.modelement_id.use_caution_warn=از این ابزار با احتیاط استفاده کنید\!

تغییر نام‌های رجیستری می‌تواند ذخیره‌های موجود در دنیای شما را شکسته و باعث تضاد
با سایر عناصر ماد از ماد شما شود\! dialog.modelement_id.id_and_registry_names="{0} - نام رجیستری" dialog.modelement_id.invalid_registry_name=نام رجیستری که وارد کردید معتبر نیست\!
تغییرات ذخیره نشده اند. dialog.modelement_id.invalid_registry_name_title=نام رجیستری نامعتبر است @@ -417,7 +410,6 @@ dialog.textures_mapping.title_for_model=نقش بافت برای مدل dialog.textures_mapping.add_new=اضافه کردن نقش بافت جدید dialog.textures_mapping.enter_name_message=نام نقش بافت خود را وارد کنید.
این نام برای شناسایی مجموعه بافت های شما هنگام
انتخاب نقش بافت برای مدل خود استفاده می شود. dialog.textures_mapping.enter_name_title=نقشه بافت جدید -dialog.textures_mapping.jump_to=پرش به... dialog.textures_mapping.save=ذخیره نقشه برداری ها dialog.textures_mapping.model_texture_part=بخش بافت مدل\:
{0} dialog.textures_mapping.confirm_deletion_message=آیا مطمئن هستید که می‌خواهید این نقش بافت را حذف کنید؟
اگر نقش هنوز در حال استفاده است، می‌توانید بافت‌های شکسته دریافت کنید\! @@ -540,7 +532,6 @@ workspace.elements.list.filter_all=نمایش همه workspace.elements.list.filter_locked=عناصر قفل شده workspace.elements.list.filter_witherrors=عناصر با خطاهای ساخت workspace.elements.list.ascending=صعودی -workspace.category.mod_elements=عناصر ماد workspace.category.resources=منابع workspace.category.variables=متغیرها workspace.category.localization=بومی سازی @@ -557,14 +548,11 @@ workspace.elements.list.edit.delete=حذف workspace.elements.list.edit.duplicate=تکرار عنصر ماد... workspace.elements.list.edit.code=باز کردن عنصر ماد در ویرایشگر کد workspace.elements.list.edit.lock=قفل/باز کردن قفل عنصر ماد -workspace.elements.list.edit.id=ویرایش آیدی های عناصر ماد... workspace.elements.list.edit.add.folder=افزودن پوشه جدید... workspace.elements.list.edit.rename.folder=تغییر نام پوشه انتخاب شده... -workspace.elements.confirm_delete_message=آیا مطمئن هستید که می‌خواهید عناصر انتخابی ({0}) را حذف کنید؟

اگر از داده‌های عناصر ماد انتخابی در سایر عناصر ماد استفاده کرده‌اید (به عنوان دستور، در رویداد، به عنوان تب، ...) شما
باید عناصری را که به این یکی نیز وابسته هستند حذف کنید\! در غیر این صورت خطاهای ساخت دریافت خواهید کرد.

عناصر ماد در پوشه و زیرپوشه های حذف شده به پوشه مادر منتقل می شوند workspace.elements.delete.tooltip=حذف عنصر انتخاب شده ماد workspace.elements.edit_code.tooltip=ویرایش کد عنصر انتخاب شده ماد workspace.elements.lock_code_tooltip=کد قفل/بازکردن قفل عنصر
وقتی کد را قفل می‌کنید، MCreator کد را تغییر نمی‌دهد، بنابراین
نوع ماد از نمای کد قابل ویرایش می‌شود و کد حتی در هنگام تعویض فضای کاری حفظ می‌شود..
تنها در صورتی از این مورد استفاده کنید که قصد ویرایش دستی کد را دارید و از عواقب
قفل کردن کد یک عنصر مد آگاه هستید\! -workspace.elements.edit_registry_names.tooltip=ویرایش آيدی های عناصر ماد و اسم های رجیستری workspace.elements.empty.tip=%1 را برای افزودن عناصر ماد فشار دهید workspace.elements.lock_modelement_message=شما سعی می کنید کد عنصر ماد را قفل/باز کنید\!

وقتی کد قفل است، MCreator کد منبع را تغییر نمی دهد، اما این به این معنی است که
که هنگام به‌روزرسانی MCreator، رفع اشکال‌ها و ارتقاء نسخه Minecraft روی عناصر قفل شده
اعمال نمی‌شود.

عناصر مادی که در حال حاضر قفل شده‌اند و انتخاب شده‌اند، باز می‌شوند.
>این بدان معناست که هر کد سفارشی برای این عنصر ماد توسط MCreator بازنویسی می‌شود.

لطفاً قبل از استفاده از این عمل، صفحه ویکی در وب‌سایت MCreator درباره قفل کردن کد را بخوانید. workspace.elements.lock_modelement_confirm=کد عنصر ماد قفل/باز کردن قفل? @@ -634,8 +622,6 @@ trigger.entity_tamed=موجود رام شد trigger.entity_travels_to_dimension=موجود از دایمنشنی به دایمنشن دیگری میرور trigger.explosion_occurs=انفجار رخ می دهد trigger.farmland_trampled=زمین های کشاورزی زیر پا گذاشته شده است -trigger.gem_dropped=جم انداخته شد -trigger.gem_expired=جم دی اسپاون شد trigger.item_crafted=آیتم ساخته شد trigger.item_destroyed=آینم خراب شد trigger.item_smelted=آیتم پخته شد @@ -816,9 +802,7 @@ blockly.block.entity_get_armor_slot_item=آیتم را از اسلات زره %1 blockly.block.entity_get_controlling_passenger=%2 مسافری را دریافت کنید که %1 را کنترل می کند blockly.block.entity_get_first_passenger=%2 دریافت اولین مسافر از %1 blockly.block.entity_get_fire_ticks=تیک های باقی مانده را در آتش %1 بدست آورید -blockly.block.entity_get_fly_speed=سرعت پرواز %1 را دریافت کنید blockly.block.entity_get_oxygen=دریافت اکسیژن %1 -blockly.block.entity_get_root_vehicle=کمترین موجودی را که %1 سوار است، دریافت کنید، یا اگر سوار چیزی نیستید، خود را دریافت کنید blockly.block.entity_get_saturation=سطح اشباع غذا %1 را دریافت کنید blockly.block.entity_get_scoreboard_score=Get %2 scoreboard score for %1 blockly.block.entity_get_shootpower=اگر %1 پرتابه است، قدرت شلیک را دریافت کنید @@ -827,7 +811,6 @@ blockly.block.entity_get_spawn_x=دریافت X اسپاون %1 در دنیا ف blockly.block.entity_get_spawn_y=دریافت Y اسپاون %1 در دنیا فعلی پلیر %2 blockly.block.entity_get_spawn_z=دریافت Z اسپاون %1 در دنیا فعلی پلیر %2 blockly.block.entity_get_stepheight=دریافت ارتفاع %1 -blockly.block.entity_get_walk_speed=سرعت راه رفتن %1 را دریافت کنید blockly.block.entity_getowner=در صورت رام شدن %2، مالک %1 را دریافت کنید blockly.block.entity_getridingentity=%2 Get entity %1 is riding blockly.block.entity_gettargetentity=%2 دریافت موجود %1 هدف حمله است @@ -933,9 +916,6 @@ blockly.block.entity_size_width=عرض %1 را دریافت کنید blockly.block.entity_submerged_height=ارتفاع غوطه ور %1 را دریافت کنید blockly.block.entity_swing_mainhand=دست اصلی %1 را جابه جا کنید blockly.block.entity_swing_offhand=دست فرعی %1 را جابه جا کنید -blockly.block.entity_vel_x=سرعت %1 %2 در محور Xها -blockly.block.entity_vel_y=سرعت %1 %2 در محور Yها -blockly.block.entity_vel_z=سرعت %1 %2 در محور Zها blockly.block.entity_xplevel=سطح XP %1 را دریافت کنید blockly.block.entity_xp_until_next_level=مقدار XP مورد نیاز %1 برای به دست آوردن یک لول را دریافت کنید blockly.block.execute_command=اجرای کامند /%1 در x\: %2 y\: %3 z\: %4 %5 @@ -1057,7 +1037,6 @@ blockly.block.protect_owner=به موجوداتی که به صاحبت آسیب blockly.block.restrict_sun=محدود کردن خورشید %1 blockly.block.swim=به طور رندوم شنا کن با ضریب سرعت %1 %2 blockly.block.swim_in_water=بر روی آب معلق بمون %1 -blockly.block.watch_closest_entity=نگاه کن به نزدیک ترین موجود از نوع %2 در شعاع %1 %3 blockly.block.wander=در اطراف پرسه بزن (راه رفتن را فعال میکند) با ضریب سرعت %1 %2 blockly.block.wander_avoid_water=در اطراف پرسه بزن و از آب فرار کن با ضریب سرعت %1 %2 blockly.block.biome_entered=اگر پلیر به بایوم وارد شد %1 diff --git a/plugins/mcreator-localization/lang/texts_fr_FR.properties b/plugins/mcreator-localization/lang/texts_fr_FR.properties index f14d6726760..5dfa1f4edb0 100644 --- a/plugins/mcreator-localization/lang/texts_fr_FR.properties +++ b/plugins/mcreator-localization/lang/texts_fr_FR.properties @@ -79,10 +79,10 @@ dialog.animation_maker.settings=Paramètres d'animation dialog.animation_maker.next_frame=Image suivante dialog.animation_maker.previous_frame=Image précédente dialog.animation_maker.animation_timeline=Timeline d'animation -dialog.animation_maker.add_frames=Ajouter une/des image(s) ... -dialog.animation_maker.add_frames_from_template=Ajouter des images à partir de modèle ... -dialog.animation_maker.add_frames_from_strip=Ajouter des images à partir de bande d'animation ... -dialog.animation_maker.add_frames_from_gif=Ajouter des images à partir d'un GIF ... +dialog.animation_maker.add_frames=Ajouter des frames/images... +dialog.animation_maker.add_frames_from_template=Ajouter des frames/images à partir d'un modèle... +dialog.animation_maker.add_frames_from_strip=Ajouter des frames/images à partir d'un bande d'animation... +dialog.animation_maker.add_frames_from_gif=Ajouter des frames/images à partir d'un gif... dialog.animation_maker.gif_importing=Importation d'un GIF dialog.animation_maker.gif_reading=Lire des GIF dialog.animation_maker.gif_processing=Traitement du GIF @@ -119,9 +119,9 @@ dialog.cache_cleanup.title=Nettoyage du cache Gradle dialog.cache_cleanup.progress.stopping_daemons=Arrêt de l'exécution des deamons Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Effacement du dossier cache Gradle dialog.cache_cleanup.progress.build_task=Exécution de la tâche de génération Gradle -dialog.code_error.compilation_desc=Un ou plusieurs de vos fichiers de mod principaux n'ont pas été compilés correctement.

Ceci est généralement causé par des incohérences dans le code du mod lors des compilations.
MCreator peut résoudre ce problème en régénérant tout le code du mod.

Si vous avez verrouillé des éléments de mod ou des fichiers de base de mod, ils peuvent également causer cette erreur.


Cliquez sur le bouton Régénérer le code pour procéder à cette action.
+dialog.code_error.compilation_desc=Un ou plusieurs fichiers principaux de votre mod ne se compilent pas correctement.

Ceci est souvent produit par une inconsistance dans le code du mod durant les compilations.
Mcreator pourrait être capable de résoudre ceci en régénérant l'entièreté du code de votre mod.

Si vous avez des éléments ou fichiers verrouillés, cela peut causer cette erreur.


ClickerRegenere le codepour effectué cette action
dialog.code_error.compilation_title=Erreurs de compilation de fichiers de mod principaux -dialog.code_error.compilation_list=Votre projet contient des éléments de mod qui ne sont pas compilés correctement.

Ceci a été probablement causé par le dernier élément de mod que vous avez ajouté ou modifié. Essayez de modifier les paramètres des éléments de mod
qui causent des erreurs de compilation (tels que les éléments listés ci-dessous) pour essayer de résoudre ce problème.

Si vous ne pouvez pas résoudre ce problème, exportez le projet vers un fichier ZIP partageable à partir du menu Fichier et envoyez-le nous via
notre traqueur de bugs sur GitHub afin que nous puissions essayer de vous aider.

Liste des éléments de mod qui causent des erreurs de compilation (coupé au bout de 10 éléments)\:

+dialog.code_error.compilation_list=Votre espace de travail contient des éléments de mod qui ne sont pas compilés correctement.

Ceci a été probablement causé par le dernier élément que vous avez ajouté ou modifié. Essayez de modifier les paramètres des éléments de mod
qui causent des erreurs de compilation (tels que les éléments listés ci-dessous) pour essayer de résoudre ce problème.

Si vous ne pouvez pas résoudre ce problème, exportez le projet vers un fichier ZIP partageable à partir du menu Fichier et envoyez-le nous via
notre traqueur de bugs sur GitHub afin que nous puissions essayer de vous aider.

Liste des éléments de mod qui causent des erreurs de compilation (coupé au bout de 10 éléments)\:

dialog.code_error.regenerate_code=Regénérer le code dialog.code_error.ignore_error=Ignorer l'erreur dialog.code_error.show_in_workspace=Afficher dans le projet @@ -273,12 +273,14 @@ dialog.imageeditor_tool.use_canvas=Cliquez sur le canevas à utiliser dialog.imageeditor.layer_panel_no_image=Aucune image dialog.imageeditor.layer_panel_no_layers=Aucun calque dialog.imageeditor.layer_panel_new_layer=Nouveau calque +dialog.imageeditor.layer_panel_new_layer.floating=Nouveau calque depuis le flottant dialog.imageeditor.layer_panel_move_up=Déplacer vers le haut dialog.imageeditor.layer_panel_move_down=Déplacer vers le bas dialog.imageeditor.layer_panel_rename_layer=Renommer le calque dialog.imageeditor.layer_panel_toggle_visibility=Activer/désactiver la visibilité dialog.imageeditor.layer_panel_delete_layer=Supprimer le calque dialog.imageeditor.layer_panel_duplicate_layer=Dupliquer la couche +dialog.imageeditor.layer_panel_merge_layers_down=Fusionner le calque avec le calque au-dessous dialog.imageeditor.layer_panel_confirm_layer_deletion_message=Êtes-vous sûr de vouloir supprimer les couches suivantes \:
dialog.imageeditor.layer_panel_confirm_layer_deletion_title=Supprimer le calque dialog.imageeditor.layer_panel_enter_new_name=Entrez le nouveau nom du calque \: @@ -323,6 +325,8 @@ dialog.image_maker.tools.types.noise_description=Un outil pour ajouter du bruit dialog.image_maker.tools.types.move=Outil de déplacement dialog.image_maker.tools.types.move_layer=Déplacer le calque dialog.image_maker.tools.types.move_description=Un outil pour déplacer les calques actifs +dialog.image_maker.tools.types.select=Sélectionner outil +dialog.image_maker.tools.types.select_description=Un outil pour sélectionner des zones dialog.image_maker.tools.types.pencil=Crayon dialog.image_maker.tools.types.pencil_description=Un outil de dessin basique dialog.image_maker.tools.types.resizecanvas=Redimensionner le canevas @@ -361,6 +365,7 @@ dialog.item_selector.enter_tag_name.blocks=Entrez le nom de la balise de b dialog.item_selector.enter_tag_name.items=Entrez le nom de la balise d'item ci-dessous (vérifiez la liste des modèles) \:
dialog.item_selector.enter_tag_name.biomes=Entrez le nom de la balise biome ci-dessous (vérifiez la liste des modèles) \:
dialog.item_selector.enter_tag_name.entities=Entrez le nom de la balise d'entité ci-dessous (vérifiez la liste des modèles) \:
+dialog.item_selector.enter_tag_name.damage_types=Entrer le nom de type de tags de dégâts ci-dessous (Chercher dans la liste pour des modèles) \:
dialog.item_selector.error_invalid_tag_name_title=Nom de tag invalide dialog.item_selector.all=Tout dialog.item_selector.blocks=Blocs @@ -380,7 +385,7 @@ dialog.modelement_id.info_message_title=Le code de l''''élément de mod est ver dialog.modelement_id.registry_name=Nom du registre \: dialog.modelement_id.registry_name_info=Nom d'enregistrement (tous les éléments ne l'utilisent) dialog.modelement_id.registry_name_validator=Nom d'enregistrement -dialog.modelement_id.use_caution_warn=Utilisez cet outil avec précaution \!

Le changement d'Id peut casser vos sauvegardes de mondes existantes et causer
des conflits avec d'autres éléments de mod de votre mod \! +dialog.modelement_id.use_caution_warn=Utilisez cet outil avec précaution\! Ne pas utiliser des nomes dupliqués\!

Le changement de noms du registre peut casser vos sauvegardes de monde existantes et causer
conflits avec d'autres éléments de votre mod \! dialog.modelement_id.id_and_registry_names="{0} - Id" dialog.modelement_id.invalid_registry_name=Le nom d'enregistrement que vous avez entré n'est pas valide \!
Les modifications n'ont pas été enregistrées. dialog.modelement_id.invalid_registry_name_title=Nom d'enregistrement invalide @@ -421,6 +426,20 @@ dialog.preferences.themes.list=
Liste dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: type de propriété inconnu +dialog.search_usages.list=Liste des éléments du mod utilisant {0}sélectionnés \: +dialog.search_usages.list.empty=Aucun élément de mod utilisant l''un des {0}sélectionnés trouvé. +dialog.search_usages.open_selected=Modifier l'élément de mod sélectionné +dialog.search_usages.title=Utilisation de l'élément +dialog.search_usages.deletion.confirm_msg=Êtes-vous sûr de de vouloire supprimer cette element(s) {0} s?

Certains de ces éléments sont utilisés par les éléments listés ci-dessous.
Si vous proceder avec la suppression, l''espace de travail pourrait êtes cassé ou/et faillir a charger\! +dialog.search_usages.deletion_safe.confirm_msg=Êtes-vous sûr de supprimer l''élément sélectionnée {0} ?

Il n''y a pas d''élément(s) utilisant ce(s) {0} dans la liste sélectionnée. Cependant, ils pourraient être utilisés dans du code personnalisé.
Si vous procéder, les référence deviendront invalid, ce qui pourra mener à des ressource cassé ou des crash du jeu. +dialog.search_usages.deletion.confirm=Supprimer quand même +dialog.search_usages.type.mod_element=éléments de mod +dialog.search_usages.type.resource.texture=texture +dialog.search_usages.type.resource.model=modèle +dialog.search_usages.type.resource.sound=son +dialog.search_usages.type.resource.structure=structure +dialog.search_usages.type.global_variable=variable globale +dialog.search_usages.type.localization_key=clé de localisation dialog.sounds.name=Nom du fichier audio dialog.sounds.registry_name=Nom d'enregistrement de l'audio\:
Si vous renommez le son utilisé, les références existantes seront cassées dialog.sounds.files=Fichiers audio\: @@ -455,7 +474,7 @@ dialog.textures_mapping.title_for_model=Mappages de textures pour le modèle dialog.textures_mapping.add_new=Ajouter un nouveau mappage de texture dialog.textures_mapping.enter_name_message=Entrez votre nom de mappage de textures.
Ce nom est utilisé pour identifier votre set de textures lorsque
vous sélectionnez un mappage de texture pour votre modèle. dialog.textures_mapping.enter_name_title=Nouveau mappage de texture -dialog.textures_mapping.jump_to=Aller à ... +dialog.textures_mapping.jump_to=Aller à... dialog.textures_mapping.save=Enregistrer les mappages dialog.textures_mapping.model_texture_part=Texture de la partie du modèle
{0} dialog.textures_mapping.confirm_deletion_message=Êtes-vous sûr de vouloir supprimer ce mappage de textures?
Vous pouvez obtenir des textures cassées si le mappage est toujours en cours d'utilisation\! @@ -541,6 +560,7 @@ dialog.variables.variable_name=Nom de la variable\: dialog.variables.variable_type=Type de variable\: dialog.variables.variable_scope=Portée de la variable\: dialog.variables.new_title=Nouvelle variable +workspace.loading=Chargement de l'espace de travail... workspace.elements.list.locked=Verouillé workspace.elements.folders.add_tooltip=Ajouter un nouveau dossier dans le dossier actuel workspace.elements.folders.up_tooltip=Revenir au dossier parent @@ -551,6 +571,7 @@ workspace.elements.folders.add.error_letters=Le nom du dossier ne peut contenir workspace.elements.folders.add.error_exists=Un dossier portant ce nom existe déjà. workspace.elements.folders.rename.title=Renommer le dossier workspace.elements.folders.rename.message=Entrez le nouveau nom du dossier \: +workspace.elements.list.special.item={0}
Type \: {1} workspace.elements.list.folder=Dossier workspace.elements.list.notlocked=Non verrouillé workspace.elements.list.compiles=Compilation @@ -595,14 +616,18 @@ workspace.elements.list.edit.delete=Supprimer workspace.elements.list.edit.duplicate=Dupliquer l''''élément de mod... workspace.elements.list.edit.code=Ouvrir l''''élément de mod dans l''''éditeur de code workspace.elements.list.edit.lock=Verrouiller/déverrouiller l''''élément mod -workspace.elements.list.edit.id=Modifier les ID des éléments de mod... +workspace.elements.list.edit.id=Modifier les noms des registres... +workspace.elements.list.edit.usages.tags=Les éléments sélectionnés contiennent des tags d'élément du Maud.

Les tags avec les mêmes noms peuvent être définie par les autres Maud et pourraient être faiblement référencée.
L'usage de la recherche pour ces éléments n'est pas possible. +workspace.elements.list.edit.usages.tags.title=Utilisation des tags workspace.elements.list.edit.add.folder=Ajouter un nouveau dossier... workspace.elements.list.edit.rename.folder=Renommer le dossier sélectionné... -workspace.elements.confirm_delete_message=Êtes-vous sûr de vouloir supprimer les éléments sélectionnés ({0}) ?

Si vous avez utilisé les données des éléments de mod sélectionnés dans d''autres éléments de mod (comme la recette, en cas de cas, comme onglet. .) vous
devez supprimer des éléments qui sont dépendants de celui-ci aussi \! Sinon, vous obtiendrez des erreurs de construction.

Les éléments de mod du dossier supprimé et des sous-dossiers seront déplacés dans le dossier parent +workspace.elements.confirm_delete_msg_suffix=Les éléments de mod contenue dans le dossier supprimé seront déplacer dans le dossier parent. workspace.elements.delete.tooltip=Supprimer l''''élément de mod sélectionné workspace.elements.edit_code.tooltip=Modifier le code de l''''élément de mod sélectionné workspace.elements.lock_code_tooltip=Verrouiller/déverrouiller le code de l''''élément
Lorsque vous verrouillez le code, MCreator ne changera pas le code, afin que le type de mod devienne
modifiable à partir de l''éditeur de code et que le code soit préservé même lors du changement d''espaces de travail.
Utilisez ceci uniquement si vous avez l''intention de modifier manuellement le code et êtes conscient des conséquences
du verrouillage du code d''un élément de mod \! -workspace.elements.edit_registry_names.tooltip=Modifier les IDs des éléments de mod et les noms de répertoire +workspace.elements.edit_registry_names.not_possible_message=Il n'est pas possible d'utiliser cet outil pour modifier les noms de registres de ce type de mod element. +workspace.elements.edit_registry_names.not_possible_title=Impossible de modifier le nom du registre +workspace.elements.edit_registry_names.tooltip=Modifier les noms des registres workspace.elements.empty.tip=Appuyer sur %1 pour ajouter des éléments de mod workspace.elements.lock_modelement_message=Vous essayez de bloquer/débloquer le code de l''élément de mod \!

Lorsque le code est bloqué, MCreator ne changera pas le code source, mais cela signifie
que lorsque vous mettrez à jour MCreator, les corrections de bugs et les mises à jour de version Minecraft ne seront pas appliqués aux éléments bloqués.

Les éléments de mod qui sont bloqués en ce moment et qui sont sélectionnés seront débloqués.
Cela veut dire que tout le code que vous avez ajouté pour ces éléments sera écrasé par MCreator.

Lisez s''il vous plaît la page Wiki sur le site de MCreator à propos de bloquer le code avant d''''utiliser cette action. workspace.elements.lock_modelement_confirm=Verrouiller/déverrouiller le code de l''''élément de mod ? @@ -676,8 +701,6 @@ trigger.entity_travels_to_dimension=L''''entité voyage vers une dimension trigger.entity_uses_totem=L'entité utilise un totem d'immortalité trigger.explosion_occurs=Une explosion se produit trigger.farmland_trampled=La terre labourée est piétinée -trigger.gem_dropped=Un item est lâché -trigger.gem_expired=Une gemme disparait trigger.item_crafted=Un item est fabriqué trigger.item_destroyed=Un item est détruit trigger.item_smelted=Un item est cuit @@ -730,6 +753,7 @@ blockly.category.guimanagement=Slot & Procédures de GUI blockly.category.worldprocedures=Procédures de monde blockly.category.worlddata=Données blockly.category.worldmanagement=Actions +blockly.category.scoreboard=Tableaux des scores blockly.category.basictasks=Tâches basiques blockly.category.combattasks=Tâches de combat blockly.category.movementtasks=Tâches de mouvements @@ -867,11 +891,18 @@ blockly.block.entity_allow_flying=Autoriser %2 à voler si %1 sinon, ne pas le f blockly.block.entity_armor_value=Valeur de l''''armure de %1 blockly.block.entity_canusecommand=Est-ce que %2 a le niveau de permission %1 pour les commandes blockly.block.entity_check_creature_type=Est-ce que %1 est une créature de type %2 +blockly.block.entity_check_main_hand=Est-ce que %1 à un item dans la main %2 blockly.block.entity_checkgamemode=Est-ce que %1 est en mode de jeu %2 blockly.block.entity_clear_inventory=Vider l'inventaire de %1 blockly.block.entity_clearpotions=Effacer tous les effets de potion de %1 blockly.block.entity_close_gui=Fermer n'importe quel GUI ouvert pour %1 blockly.block.entity_create=%1 Instance d'entité statique de type %2 (pas d'apparition) +blockly.block.entity_data_logic_get=Pour une entité customisée %1 de type %2, obtenir la valeur du paramètre booléen %3 +blockly.block.entity_data_logic_set=Pour une entité customisée %1 de type %2, mettre la valeur du paramètre booléen %3 à %4 +blockly.block.entity_data_integer_get=Pour une entité customisée %1 de type %2, obtenir la valeur du paramètre %3 +blockly.block.entity_data_integer_set=Pour une entité customisée %1 de type %2, mettre la valeur du paramètre %3 à %4 +blockly.block.entity_data_string_get=Pour une entité customisée %1 de type %2, obtenir la valeur du paramètre textuel %3 +blockly.block.entity_data_string_set=Pour une entité customisée %1 de type %2, mettre la valeur du paramètre textuel %3 à %4 blockly.block.entity_deal_custom_damage=Infliger %1 dégâts personnalisés à %2 localisés comme death.attack.%3(.player/.item) blockly.block.entity_despawn=Faire disparaître %1 %2 blockly.block.entity_dimension_id=ID de la dimension dans laquelle %1 est @@ -886,10 +917,9 @@ blockly.block.entity_get_armor_slot_item=Obtenir l'objet dans le slot d'armure % blockly.block.entity_get_controlling_passenger=%2 Obtenir le passager qui contrôle %1 blockly.block.entity_get_first_passenger=%2 Obtenez le premier passager de %1 blockly.block.entity_get_fire_ticks=Obtenir les ticks restants en feu de %1 -blockly.block.entity_get_fly_speed=Vitesse de vol de %1 blockly.block.entity_get_oxygen=Oxygène de %1 blockly.block.entity_get_percent_frozen=Obtenir le pourcentage gelé de %1 -blockly.block.entity_get_root_vehicle=Obtenir l'entité la plus basse que %1 est en train de conduire, ou elle-même si ne conduit rien +blockly.block.entity_get_root_vehicle=Obtenir l'entité la plus basse que %1 est en train de chevaucher, ou elle-même si ne chevaucher rien blockly.block.entity_get_saturation=Obtenir le niveau de saturation alimentaire de %1 blockly.block.entity_get_scoreboard_score=Obtenir le score %2 du tableau de %1 blockly.block.entity_get_shootpower=Obtenir la puissance de tir si %1 est un projectile @@ -898,8 +928,11 @@ blockly.block.entity_get_spawn_x=Obtenir les coordonnées X d'apparition de %1 p blockly.block.entity_get_spawn_y=Obtenir les coordonnées d'apparition en Y de %1 pour son monde actuel %2 blockly.block.entity_get_spawn_z=Obtenir les coordonnées d'apparition Z de %1 pour son monde actuel %2 blockly.block.entity_get_stepheight=Obtenir la hateur des pas de %1 +blockly.block.entity_get_use_item=Obtenir l'objet que %1 utilise +blockly.block.entity_get_use_item_ticks=Obtenir le nombre de tick %1 que l'item à utilisé blockly.block.entity_get_uuid=Obtenir l'UUID de %1 -blockly.block.entity_get_walk_speed=Vitesse de marche de %1 +blockly.block.entity_get_walk_speed=Obtenir la vitesse de marche de %1 +blockly.block.entity_get_fly_speed=Obtenir la vitesse de vol de %1 blockly.block.entity_getowner=%2 Obtenir le propriétaire de %1 si apprivoisé blockly.block.entity_getridingentity=%2 Obtenir si l'entité %1 est en train de conduire blockly.block.entity_gettargetentity=%2 Obtenir si l'entité %1 est ciblée pour attaquer @@ -912,7 +945,7 @@ blockly.block.entity_haspotioneffect=A %1 potion active %2 blockly.block.entity_health=Vie actuelle de %1 blockly.block.entity_health_max=Vie maximum de %1 blockly.block.entity_inventory_foreach=Pour chaque emplacement d'inventaire de %1 obtenir une copie de %2 faire %3 -blockly.block.entity_is_attackable=Est-ce-que %1 peut être attaqué(e) +blockly.block.entity_is_attackable=Est-ce-que %1 peut être attaqué(e) blockly.block.entity_is_elytra_flying=%1 vole avec des elytras blockly.block.entity_is_glowing=%1 est en train de briller blockly.block.entity_is_swimming=%1 est en train de nager @@ -1013,9 +1046,9 @@ blockly.block.entity_submerged_height=Obtenir la hauteur submergée de %1 blockly.block.entity_swing_mainhand=Balancer la main principale de %1 blockly.block.entity_swing_offhand=Balancer la main secondaire de %1 blockly.block.entity_switch_dimension=Changer la dimension de %1 à %2 -blockly.block.entity_vel_x=Vélocité X de %1 %2 -blockly.block.entity_vel_y=Vélocité Y de %1 %2 -blockly.block.entity_vel_z=Vélocité Z de %1 %2 +blockly.block.entity_vel_x=Déplacement en X de %1 %2 +blockly.block.entity_vel_y=Déplacement en Y de la %1 %2 +blockly.block.entity_vel_z=Déplacement en Z de la %1 %2 blockly.block.entity_xplevel=Obtenir le niveau d'XP de %1 blockly.block.entity_xp_until_next_level=Obtenir le nombre d'Xp requis par %1 pour gagner un niveau blockly.block.execute_command=Exécuter la commande /%1 à x\: %2 y\: %3 z\: %4 %5 @@ -1052,9 +1085,11 @@ blockly.block.item_cooldown_for=Définir le temps de recharge de %3 à %1 ticks blockly.block.item_damage=Infliger %1 dégâts à %2 blockly.block.item_enchanted_with_xp=%1 enchanté avec %2 niveaux d'XP, enchantements de trésor\: %3 blockly.block.item_fuel_power=Obtenir la puissance du carburant de %1 +blockly.block.item_get_cooldown=Obtenir le pourcentage du temps de récupération restant de %2 pour %1 blockly.block.item_get_damage=Obtenir les dégâts de %1 blockly.block.item_get_enhancement=Obtenir le niveau d'enchantement %2 sur %1 blockly.block.item_get_max_damage=Obtenir les dégâts maximum possibles de %1 +blockly.block.item_is_cooldown=Est-ce-que %2 est en récupération pour %1 blockly.block.item_is_enchantable=Est-ce que %1 est enchantable blockly.block.item_is_enchanted=Est-ce que %1 est enchanté blockly.block.item_istype=%1 est-il du même type d'item que %2 @@ -1098,7 +1133,6 @@ blockly.block.math_random_number_between=Nombre aléatoire entre min\: %1 et max blockly.block.mcitem_to_block=Convertir %2 %1 en %3 ou AIR si la conversion échoue blockly.block.move_entity=Définir la localisation de %4 à x\: %1 y\: %2 z\: %3 blockly.block.place_schematic=Placer la structure NBT %6 %7 à x \: %1 y \: %2 z \: %3 avec rotation \: %4 miroir \: %5 %8 -blockly.block.play_sound=Jouer en %6 à x \: %1 y \: %2 z \: %3 niveau \: %4 pas \: %5 catégorie \: %7 blockly.block.projectile_shoot_from_entity=Tirer %1 de l'entité \: %2 avec vitesse \: %3 inexactitude \: %4 %5 blockly.block.projectile_shoot_from_pos=Tirer %1 de x \: %2 y \: %3 z \: %4 avec la direction dx \: %5 dy \: %6 dz \: %7 vitesse \: %8 inexactitude \: %9 %10 blockly.block.projectiles_arrow=Flèche de type %1 avec des dégâts \: %2 recul\: %3 perforation \: %4 tireur\: %5 tir \: %6 particules \: %7 type de ramassage\: %8 @@ -1111,11 +1145,19 @@ blockly.block.set_time=Définir le temps à %1 %2 blockly.block.spawn_entity=Invoquer l'entité\: %4 à x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Faire apparaître l'entité \: %6 à x \: %1 y \: %2 z \: %3 avec yaw \: %4 pitch \: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Faire apparaître l'entité \: %9 à x \: %1 y \: %2 z \: %3 avec yaw \: %4 pitch \: %5 vx \: %6 vy \: %7 vz \: %8 %10 -blockly.block.spawn_gem=Faire apparaître l'item/gemme %1 à x \: %2 y \: %3 z \: %4 avec le délai de récupération \: %5 disparaît \: %6 %7 +blockly.block.spawn_gem=Faire apparaître l'item lâché %1 à x \: %2 y \: %3 z \: %4 délai de récupération \: %5 disparaît \: %6 %7 blockly.block.spawn_particle=Invoquer une simple particule à x \: %1 y \: %2 z \: %3 avec vx \: %4 vy \: %5 vz \: %6 type \: %7 blockly.block.spawn_particle_multi=Faire apparaître %8 particules sur le côté-serveur à x \: %1 y \: %2 z \: %3 dans la zone dx \: %4 dy \: %5 dz \: %6 avec la vitesse %7 type %9 %10 blockly.block.spawn_xporb=Faire apparaître des orbes d'expérience à x \: %2 y \: %3 z \: %4 avec la quantité d'expérience %1 %5 blockly.block.strike_lightning=Lancer un éclair en x \: %1 y \: %2 z \: %3 comme effet seulement \: %4 %5 +blockly.block.team_add_entity=Ajouter l'entité %2 à l'équipe %1 +blockly.block.team_create_new=Créer une nouvelle équipe avec le nom %1 +blockly.block.team_delete=Supprimer l'équipe avec le nom %1 +blockly.block.team_get_entity_team=Obtenir l'équipe de l'entité %1 +blockly.block.team_get_friendlyfire=Le tir ami pour l'équipe portant le nom %1 est-il activé +blockly.block.team_remove_entity=Supprimer l'entité %2 de l'équipe %1 +blockly.block.team_set_friendlyfire=Établir un tir ami pour l'équipe portant le nom %1 à %2 +blockly.block.team_set_friendlyfire.tooltip=Le tir ami ne fonctionne qu'avec les joueurs blockly.block.wait=Attendre %1 %2 ticks sur le côté serveur %3 et faire %4 blockly.block.world_data_heightat=Obtenir %3 hauteur à x\: %1 z\: %2 blockly.block.world_data_biomeat=Biome en x\: %1 y\: %2 z\: %3 type %4 @@ -1190,7 +1232,7 @@ blockly.block.restrict_sun=Restreindre le soleil %1 blockly.block.swim=Nager aléatoirement avec le facteur de vitesse %1 %2 blockly.block.swim_in_water=Flottez dans l'eau %1 blockly.block.try_and_find_water=Essayer de trouver l'eau %1 -blockly.block.watch_closest_entity=Surveiller l'entité la plus proche de type %2 dans le rayon %1 %3 +blockly.block.watch_closest_entity=Surveillez l'entité de type %2 la plus proche dans le rayon %1 %3 blockly.block.wander=Faire le tour (permet de marcher) avec le facteur de vitesse %1 %2 blockly.block.wander_avoid_water=Promener et éviter l'eau avec le facteur de vitesse %1 %2 blockly.block.biome_entered=Si le joueur entre dans le biome %1 @@ -1390,6 +1432,7 @@ blockly.block.damagesource_get_entity=%2 Obtenir l'entité qui a causé %1 blockly.block.damagesource_get_exhaustion=Obtenir la valeur d'épuisement de %1 blockly.block.damagesource_is_cause_creative=Est-ce que %1 est causé par un joueur en mode créatif blockly.block.damagesource_is_indirect=Est-ce que %1 est indirect +blockly.block.damagesource_is_tagged_in=Le type de %1 est-il marqué dans les balises de type de dommage comme %2 blockly.block.damagesource_scales_with_difficulty=Est-ce que %1 évolue avec difficulté blockly.block.direction_from_deps=Direction/face du déclencheur blockly.block.direction_unspecified=N'importe quelle direction @@ -1477,6 +1520,12 @@ dialog.workspace.export_workspace.compressing=Compression du projet dialog.workspace.export_workspace.title=Exportation du projet dialog.workspace.export_backup=Sauvegarde du projet action.workspace.regenerate_and_build=Régénérer le code et construire +tag.type.items=Items +tag.type.blocks=Blocs +tag.type.entities=Entités +tag.type.functions=Fonctions +tag.type.biomes=Biomes +tag.type.damage_types=Types de dégâts modelement.unknown=Inconnu modelement.achievement=Avancement modelement.armor=Armure @@ -1484,6 +1533,7 @@ modelement.biome=Biome modelement.block=Bloc modelement.code=Élément personnalisé modelement.command=Commande +modelement.damagetype=Type de dégât modelement.dimension=Dimension modelement.enchantment=Enchantement modelement.gamerule=Game rule @@ -1521,6 +1571,7 @@ modelement.biome.description=Le biome est une zone spécifique avec une généra modelement.block.description=Le bloc est l'unité de base dans Minecraft. C'est l'objet 3D qui peut être placé dans le monde. modelement.code.description=L''''élément personnalisé est défini à l''''aide de code personnalisé dans l''''éditeur de code. modelement.command.description=La commande est un ensemble de texte qui déclenche une action lorsque l''''utilisateur la tape dans le chat. +modelement.damagetype.description=Le type de dégâts détermine comment les dégâts doivent être appliqués aux entités. modelement.dimension.description=Une dimension est un monde qui est généré, possède ses propres propriétés et peut avoir un portail. modelement.enchantment.description=Un enchantement est un modifieur qui ajoute des abilités spéciales aux items sur lesquels il est appliqué. modelement.gamerule.description=Une Game rule est un paramètre personnalisable pour un monde spécifique en jeu @@ -1654,6 +1705,8 @@ preferences.notifications.checkAndNotifyForUpdates=Notifier les nouvelles versio preferences.notifications.checkAndNotifyForUpdates.description=Décochez cette case si vous ne souhaitez pas être informé des mises à jour majeures.
ATTENTION \: Notez que vous pourriez manquer des mises à jour importantes et des corrections de bugs si vous désactivez cette option. preferences.notifications.checkAndNotifyForPatches=Avertir des mises à jour de correctifs au lancement de MCreator preferences.notifications.checkAndNotifyForPatches.description=Décochez cette case si vous ne souhaitez pas être informé des mises à jour des correctifs.
Il est fortement recommandé de garder cette option activée, ou vous pourriez manquer d'importantes corrections de bugs. +preferences.notifications.showWebsiteNewsNotifications=Afficher les nouvelles actualités du site web au démarrage +preferences.notifications.showWebsiteNewsNotifications.description=Lorsque cette option est activée, le sélecteur d'espace de travail affichera les notifications concernant les nouvelles actualités du site Web au lancement de MCreator preferences.notifications.checkAndNotifyForPluginUpdates=Notifier les mises à jour des plugins communautaires preferences.notifications.checkAndNotifyForPluginUpdates.description=Décochez cette case si vous ne voulez pas être informé des mises à jour de plugins tiers.
Gardez à l'esprit que dans le cas où les serveurs de mise à jour de plugin tiers seraient inactifs ou lents, cette option peut ralentir le démarrage de MCreator et que cette option autorise
des plugins tiers sur lesquels nous n'avons aucun contrôle à accéder à leurs serveurs de mise à jour au démarrage de MCreator. preferences.themes.select_theme=Sélectionnez le thème à utiliser @@ -2061,6 +2114,15 @@ elementgui.command.type=Type \: elementgui.command.permission_level=Niveau de permission d'exécution\:
Niveau minimal pour que la commande s'exécute elementgui.command.warning.empty_string=La commande ne peut pas être une chaîne vide elementgui.command.arguments=Éditeur des paramètres et actions +elementgui.damagetype.damage_properties=Propriétés des dégâts +elementgui.damagetype.exhaustion=Montant d'épuisement \:
La valeur par défaut est 0,1 +elementgui.damagetype.scaling=Les dégâts s'échelonnent-ils difficilement ? +elementgui.damagetype.effects=Effet sonore des dégâts \: +elementgui.damagetype.death_messages=Messages de Mort +elementgui.damagetype.normal_death_message=Message de mort normal \: +elementgui.damagetype.item_death_message=Message de mort de l'objet \:
Affiché lorsque le joueur est tué par une entité détenant un objet nommé +elementgui.damagetype.player_death_message=Message d'aide à la mort \:
Affiché lorsque le joueur meurt en s'échappant d'une entité +elementgui.damagetype.error_empty_death_message=Le message de mort ne peut pas être vide elementgui.dimension.can_player_respawn=Peut le joueur réapparaître ici elementgui.dimension.has_fog=Activer le brouillard dense elementgui.dimension.is_dark=Désactiver la source de lumière ambiante @@ -2081,7 +2143,6 @@ elementgui.dimension.biomes_in=Biomes dans cette dimension \: elementgui.dimension.main_filler_block=Bloc de remplissage principal\:
Normal, Nether, End elementgui.dimension.fluid_block=Bloc de fluide\:
Normal, Nether, End elementgui.dimension.sleep_result=Résultat de tentative de sommeil\: -elementgui.dimension.fog_air_color=Remplacer la couleur du ciel / brouillard\:
Laisser DEFAULT pour la gestion par défaut de la version de Minecraft elementgui.dimension.enable_dimension_portal=Activer le portail de la dimension\: elementgui.dimension.portal_frame_block=Bloc du cadre du portail\: elementgui.dimension.portal_particles=Particules du bloc du portail \: @@ -2105,8 +2166,8 @@ elementgui.enchantment.curse=Cet enchantement est-il une malédiction? elementgui.enchantment.allowed_on_books=Cet enchantement est-il permis sur des livres ? elementgui.enchantment.can_generate_in_loot_tables=Cet enchantement peut-il être généré dans les tables de butins ? elementgui.enchantment.can_villager_trade=Cet enchantement peut-il apparaître dans les échanges de villageois ? -elementgui.enchantment.compatible_enchantments=Peut être combiné avec\:
Laissez vide pour permettre de combiner avec n'importe quel enchantement -elementgui.enchantment.can_apply_to=Peut être appliqué à \:
Laisser vide pour permettre l''''application à tous les objets applicables +elementgui.enchantment.compatible_enchantments=Peut être combiné avec \:
Laisser vide (fonctionne en mode inclusion et exclusion) pour permettre la combinaison avec n'importe quel enchantement +elementgui.enchantment.can_apply_to=Peut être appliqué à \:
Laisser vide (fonctionne en mode inclusion et exclusion) pour permettre l'application à tous les éléments applicables elementgui.enchantment.needs_name=L''''enchantement a besoin d''''un nom elementgui.gamerule.name=Nom de machine\: elementgui.gamerule.display_name=Nom de la règle de jeu \:
Ce nom sera utilisé pour l''''écran de configuration des règles de jeu @@ -2259,9 +2320,11 @@ elementgui.keybind.key_binding_category=Clé de traduction de la catégorie de l elementgui.keybind.key_procedure_triggers=Déclencheurs de procédure de la touche de liaison elementgui.keybind.error_key_needs_name=La touche de liaison a besoin d'un nom elementgui.keybind.error_key_category_needs_name=Nom de la touche de la catégorie de la touche de liaison +elementgui.living_entity.visual_scale=Échelle visuelle du modèle \: +elementgui.living_entity.bounding_box_scale=Échelle du cadre de délimitation \: elementgui.living_entity.condition_solid_bounding_box=La boîte de collisions est-elle solide ? elementgui.living_entity.disable_collisions=Désactiver la boîte de collision -elementgui.living_entity.has_ai=Activer l'IA
Lors de l'utilisation de l'IA, assurez-vous d'avoir des tâches IA définies ci-dessous +elementgui.living_entity.has_ai=Activer l'IA
Assurez-vous que certaines tâches d'IA sont définies ci-dessous elementgui.living_entity.immune_fire=Feu elementgui.living_entity.immune_arrows=Flèches elementgui.living_entity.immune_fall_damage=Dégâts de chute @@ -2283,9 +2346,9 @@ elementgui.living_entity.spawn_dungeons=Apparaît dans les donjons elementgui.living_entity.is_rideable=Chevauchable elementgui.living_entity.control_forward=Contrôle du mouvement vers l'avant elementgui.living_entity.control_strafe=Contrôle du mouvement strafe -elementgui.living_entity.is_breedable=Faire en sorte que cette entité soit type d'animal, items de reproduction \:
La base de l'entité et le type de comportement seront ignorés si cochés +elementgui.living_entity.is_breedable=Faire de cette entité un type d'animal, des éléments de race \:
La base de l'entité et le type de comportement seront ignorés elementgui.living_entity.is_tameable=Peut apprivoiser -elementgui.living_entity.is_ranged=Faites en sorte que l'entité effectue des attaques à distance avec un objet, un intervalle d'attaque et un rayon \:
Ajoutez au moins une tâche d'IA Agir de manière agressive contre pour définir les cibles d'attaque.
Si « Élément par défaut » est sélectionné, sélectionnez l'élément de projectile ou laissez vide pour utiliser la flèche +elementgui.living_entity.is_ranged=Activez les attaques à distance avec objet, intervalle d'attaque et rayon \:
Ajoutez au moins une tâche d'IA Agir de manière agressive contre pour définir les cibles d'attaque.
Si "Élément par défaut" est sélectionné, sélectionnez l'élément de projectile ou laissez vide pour utiliser la flèche elementgui.living_entity.event_struck_by_lightning=Quand elle est frappée par un éclair elementgui.living_entity.event_mob_falls=Quand l'entité tombe elementgui.living_entity.event_mob_dies=Quand l'entité meurt @@ -2298,9 +2361,9 @@ elementgui.living_entity.event_initial_spawn=Lors de l'apparition initiale de l' elementgui.living_entity.condition_natural_spawn=Condition d'apparition naturelle de l'entité elementgui.living_entity.condition_is_model_transparent=Le modèle d'entité est-il transparent ? elementgui.living_entity.condition_is_shaking=Est-ce que le modèle d'entité tremble ? -elementgui.living_entity.behaviour=Caractéristiques comportementales (Mob est agressif, Créature est passif)\: elementgui.living_entity.creature_type=Type de créature (définit certains attributs d'entité)\: elementgui.living_entity.drop_health_xp_amount=Récompense facultative, valeur de la santé, quantité d'expérience \: +elementgui.living_entity.model_layers=Liste des calques du modèle elementgui.living_entity.follow_range_tracking_range=Plage de suivi, intervalle de suivi \: elementgui.living_entity.attack_strenght_armor_value_knockback=Force d'attaque, protection d'armures et attaque, résistance au recul \: elementgui.living_entity.movement_speed_step_height=Vitesse de déplacement, hauteur des pas \: @@ -2309,11 +2372,16 @@ elementgui.living_entity.is_immune_to=Entité immunisée contre\: elementgui.living_entity.ridable=Cochez pour rendre cette entité chevauchable par le joueur
Vous pouvez éventuellement activer les contrôles de l'entité aussi elementgui.living_entity.water_mob=Cochez si cette entité est aquatique\:
NOTE\: Vous avez toujours besoin de tâches IA pour que le mob utilise ces propriétés elementgui.living_entity.flying_mob=Cochez si cette entité est volante\:
NOTE\: Vous avez toujours besoin de tâches IA pour que le mob utilise ces propriétés +elementgui.living_entity.add_model_layer=Ajouter un nouveau calque de modèle +elementgui.living_entity.layer_model=Modèle \: +elementgui.living_entity.layer_texture=Texture \: +elementgui.living_entity.layer_should_glow=Rendre la texture brillante +elementgui.living_entity.layer_display_condition=Condition d'affichage +elementgui.living_entity.layer_needs_texture=Le calque du modèle doit avoir une texture elementgui.living_entity.name=Nom de l'entité\: elementgui.living_entity.entity_model=Modèle de l'entité\:
Supporté\: JAVA elementgui.living_entity.entity_model_import=Cliquez ici pour importer la texture du modèle de l'entité elementgui.living_entity.texture=Texture de l'entité\:
La texture doit être adaptée au modèle (e.g. la texture d'un joueur n'est PAS une texture de type biped) -elementgui.living_entity.glow_texture=Texture de lueur de l'entité (optionnel)\:
La texture lumineuse doit être adaptée au modèle, la luminosité de l'image détermine la lueur elementgui.living_entity.bounding_box=Boîte englobante du modèle de l'entité\:
Largeur/Profondeur, Hauteur, Taille de l'ombre, Décalage Y lors de la montée de l'entité elementgui.living_entity.spawn_egg_options=Options de l'Oeuf\:
Activer, couleur de base, couleur des points, tab créative elementgui.living_entity.mob_boss=Sélectionnez si vous voulez que l'entité soit un Boss avec une barre de vie\: @@ -2335,14 +2403,23 @@ elementgui.living_entity.does_spawn_in_dungeons=Cette entité apparait-elle dans elementgui.living_entity.spawn_general_condition=Condition d'apparition personnalisée\:
Quand la condition d'apparition personnalisée est utilisé, le type de condition d'apparition sera ignoré
mais le type de groupe d'apparition et la pondération sera toujours utilisé.
elementgui.living_entity.bind_to_gui=Lier l'entité à un GUI\:
Laisser à vite pour désactiver l'inventaire (vous voulez cela dans la plupart des cas)
elementgui.living_entity.inventory_size=Taille d'inventaire (nombre de slots)\:
Habituellement cette valeur doit être le plus grand slot ID dans l'interface GUI auquel le bloc est lié à + 1 +elementgui.living_entity.entity_data=Accesseurs de données d'entité
Synchronisés entre les côtés client et serveur +elementgui.living_entity.entity_data_entries=Saisies de données +elementgui.living_entity.entity_data_entries.name=Nom \: +elementgui.living_entity.entity_data_entries.type=Type \: +elementgui.living_entity.entity_data_entries.default_value=Valeur par défaut \: +elementgui.living_entity.entity_data_entries.add_entry=Ajouter une nouvelle entrée +elementgui.living_entity.entity_data_entries.add_entry.name=Nom de la saisie de données \: +elementgui.living_entity.entity_data_entries.add_entry.type=Type de saisie de données \: +elementgui.living_entity.entity_data_entries.add_entry.title=Nouvelle entrée de données elementgui.living_entity.error_entity_model_needs_texture=Le modèle de l'entité a besoin d'une texture elementgui.living_entity.error_entity_needs_name=L'entité a besoin d'un nom elementgui.living_entity.page_visual=Visuel +elementgui.living_entity.page_model_layers=Couches du modèle elementgui.living_entity.page_sound=Son -elementgui.living_entity.page_behaviour=Comportement +elementgui.living_entity.page_entity_data=Données synchronisées elementgui.living_entity.page_ai_and_goals=IA et objectifs elementgui.living_entity.page_spawning=Apparition -elementgui.loot_table.name=Table de butin elementgui.loot_table.registry_name=Nom de registre de la table de butin\:
Utilisez un prefixe comme blocks/ pour spécifier une catégorie elementgui.loot_table.namespace=Espace de noms de table de butin \:
Utilisez l'espace de noms minecraft pour modifier les tables de butin vanilla elementgui.loot_table.type=Type de table de butin\: @@ -2515,18 +2592,18 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=La recette de elementgui.recipe.error_brewing_no_input_ingredient_and_result=La recette d'alchimie doit avoir une entrée, un ingrédient et un résultat définis (l'air ne compte pas) elementgui.structuregen.event_structure_instance_generated=Sur l''''instance de la structure créée elementgui.structuregen.import_tooltip=Cliquez ici pour importer le fichier de structure nbt
Utilisez la section Structures dans l'onglet Espace de travail pour plus d'options. -elementgui.structuregen.select_tooltip=Structure à faire apparaître \:
Pour plus d''options d''''importation de structure, utilisez la section structures de l''onglet Espace de travail +elementgui.structuregen.select_tooltip=Structure à généré\:
Pour plus d'option d'importation de structure, utilise la partie structure de l'espace de travail elementgui.structuregen.ignore_blocks=Blocs à ignorer lors du placement\: elementgui.structuregen.surface_detection_type=Type de détection du sol de référence \: elementgui.structuregen.terrain_adaptation=Type d'adaptation du terrain\: elementgui.structuregen.generation_stage=Phase de génération \: -elementgui.structuregen.biomes_to_spawn=Biomes pour générer la structure dans \: +elementgui.structuregen.biomes_to_spawn=Biomes pour générer la structure dans\: elementgui.structuregen.projection=Projection sur le terrain\: elementgui.structuregen.separation_spacing=Répartition des tronçons de structure \: elementgui.structuregen.separation=Séparation\: elementgui.structuregen.spacing=Espacement\: elementgui.structuregen.error_select_biomes=Sélectionnez au moins un biome où cette structure sera généré -elementgui.structuregen.error_select_structure_spawn=Vous devez sélectionner une structure qui sera créée par ce point d'apparition de cette structure pour continuer. +elementgui.structuregen.error_select_structure_spawn=Vous devez sélectionner une structure à générer elementgui.tab.name=Nom de l'onglet créatif\: elementgui.tab.icon=Icône de l'onglet\: elementgui.tab.search_bar=Afficher la barre de recherche\: @@ -2594,11 +2671,10 @@ workspace.resources.tab.structures=Structures workspace.resources.tab.screenshots=Captures d'écran workspace.textures.new=Créer une nouvelle texture workspace.textures.import=Importer des textures -workspace.textures.edit_selected=Modification de la sélection ... -workspace.textures.duplicate_selected=Duplication de la sélection ... -workspace.textures.delete_selected=Effacement de la sélection -workspace.textures.export_selected=Exportation de la sélection ... -workspace.textures.confirm_deletion_message=Êtes-vous sûr de vouloir supprimer ce fichier ?
NOTE \: Si vous utilisez ce fichier n'importe où, vous avez peut-être des textures cassées \! +workspace.textures.edit_selected=Modifier la sélection... +workspace.textures.duplicate_selected=Dupliquer la sélection... +workspace.textures.replace_selected=Remplacer la sélection... +workspace.textures.export_selected=Exporter la sélection ... workspace.textures.select_dupplicate_type=Sélectionnez le type de texture dans lequel vous souhaitez dupliquer \: workspace.textures.select_texture_type=Quel est le type de texture de ce fichier ? workspace.textures.category.block=Textures pour les blocs\: @@ -2612,45 +2688,32 @@ workspace.textures.category.other=Autres textures (peintures, logo du mod, ...) workspace.3dmodel.description={0}
Mappage des textures \: {1} workspace.3dmodels.edit_texture_mappings=Modifier les mappings de textures... workspace.3dmodels.redefine_animations=Redéfinir les animations du modèle... -workspace.3dmodels.delete_selected=Supprimer la sélection -workspace.3dmodels.delete_confirm_message=Êtes-vous sûr de vouloir supprimer ce modèle ?
NOTE \: Si vous utilisez ce modèle n'importe où, vous pourriez avoir des textures cassées
et certains éléments de mod pourraient ne pas compiler \! -workspace.3dmodels.regenerating_code=Régénérer le code -workspace.3dmodels.regenerating_entity_code=Régénérer le code des entités -workspace.3dmodels.rebuilding_workspace=Reconstruction de l'espace de travail workspace.3dmodels.animation_unsupported_title=Animations non supportées workspace.3dmodels.animation_unsupported_message=Ce modèle ne supporte pas les animations \! workspace.3dmodels.mappings_unsupported_title=Aucun mappage workspace.3dmodels.mappings_unsupported_message=Ce modèle ne supporte pas les mappages de textures \! -workspace.sounds.confirm_deletion_message=Êtes-vous sûr de vouloir supprimer ce son ?
NOTE \: Si vous utilisez ce son n'importe où, il ne fonctionnera plus \! -workspace.sounds.edit_selected=Modification de la sélection ... +workspace.sounds.edit_selected=Modifier la sélection... workspace.sounds.play_selected=Jouer la sélection -workspace.sounds.delete_selected=Effacement de la sélection workspace.sounds.category=Catégorie du son \: {0} workspace.sounds.files=Fichiers audio \: {0} workspace.sounds.subtitle_and_category=Sous-titre \: {0}, Catégorie du son \: {1} -workspace.screenshots.export_selected=Exportation de la sélection ... -workspace.screenshots.delete_selected=Effacement de la sélection +workspace.screenshots.export_selected=Exporter la sélection... workspace.screenshots.action_complete=Tâche terminée workspace.screenshots.use_background_message=Les captures d'écran sélectionnées seront utilisées comme arrière-plan potentiel lors du prochain lancement. workspace.screenshots.use_as_background=Utiliser la sélection comme arrière-plan de MCreator... -workspace.structure.confirm_deletion_message=Êtes-vous sûr de vouloir supprimer les structures sélectionnées ?
NOTE \: Si vous les utilisez n'importe où, elles n'apparaîtront plus \! workspace.variables.variable_name=Nom de la variable workspace.variables.variable_type=Type de variable workspace.variables.variable_scope=Portée de la variable workspace.variables.initial_value=Valeur initiale workspace.variables.add_new=Ajouter une nouvelle variable -workspace.variables.remove_selected=Effacer la sélection workspace.variables.help=Aide sur les variables workspace.variables.change_type=Êtes-vous sûr de vouloir modifier cette variable ?
Si cette variable est utilisée, cette action peut causer des erreurs de compilation.
Si vous venez de la créer, il est parfaitement approprié de la changer. -workspace.variables.remove_variable_confirmation=Êtes-vous sûr de vouloir supprimer les variables sélectionnées ?
Si une variable est utilisée, cette action peut causer des erreurs de compilation. workspace.localization.add_entry=Ajouter une entrée de traduction -workspace.localization.remove_selected=Effacer la sélection workspace.localization.export_to_csv=Exporter la langue actuelle au format CSV workspace.localization.import_csv=Importer le CSV dans la langue actuelle workspace.localization.key_name_title=Nom de la clef workspace.localization.key_name_message=Entrez le nom de la clé pour votre entrée de langue personnalisée \: workspace.localization.confirm_delete_map=Êtes-vous sûr de vouloir supprimer cette carte de localisation ? -workspace.localization.confirm_delete_entry=Êtes-vous sûr de vouloir supprimer les entrées sélectionnées ?
REMARQUE \: Si elles sont encore utilisées, les noms des éléments qui leur sont liés ne fonctionneront pas \! workspace.localization.export_translation=Exporter la traduction workspace.localization.confirm_export=La traduction par défaut (en_us) ne peut pas être exportée \!
Les textes anglais sont définis dans les éléments du mod. workspace.localization.warning_export=Vous ne pouvez pas importer de CSV à la traduction par défaut (en_us) \!
Les textes anglais sont définis dans des éléments de mod. @@ -2874,6 +2937,8 @@ dialog.list_field.biome_list_title=Sélectionnez les biomes dialog.list_field.biome_list_message=Sélectionnez les biomes que vous souhaitez ajouter à la liste\: dialog.list_field.biome_default_feature_title=Sélectionnez les fonctionnalités par défaut de biome dialog.list_field.biome_default_feature_message=Sélectionnez les fonctionnalités par défaut de biome que vous souhaitez ajouter à la liste\: +dialog.list_field.damage_type_list_title=Sélectionnez les types de dégâts +dialog.list_field.damage_type_list_message=Sélectionnez les types de dégâts que vous souhaitez ajouter à la liste \: dialog.list_field.dimension_title=Sélectionnez les dimensions dialog.list_field.dimension_message=Sélectionnez les dimensions que vous souhaitez ajouter à la liste\: dialog.list_field.enchantment_title=Sélectionner les enchantements @@ -2891,6 +2956,7 @@ dialog.selector.damagesources.message=Veuillez sélectionner un type de dégât dialog.selector.dimension.message=Veuillez sélectionner une dimension \: dialog.selector.enchantments.message=Veuillez sélectionner un enchantement \: dialog.selector.entity.message=Veuillez sélectionner une entité\: +dialog.selector.entity_data.message=Veuillez sélectionner un paramètre de données \: dialog.selector.fluids.message=Veuillez sélectionner un fluide \: dialog.selector.gamerules.message=Veuillez sélectionner une règle de jeu \: dialog.selector.gui.message=Veuillez sélectionner une interface \: @@ -2946,6 +3012,17 @@ dialog.tools.inject_tags.tag.biomes.minecraft.is_river=Marque les biomes de type dialog.tools.inject_tags.tag.biomes.minecraft.is_hill=Marque les biomes de type colline. dialog.tools.inject_tags.tag.biomes.minecraft.is_forest=Marque les biomes de type forêt. dialog.tools.inject_tags.tag.biomes.minecraft.is_savanna=Marque les biomes de type savane. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_drowning=Les types de dégâts de ce groupe de balises sont affectés par l'effet de respiration aquatique et par la règle du jeu "drowningDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_explosion=Les types de dégâts de ce groupe de balises sont affectés par l’enchantement de protection contre les explosions. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fall=Les types de dégâts de ce groupe de tags sont affectés par l'effet de chute lente, l'enchantement de chute de plumes et la règle du jeu "fallDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fire=Les types de dégâts de ce groupe de balises sont affectés par l'effet de résistance au feu, l'enchantement de protection contre le feu et la règle du jeu "fireDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_freezing=Les types de dégâts de ce groupe de balises sont affectés par l'armure de cuir et la règle du jeu "freezeDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_projectile=Les types de dégâts de ce groupe de balises sont affectés par l’enchantement de protection contre les projectiles. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_armor=Les types de dégâts de ce groupe de balises ne sont pas réduits par l’armure ou les boucliers. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_cooldown=Type de dégâts dans le groupe de tag qui outrepasse les frames d'invulnérabilités. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_effects=Les types de dégâts dans le groupe de tags ignorent toutes les réductions de dégâts comme les effets de protection, d'amure ou d'enchantement. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_enchantments=Les types de dégâts dans le groupe de tags ignorent les enchantements d'armure ( comme protection ). +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_shield=Les types de dégâts de ce groupe de tags ne peuvent pas être bloqués par des boucliers. workspace_file_browser.title=Navigateur de fichiers de l''''espace de travail workspace_file_browser.search=Rechercher par nom de fichiers workspace_file_browser.open=Ouvrir @@ -3038,6 +3115,18 @@ action.image_editor.save=Enregistrer action.image_editor.save.tooltip=Cliquez sur ce bouton pour enregistrer les changements apportés au fichier existant. Une boîte de dialogue "Enregistrer sous" s''''ouvre si c''''est un nouveau fichier. action.image_editor.redo=Refaire les changements action.image_editor.redo.tooltip=Cliquez sur ce bouton pour refaire les changements précédents +action.image_editor.selection.clear=Vider la sélection +action.image_editor.selection.clear.tooltip=Cliquez ici pour effacer la sélection +action.image_editor.copy=Copier +action.image_editor.copy.tooltip=Cliquez ici pour couper la zone sélectionnée dans le presse-papier +action.image_editor.copy_all=Tout copier +action.image_editor.copy_all.tooltip=Cliquez ici pour copier l'image entière dans le presse-papier +action.image_editor.cut=Couper +action.image_editor.cut.tooltip=Cliquez ici pour couper la zone sélectionnée dans le presse-papier +action.image_editor.paste=Coller +action.image_editor.paste.tooltip=Cliquez ici pour coller le contenu du presse-papier +action.image_editor.delete=Supprimer +action.image_editor.delete.tooltip=Cliquez sur ce bouton pour supprimer la zone sélectionnée action.ide.save=Enregistrer le code action.ide.save.result=Code enregistré action.ide.save.tooltip=Cliquez ici pour enregistrer le code dans l''''éditeur de code actuel @@ -3048,11 +3137,13 @@ common.add=Ajouter common.close=Fermer common.cancel=Annuler common.confirmation=Confirmation +common.delete_selected=Supprimer la sélection common.dependency={0}, type \: {1} common.mod_element_name=Nom de l'élément de mod common.namespace=Espace de nom common.name_already_exists=Ce nom existe déjà common.not_applicable=Non disponible +common.search_usages=L' utilisation de la recherche dans l'espace de travail common.warning=Avertissement components.collapsible_panel.expand=Cliquer pour agrandir components.collapsible_panel.collapse=Cliquez pour réduire @@ -3185,4 +3276,7 @@ notification.common.more_info=Plus d'information notification.update_available.msg=Il y a une nouvelle version de MCreator disponible.

Version installée \: {0}
Nouvelle version \: {1} notification.patch_available.msg=Il y a une version plus récente de {0} disponible.

Version installée \: {0}.{1}
Nouvelle version \: {0}.{2} notification.plugin_updates.msg=Il y a des mises à jour de plugin disponibles +notification.news.title=Actualités du site \: {0} +notification.news.read_more=En savoir plus à ce sujet +notification.news.hide=Masquer cette notification simple_list_entry.remove=Supprimer cette entrée \ No newline at end of file diff --git a/plugins/mcreator-localization/lang/texts_he_IL.properties b/plugins/mcreator-localization/lang/texts_he_IL.properties index 0c7027b64da..398f9b7a937 100644 --- a/plugins/mcreator-localization/lang/texts_he_IL.properties +++ b/plugins/mcreator-localization/lang/texts_he_IL.properties @@ -8,11 +8,15 @@ dialog.workspace_selector.open_workspace=מרחב עבודה פתוח... dialog.workspace_selector.import=ייבא מקבצים... dialog.workspace_selector.no_workspaces_loaded=
נכשל לטעון מרחבי עבודה האחרונים
קיצור דרך. פתח אותם מחדש כדי להוסיף
אותם בחזרה לרשימה. dialog.workspace_selector.no_workspaces=אין מרחבי עבודה אחרונים +dialog.workspace_selector.version=גירסא {0} dialog.workspace_selector.preferences=עדיפויות dialog.workspace_selector.donate=תרומה dialog.workspace_selector.news=חדשות אחרונות מהאתר של MCreator\: dialog.workspace_selector.motw=מוד החודש\: dialog.workspace_selector.webdata.loading=טוען נתונים ... +dialog.workspace_selector.delete_workspace.title=מחק סביבת עבודה +dialog.workspace_selector.delete_workspace.workspace=מחק את תיקיית מרחב העבודה +dialog.workspace_selector.delete_workspace.confirmation=האם אתה בטוח שברצונך למחוק לצמיתות את {0}?

אם תלחץ על כן, כל קבצי סביבת העבודה יימחקו מהמחשב באופן בלתי הפיך. action.mcreator_website=האתר של MCreator action.mcreator_community=הקהילה של MCreator action.publish_modification=פרסם את המודיפיקציה שלי... @@ -110,9 +114,7 @@ dialog.cache_cleanup.title=נקה זיכרון של בונה התוכנה של G dialog.cache_cleanup.progress.stopping_daemons=מפסיק להריץ תוכניות Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=מנקה את תיקיית המטמון של בונה התוכנה dialog.cache_cleanup.progress.build_task=מריץ -dialog.code_error.compilation_desc=אחד או יותר מקבצי המוד העיקרי שלך לא הודר (קומפל) כראוי.

דבר זה נגרם בדרך כלל בשל חוסר עקביות בקוד של המוד במהלך הבנייה.
אנו יכולים לפתור בעיה זו עבורך על ידי החזרת כל הקוד של המוד.

אם ננעלו במוד רכיבים או קבצים, הם עלולים לגרום לשגיאה זו גם.


יש ללחוץ על החזר קוד כדי להתקדם בפעולה זו.
dialog.code_error.compilation_title=שגיאת הידור עם הקובץ הראשי של המוד -dialog.code_error.compilation_list=מרחב העבודה של המוד מכיל רכיבים שלא עוברים הידור (קימפול) כראוי.

דבר זה כנראה נגרם בגלל הרכיב האחרון שהתווסף או נערך. ניתן לנסות לשנות את ההגדרות של הרכיב במוד
אשר גרם לשגיאות הבנייה (רכיבים אלו צוינו למטה) כדי לתקן את הבעיה הזו.

אם לא ניתן לפתור בעיה זו, ייצא את מרחב העבודה לקובץ ZIP שניתן לשתפו מתפריט קבצים ולשלוח לנו דרך
מעקב הבעיות בGitHub כדי שנוכל לנסות לסייע.

רשימת הרכיבים אשר גרמו לשגיאות ההידור (קוצר ללא יותר מ10 רכיבים)\:

dialog.code_error.regenerate_code=שחזר קוד dialog.code_error.ignore_error=התעלם משגיאה dialog.code_error.show_in_workspace=חיפוש במרחב העבודה @@ -153,6 +155,15 @@ dialog.gui.label_event_display_condition=סמן תנאי הצגה dialog.gui.label_text=מלל\: dialog.gui.label_component_title=עריכת תווית dialog.gui.label_text_color=צבע המלל\: +dialog.gui.anchor.top_left=שמאל למעלה +dialog.gui.anchor.top_center=למעלה במרכז +dialog.gui.anchor.top_right=למעלה מימין +dialog.gui.anchor.center_left=מרכז שמאל +dialog.gui.anchor.center=מרכז +dialog.gui.anchor.center_right=מרכז ימין +dialog.gui.anchor.bottom_left=למטה משמאל +dialog.gui.anchor.bottom_center=למטה במרכז +dialog.gui.anchor.bottom_right=ימנית תחתונה dialog.gradle_console.clear_log=נקה את יומן הרישום dialog.gradle_console.search=חפש בקונסול dialog.gradle_console.start_build=לחץ פה כדי לבנות את כל המרחב עבודה
אפשר להתחיל בבניה ע"י לחיצה על Cntrl + לחיצה על כרטיסיית קונסול גם @@ -170,6 +181,7 @@ dialog.gui.slot_id_already_used=מס' הזהות של המשבצת כבר בשי dialog.gui.slot_id_must_be_number=מס' הזהות של המשבצת חייב להיות מספר dialog.gui.slot_id=מס' זהות של משבצת\: dialog.gui.slot_custom_color=צבע מותאם אישית
לחצו רק אם בכוונה היא להשתמש בצבע המותאם\: +dialog.gui.slot_limit_stack_input=הגבלת קלט מחסנית ל\:
אם ריק, אין הגבלה. לא משפיע על אוטומציה.
מוכר על ידי תנאי ההוספה (אם אינו ברירת מחדל) dialog.gui.slot_drop_item_when_gui_closed=זרוק את הפריטים כאשר GUI לא מחובר ללבנה נסגר dialog.gui.slot_event_slot_content_changes=כאשר תוכן המשבצת משתנה dialog.gui.slot_event_item_taken_from_slot=כאשר פריט נלקח מהמשבצת @@ -259,6 +271,9 @@ dialog.image_maker.enter_name=הכנס את שם הטקסטורה (ללא רוו dialog.image_maker.texture_name=סוג הטקסטורה dialog.image_maker.texture_type_name_exists=טקסטורה מסוג זה בשם זה כבר קיימת\! dialog.image_maker.resource_error=שגיאת מקורות +dialog.image_maker.info_bar.new_image=תמונה חדשה +dialog.image_maker.info_bar.source_image=תמונת מקור\: {0} +dialog.image_maker.info_bar.file=קובץ\: {0} dialog.image_maker.tools.general=כללי dialog.image_maker.tools.drawing=שרטוט dialog.image_maker.tools.filters=פילטרים @@ -322,7 +337,6 @@ dialog.modelement_id.info_message_title=הקוד של הרכיב נעול dialog.modelement_id.registry_name=רישום שם\: dialog.modelement_id.registry_name_info=רישום שם (לא כל הרכיבים משתמשים בו) dialog.modelement_id.registry_name_validator=רישום שם -dialog.modelement_id.use_caution_warn=השתמש בכלי זה בזהירות\!

שינוי שם הרישום יכול להרוס את העולמות השמורים כרגע ולגרום
לקונפליקט עם רכיבי מוד אחרים מהמוד שלך\! dialog.modelement_id.id_and_registry_names="{0} - שם הרישום" dialog.modelement_id.invalid_registry_name=השם ברישום אשר הזנת אינו חוקי\!
השינויים לא נשמרו. dialog.modelement_id.invalid_registry_name_title=השם ברישום לא חוקי @@ -389,7 +403,6 @@ dialog.textures_mapping.title_for_model=מפת טקסטורה עבור מודל dialog.textures_mapping.add_new=הוסף מפת טקסטורה חדשה dialog.textures_mapping.enter_name_message=הזן את שם מפת הטקסטורה שלך.
השימוש בשם זה הוא עבור זיהוי סט הטקסטורות כאשר
תבחר מפת טקסטורה עבור המודל שלך. dialog.textures_mapping.enter_name_title=מפת טקסטורה חדשה -dialog.textures_mapping.jump_to=קפוץ ל... dialog.textures_mapping.save=שמור מפה dialog.textures_mapping.model_texture_part=חלק בטקסטורת המודל\:
{0} dialog.textures_mapping.confirm_deletion_message=האם למחוק את מפת טקסטורה זו?
עלולים להתקבל טקסטורות לקויות אם המפה עדיין בשימוש\! @@ -508,7 +521,6 @@ workspace.elements.list.filter_all=הצג הכל workspace.elements.list.filter_locked=נעל רכיבים workspace.elements.list.filter_witherrors=רכיבים עם שגיאות בנייה workspace.elements.list.ascending=סדר עולה -workspace.category.mod_elements=רכיבי המוד workspace.category.resources=מקורות workspace.category.variables=משתנים workspace.category.localization=לוקליזציה @@ -524,12 +536,10 @@ workspace.elements.list.edit.delete=מחק workspace.elements.list.edit.duplicate=שכפול רכיב מוד... workspace.elements.list.edit.code=פתח רכיב מוד בעורך הקוד workspace.elements.list.edit.lock=לנעול/לפתוח רכיב מוד -workspace.elements.list.edit.id=ערוך IDs של רכיב קוד... workspace.elements.list.edit.add.folder=הוספת תיקייה חדשה... workspace.elements.list.edit.rename.folder=שנה שם לתיקיה הנבחרת... workspace.elements.delete.tooltip=מחק רכיב נבחר במוד workspace.elements.edit_code.tooltip=ערוך את הקוד של הרכיב הנבחר במוד -workspace.elements.edit_registry_names.tooltip=ערוך מס' זהות של רכיב ושמות רשומים workspace.elements.empty.tip=לחץ %1 בכדי להוסיף רכיבי מוד workspace.elements.lock_modelement_confirm=לנעול/לפתוח את הקוד של הרכיב? workspace.elements.lock_modelement_title=רכיב במוד לנעול/לפתוח @@ -580,8 +590,6 @@ trigger.entity_tamed=ישות מאולפת trigger.entity_travels_to_dimension=ישות עוברת מימד trigger.explosion_occurs=פיצוץ מתרחש trigger.farmland_trampled=אדמת חווה נמעכת -trigger.gem_dropped=פנינה נזרקת -trigger.gem_expired=פנינה נשברת trigger.item_crafted=פריט נוצר trigger.item_destroyed=פריט נהרס trigger.item_smelted=פריט מותך @@ -694,10 +702,8 @@ blockly.block.entity_direction_value=כיוון של %1 blockly.block.entity_extinguish=כבה %1 blockly.block.entity_foodlevel=קבל רמת אוכל של %1 blockly.block.entity_get_armor_slot_item=קבל פריט ממשבצת שריון %1 של %2 -blockly.block.entity_get_fly_speed=קבל מהירות תעופה של %1 blockly.block.entity_get_oxygen=קבל רמת אוויר של %1 blockly.block.entity_get_scoreboard_score=קבל %2 תוצאה של לוח תוצאות ל %1 -blockly.block.entity_get_walk_speed=קבל מהירות הליכה של %1 blockly.block.entity_getowner=%2 קבל בעלים של %1 אם מאולף blockly.block.entity_getridingentity=%2 קבל ישות %1 אם רוחב blockly.block.entity_has_nogravity=ה %1 ללא כוח משיכה @@ -1121,8 +1127,6 @@ elementgui.enchantment.damage_modifier=מפחית נזק\:
בש elementgui.enchantment.treasure_enchantment=האם כישוף זה הוא מסוג אוצר? elementgui.enchantment.curse=האם כישוף זה הוא קללה? elementgui.enchantment.allowed_on_books=האם כישוף זה יכול להיות על ספרים? -elementgui.enchantment.compatible_enchantments=יכול להשתלב עם\:
השאר ריק כדי לאפשר שילוב עם כל כישוף -elementgui.enchantment.can_apply_to=ניתן להחיל על\:
השאר ריק כדי לאפשר החלה על כול הפריטים הרלוונטיים elementgui.enchantment.needs_name=הכישוף צריך שם elementgui.gamerule.name=שם המכונה\: elementgui.gamerule.category=קטגוריה\: @@ -1191,10 +1195,8 @@ elementgui.living_entity.despawn_idle=להעלים כאשר עומד במקומ elementgui.living_entity.spawn_weight=משקל זימון\: elementgui.living_entity.spawn_type= סוג זימון היישות (משנה את מקום וטווח זמן הזימון)\: elementgui.living_entity.error_entity_needs_name=יישות זקוקה לשם -elementgui.living_entity.page_behaviour=התנהגות elementgui.living_entity.page_ai_and_goals=התנהגות היישות ומטרותיה elementgui.living_entity.page_spawning=זימון -elementgui.loot_table.name=טבלת שלל elementgui.loot_table.type=סוג טבלת שלל\: elementgui.loot_table.add_pool=הוספת שורה לטבלת השלל elementgui.loot_table.enable_pool_rolls=הפעל בונוס הגרלות @@ -1273,29 +1275,17 @@ workspace.resources.tab.structures=מבנים workspace.resources.tab.screenshots=צילומי מסך workspace.textures.new=צור טקסטורה חדשה workspace.textures.import=יבוא טקסטורות -workspace.textures.edit_selected=ערוך נבחר ... -workspace.textures.delete_selected=מחק נבחרים -workspace.textures.export_selected=ייצא נבחרים ... -workspace.3dmodels.edit_texture_mappings=ערוך מפת טקסטורה ... -workspace.3dmodels.delete_selected=מחק נבחרים -workspace.3dmodels.regenerating_code=החזר קוד workspace.3dmodels.animation_unsupported_title=האנימציות לא נתמכות workspace.3dmodels.animation_unsupported_message=מודל זה אינו תומך באנימציות\! workspace.3dmodels.mappings_unsupported_title=אין מיפוי workspace.3dmodels.mappings_unsupported_message=מודל זה אינו תומך במפת טקסטורה\! -workspace.sounds.edit_selected=ערוך נבחר ... -workspace.sounds.delete_selected=מחק נבחרים workspace.sounds.files=קבצי קול\: {0} -workspace.screenshots.export_selected=ייצא נבחרים ... -workspace.screenshots.delete_selected=מחק נבחרים workspace.screenshots.action_complete=הפעולה הושלמה workspace.variables.variable_name=שם המשתנה workspace.variables.variable_type=שם המשתנה workspace.variables.variable_scope=תחום המשתנה workspace.variables.initial_value=ערך התחלתי workspace.variables.add_new=הוסף משתנה חדש -workspace.variables.remove_selected=הסר נבחרים -workspace.localization.remove_selected=הסר נבחרים workspace.localization.key_name_title=שם מפתח workspace.localization.export_translation=ייצא תרגום workspace.localization.column_key=מפתח מקור לשפה diff --git a/plugins/mcreator-localization/lang/texts_hu_HU.properties b/plugins/mcreator-localization/lang/texts_hu_HU.properties index f43ddb70287..d994185b200 100644 --- a/plugins/mcreator-localization/lang/texts_hu_HU.properties +++ b/plugins/mcreator-localization/lang/texts_hu_HU.properties @@ -77,10 +77,6 @@ dialog.animation_maker.settings=Animáció beállítások dialog.animation_maker.next_frame=Következő képkocka dialog.animation_maker.previous_frame=Előző képkocka dialog.animation_maker.animation_timeline=Animáció Idővonal -dialog.animation_maker.add_frames=Képkocka(ák) hozzáadása... -dialog.animation_maker.add_frames_from_template=Képkockák hozzáadása sablonból... -dialog.animation_maker.add_frames_from_strip=Képkockák hozzáadása animációs szalagból... -dialog.animation_maker.add_frames_from_gif=Képkockák hozzáadása GIF-ből... dialog.animation_maker.gif_importing=GIF importálása dialog.animation_maker.gif_reading=GIF olvasása dialog.animation_maker.gif_processing=GIF feldolgozása @@ -117,9 +113,7 @@ dialog.cache_cleanup.title=Gradle gyorsítótár takarítása dialog.cache_cleanup.progress.stopping_daemons=Gradle démonok leállítása dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Gradle gyorsítótár mappa takarítása dialog.cache_cleanup.progress.build_task=Gradle build feladat futtatása -dialog.code_error.compilation_desc= A fő mod file nem nem lett megfelelően összeállítva.

Ezt gyakran okozzák következetlenségek a mod kódjában a buildek alatt.
Az MCreator meg tudja oldani ezt a problémát a mod egész kódját újragenerálva.

Ha van lezárt mod elemed az alap fájlok között, az szintén okozhatja ezt a hibát.


Kattints a Kód regenerálása gombra, hogy folytasd ezzel a lépéssel.
dialog.code_error.compilation_title=Fő mod fájl összeállítási hibák -dialog.code_error.compilation_list=A munkaterület olyan eleme(ke) t tartalmaz, amelyek nem fordíthatóak le megfelelően.

Ezt valószínűleg az utoljára hozzáadott, vagy szerkesztett elem okozta. A probléma megoldásához próbálja meg módosítani az elemek
beállításait, amelyek összeállítási hibákat okoznak (az ilyen elemeket alább találja).

Ha nem tudja megoldani a problémát, exportálja a munkaterületet megosztható ZIP-fájlba a Fájl menüből, és küldje el nekünk
az oldalunkon található probléma megosztón keresztül, hogy megpróbáljunk segíteni.

A fordítási hibákat okozó elemek listája\:

dialog.code_error.regenerate_code=Kód újragenerálása dialog.code_error.ignore_error=Hiba mellőzése dialog.code_error.show_in_workspace=Mutatás a munkaállomásban @@ -337,7 +331,6 @@ dialog.modelement_id.info_message_title=A mod elem kódja le van zárva dialog.modelement_id.registry_name=Bejegyzési név\: dialog.modelement_id.registry_name_info=Bejegyzési név (nem minden mod elem használja) dialog.modelement_id.registry_name_validator=Bejegyzési név -dialog.modelement_id.use_caution_warn=Óvatosan használja ezt az eszközt\!

A rendszerleíró adatbázis nevének megváltoztatása tönkreteheti a mentett világait, és hibákat okozhat
a többi modban lévő elemben\! dialog.modelement_id.id_and_registry_names="{0} – Nyilvántartási név" dialog.modelement_id.invalid_registry_name=A befegyzési név amit megadtál nem érvényes\!
A változtatások nem lettek mentve. dialog.modelement_id.invalid_registry_name_title=Érvénytelen bejegyzési név @@ -401,7 +394,6 @@ dialog.textures_mapping.title_for_model=Textúra leképezés modellre dialog.textures_mapping.add_new=Új textúra leképezés hozzáadása dialog.textures_mapping.enter_name_message=Add meg a textúra leképezés nevét.
Ez a név azonosítja a textúráidat, amikor
kiválasztod a textúra leképezést a modelled számára. dialog.textures_mapping.enter_name_title=Új textúra leképezés -dialog.textures_mapping.jump_to=Ugrás ... dialog.textures_mapping.save=Leképezés mentése dialog.textures_mapping.model_texture_part=Modell textúra részlet\:
{0} dialog.textures_mapping.confirm_deletion_message=Biztos vagy abban, hogy törölni akarod ezt a textúra leképezést?
Elromlott textúrákat kaphatsz, ha még használatban van\! @@ -522,7 +514,6 @@ workspace.elements.list.filter_all=Összes mutatása workspace.elements.list.filter_locked=Lezárt elemek workspace.elements.list.filter_witherrors=Elemek build hibával workspace.elements.list.ascending=Növekvő -workspace.category.mod_elements=Mod elemek workspace.category.resources=Erőforrások workspace.category.variables=Változók workspace.category.localization=Nyelv @@ -539,14 +530,11 @@ workspace.elements.list.edit.delete=Törlés workspace.elements.list.edit.duplicate=Ismétlődő mod elem... workspace.elements.list.edit.code=Mod elem megnyitása kódszerkesztőben workspace.elements.list.edit.lock=Elem kódjának zárolása/nyitása -workspace.elements.list.edit.id=Mod elem ID-k módosítása... workspace.elements.list.edit.add.folder=Új mappa létrehozása... workspace.elements.list.edit.rename.folder=Kijelölt mappa átnevezése... -workspace.elements.confirm_delete_message=Biztosan törölni akarod a kijelölt ({0}) elemeket?

Ha használtad ennek a mod elemnek az adatát (mint recep, eseményben, vagy fülben, ...) Neked
Kell törölnöd az erre utaló elemeket is\! Külömben build errort kapsz.

Mod elemek törölt mappában, és belső-mappában át fognak kerülni a szülő mappához workspace.elements.delete.tooltip=Kijelölt mod elem törlése workspace.elements.edit_code.tooltip=Kijelölt mod elem kódjának módosítása workspace.elements.lock_code_tooltip=Lezárni/kinyitni az elem kódját
Ha lezárod a kódot, az MCreator nem fogja megváltoztatni a kódot, tehát a mod típusa módosítható lesz a kódjából.
Valamint a kód elő lesz készítve munkaasztal váltásra.
Csak akkor használd ha tudod a következményeit
a mod elem lezárásának\! -workspace.elements.edit_registry_names.tooltip=Mod elem ID-jének, és a bejegyzési nevének módosítása workspace.elements.empty.tip=Nyomjon %1 mod elemek hozzáadásához workspace.elements.lock_modelement_message=Le próbálod zárni/kinyitni a mod elemet\!

Amikor a kód zárva van, MCreator nem fogja megváltoztatni a kódját, de ez azt jelenti,
hogy amikor frissíted az MCreatort a bug javítások, és a Minecraft verzióváltások nem fognak
hatni a lezárt elemekre.

A lezárt mod elemek, amik ki vannak jelölve kinyílnak.
Ez azt jelenti, hogy a kódjai ezeknek az elemeknek felülíródnak az MCreator által.

Kérlek olvasd el az MCreator weboldalán a kód lezárásával kapcsolatos cikket. workspace.elements.lock_modelement_confirm=Elem kódjának lezárása/kinyitás? @@ -597,8 +585,6 @@ trigger.entity_tamed=Entitáns megszelidűl trigger.entity_travels_to_dimension=Entitáns dimenziót ugrik trigger.explosion_occurs=Egy robbanás történik trigger.farmland_trampled=Mező ki taposódik -trigger.gem_dropped=Drágakő eldobódik -trigger.gem_expired=Drágakő lejár trigger.item_crafted=Tárgy barkácsolódik trigger.item_destroyed=Tárgy elpusztul trigger.item_smelted=Tárgy kisül @@ -744,13 +730,11 @@ blockly.block.entity_extinguish=Eloltása %1 -nak/nek blockly.block.entity_foodlevel=%1 Étel szintjének lekérdezése blockly.block.entity_get_absorption=%1 elnyet életerejének lekérdezése blockly.block.entity_get_armor_slot_item=Tárgy lekérdezése %1 páncél slotból %2 -nak/nek -blockly.block.entity_get_fly_speed=Repülési sebesség lekérése %1 blockly.block.entity_get_oxygen=Oxigén lekérése %1 blockly.block.entity_get_saturation=Étel %1 telítettségének lekérdezése blockly.block.entity_get_scoreboard_score=%2 eredménytáblázat értékének lekérdezése %1 számára blockly.block.entity_get_shootpower=Lövési erejének lekérdezése ha %1 egy lövedék blockly.block.entity_get_slot=Tárgy másolatának lekérdezése a %1 számú slotjábó %2 -nak/nek ha van leltárja -blockly.block.entity_get_walk_speed=Gyaloglási sebesség lekérése %1 blockly.block.entity_getowner=%2 tulajdonosának lekérdezése ha %1 meg van szelidítve blockly.block.entity_getridingentity=%2 entináns %1 lovagol-e blockly.block.entity_gettargetentity=%2 entitáns %1 támadni készül-e @@ -1390,9 +1374,7 @@ elementgui.living_entity.sound=Élő hang\: elementgui.living_entity.hurt_sound=Sebzés hang\: elementgui.living_entity.death_sound=Halál hang\: elementgui.living_entity.spawn_group_size=Az entitások száma egy spawnolási csoportban\: -elementgui.living_entity.page_behaviour=Viselkedés elementgui.living_entity.page_ai_and_goals=AI és célok -elementgui.loot_table.name=Zsákmány tábla elementgui.loot_table.rolls=Alkalmak\: elementgui.loot_table.bonus_rolls=Bónusz alkalmak\: elementgui.loot_table.count=Mennyiség\: @@ -1450,19 +1432,8 @@ workspace.resources.tab.structures=Struktúrák workspace.resources.tab.screenshots=Képernyőképek workspace.textures.new=Új textúra létrehozása workspace.textures.import=Textúrák importálása -workspace.textures.edit_selected=Kiválasztott szerkesztése ... -workspace.textures.duplicate_selected=Kiválasztott másolása ... -workspace.textures.delete_selected=Kiválasztott törlése -workspace.textures.export_selected=Kiválasztott exportálása ... -workspace.textures.confirm_deletion_message=Biztos benne, hogy szeretné törölni ezt a fájlt?
MEGJEGYZÉS\: Ha használta valahol ezt a fájlt, akkor lehetséges hogy hibás textúrák lesznek\! -workspace.3dmodels.delete_selected=Kiválasztott törlése -workspace.3dmodels.regenerating_code=Kód újra generálása -workspace.sounds.edit_selected=Kiválasztott szerkesztése ... workspace.sounds.play_selected=Kiválasztott lejátszása -workspace.sounds.delete_selected=Kiválasztott törlése workspace.sounds.files=Hang fájlok\: {0} -workspace.screenshots.export_selected=Kiválasztott exportálása ... -workspace.screenshots.delete_selected=Kiválasztott törlése workspace.screenshots.action_complete=A művelet befejződött workspace.localization.key_name_title=Kulcs neve workspace.localization.export_translation=Fordítás exportálása diff --git a/plugins/mcreator-localization/lang/texts_it_IT.properties b/plugins/mcreator-localization/lang/texts_it_IT.properties index ca063350110..eb48a5c6714 100644 --- a/plugins/mcreator-localization/lang/texts_it_IT.properties +++ b/plugins/mcreator-localization/lang/texts_it_IT.properties @@ -79,10 +79,10 @@ dialog.animation_maker.settings=Impostazioni dell'animazione dialog.animation_maker.next_frame=Fotogramma successivo dialog.animation_maker.previous_frame=Fotogramma precedente dialog.animation_maker.animation_timeline=Linea del tempo dell'animazione -dialog.animation_maker.add_frames=Aggiungi fotogramma/i... -dialog.animation_maker.add_frames_from_template=Aggiungi fotogrammi dal modello... +dialog.animation_maker.add_frames=Aggiungi fotogrammi... +dialog.animation_maker.add_frames_from_template=Aggiungi fotogrammi da un modello... dialog.animation_maker.add_frames_from_strip=Aggiungi fotogrammi da una striscia di animazione... -dialog.animation_maker.add_frames_from_gif=Aggiungi fotogrammi da una GIF ... +dialog.animation_maker.add_frames_from_gif=Aggiungi fotogrammi da una GIF... dialog.animation_maker.gif_importing=Importa GIF dialog.animation_maker.gif_reading=Lettura GIF dialog.animation_maker.gif_processing=Elaborazione GIF @@ -119,9 +119,9 @@ dialog.cache_cleanup.title=Pulizia cache di Gradle dialog.cache_cleanup.progress.stopping_daemons=Fermando il programma in background di Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Pulendo la cartella di cache di Gradle dialog.cache_cleanup.progress.build_task=Eseguendo il compito di costruzione di Gradle -dialog.code_error.compilation_desc=Il tuo file principale della mod non si compila correttamente.

Ciò è generalmente causato da inconsistenze nel codice della mod durante la costruzione.
MCreator può risolvere questo problema per te rigenerando l' intero codice della mod.

Se hai bloccato elementi o i file base della mod, potrebbero essere loro la causa di questo errore.


Clicca il pulsanteRigenera codice per procedere con questa azione.
+dialog.code_error.compilation_desc=Uno o più file principali della tua mod non sono stati compilati correttamente.

Ciò ciò è solitamente causato da incoerenze nel codice durante le build.
MCreator potrebbe essere in grado di risolvere questo problema rigenerando l'intero codice della mod.

Se hai bloccato elementi mod o file base, potrebbe anche questa essere la causa dell'errore.


Fai clic su pulsante Rigenera codice per procedere con questa azione.
dialog.code_error.compilation_title=Errori di compilazione nel file principale della mod -dialog.code_error.compilation_list=La tua area di lavoro contiene elementi della mod che non si compilano correttamente.

Ciò è causato probabilmente dall'ultimo elemento della mod che hai creato o modificato. Prova a cambiare le impostazioni degli elementi
che causano errori di build (questi elementi sono elencati qui sotto) per tentare di risolvere questo problema.

Se continui ad avere erroi, esporta l'area di lavoro in un file ZIP condivisibile tramite il menù File e inviacelo tramite
il tracciatore di errori sul nostro sito, così che possiamo provare ad aiutarti.

Lista degli elementi della mod che causano problemi di compilazione (limitato a 10 elementi)\:

+dialog.code_error.compilation_list=Il tuo spazio di lavoro contiene elementi mod che non vengono compilati correttamente.

Ciò è stato probabilmente causato dall'ultimo elemento che hai aggiunto o modificato. Prova a modificare le impostazioni degli elementi mod
che causano errori (tali elementi sono elencati di seguito) per provare a risolvere il problema.

Se non riesci a risolvere con questo metodo, esporta l'area di lavoro in un file ZIP condivisibile dal menu File e inviacelo tramite
il nostro Issue tracker su GitHub così possiamo provare ad aiutarti.

Elenco degli elementi mod che causano errori di compilazione\:

dialog.code_error.regenerate_code=Rigenerando il codice dialog.code_error.ignore_error=Ignora gli errori dialog.code_error.show_in_workspace=Mostra nello spazio di lavoro @@ -273,12 +273,14 @@ dialog.imageeditor_tool.use_canvas=Clicca sulla superficie per usare dialog.imageeditor.layer_panel_no_image=Nessuna immagine dialog.imageeditor.layer_panel_no_layers=Nessun layer dialog.imageeditor.layer_panel_new_layer=Nuovo layer +dialog.imageeditor.layer_panel_new_layer.floating=Nuovo livello da fluttuante dialog.imageeditor.layer_panel_move_up=Muovi sù dialog.imageeditor.layer_panel_move_down=Muovi giù dialog.imageeditor.layer_panel_rename_layer=Rinomina il layer dialog.imageeditor.layer_panel_toggle_visibility=Mostra/Nascondi dialog.imageeditor.layer_panel_delete_layer=Elimina layer dialog.imageeditor.layer_panel_duplicate_layer=Duplica layer +dialog.imageeditor.layer_panel_merge_layers_down=Unisci questo strato con lo strato sottostante dialog.imageeditor.layer_panel_confirm_layer_deletion_message=Sei sicuro/a di voler eliminare i layer seguenti\:
dialog.imageeditor.layer_panel_confirm_layer_deletion_title=Elimina layer dialog.imageeditor.layer_panel_enter_new_name=Inserisci il nome del nuovo layer\: @@ -323,6 +325,8 @@ dialog.image_maker.tools.types.noise_description=Uno strumento per aggiungere ru dialog.image_maker.tools.types.move=Strumento di movimento dialog.image_maker.tools.types.move_layer=Muovi il layer dialog.image_maker.tools.types.move_description=Uno strumento per muovere i layers attivi +dialog.image_maker.tools.types.select=Seleziona Strumento +dialog.image_maker.tools.types.select_description=Uno strumento per selezionare le aree dialog.image_maker.tools.types.pencil=Matita dialog.image_maker.tools.types.pencil_description=Uno strumento base per il disegno dialog.image_maker.tools.types.resizecanvas=Ridimensiona le tele @@ -361,6 +365,7 @@ dialog.item_selector.enter_tag_name.blocks=Scrivi il nome del tag del bloc dialog.item_selector.enter_tag_name.items=Inserisci il nome del tag del oggetto sotto (controlla la lista per modelli)\:
dialog.item_selector.enter_tag_name.biomes=Inserisci il nome del tag del bioma sotto (controlla la lista per i modelli)\:
dialog.item_selector.enter_tag_name.entities=Inserisci il nome del tag dell'entità sotto (controlla la lista per i modelli)\:
+dialog.item_selector.enter_tag_name.damage_types=Inserisci il nome del tag qui sotto (controlla la lista per degli esempi)\:
dialog.item_selector.error_invalid_tag_name_title=Nome tag non valido dialog.item_selector.all=Tutti dialog.item_selector.blocks=Blocchi @@ -380,7 +385,7 @@ dialog.modelement_id.info_message_title=Il codice dell'elemento della mod è blo dialog.modelement_id.registry_name=Nome di registro\: dialog.modelement_id.registry_name_info=Nome di registro (non tutti gli elementi della mod lo usano) dialog.modelement_id.registry_name_validator=Nome di registro -dialog.modelement_id.use_caution_warn=Usa questo strumento con attenzione\!

Modificare i nomi del registro può corrompere i salvataggi esistenti del mondo e causare
conflitti con gli elementi di altre mod da parte della tua mod\! +dialog.modelement_id.use_caution_warn=Utilizza questo strumento con estrema cautela\! Assicurati di non utilizzare nomi duplicati\!

Modificare i nomi del registro può interrompere i salvataggi del tuo mondo esistente e causare
conflitti con altri elementi della tua mod\! dialog.modelement_id.id_and_registry_names="{0} - Nome registro" dialog.modelement_id.invalid_registry_name=Il nome di registro che hai inserito non è valido\!
Le modifiche non sono state salvate. dialog.modelement_id.invalid_registry_name_title=Nome di registro non valido @@ -421,6 +426,20 @@ dialog.preferences.themes.list=
Lista dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}
{1} dialog.preferences.unknown_property_type={0}\: tipo di proprietà sconosciuto +dialog.search_usages.list=Elenco di elementi mod che utilizzano {0}selezionati\: +dialog.search_usages.list.empty=Nessun elemento che utilizza uno qualsiasi degli {0}selezionati trovati. +dialog.search_usages.open_selected=Modifica l'elemento selezionato +dialog.search_usages.title=Utilizzi dell'elemento +dialog.search_usages.deletion.confirm_msg=Sei sicuro di voler eliminare l'' {0}selezionato?

Alcuni degli {0}selezionati sono ancora utilizzati dagli elementi elencati di seguito.
Se si procede con l''eliminazione, lo spazio di lavoro potrebbe corrompersi e/o fallire nella costruzione\! +dialog.search_usages.deletion_safe.confirm_msg=Sei sicuro di voler eliminare {0}selezionato?

Non ci sono elementi mod che utilizzano {0} dalla lista selezionata. Tuttavia, possono ancora essere utilizzati in un codice personalizzato.
Scegliendo di procedere, questi riferimenti diventeranno non validi, il che può portare a risorse corrotte o a crash di gioco. +dialog.search_usages.deletion.confirm=Elimina comunque +dialog.search_usages.type.mod_element=elemento mod +dialog.search_usages.type.resource.texture=texture +dialog.search_usages.type.resource.model=modello +dialog.search_usages.type.resource.sound=suono +dialog.search_usages.type.resource.structure=struttura +dialog.search_usages.type.global_variable=variabile globale +dialog.search_usages.type.localization_key=chiave di localizzazione dialog.sounds.name=Nome del suono dialog.sounds.registry_name=Nome di registro del suono\:
Se si rinomina un suono in uso, i riferimenti esistenti si romperanno dialog.sounds.files=File audio\: @@ -455,7 +474,7 @@ dialog.textures_mapping.title_for_model=Mappatura della texture del modello dialog.textures_mapping.add_new=Aggiungi una nuova mappatura della texture dialog.textures_mapping.enter_name_message=Inserisci il nome della mappatura della texture.
Questo nome viene utilizzato per identificare il tuo set di texture quando
si seleziona una mappatura della texture per il tuo modello. dialog.textures_mapping.enter_name_title=Nuova mappatura della texture -dialog.textures_mapping.jump_to=Salta a ... +dialog.textures_mapping.jump_to=Salta a... dialog.textures_mapping.save=Salva mappatura dialog.textures_mapping.model_texture_part=Parte della texture del modello\:
{0} dialog.textures_mapping.confirm_deletion_message=Sei sicuro di voler eliminare questa mappatura della texture?
Puoi ottenere texture rotte se la mappatura è ancora in uso\! @@ -541,6 +560,7 @@ dialog.variables.variable_name=Nome della variabile\: dialog.variables.variable_type=Tipo della variabile\: dialog.variables.variable_scope=Scopo della variabile\: dialog.variables.new_title=Nuova variabile +workspace.loading=Caricamento workspace... workspace.elements.list.locked=Bloccato workspace.elements.folders.add_tooltip=Aggiungi una nuova cartella nella cartella corrente workspace.elements.folders.up_tooltip=Torna alla cartella principale @@ -551,6 +571,7 @@ workspace.elements.folders.add.error_letters=Il nome della cartella può contene workspace.elements.folders.add.error_exists=Esiste già una cartella con questo nome. workspace.elements.folders.rename.title=Rinomina cartella workspace.elements.folders.rename.message=Inserisci il nuovo nome della cartella\: +workspace.elements.list.special.item={0}
Tipo\: {1} workspace.elements.list.folder=Cartella workspace.elements.list.notlocked=Non bloccato workspace.elements.list.compiles=Compilazione @@ -578,7 +599,7 @@ workspace.elements.list.filter_all=Visualizza tutto workspace.elements.list.filter_locked=Elementi bloccati workspace.elements.list.filter_witherrors=Elementi con errori di compilazione workspace.elements.list.ascending=Ascendente -workspace.category.mod_elements=Elementi della mod +workspace.category.mod_elements=Elementi mod workspace.category.resources=Risorse workspace.category.variables=Variabili workspace.category.localization=Localizzazione @@ -595,14 +616,18 @@ workspace.elements.list.edit.delete=Cancella workspace.elements.list.edit.duplicate=Duplica l elemento della mod... workspace.elements.list.edit.code=Apri l elemento della mod nell editor di codice workspace.elements.list.edit.lock=Blocca/sblocca l elemento -workspace.elements.list.edit.id=Modifica l ID dell elemento... +workspace.elements.list.edit.id=Modifica i nomi del registro... +workspace.elements.list.edit.usages.tags=La lista degli elementi selezionati contiene elementi mod tag. I tag

con gli stessi nomi del registro di sistema possono anche essere definiti da altre mode potrebbero essere scarsamente riferiti.
Pertanto la ricerca di questi elementi non è possibile. +workspace.elements.list.edit.usages.tags.title=Utilizzi tag workspace.elements.list.edit.add.folder=Crea una nuova cartella... workspace.elements.list.edit.rename.folder=Rinomina la cartella selezionata... -workspace.elements.confirm_delete_message=Sei sicuro di voler eliminare gli elementi selezionati ({0})?

Se hai usato gli elementi selezionati in altri elementi della mod (come ricette, eventi, schede della creativa, ...) devi
eliminare anche gli elementi che dipendono da questi\! Altrimenti otterrai errori di costruzione.

Gli elementi nelle cartelle e sotto-cartelle eliminate saranno spostati nella cartella genitore +workspace.elements.confirm_delete_msg_suffix=Gli elementi e le sottocartelle nella cartella eliminata verranno spostati nella cartella superiore. workspace.elements.delete.tooltip=Elimina elemento della mod selezionato workspace.elements.edit_code.tooltip=Modifica elemento della mod selezionato workspace.elements.lock_code_tooltip=Blocca/sblocca il codice dell'elemento
Quando blocchi il codice, MCreator non lo cambierà più, quindi l'elemento sarà
modificabile dalla vista del codice e sarà preservato anche cambiando spazio di lavoro.
Usare questo strumento solo se si è intenzionati a modificare manualmente il codice e si è consapevoli delle conseguenze
di bloccare il codice di un elemento\! -workspace.elements.edit_registry_names.tooltip=Modifica ID dell'elemento e nome di registro +workspace.elements.edit_registry_names.not_possible_message=Non è possibile utilizzare questo strumento per modificare i nomi del registro di sistema di questo tipo di elemento. +workspace.elements.edit_registry_names.not_possible_title=Impossibile modificare il nome del registro +workspace.elements.edit_registry_names.tooltip=Modifica i nomi del registro workspace.elements.empty.tip=Premi %1 per aggiungere elementi della mod workspace.elements.lock_modelement_message=Stai provando a bloccare/sbloccare il codice dell'elemento\!

Quando il codice è bloccato, MCreator non cambierà il codice sorgente, ma questo significa
che aggiornando MCreator, le correzioni dei bug e gli aggiornamenti della versione di Minecraft non saranno
applicate agli elementi bloccati.

Gli elementi della mod bloccati ora e selezionati saranno sbloccati.
Questo significa che ogni codice personalizzato per questo elemento della mod sarà sovrascritto da MCreator.

Sei pregato di leggere la pagina della wiki sul sito web di MCreator sul blocco del codice prima di usare quest'azione. workspace.elements.lock_modelement_confirm=Bloccare/sbloccare il codice dell'elemento? @@ -676,8 +701,8 @@ trigger.entity_travels_to_dimension=Entità si reca in una dimensione trigger.entity_uses_totem=Entità utilizza un totem trigger.explosion_occurs=Si verifica un'esplosione trigger.farmland_trampled=Terreno agricoli calpestati -trigger.gem_dropped=Oggetto viene gettato -trigger.gem_expired=Oggetto gettato scade +trigger.gem_dropped=L'oggetto è stato lasciato +trigger.gem_expired=L'oggetto lasciato scade trigger.item_crafted=Oggetto viene fabbricato trigger.item_destroyed=Oggetto viene consumato trigger.item_smelted=Oggetto viene fuso @@ -730,6 +755,7 @@ blockly.category.guimanagement=Slot & GUI blockly.category.worldprocedures=Procedure mondo blockly.category.worlddata=Dati blockly.category.worldmanagement=Azioni +blockly.category.scoreboard=Tabellone segnapunti blockly.category.basictasks=Compiti di base blockly.category.combattasks=Compiti di combattimento blockly.category.movementtasks=Compiti movimento @@ -867,11 +893,18 @@ blockly.block.entity_allow_flying=Permetti a %2 di volare se %1, altrimenti no blockly.block.entity_armor_value=Valore dell'armatura di %1 blockly.block.entity_canusecommand=%2 ha il livello di permesso per i comandi pari a %1 blockly.block.entity_check_creature_type=%1 è di tipo di creatura %2 +blockly.block.entity_check_main_hand=È %1 %2-in mano blockly.block.entity_checkgamemode=È %1 in modalità di gioco %2 blockly.block.entity_clear_inventory=Svuota l'inventario di %1 blockly.block.entity_clearpotions=Rimuovi tutti gli effetti di pozioni da %1 blockly.block.entity_close_gui=Chiudi tutte le GUI aperte a %1 blockly.block.entity_create=%1 istanza entità statica di tipo %2 (no spawing) +blockly.block.entity_data_logic_get=Per l'entità personalizzata %1 di tipo %2 ottenere il valore del parametro dati logici %3 +blockly.block.entity_data_logic_set=Per l'entità personalizzata %1 di tipo %2 impostare il valore del parametro dati logici %3 a %4 +blockly.block.entity_data_integer_get=Per l'entità personalizzata %1 di tipo %2 ottenere il valore intero del parametro %3 +blockly.block.entity_data_integer_set=Per l'entità personalizzata %1 di tipo %2 Imposta il valore del parametro dati intero %3 a %4 +blockly.block.entity_data_string_get=Per l'entità personalizzata %1 di tipo %2 ottieni il valore del parametro dati stringa %3 +blockly.block.entity_data_string_set=Per l'entità personalizzata %1 di tipo %2 imposta il valore del parametro dati stringa %3 a %4 blockly.block.entity_deal_custom_damage=Infliggi %1 di danno personalizzato a %2, localizzato come death.attack.(.player/.item.%3) blockly.block.entity_despawn=Despawna %1 %2 blockly.block.entity_dimension_id=ID della dimensione in cui si trova %1 @@ -886,10 +919,9 @@ blockly.block.entity_get_armor_slot_item=Oggetto nello slot di armatura %1 di %2 blockly.block.entity_get_controlling_passenger=%2 Ottieni il passeggero che controlla %1 blockly.block.entity_get_first_passenger=%2 Ottieni il primo passeggero di %1 blockly.block.entity_get_fire_ticks=Ottieni i tick rimanenti in fiamme di %1 -blockly.block.entity_get_fly_speed=Ottieni la velocità di volo di %1 blockly.block.entity_get_oxygen=Ottieni ossigeno di %1 blockly.block.entity_get_percent_frozen=Ottieni la percentuale di congelamento di %1 -blockly.block.entity_get_root_vehicle=Ottieni l'entità più bassa su cui %1 sta cavalcando, o se non sta cavalcando nulla +blockly.block.entity_get_root_vehicle=Prendi l'entità più in basso che %1 sta cavalcando, o se stesso se non sta cavalcando nulla blockly.block.entity_get_saturation=Livello di saturazione di %1 blockly.block.entity_get_scoreboard_score=Valore dello scoreboard %2 per %1 blockly.block.entity_get_shootpower=Potenza di fuoco di %1 se è un proiettile @@ -898,8 +930,11 @@ blockly.block.entity_get_spawn_x=Ottieni la coordinata X di spawn di %1 per il s blockly.block.entity_get_spawn_y=Ottieni la coordinata Y di spawn di %1 per il suo mondo corrente %2 blockly.block.entity_get_spawn_z=Ottieni la coordinata Z di spawn di %1 per il suo mondo corrente %2 blockly.block.entity_get_stepheight=Ottieni l'altezza del passo di %1 +blockly.block.entity_get_use_item=Ottieni l'oggetto che %1 sta utilizzando +blockly.block.entity_get_use_item_ticks=Ottieni il numero di ticks per cui l'oggetto è stato utilizzato da %1 blockly.block.entity_get_uuid=Ottieni UUID di %1 -blockly.block.entity_get_walk_speed=Ottieni velocità di marcia di %1 +blockly.block.entity_get_walk_speed=Ottieni il parametro base della velocità di camminata di %1 +blockly.block.entity_get_fly_speed=Ottieni il parametro base della velocità di volo di %1 blockly.block.entity_getowner=%2 Padrone di %1 se addomesticato blockly.block.entity_getridingentity=%2 Entità cavalcata da %1 blockly.block.entity_gettargetentity=%2 Entità bersaglio degli attacchi di %1 @@ -1013,9 +1048,9 @@ blockly.block.entity_submerged_height=Altezza da sommerso di %1 blockly.block.entity_swing_mainhand=Fai ruotare la mano principale di %1 blockly.block.entity_swing_offhand=Fai ruotare la mano secondaria di %1 blockly.block.entity_switch_dimension=Cambia la dimensione di %1 in %2 -blockly.block.entity_vel_x=Velocità X di %1 %2 -blockly.block.entity_vel_y=Velocità Y di %1 %2 -blockly.block.entity_vel_z=Velocità Z di %1 %2 +blockly.block.entity_vel_x=Movimento delta X di %1 %2 +blockly.block.entity_vel_y=Movimento delta Y di %1 %2 +blockly.block.entity_vel_z=Movimento delta Z di %1 %2 blockly.block.entity_xplevel=Livello di esperienza di %1 blockly.block.entity_xp_until_next_level=Ottieni la quantità di XP necessaria di %1 per salire di livello blockly.block.execute_command=Esegui comando /%1 in x\: %2 y\: %3 z\: %4 %5 @@ -1052,9 +1087,11 @@ blockly.block.item_cooldown_for=Metti in cooldown %3 per %1 tick a %2 blockly.block.item_damage=Infliggi %1 di danno a %2 blockly.block.item_enchanted_with_xp=%1 incantato con %2 livelli XP, incantesimi tesoro\: %3 blockly.block.item_fuel_power=Potenza come combustibile di %1 +blockly.block.item_get_cooldown=Ottieni la percentuale rimanente di ricarica di %2 per %1 blockly.block.item_get_damage=Danno di %1 blockly.block.item_get_enhancement=Ottieni il livello d'incantesimo %2 di %1 blockly.block.item_get_max_damage=Durabilità di %1 +blockly.block.item_is_cooldown=È %2 in ricarica per %1 blockly.block.item_is_enchantable=%1 può essere incantato blockly.block.item_is_enchanted=%1 è incantato blockly.block.item_istype=È %1 un tipo di item %2 @@ -1097,7 +1134,8 @@ blockly.block.math_random_int_between=Intero casuale compreso tra min\: %1 e max blockly.block.math_random_number_between=Numero casuale compreso tra min\: %1 e max\: %2 blockly.block.mcitem_to_block=Converti %2 %1 in %3 o ARIA se la conversione fallisce blockly.block.move_entity=Imposta la posizione di %4 su x\: %1 y\: %2 z\: %3 -blockly.block.play_sound=Riproduci %6 a x\: %1 y %2 z\: %3 livello\: %4 picco\: %5 categoria\: %7 +blockly.block.place_schematic=Posiziona il file NBT della struttura %6 %7 in x\: %1 y\: %2 z\: %3 con rotazione\: %4 mirror\: %5 %8 +blockly.block.play_sound=Riproduci suono %6 a x\: %1 y %2 z\: %3 livello\: %4 picco\: %5 categoria\: %7 blockly.block.projectile_shoot_from_entity=Spara %1 dall'entità\: %2 con velocità\: %3 imprecisione\: %4 %5 blockly.block.projectile_shoot_from_pos=Spara %1 da x\: %2 y\: %3 z\: %4 con direzione dx\: %5 dy\: %6 dz\: %7 velocità\: %8 imprecisione\: %9 %10 blockly.block.projectiles_arrow=Freccia di tipo %1 con danni\: %2 respinta\: %3 perforazione\: %4 tiratore\: %5 fuoco\: %6 particelle\: %7 tipo di raccolta\: %8 @@ -1110,11 +1148,19 @@ blockly.block.set_time=Imposta il tempo su %1 %2 blockly.block.spawn_entity=Genera entità\: %4 a x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Genera entità\: %6 a x\: %1 y\: %2 z\: %3 con imbardata\: %4 altezza\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Genera l'entità\: %9 a x\: %1 y\: %2 z\: %3 con imbardata\: %4 altezza\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Genera oggetto %1 a x\: %2 y\: %3 z\: %4 con tempo di attesa per raccoglierlo di\: %5 scomparsa in\: %6 %7 +blockly.block.spawn_gem=Genera item per terra %1 alle x\: %2 y\: %3 z\: %4 ritardo di raccolta\: %5 despawn\: %6 %7 blockly.block.spawn_particle=Genera una singola particella a x\: %1 y\: %2 z\: %3 con vx\: %4 vy\: %5 vz\: %6 tipo\: %7 blockly.block.spawn_particle_multi=Genera %8 particelle sul lato server a x\: %1 y\: %2 z\: %3 nell'area dx\: %4 dy\: %5 dz\: %6 con velocità %7 tipo\: %9 %10 blockly.block.spawn_xporb=Genera sfera di esperienza in x\: %2 y\: %3 z\: %4 di punti esperienza %1 %5 blockly.block.strike_lightning=Colpisci con un fulmine a x\: %1 y\: %2 z\: %3, solo effetto se %4 %5 +blockly.block.team_add_entity=Aggiungi entità %2 al team %1 +blockly.block.team_create_new=Crea un nuovo team con il nome %1 +blockly.block.team_delete=Elimina team con il nome %1 +blockly.block.team_get_entity_team=Ottieni il team dell'entità %1 +blockly.block.team_get_friendlyfire=È un fuoco amico per la squadra con il nome %1 abilitato +blockly.block.team_remove_entity=Rimuovi entità %2 dal team %1 +blockly.block.team_set_friendlyfire=Imposta un fuoco amico per la squadra con il nome %1 a %2 +blockly.block.team_set_friendlyfire.tooltip=Il fuoco amico funziona solo per i giocatori blockly.block.wait=Aspetta %1 %2 tick, poi sul lato server %3 esegui %4 blockly.block.world_data_heightat=Ottieni l'altezza di %3 a x\: %1 z\: %2 blockly.block.world_data_biomeat=Il bioma è a x\: %1 y\: %2 z\: %3 tipo %4 @@ -1389,6 +1435,7 @@ blockly.block.damagesource_get_entity=%2 Ottieni l'entità che ha causato %1 blockly.block.damagesource_get_exhaustion=Ottieni il valore di esaurimento di %1 blockly.block.damagesource_is_cause_creative=È %1 causato da un giocatore in modalità creativa blockly.block.damagesource_is_indirect=È %1 indiretto +blockly.block.damagesource_is_tagged_in=Il tipo di %1 è contrassegnato nei tag di tipo danno come %2 blockly.block.damagesource_scales_with_difficulty=Sta %1 scalando con difficoltà blockly.block.direction_from_deps=Trigger direzione/faccia blockly.block.direction_unspecified=Qualsiasi direzione @@ -1476,6 +1523,12 @@ dialog.workspace.export_workspace.compressing=Comprimere lo spazio di lavoro dialog.workspace.export_workspace.title=Esportazione area di lavoro dialog.workspace.export_backup=Backup dell'area di lavoro action.workspace.regenerate_and_build=Rigenera il codice ed esegui una build +tag.type.items=Oggetti +tag.type.blocks=Blocchi +tag.type.entities=Entità +tag.type.functions=Funzioni +tag.type.biomes=Biomi +tag.type.damage_types=Tipi di danno modelement.unknown=Sconosciuto modelement.achievement=Progresso modelement.armor=Armatura @@ -1483,6 +1536,7 @@ modelement.biome=Bioma modelement.block=Blocco modelement.code=Elemento personalizzato modelement.command=Comando +modelement.damagetype=Tipo di danno modelement.dimension=Dimensione modelement.enchantment=Incantesimo modelement.gamerule=Regola di gioco @@ -1520,6 +1574,7 @@ modelement.biome.description=Un bioma è un'area specifica con una sua generazio modelement.block.description=Un blocco è l'unità base di Minecraft. È un oggetto 3D che può essere piazzato nel mondo. modelement.code.description=Un elemento personalizzato è definito tramite codice personalizzato nell'editor di codice. modelement.command.description=Un comando è un insieme di testi che effettua un azione quando un giocatore lo scrive in chat. +modelement.damagetype.description=Il tipo di danno determina come i danno devono essere applicati alle entità. modelement.dimension.description=Una dimensione è un mondo che viene generato, con caratteristiche proprie e che può avere un portale. modelement.enchantment.description=Un incantesimo è un modificatore che aggiunge abilità speciali agli oggetti su cui è applicato. modelement.gamerule.description=Una regola di gioco è un parametro personalizzabile per un mondo specifico @@ -1653,6 +1708,8 @@ preferences.notifications.checkAndNotifyForUpdates=Notificami su nuovi aggiornam preferences.notifications.checkAndNotifyForUpdates.description=Deseleziona questa casella se non vuoi essere avvisato di nuovi importanti aggiornamenti con una finestra di dialogo popup.
Anche se questa opzione non è selezionata, una piccola notifica verrà mostrata all'avvio se gli aggiornamenti sono disponibili. preferences.notifications.checkAndNotifyForPatches=Notificami sui piccoli aggiornamenti all'apertura di MCreator preferences.notifications.checkAndNotifyForPatches.description=Deseleziona questa casella se non vuoi essere avvisato di nuovi importanti aggiornamenti con una finestra di dialogo popup.
Anche se questa opzione non è selezionata, una piccola notifica verrà mostrata all'avvio se gli aggiornamenti sono disponibili. +preferences.notifications.showWebsiteNewsNotifications=Mostra notifiche delle news del sito all'avvio +preferences.notifications.showWebsiteNewsNotifications.description=Se abilitata, il selettore workspace mostrerà notifiche sulle nuove notizie del sito web all'avvio di MCreator preferences.notifications.checkAndNotifyForPluginUpdates=Informami sugli aggiornamenti dei plugin della community preferences.notifications.checkAndNotifyForPluginUpdates.description=Deseleziona questa casella se non vuoi essere avvisato degli aggiornamenti dei plugin di terze parti.
Tieni presente che nel caso in cui i server di aggiornamento di terze parti siano bassi o lenti, questa opzione può rallentare l'avvio di MCreator e che questa opzione consente a
plugin di terze parti su cui non abbiamo alcun controllo di accedere ai loro server di aggiornamento durante l'avvio di MCreator. preferences.themes.select_theme=Seleziona il tema da usare @@ -2060,6 +2117,15 @@ elementgui.command.type=Tipo\: elementgui.command.permission_level=Livello del permesso di esecuzione\:
Il livello minimo per poter eseguire il comando elementgui.command.warning.empty_string=Il comando non può essere una stringa vuota elementgui.command.arguments=Generatore di parametri di comando e azioni +elementgui.damagetype.damage_properties=Proprietà del danno +elementgui.damagetype.exhaustion=Quantità di esaurimento\:
Il valore predefinito è 0.1 +elementgui.damagetype.scaling=I danni aumentato con la difficoltà? +elementgui.damagetype.effects=Effetto sonoro del danno\: +elementgui.damagetype.death_messages=Messaggi di morte +elementgui.damagetype.normal_death_message=Normale messaggio di morte\: +elementgui.damagetype.item_death_message=Messaggio di morte dell'oggetto\:
Mostra quando il giocatore viene ucciso da un'entità' con un oggetto chiamato +elementgui.damagetype.player_death_message=Messaggio di morte assistito\:
Mostrato quando il giocatore muore mentre fugge da un entità +elementgui.damagetype.error_empty_death_message=Il messaggio di morte non può essere vuoto elementgui.dimension.can_player_respawn=Il giocatore può rinascere qui elementgui.dimension.has_fog=Attiva la nebbia densa elementgui.dimension.is_dark=Disattiva la fonte di luce ambientale @@ -2080,7 +2146,7 @@ elementgui.dimension.biomes_in=Biomi in questa dimensione\: elementgui.dimension.main_filler_block=Blocco principale\:
Normale, Nether, End elementgui.dimension.fluid_block=Fluido\:
Normale, Nether, End elementgui.dimension.sleep_result=Risultato del tentativo di dormire\: -elementgui.dimension.fog_air_color=Colore del cielo / nebbia\:
Lasciare DEFAULT per utilizzare i colori tipici di Minecraft +elementgui.dimension.fog_air_color=Colore del cielo / nebbia\:
Lascia DEFAULT per la gestione predefinita elementgui.dimension.enable_dimension_portal=Attiva il portale per la dimensione\: elementgui.dimension.portal_frame_block=Blocco della cornice del portale\: elementgui.dimension.portal_particles=Particelle del blocco del portale\: @@ -2104,8 +2170,8 @@ elementgui.enchantment.curse=Questo incantesimo è una maledizione? elementgui.enchantment.allowed_on_books=Questo incantesimo può essere applicato sui libri? elementgui.enchantment.can_generate_in_loot_tables=Questo incanto può essere generato nei bottini? elementgui.enchantment.can_villager_trade=Questo incanto può apparire negli scambi dei villici? -elementgui.enchantment.compatible_enchantments=Può essere combinato con\:
Lascia vuoto per permettere combinazioni con qualsiasi incantesimo -elementgui.enchantment.can_apply_to=Può essere applicato su\:
Lascia vuoto per poter applicare su tutti gli oggetti applicabili +elementgui.enchantment.compatible_enchantments=Può essere combinato con\:
Lascia vuoto (funziona in modalità include ed esclude) per consentire la combinazione con qualsiasi incantesimo +elementgui.enchantment.can_apply_to=Può essere applicato a\:
Lascia vuoto (funziona in modalità include e esclude) per consentire l'applicazione a tutti gli oggetti applicabili elementgui.enchantment.needs_name=L'incantesimo deve avere un nome elementgui.gamerule.name=Nome macchina\: elementgui.gamerule.display_name=Descrizione della regola di gioco\:
La descrizione sarà usata per la schermata di impostazione delle regole di gioco @@ -2258,9 +2324,11 @@ elementgui.keybind.key_binding_category=Categoria di traduzione del tasto\: elementgui.keybind.key_procedure_triggers=Attivatori delle procedure del tasto elementgui.keybind.error_key_needs_name=Il tasto necessità di un nome elementgui.keybind.error_key_category_needs_name=Categoria del nome del tasto +elementgui.living_entity.visual_scale=Scala visiva del modello\: +elementgui.living_entity.bounding_box_scale=Scala della scatola di delimitazione\: elementgui.living_entity.condition_solid_bounding_box=Il riquadro di delimitazione è solido? elementgui.living_entity.disable_collisions=Disabilita la possibilità delle entità di spingere (collisioni) -elementgui.living_entity.has_ai=Abilita l'AI
Quando usi un'AI, assicurati di avere alcuni compiti dell'AI definiti qua sotto +elementgui.living_entity.has_ai=Abilita AI
Assicurati di avere alcune attività AI definite di seguito elementgui.living_entity.immune_fire=Fuoco elementgui.living_entity.immune_arrows=Frecce elementgui.living_entity.immune_fall_damage=Danno da caduta @@ -2274,14 +2342,17 @@ elementgui.living_entity.immune_trident=Tridenti elementgui.living_entity.immune_anvil=Incudini elementgui.living_entity.immune_wither=Wither elementgui.living_entity.immune_dragon_breath=Respiro di drago +elementgui.living_entity.is_water_mob=È un'entità acquatica +elementgui.living_entity.condition_can_breathe_underwater=Puoi respirare sott'acqua +elementgui.living_entity.condition_fluids_can_push=Viene spinto dai fluidi elementgui.living_entity.is_flying_mob=L'entità è volante (non è affetta dalla gravità, non subisce danno da caduta) elementgui.living_entity.spawn_dungeons=Genera nei dungeon elementgui.living_entity.is_rideable=Cavalcabile elementgui.living_entity.control_forward=Controllo del movimento in avanti elementgui.living_entity.control_strafe=Controllo del movimento in avanti -elementgui.living_entity.is_breedable=Fai questa entità tipo animale, oggetto per nutrirlo\:
La base dell'entità e il tipo di comportamento verranno ignorati se selezionati +elementgui.living_entity.is_breedable=Rendi questa entità tipo animale, oggetto per nutrirlo\:
La base dell'entità e il tipo di comportamento verranno ignorati elementgui.living_entity.is_tameable=Si può addomesticare -elementgui.living_entity.is_ranged=EntitàFai in modo che l'entità esegua attacchi a distanza con oggetto, intervallo di attacco e raggio\:
Aggiungi almeno un'attività Agisci in modo aggressivo contro Obiettivi dell'AI per definire i bersagli degli attacchi.
Se è selezionato "Oggetto predefinito", seleziona l'oggetto proiettile o lo mantiene vuoto per usare la freccia +elementgui.living_entity.is_ranged=Abilita gli attacchi a distanza con oggetto, intervallo di attacco e raggio\:
Aggiungi almeno un Agisci aggressivamente contro il compito AI per definire i bersagli di attacco.
Se è selezionato "Elemento predefinito", seleziona l'elemento proiettile o tieni vuoto per usare la freccia elementgui.living_entity.event_struck_by_lightning=Quando viene colpita da un fulmine elementgui.living_entity.event_mob_falls=Quando l'entità cade elementgui.living_entity.event_mob_dies=Quando l'entità muore @@ -2297,6 +2368,7 @@ elementgui.living_entity.condition_is_shaking=Il modello dell'entità trema? elementgui.living_entity.behaviour=Caratteristiche del comportamento (Mob è aggressivo, Creatura è passivo)\: elementgui.living_entity.creature_type=Tipo di creatura (definisce alcuni attributi speciali dell'entità)\: elementgui.living_entity.drop_health_xp_amount=Drop facoltativi, valore della salute, quantità di esperienza\: +elementgui.living_entity.model_layers=Elenco dei livelli del modello elementgui.living_entity.follow_range_tracking_range=Segui intervallo, intervallo di rilevamento\: elementgui.living_entity.attack_strenght_armor_value_knockback=Forza d'attacco, protezione dell'armatura, respingimento, resistenza al respingimento\: elementgui.living_entity.movement_speed_step_height=Velocità di movimento, altezza del passo\: @@ -2305,11 +2377,16 @@ elementgui.living_entity.is_immune_to=Entità immune a\: elementgui.living_entity.ridable=Seleziona per rendere l'entità cavalcabile dal giocatore
Puoi abilitare o meno il controllo del movimento dell'entità elementgui.living_entity.water_mob=Seleziona se vuoi che questa entità sia un'entità acquatica\:
ATTENZIONE\: Devi comunque inserire dei compiti dell'AI per far utilizzare questa proprietà all'entità elementgui.living_entity.flying_mob=Seleziona se questa è un'entità volante\:
ATTENZIONE\: Devi comunque definire dei compiti delle AI adeguati per usare questa proprietà +elementgui.living_entity.add_model_layer=Inserisci un nuovo livello al modello +elementgui.living_entity.layer_model=Modello\: +elementgui.living_entity.layer_texture=Texture\: +elementgui.living_entity.layer_should_glow=Rendi la texture luminosa +elementgui.living_entity.layer_display_condition=Condizione di visualizzazione +elementgui.living_entity.layer_needs_texture=Il livello del modello deve avere una texture elementgui.living_entity.name=Nome dell'entità\: elementgui.living_entity.entity_model=Modello dell'entità\:
Supportati\: JAVA elementgui.living_entity.entity_model_import=Clicca qui per importare la texture del modello dell'entità elementgui.living_entity.texture=Texture dell'entità\:
La texture necessita di essere giusta per il modello (e.g. la texture di un giocatore non è la texture di un mob bipede) -elementgui.living_entity.glow_texture=Texture luminosa dell'entità (opzionale)\:
La texture luminosa necessita di essere giusta per il modello, la luminosità dell'immagine determina la luminosità elementgui.living_entity.bounding_box=Hitbox del modello entità\:
Larghezza/Profondità, Altezza, Grandezza dell'Ombra, Altezza dell'Entità che lo cavalca elementgui.living_entity.spawn_egg_options=Opzioni di spawn dell'uovo\:
Abilita, colore base, colore dei puntini, tap creativa elementgui.living_entity.mob_boss=Seleziona qui se vuoi che la tua entità sia un boss con la barra della vita\: @@ -2331,14 +2408,24 @@ elementgui.living_entity.does_spawn_in_dungeons=Questa entità nasce nei dungeon elementgui.living_entity.spawn_general_condition=Condizioni di generazione personalizzate\:
Quando le condizioni di generazione personalizzate vengono usate, il tipo di condizioni di generazione viene sovrascritto
con esse, ma il tipo di raggruppamento e l'importanza di generazione no.
elementgui.living_entity.bind_to_gui=Lega una GUI a questa entità\:
Imposta su Vuoto per disabilitare l'inventario (probabilmente vuoi questo nella maggior parte dei casi)
elementgui.living_entity.inventory_size=Grandezza dell'inventario (numero di slot)\:
Imposta questo valore all'ID più alto degli slot nella gui + 1 +elementgui.living_entity.entity_data=Accessori per i dati dell'entità
Sincronizzati tra lato client e server +elementgui.living_entity.entity_data_entries=Dati inseriti +elementgui.living_entity.entity_data_entries.name=Nome\: +elementgui.living_entity.entity_data_entries.type=Tipo\: +elementgui.living_entity.entity_data_entries.default_value=Valore predefinito\: +elementgui.living_entity.entity_data_entries.add_entry=Aggiungi una nuova voce +elementgui.living_entity.entity_data_entries.add_entry.name=Nome della voce dati\: +elementgui.living_entity.entity_data_entries.add_entry.type=Tipo della voce dati\: +elementgui.living_entity.entity_data_entries.add_entry.title=Nuova voce dei dati elementgui.living_entity.error_entity_model_needs_texture=Il modello dell'entità necessita di una texture elementgui.living_entity.error_entity_needs_name=L'entità deve avere un nome elementgui.living_entity.page_visual=Visuale +elementgui.living_entity.page_model_layers=Strati del modello elementgui.living_entity.page_sound=Suono elementgui.living_entity.page_behaviour=Comportamento +elementgui.living_entity.page_entity_data=Dati sincronizzati elementgui.living_entity.page_ai_and_goals=IA e obiettivi elementgui.living_entity.page_spawning=Nascita -elementgui.loot_table.name=Loot table elementgui.loot_table.registry_name=Nome di registro del bottino\:
Usa un prefisso come blocco/ per specificare la categoria elementgui.loot_table.namespace=Namespace della loot table\:
Usa il namespace minecraft per modificare le loot table vanilla elementgui.loot_table.type=Tipo di loot table\: @@ -2511,7 +2598,7 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=La ricetta de elementgui.recipe.error_brewing_no_input_ingredient_and_result=La ricetta per la preparazione delle pozioni deve avere input, ingredienti e output definiti (l'aria non conta) elementgui.structuregen.event_structure_instance_generated=Alla generazione dell'istanza della struttura elementgui.structuregen.import_tooltip=Clicca qui per importare file NBT della struttura
Usa la sezione Strutture nella scheda dello spazio di lavoro per avere più opzioni. -elementgui.structuregen.select_tooltip=Struttura da generare\:
Per avere più opzioni di importazione della struttura, usa la sezione strutture nella scheda dello spazio di lavoro +elementgui.structuregen.select_tooltip=Struttura da generare\:
Per ulteriori opzioni d'importazione, utilizza la sezione strutture della scheda workspace elementgui.structuregen.ignore_blocks=Blocchi da ignorare per il posizionamento\: elementgui.structuregen.surface_detection_type=Tipo di rilevamento del suolo di riferimento\: elementgui.structuregen.terrain_adaptation=Tipo di adattamento del terreno\: @@ -2522,7 +2609,7 @@ elementgui.structuregen.separation_spacing=Distribuzione dei chunk della struttu elementgui.structuregen.separation=Separazione\: elementgui.structuregen.spacing=Spaziatura\: elementgui.structuregen.error_select_biomes=Seleziona almeno un bioma dove questa struttura possa generarsi -elementgui.structuregen.error_select_structure_spawn=È necessario selezionare una struttura che questo elemento genererà per procedere. +elementgui.structuregen.error_select_structure_spawn=È necessario selezionare una struttura da generare elementgui.tab.name=Nome della scheda creativa\: elementgui.tab.icon=Icona della scheda\: elementgui.tab.search_bar=Mostra la barra di ricerca\: @@ -2590,11 +2677,10 @@ workspace.resources.tab.structures=Strutture workspace.resources.tab.screenshots=Screenshot workspace.textures.new=Crea nuova texture workspace.textures.import=Importa texture -workspace.textures.edit_selected=Modifica la selezione... -workspace.textures.duplicate_selected=Duplica la selezione... -workspace.textures.delete_selected=Elimina la selezione -workspace.textures.export_selected=Esporta la selezione... -workspace.textures.confirm_deletion_message=Sei sicuro di voler eliminare questo file?
ATTENZIONE\: Se usi da qualche parte questo file, potresti avere texture buggate\! +workspace.textures.edit_selected=Modifica selezionati... +workspace.textures.duplicate_selected=Duplica selezionati... +workspace.textures.replace_selected=Sostituisci selezionato... +workspace.textures.export_selected=Esporta selezionati... workspace.textures.select_dupplicate_type=Seleziona il tipo di texture che vuoi duplicare\: workspace.textures.select_texture_type=Che tipo di texture è questo file? workspace.textures.category.block=Texture per blocchi\: @@ -2606,47 +2692,34 @@ workspace.textures.category.screen=Texture per schermi (avanzamenti, GUI, overla workspace.textures.category.armor=Texture per armature\: workspace.textures.category.other=Altre textures (dipinti, logo mod, ...)\: workspace.3dmodel.description={0}
Mappatura della texture\: {1} -workspace.3dmodels.edit_texture_mappings=Modifica mappature delle texture... +workspace.3dmodels.edit_texture_mappings=Modifica mappature texture... workspace.3dmodels.redefine_animations=Ridefinisci le animazioni del modello... -workspace.3dmodels.delete_selected=Elimina la selezione -workspace.3dmodels.delete_confirm_message=Sei sicuro di voler eliminare questo modello?
ATTENZIONE\: Se usi questo modello da qualche parte, potresti avere texture buggate
e qualche elemento della mod potrebbe non costruirsi\! -workspace.3dmodels.regenerating_code=Rigenerando il codice -workspace.3dmodels.regenerating_entity_code=Rigenerando il codice delle entità -workspace.3dmodels.rebuilding_workspace=Ricostruendo l area di lavoro workspace.3dmodels.animation_unsupported_title=Animazioni non supportate workspace.3dmodels.animation_unsupported_message=Questo modello non supporta le animazioni\! workspace.3dmodels.mappings_unsupported_title=Nessuna mappatura workspace.3dmodels.mappings_unsupported_message=Questo modello non supporta le mappature delle texture\! -workspace.sounds.confirm_deletion_message=Sei sicuro di voler eliminare questo suono?
ATTENZIONE\: Se usi questo suono da qualche parte, non funzionerà più\! -workspace.sounds.edit_selected=Modifica la selezione... +workspace.sounds.edit_selected=Modifica selezionati... workspace.sounds.play_selected=Riproduci quello selezionato -workspace.sounds.delete_selected=Elimina la selezione workspace.sounds.category=Categoria del suono\:{0} workspace.sounds.files=File del suono\: {0} workspace.sounds.subtitle_and_category=Sottotitolo\: {0},Categoria del suono\: {1} -workspace.screenshots.export_selected=Esporta la selezione... -workspace.screenshots.delete_selected=Elimina la selezione +workspace.screenshots.export_selected=Esporta selezionati... workspace.screenshots.action_complete=Azione completata workspace.screenshots.use_background_message=Gli screenshot selezionati saranno usati come possibili sfondi al prossimo lancio. -workspace.screenshots.use_as_background=Usa la selezione come sfondo di MCreator... -workspace.structure.confirm_deletion_message=Sei sicuro/a di voler eliminare le strutture selezionate?
NOTA\: se le hai usate da qualche parte, non saranno più generate\! +workspace.screenshots.use_as_background=Usa selezionato come sfondo per MCreator... workspace.variables.variable_name=Nome della variabile workspace.variables.variable_type=Tipo della variabile workspace.variables.variable_scope=Scope della variabile workspace.variables.initial_value=Valore iniziale workspace.variables.add_new=Aggiungi nuova variabile -workspace.variables.remove_selected=Rimuovi la selezione workspace.variables.help=Aiuto con le variabili workspace.variables.change_type=Sei sicuro di voler cambiare questa variabile?
Se questa variabile è in uso, questa azione potrebbe causare errori di compilazione.
Se lo hai appena creato, va benissimo cambiarlo. -workspace.variables.remove_variable_confirmation=Sei sicuro di voler rimuovere le variabili selezionate?
Se questa variabile è in uso, questa azione potrebbe causare errori di compilazione. workspace.localization.add_entry=Aggiungi voce di localizzazione -workspace.localization.remove_selected=Rimuovi la selezione workspace.localization.export_to_csv=Esporta la lingua corrente in CSV workspace.localization.import_csv=Importa CSV per la lingua corrente workspace.localization.key_name_title=Nome della chiave workspace.localization.key_name_message=Inserisci il nome della chiave per la tua voce di lingua personalizzata\: workspace.localization.confirm_delete_map=Sei sicuro/a di voler eliminare questa mappa di localizzazione? -workspace.localization.confirm_delete_entry=Sei sicuro/a di voler rimuovere le voci selezionate?
NOTA\: se sono ancora in uso, i nomi degli elementi legati ad esse non funzioneranno\! workspace.localization.export_translation=Esporta la traduzione workspace.localization.confirm_export=La traduzione predefinita (en_us) non può essere esportata\!
I testi in inglese sono definiti negli elementi della mod. workspace.localization.warning_export=Non puoi importare un CSV per la traduzione predefinita (en_us)\!
I testi in inglese sono definiti negli elementi della mod. @@ -2870,6 +2943,8 @@ dialog.list_field.biome_list_title=Seleziona i biomi dialog.list_field.biome_list_message=Seleziona i biomi che vorresti aggiungere all'elenco\: dialog.list_field.biome_default_feature_title=Seleziona le funzionalità predefinite del bioma dialog.list_field.biome_default_feature_message=Seleziona le funzionalità predefinite del bioma che vorresti aggiungere all'elenco\: +dialog.list_field.damage_type_list_title=Seleziona tipi di danno +dialog.list_field.damage_type_list_message=Seleziona i tipi di danno che desideri aggiungere all'elenco\: dialog.list_field.dimension_title=Seleziona le dimensioni dialog.list_field.dimension_message=Seleziona le dimensioni che vorresti aggiungere all'elenco\: dialog.list_field.enchantment_title=Seleziona gli incantamenti @@ -2887,6 +2962,7 @@ dialog.selector.damagesources.message=Seleziona un tipo di danno\: dialog.selector.dimension.message=Seleziona una dimensione\: dialog.selector.enchantments.message=Seleziona un incantesimo\: dialog.selector.entity.message=Seleziona un'entità\: +dialog.selector.entity_data.message=Per favore seleziona un parametro di dati\: dialog.selector.fluids.message=Seleziona un fluido\: dialog.selector.gamerules.message=Seleziona una regola del gioco\: dialog.selector.gui.message=Seleziona una GUI\: @@ -2942,6 +3018,17 @@ dialog.tools.inject_tags.tag.biomes.minecraft.is_river=Contrassegna i biomi di t dialog.tools.inject_tags.tag.biomes.minecraft.is_hill=Contrassegna i biomi di tipo collinare. dialog.tools.inject_tags.tag.biomes.minecraft.is_forest=Contrassegna i biomi di tipo forestale. dialog.tools.inject_tags.tag.biomes.minecraft.is_savanna=Contrassegna i biomi di tipo savana. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_drowning=I tipi di danno in questo gruppo di tag sono influenzati dall'effetto di respirazione acquatia e dalla game rule "drowningDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_explosion=I tipi di danni in questo gruppo di tag sono influenzati dall'incantesimo protezione protezione dalle esplosioni. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fall=I tipi di danno in questo gruppo di tag sono influenzati dall'effetto caduta lenta, dall'incantesimo atterraggio morbido e dalla game rule "fallDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fire=I tipi di danno in questo gruppo di tag sono influenzati dall'effetto resistenza al fuoco, dall'incantesimo protezione dal fuoco e dalla game rule "fireDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_freezing=I tipi di danno in questo gruppo di tag sono influenzati dall'armatura di pelle e dalla game rule "freezeDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_projectile=I tipi di danno in questo gruppo di tag sono influenzati dall'incantesimo protezione dai proiettili. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_armor=I tipi di danno in questo gruppo di tag non sono ridotti da armature o scudi. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_cooldown=I tipi di danno in questo gruppo di tag ignorano i frame d'invulnerabilità. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_effects=I tipi di danno in questo gruppo di tag ignorano tutte le riduzioni di danno come effetti di protezione, armature o incantesimi. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_enchantments=I tipi di danno in questo gruppo di tag ignorano gli incantesimi delle armature (come protezione). +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_shield=I tipi di danno in questo gruppo di tag non possono essere bloccati dagli scudi. workspace_file_browser.title=Navigatore dei file dell'area di lavoro workspace_file_browser.search=Cerca per il nome del file workspace_file_browser.open=Apri @@ -3034,6 +3121,18 @@ action.image_editor.save=Salva action.image_editor.save.tooltip=Fai clic qui per salvare le modifiche al file esistente. Viene aperta una finestra di dialogo "Salva con nome" se si tratta di un nuovo file. action.image_editor.redo=Ripeti le modifiche action.image_editor.redo.tooltip=Fare clic su questo per ripetere le modifiche precedenti +action.image_editor.selection.clear=Cancella selezione +action.image_editor.selection.clear.tooltip=Clicca per cancellare la selezione +action.image_editor.copy=Copia +action.image_editor.copy.tooltip=Clicca per copiare l'area selezionata negli appunti +action.image_editor.copy_all=Copia tutto +action.image_editor.copy_all.tooltip=Clicca per copiare l'intera immagine negli appunti +action.image_editor.cut=Taglia +action.image_editor.cut.tooltip=Clicca per tagliare l'area selezionata negli appunti +action.image_editor.paste=Incolla +action.image_editor.paste.tooltip=Clicca per incollare i contenuti degli appunti +action.image_editor.delete=Elimina +action.image_editor.delete.tooltip=Clicca per eliminare l'area selezionata action.ide.save=Salva il codice action.ide.save.result=Codice salvato action.ide.save.tooltip=Fare clic su questo per salvare il codice nell'editor di codice corrente @@ -3044,11 +3143,13 @@ common.add=Aggiungi common.close=Chiudi common.cancel=Annulla common.confirmation=Conferma +common.delete_selected=Elimina selezionato common.dependency={0}, tipo\: {1} common.mod_element_name=Nome elemento della mod common.namespace=Spazio del nome common.name_already_exists=Questo nome è già in uso common.not_applicable=N/A +common.search_usages=Cerca utilizzo nello spazio di lavoro common.warning=Attenzione components.collapsible_panel.expand=Fare clic per espandere components.collapsible_panel.collapse=Fare clic per comprimere @@ -3181,4 +3282,7 @@ notification.common.more_info=Ulteriori informazioni notification.update_available.msg=È disponibile una nuova versione di MCreator.

Versione installata\: {0}
Nuova versione\: {1} notification.patch_available.msg=È disponibile una versione più recente di {0}.

Versione installata\: {0}.{1}
Nuova versione\: {0}.{2} notification.plugin_updates.msg=Sono disponibili alcuni aggiornamenti del plug-in +notification.news.title=Notizie dal sito\: {0} +notification.news.read_more=Leggi di più in proposito +notification.news.hide=Nascondi questa notifica simple_list_entry.remove=Rimuovi questa voce \ No newline at end of file diff --git a/plugins/mcreator-localization/lang/texts_ja_JP.properties b/plugins/mcreator-localization/lang/texts_ja_JP.properties index 6685d776cbd..7863b59a726 100644 --- a/plugins/mcreator-localization/lang/texts_ja_JP.properties +++ b/plugins/mcreator-localization/lang/texts_ja_JP.properties @@ -79,10 +79,10 @@ dialog.animation_maker.settings=アニメーション設定 dialog.animation_maker.next_frame=次のフレーム dialog.animation_maker.previous_frame=前のフレーム dialog.animation_maker.animation_timeline=アニメーションのタイムライン -dialog.animation_maker.add_frames=フレーム(ら) を追加 -dialog.animation_maker.add_frames_from_template=テンプレートからフレームを追加... -dialog.animation_maker.add_frames_from_strip=アニメーションストリップからフレームを追加... -dialog.animation_maker.add_frames_from_gif=GIFファイルからフレームを追加 +dialog.animation_maker.add_frames=フレームを追加 +dialog.animation_maker.add_frames_from_template=テンプレートからフレームを追加 +dialog.animation_maker.add_frames_from_strip=アニメーションストリップからフレームを追加 +dialog.animation_maker.add_frames_from_gif=GIFからフレームを追加 dialog.animation_maker.gif_importing=GIFのインポート dialog.animation_maker.gif_reading=GIFの読み込み中 dialog.animation_maker.gif_processing=GIFの処理中 @@ -119,9 +119,8 @@ dialog.cache_cleanup.title=Gradle キャッシュの消去 dialog.cache_cleanup.progress.stopping_daemons=実行中のGradleデーモンを停止しています dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Gradle キャッシュフォルダを消去中 dialog.cache_cleanup.progress.build_task=Gradle ビルドタスクを実行中です -dialog.code_error.compilation_desc= メインmodファイルが正しくコンパイルされませんでした。

これは通常、ビルド中のmodコードの不整合が原因です。
modのコード全体を再生成することで、この問題を解決できます。

mod要素またはmodベースファイルをロックしている場合は、このエラーも発生する可能性があります。

をクリックすると、コードを再生成ボタンをクリックして、このアクションを続行します。
+dialog.code_error.compilation_desc=単体または複数のメインModファイルが正しくコンパイルされませんでした。

この問題は主にビルド中のModコードの不整合が原因で発生します。
MCreatorプロジェクト内の全てのコードを再生成することで解決できます。

もし、ロックされているMod要素またはModのベースになるファイルがあれば、それも原因となります。


コードを再構成を押して、このアクションを続行します。
dialog.code_error.compilation_title=メインのMODファイルのコンパイルエラー -dialog.code_error.compilation_list=ワークスペースに正しくコンパイルされないmod要素が含まれています。

最後に追加または編集したmod要素が原因である可能性があります。 ビルドエラーの原因となるmod要素の設定を変更してみてください(このような要素は以下にリストされています)。

この問題を解決できない場合は、ワークスペースを共有可能なZIPファイルにエクスポートしてください。 ファイルメニューから、GitHubのIssue Trackerで送信してください。

コンパイルエラーの原因となるmod要素のリスト (最大10個の要素にトリミング):

dialog.code_error.regenerate_code=コードを再生成 dialog.code_error.ignore_error=エラーを無視 dialog.code_error.show_in_workspace=ワークスペースに表示 @@ -174,6 +173,7 @@ dialog.gui.model_rotation_x=モデルのヨー方向の回転角度 dialog.gui.model_follow_mouse=マウスの動きに従って回転させる dialog.gui.add_tooltip=ツールチップエディター dialog.gui.tooltip_display_condition=ツールチップの表示条件 +dialog.gui.anchor=固定先: dialog.gui.anchor.top_left=左上 dialog.gui.anchor.top_center=中央上 dialog.gui.anchor.top_right=右上 @@ -360,6 +360,7 @@ dialog.item_selector.enter_tag_name.blocks=以下にブロックタグ名 dialog.item_selector.enter_tag_name.items=以下にアイテムタグ名を入力します (テンプレートの一覧を確認してください)\:
dialog.item_selector.enter_tag_name.biomes=以下にバイオームタグ名を入力します (テンプレートの一覧を確認してください)\:
dialog.item_selector.enter_tag_name.entities=以下にエンティティタグ名を入力します (テンプレートの一覧を確認してください)\:
+dialog.item_selector.enter_tag_name.damage_types=下の項目にダメージタイプタグ名を入れてください(テンプレートの一覧を確認してください):
dialog.item_selector.error_invalid_tag_name_title=タグ名が無効 dialog.item_selector.all=すべて dialog.item_selector.blocks=ブロック @@ -379,7 +380,6 @@ dialog.modelement_id.info_message_title=Mod 要素コードがロックされて dialog.modelement_id.registry_name=レジストリ名\: dialog.modelement_id.registry_name_info=レジストリ名 (すべての mod 要素が使用するわけではありません) dialog.modelement_id.registry_name_validator=レジストリ名 -dialog.modelement_id.use_caution_warn=このツールの使用には注意してください!

レジストリ名を変更すると
既存のワールドのセーブデータが壊れて、このModと他のModの要素が競合する可能性があります! dialog.modelement_id.id_and_registry_names="{0} - レジストリ名" dialog.modelement_id.invalid_registry_name=入力したレジストリ名が無効です!
変更は保存されていません。 dialog.modelement_id.invalid_registry_name_title=無効なレジストリ名 @@ -454,7 +454,6 @@ dialog.textures_mapping.title_for_model=モデルのテクスチャマッピン dialog.textures_mapping.add_new=新しいテクスチャマッピングを追加 dialog.textures_mapping.enter_name_message=テクスチャマッピング名を入力します。
この名前は、モデルのテクスチャマッピングを選択するときに
テクスチャのセットを識別するために使用されます。 dialog.textures_mapping.enter_name_title=新しいテクスチャマッピング -dialog.textures_mapping.jump_to=ジャンプ先... dialog.textures_mapping.save=マッピングを保存 dialog.textures_mapping.model_texture_part=モデルテクスチャパーツ\:
{0} dialog.textures_mapping.confirm_deletion_message=このテクスチャマッピングを削除してもよろしいですか?
マッピングがまだ使用されている場合、テクスチャが壊れてしまうことがあります! @@ -577,7 +576,6 @@ workspace.elements.list.filter_all=すべて表示 workspace.elements.list.filter_locked=ロックされた要素 workspace.elements.list.filter_witherrors=ビルドエラーのある要素 workspace.elements.list.ascending=昇順 -workspace.category.mod_elements=Mod 要素 workspace.category.resources=リソース workspace.category.variables=変数 workspace.category.localization=翻訳 @@ -594,14 +592,11 @@ workspace.elements.list.edit.delete=削除 workspace.elements.list.edit.duplicate=Mod 要素が重複しています... workspace.elements.list.edit.code=Mod 要素をコードエディタで開く workspace.elements.list.edit.lock=Mod 要素をロック/アンロックする -workspace.elements.list.edit.id=Mod 要素IDを編集... workspace.elements.list.edit.add.folder=新しいフォルダを追加... workspace.elements.list.edit.rename.folder=選択したフォルダの名前を変更... -workspace.elements.confirm_delete_message=本当に選択した ( {0} ) 個の要素を削除しますか?

これらのMod要素のデータを他のMod要素で (レシピとして、イベント内、タブとして) 使用した場合、
この要素に依存する要素も削除する必要があります! そうしないと、ビルドエラーが発生します。

削除されたフォルダとサブフォルダに入っていたMod要素は親フォルダに移動されます。 workspace.elements.delete.tooltip=選択したMod要素を削除する workspace.elements.edit_code.tooltip=選択したMod要素のコードを編集する workspace.elements.lock_code_tooltip=要素のコードのロック/ロック解除
コードをロックすると、MCreatorはコードを変更しないため、
コードビューからModタイプが編集可能になり、ワークスペースを切り替えてもコードが保持されます。
コードを手動で編集し、Mod要素のコードをロックすることの結果を理解している場合にのみ、
これを使用してください! -workspace.elements.edit_registry_names.tooltip=Mod要素IDとレジストリ名を編集 workspace.elements.empty.tip=%1 を押してMod要素を追加 workspace.elements.lock_modelement_message=Mod要素のコードをロック/ロック解除しようとしています!

コードがロックされている場合、MCreatorはソースコードを変更しませんが、
これは、MCreatorの更新時に、 バグ修正とMinecraftバージョンのアップグレードは、
ロックされている要素には適用されません。

現在ロックされていて選択されているMod要素はロック解除されます。
つまり、これらのロック解除されたMod要素のカスタムコードはMCreatorによって上書きされます。

このアクションを使用する前に、コードのロックについてMCreatorのWebサイトのWikiページをお読みください。 workspace.elements.lock_modelement_confirm=Mod 要素をロック/アンロックしますか? @@ -675,8 +670,6 @@ trigger.entity_travels_to_dimension=エンティティがディメンション trigger.entity_uses_totem=エンティティがトーテムを使用したとき trigger.explosion_occurs=爆発が起る trigger.farmland_trampled=農地が踏み荒らされた -trigger.gem_dropped=ジェムがドロップした -trigger.gem_expired=ジェムの期限切れ trigger.item_crafted=アイテムがクラフトされた trigger.item_destroyed=アイテムが破壊された trigger.item_smelted=アイテムが精錬される @@ -729,6 +722,7 @@ blockly.category.guimanagement=スロット & GUI プロシージャ blockly.category.worldprocedures=ワールドプロシージャ blockly.category.worlddata=データ blockly.category.worldmanagement=アクション +blockly.category.scoreboard=スコアボード blockly.category.basictasks=基本タスク blockly.category.combattasks=戦闘タスク blockly.category.movementtasks=移動タスク @@ -879,9 +873,7 @@ blockly.block.entity_get_armor_slot_item=%2 の防具スロット %1 のアイ blockly.block.entity_get_controlling_passenger=%2 %1 を操縦しているエンティティを取得する blockly.block.entity_get_first_passenger=%2 %1 の最初の乗客を取得 blockly.block.entity_get_fire_ticks=%1 の炎の残り時間を取得 -blockly.block.entity_get_fly_speed=%1 の飛行速度を取得 blockly.block.entity_get_oxygen=%1 の酸素量を取得 -blockly.block.entity_get_root_vehicle=%1 が乗られている最も低いエンティティ、または何かに乗っていない場合は自己を取得します blockly.block.entity_get_saturation=%1 の隠し満腹値を取得 blockly.block.entity_get_scoreboard_score=%2 のスコアボードのスコア %1 を取得 blockly.block.entity_get_shootpower=%1 が発射体の場合、射撃力を取得 @@ -890,7 +882,6 @@ blockly.block.entity_get_spawn_x=現在のワールド %2 に対する %1 の X blockly.block.entity_get_spawn_y=現在のワールド %2 に対する %1 の Y スポーン座標を取得 blockly.block.entity_get_spawn_z=現在のワールド %2 に対する %1 の Z スポーン座標を取得 blockly.block.entity_get_uuid=%1 のUUIDを取得 -blockly.block.entity_get_walk_speed=%1 の歩行速度を取得 blockly.block.entity_getowner=%2 %1 が飼いならされている場合所有者を取得 blockly.block.entity_getridingentity=%2 %1 が乗っているエンティティを取得 blockly.block.entity_gettargetentity=%2 %1 の攻撃対象のエンティティを取得 @@ -997,9 +988,6 @@ blockly.block.entity_stop_navigation=%1 のナビゲーションを停止を試 blockly.block.entity_submerged_height=%1 の水没高度を取得 blockly.block.entity_swing_mainhand=%1 の利き手を振る blockly.block.entity_swing_offhand=%1 の利き手ではない手を振る -blockly.block.entity_vel_x=%1%2のX速度 -blockly.block.entity_vel_y=%1%2のY速度 -blockly.block.entity_vel_z=%1%2のZ速度 blockly.block.entity_xplevel=%1 の経験値レベルを取得 blockly.block.entity_xp_until_next_level=レベルを %1 上げるのに必要な経験値量を取得する blockly.block.execute_command=/%1 をX\: %2 Y\: %3 Z\: %4 で実行 @@ -1156,7 +1144,6 @@ blockly.block.protect_owner=飼い主を攻撃したエンティティにダメ blockly.block.restrict_sun=日光を避ける %1 blockly.block.swim=速度係数 %1 でランダムに泳ぎまわる %2 blockly.block.swim_in_water=水に浮く %1 -blockly.block.watch_closest_entity=半径%1以内の一番近いエンティティ%2を見る %3 blockly.block.wander=速度係数 %1 で歩き回る %2 blockly.block.wander_avoid_water=水を避けつつ速度係数 %1 で歩き回る %2 blockly.block.biome_entered=もしプレイヤーがバイオーム%1に入ったら @@ -1988,7 +1975,6 @@ elementgui.dimension.biomes_in=このディメンジョンに生成されるバ elementgui.dimension.main_filler_block=主たる地面ブロック\:
Normal, Nether, End elementgui.dimension.fluid_block=液体ブロック\:
Normal, Nether, End elementgui.dimension.sleep_result=眠ろうとした際の結果\: -elementgui.dimension.fog_air_color=空/霧を上書きする色\:
マインクラフトの各バージョンのデフォルトの処理に任せる場合はDEFAULTのままにしてください elementgui.dimension.enable_dimension_portal=ディメンションポータルを有効化\: elementgui.dimension.portal_frame_block=ポータルフレームブロック\: elementgui.dimension.portal_particles=ポータルブロックのパーティクル\: @@ -2012,8 +1998,6 @@ elementgui.enchantment.curse=このエンチャントは呪いである elementgui.enchantment.allowed_on_books=このエンチャントは本で使うことができるか elementgui.enchantment.can_generate_in_loot_tables=このエンチャントは戦利品のテーブルに生成できますか? elementgui.enchantment.can_villager_trade=このエンチャントは村人の取引に現れますか? -elementgui.enchantment.compatible_enchantments=組み合わせ可能なエンチャント
全てのエンチャントと組み合わせられるようにするには、空のままにしてください -elementgui.enchantment.can_apply_to=適用可能な対象\:
全てのアイテムに適用できるようにするには、空のままにしてください elementgui.enchantment.needs_name=エンチャントには名前が必要です elementgui.gamerule.name=マシン名\: elementgui.gamerule.display_name=ゲームルール名\:
ゲームルール設定画面で使用されます @@ -2159,7 +2143,6 @@ elementgui.keybind.key_procedure_triggers=キーバインディングプロシ elementgui.keybind.error_key_needs_name=キーバインドには名前が必要です elementgui.keybind.error_key_category_needs_name=キーバインディングカテゴリキー名 elementgui.living_entity.disable_collisions=当たり判定を無効化する -elementgui.living_entity.has_ai=AI を有効化
AI を使用する場合は、以下に定義されている AI タスクを確認してください elementgui.living_entity.immune_fire=火 elementgui.living_entity.immune_arrows=矢 elementgui.living_entity.immune_fall_damage=落下ダメージ @@ -2178,9 +2161,7 @@ elementgui.living_entity.spawn_dungeons=ダンジョンでスポーンする elementgui.living_entity.is_rideable=乗ることが可能 elementgui.living_entity.control_forward=前進制御 elementgui.living_entity.control_strafe=罰を与えて移動を制御 -elementgui.living_entity.is_breedable=このエンティティを動物タイプにする 繁殖アイテム\:
エンティティベースとビヘイビアタイプはチェックされても無視されます。 elementgui.living_entity.is_tameable=手懐けることが可能 -elementgui.living_entity.is_ranged=エンティティが攻撃を行うようにする範囲 アイテムと攻撃距離と半径\:
AIの攻撃対象を定義するために、積極的に行動するタスクを少なくとも1つAIに追加してください。
"Default item"を選択した場合、飛び道具を選択するか、空のままにし、矢を使用します。 elementgui.living_entity.event_struck_by_lightning=雷に打たれた時 elementgui.living_entity.event_mob_falls=エンティティが落下した時 elementgui.living_entity.event_mob_dies=エンティティが死亡した時 @@ -2193,7 +2174,6 @@ elementgui.living_entity.event_initial_spawn=エンティティがスポーン elementgui.living_entity.condition_natural_spawn=エンティティが自然に発生する条件 elementgui.living_entity.condition_is_model_transparent=エンティティモデルが透明か? elementgui.living_entity.condition_is_shaking=エンティティモデルが揺れているか? -elementgui.living_entity.behaviour=行動特性(Mobは攻撃的、Creatureは受動的)\: elementgui.living_entity.creature_type=有効モブの種類(いくつかの特別なエンティティ属性を定義します)\: elementgui.living_entity.drop_health_xp_amount=オプションのドロップ、体力、経験値: elementgui.living_entity.follow_range_tracking_range=範囲、追跡範囲\: @@ -2207,7 +2187,6 @@ elementgui.living_entity.name=エンティティ名\: elementgui.living_entity.entity_model=エンティティモデル\:
サポートしている形式\: JAVA elementgui.living_entity.entity_model_import=クリックするとエンティティモデルテクスチャをインポートできます elementgui.living_entity.texture=エンティティのテクスチャ\:
テクスチャはモデルに合わせる必要があります (例\: プレイヤースキンのテクスチャは二足歩行モデルのテクスチャとは異なります) -elementgui.living_entity.glow_texture=エンティティの発光テクスチャ (任意)\:
発光テクスチャはモデルに適合する必要があり、画像の明るさは輝度を決定します elementgui.living_entity.bounding_box=エンティティモデル境界ボックス\:
幅/深さ、高さ、影のサイズ、乗ったエンティティのY軸オフセット値 elementgui.living_entity.spawn_egg_options=スポーンエッグのオプション\:
有効化、ベースカラー、ドットカラー、クリエイティブタブ elementgui.living_entity.mob_boss=このエンティティを体力バーを表示するボスにする\: @@ -2233,10 +2212,8 @@ elementgui.living_entity.error_entity_model_needs_texture=エンティティモ elementgui.living_entity.error_entity_needs_name=エンティティ名が必要です elementgui.living_entity.page_visual=見た目 elementgui.living_entity.page_sound=サウンド -elementgui.living_entity.page_behaviour=振る舞い elementgui.living_entity.page_ai_and_goals=AIとゴール elementgui.living_entity.page_spawning=スポーン -elementgui.loot_table.name=確率テーブル elementgui.loot_table.registry_name=ルートテーブルのレジストリ名\:
blocks/ などの接頭辞を使用してカテゴリを指定します elementgui.loot_table.namespace=確率テーブルの名前空間\:
マインクラフトの名前空間を使用してバニラの確率テーブルを置き換えます elementgui.loot_table.type=確率テーブルのタイプ\: @@ -2383,9 +2360,7 @@ elementgui.recipe.cooking_time=調理時間\: elementgui.recipe.error_brewing_no_input_ingredient_and_result=醸造レシピは入力と材料と出力を定義する必要があります (空気は含まれません) elementgui.structuregen.event_structure_instance_generated=建造物のインスタンスが生成された時 elementgui.structuregen.import_tooltip=これをクリックして、NBT構造ファイルをインポートします
その他のオプションについては、[ワークスペース]タブの[構造物]セクションを使用してください。 -elementgui.structuregen.select_tooltip=スポーンする建造物\:
より多くの建造物のインポートオプションを使用するには、ワークスペースタブの建造物セクションを利用してください。 elementgui.structuregen.ignore_blocks=設置時に無視するブロック\: -elementgui.structuregen.error_select_structure_spawn=続行するには、この構造物の生成によって生成されるストラクチャを選択する必要があります。 elementgui.tab.name=クリエイティブタブの名前\: elementgui.tab.icon=タブのアイコン\: elementgui.tab.search_bar=検索バーを表示\: @@ -2452,11 +2427,6 @@ workspace.resources.tab.structures=建造物 workspace.resources.tab.screenshots=スクリーンショット workspace.textures.new=新規テクスチャを作成 workspace.textures.import=テクスチャをインポート -workspace.textures.edit_selected=選択したテクスチャを編集... -workspace.textures.duplicate_selected=選択したテクスチャを複製... -workspace.textures.delete_selected=選択したテクスチャを削除 -workspace.textures.export_selected=選択したテクスチャをエクスポート... -workspace.textures.confirm_deletion_message=本当にこのテクスチャを削除してよろしいですか?
注意\: このモデルをどこかで使用していた場合、壊れたテクスチャになってしまいます! workspace.textures.select_dupplicate_type=複製するテクスチャのタイプを選択\: workspace.textures.select_texture_type=このファイルのテクスチャのタイプは何ですか? workspace.textures.category.block=ブロックのテクスチャ\: @@ -2468,47 +2438,29 @@ workspace.textures.category.screen=画面のためのテクスチャ (進捗、G workspace.textures.category.armor=防具のテクスチャ\: workspace.textures.category.other=その他のテクスチャ (絵画、Modロゴ...)\: workspace.3dmodel.description={0}
テクスチャマッピング\: {1} -workspace.3dmodels.edit_texture_mappings=テクスチャマッピングを編集... -workspace.3dmodels.redefine_animations=モデルアニメーションを再定義... -workspace.3dmodels.delete_selected=選択したモデルを削除 -workspace.3dmodels.delete_confirm_message=このモデルを削除して本当によろしいですか?
注意\: このモデルをどこかで使用していた場合、壊れたテクスチャが存在することになり、
それを利用しているMod要素はコンパイルできなくなる可能性があります! -workspace.3dmodels.regenerating_code=コードを再生成 -workspace.3dmodels.regenerating_entity_code=エンティティのコードを再生成中 -workspace.3dmodels.rebuilding_workspace=ワークスペースを再構築中 workspace.3dmodels.animation_unsupported_title=アニメーションはサポートされていません workspace.3dmodels.animation_unsupported_message=このモデルはアニメーションをサポートしていません\! workspace.3dmodels.mappings_unsupported_title=マッピングなし workspace.3dmodels.mappings_unsupported_message=このモデルはテクスチャマッピングをサポートしていません\! -workspace.sounds.confirm_deletion_message=本当にこのサウンドを削除してよろしいですか?
注意\: このサウンドをどこかで使用していた場合、動作しません\! -workspace.sounds.edit_selected=選択した音を編集... workspace.sounds.play_selected=選択した音を再生 -workspace.sounds.delete_selected=選択した音を削除 workspace.sounds.category=サウンドのカテゴリ\: {0} workspace.sounds.files=音声ファイル\: {0} workspace.sounds.subtitle_and_category=字幕\: {0}, サウンドのカテゴリ\: {1} -workspace.screenshots.export_selected=選択したスクリーンショットをエクスポート... -workspace.screenshots.delete_selected=選択したスクリーンショットを削除 workspace.screenshots.action_complete=アクションを完了 workspace.screenshots.use_background_message=選択したスクリーンショットは、次回の起動時に背景として利用される可能性があります -workspace.screenshots.use_as_background=MCreatorの背景として選択したものを使用... -workspace.structure.confirm_deletion_message=選択した構造物を削除してもよろしいですか?
注:どこかで使用されていた場合は、もう生成されません\! workspace.variables.variable_name=変数名 workspace.variables.variable_type=変数型 workspace.variables.variable_scope=変数スコープ workspace.variables.initial_value=初期値 workspace.variables.add_new=新しい変数を追加 -workspace.variables.remove_selected=選択した項目を削除 workspace.variables.help=変数に関するヘルプ workspace.variables.change_type=この変数を本当に変更しても良いですか?
もしこの変数が使用中だった場合、コンパイルエラーが発生してしまいます。
この変数が単に作成されただけであれば、変更は全く問題ありません。 -workspace.variables.remove_variable_confirmation=この変数を削除してもよろしいですか?
この変数が使用中だった場合、コンパイルエラーを引き起こす可能性があります。 workspace.localization.add_entry=ローカライズエントリを追加 -workspace.localization.remove_selected=選択した項目を削除 workspace.localization.export_to_csv=現在の言語をCSV形式でエクスポート workspace.localization.import_csv=現在の言語にCSVをインポート workspace.localization.key_name_title=キーの名前 workspace.localization.key_name_message=カスタム言語エントリのキー名を入力してください\: workspace.localization.confirm_delete_map=この翻訳のマッピングを削除してもよろしいですか? -workspace.localization.confirm_delete_entry=選択したエンティティを削除してもよろしいですか?
注意\: それらのエンティティが利用中だった場合、このエンティティと関連付けられている要素は動かなくなってしまいます! workspace.localization.export_translation=翻訳をエクスポート workspace.localization.confirm_export=デフォルトの翻訳 (en_us) はエクスポートできません\!
英語のテキストはMod要素で定義されています。 workspace.localization.warning_export=デフォルトの翻訳 (en_us) にCSVをインポートすることはできません\!
英語のテキストはMod要素で定義されています。 diff --git a/plugins/mcreator-localization/lang/texts_ko_KR.properties b/plugins/mcreator-localization/lang/texts_ko_KR.properties index d6d5657f8f1..288a6fa700a 100644 --- a/plugins/mcreator-localization/lang/texts_ko_KR.properties +++ b/plugins/mcreator-localization/lang/texts_ko_KR.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=애니메이션 설정 dialog.animation_maker.next_frame=다음 프레임 dialog.animation_maker.previous_frame=이전 프레임 dialog.animation_maker.animation_timeline=애니메이션 타임라인 -dialog.animation_maker.add_frames=새로운 프레임(들) ... -dialog.animation_maker.add_frames_from_template=템플릿에서 프레임 추가... -dialog.animation_maker.add_frames_from_strip=애니메이션 strip에서 프레임 추가 ... -dialog.animation_maker.add_frames_from_gif=GIF로부터 프레임 추가... dialog.animation_maker.gif_importing=GIF 불러오기 dialog.animation_maker.gif_reading=GIF 읽는 중 dialog.animation_maker.gif_processing=GIF 처리 중 @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=Gradle 캐시 정리 dialog.cache_cleanup.progress.stopping_daemons=Gradle 데몬 실행 중지 dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Gradle 캐시들 폴더 지우기 dialog.cache_cleanup.progress.build_task=Gradle 빌드 작업 실행 -dialog.code_error.compilation_desc= 기본 모드 파일이 제대로 컴파일되지 않았습니다.

이것은 보통 빌드 중 모드 코드의 불일치로 인해 발생합니다.
MCreator이(가) 문제를 해결할 수 있습니다. 전체 모드의 코드를 재생성하여 사용하실 수 있습니다.

모드 요소 또는 모드 기본 파일이 있는 경우에도 이 오류가 발생할 수 있습니다.


코드 재생성 을 클릭하세요.
버튼을 눌러 이 작업을 계속합니다.
dialog.code_error.compilation_title=메인 mod file 컴파일 오류 -dialog.code_error.compilation_list=작업 공간에 제대로 컴파일되지 않는 모드 요소가 있습니다.

이는 마지막으로 추가하거나 편집한 모드 요소로 인해 발생했을 가능성이 큽니다. 이 문제를 해결하기 위해 빌드 오류를 일으키는
모드 요소
설정을 변경해 보십시오.

이 문제를 해결할 수 없으면 작업 영역을 공유 가능한 ZIP 파일로 내보내십시오. 파일 메뉴에서 GitHub 문제 추적기를 통해 보내주십시오.

편집을 유발하는 모드 요소 목록 오류(최대 10개 요소로 잘림)\:

dialog.code_error.regenerate_code=코드 재생성 dialog.code_error.ignore_error=에러 무시하기 dialog.code_error.show_in_workspace=워크스페이스에 표시 @@ -351,7 +345,6 @@ dialog.modelement_id.info_message_title=모드 요소 코드가 잠겨 있습니 dialog.modelement_id.registry_name=레지스트리 이름\: dialog.modelement_id.registry_name_info=레지스트리 이름(모든 모드 요소에서 사용하는 것은 아님) dialog.modelement_id.registry_name_validator=레지스트리 이름 -dialog.modelement_id.use_caution_warn=이 도구는 주의해서 사용하십시오\!

레지스트리 이름을 변경하면 기존 세계 저장이 손상되고
모드의 다른 모드 요소와 충돌이 발생할 수 있습니다\! dialog.modelement_id.id_and_registry_names="{0} - 레지스트리 이름" dialog.modelement_id.invalid_registry_name=입력한 레지스트리 이름이 잘못되었습니다\!
변경 사항이 저장되지 않았습니다. dialog.modelement_id.invalid_registry_name_title=잘못된 레지스트리 이름 @@ -425,7 +418,6 @@ dialog.textures_mapping.title_for_model=모델에 대한 texture mappings dialog.textures_mapping.add_new=새로운 texture mapping 추가 dialog.textures_mapping.enter_name_message=Texture mapping 이름을 입력합니다.
이 이름은 모델의 Texture mapping 을 선택할 때
텍스처 세트를 식별하는 데 사용됩니다. dialog.textures_mapping.enter_name_title=새로운 texture mapping -dialog.textures_mapping.jump_to=…로 이동 dialog.textures_mapping.save=매핑 저장 dialog.textures_mapping.model_texture_part=모델 텍스처 부분\:
{0} dialog.textures_mapping.confirm_deletion_message=이 texture mapping을 삭제하시겠습니까?
매핑이 아직 사용 중이면 텍스처가 깨질 수 있습니다\! @@ -548,7 +540,6 @@ workspace.elements.list.filter_all=모두 보기 workspace.elements.list.filter_locked=잠긴 요소 workspace.elements.list.filter_witherrors=빌드 오류가 있는 요소 workspace.elements.list.ascending=오름차순 -workspace.category.mod_elements=모드 요소 workspace.category.resources=리소스 workspace.category.variables=변수 workspace.category.localization=현지화 @@ -565,14 +556,11 @@ workspace.elements.list.edit.delete=삭제 workspace.elements.list.edit.duplicate=모드 요소 복제... workspace.elements.list.edit.code=코드 편집기에서 모드 요소 열기 workspace.elements.list.edit.lock=모드 요소 잠금/잠금 해제 -workspace.elements.list.edit.id=모드 요소 ID 편집... workspace.elements.list.edit.add.folder=새로운 폴더 추가… workspace.elements.list.edit.rename.folder=선택한 폴더 이름 변경... -workspace.elements.confirm_delete_message=선택한({0}) 요소를 삭제하시겠습니까?

선택한 모드 요소의 데이터를 다른 모드 요소에서 사용한 경우(레시피, 이벤트에서 탭으로 ...) 이
에 종속된 요소도 삭제해야 합니다\! 그렇지 않으면 빌드 오류가 발생합니다.

삭제된 폴더 및 하위 폴더의 Mod 요소는 상위 폴더로 이동됩니다. workspace.elements.delete.tooltip=선택된 모드 요소를 삭제 workspace.elements.edit_code.tooltip=선택한 모드 요소의 코드 편집 workspace.elements.lock_code_tooltip=요소의 코드 잠금/잠금 해제
코드를 잠그면 MCreator가 코드를 변경하지 않으므로 모드 유형이
코드 보기에서 편집 가능하게 되며 작업 공간을 전환하는 경우에도 코드가 유지됩니다..
수동으로 코드를 편집하고 mod 요소의 코드를 잠그는 결과를
알고 있는 경우에만 이것을 사용하십시오\! -workspace.elements.edit_registry_names.tooltip=모드 요소 ID 및 레지스트리 이름 편집 workspace.elements.empty.tip=모드 요소를 추가하려면 %1 누르기 workspace.elements.lock_modelement_message=mod 요소의 코드를 잠그거나 잠금 해제하려고 합니다\!

코드가 잠겨 있을 때 MCreator는 소스 코드를 변경하지 않지만 이는
MCreator를 업데이트할 때 잠긴 요소에는 버그 수정 및 Minecraft 버전 업그레이드가
적용되지 않습니다.

지금 잠겨 있고 선택한 모드 요소는 잠금 해제됩니다.
이것은 이 모드 요소에 대한 모든 사용자 정의 코드가 MCreator에 의해 덮어쓰여진다는 것을 의미합니다.

이 작업을 사용하기 전에 MCreator 웹사이트에서 코드 잠금에 대한 위키 페이지를 읽으십시오. workspace.elements.lock_modelement_confirm=모드 요소 코드를 잠그거나 잠금 해제하시겠습니까? @@ -642,8 +630,6 @@ trigger.entity_tamed=개체가 길들여짐 trigger.entity_travels_to_dimension=개체가 다른 차원으로 감 trigger.explosion_occurs=폭발 trigger.farmland_trampled=경작지가 짓밟힘 -trigger.gem_dropped=아이템이 떨어짐 -trigger.gem_expired=아이템이 소멸됨 trigger.item_crafted=아이템이 조합됨 trigger.item_destroyed=아이템이 부서짐 trigger.item_smelted=아이템이 제련됨 @@ -817,13 +803,11 @@ blockly.block.entity_get_armor_slot_item=%2의 방어구 슬롯 %1의 항목 가 blockly.block.entity_get_controlling_passenger=% 2 % 1을(를) 제어하고 있는 탑승한 플레이어 가져오기 blockly.block.entity_get_first_passenger=%2 %1의 첫 번째 플레이어 확보 blockly.block.entity_get_fire_ticks=%1의 남은 틱 확인 -blockly.block.entity_get_fly_speed=%1의 비행 속도 가져오기 blockly.block.entity_get_oxygen=%1의 산소 포화도 가져오기 blockly.block.entity_get_saturation=%1의 숨겨진 포만 값 얻기 blockly.block.entity_get_scoreboard_score=%2의 스코어 보드 점수 %1 얻기 blockly.block.entity_get_shootpower=%1이 발사체 인 경우 사격력 획득 blockly.block.entity_get_slot=인벤토리가 있으면 항목 %1의 슬롯 %2의 복사본을 가져옵니다. -blockly.block.entity_get_walk_speed=%1의 걷는 속도 가져오기 blockly.block.entity_getowner=%2 %1이 길들인 경우 소유자 취득 blockly.block.entity_getridingentity=%2 %1이 타고 있는 엔티티 가져오기 blockly.block.entity_gettargetentity=%2 %1의 공격 대상 엔티티 얻기 @@ -907,9 +891,6 @@ blockly.block.entity_size_width=%1의 너비 구하기 blockly.block.entity_submerged_height=%1의 잠긴 높이를 구하기 blockly.block.entity_swing_mainhand=%1 의 주요 손을 흔듭니다 blockly.block.entity_swing_offhand=%1 의 보조 손을 흔듭니다 -blockly.block.entity_vel_x=%1 %2 의 X 속도 -blockly.block.entity_vel_y=%1 %2 의 Y 속도 -blockly.block.entity_vel_z=%1 %2 의 Z 속도 blockly.block.entity_xplevel=배고픔 얻기 누구에게?%1 blockly.block.entity_xp_until_next_level=레벨을 얻기 위해 %1이(가) 필요한 XP를 얻으세요 blockly.block.get_command_parameter_message=명령어 메시지 매개 변수 %1 가져오기 @@ -1357,10 +1338,8 @@ elementgui.living_entity.ai_parameters=AI 매개변수 elementgui.living_entity.despawn_idle=유휴 시 디스폰\: elementgui.living_entity.does_spawn_in_dungeons=이 엔티티가 던전에서 스폰되게 합니까? elementgui.living_entity.error_entity_needs_name=개체에는 이름이 필요함 -elementgui.living_entity.page_behaviour=행동 elementgui.living_entity.page_ai_and_goals=AI 및 목표 elementgui.living_entity.page_spawning=생성 -elementgui.loot_table.name=전리품 표 elementgui.loot_table.type=전리품 타입 elementgui.loot_table.add_pool=전리품 줄 추가 elementgui.loot_table.enable_pool_rolls=보너스 추첨 활성화 @@ -1428,23 +1407,13 @@ workspace.resources.tab.structures=구조물 workspace.resources.tab.screenshots=스크린샷 workspace.textures.new=새 텍스쳐 제작 workspace.textures.import=텍스처 불러오기 -workspace.textures.edit_selected=선택한 항목 수정... -workspace.textures.duplicate_selected=선택한 항목 복제... -workspace.textures.delete_selected=선택한 항목 삭제 -workspace.textures.export_selected=선택한 항목 내보내기... workspace.textures.category.block=블록의 텍스처\: workspace.textures.category.item=아이템의 텍스처\: -workspace.3dmodels.delete_selected=선택한 항목 삭제 -workspace.sounds.edit_selected=선택한 항목 수정... -workspace.sounds.delete_selected=선택한 항목 삭제 -workspace.screenshots.delete_selected=선택한 항목 삭제 workspace.screenshots.action_complete=작업 완료 workspace.variables.variable_name=변수 이름 workspace.variables.variable_type=변수 유형 workspace.variables.initial_value=초깃값 workspace.variables.add_new=새 변수 추가 -workspace.variables.remove_selected=선택한 항목 삭제 -workspace.localization.remove_selected=선택한 항목 삭제 workspace.localization.key_name_title=키 이름 workspace.localization.export_translation=번역 내보내기 workspace.localization.add_localization=새 현지화 추가 diff --git a/plugins/mcreator-localization/lang/texts_nl_NL.properties b/plugins/mcreator-localization/lang/texts_nl_NL.properties new file mode 100644 index 00000000000..d9d0ca43dbf --- /dev/null +++ b/plugins/mcreator-localization/lang/texts_nl_NL.properties @@ -0,0 +1,402 @@ +# suppress inspection "TrailingSpacesInProperty" for whole file +# suppress inspection "UnusedProperty" for whole file +dialog.accelerators.accelerator=Versneller +dialog.accelerators.action=Actie +dialog.accelerators.title=Versnellingsmap +dialog.workspace_selector.new_workspace=Nieuwe werkruimte... +dialog.workspace_selector.open_workspace=Open werkruimte... +dialog.workspace_selector.import=Importeren uit bestand... +dialog.workspace_selector.recent_workspace={0}
Laatst geopend in\: {2}
Locatie\: {1} +dialog.workspace_selector.no_workspaces_loaded=
Fout bij het laden van recente werkruimtes
snelkoppelingen. Open ze opnieuw om
aan de lijst toe te voegen. +dialog.workspace_selector.no_workspaces=Geen recente werkruimtes +dialog.workspace_selector.version=Versie {0} +dialog.workspace_selector.preferences=Instellingen +dialog.workspace_selector.donate=Doneren +dialog.workspace_selector.news=Laatste nieuws van MCreator website\: +dialog.workspace_selector.motw=Mod van de week\: +dialog.workspace_selector.webdata.loading=Laden van data ... +dialog.workspace_selector.delete_workspace.message=Wilt u {0} verwijderen uit de recente lijst van werkruimtes
of verwijder de hele werkruimte map van de computer (permanente verwijdering, kan niet ongedaan gemaakt worden)?

Verwijderen van werkruimte uit de lijst zal alleen de werkruimte niet van de computer verwijderen. +dialog.workspace_selector.delete_workspace.title=Verwijder werkruimte +dialog.workspace_selector.delete_workspace.recent_list=Verwijder uit recente werkruimte lijst +dialog.workspace_selector.delete_workspace.workspace=Verwijder werkruimte map +dialog.workspace_selector.delete_workspace.confirmation=Weet u zeker dat u {0} permanent wilt verwijderen?

Als u op Ja klikt, zullen alle werkruimte bestanden op onomkeerbare wijze van de computer verwijderd worden. +action.mcreator_website=MCreator website +action.mcreator_community=MCreator community +action.publish_modification=Mod publiceren... +action.preferences=Instellingen... +action.exit=MCreator Sluiten +action.wiki=Online hulp +action.support=Ondersteuning +action.create_texture=Textuur aanmaken... +action.create_armor_texture=Panster textuur aanmaken... +action.create_animated_texture=Geanimeerde textuur aanmaken... +action.import_block_texture=Importeer blok textuur(en)... +action.import_item_texture=Importeer voorwerp(en)... +action.import_entity_texture=Importeer entiteit texture(s)... +action.import_effect_texture=Importeer effect texture(s)... +action.import_particle_texture=Importeer particle textuur(en)... +action.import_screen_texture=Importeer GUI, overlay, enz. textuur(en)... +action.import_armor_texture=Importeer panster textuur... +action.import_other_texture=Importeer schilderij, logo, enz. textuur(en)... +action.workspace.close=Werkruimte sluiten +action.show_console=Console tabblad weergeven +action.show_workspace=Werkruimte tabblad weergeven +action.close_all_tabs=Alle tabbladen sluiten +action.close_tab=Huidig tabblad sluiten +action.replace=Vervangen +action.replace_all=Alles vervangen +action.show_workspace_browser=Werkruimte verkenner weergeven +action.hide_workspace_browser=Werkruimte verkenner verbergen +action.open_workspace_folder=Werkruimte folder openen +action.gradle.build_gradle_project=Alleen Gradle project bouwen +action.gradle.build_gradle_project.tooltip=Deze actie zal een Gradle build maken zonder broncode aan te passen +action.gradle.build_workspace=Werkruimte bouwen +action.gradle.build_workspace.tooltip=Deze actie zal de basis mod broncode regenereren en het Gradle project bouwen +action.gradle.cancel_task=Gradle taak annuleren +action.gradle.disabled= Deze actie is momenteel uitgeschakeld omdat de Gradle-taak actief is in de console.
Dit kan worden veroorzaakt doordat Minecraft open is in MCreator, active build, active setup of andere
Grijpactie. Kijk op het tabblad Console voor meer informatie of wacht tot de taak is voltooid. +action.gradle.clear_caches=Alle Gradle cache legen... +action.gradle.clear_caches.option.gradle_caches=Gradle cache legen +action.gradle.clear_caches.option.gradle_folder=Volledige Gradle folder legen +action.gradle.clear_caches.option.message= Met deze actie worden alle Gradle-caches voor alle generatoren en werkruimten gewist.
Door dit te doen, kunnen enkele gevallen van Gradle-buildfouten worden opgelost.

Deze actie heeft geen invloed op uw bestanden of werkruimten, maar na het wissen van de caches

build van elk generatortype en elke versie zal de eerste keer wat langer duren.
In sommige gevallen is het nodig om de volledige Gradle-map te wissen om Gradle-fouten op te lossen.
< br> Alle lopende build-taken of open testclients worden tijdens deze actie gesloten. +action.common.apply=Toepassen +action.common.create=Aanmaken +action.common.resize=Formaat wijzigen +action.gradle.clear_caches.option.title=Alle Gradle cache legen +action.gradle.close_mcreator_while_installation_message= Gradle is nog bezig met het opzetten van de werkruimte\!
U kunt MCreator niet sluiten terwijl de Gradle aan het instellen is. Wacht tot de installatie is voltooid.
U kunt de voortgang van de installatie volgen op het tabblad Console. +action.gradle.close_mcreator_while_installation_title=Gradle instellen +action.gradle.close_mcreator_while_running_message=Er zijn sommigen Gradle-taken aan het uitvoeren in de achtergrond.
Weet jij zeker dat jij deze werkruimte wil sluiten?

Als je doorgaat, worden alle lopende taken geannuleerd\! +action.gradle.close_mcreator_while_running_title=Werkruimte sluiten +dialog.ai_condition.additional_start=Aanvullende start conditie +dialog.ai_condition.additional_continue=Aanvullende hervat conditie +dialog.ai_condition.panel_name=AI conditie editor +dialog.animation_editor.title_wizard=Model animatie definitie wizard +dialog.animation_editor.action_set_new=Nieuwe animaties inschakelen +dialog.animation_editor.action_keep_current=Huidige animaties behouden +dialog.animation_editor.action_set=Animaties inschakelen +dialog.animation_maker.frame_duration= Duur van één frame\:
In ticks; 20 tikken \= 1s) +dialog.animation_maker.interpolate_frame=Interpoleer frames\:
Not visible in preview +dialog.animation_maker.settings=Animaties instellingen +dialog.animation_maker.next_frame=Volgend frame +dialog.animation_maker.previous_frame=Vorig frame +dialog.animation_maker.animation_timeline=Animatie tijdlijn +dialog.animation_maker.add_frames=Frame(s) toevoegen... +dialog.animation_maker.add_frames_from_template=Frames toevoegen van sjabloon... +dialog.animation_maker.add_frames_from_strip=Frames toevoegen van animatie reeks... +dialog.animation_maker.add_frames_from_gif=Frames toevoegen van GIF... +dialog.animation_maker.gif_importing=Importeer GIF +dialog.animation_maker.gif_reading=GIF lezen +dialog.animation_maker.gif_processing=GIF verwerken +dialog.animation_maker.gif_format_unsupported=Gecomprimeerd GIF formaat is niet ondersteund\! +dialog.animation_maker.remove_selected_frames=Verwijder geselecteerde frames +dialog.animation_maker.save_animated_texture=Deze animatie opslaan +dialog.animation_maker.kind_of_texture=Welke soort textuur is dit? +dialog.animation_maker.type_of_texture=Textuur type +dialog.animation_maker.enter_texture_name=Voer naam van textuur in (zonder spaties)\: +dialog.animation_maker.resource_error=Bronfout +dialog.animation_maker.texture_already_exists={0} met deze naam bestaat al\! +dialog.animation_maker.size_selection=Grootte selectie +dialog.animation_maker.animation_size=Selecteer de grootte van animatie\: +dialog.animation_maker.template_color_choice=Kies sjabloon en kleur +dialog.animation_maker.template=Animatie sjabloon\: +dialog.animation_maker.color=Animatie kleur\: +dialog.animation_maker.saturation_lightness_lock=Vergrendel verzadiging en helderheid\: +dialog.animation_maker.preview=Voorbeeld +dialog.animation_maker.strip_color_choice= Kies texture strip en eventueel een kleur +dialog.animation_maker.strip=Textuur reeks bestand\: +dialog.animation_maker.colorize=Verkleur\: +dialog.animation_maker.add_frames_from_file=Frames toevoegen van bestand +dialog.armor_image_maker.type=Panster textuur soort\: +dialog.armor_image_maker.color=Textuur kleur\: +dialog.armor_image_maker.saturation_lightness_lock=Vergrendel verzadiging en helderheid\: +dialog.armor_image_maker.properties=Panster textuur eigenschappen +dialog.armor_image_maker.preview=Panster textuur voorbeeld +dialog.armor_image_maker.save=Harnas opslaan +dialog.armor_image_maker.name=Naam van de panster textuur(geen spaties)\: +dialog.armor_image_maker.resource_error=Uitkomst fout +dialog.armor_image_maker.name_already_exists=Panster met deze naam bestaat al\! +dialog.common.save_changes=Verandering wijzigen +dialog.cache_cleanup.title=Gradle cache opruimen +dialog.cache_cleanup.progress.stopping_daemons=Actieve Gradle daemons aan het stoppen +dialog.cache_cleanup.progress.clearing_gradle_caches_folder=De Gradle Caches map leegmaken +dialog.cache_cleanup.progress.build_task=Gradle bouwtaak uitvoeren +dialog.code_error.compilation_desc=Een of meer van uw basis bestanden zijn niet goed gecompliceerd.

Dit word meestal veroorzaakt door inconsistenties in de mod tijdens het bouwen.
MCreator kan dit probleem oplossen door de code van deze mod opnieuw te regenereren.

Als je mod of mod element bestanden vergrendeld hebt, kan dit de fout veroorzaken.


KlikRegenereer code knop om door te gaan met deze actie.
+dialog.code_error.compilation_title=Hoofdmod bestandscompliatie errors +dialog.code_error.compilation_list=Uw werkruimte bevat mod elementen die niet goed gecompileerd zijn.

Dit was zeer waarschijnlijk veroorzaakt door het laatste mod element dat je hebt toegevoegd of bewerkt. Probeer de instellingen van mod elementen
te wijzigen die fouten veroorzaken (dergelijke elementen staan hieronder opgesomd) om te proberen dit probleem op te lossen.

Als je dit probleem niet kunt oplossen exporteer de werkruimte om het ZIP bestand te delen vanuit het Bestand menu en stuur het naar ons via
onze Issue tracker op GitHub zodat we kunnen proberen u te helpen.

lijst van mod elementen die compilatie fouten veroorzaken\:

+dialog.code_error.regenerate_code=Regenereer code +dialog.code_error.ignore_error=Negeer fout +dialog.code_error.show_in_workspace=Toon in werkruimte +dialog.code_error.show_build_log=Toon bouw notities +dialog.code_error.title=Sommige mod elementen veroorzaken compilatie fouten +dialog.console_search.match=Hoofdlettergevoelig +dialog.console_search.no_result=Geen resultaten +dialog.element_order.instructions=Click op het element of selectie en sleep ze om ze opnieuw te ordenen +dialog.element_order.editor_title=Creative tabblad element volgorde editor +dialog.element_order.change_message=MCreator gaat nu de werkplaats code opnieuw bouwen om de veranderingen toe te passen.

Bestaande map saves gaan hun oude volgorde behouden\! +dialog.element_order.change_title=Wijzig elementen volgorde +dialog.file.error_save_inside_workspace_root_message=Je kan geen werkplaats maken in een werkplaatsen zijn root map. Maak een eerst hier een subdirectory\! +dialog.file.error_save_inside_workspace_root_title=Werkplaats fout +dialog.file.error_save_inside_folder_not_empty_message=De directory die je hebt geselecteerd voor jouw werkplaats is niet leeg\! +dialog.file.error_save_inside_folder_not_empty_title=Directory is niet leeg +dialog.file.error_invalid_path=De map die u voor de werkruimte geselecteerd heeft heeft een ongeldig pad\!

U heeft de volgende map geselecteerd\:
{0}

Alleen Engelse letters, cijfers_/+-\\\:()[].,@$\=` en witte ruimtes zijn toegestaan in het pad. +dialog.file.error_invalid_path_title=Ongeldige werkruimte map pad +dialog.file.error_invalid_name=De map die u geselecteerd voor de werkruimte heeft een ongeldige naam\!

Werkruimte folder mag de volgende tekens niet bevatten\: /\\\:>"?*| en witte ruimtes. +dialog.file.error_invalid_name_title=Ongeldige werkruimte map naam +dialog.file.error_directory_doesnt_exist=De map waarin u een werkruimte probeert te maken bestaat niet\! +dialog.file.error_directory_doesnt_exist_title=Werkruimte fout +dialog.file.error_no_access=De map die u voor de werkruimte geselecteerd heeft
bevindt zich in een map die MCreator niet kan lezen\! +dialog.file.error_no_access_title=Fout in werkruimte map rechten +dialog.file.error_already_exists=Het bestand{0} bestaat al. Wil je het bestaande bestand vervangen? +dialog.file.error_already_exists_title=Bestand overschrijven +dialog.file.select_directory_title=Selecteer map voor de werkruimte +dialog.gui.button_add_title=Knop bewerker +dialog.gui.button_change_width=Nadat jij OK klikt, rechter klik met de muis om de breedte van de knop te veranderen +dialog.gui.button_resize=Om de knop te vervormen gebruik je de beweeggereedschap en klik je met de rechtermuisknop bij het verplaatsen +dialog.gui.button_text=Tekst van de knop\: +dialog.gui.button_is_undecorated=Is de knop onversierd? +dialog.gui.button_event_on_clicked=Op knop geklikt +dialog.gui.button_display_condition=Weergaveconditie knop +dialog.gui.image_button_add_title=Foto knop bewerker +dialog.gui.image_button_size=
De breedte en hoogte van de afbeeldingsknop is hetzelfde als de afbeeldingsbestanden.
Beide textuur bestanden moeten dezelfde grootte hebben.
+dialog.gui.hovered_image_texture=Textuur wanneer over heen gezweefd\: +dialog.gui.image_texture=Textuur\: +dialog.gui.image_use_scale=Gebruik originele schaal (1X in plaats van Minecraft 2X schaal) +dialog.gui.image_display_condition=Weergaveconditie afbeelding +dialog.gui.image_title=Afbeelding bewerker +dialog.gui.label_event_display_condition=Weergaveconditie Label +dialog.gui.label_text=Tekst\: +dialog.gui.label_component_title=Label bewerker +dialog.gui.label_text_color=Kleur van tekst\: +dialog.gui.model_display_condition=Weergave conditie model +dialog.gui.model_scale=Model schaal\: +dialog.gui.add_tooltip=Knopinfo bewerker +dialog.gui.tooltip_display_condition=Weergave conditie knopinfo +dialog.gui.anchor=Anker naar\: +dialog.gui.anchor.top_left=Linksboven +dialog.gui.anchor.top_center=Middenboven +dialog.gui.anchor.top_right=Rechtsboven +dialog.gui.anchor.center_left=Linksmidden +dialog.gui.anchor.center=Midden +dialog.gui.anchor.center_right=Rechtsmidden +dialog.gui.anchor.bottom_left=Linksonder +dialog.gui.anchor.bottom_center=Middenonder +dialog.gui.anchor.bottom_right=Rechtsonder +dialog.gradle_console.clear_log=Log leegmaken +dialog.gradle_console.search=Zoek in gradle-controlebord +dialog.gradle_console.start_build=Klik dit om de hele bouw werkplaats te maken
Je kan ook de bouw beginnen als je Ctrl+Clicken op het Controlebord tabblad +dialog.gradle_console.run_specific_task=Klik hier om een specifieke Gradle taak uit te voeren
Dit gereedschap kan alleen gebruikte worden wanneer er geen actieve Gradle taak worden uitgevoerd. +dialog.gradle_console.copy_contents_clipboard=Kopieer controlebord inhoud naar klembord +dialog.gradle_console.clear=Controlebord leegmaken +dialog.gradle_console.show_info_log=Laat informatie log in console zien +dialog.gradle_console.show_errors=Toon fouten in console +dialog.gradle_console.lock_scroll=Scroll vergrendeling +dialog.gradle_console.offline_mode_message=U heeft MCreator in offline modus gezet

MCreator kan de generator niet opstarten in de offline modus.
De offline modus word uitgeschakeld. +dialog.gradle_console.offline_mode_title=Offline modus waarschuwing +dialog.gradle_console.gradle_caches_corrupted_message=Mcreator heeft gedetecteerd dat Gradle acties onderbroken zijn.
Maak je geen zorgen, we kunnen dit oplossen, we moeten alleen deze acties opnieuw uitvoeren.

Deze actie is niet gevaarlijk voor uw bestanden of werkruimtes, maar na het uitvoeren van de acties,
het maken van de generator en versie duurt langen dan de eerste keer.
Soms is het nodig om de hele Gradle map leeg te maken om de fouten op te lossen.

elke actie die bezig is word afgebroken tijdens deze actie. +dialog.gradle_console.gradle_caches_corrupted_title=Gradle acties onderbroken +dialog.gui.slot_id_already_used=Dit ID veld is al in gebruik +dialog.gui.slot_id_must_be_number=ID veld moet een nummer zijn +dialog.gui.slot_id=Veld ID\: +dialog.gui.slot_custom_color=Aangepaste kleur
Klik alleen als je van plan bent een aangepaste kleur te gebruiken\: +dialog.gui.slot_drop_item_when_gui_closed=Laat items vallen als GUI niet aan een extern inventaris is gebonden +dialog.gui.slot_event_slot_content_changes=Wanneer de inhoud van het vak verandert +dialog.gui.slot_event_item_taken_from_slot=Wanneer een item uit het slot wordt gehaald +dialog.gui.slot_event_transferred_from_slot=Wanneer overgedragen van vak (shift-klik) +dialog.gui.slot_input_editor_title=Invoerslot bewerker +dialog.gui.slot_output_editor_title=Uitvoerslot bewerker +dialog.gui.save_slot=Vak opslaan +dialog.gui.textfield_change_width=Nadat je OK klikt, klik met de rechtermuisknop om de breedte van het tekstveld te veranderen +dialog.gui.textfield_resize=Om de grootte van het tekstveld te wijzigen, gebruik de verplaatsfunctie en klik met de rechtermuisknop wanneer je beweegt +dialog.gui.textfield_input_name=Tekst invoer machine naam\: +dialog.gui.textfield_add=Tekstveld bewerker +dialog.gui.textfield_initial_text=Eerste tekst\: +dialog.gui.checkbox_procedure_value=Aangevinkt als de GUI geopend is +dialog.gui.checkbox_add=Selectievak bewerker +dialog.gui.checkbox_name=Selectievak machine naam\: +dialog.gui.checkbox_text=Tekst naast het selectievak\: +action.gradle.reload_project=Gradle project herladen +dialog.imageeditor.base_color=Basiskleur\: +dialog.imageeditor.base_texture=Basis textuur\: +dialog.imageeditor.width=Breedte\: +dialog.imageeditor.height=Hoogte\: +dialog.imageeditor.color=Kleur\: +dialog.imageeditor.color_layer_type=Kleur +dialog.imageeditor.transparency=Transparantie +dialog.imageeditor.template=Sjabloon +dialog.imageeditor.no_layer=Geen laag +dialog.imageeditor.saturation=Verzadiging\: +dialog.imageeditor.hsv_noise_hue=Max. tintvariatie +dialog.imageeditor.hsv_noise_saturation=Max. verzadigingsvariatie +dialog.imageeditor.hsv_noise_value=Max. waardevariatie +dialog.imageeditor.saturation_brightness_lock=Vergrendel verzadiging en helderheid +dialog.imageeditor.desaturate_title=Maak Laag minder verzadigd +dialog.imageeditor.desaturate_action=Maak minder verzadigd +dialog.imageeditor.template_from_title=Van sjabloon +dialog.imageeditor.template_generator=Generator sjabloon\: +dialog.imageeditor.template_select_texture=Selecteer textuur +dialog.imageeditor.template_layer_one=Laag 1\: +dialog.imageeditor.template_layer_two=Laag 2\: +dialog.imageeditor.template_layer_three=Laag 3\: +dialog.imageeditor.template_layer_four=Laag 4\: +dialog.imageeditor.template_rotation=Rotatie\: +dialog.imageeditor.template_randomize=Willekeurig +dialog.imageeditor.template_create_and_merge=Creëren en samenvoegen +dialog.imageeditor.template_merged_layer=Samengevoegde laag +dialog.imageeditor.noise_apply=Ruis toepassen op Laag +dialog.imageeditor.noise_randomize_seed=Willekeurige seed +dialog.imageeditor.noise_seed=Seed\: +dialog.imageeditor.new_image_title=Nieuwe Afbeelding +dialog.imageeditor.new_image_fill_with=Vul met\: +dialog.imageeditor.new_image_add_transparent_layer=Voegt een transparante laag toe +dialog.imageeditor.new_image_add_no_layer=Voegt geen lagen toe +dialog.imageeditor.new_layer=Nieuwe Laag +dialog.imageeditor.new_layer_name=Naam van laag\: +dialog.imageeditor.new_layer_fill_with=Vul met\: +dialog.imageeditor.new_layer_fills_transparency=Vult de laag met transparantie +dialog.imageeditor.new_layer_x_offset=Compensatieverschuiving X\: +dialog.imageeditor.new_layer_y_offset=Compensatieverschuiving Y\: +dialog.imageeditor.recolor_layer=Verander kleur van Laag +dialog.imageeditor.recolor_action=Verander kleur +dialog.imageeditor.resize_canvas=Canvasgrootte aanpassen +dialog.imageeditor.resize_layer=Laaggrootte aanpassen +dialog.imageeditor.resize_enable_anti_aliasing=Anti-aliasing inschakelen\: +dialog.imageeditor.resize_affect_canvas=Canvas aanpassen aan laaggrootte +dialog.imageeditor_tool.use_canvas=Klik op het canvas om te gebruiken +dialog.imageeditor.layer_panel_no_image=Geen afbeelding +dialog.imageeditor.layer_panel_no_layers=Geen lagen +dialog.imageeditor.layer_panel_new_layer=Nieuwe laag +dialog.imageeditor.layer_panel_move_up=Verplaats omhoog +dialog.imageeditor.layer_panel_move_down=Verplaats omlaag +dialog.imageeditor.layer_panel_rename_layer=Laag hernoemen +dialog.imageeditor.layer_panel_toggle_visibility=Schakel zichtbaarheid in/uit +dialog.imageeditor.layer_panel_delete_layer=Laag verwijderen +dialog.imageeditor.layer_panel_duplicate_layer=Laag dupliceren +dialog.imageeditor.layer_panel_confirm_layer_deletion_message=Weet je zeker dat je de volgende lagen wilt verwijderen\:
+dialog.imageeditor.layer_panel_confirm_layer_deletion_title=Laag verwijderen +dialog.imageeditor.layer_panel_enter_new_name=Voer de naam van de nieuwe laag in\: +dialog.imageeditor.stamp_tool_lock_saturation_brightness=Zet verzadiging en helderheid vast +dialog.imageeditor.stamp_tool_smooth_resizing=Afmetingen vloeiend aanpassen +dialog.imageeditor.stamp_tool_connect_points=Verbind punten +dialog.imageeditor.stamp_tool_base_texture=Basis textuur\: +dialog.image_maker.save=Sla deze textuur op +dialog.image_maker.save_as_new=Opslaan als een nieuwe textuur +dialog.image_maker.generate_from_template=Genereer vanuit sjabloon +dialog.image_maker.texture_type.message=Wat voor textuur is dit? +dialog.image_maker.texture_type.title=Textuur type +dialog.image_maker.enter_name=Voer naam van textuur in (zonder spaties)\: +dialog.image_maker.texture_name=Textuurnaam +dialog.image_maker.texture_type_name_exists=Textuur van dit type met deze naam bestaat al\! +dialog.image_maker.resource_error=Bronfout +dialog.image_maker.info_bar=[{0}, grootte\: {1}x{2}] Muislocatie\: {3}, {4} +dialog.image_maker.info_bar.new_image=Nieuwe afbeelding +dialog.image_maker.info_bar.source_image=Bron afbeelding\: {0} +dialog.image_maker.info_bar.file=Bestand\: {0} +dialog.image_maker.tools.general=Algemeen +dialog.image_maker.tools.drawing=Tekenen +dialog.image_maker.tools.filters=Filters +dialog.image_maker.tools.constraints=Verplaatsen en grootte aanpassen +dialog.image_maker.tools.undo=Ongedaan maken (Ctrl + Z) +dialog.image_maker.tools.redo=Opnieuw (Ctrl + Y) +dialog.image_maker.tools.undo_description=Maakt de laatste handeling ongedaan +dialog.image_maker.tools.redo_description=Doet de laatste handeling opnieuw +dialog.image_maker.tools.types.eraser=Gum +dialog.image_maker.tools.types.eraser_description=De basis wisgereedschap +dialog.image_maker.tools.types.colorize=Inkleuren +dialog.image_maker.tools.types.colorize_description=Een gereedschap om kleuren aan lagen toe te voegen +dialog.image_maker.tools.types.colorpicker=Kleurenkiezer +dialog.image_maker.tools.types.colorpicker_description=Een gereedschap die de voorgrond kleur naar de aangewezen kleur zet (shift-klik om als achtergrond kleur te zetten) +dialog.image_maker.tools.types.desaturate=Desatureren +dialog.image_maker.tools.types.desaturate_description=Een gereedschap om lagen te desatureren +dialog.image_maker.tools.types.floodfill=Overstroming vul +dialog.image_maker.tools.types.floodfill_description=Een gereedschap om grotere vlaktes te vullen +dialog.image_maker.tools.types.noise=Ruis gereedschap +dialog.image_maker.tools.types.noise_description=Een gereedschap om ruis op de lagen toe te voegen +dialog.image_maker.tools.types.move=Verplaats gereedschap +dialog.image_maker.tools.types.move_layer=Laag verplaatsen +dialog.image_maker.tools.types.move_description=Een gereedschap om actieve lagen te verplaatsen +dialog.image_maker.tools.types.select=Selecteer gereedschap +dialog.image_maker.tools.types.pencil=Potlood +dialog.image_maker.tools.types.pencil_description=Een standaard teken gereedschap +dialog.image_maker.tools.types.resizecanvas=Canvas formaat aanpassen +dialog.image_maker.tools.types.resizecanvas_description=Een gereedschap om het formaat van het basis canvas +dialog.image_maker.tools.types.resize=Formaat wijzigen +dialog.image_maker.tools.types.resize_layer=Wijzig formaat van laag +dialog.image_maker.tools.types.resize_description=Een gereedschap om formaat van lagen aan te passen +dialog.image_maker.tools.types.shapetool=Vorm +dialog.image_maker.tools.types.shapetool_description=Vorm aanmaak gereedschap +dialog.image_maker.tools.types.linetool=Lijn +dialog.image_maker.tools.types.linetool_description=Lijn aanmaak gereedschap +dialog.image_maker.tools.types.stamp=Stempel +dialog.image_maker.tools.types.stamp_description=Een gereedschap voor het toevoegen van texturen vanuit sjablonen +dialog.image_maker.tools.types.threshold=Drempel\: +dialog.image_maker.tools.types.shape=Vorm\: +dialog.image_maker.tools.types.shape.square=VIERKANT +dialog.image_maker.tools.types.shape.frame=FRAME +dialog.image_maker.tools.types.shape.circle=CIRKEL +dialog.image_maker.tools.types.shape.ring=RING +dialog.image_maker.tools.types.smooth_edge=Gladde rand +dialog.image_maker.tools.types.pick_opacity=Kies doorzichtigheid +dialog.image_maker.tools.types.saturation=Verzadiging\: +dialog.image_maker.tools.types.drawing_size=Grootte\: +dialog.image_maker.tools.types.drawing_connect_points=Verbind punten +dialog.image_maker.tools.component.colorselector_foreground=Voorgrondkleur +dialog.image_maker.tools.component.colorselector_background=Achtergrondkleur +dialog.image_maker.tools.component.colorselector_reset=Stel voorgrond en achtergrond kleuren opnieuw in +dialog.image_maker.tools.component.colorselector_swap=Verwissel de voorgrond en achtergrond kleuren +dialog.image_maker.tools.component.colorselector_select_foreground=Selecteer voorgrond kleur\: +dialog.image_maker.tools.component.colorselector_select_background=Selecteer achtergrond kleur\: +dialog.item_selector.title=Blok/voorwerp selector +dialog.item_selector.use_selected=Gebruik geselecteerde +dialog.item_selector.use_tag=Gebruik label +dialog.item_selector.use_tag.entities=Gebruik entiteit eigenschap +dialog.item_selector.error_invalid_tag_name_title=Ongeldige label naam +dialog.item_selector.all=Alle +dialog.item_selector.blocks=Blokken +dialog.item_selector.items=Voorwerpen +dialog.item_selector.potions=Drankjes +dialog.item_selector.custom_elements=Aangepaste elementen +dialog.item_selector.name=Naam\: +dialog.item_selector.display_filter=\ Weergavefilter\: +dialog.new_modelement.create_new=Nieuwe aanmaken {0} +dialog.option_pane.invalid_input=Ongeldige invoer +dialog.preferences.load_plugins=Plugins laden... +dialog.preferences.explore_plugins=Plugins verkennen +dialog.preferences.plugins=Plugins +dialog.preferences.save=Opslaan +dialog.preferences.restore_defaults=Standaardinstellingen herstellen +dialog.preferences.page_ui_backgrounds=UI achtergronden +dialog.preferences.page_texture_templates=Textuur templaten +dialog.preferences.plugins_list=Geladen plugins\: +dialog.sounds.name=Naam van geluid +dialog.sounds.files=Geluidsbestanden\: +dialog.sounds.category=Geluidscategorie +dialog.sounds.subtitle=Geluidsondertitel\: +dialog.sounds.edit=Geluid bewerken +dialog.sounds.error_name_not_valid=De ingevoerde geluidsnaam is niet geldig\!
Wijzigingen worden niet opgeslagen. +dialog.sounds.error_name_not_valid_title=Ongeldige geluidsnaam +dialog.sounds.error_select_valid_file=Selecteer ten minste één geluidsbestand\!
Wijzigingen worden niet opgeslagen. +dialog.sounds.error_select_valid_file_title=Geen geluidsbestanden +dialog.textures_import.texture_type=Textuur type +dialog.textures_import.block=Blok +dialog.textures_import.item=Objekt +dialog.textures_import.entity=Entiteit +dialog.textures_import.effect=Effect +dialog.textures_import.particle=Deeltje +dialog.textures_import.screen=Scherm +dialog.textures_import.armor=Pantser +dialog.textures_import.other=ander +dialog.textures_import.armor_needs_two_files=Pantserlaag textuur vereist twee bestanden\: +dialog.textures_import.armor_layers=*laag_1*.png en *laag_2*.png +dialog.textures_import.armor_part_one=Pantser textuur deel 1 (*layer_1*.png)\: +dialog.textures_import.armor_part_two=Pantser textuur deel 2 (*layer_1*.png)\: +dialog.textures_import.import_armor_texture=Importeer panster textuur +dialog.textures_import.error_both_texture_files_not_selected=Je hebt beide textuur bestanden niet geselecteerd\! +dialog.textures_import.error_texture_already_exists=Textuur {0} bestaat al\!
U kunt een nieuwe naam invoeren of de import annuleren +dialog.textures_import.error_texture_import_title=Fout bij importeren +dialog.textures_mapping.title_for_model=Textuur kaarten voor model +dialog.textures_mapping.add_new=voeg een nieuwe textuur kaart toe +dialog.textures_mapping.enter_name_message=wat is de naam van je textuur kaart?
Deze naam wordt gebruikt om uw reeks texturen te identificeren wanneer
een textuur kaart voor uw model selecteert. +dialog.textures_mapping.enter_name_title=nieuwe textuur kaart +dialog.textures_mapping.save=kaarten opslaan +dialog.tools.armor_pack_create=Maak een pantser pakket +dialog.tools.material_pack_title=Materiaal pakket maker +dialog.update_notify.update_title=MCreator update \ No newline at end of file diff --git a/plugins/mcreator-localization/lang/texts_no_NO.properties b/plugins/mcreator-localization/lang/texts_no_NO.properties index c2f1b3e489e..ce342974d70 100644 --- a/plugins/mcreator-localization/lang/texts_no_NO.properties +++ b/plugins/mcreator-localization/lang/texts_no_NO.properties @@ -79,10 +79,10 @@ dialog.animation_maker.settings=Innstillinger for animasjon dialog.animation_maker.next_frame=Neste bilde dialog.animation_maker.previous_frame=Forrige bilde dialog.animation_maker.animation_timeline=Animasjon tidslinje -dialog.animation_maker.add_frames=Legg til bilde(r) ... +dialog.animation_maker.add_frames=Legg til bilder... dialog.animation_maker.add_frames_from_template=Legg til bilder fra malen... -dialog.animation_maker.add_frames_from_strip=Legg til bilder fra animasjonsstripe ... -dialog.animation_maker.add_frames_from_gif=Legg til bilder fra GIF ... +dialog.animation_maker.add_frames_from_strip=Legg til bilder fra animasjonsstripe... +dialog.animation_maker.add_frames_from_gif=Legg til bilder fra GIF... dialog.animation_maker.gif_importing=GIF importering dialog.animation_maker.gif_reading=Leser GIF dialog.animation_maker.gif_processing=Behandler GIF @@ -119,9 +119,9 @@ dialog.cache_cleanup.title=Opprydding av gradle cacher dialog.cache_cleanup.progress.stopping_daemons=Stopper å kjøre Gradle daemons dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Tømmer mappen for Gradle cacher dialog.cache_cleanup.progress.build_task=Kjører Gradle byggeoppgave -dialog.code_error.compilation_desc=En eller flere av hovedmodifikasjon-filene dine ble ikke kompilert riktig.

Dette er vanligvis forårsaket av inkonsistens i modifikasjonskoden under bygg.
Mator kan løse dette problemet for deg ved å regenerere hele mods kode.

Hvis du har låst mod elementer eller mod base filer, kan de også forårsake denne feilen.


Klikk Regenerere kode for å fortsette med denne handlingen.
+dialog.code_error.compilation_desc=En eller flere av hovedmodifikasjon-filene dine ble ikke kompilert riktig.

Dette er vanligvis forårsaket av inkonsistens i modifikasjonskoden under bygg.
MCreator kan løse dette ved å regenerere hele moddens kode.

Hvis du har låst mod elementer eller mod base filer, kan de også forårsake denne feilen.


Klikk Regenerere kode for å fortsette med denne handlingen.
dialog.code_error.compilation_title=Hovedfeil i kompileringen av hovedfil -dialog.code_error.compilation_list=Ditt arbeidsområde inneholder modifikasjonselementer som ikke kompilerer riktig.

Dette var mest sannsynlig forårsaket av det siste mod-elementet du har lagt til eller redigert. Forsøk å endre innstillingene for moddelementer
som forårsaker byggfeil (som elementer er listet nedenfor) for å prøve å fikse dette problemet.

Hvis du ikke klarer å løse dette problemet. eksporter arbeidsområdet til delbar ZIP-fil fra File menyen og send den til oss via
vår Issue-tracker på GitHub så vi kan prøve å hjelpe deg.

Liste over moddelementer som forårsaker kompileringsfeil (trimmet til opptil 10 elementer)\:

+dialog.code_error.compilation_list=Ditt arbeidsområde inneholder modifikasjonselementer som ikke kompilerer riktig.

Dette var mest sannsynlig forårsaket av det siste mod-elementet du har lagt til eller redigert. Forsøk å endre innstillingene for moddelementer
som forårsaker byggfeil (som elementer er listet nedenfor) for å prøve å fikse dette problemet.

Hvis du ikke klarer å løse dette problemet. eksporter arbeidsområdet til delbar ZIP-fil fra File menyen og send den til oss via
vår Issue-tracker på GitHub så vi kan prøve å hjelpe deg.

Liste over mod elementer som forårsaker kompileringsfeil\:

dialog.code_error.regenerate_code=Regenerer kode dialog.code_error.ignore_error=Ignorer feil dialog.code_error.show_in_workspace=Vis i arbeidsområde @@ -273,12 +273,14 @@ dialog.imageeditor_tool.use_canvas=Klikk på lerretet for å bruke dialog.imageeditor.layer_panel_no_image=Ikke noe bilde dialog.imageeditor.layer_panel_no_layers=Ingen lag dialog.imageeditor.layer_panel_new_layer=Nytt lag +dialog.imageeditor.layer_panel_new_layer.floating=Nytt lag fra flytende dialog.imageeditor.layer_panel_move_up=Flytt opp dialog.imageeditor.layer_panel_move_down=Flytt ned dialog.imageeditor.layer_panel_rename_layer=Gi lag nytt navn dialog.imageeditor.layer_panel_toggle_visibility=Juster synlighet dialog.imageeditor.layer_panel_delete_layer=Slett lag dialog.imageeditor.layer_panel_duplicate_layer=Dupliser lag +dialog.imageeditor.layer_panel_merge_layers_down=Slå sammen laget med laget nedenfor dialog.imageeditor.layer_panel_confirm_layer_deletion_message=Er du sikker på at du vil slette følgende lag\:
dialog.imageeditor.layer_panel_confirm_layer_deletion_title=Slett lag dialog.imageeditor.layer_panel_enter_new_name=Angi nytt lagnavn\: @@ -323,6 +325,8 @@ dialog.image_maker.tools.types.noise_description=Et verktøy for å legge til st dialog.image_maker.tools.types.move=Flytt verktøy dialog.image_maker.tools.types.move_layer=Flytt lag dialog.image_maker.tools.types.move_description=Et verktøy for å flytte aktive lag +dialog.image_maker.tools.types.select=Velg verktøy +dialog.image_maker.tools.types.select_description=Verktøy for å velge områder dialog.image_maker.tools.types.pencil=Blyant dialog.image_maker.tools.types.pencil_description=Et grunnleggende tegneverktøy dialog.image_maker.tools.types.resizecanvas=Endre størrelse lerret @@ -361,6 +365,7 @@ dialog.item_selector.enter_tag_name.blocks=Skriv inn blokk-taggnavnet nede dialog.item_selector.enter_tag_name.items=Skriv inn element-taggnavn nedenfor (sjekk listen for maler)\:
dialog.item_selector.enter_tag_name.biomes=Angi biome taggnavn nedenfor (Sjekk liste for maler)\:
dialog.item_selector.enter_tag_name.entities=Angi enhet taggnavn nedenfor (sjekk listen for maler)\:
+dialog.item_selector.enter_tag_name.damage_types=Skriv inn skadetypenavn nedenfor (se etter maler)\:
dialog.item_selector.error_invalid_tag_name_title=Ugyldig tagg-navn dialog.item_selector.all=Alt dialog.item_selector.blocks=Blokker @@ -380,7 +385,7 @@ dialog.modelement_id.info_message_title=Mod-elementkode er låst dialog.modelement_id.registry_name=Registerets navn\: dialog.modelement_id.registry_name_info=Registernavn (ikke alle mod elementer bruk) dialog.modelement_id.registry_name_validator=Registerets navn -dialog.modelement_id.use_caution_warn=Bruk dette verktøyet med forsiktighet\!

Endring av registernavn kan ødelegge dine eksisterende verdensavner og forårsake
konflikter med andre moduser fra din mod\! +dialog.modelement_id.use_caution_warn=bruke dette verktøyet med ekstrem forsiktighet\! Sørg for å ikke bruke duplikatnavn\!

Endring av registernavn kan ødelegge dine eksisterende verdensavner og forårsake
konflikter med andre moduser fra din mod\! dialog.modelement_id.id_and_registry_names="{0} - Registernavn" dialog.modelement_id.invalid_registry_name=Registernavnet du skrev inn er ikke gyldig\!
Endringene har ikke blitt lagret. dialog.modelement_id.invalid_registry_name_title=Ugyldig registernavn @@ -421,6 +426,20 @@ dialog.preferences.themes.list=
liste dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: ukjent egenskapstype +dialog.search_usages.list=Liste over moddelementer som bruker valgte {0}\: +dialog.search_usages.list.empty=Ingen mod elementer som bruker noen av de valgte {0}s funnet. +dialog.search_usages.open_selected=Rediger valgt moddelement +dialog.search_usages.title=Bruk av element +dialog.search_usages.deletion.confirm_msg=Er du sikker på at du vil slette de valgte {0}-ene?

Noen av de valgte {0} blir fortsatt brukt av modelementene oppført nedenfor.
Hvis du fortsetter med slettingen, kan arbeidsområdet bli ødelagt og/eller mislykkes med å bygge\! +dialog.search_usages.deletion_safe.confirm_msg=Er du sikker på at du vil slette valgte {0}?

Det er ingen modifikasjonselementer ved bruk av {0} fra den valgte listen. De kan imidlertid fortsatt bli brukt i egendefinert kode.
Hvis du fortsetter, vil disse referansene bli ugyldige, noe som kan føre til ødelagte ressurser eller spill krasjer. +dialog.search_usages.deletion.confirm=Slett likevel +dialog.search_usages.type.mod_element=mod element +dialog.search_usages.type.resource.texture=tekstur +dialog.search_usages.type.resource.model=modell +dialog.search_usages.type.resource.sound=lyd +dialog.search_usages.type.resource.structure=struktur +dialog.search_usages.type.global_variable=global variabel +dialog.search_usages.type.localization_key=lokaliserings nøkkel dialog.sounds.name=Lyd navn dialog.sounds.registry_name=Lydregisternavn\:
Hvis du endrer navn på lyden i bruk, vil eksisterende referanser bli brutt dialog.sounds.files=lydfiler\: @@ -455,7 +474,7 @@ dialog.textures_mapping.title_for_model=Teksturtildelinger for modell dialog.textures_mapping.add_new=Legg til ny teksturtilordning dialog.textures_mapping.enter_name_message=Skriv inn navnet på din teksturkartlegging.
Dette navnet brukes til å identifisere tekstursettet ditt når
velger en teksturtilordning for din modell. dialog.textures_mapping.enter_name_title=Ny teksturmapping -dialog.textures_mapping.jump_to=Gå til ... +dialog.textures_mapping.jump_to=Gå til... dialog.textures_mapping.save=Lagre tildelinger dialog.textures_mapping.model_texture_part=Modell tekstur del\:
{0} dialog.textures_mapping.confirm_deletion_message=Er du sikker på at du vil slette denne teksturtilordningen?
Du kan få ødelagt teksturer hvis tilordningen fortsatt er i bruk\! @@ -495,6 +514,7 @@ dialog.variables.variable_name=Variabel navn\: dialog.variables.variable_type=Variabel type\: dialog.variables.variable_scope=Variabel omfang\: dialog.variables.new_title=Ny variabel +workspace.loading=Laster inn arbeidsområdet... workspace.elements.list.locked=Låst workspace.elements.folders.add_tooltip=Legg til ny mappe i gjeldende mappe workspace.elements.folders.up_tooltip=Flytt tilbake til den overordnede mappen @@ -505,6 +525,7 @@ workspace.elements.folders.add.error_letters=Mappenavn kan bare inneholde engels workspace.elements.folders.add.error_exists=En mappe med dette navnet finnes allerede. workspace.elements.folders.rename.title=Endre mappenavn workspace.elements.folders.rename.message=Skriv inn nytt mappenavn\: +workspace.elements.list.special.item={0}
Type\: {1} workspace.elements.list.folder=Mappe workspace.elements.list.notlocked=Ikke låst workspace.elements.list.compiles=Kompiler @@ -532,7 +553,16 @@ workspace.elements.list.filter_all=Vis alle workspace.elements.list.filter_locked=Låste elementer workspace.elements.list.filter_witherrors=Elementer med bygge feil workspace.elements.list.ascending=Stigende -workspace.category.mod_elements=Mod elementer +workspace.category.mod_elements=Modellelementer +workspace.elements.list.edit.id=Rediger registernavn... +workspace.elements.list.edit.usages.tags=Valgte elementer inneholder taggtype mod-elementer.

Tagg med samme registernavn kan også defineres av andre modder og kan være svakt referert.
Det er derfor ikke mulig å søke etter disse elementene. +workspace.elements.list.edit.usages.tags.title=Tagg bruk +workspace.elements.confirm_delete_msg_suffix=Mod elementer i slettet mappe og undermapper flyttes til overordnet mappe. +workspace.elements.edit_registry_names.not_possible_message=Det er ikke mulig å bruke dette verktøyet til å redigere registernavn på denne mod-elementtypen. +workspace.elements.edit_registry_names.not_possible_title=Kan ikke redigere registernavnet +workspace.elements.edit_registry_names.tooltip=Rediger registernavn +trigger.gem_dropped=Elementet er droppet +trigger.gem_expired=Droppet elementet utløper blockly.category.blockprocedures=Blokker prosedyrer blockly.category.blockactions=Handlinger blockly.category.blockdata=Data @@ -549,26 +579,103 @@ blockly.category.playermanagement=Handlinger blockly.category.worldprocedures=Verden prosedyrer blockly.category.worlddata=Data blockly.category.worldmanagement=Handlinger +blockly.category.scoreboard=Poengliste blockly.block.blockat_plant_type=Er blokk på x\: %1 y\: %2 z\: %3 av plantetype %4 +blockly.block.entity_check_main_hand=Er %1 %2-hendt blockly.block.entity_checkgamemode=Er %1 i spillmodus %2 +blockly.block.entity_data_logic_get=For egendefinerte enhet %1 av typen %2 får logikk dataparameter %3 verdi +blockly.block.entity_data_logic_set=For egendefinerte enhet %1 av type %2 satt logisk dataparameter %3 til %4 +blockly.block.entity_data_integer_get=For tilpasset enhet %1 av typen %2 får du en dataparameter %3 verdi +blockly.block.entity_data_integer_set=For egendefinerte enhet %1 av type %2 satt heltall dataparameter %3 til %4 +blockly.block.entity_data_string_get=For egendefinerte enhet %1 av typen %2 får strengens dataparameter %3 verdi +blockly.block.entity_data_string_set=For tilpasset enhet %1 av type %2 setter strengdataparameter %3 til %4 blockly.block.entity_get_percent_frozen=Få frossen prosent av %1 +blockly.block.entity_get_root_vehicle=Få den laveste enheten som %1 er i ruten, eller selv hvis du ikke rir på noe +blockly.block.entity_get_use_item=Få element %1 bruker +blockly.block.entity_get_use_item_ticks=Få antall ticks %1 har vært i bruk for +blockly.block.entity_get_walk_speed=Få den grunnleggende gang-hastighetsparameteren til %1 +blockly.block.entity_get_fly_speed=Få en standard flyhastighetsparameter for %1 blockly.block.entity_is_attackable=Kan %1 bli angrepet blockly.block.entity_is_underwater=Er %1 under vann blockly.block.entity_set_gamemode=Satte spillmodus for %1 til %2 +blockly.block.entity_vel_x=X deltabevegelse av %1 %2 +blockly.block.entity_vel_y=Y deltabevegelse av %1 %2 +blockly.block.entity_vel_z=Z-delta-bevegelse av %1 %2 +blockly.block.item_get_cooldown=Få gjenstående nedkjølingsprosent av %2 for %1 +blockly.block.item_is_cooldown=Er %2 på nedkjøling for %1 blockly.block.place_schematic=Plasser NBT-strukturfil %6 %7 ved x\: %1 y\: %2 z\: %3 med rotasjon\: %4 speil\: %5 %8 -blockly.block.play_sound=Spill %6 ved x\: %1 y\: %2 z\: %3 nivå\: %4 pitch\: %5 kategori\: %7 +blockly.block.play_sound=Spill lyd %6 ved x\: %1 y\: %2 z\: %3 nivå\: %4 pitch\: %5 kategori\: %7 +blockly.block.spawn_gem=Spawn droppet element %1 ved x\: %2 y\: %3 z\: %4 pickup delay\: %5 despawn\: %6 %7 +blockly.block.team_add_entity=Legg til enhet %2 til lag %1 +blockly.block.team_create_new=Opprett nytt lag med navnet %1 +blockly.block.team_delete=Slett lag med navnet %1 +blockly.block.team_get_entity_team=Få lag av enhet %1 +blockly.block.team_get_friendlyfire=Er vennlig brann for lag med navn %1 aktivert +blockly.block.team_remove_entity=Fjern enheten %2 fra laget %1 +blockly.block.team_set_friendlyfire=Setter vennlig brann for laget med navnet %1 til %2 +blockly.block.team_set_friendlyfire.tooltip=Vennlig brann fungerer bare med spillere +blockly.block.watch_closest_entity=Se nærmeste enhet av type %2 i radius %1 %3 blockly.block.block_predicate_has_sturdy_face=Blokk ved posisjon forskyvning av x\: %1 y\: %2 z\: %3 har solid flate %4 blockly.block.feature_tree_pine=Tre av type %1 med jord\: %2 trunk\: %3 foliasjon\: %4 foliasjonhøyde\: %5 roots\: %6 Høyde på %7 + maksimalt %8 + maksimalt %9 %10 alltid plass\: %11 %12 ignorerer vins\: %13 %14 dekoratorer\: blockly.block.feature_tree_pine.empty=(Ingen) blockly.block.feature_tree_spruce=Sprukketre med jord\: %1 trunk\: %2 foliasjon\: %3 maks foliasjeradius\: %4 eksponerte stamblokker\: %5 roots\: %6 høyde på %7 + i det meste %8 + alltid plassere %9 %10 alltid dirt\: %11 %12 ignorerer vins\: %13 %14 dekoratorer\: blockly.block.feature_tree_spruce.empty=(Ingen) blockly.block.tree_decorator_alter_ground=Tre dekorator som erstatter nærliggende grunn med %1 +blockly.block.damagesource_is_tagged_in=Er type %1 merket med skadetype-tagger som %2 blockly.extension.feature_tree_pine.foliage_height=Høyde på melkeproduksjon må være mellom 0 og 24 blockly.extension.feature_tree_spruce.radius=Bruddradius må være mellom 0 og 24 blockly.extension.feature_tree_spruce.trunk_height=Eksponert stamhøyde må være mellom 0 og 24 +tag.type.items=Varer +tag.type.blocks=Blokker +tag.type.entities=Enheter +tag.type.functions=Funksjoner +tag.type.biomes=Biomer +tag.type.damage_types=Skader typer +modelement.damagetype=Skade type +modelement.damagetype.description=Skadetype bestemmer hvordan skaden skal brukes på enheter. +preferences.notifications.showWebsiteNewsNotifications=Vis nettstedets nyhetsvarsler ved oppstart +preferences.notifications.showWebsiteNewsNotifications.description=Når aktivert, vil velgeren i arbeidsområde vise varsler om nye nettstedsnyheter ved MCreator lansering +elementgui.damagetype.damage_properties=Skade egenskaper +elementgui.damagetype.exhaustion=Avsløp beløp\:
Standardverdi er 0,1 +elementgui.damagetype.scaling=Skadeskala med vanskelighet? +elementgui.damagetype.effects=Skade lyd effekt\: +elementgui.damagetype.death_messages=Dødsmeldinger +elementgui.damagetype.normal_death_message=Normal dødsmelding\: +elementgui.damagetype.item_death_message=Varets død melding\:
Vises når spiller blir drept av en enhet som holder en navngitt gjenstand +elementgui.damagetype.player_death_message=Dødsbeskjed\:
Vises når spiller dør når du unnslipper fra enhet +elementgui.damagetype.error_empty_death_message=Dødsmelding kan ikke være tom +elementgui.dimension.fog_air_color=Himmel / tog fargeoverstyring\:
Forlat DEFAULT for standard håndtering +elementgui.enchantment.compatible_enchantments=kan kombineres med\:
La være tom (fungerer i inkluderer og ekskluder modus) for å tillate en kombinasjon med en fortryllelse +elementgui.enchantment.can_apply_to=Kan brukes til\:
La være tom (fungerer i inkluderer og ekskluder modus) for å tillate bruk av alle aktuelle elementer +elementgui.living_entity.visual_scale=Modell visuell skala\: +elementgui.living_entity.bounding_box_scale=Bounding box skala\: +elementgui.living_entity.has_ai=Aktiver AI
Sørg for å ha noen AI-oppgaver definert nedenfor elementgui.living_entity.is_water_mob=Er vann er en enhet elementgui.living_entity.condition_can_breathe_underwater=Kan puste under vann elementgui.living_entity.condition_fluids_can_push=Er skjøvet av væske +elementgui.living_entity.is_breedable=Gjør denne entiteten dyretype, avstivede elementer\:
Entity-base og atferdstype vil bli ignorert +elementgui.living_entity.is_ranged=Aktiver range angreper med element, Angrepsintervall og radius\:
Legg til minst én Oppfør aggressivt mot AI oppgave å definere angrepsmål.
Hvis "Standard element" er valgt, velg prosjektilelement eller behold tom for å bruke pilen +elementgui.living_entity.behaviour=Atferdsmessige egenskaper (Mob er aggressiv, skapningen er passiv)\: +elementgui.living_entity.model_layers=Liste over modelllag +elementgui.living_entity.add_model_layer=Legg til et nytt modelllag +elementgui.living_entity.layer_model=Modell\: +elementgui.living_entity.layer_texture=Tekstur\: +elementgui.living_entity.layer_should_glow=Gjør tekstur glød +elementgui.living_entity.layer_display_condition=Vis betingelse +elementgui.living_entity.layer_needs_texture=Modelllaget må ha en tekstur +elementgui.living_entity.entity_data=Enhet data tilgang
Synkronisert mellom klient og server-sider +elementgui.living_entity.entity_data_entries=Oppføringer av data +elementgui.living_entity.entity_data_entries.name=Navn\: +elementgui.living_entity.entity_data_entries.type=Type\: +elementgui.living_entity.entity_data_entries.default_value=Standard verdi\: +elementgui.living_entity.entity_data_entries.add_entry=Legg til ny oppføring +elementgui.living_entity.entity_data_entries.add_entry.name=Data oppførings navn\: +elementgui.living_entity.entity_data_entries.add_entry.type=Data oppføring type\: +elementgui.living_entity.entity_data_entries.add_entry.title=Ny data-oppføring +elementgui.living_entity.page_model_layers=Modell lag +elementgui.living_entity.page_behaviour=Oppførsel +elementgui.living_entity.page_entity_data=Synkroniserte data +elementgui.structuregen.select_tooltip=Struktur til generer\:
Til mer struktur sin imoprtalternativer, bruk strukturens avdeling av arbeidsområdet fane elementgui.structuregen.surface_detection_type=Type påvisning av referansegrunnen\: elementgui.structuregen.terrain_adaptation=Omgjøringstype for terreng\: elementgui.structuregen.generation_stage=Generering stadiet\: @@ -578,10 +685,51 @@ elementgui.structuregen.separation_spacing=Strukturdel fordeling\: elementgui.structuregen.separation=Separering\: elementgui.structuregen.spacing=Avstand\: elementgui.structuregen.error_select_biomes=Velg minst en biome hvor denne strukturen genererer +elementgui.structuregen.error_select_structure_spawn=Du må velge en struktur for å generere elementgui.tool.shield_blocking_model=Skjold blokkeringsmodell\: +workspace.textures.edit_selected=Rediger valgt... +workspace.textures.duplicate_selected=Dupliser valgt... +workspace.textures.replace_selected=Erstatt valgt... +workspace.textures.export_selected=Eksporter valgt... +workspace.3dmodels.edit_texture_mappings=Rediger teksturtilordninger... +workspace.3dmodels.redefine_animations=Omoppvarmings modeller animasjoner... +workspace.sounds.edit_selected=Rediger valgt... +workspace.screenshots.export_selected=Eksporter valgt... +workspace.screenshots.use_as_background=Bruk valgt som MCreator bakgrunn... +dialog.list_field.damage_type_list_title=Velg skadetyper +dialog.list_field.damage_type_list_message=Velg skadetyper du ønsker å legge til i listen\: +dialog.selector.entity_data.message=Vennligst velg en dataparameter\: +dialog.tools.inject_tags.tag.damage_types.minecraft.is_drowning=Skade typer i denne tagggruppen påvirkes av spillregelen for pusting av vann og "drowningDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_explosion=Skade av typen i denne tagggruppen blir påvirket av fortryllelse av blastbeskyttelse. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fall=Skade typer i denne tagggruppen blir påvirket av langsom falleffekt, fjær som faller fortryllelse og "fall"-spillregelen. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fire=Skade av typen i denne tagggruppen påvirkes av spillregelen for brannmotstand, fortryllelse av brannbeskyttelse og "brannskade". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_freezing=Skade typer i denne tagggruppen er påvirket av skinn rustningen og "freezeDamage" spillregelen. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_projectile=Skadetypene i denne tagggruppen påvirkes av fortryllelsen som er projektilt beskyttelse. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_armor=Skade typer i denne taggruppen er ikke redusert med rustning eller skjold. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_cooldown=Skadetyper i denne tag-gruppen omgår ulsårbarhetsrammer. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_effects=Skade typer i denne tag-gruppen ignorerer alle skader som beskyttelseseffekt, rustning eller fortryllelser. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_enchantments=Skade typer på tagg gruppe ignorerer fortryllelser med fortryllelser (for eksempel beskyttelse). +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_shield=Skade typer i denne tagggruppen kan ikke blokkeres av skjold. +action.image_editor.selection.clear=Nullstill valg +action.image_editor.selection.clear.tooltip=Klikk her for å fjerne utvalget +action.image_editor.copy=Kopier +action.image_editor.copy.tooltip=Klikk her for å kopiere det valgte området til utklippstavlen +action.image_editor.copy_all=Kopier alle +action.image_editor.copy_all.tooltip=Klikk her for å kopiere hele bildet til utklippstavle +action.image_editor.cut=Klipp ut +action.image_editor.cut.tooltip=Klikk her for å klippe det valgte området til utklippstavlen +action.image_editor.paste=Lim inn +action.image_editor.paste.tooltip=Klikk her for å lime inn utklippstavlen innhold +action.image_editor.delete=Slett +action.image_editor.delete.tooltip=Klikk her for å slette det valgte området +common.delete_selected=Slett valgte +common.search_usages=Søk etter bruk i arbeidsområde notification.plugin_load_failed.msg=Følgende programtillegg kunne ikke lastes\: notification.common.more_info=Mer informasjon notification.update_available.msg=Det finnes en ny versjon av MCreator tilgjengelig.

installerte versjon\: {0}
ny versjon\: {1} notification.patch_available.msg=Det finnes en nyere versjon av {0} tilgjengelig.

Installert versjon\: {0}.{1}
Ny versjon\: {0}.{2} notification.plugin_updates.msg=Det finnes noen tilleggsoppdateringer tilgjengelig +notification.news.title=Nyheter fra nettsiden\: {0} +notification.news.read_more=Les mer om dette +notification.news.hide=Skjul denne varslingen simple_list_entry.remove=Fjern denne enheten \ No newline at end of file diff --git a/plugins/mcreator-localization/lang/texts_pl_PL.properties b/plugins/mcreator-localization/lang/texts_pl_PL.properties index 7f2f8acd0b4..5424ef397bc 100644 --- a/plugins/mcreator-localization/lang/texts_pl_PL.properties +++ b/plugins/mcreator-localization/lang/texts_pl_PL.properties @@ -79,10 +79,10 @@ dialog.animation_maker.settings=Ustawienia animacji dialog.animation_maker.next_frame=Następna klatka dialog.animation_maker.previous_frame=Poprzednia klatka dialog.animation_maker.animation_timeline=Oś czasu animacji -dialog.animation_maker.add_frames=Dodaj klatkę(i) ... +dialog.animation_maker.add_frames=Dodaj klatkę dialog.animation_maker.add_frames_from_template=Dodaj klatki z szablonu ... -dialog.animation_maker.add_frames_from_strip=Dodaj klatki z paska animacji ... -dialog.animation_maker.add_frames_from_gif=Dodaj klatki z GIF ... +dialog.animation_maker.add_frames_from_strip=Dodaj ramki z taśmy animacyjnej... +dialog.animation_maker.add_frames_from_gif=Dodaj klatki z pliku GIF... dialog.animation_maker.gif_importing=Import GIF-a dialog.animation_maker.gif_reading=Odczytywanie GIF-a dialog.animation_maker.gif_processing=Przetwarzanie GIF-a @@ -119,9 +119,9 @@ dialog.cache_cleanup.title=Czyszczenie pamięci podręcznej Gradle dialog.cache_cleanup.progress.stopping_daemons=Zatrzymywanie akcji Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Czyszczenie folderu pamięci podręcznej Gradle dialog.cache_cleanup.progress.build_task=Uruchomiono zadanie kompilacji Gradle -dialog.code_error.compilation_desc=Co najmniej jeden z głównych plików modyfikacji nie skompilował się poprawnie.

Jest to zazwyczaj spowodowane niespójnościami w kodzie modyfikacji podczas generowania go.
MCreator może rozwiązać ten problem poprzez przetworzenie całego kodu modyfikacji ponownie.

Jeśli zablokowałeś jakieś elementy modyfikacji lub pliki bazowe modyfikacji, może to również spowodować ten błąd.


Kliknij Zregeneruj kod, aby kontynuować to działanie.
+dialog.code_error.compilation_desc=Jeden lub więcej głównych plików twojego modu nie zostało poprawnie skompilowanych.

This is usually caused by inconsistencies in the mod code during builds.
MCreator may be able to solve this for you by regenerating entire mod's code.

If you have locked mod elements or mod base files, they can cause this error too.


Click Regenerate code button to proceed with this action.
dialog.code_error.compilation_title=Błędy kompilacji głównego pliku moda -dialog.code_error.compilation_list=Twój obszar roboczy zawiera elementy modyfikacji, które nie kompilują się prawidłowo.

Przyczyną najprawdopodobniej jest ostatni element modyfikacji, który dodałeś lub edytowałeś. Spróbuj zmienić ustawienia elementów modyfikacji,
które powodują błędy kompilacji (takowe elementy są wymienione poniżej) aby spróbować naprawić problem.

Jeśli nie jesteś w stanie rozwiązać tego problemu, wyeksportuj obszar roboczy do pliku ZIP do udostępniania z menu Plik i wyślij go do nas przy użyciu
naszego narzędzia do śledzenia problemów na GitHub, abyśmy mogli spróbować Ci pomóc.

Lista elementów modyfikacji, które powodują błędy kompilacji (ograniczona do 10 elementów)\:

+dialog.code_error.compilation_list=Jeden lub więcej głównych plików twojego modu nie zostało poprawnie skompilowanych.

To zazwyczaj wynika z nieścisłości w kodzie modu podczas kompilacji.
MCreator może próbować rozwiązać ten problem poprzez ponowne wygenerowanie całego kodu modu.

Jeśli masz zablokowane elementy modu lub pliki bazowe modu, mogą one również powodować ten błąd.


Click Regenerate code button to proceed with this action.
dialog.code_error.regenerate_code=Zregeneruj kod dialog.code_error.ignore_error=Zignoruj ten błąd dialog.code_error.show_in_workspace=Pokaż w obszarze roboczym @@ -152,6 +152,7 @@ dialog.gui.button_add_title=Edytor przycisków dialog.gui.button_change_width=Po kliknięciu OK, kliknij prawym przyciskiem myszy, aby zmienić szerokość przycisku dialog.gui.button_resize=Aby zmienić rozmiar przycisku, użyj narzędzia przesuwania i kliknij prawym przyciskiem myszy podczas poruszania dialog.gui.button_text=Tekst przycisku\: +dialog.gui.button_is_undecorated=Czy przycisk jest nieozdobiony? dialog.gui.button_event_on_clicked=Po kliknięciu przycisku dialog.gui.button_display_condition=Warunek wyświetlania przycisku dialog.gui.image_button_add_title=Edytor przycisku obrazu @@ -173,6 +174,16 @@ dialog.gui.model_rotation_x=Rotacja odchylenia modelu w stopniach dialog.gui.model_follow_mouse=Podążaj za ruchem myszy z rotacją dialog.gui.add_tooltip=Edytor wskazówek dialog.gui.tooltip_display_condition=Warunek wyświetlania wskazówki +dialog.gui.anchor=Przypnij do\: +dialog.gui.anchor.top_left=Górny lewy +dialog.gui.anchor.top_center=Górny środek +dialog.gui.anchor.top_right=Górny prawy +dialog.gui.anchor.center_left=Środek po lewej +dialog.gui.anchor.center=Środek +dialog.gui.anchor.center_right=Środek prawy +dialog.gui.anchor.bottom_left=Dolny lewy +dialog.gui.anchor.bottom_center=Dolny środek +dialog.gui.anchor.bottom_right=Dolny prawy dialog.gradle_console.clear_log=Wyczyść logi dialog.gradle_console.search=Wyszukaj w konsoli gradle dialog.gradle_console.start_build=Kliknij tutaj, aby zbudować cały obszar roboczy
Możesz także użyć skrótu\: Ctrl + klikając na zakładkę Konsola @@ -327,7 +338,12 @@ dialog.image_maker.tools.types.stamp=Stempel dialog.image_maker.tools.types.stamp_description=Narzędzie do stosowania tekstur z szablonów dialog.image_maker.tools.types.threshold=Próg\: dialog.image_maker.tools.types.shape=Kształt\: +dialog.image_maker.tools.types.shape.square=KWADRAT +dialog.image_maker.tools.types.shape.frame=RAMKA +dialog.image_maker.tools.types.shape.circle=OKRĄG +dialog.image_maker.tools.types.shape.ring=PIERŚCIEŃ dialog.image_maker.tools.types.smooth_edge=Wygładzanie krawędzi +dialog.image_maker.tools.types.pick_opacity=Wybierz przezroczystość dialog.image_maker.tools.types.saturation=Nasycenie\: dialog.image_maker.tools.types.drawing_size=Rozmiar\: dialog.image_maker.tools.types.drawing_connect_points=Połącz punkty @@ -338,7 +354,14 @@ dialog.image_maker.tools.component.colorselector_swap=Zamień kolor pierwszo i d dialog.image_maker.tools.component.colorselector_select_foreground=Ustaw kolor pierwszorzędny\: dialog.image_maker.tools.component.colorselector_select_background=Ustaw kolor drugorzędny\: dialog.item_selector.title=Wybór bloku/przedmiotu +dialog.item_selector.use_selected=Użyj wybranej opcji dialog.item_selector.use_tag=Użyj tagu +dialog.item_selector.use_tag.entities=Użyj tagu jednostki +dialog.item_selector.enter_tag_name.blocks=Wprowadź poniżej nazwę tagu bloku (sprawdź listę szablonów)\:
+dialog.item_selector.enter_tag_name.items=Wprowadź poniżej nazwę tagu przedmiotu (sprawdź listę szablonów)\:
+dialog.item_selector.enter_tag_name.biomes=Wprowadź poniżej nazwę tagu biomu (sprawdź listę szablonów)\:
+dialog.item_selector.enter_tag_name.entities=Wprowadź poniżej nazwę tagu jednostki (sprawdź listę szablonów)\:
+dialog.item_selector.enter_tag_name.damage_types=Wprowadź poniżej nazwę tagu typu obrażeń (sprawdź listę szablonów)\:
dialog.item_selector.error_invalid_tag_name_title=Nieprawidłowa nazwa tagu dialog.item_selector.all=Wszystkie dialog.item_selector.blocks=Bloki @@ -347,12 +370,18 @@ dialog.item_selector.potions=Mikstury dialog.item_selector.custom_elements=Niestandardowe elementy dialog.item_selector.name=Nazwa\: dialog.item_selector.display_filter=\ Filtr wyświetlania\: +dialog.list_editor.title=Edytor listy ciągów znaków +dialog.list_editor.add=Dodaj nowy wpis +dialog.list_editor.clear=Usuń wszystkie wpisy +dialog.list_editor.validator=Wpis na liście +dialog.list_editor.errors.message=Niektóre wpisy ciągów znaków na liście nie są poprawnie zdefiniowane. +dialog.list_editor.errors.title=Nieprawidłowe wpisy na liście dialog.modelement_id.info_message=Ten element moda ma zablokowany kod\!
Gdy kod jest zablokowany, MCreator nie może zmienić jego kodu źródłowego. dialog.modelement_id.info_message_title=Kod elementu moda jest zablokowany dialog.modelement_id.registry_name=Nazwa rejestru\: dialog.modelement_id.registry_name_info=Nazwa rejestru (nie wszystkie elementy moda go używają) dialog.modelement_id.registry_name_validator=Nazwa rejestru -dialog.modelement_id.use_caution_warn=Używaj tego narzędzia z ostrożnością\!

Zmienianie nazw rejestrów może spowodować, że Twoje istniejące zapisy światów przestaną działać i doprowadzić do
konfliktów z innymi elementami Twojego moda\! +dialog.modelement_id.use_caution_warn=Używaj tego narzędzia z najwyższą ostrożnością\! Upewnij się, że nie używasz zduplikowanych nazw\!

Zmiana nazw w rejestrze może zepsuć istniejące zapisy światów i powodować
konflikty z innymi elementami modu z twojego moda\! dialog.modelement_id.id_and_registry_names="{0} - Nazwa rejestru" dialog.modelement_id.invalid_registry_name=Wprowadzona nazwa rejestru jest nieprawidłowa\!
Zmiany nie zostały zapisane. dialog.modelement_id.invalid_registry_name_title=Nieprawidłowa nazwa rejestru @@ -393,6 +422,20 @@ dialog.preferences.themes.list=
Lista dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: nieznany rodzaj właściwości +dialog.search_usages.list=Lista elementów modu używających wybranych {0}\: +dialog.search_usages.list.empty=Nie znaleziono żadnych elementów modu używających żadnych z wybranych {0}. +dialog.search_usages.open_selected=Edytuj wybrany element modułu +dialog.search_usages.title=Użycia elementu +dialog.search_usages.deletion.confirm_msg=Czy na pewno chcesz usunąć wybrane {0}?

Niektóre z wybranych {0} są wciąż używane przez poniższe elementy modułu.
Jeśli kontynuujesz usuwanie, przestrzeń robocza może zostać uszkodzona i/lub nie uda się jej zbudować\! +dialog.search_usages.deletion_safe.confirm_msg=Czy na pewno chcesz usunąć wybrane {0}?

Nie ma elementów modułu używających żadnych {0} z wybranej listy. Jednakże mogą one być wciąż używane w niestandardowym kodzie.
Jeśli kontynuujesz, te odwołania staną się nieważne, co może prowadzić do uszkodzonych zasobów lub awarii gry. +dialog.search_usages.deletion.confirm=Usuń mimo to +dialog.search_usages.type.mod_element=element modułu +dialog.search_usages.type.resource.texture=tekstura +dialog.search_usages.type.resource.model=model +dialog.search_usages.type.resource.sound=dźwięk +dialog.search_usages.type.resource.structure=struktura +dialog.search_usages.type.global_variable=zmienna globalna +dialog.search_usages.type.localization_key=klucz lokalizacji dialog.sounds.name=Nazwa dźwięku dialog.sounds.registry_name=Nazwa rejestru dźwięku\:
Jeśli zmienisz nazwę używanego dźwięku, istniejące odniesienia zostaną zepsute dialog.sounds.files=Pliki dźwięku\: @@ -427,7 +470,6 @@ dialog.textures_mapping.title_for_model=Mapowania tekstury dla modelu dialog.textures_mapping.add_new=Dodaj nowe mapowanie tekstury dialog.textures_mapping.enter_name_message=Wprowadź nazwę mapowania tekstury.
Ta nazwa jest używana do identyfikacji zestawu tekstur, gdy
wybierane jest mapowanie tekstury dla Twojego modelu. dialog.textures_mapping.enter_name_title=Nowe mapowanie tekstury -dialog.textures_mapping.jump_to=Przeskocz do ... dialog.textures_mapping.save=Zapisz mapowania dialog.textures_mapping.model_texture_part=Część tekstury modelu\:
{0} dialog.textures_mapping.confirm_deletion_message=Czy na pewno chcesz usunąć mapowanie tej tekstury?
Jeśli mapowanie jest nadal używane, możesz zepsuć tekstury\! @@ -550,7 +592,6 @@ workspace.elements.list.filter_all=Pokaż wszystkie workspace.elements.list.filter_locked=Zablokowane elementy workspace.elements.list.filter_witherrors=Elementy z błędami kompilacji workspace.elements.list.ascending=Rosnąco -workspace.category.mod_elements=Elementy moda workspace.category.resources=Zasoby workspace.category.variables=Zmienne workspace.category.localization=Tłumaczenia @@ -567,14 +608,11 @@ workspace.elements.list.edit.delete=Usuń workspace.elements.list.edit.duplicate=Zduplikuj element moda... workspace.elements.list.edit.code=Otwórz element moda w edytorze kodu workspace.elements.list.edit.lock=Zablokuj/odblokuj element moda -workspace.elements.list.edit.id=Edytuj ID elementów moda... workspace.elements.list.edit.add.folder=Dodaj nowy folder... workspace.elements.list.edit.rename.folder=Zmień nazwę wybranego folderu... -workspace.elements.confirm_delete_message=Czy jesteś pewien, że chcesz skasować zaznaczone ({0}) elementów?

Jeśli użyłeś danych wybranych elementów moda w innych elementach (np. receptury, zdarzenia, karty...)
musisz usunąć elementy, które są zależne od nich\! W przeciwnym razie otrzymasz błędy przy kompilacji.

Elementy moda znajdujące się w skasowanym folderze i podfolderach zostaną przeniesione do folderu nadrzędnego workspace.elements.delete.tooltip=Usuń wybrany element moda workspace.elements.edit_code.tooltip=Edytuj kod wybranego elementu moda workspace.elements.lock_code_tooltip=Zablokuj/odblokuj kod elementu
Po zablokowaniu kodu, MCreator nie zmieni kodu w taki sposób, aby typ moda stał się
edytowalny z widoku kodu, a kod został zachowany nawet podczas przełączania obszarów roboczych.
Użyj tego tylko jeśli zamierzasz ręcznie edytować kod i jesteś świadomy konsekwencji
blokowania kodu elementu moda\! -workspace.elements.edit_registry_names.tooltip=Edytuj ID i nazwę rejestru elementu moda workspace.elements.empty.tip=Wciśnij %1 aby dodać elementy do twojego moda workspace.elements.lock_modelement_message=Próbujesz zablokować/odblokować kod elementu moda\!

Kiedy kod jest zablokowany, MCreator nie zmieni kodu źródłowego, ale oznacza to,
że podczas aktualizacji MCreatora, poprawki błędów i aktualizacje wersji Minecraft nie zostaną
zastosowane do zablokowanych elementów.

Elementy moda, które są teraz zablokowane i wybrane, zostaną odblokowane.
Oznacza to, że każdy niestandardowy kod dla tego elementu moda zostanie zastąpiony przez MCreator'a.

Przeczytaj stronę wiki na stronie MCreator'a o blokowaniu kodu przed użyciem tej akcji. workspace.elements.lock_modelement_confirm=Zablokować/odblokować kod elementu moda? @@ -646,8 +684,6 @@ trigger.entity_tamed=Byt jest oswojony trigger.entity_travels_to_dimension=Byt podróżuje do wymiaru trigger.explosion_occurs=Pojawia się wybuch trigger.farmland_trampled=Pole uprawne zostanie zdeptane -trigger.gem_dropped=Klejnot upuszczony -trigger.gem_expired=Klejnot wygasa trigger.item_crafted=Przedmiot został wytworzony trigger.item_destroyed=Przedmiot został zniszczony trigger.item_smelted=Przedmiot jest przetapiany @@ -832,9 +868,7 @@ blockly.block.entity_get_armor_slot_item=Uzyskaj przedmiot ze slotu zbroi %1 z % blockly.block.entity_get_controlling_passenger=%2 Uzyskaj pasażera, który kontroluje %1 blockly.block.entity_get_first_passenger=%2 Uzyskaj pierwszego pasażera %1 blockly.block.entity_get_fire_ticks=Uzyskaj pozostałą ilość czasu w tickach %1 będącego podpalonym -blockly.block.entity_get_fly_speed=Uzyskaj prędkość latania %1 blockly.block.entity_get_oxygen=Uzyskaj poziom tlenu %1 -blockly.block.entity_get_root_vehicle=Uzyskaj najniższy byt, którego %1 ujeżdża, lub siebie, jeśli nie ujeżdża niczego blockly.block.entity_get_saturation=Uzyskaj poziom nasycenia jedzeniem %1 blockly.block.entity_get_scoreboard_score=Uzyskaj %2 tablicę wyników dla %1 blockly.block.entity_get_shootpower=Uzyskaj moc strzelania jeśli %1 jest pociskiem @@ -843,7 +877,8 @@ blockly.block.entity_get_spawn_x=Uzyskaj współrzędną X spawnu %1 dla bieżą blockly.block.entity_get_spawn_y=Uzyskaj współrzędną Y spawnu %1 dla bieżącego świata %2 blockly.block.entity_get_spawn_z=Uzyskaj współrzędną Z spawnu %1 dla bieżącego świata %2 blockly.block.entity_get_stepheight=Uzyskaj wysokość kroku %1 -blockly.block.entity_get_walk_speed=Uzyskaj prędkość chodu %1 +blockly.block.entity_get_walk_speed=Pobierz parametr podstawowej prędkości chodu dla %1 +blockly.block.entity_get_fly_speed=Pobierz parametr podstawowej prędkości latania dla %1 blockly.block.entity_getowner=%2 Uzyskaj właściciela %1 jeśli oswojony blockly.block.entity_getridingentity=%2 Uzyskaj byt %1 jeździ blockly.block.entity_gettargetentity=%2 Uzyskaj byt %1 obiera cel ataku @@ -856,10 +891,12 @@ blockly.block.entity_haspotioneffect=Ma %1 aktywną misksturę %2 blockly.block.entity_health=Bieżące zdrowie %1 blockly.block.entity_health_max=Maksymalne zdrowie %1 blockly.block.entity_inventory_foreach=Dla każdego slotu w ekwipunku %1 uzyskaj kopię zawartości jako %2 wykonaj %3 +blockly.block.entity_is_attackable=Może zostać zaatakowany %1 blockly.block.entity_is_elytra_flying=%1 lata elytrą blockly.block.entity_is_glowing=%1 świeci blockly.block.entity_is_swimming=%1 pływa blockly.block.entity_is_tagged_in=Jest %1 otagowany w znacznikach obiektu jako %2 +blockly.block.entity_is_underwater=Jest %1 pod wodą blockly.block.entity_isalive=%1 żyje blockly.block.entity_isbeingridden=%1 jest ujeżdżany blockly.block.entity_isblocking=%1 blokuje @@ -930,7 +967,9 @@ blockly.block.entity_set_display_name=Ustaw wyświetlaną nazwę %2 na %1 blockly.block.entity_set_fire=Podpal %2 na %1 sekund blockly.block.entity_set_flying=Spraw, by %2 latał, jeśli %1, w przeciwnym wypadku nie blockly.block.entity_set_foodlevel=Ustaw poziom jedzenia %2 na %1 +blockly.block.entity_set_gamemode=Ustaw tryb gry dla %1 na %2 blockly.block.entity_set_health=Ustaw zdrowie %2 na %1 +blockly.block.entity_set_invisible=Ustaw niewidzialność dla %1 na %2 blockly.block.entity_set_mainhand_item=Ustaw przedmiot w głównej ręce %3 na %2 %1 blockly.block.entity_set_movement=Spróbuj nadpisać wektor ruchu %4 na vx\: %1 vy\: %2 vz\: %3 blockly.block.entity_set_nogravity=Ustaw brak grawitacji %1 na %2 @@ -953,9 +992,6 @@ blockly.block.entity_submerged_height=Uzyskaj zanurzoną wysokość %1 blockly.block.entity_swing_mainhand=Machnij główną ręką %1 blockly.block.entity_swing_offhand=Machnij drugą ręką %1 blockly.block.entity_switch_dimension=Zmień wymiar %1 na %2 -blockly.block.entity_vel_x=Prędkość X %1%2 -blockly.block.entity_vel_y=Prędkość Y %1%2 -blockly.block.entity_vel_z=Prędkość Z %1%2 blockly.block.entity_xplevel=Uzyskaj poziom PD %1 blockly.block.entity_xp_until_next_level=Uzyskaj ilość PD potrzebną %1 do zdobycia poziomu blockly.block.execute_command=Wykonaj komendę /%1 na x\: %2 y\: %3 z\: %4 %5 @@ -1049,7 +1085,6 @@ blockly.block.set_time=Ustaw czas na %1 %2 blockly.block.spawn_entity=Przyzwij byt\: %4 na x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Przyzwij byt\: %6 na x\: %1 y\: %2 z\: %3 z odchyleniem\: %4 pochyleniem\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Przyzwij byt\: %9 na x\: %1 y\: %2 z\: %3 z odchyleniem\: %4 pochyleniem\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Przyzwij przedmiot/klejnot %1 na x\: %2 y\: %3 z\: %4 z opóźnieniem przed możliwością podniesienia\: %5 czy może zniknąć\: %6 %7 blockly.block.spawn_particle=Stwórz pojedynczą cząsteczkę x\: %1 y\: %2 z\: %3 z vx\: %4 vy\: %5 vz\: %6 typ\: %7 blockly.block.spawn_particle_multi=Stwórz %8 cząsteczek po stronie serwera na x\: %1 y\: %2 z\: %3 w obszarze dx\: %4 dy\: %5 dz\: %6 z prędkością %7 o typie\: %9 %10 blockly.block.spawn_xporb=Stwórz kulę PD na x\: %2 y\: %3 z\: %4 z ilością pd równą %1 %5 @@ -1124,7 +1159,6 @@ blockly.block.protect_owner=Krzywdź byty, które zaatakowały właściciela %1 blockly.block.restrict_sun=Unikaj słońca %1 blockly.block.swim=Pływaj losowo ze współczynnikiem prędkości %1 %2 blockly.block.swim_in_water=Unoś się na wodzie %1 -blockly.block.watch_closest_entity=Obserwuj najbliższy byt typu %2 w promieniu %1 %3 blockly.block.wander=Wędruj dookoła (aktywuje chodzenie) ze współczynnikiem prędkości %1 %2 blockly.block.wander_avoid_water=Wędruj dookoła i unikaj wody ze współczynnikiem prędkości %1 %2 blockly.block.biome_entered=Jeśli gracz wchodzi do biomu %1 @@ -1956,7 +1990,6 @@ elementgui.dimension.biomes_in=Biomy w tym wymiarze\: elementgui.dimension.main_filler_block=Główny blok wypełnienia\:
Normalny, Nether, End elementgui.dimension.fluid_block=Blok wypełnienia cieczy\:
Normalny, Nether, End elementgui.dimension.sleep_result=Wynik próby spania\: -elementgui.dimension.fog_air_color=Kolor nieba / mgły\:
Pozostaw DOMYŚLNY dla domyślnej obsługi wersjii Minecrafta elementgui.dimension.enable_dimension_portal=Włącz portal wymiaru\: elementgui.dimension.portal_frame_block=Blok ramki portalu\: elementgui.dimension.portal_particles=Cząsteczki ramy portalu\: @@ -1980,8 +2013,6 @@ elementgui.enchantment.curse=Czy to zaklęcie jest klątwą? elementgui.enchantment.allowed_on_books=Czy to zaklęcie jest dozwolone na książkach? elementgui.enchantment.can_generate_in_loot_tables=Czy to zaklęcie może generować się w tabelach łupów? elementgui.enchantment.can_villager_trade=Czy to zaklęcie może pojawić się w ofertach osadnika? -elementgui.enchantment.compatible_enchantments=Można połączyć z\:
Pozostaw puste, aby umożliwić łączenie z jakimkolwiek zaklęciem -elementgui.enchantment.can_apply_to=Można zastosować do\:
Pozostaw puste, aby umożliwić zastosowanie do wszystkich odpowiednich elementów elementgui.enchantment.needs_name=Zaklęcie wymaga nazwy elementgui.gamerule.name=Nazwa maszyny\: elementgui.gamerule.display_name=Nazwa reguły gry\:
Ta nazwa będzie używana dla ekranu ustawień zasad gry @@ -2127,7 +2158,6 @@ elementgui.keybind.key_procedure_triggers=Wyzwalacze procedur powiązania klucza elementgui.keybind.error_key_needs_name=Powiązanie klucza wymaga nazwy elementgui.keybind.error_key_category_needs_name=Nazwa powiązania klucza dla kategorii klucza elementgui.living_entity.disable_collisions=Wyłącz kolizje -elementgui.living_entity.has_ai=Włącz SI
Podczas używania SI upewnij się, że niektóre zadania SI zostały zdefiniowane poniżej elementgui.living_entity.immune_fire=Ogień elementgui.living_entity.immune_arrows=Strzały elementgui.living_entity.immune_fall_damage=Obrażenia od upadku @@ -2144,9 +2174,7 @@ elementgui.living_entity.spawn_dungeons=Pojawiaj się w lochach elementgui.living_entity.is_rideable=Ujeżdżalny elementgui.living_entity.control_forward=Kontrola ruchu do przodu elementgui.living_entity.control_strafe=Kontrola ruchu na boki -elementgui.living_entity.is_breedable=Utwórz ten byt typem zwierzęcia, przedmioty do rozmnażania\:
Typ podstawy bytu i zachowania zostanie zignorowany, jeśli zaznaczone elementgui.living_entity.is_tameable=Można oswoić -elementgui.living_entity.is_ranged=Spraw, aby ten byt wykonywał ataki dystansowe z przedmiotem, interwał ataku i promień\:
Dodaj przynajmniej jeden Zachowuj się agresywnie przeciwko Zadanie SI aby określić cele ataków.
Jeśli "Domyślny przedmiot" jest zaznaczony, wybierz przedmiot pociskowy lub pozostaw puste, by użyć strzały elementgui.living_entity.event_struck_by_lightning=Gdy byt zostanie trafiony piorunem elementgui.living_entity.event_mob_falls=Gdy byt upadnie elementgui.living_entity.event_mob_dies=Gdy byt umrze @@ -2157,7 +2185,6 @@ elementgui.living_entity.event_mob_tick_update=Na aktualizacji tick'u bytu elementgui.living_entity.event_player_collides_with=Gdy gracz zderzy się z tym bytem elementgui.living_entity.event_initial_spawn=Na początkowym pojawieniu się bytu elementgui.living_entity.condition_natural_spawn=Naturalne warunki pojawiania się bytu -elementgui.living_entity.behaviour=Charakterystyka zachowania (Mob jest agresywny, Stworzenie jest pasywne)\: elementgui.living_entity.creature_type=Typ stworzenia (definiuje niektóre specjalne atrybuty bytu)\: elementgui.living_entity.follow_range_tracking_range=Zasięg śledzenia, zasięg tropienia\: elementgui.living_entity.movement_speed_step_height=Prędkość ruchu, wysokość kroku\: @@ -2170,7 +2197,6 @@ elementgui.living_entity.name=Nazwa bytu\: elementgui.living_entity.entity_model=Model bytu\:
Obsługiwane\: JAVA elementgui.living_entity.entity_model_import=Kliknij tutaj, aby zaimportować teksturę modelu bytu elementgui.living_entity.texture=Tekstura bytu\:
Tekstura musi pasować do modelu (np. tekstura skórki gracza NIE jest teksturą modelu Biped) -elementgui.living_entity.glow_texture=Świecąca tekstura bytu (opcjonalne)\:
Świecąca tekstura musi pasować do modelu, jasność obrazu określa świecenie elementgui.living_entity.bounding_box=Kontury kolizji modelu bytu\:
Szerokość/Głębokość, Wysokość, Rozmiar Cienia, Przesunięcie osi Y podczas ujeżdżania bytu elementgui.living_entity.spawn_egg_options=Opcje jajka przyzywającego\:
Włączony, bazowy kolor, kolor kropki, kreatywna karta elementgui.living_entity.mob_boss=Zaznacz, jeśli chcesz, aby twój byt był bossem z paskiem zdrowia\: @@ -2196,10 +2222,8 @@ elementgui.living_entity.error_entity_model_needs_texture=Model bytu musi mieć elementgui.living_entity.error_entity_needs_name=Byt potrzebuje nazwy elementgui.living_entity.page_visual=Wizualne elementgui.living_entity.page_sound=Dźwięki -elementgui.living_entity.page_behaviour=Zachowanie elementgui.living_entity.page_ai_and_goals=SI i cele elementgui.living_entity.page_spawning=Pojawianie się -elementgui.loot_table.name=Tabela łupów elementgui.loot_table.registry_name=Nazwa rejestru tabeli łupów\:
Użyj prefiksu takiego jak bloki/, aby określić kategorię elementgui.loot_table.namespace=Przestrzeń nazw tabeli łupów\:
Użyj przestrzeni nazw Minecraft, aby zmienić podstawowe vanilla tabele łupów elementgui.loot_table.type=Typ tabeli łupów\: @@ -2354,9 +2378,7 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=Receptura na elementgui.recipe.error_brewing_no_input_ingredient_and_result=Receptura browarnicza musi posiadać zdefiniowane wejście, składnik, i wyjście (powietrze się nie liczy) elementgui.structuregen.event_structure_instance_generated=Przy generacji struktury elementgui.structuregen.import_tooltip=Kliknij to, aby zaimportować plik struktury nbt
Użyj sekcji Struktury w zakładce Obszar roboczy, aby uzyskać więcej opcji. -elementgui.structuregen.select_tooltip=Struktura do wygenerowania\:
Aby uzyskać więcej opcji importowania struktur, użyj sekcji struktur obszaru roboczego elementgui.structuregen.ignore_blocks=Bloki do zignorowania podczas umieszczania\: -elementgui.structuregen.error_select_structure_spawn=Musisz wybrać strukturę, która zostanie wygenerowana przez ten spawn struktury, aby kontynuować. elementgui.tab.name=Nazwa zakładki kreatywnej\: elementgui.tab.icon=Ikona zakładki\: elementgui.tab.search_bar=Pokaż pasek wyszukiwania\: @@ -2423,11 +2445,6 @@ workspace.resources.tab.structures=Struktury workspace.resources.tab.screenshots=Zrzuty ekranu workspace.textures.new=Utwórz nową teksturę workspace.textures.import=Importuj tekstury -workspace.textures.edit_selected=Edytuj wybrane... -workspace.textures.duplicate_selected=Duplikuj zaznaczone ... -workspace.textures.delete_selected=Usuń zaznaczone -workspace.textures.export_selected=Eksportuj zaznaczone ... -workspace.textures.confirm_deletion_message=Czy na pewno chcesz usunąć ten plik?
UWAGA\: Jeśli użyjesz tego pliku gdziekolwiek indziej, możesz mieć uszkodzone tekstury\! workspace.textures.select_dupplicate_type=Wybierz typ tekstury, w który chcesz zduplikować\: workspace.textures.select_texture_type=Jakim rodzajem tekstury jest ten plik? workspace.textures.category.block=Tekstury dla bloków\: @@ -2439,47 +2456,29 @@ workspace.textures.category.screen=Tekstury dla ekranów (osiągnięcia, GUI, na workspace.textures.category.armor=Tekstury dla zbroi\: workspace.textures.category.other=Inne tekstury (obrazy, logo moda, ...)\: workspace.3dmodel.description={0}
Mapowanie tekstury\: {1} -workspace.3dmodels.edit_texture_mappings=Edytuj mapowanie tekstury ... -workspace.3dmodels.redefine_animations=Redefiniuj animacje modelu... -workspace.3dmodels.delete_selected=Usuń zaznaczone -workspace.3dmodels.delete_confirm_message=Czy na pewno chcesz usunąć ten model?
UWAGA\: Jeśli użyjesz tego modelu gdziekolwiek, możesz mieć uszkodzone tekstury
, i niektóre elementy moda mogą się nie kompilować\! -workspace.3dmodels.regenerating_code=Regenerowanie kodu -workspace.3dmodels.regenerating_entity_code=Regenerowanie kodu bytów -workspace.3dmodels.rebuilding_workspace=Odbudowywanie obszaru roboczego workspace.3dmodels.animation_unsupported_title=Animacje nie są wspierane workspace.3dmodels.animation_unsupported_message=Ten model nie obsługuje animacji\! workspace.3dmodels.mappings_unsupported_title=Brak mapowania workspace.3dmodels.mappings_unsupported_message=Ten model nie obsługuje mapowania tekstur\! -workspace.sounds.confirm_deletion_message=Czy jesteś pewien, że chcesz usunąć ten dźwięk?
UWAGA\: Jeśli użyjesz tego dźwięku gdziekolwiek, już nie będzie działać\! -workspace.sounds.edit_selected=Edytuj zaznaczone ... workspace.sounds.play_selected=Odtwórz zaznaczone -workspace.sounds.delete_selected=Usuń zaznaczone workspace.sounds.category=Kategoria dźwięku\: {0} workspace.sounds.files=Pliki dźwiękowe\: {0} workspace.sounds.subtitle_and_category=Napisy\: {0}, Kategoria dźwięku\: {1} -workspace.screenshots.export_selected=Eksportuj zaznaczone ... -workspace.screenshots.delete_selected=Usuń zaznaczone workspace.screenshots.action_complete=Czynność zakończona workspace.screenshots.use_background_message=Wybrane zrzuty ekranu będą używane jako potencjalne tło przy następnym uruchomieniu. -workspace.screenshots.use_as_background=Użyj zaznaczonego jako tło MCreator'a... -workspace.structure.confirm_deletion_message=Czy jesteś pewien, że chcesz usunąć wybrane struktury?
UWAGA\: Jeśli użyjesz ich gdziekolwiek indziej, już się więcej nie pojawią\! workspace.variables.variable_name=Nazwa zmiennej workspace.variables.variable_type=Typ zmiennej workspace.variables.variable_scope=Zakres zmiennej workspace.variables.initial_value=Wartość początkowa workspace.variables.add_new=Dodaj nową zmienną -workspace.variables.remove_selected=Usuń zaznaczone workspace.variables.help=Pomoc ze zmiennymi workspace.variables.change_type=Czy na pewno chcesz zmienić tę zmienną?
Jeśli ta zmienna jest w użyciu, ta akcja może spowodować błędy kompilacji.
Jeśli właśnie ją stworzyłeś, to nie ma żadnego problemu, aby ją zmienić. -workspace.variables.remove_variable_confirmation=Czy na pewno chcesz usunąć wybrane zmienne?
Jeśli ta zmienna jest w użyciu, ta akcja może spowodować błędy kompilacji. workspace.localization.add_entry=Dodaj wpis tłumaczenia -workspace.localization.remove_selected=Usuń zaznaczone workspace.localization.export_to_csv=Eksportuj bieżący język do pliku CSV workspace.localization.import_csv=Importuj plik CSV do bieżącego języka workspace.localization.key_name_title=Kluczowa nazwa workspace.localization.key_name_message=Wprowadź nazwę kluczową dla wpisu w niestandardowym języku\: workspace.localization.confirm_delete_map=Czy na pewno chcesz usunąć tę mapę tłumaczeniową? -workspace.localization.confirm_delete_entry=Czy na pewno chcesz usunąć wybrane wpisy?
UWAGA\: Jeśli one nadal są w użyciu, nazwy elementów z nimi związanych nie zadziałają\! workspace.localization.export_translation=Eksportuj tłumaczenie workspace.localization.confirm_export=Domyślne tłumaczenie (en_us) nie może być eksportowane\!
Angielskie teksty są zdefiniowane w elementach moda. workspace.localization.warning_export=Nie można zaimportować CSV do domyślnego tłumaczenia (en_us)\!
Teksty w języku angielskim są zdefiniowane w elementach moda. diff --git a/plugins/mcreator-localization/lang/texts_pt_BR.properties b/plugins/mcreator-localization/lang/texts_pt_BR.properties index bb2bd02ed50..d0ff05771fc 100644 --- a/plugins/mcreator-localization/lang/texts_pt_BR.properties +++ b/plugins/mcreator-localization/lang/texts_pt_BR.properties @@ -6,8 +6,10 @@ dialog.accelerators.title=Acelerador de mapa dialog.workspace_selector.new_workspace=Novo projeto... dialog.workspace_selector.open_workspace=Abrir projeto... dialog.workspace_selector.import=Importar projeto do arquivo... +dialog.workspace_selector.recent_workspace={0}
Último aberto em\: {2}
Local\: {1} dialog.workspace_selector.no_workspaces_loaded=
Falha ao carregar os atalhos dos projetos
recentes. Reabra-os para adicioná-los
à lista novamente. dialog.workspace_selector.no_workspaces=Sem áreas de trabalho recentes +dialog.workspace_selector.version=Versão {0} dialog.workspace_selector.preferences=Configurações dialog.workspace_selector.donate=Doar para os desenvolvedores dialog.workspace_selector.news=Últimas notícias do site do MCreator\: @@ -77,8 +79,8 @@ dialog.animation_maker.settings=Configurações da animação dialog.animation_maker.next_frame=Quadro seguinte dialog.animation_maker.previous_frame=Quadro anterior dialog.animation_maker.animation_timeline=Linha do tempo da animação -dialog.animation_maker.add_frames=Adicionar quadro(s) ... -dialog.animation_maker.add_frames_from_template=Adicionar quadros a partir do modelo ... +dialog.animation_maker.add_frames=Adicionar quadros... +dialog.animation_maker.add_frames_from_template=Adicionar quadros a partir do modelo... dialog.animation_maker.add_frames_from_strip=Adicionar quadros de uma faixa de animação... dialog.animation_maker.add_frames_from_gif=Adicionar quadros a partir de um GIF... dialog.animation_maker.gif_importing=importação de GIF @@ -117,9 +119,7 @@ dialog.cache_cleanup.title=Limpeza de caches Gradle dialog.cache_cleanup.progress.stopping_daemons=Parando de executar Gradle daemons dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Limpando a pasta de caches do Gradle dialog.cache_cleanup.progress.build_task=Executando tarefa de compilação Gradle -dialog.code_error.compilation_desc=Um ou mais dos seus principais arquivos do mod não compilaram corretamente.

Isso geralmente é causado por inconsistências no código do mod durante compilações.
O MCreator pode resolver esse problema para você regenerando o código do mod inteiro.

Se você tiver elementos do mod bloqueados ou arquivos de base do mod, eles também podem causar este erro.


Clique no botão Regenerar código para prosseguir com esta ação.
dialog.code_error.compilation_title=Erros de compilação dos arquivos principais do mod -dialog.code_error.compilation_list=Seu espaço de trabalho contém elementos mod que não compilam corretamente.

Isso provavelmente foi causado pelo último elemento mod que você adicionou ou editou. Tente alterar as configurações dos elementos mod
que causam erros de compilação (tais elementos estão listados abaixo) para tentar corrigir esse problema.

Se você não conseguir resolver esse problema, exporte o espaço de trabalho para um arquivo ZIP compartilhável do menu Arquivo e envie-o para nós através do
nosso rastreador de problemas no GitHub para que possamos tentar ajudá-lo.

Lista de elementos mod que causam erros de compilação (reduzidos para até 10 elementos)\:

dialog.code_error.regenerate_code=Regenerar código dialog.code_error.ignore_error=Ignorar erro dialog.code_error.show_in_workspace=Mostrar no Projeto @@ -343,7 +343,6 @@ dialog.modelement_id.info_message_title=O código do elemento da mod está bloqu dialog.modelement_id.registry_name=Nome de registro\: dialog.modelement_id.registry_name_info=Nome de registro (nem todos os elementos da mod usam isso) dialog.modelement_id.registry_name_validator=Nome de registro -dialog.modelement_id.use_caution_warn=Utilize esta ferramenta com cuidado\!

Alterar nomes de registro pode quebrar seus mundos existentes
e causar conflitos com outros elementos de mod do seu mod\! dialog.modelement_id.id_and_registry_names="{0} - Nome de registro" dialog.modelement_id.invalid_registry_name=O nome de registro que você inseriu não é válido\!
As alterações não foram salvas. dialog.modelement_id.invalid_registry_name_title=Nome de registro inválido @@ -414,7 +413,6 @@ dialog.textures_mapping.title_for_model=Mapeamentos de textura para modelo dialog.textures_mapping.add_new=Adicionar novo mapeamento de textura dialog.textures_mapping.enter_name_message=Digite seu nome de mapeamento de texturas.
Este nome é usado para identificar o seu conjunto de texturas quando
selecionar uma mapeamento de textura para o seu modelo. dialog.textures_mapping.enter_name_title=Novo mapeamento de textura -dialog.textures_mapping.jump_to=Ir para ... dialog.textures_mapping.save=Salvar mapeamento dialog.textures_mapping.model_texture_part=Parte de textura do modelo\:
{0} dialog.textures_mapping.confirm_deletion_message=Você tem certeza que deseja excluir este mapeamento de texturas?
Você pode obter texturas quebradas se o mapeamento ainda estiver em uso\! @@ -535,7 +533,6 @@ workspace.elements.list.filter_all=Mostrar tudo workspace.elements.list.filter_locked=Elementos travados workspace.elements.list.filter_witherrors=Elementos com erros de compilação workspace.elements.list.ascending=Crescente -workspace.category.mod_elements=Elementos do mod workspace.category.resources=Recursos workspace.category.variables=Variáveis workspace.category.localization=Localização @@ -552,14 +549,11 @@ workspace.elements.list.edit.delete=Deletar workspace.elements.list.edit.duplicate=Duplicar elemento do mod... workspace.elements.list.edit.code=Abrir o elemento do mod no editor de código workspace.elements.list.edit.lock=Bloquear/desbloquear o elemento do mod -workspace.elements.list.edit.id=Editar IDs do elemento do mod... workspace.elements.list.edit.add.folder=Adicionar nova pasta... workspace.elements.list.edit.rename.folder=Renomeie a pasta selecionada... -workspace.elements.confirm_delete_message=Tem certeza que deseja excluir os elementos selecionados ({0})?

Se você usou os dados dos elementos de mod selecionados em outros elementos de mod (como receita, em evento, como aba, . .) você
tem que excluir elementos que dependem deste também\! Caso contrário, você terá erros de construção.

Elementos de Mod na pasta excluída e subpastas serão movidos para a pasta principal workspace.elements.delete.tooltip=Deletar o elemento selecionado workspace.elements.edit_code.tooltip=Editar o código do elemento selecionado workspace.elements.lock_code_tooltip=Bloquear/desbloquear o código do elemento
Quando você bloqueia o código, o MCreator não vai alterar o código, então o tipo de mod se torna
editável na visualização de código e o código é preservado mesmo quando mudar de workspace.
Use isto apenas se você pretende editar o código manualmente e está ciente das consequências
de bloquear/desbloquear o código de um elemento de mod\! -workspace.elements.edit_registry_names.tooltip=Editar o ID e nome de registro do elemento selecionado workspace.elements.empty.tip=Pressione %1 para adicionar elementos no mod workspace.elements.lock_modelement_message=Você está tentando trancar/destrancar o código do elemento\!

Quando o código é trancado, o MCreator não irá mudar o código-fonte, mas isso quer dizer
que quando atualizar o MCreator, correções de bugs e atualizações do Minecraft não serão
aplicadas aos elementos trancados

Os elementos que estão trancados e selecionados agora serão destrancados.
Isso quer dizer que qualquer código personalizado para esses elementos serão sobrescritos pelo MCreator.

Por favor leia a wiki no site do MCreator sobre trancar códigos antes de fazer essa ação. workspace.elements.lock_modelement_confirm=Bloquear/desbloquear código do elemento do mod? @@ -629,8 +623,6 @@ trigger.entity_tamed=Entidade é domesticada trigger.entity_travels_to_dimension=Entidade viaja para dimensão trigger.explosion_occurs=Ocorre uma explosão trigger.farmland_trampled=A terra arada é esmagada -trigger.gem_dropped=Item largado -trigger.gem_expired=Algo dropado some trigger.item_crafted=Item é criado(craftado) trigger.item_destroyed=Item é destruido trigger.item_smelted=Item é cozinhado/assado @@ -808,14 +800,11 @@ blockly.block.entity_get_armor_slot_item=Pegue o item do slot de armadura %1 de blockly.block.entity_get_controlling_passenger=%2 Obter o passageiro que está controlando %1 blockly.block.entity_get_first_passenger=%2 Obtém o primeiro passageiro de %1 blockly.block.entity_get_fire_ticks=Obter ticks em fogo restantes de %1 -blockly.block.entity_get_fly_speed=Receber velocidade de voo de %1 blockly.block.entity_get_oxygen=Receber oxigênio de %1 -blockly.block.entity_get_root_vehicle=Obter a entidade mais baixa que %1 está montando, ou você mesmo se não estiver montando em nada blockly.block.entity_get_saturation=Obter nível de saturação de comida de %1 blockly.block.entity_get_scoreboard_score=Pegue a tabela de score de %2 score\: %1 blockly.block.entity_get_shootpower=Obter poder de tiro se %1 é um projétil blockly.block.entity_get_slot=Pegua a cópia do item no slot %1 de %2 se ele ter inventario -blockly.block.entity_get_walk_speed=Receber velocidade de andar de %1 blockly.block.entity_getowner=%2 Obter o dono de %1 se domesticado blockly.block.entity_getridingentity=Se a entidade %1 está montada blockly.block.entity_gettargetentity=Pegue o alvo de ataque de %1 @@ -920,9 +909,6 @@ blockly.block.entity_stop_navigation=Tentar de parar a navegação de %1 blockly.block.entity_submerged_height=Pegue a altura submersa de %1 blockly.block.entity_swing_mainhand=Balanço da mão principal de %1 blockly.block.entity_swing_offhand=Balanço da mão secundaria de %1 -blockly.block.entity_vel_x=Velocidade X de %1 %2 -blockly.block.entity_vel_y=Velocidade Y de %1 %2 -blockly.block.entity_vel_z=Velocidade Z de %1 %2 blockly.block.entity_xplevel=Pegue o nível de XP de %1 blockly.block.entity_xp_until_next_level=Obtenha a quantidade de XP necessária para %1 para ganhar um nível blockly.block.execute_command=Executar comando /%1 no x\: %2 y\: %3 z\: %4 %5 @@ -1014,7 +1000,6 @@ blockly.block.set_time=Definir horário para %1 %2 blockly.block.spawn_entity=Invocar entidade\: %4 em x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Invocar entidade\: %6 em x\: %1 y\: %2 z\: %3 com grau\: %4 tom\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Invocar entidade\: %9 no x\: %1 y\: %2 z\: %3 com grau\: %4 tom\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Invocar item/gema %1 no x\: %2 y\: %3 z\: %4 atraso para pegar\: %5 sumir\: %6 %7 blockly.block.spawn_particle=Spawnar partícula única em x\: %1 y\: %2 z\: %3 com vx\: %4 vy\: %5 vz\: %6 tipo\: %7 blockly.block.spawn_particle_multi=Invocar %8 partículas no servidor em x\: %1 y\: %2 z\: %3 na área de dx\: %4 dy\: %5 dz\: %6 com velocidade de %7 tipo\: %9 %10 blockly.block.spawn_xporb=Invocar orbe de XP no x\: %2 y\: %3 z\: %4 com quantidade de XP de %1 %5 @@ -1077,7 +1062,6 @@ blockly.block.move_indoors=Mover para interiores, se possível %1 blockly.block.panic_when_attacked=Panico quando atacado com fator de velocidade de %1 %2 blockly.block.swim=Nadar aleatoriamente com fator de velocidade %1 %2 blockly.block.swim_in_water=Flutuando na água %1 -blockly.block.watch_closest_entity=Ver entidade mais próxima do tipo %2 no raio %1 %3 blockly.block.wander=Viajar ao redor (habilita a caminhada) com fator de velocidade %1 %2 blockly.block.wander_avoid_water=Andar ao redor e evitar a água com fator de velocidade %1 %2 blockly.block.biome_entered=Se jogador entrar no bioma %1 @@ -1702,7 +1686,6 @@ elementgui.dimension.biomes_in=Biomas nesta dimensão\: elementgui.dimension.main_filler_block=Bloco de filtro principal\:
Normal, Nether, End elementgui.dimension.fluid_block=Bloco de fluído\:
Normal, Nether, End elementgui.dimension.sleep_result=Resultado da tentativa de sono\: -elementgui.dimension.fog_air_color=Substituição de cor do céu/nevoso\:
Deixe sem FAULT para manipulação padrão em cada versão do Minecraft elementgui.dimension.enable_dimension_portal=Ativar portal de dimensão\: elementgui.dimension.portal_frame_block=Bloco de estrutura do Portal\: elementgui.dimension.portal_igniter_name=Nome do item ignitor do portal\: @@ -1721,8 +1704,6 @@ elementgui.enchantment.curse=Este encantamento é amaldiçoado? elementgui.enchantment.allowed_on_books=Este encantamento é permitido nos livros? elementgui.enchantment.can_generate_in_loot_tables=Esse encantamento pode gerar em baús de looteamento? elementgui.enchantment.can_villager_trade=Esse encantamento pode aparecer em trocas de villager? -elementgui.enchantment.compatible_enchantments=Pode ser combinado com\:
Deixe em branco para permitir a combinação com qualquer encantamento -elementgui.enchantment.can_apply_to=Pode ser aplicado a\:
Deixe em branco para permitir aplicar todos os itens aplicáveis elementgui.enchantment.needs_name=Encantamento precisa de um nome elementgui.gamerule.name=Nome da máquina\: elementgui.gamerule.display_name=Nome da regra de jogo\:
Isso será usado na tela de configurações das regras de jogo @@ -1846,7 +1827,6 @@ elementgui.keybind.key_procedure_triggers=Gatilhos de procedimento da tecla-chav elementgui.keybind.error_key_needs_name=A tecla-chave precisa de um nome elementgui.keybind.error_key_category_needs_name=Nome chave da categoria da tecla-chave elementgui.living_entity.disable_collisions=Desativar push de entidades (colisões) -elementgui.living_entity.has_ai=Habilitar IA
Ao usar IA, certifique-se de ter algumas tarefas de IA definidas abaixo elementgui.living_entity.immune_fire=Fogo elementgui.living_entity.immune_arrows=Flechas elementgui.living_entity.immune_fall_damage=Dano de Queda @@ -1874,7 +1854,6 @@ elementgui.living_entity.event_mob_tick_update=Na atualização de tick da entid elementgui.living_entity.event_player_collides_with=Quando o jogador colidir com esta entidade elementgui.living_entity.event_initial_spawn=No spawn inicial da entidade elementgui.living_entity.condition_natural_spawn=Condição de geração de entidades naturas -elementgui.living_entity.behaviour=Características do comportamento (Mob é agressivo, a criatura é passiva)\: elementgui.living_entity.creature_type=Tipo de criatura (define alguns atributos especiais da entidade)\: elementgui.living_entity.is_immune_to=Entidade imune a\: elementgui.living_entity.ridable=Marque para tornar esta entidade montada pelo jogador
Você pode opcionalmente ativar os controles de entidade vivas também @@ -1884,7 +1863,6 @@ elementgui.living_entity.name=Nome da entidade\: elementgui.living_entity.entity_model=Modelo da Entidade\:
Suportado\: JAVA elementgui.living_entity.entity_model_import=Clique aqui para importar a textura do modelo de entidade elementgui.living_entity.texture=Textura da entidade\:
A Textura precisa se encaixar no modelo (por exemplo, textura de skin do jogador NÃO é textura do modelo bípede) -elementgui.living_entity.glow_texture=Textura brilhante para a entidade (opcional)\:
Textura brilhante precisa se adequar ao modelo, o brilho da imagem determina o brilho elementgui.living_entity.bounding_box=Caixa delimitadora do modelo da entidade\:
Largura/Profundidade, Alto, Tamanho da Sombra, Deslocamento Y de montar da entidade elementgui.living_entity.spawn_egg_options=Opções de ovo de geração\:
Habilitar, cor base, cor dos pontos, aba criativa elementgui.living_entity.mob_boss=Selecione se você quer que a sua entidade seja chefe com barra de saúde\: @@ -1906,10 +1884,8 @@ elementgui.living_entity.bind_to_gui=Vincular esta entidade à GUI\:
Tamanho do inventário (contagem de slot)\:
Defina este valor como a maior ID do slot na GUI + 1 elementgui.living_entity.error_entity_model_needs_texture=O modelo da entidade precisa ter uma textura elementgui.living_entity.error_entity_needs_name=A entidade precisa de um nome -elementgui.living_entity.page_behaviour=Comportamento elementgui.living_entity.page_ai_and_goals=IA e objetivos elementgui.living_entity.page_spawning=Invocar/spawning -elementgui.loot_table.name=Tabela de loot elementgui.loot_table.registry_name=Nome de registro da tabela de saque\:
Use prefixos como "blocks/" para especificar uma categoria elementgui.loot_table.namespace=espaço de nome da tabela de loots\:
Use espaços de nome do minecraft para alterar as tabelas de loot do Vanilla elementgui.loot_table.type=Tipo de tabela de loot\: @@ -2038,9 +2014,7 @@ elementgui.recipe.xp_reward=Recompensa de XP\: elementgui.recipe.cooking_time=Tempo de cozimento\: elementgui.structuregen.event_structure_instance_generated=Na instância de estrutura gerada elementgui.structuregen.import_tooltip=Clique aqui para importar o arquivo de estrutura de nbt
Use a seção Estruturas na guia Área de Trabalho para mais opções. -elementgui.structuregen.select_tooltip=Estrutura para gerar\:
Para mais opções de importação de estruturas, utilize a seção seção de estruturas da área de trabalho elementgui.structuregen.ignore_blocks=Blocos a ignorar ao colocar\: -elementgui.structuregen.error_select_structure_spawn=Você precisa selecionar uma estrutura que será gerada por essa estrutura para prosseguir. elementgui.tab.name=Nome da aba criativa\: elementgui.tab.icon=Ícone da aba\: elementgui.tab.search_bar=Mostrar barra de pesquisa\: @@ -2088,11 +2062,6 @@ workspace.resources.tab.structures=Estruturas workspace.resources.tab.screenshots=Capturas de Tela workspace.textures.new=Criar nova textura workspace.textures.import=Importar texturas -workspace.textures.edit_selected=Editar selecionado... -workspace.textures.duplicate_selected=Duplicar selecionado ... -workspace.textures.delete_selected=Excluir Selecionados -workspace.textures.export_selected=Exportar selecionado... -workspace.textures.confirm_deletion_message=Você tem certeza que deseja excluir este arquivo?
NOTA\: Se você usar este arquivo em algum lugar, você pode ter textos quebrados\! workspace.textures.select_dupplicate_type=Selecione o tipo de textura em que gostaria de duplicar\: workspace.textures.select_texture_type=Que tipo de textura é este arquivo? workspace.textures.category.block=Texturas para blocos\: @@ -2103,47 +2072,29 @@ workspace.textures.category.particle=Texturas para partículas\: workspace.textures.category.screen=Textura para telas (conquistas, GUIs, sobreposições, ...)\: workspace.textures.category.armor=Texturas para armaduras\: workspace.textures.category.other=Outras texturas (pinturas, logotipo do mod, ...)\: -workspace.3dmodels.edit_texture_mappings=Editar mapeamentos de textura... -workspace.3dmodels.redefine_animations=Redefinir animações do modelo... -workspace.3dmodels.delete_selected=Excluir Selecionados -workspace.3dmodels.delete_confirm_message=Você tem certeza que quer deletar esse modelo?
NOTA\: se você usar esse modelo em qualquer lugar, você vai ter texturas quebradas
e alguns elementos do mod não vão compilar\! -workspace.3dmodels.regenerating_code=Regenerando código -workspace.3dmodels.regenerating_entity_code=Regenerando código de entidades -workspace.3dmodels.rebuilding_workspace=Recompilando workspace workspace.3dmodels.animation_unsupported_title=Animações não suportadas workspace.3dmodels.animation_unsupported_message=Este modelo não suporta animações\! workspace.3dmodels.mappings_unsupported_title=Nenhum mapeamento workspace.3dmodels.mappings_unsupported_message=Este modelo não suporta mapeamento de texturas\! -workspace.sounds.confirm_deletion_message=Você tem certeza que deseja excluir este som?
NOTA\: Se você usar este som em qualquer lugar, ele não funcionará mais\! -workspace.sounds.edit_selected=Editar selecionado... workspace.sounds.play_selected=Reproduzir selecionados -workspace.sounds.delete_selected=Excluir Selecionados workspace.sounds.category=Categoria sonora\: {0} workspace.sounds.files=Arquivos de som\: {0} workspace.sounds.subtitle_and_category=Subtítulo\: {0}, Categoria de som\: {1} -workspace.screenshots.export_selected=Exportar selecionado... -workspace.screenshots.delete_selected=Excluir Selecionados workspace.screenshots.action_complete=Ação concluída workspace.screenshots.use_background_message=As capturas de tela selecionadas serão usadas como plano de fundo na próxima vez que abrir o MCreator. -workspace.screenshots.use_as_background=Utilizar como fundo do MCreator ... -workspace.structure.confirm_deletion_message=Você tem certeza que deseja excluir as estruturas selecionadas?
NOTA\: Se você usá-las em qualquer lugar, elas não vão mais aparecer\! workspace.variables.variable_name=Nome da variável workspace.variables.variable_type=Tipo da variável workspace.variables.variable_scope=Escopo de variável workspace.variables.initial_value=Valor inicial workspace.variables.add_new=Adicionar nova variável -workspace.variables.remove_selected=Remover selecionados workspace.variables.help=Ajuda com variáveis workspace.variables.change_type=Tem certeza que deseja alterar esta variável?
Se essa variável estiver em uso, essa ação pode causar erros de compilação.
Se você acabou de criá-lo, é perfeitamente bom alterá-lo. -workspace.variables.remove_variable_confirmation=Tem certeza que deseja excluir esta variável?
Se esta variável estiver em uso, esta ação pode causar erros de compilação. workspace.localization.add_entry=Adicionar entrada de localização -workspace.localization.remove_selected=Remover selecionados workspace.localization.export_to_csv=Exportar idioma atual para CSV workspace.localization.import_csv=Importar CSV para o idioma atual workspace.localization.key_name_title=Nome da Chave workspace.localization.key_name_message=Digite o nome da chave para sua entrada de idioma personalizada\: workspace.localization.confirm_delete_map=Você tem certeza que deseja deletar este mapa de localização? -workspace.localization.confirm_delete_entry=Tem certeza que deseja remover as entradas selecionadas?
NOTA\: Se eles ainda estão em uso, os nomes de elementos vinculados a eles não funcionarão\! workspace.localization.export_translation=Exportar tradução workspace.localization.confirm_export=Tradução padrão (en_us) não pode ser exportada\!
Textos em inglês são definidos em elementos de moderação. workspace.localization.warning_export=Você não pode importar CSV para tradução padrão (en_us)\!
Textos em inglês estão definidos em elementos de mods. diff --git a/plugins/mcreator-localization/lang/texts_pt_PT.properties b/plugins/mcreator-localization/lang/texts_pt_PT.properties index 5238e92b03e..5ebcecaeb85 100644 --- a/plugins/mcreator-localization/lang/texts_pt_PT.properties +++ b/plugins/mcreator-localization/lang/texts_pt_PT.properties @@ -76,10 +76,6 @@ dialog.animation_maker.settings=Configurações da animação dialog.animation_maker.next_frame=Quadro seguinte dialog.animation_maker.previous_frame=Quadro anterior dialog.animation_maker.animation_timeline=Linha temporal da animação -dialog.animation_maker.add_frames=Adicionar quadro(s) ... -dialog.animation_maker.add_frames_from_template=Adicionar quadros a partir de um modelo ... -dialog.animation_maker.add_frames_from_strip=Adicionar quadros de uma faixa de animação... -dialog.animation_maker.add_frames_from_gif=Adicionar quadros a partir de um GIF... dialog.animation_maker.gif_importing=A importar o GIF dialog.animation_maker.gif_reading=A ler o GIF dialog.animation_maker.gif_processing=A processar o GIF @@ -116,9 +112,7 @@ dialog.cache_cleanup.title=Limpeza de caches Gradle dialog.cache_cleanup.progress.stopping_daemons=Parando a execução de daemons do Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Limpando a pasta de caches do Gradle dialog.cache_cleanup.progress.build_task=Executando tarefa de compilação Gradle -dialog.code_error.compilation_desc=Um ou mais dos seus principais arquivos de mod não compilaram corretamente.

Isso geralmente é causado por inconsistências no mod código durante compilações.
O MCreator pode resolver esse problema para você regenerando o código do mod inteiro.

Se você tiver um mod bloqueado ou arquivos de base de mods, eles também podem causar este erro.


Clique botão Regerar código para prosseguir com esta ação.
dialog.code_error.compilation_title=Erros ao compilar os ficheiros principais do mod -dialog.code_error.compilation_list=O seu ambiente de trabalho contém elementos do mod que não foram compilados corretamente.

Isto normalmente ocorre por causa do último elemento de mod que você adicionou ou editou. Tente alterar os elementos do mod
que causam erros de compilação (como os elementos que estão listados abaixo) para tentar resolver esse problema.

Se não conseguir resolver este problema, exporte o ambiente de trabalho para um arquivo ZIP compartilhável pelo menu Arquivo e envie-o para nós através do
rastreador de problemas no nosso website para tentarmos ajudá-lo.

Lista de elementos de mod que causam erros de compilação (separado por 10 elementos)\:

dialog.code_error.regenerate_code=Regenerar código dialog.code_error.ignore_error=Ignorar erro dialog.code_error.show_in_workspace=Mostrar no ambiente de trabalho @@ -331,7 +325,6 @@ dialog.modelement_id.info_message_title=O código deste elemento do mod está bl dialog.modelement_id.registry_name=Nome de registo\: dialog.modelement_id.registry_name_info=Nome de registo (nem todos os elementos do mod usam isto) dialog.modelement_id.registry_name_validator=Nome de registo -dialog.modelement_id.use_caution_warn=Use esta ferramenta com cuidado\!

Alterar Ids pode danificar os seus mundos existentes e causar
conflitos com outros elementos do seu mod\! dialog.modelement_id.id_and_registry_names="{0} - Nome do Registro" dialog.modelement_id.invalid_registry_name=O nome de registo que inserido não é válido\!
As alterações não foram guardadas. dialog.modelement_id.invalid_registry_name_title=Nome de registo inválido @@ -396,7 +389,6 @@ dialog.textures_mapping.title_for_model=Mapeamento de texturas para o modelo dialog.textures_mapping.add_new=Adicionar novo mapeamento de texturas dialog.textures_mapping.enter_name_message=Insira o seu nome de mapeamento de texturas.
Este nome é usado para identificar o seu conjunto de texturas quando
selecionar um mapeamento de texturas para o seu modelo. dialog.textures_mapping.enter_name_title=Novo mapeamento de texturas -dialog.textures_mapping.jump_to=Saltar para ... dialog.textures_mapping.save=Gravar mapeamento dialog.textures_mapping.model_texture_part=Parte de textura do modelo\:
{0} dialog.textures_mapping.confirm_deletion_message=Tem certeza que pretende excluir este mapeamento de texturas?
Pode obter texturas estragadas se o mapeamento ainda estiver em uso\! @@ -513,7 +505,6 @@ workspace.elements.list.filter_all=Mostrar tudo workspace.elements.list.filter_locked=Elementos travados workspace.elements.list.filter_witherrors=Elementos com erros de compilação workspace.elements.list.ascending=Crescente -workspace.category.mod_elements=Elementos do mod workspace.category.resources=Recursos workspace.category.variables=Variáveis workspace.category.localization=Localização @@ -529,14 +520,11 @@ workspace.elements.list.edit.delete=Deletar workspace.elements.list.edit.duplicate=Duplicar elemento do mod... workspace.elements.list.edit.code=Abrir o elemento do mod no editor de código workspace.elements.list.edit.lock=Bloquear/desbloquear o elemento do mod -workspace.elements.list.edit.id=Editar IDs do elemento do mod... workspace.elements.list.edit.add.folder=Adicionar nova pasta... workspace.elements.list.edit.rename.folder=Renomeie a pasta selecionada... -workspace.elements.confirm_delete_message=Tem certeza que deseja excluir os elementos selecionados ({0})?

Se você usou os dados dos elementos de mod selecionados em outros elementos de mod (como receita, em evento, como aba, . .) você
tem que excluir elementos que dependem deste também\! Caso contrário, você terá erros de construção.

Elementos de Mod na pasta excluída e subpastas serão movidos para a pasta principal workspace.elements.delete.tooltip=Deletar o elemento selecionado workspace.elements.edit_code.tooltip=Editar o código do elemento selecionado workspace.elements.lock_code_tooltip=Bloquear/desbloquear o código do elemento
Quando você bloqueia o código, o MCreator não vai alterar o código, então o tipo de mod se torna
editável na visualização de código e o código é preservado mesmo quando mudar de workspace.
Use isto apenas se você pretende editar o código manualmente e está ciente das consequências
de bloquear/desbloquear o código de um elemento de mod\! -workspace.elements.edit_registry_names.tooltip=Editar o ID e nome de registro do elemento selecionado workspace.elements.empty.tip=Pressione %1 para adicionar elementos no mod workspace.elements.lock_modelement_message=Você está tentando trancar/destrancar o código do elemento\!

Quando o código é trancado, o MCreator não irá mudar o código-fonte, mas isso quer dizer
que quando atualizar o MCreator, correções de bugs e atualizações do Minecraft não serão
aplicadas aos elementos trancados

Os elementos que estão trancados e selecionados agora serão destrancados.
Isso quer dizer que qualquer código personalizado para esses elementos serão sobrescritos pelo MCreator.

Por favor leia a wiki no site do MCreator sobre trancar códigos antes de fazer essa ação. workspace.elements.lock_modelement_confirm=Bloquear/desbloquear código do elemento do mod? @@ -595,8 +583,6 @@ trigger.entity_tamed=Entidade é domesticada trigger.entity_travels_to_dimension=Entidade viaja para dimensão trigger.explosion_occurs=Ocorre uma explosão trigger.farmland_trampled=A terra arada é esmagada -trigger.gem_dropped=Algo é dropado -trigger.gem_expired=Algo dropado some trigger.item_crafted=Item é criado(craftado) trigger.item_destroyed=Item é destruido trigger.item_smelted=Item é cozinhado/assado @@ -733,13 +719,11 @@ blockly.block.entity_extinguish=Extinguir %1 blockly.block.entity_foodlevel=Pegue o nível de comida de %1 blockly.block.entity_get_absorption=Obter nível de absorção de vida de %1 blockly.block.entity_get_armor_slot_item=Pegue o item do slot de armadura %1 de %2 -blockly.block.entity_get_fly_speed=Receber velocidade de voo de %1 blockly.block.entity_get_oxygen=Receber oxigênio de %1 blockly.block.entity_get_saturation=Obter nível de saturação de comida de %1 blockly.block.entity_get_scoreboard_score=Pegue a tabela de score de %2 score\: %1 blockly.block.entity_get_shootpower=Obter poder de tiro se %1 é um projétil blockly.block.entity_get_slot=Pegua a cópia do item no slot %1 de %2 se ele ter inventario -blockly.block.entity_get_walk_speed=Receber velocidade de andar de %1 blockly.block.entity_getowner=%2 Obter o dono de %1 se domesticado blockly.block.entity_getridingentity=Se a entidade %1 está montada blockly.block.entity_gettargetentity=Pegue o alvo de ataque de %1 @@ -1415,7 +1399,6 @@ elementgui.dimension.biomes_in=Biomas nesta dimensão\: elementgui.dimension.main_filler_block=Bloco de filtro principal\:
Normal, Nether, Fim elementgui.dimension.fluid_block=Bloco de fluído\:
Normal, Nether, Fim elementgui.dimension.sleep_result=Resultado da tentativa de sono\: -elementgui.dimension.fog_air_color=Substituição de cor do céu/nevoso\:
Deixe sem FAULT para manipulação padrão em cada versão do Minecraft elementgui.dimension.enable_dimension_portal=Ativar portal de dimensão\: elementgui.dimension.portal_frame_block=Bloco de estrutura do Portal\: elementgui.dimension.portal_igniter_name=Nome do item ignitor do portal\: @@ -1434,8 +1417,6 @@ elementgui.enchantment.curse=Este encantamento é amaldiçoado? elementgui.enchantment.allowed_on_books=Este encantamento é permitido nos livros? elementgui.enchantment.can_generate_in_loot_tables=Este encantamento pode ser gerarado em baús de saque? elementgui.enchantment.can_villager_trade=Este encantamento pode aparecer nas trocas de aldeões? -elementgui.enchantment.compatible_enchantments=Pode ser combinado com\:
Deixe em branco para permitir a combinação com qualquer encantamento -elementgui.enchantment.can_apply_to=Pode ser aplicado a\:
Deixe em branco para permitir aplicar todos os itens aplicáveis elementgui.enchantment.needs_name=Encantamento precisa de um nome elementgui.gamerule.name=Nome da máquina\: elementgui.gamerule.display_name=Nome da regra de jogo\:
Isso será usado na tela de configurações das regras de jogo @@ -1538,7 +1519,6 @@ elementgui.keybind.key_binding_category=Tecla-chave da categoria de tecla traduz elementgui.keybind.key_procedure_triggers=Gatilhos de procedimento da tecla-chave elementgui.keybind.error_key_needs_name=A tecla-chave precisa de um nome elementgui.keybind.error_key_category_needs_name=Nome chave da categoria da tecla-chave -elementgui.living_entity.has_ai=Habilitar IA
Ao usar IA, certifique-se de ter algumas tarefas de IA definidas abaixo elementgui.living_entity.immune_fire=Fogo elementgui.living_entity.immune_arrows=Flechas elementgui.living_entity.immune_fall_damage=Dano de Queda @@ -1565,7 +1545,6 @@ elementgui.living_entity.event_mob_tick_update=Na atualização de tick da entid elementgui.living_entity.event_player_collides_with=Quando o jogador colidir com esta entidade elementgui.living_entity.event_initial_spawn=No spawn inicial da entidade elementgui.living_entity.condition_natural_spawn=Condição de geração de entidades naturas -elementgui.living_entity.behaviour=Características do comportamento (Mob é agressivo, a criatura é passiva)\: elementgui.living_entity.creature_type=Tipo de criatura (define alguns atributos especiais da entidade)\: elementgui.living_entity.is_immune_to=Entidade imune a\: elementgui.living_entity.ridable=Marque para tornar esta entidade montada pelo jogador
Você pode opcionalmente ativar os controles de entidade vivas também @@ -1575,7 +1554,6 @@ elementgui.living_entity.name=Nome da entidade\: elementgui.living_entity.entity_model=Modelo da Entidade\:
Suportado\: JAVA elementgui.living_entity.entity_model_import=Clique aqui para importar a textura do modelo de entidade elementgui.living_entity.texture=Textura da entidade\:
A Textura precisa se encaixar no modelo (por exemplo, textura de skin do jogador NÃO é textura do modelo bípede) -elementgui.living_entity.glow_texture=Textura brilhante para a entidade (opcional)\:
Textura brilhante precisa se adequar ao modelo, o brilho da imagem determina o brilho elementgui.living_entity.bounding_box=Caixa delimitadora do modelo da entidade\:
Largura/Profundidade, Alto, Tamanho da Sombra, Deslocamento Y de montar da entidade elementgui.living_entity.spawn_egg_options=Opções de ovo de geração\:
Habilitar, cor base, cor dos pontos, aba criativa elementgui.living_entity.mob_boss=Selecione se você quer que a sua entidade seja chefe com barra de saúde\: @@ -1597,10 +1575,8 @@ elementgui.living_entity.bind_to_gui=Vincular esta entidade à GUI\:
Tamanho do inventário (contagem de slot)\:
Defina este valor como a maior ID do slot na GUI + 1 elementgui.living_entity.error_entity_model_needs_texture=O modelo da entidade precisa ter uma textura elementgui.living_entity.error_entity_needs_name=A entidade precisa de um nome -elementgui.living_entity.page_behaviour=Comportamento elementgui.living_entity.page_ai_and_goals=IA e objetivos elementgui.living_entity.page_spawning=Invocar/spawning -elementgui.loot_table.name=Tabela de loot elementgui.loot_table.registry_name=Nome de registro da tabela de saque\:
Use prefixos como "blocks/" para especificar uma categoria elementgui.loot_table.namespace=espaço de nome da tabela de loots\:
Use espaços de nome do minecraft para alterar as tabelas de loot do Vanilla elementgui.loot_table.type=Tipo de tabela de loot\: @@ -1718,9 +1694,7 @@ elementgui.recipe.xp_reward=Recompensa de XP\: elementgui.recipe.cooking_time=Tempo de cozimento\: elementgui.structuregen.event_structure_instance_generated=Na instância de estrutura gerada elementgui.structuregen.import_tooltip=Clique aqui para importar o arquivo de estrutura de nbt
Use a seção Estruturas na guia Área de Trabalho para mais opções. -elementgui.structuregen.select_tooltip=Estrutura para gerar\:
Para mais opções de importação de estruturas, utilize a seção seção de estruturas da área de trabalho elementgui.structuregen.ignore_blocks=Blocos a ignorar ao colocar\: -elementgui.structuregen.error_select_structure_spawn=Você precisa selecionar uma estrutura que será gerada por essa estrutura para prosseguir. elementgui.tab.name=Nome da aba criativa\: elementgui.tab.icon=Ícone da aba\: elementgui.tab.search_bar=Mostrar barra de pesquisa\: @@ -1758,53 +1732,30 @@ workspace.resources.tab.structures=Estruturas workspace.resources.tab.screenshots=Capturas de Tela workspace.textures.new=Criar nova textura workspace.textures.import=Importar texturas -workspace.textures.edit_selected=Editar selecionado... -workspace.textures.duplicate_selected=Duplicar selecionado ... -workspace.textures.delete_selected=Excluir Selecionados -workspace.textures.export_selected=Exportar selecionado... -workspace.textures.confirm_deletion_message=Você tem certeza que deseja excluir este arquivo?
NOTA\: Se você usar este arquivo em algum lugar, você pode ter textos quebrados\! workspace.textures.select_dupplicate_type=Selecione o tipo de textura em que gostaria de duplicar\: -workspace.3dmodels.edit_texture_mappings=Editar mapeamentos de textura... -workspace.3dmodels.redefine_animations=Redefinir animações do modelo... -workspace.3dmodels.delete_selected=Excluir Selecionados -workspace.3dmodels.delete_confirm_message=Você tem certeza que quer deletar esse modelo?
NOTA\: se você usar esse modelo em qualquer lugar, você vai ter texturas quebradas
e alguns elementos do mod não vão compilar\! -workspace.3dmodels.regenerating_code=Regenerando código -workspace.3dmodels.regenerating_entity_code=Regenerando código de entidades -workspace.3dmodels.rebuilding_workspace=Recompilando workspace workspace.3dmodels.animation_unsupported_title=Animações não suportadas workspace.3dmodels.animation_unsupported_message=Este modelo não suporta animações\! workspace.3dmodels.mappings_unsupported_title=Nenhum mapeamento workspace.3dmodels.mappings_unsupported_message=Este modelo não suporta mapeamento de texturas\! -workspace.sounds.confirm_deletion_message=Você tem certeza que deseja excluir este som?
NOTA\: Se você usar este som em qualquer lugar, ele não funcionará mais\! -workspace.sounds.edit_selected=Editar selecionado... workspace.sounds.play_selected=Reproduzir selecionados -workspace.sounds.delete_selected=Excluir Selecionados workspace.sounds.category=Categoria sonora\: {0} workspace.sounds.files=Arquivos de som\: {0} workspace.sounds.subtitle_and_category=Subtítulo\: {0}, Categoria de som\: {1} -workspace.screenshots.export_selected=Exportar selecionado... -workspace.screenshots.delete_selected=Excluir Selecionados workspace.screenshots.action_complete=Ação concluída workspace.screenshots.use_background_message=As capturas de tela selecionadas serão usadas como plano de fundo na próxima vez que abrir o MCreator. -workspace.screenshots.use_as_background=Utilizar como fundo do MCreator ... -workspace.structure.confirm_deletion_message=Você tem certeza que deseja excluir as estruturas selecionadas?
NOTA\: Se você usá-las em qualquer lugar, elas não vão mais aparecer\! workspace.variables.variable_name=Nome da variável workspace.variables.variable_type=Tipo da variável workspace.variables.variable_scope=Escopo de variável workspace.variables.initial_value=Valor inicial workspace.variables.add_new=Adicionar nova variável -workspace.variables.remove_selected=Remover selecionados workspace.variables.help=Ajuda com variáveis workspace.variables.change_type=Tem certeza que deseja alterar esta variável?
Se essa variável estiver em uso, essa ação pode causar erros de compilação.
Se você acabou de criá-lo, é perfeitamente bom alterá-lo. -workspace.variables.remove_variable_confirmation=Tem certeza que deseja excluir esta variável?
Se esta variável estiver em uso, esta ação pode causar erros de compilação. workspace.localization.add_entry=Adicionar entrada de localização -workspace.localization.remove_selected=Remover selecionados workspace.localization.export_to_csv=Exportar idioma atual para CSV workspace.localization.import_csv=Importar CSV para o idioma atual workspace.localization.key_name_title=Nome da Chave workspace.localization.key_name_message=Digite o nome da chave para sua entrada de idioma personalizada\: workspace.localization.confirm_delete_map=Você tem certeza que deseja deletar este mapa de localização? -workspace.localization.confirm_delete_entry=Tem certeza que deseja remover as entradas selecionadas?
NOTA\: Se eles ainda estão em uso, os nomes de elementos vinculados a eles não funcionarão\! workspace.localization.export_translation=Exportar tradução workspace.localization.confirm_export=Tradução padrão (en_us) não pode ser exportada\!
Textos em inglês são definidos em elementos de moderação. workspace.localization.warning_export=Você não pode importar CSV para tradução padrão (en_us)\!
Textos em inglês estão definidos em elementos de mods. diff --git a/plugins/mcreator-localization/lang/texts_ro_RO.properties b/plugins/mcreator-localization/lang/texts_ro_RO.properties index 22ebc64401c..2613e0b4f9e 100644 --- a/plugins/mcreator-localization/lang/texts_ro_RO.properties +++ b/plugins/mcreator-localization/lang/texts_ro_RO.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=Setări animaților dialog.animation_maker.next_frame=Cadrul următor dialog.animation_maker.previous_frame=Cadrul precedent dialog.animation_maker.animation_timeline=Afișare cronologia animației -dialog.animation_maker.add_frames=Adaugă cadru(uri) ... -dialog.animation_maker.add_frames_from_template=Adaugă cadre din șablon... -dialog.animation_maker.add_frames_from_strip=Adaugă cadre din bara de animație... -dialog.animation_maker.add_frames_from_gif=Adaugă cadre din GIF ... dialog.animation_maker.gif_importing=Importare GIF dialog.animation_maker.gif_reading=Citire GIF dialog.animation_maker.gif_processing=Procesare GIF @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=Curățarea cutiilor gradle dialog.cache_cleanup.progress.stopping_daemons=Oprirea rulării daemonilor Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Ștergerea folderului cache Gradle dialog.cache_cleanup.progress.build_task=Rularea sarcinii de construire a gradle-ului -dialog.code_error.compilation_desc=Fișierul dvs. principal de mod nu s-a compilat corect.

Acest lucru este cauzat de obicei de inconsecvențele din codul de mod în timpul contructiilor.
MCreator poate rezolva această problemă pentru tine prin regenerarea întregului cod al modului.

Dacă ai elemente de mod blocate sau fișiere de bază de moduri, acestea pot cauza și erori.


Faceți clic pe butonul Regenerați codul pentru a continua această acțiune.
dialog.code_error.compilation_title=Eroare de compilare fişierului de mod principal -dialog.code_error.compilation_list=Spațiul de lucru conține elemente de mod care nu se compilează corect.

Acest lucru a fost cel mai probabil cauzat de ultimul mod pe care l-ați adăugat sau editat. Încercați să modificați setările elementelor de mod
care cauzează erori de construcție (cum ar fi elementele sunt enumerate mai jos) pentru a încerca să rezolvați această problemă.

Dacă nu puteți rezolva această problemă, exportă spațiul de lucru pentru a partaja fișierul ZIP din meniul Fișier și trimite-l prin
trackerul de probleme de pe GitHub pentru a încerca să te ajutăm.

Lista elementelor de mod care cauzează erori de compilare (micșorate la până la 10 elemente)\:

dialog.code_error.regenerate_code=Regenerează codul dialog.code_error.ignore_error=Ignoră eroarea dialog.code_error.show_in_workspace=Arată în spațiul de lucru @@ -350,7 +344,6 @@ dialog.modelement_id.info_message_title=Codul elementului mod este blocat dialog.modelement_id.registry_name=Nume registru\: dialog.modelement_id.registry_name_info=Denumirea registrului (nu toate elementele mod o folosesc) dialog.modelement_id.registry_name_validator=Denumire registru -dialog.modelement_id.use_caution_warn=Folosiți această unealtă cu precauție\!

Schimbarea Id-urilor poate rupe salvările lumii existente și cauzează
conflict cu alte elemente din modul tău\! dialog.modelement_id.id_and_registry_names="{0} - Denumire registru" dialog.modelement_id.invalid_registry_name=Numele de registru introdus nu este valid\!
Modificările nu au fost salvate. dialog.modelement_id.invalid_registry_name_title=Nume registru nevalid @@ -417,7 +410,6 @@ dialog.textures_mapping.title_for_model=Maparea texturilor pentru model dialog.textures_mapping.add_new=Adaugă o nouă cartografiere a texturii dialog.textures_mapping.enter_name_message=Introduceți numele de cartografiere a texturilor.
Acest nume este folosit pentru a identifica setul dvs de texturi atunci când
selectați o cartografiere a texturii pentru modelul dvs. dialog.textures_mapping.enter_name_title=Mapare textură nouă -dialog.textures_mapping.jump_to=Salt la... dialog.textures_mapping.save=Salvează mapări dialog.textures_mapping.model_texture_part=Modelul de textură\:
{0} dialog.textures_mapping.confirm_deletion_message=Sunteți sigur că doriți să ștergeți această cartografiere a texturei?
Puteți obține texturi defecte dacă maparea este încă în uz\! @@ -539,7 +531,6 @@ workspace.elements.list.filter_all=Arată tot workspace.elements.list.filter_locked=Elemente blocate workspace.elements.list.filter_witherrors=Elemente cu erori de construcție workspace.elements.list.ascending=Crescător -workspace.category.mod_elements=Elementele modului workspace.category.resources=Resurse workspace.category.variables=Variabile workspace.category.localization=Localizare @@ -556,14 +547,11 @@ workspace.elements.list.edit.delete=Șterge workspace.elements.list.edit.duplicate=Multiplică elementul modului... workspace.elements.list.edit.code=Deschide elementul modului în editorul de cod workspace.elements.list.edit.lock=Blocare/deblocare elementul modului -workspace.elements.list.edit.id=Editează ID-ul elementului modului... workspace.elements.list.edit.add.folder=Adaugă un folder nou... workspace.elements.list.edit.rename.folder=Redenumește folderul selectat... -workspace.elements.confirm_delete_message=Sunteţi sigur că doriţi să ştergeţi elementele selectate ({0})?

Dacă ați folosit datele elementelor de mod selectate în alte elemente (ca rețetă, de exemplu, ca tab. .) tu
trebuie să ștergi elemente care sunt dependente și de acestea\! În caz contrar veți obține erori de construcție.

Elemente modului șterse în folder și sub-folder vor fi mutate în dosarul părinte workspace.elements.delete.tooltip=Ştergeţi elementul modului selectat workspace.elements.edit_code.tooltip=Editați codul pentru elementul modului selectat workspace.elements.lock_code_tooltip=Blocare/deblocare codul elementelor
Când blochezi un cod, MCreator nu va schimba codul, astfel încât tipul de mod să devină
editabil din vizualizarea codurilor, iar codul să fie păstrat chiar și atunci când se schimba spațiul de lucru.
Folosiți doar dacă intenționați să editați manual codul și sunteți conștient de consecințele blocării
codului unui element din mod\! -workspace.elements.edit_registry_names.tooltip=Editați elemente ID ale modului și numele de registru workspace.elements.empty.tip=Apasă %1 pentru a adăuga elemente modului workspace.elements.lock_modelement_message=Încercați să blocați/deblocați codul elementului de moderare\!

Atunci când codul este blocat, MCreator nu va schimba codul sursă, dar acest lucru înseamnă
că atunci când se actualizează MCreator, Remedierea erorilor și upgrade-urile versiunii Minecraft nu vor fi
aplicate elementelor blocate.

Elementele de mod care sunt blocate chiar acum și care au fost selectate vor fi deblocate.
Acest lucru înseamnă că orice cod personalizat pentru acest element de mod va fi suprascris de MCreator.

Vă rugăm să citiți pagina wiki de pe site-ul MCreator despre codul de blocare înainte de a utiliza această acțiune. workspace.elements.lock_modelement_confirm=Blocare/deblocare elementul modului? @@ -627,8 +615,6 @@ trigger.entity_tamed=Entitatea este îmblânzită trigger.entity_travels_to_dimension=Entitatea călătorește într-o dimensiune trigger.explosion_occurs=Se produce o explozie trigger.farmland_trampled=Ferma este călcată -trigger.gem_dropped=Gemul este aruncat -trigger.gem_expired=Gemul expiră trigger.item_crafted=Obiectul este construit trigger.item_destroyed=Obiectul este disturs trigger.item_smelted=Obiectul este topit @@ -802,9 +788,7 @@ blockly.block.entity_get_armor_slot_item=Obține obiectul din slotul armurii %1 blockly.block.entity_get_controlling_passenger=%2 Obține pasagerul care controlează %1 blockly.block.entity_get_first_passenger=%2 Obține primul pasager al %1 blockly.block.entity_get_fire_ticks=Obține tickurile rămase în flăcări a %1 -blockly.block.entity_get_fly_speed=Obține viteza de zbor a %1 blockly.block.entity_get_oxygen=Obțineți nivelul oxigen a %1 -blockly.block.entity_get_root_vehicle=Obține cea mai joasă entitate pe care %1 o călărește, sau pe sine dacă nu călărește nimic blockly.block.entity_get_saturation=Obține nivelul de saturație a mâncării de %1 blockly.block.entity_get_scoreboard_score=Obține %2 scorului tabloului de board pentru %1 blockly.block.entity_get_shootpower=Obțineți puterea de împuşcare dacă %1 este un proiectil @@ -812,7 +796,6 @@ blockly.block.entity_get_slot=Obține o copie a obiectului din slotul %1 din %2 blockly.block.entity_get_spawn_x=Obține coordonata X pentru %1 unde reînvie pentru lumea curentă %2 blockly.block.entity_get_spawn_y=Obține coordonata Y pentru %1 unde reînvie pentru lumea curentă %2 blockly.block.entity_get_spawn_z=Obține coordonata Z pentru %1 unde reînvie pentru lumea curentă %2 -blockly.block.entity_get_walk_speed=Obține viteza de deplasare a %1 blockly.block.entity_getowner=%2 Obține proprietarul %1 dacă este îmblânzit blockly.block.entity_getridingentity=%2 Obține entitatea %1 călărește blockly.block.entity_gettargetentity=%2 Obține entitatea %1 țintește pentru atac @@ -911,9 +894,6 @@ blockly.block.entity_size_width=Obține lățimea %1 blockly.block.entity_submerged_height=Obține înălțimea scufundată a %1 blockly.block.entity_swing_mainhand=Se mută în mâna principală a %1 blockly.block.entity_swing_offhand=Se mută în mâna secundară a %1 -blockly.block.entity_vel_x=Viteza X a %1 %2 -blockly.block.entity_vel_y=Viteza Y a %1 %2 -blockly.block.entity_vel_z=Viteza Z a %1 %2 blockly.block.entity_xplevel=Obține nivelul XP a %1 blockly.block.entity_xp_until_next_level=Obține cantitatea de XP necesară %1 pentru a obține un nivel blockly.block.explode=Explodează la x\: %2 y\: %3 z\: %4 cu putere de %1 de tip\: %5 %6 @@ -1656,7 +1636,6 @@ elementgui.dimension.biomes_in=Biomuri de această dimensiune\: elementgui.dimension.main_filler_block=Blocul principal de umplutură\:
Normal, Nether, End elementgui.dimension.fluid_block=Bloc fluid\:
Normal, Nether, End elementgui.dimension.sleep_result=Rezultatul încercării de somn\: -elementgui.dimension.fog_air_color=Suprascriere Cerul / ceață culoare\:
Lasă DEFAULT pentru manipulare implicită per versiune Minecraft elementgui.dimension.enable_dimension_portal=Activează portalul dimensiunii\: elementgui.dimension.portal_frame_block=Blocul ramei de portal\: elementgui.dimension.enable_new_igniter=Activați aprinzătorul portalului @@ -1676,8 +1655,6 @@ elementgui.enchantment.curse=Este acest enchant un blestem? elementgui.enchantment.allowed_on_books=Este acest enchant permisă pe cărti? elementgui.enchantment.can_generate_in_loot_tables=Poate acest enchant să genereze în mese de pradă? elementgui.enchantment.can_villager_trade=Poate să apară acest enchant în comerțul cu săteni? -elementgui.enchantment.compatible_enchantments=Poate fi combinat cu\:
Lăsați gol pentru a permite combinarea cu orice enchant -elementgui.enchantment.can_apply_to=Poate fi aplicat la\:
Lăsați gol pentru a permite aplicarea la toate obiectele aplicabile elementgui.enchantment.needs_name=Enchantul are nevoie de un nume elementgui.gamerule.name=Numele mașinii\: elementgui.gamerule.category=Categorie\: @@ -1822,7 +1799,6 @@ elementgui.living_entity.flying_mob=Verifică dacă această entitate este elementgui.living_entity.name=Numele entităţii\: elementgui.living_entity.entity_model_import=Faceţi clic pe aceasta pentru a importa textura modelului entităţii elementgui.living_entity.texture=Textura entității\:
Textura trebuie să se potrivească cu modelul (de exemplu, textura pielii jucătorului NU este un model bipe) -elementgui.living_entity.glow_texture=Textura strălucitoare a entității (opțional)\:
Textura strălucitoare trebuie să se potrivească modelului, luminozitatea imaginii determină strălucirea elementgui.living_entity.bounding_box=Modelul cutiei de coliziune a entității\:
Lățimea/Adâncimea, Înălțimea, Dimensiunea umbrei, Decalajul Y al entității montate elementgui.living_entity.sound=Sunet de viață\: elementgui.living_entity.death_sound=Sunet de moarte\: @@ -1834,9 +1810,7 @@ elementgui.living_entity.bind_to_gui=Leagă această entitate la IGP-ul\:< elementgui.living_entity.inventory_size=Dimensiunea inventarului (numărul de sloturi)\:
Setează această valoare la cel mai mare ID slot din IGP + 1 elementgui.living_entity.error_entity_model_needs_texture=Modelul entității trebuie să aibă o textură elementgui.living_entity.error_entity_needs_name=Entitatea are nevoie de un nume -elementgui.living_entity.page_behaviour=Comportament elementgui.living_entity.page_ai_and_goals=AI și obiective -elementgui.loot_table.name=Tabel pradă elementgui.loot_table.type=Tipul tabelului Loot\: elementgui.loot_table.add_pool=Adaugă grup tabel loot elementgui.loot_table.entry_item=Articol de intrare\: @@ -1935,35 +1909,19 @@ workspace.resources.tab.structures=Structuri workspace.resources.tab.screenshots=Capturi de ecran workspace.textures.new=Crează textură nouă workspace.textures.import=Importă texturi -workspace.textures.edit_selected=Editarea texturii selectate... -workspace.textures.duplicate_selected=Duplicarea texturii selectate ... -workspace.textures.delete_selected=Stergerea elementului selectat -workspace.textures.export_selected=Exportarea texturii selectate ... -workspace.textures.confirm_deletion_message=Sunteți sigur că doriți să ștergeți acest fișier?
ATENȚIE\: Dacă folosiți acest fișier oriunde, este posibil să aveți texturi defecte\! workspace.textures.select_dupplicate_type=Selectaţi tipul de textură în care doriţi să duplicaţi\: workspace.textures.category.screen=Texturi pentru ecrane (progresii, IGP, suprapuneri, ...)\: workspace.textures.category.other=Alte texturi (picturi, logo-ul modului...)\: -workspace.3dmodels.redefine_animations=Redefiniți animațiile modelului... -workspace.3dmodels.delete_selected=Șterge selecția -workspace.3dmodels.delete_confirm_message=Sunteți sigur că doriți să ștergeți acest model?
ATENȚIE\: dacă utilizați acest model oriunde, este posibil să aveți texturi defecte
și este posibil ca unele elemente de mod să nu fie compilate\! -workspace.3dmodels.rebuilding_workspace=Reconstruirea spaţiului de lucru workspace.3dmodels.mappings_unsupported_message=Acest model nu acceptă cartografierea texturilor\! -workspace.sounds.edit_selected=Editează selecția ... workspace.sounds.play_selected=Redă selecţia -workspace.sounds.delete_selected=Șterge selecția workspace.sounds.files=Fișiere de sunet\: {0} -workspace.screenshots.export_selected=Exportarea selecției ... -workspace.screenshots.delete_selected=Șterge selecția workspace.screenshots.use_background_message=Capturile de ecran selectate vor fi folosite ca fundal potențial în următoarea lansare. workspace.variables.variable_name=Numele variabilei workspace.variables.variable_type=Tipul variabilei workspace.variables.variable_scope=Scopul variabilei workspace.variables.add_new=Adaugă o nouă variabilă -workspace.variables.remove_selected=Elimină selecția workspace.variables.help=Ajutor cu variabilele -workspace.variables.remove_variable_confirmation=Sunteți sigur că doriți să eliminați această variabilă?
Dacă această variabilă este utilizată, această acțiune poate cauza erori de compilare. workspace.localization.add_entry=Adăugare localizare intrare -workspace.localization.remove_selected=Elimină selecția workspace.localization.export_to_csv=Exportă limba curentă în CSV workspace.localization.import_csv=Importă CSV în limba curentă workspace.localization.key_name_title=Numele cheii diff --git a/plugins/mcreator-localization/lang/texts_ru_RU.properties b/plugins/mcreator-localization/lang/texts_ru_RU.properties index 26f2db2866c..eb2616bb027 100644 --- a/plugins/mcreator-localization/lang/texts_ru_RU.properties +++ b/plugins/mcreator-localization/lang/texts_ru_RU.properties @@ -57,11 +57,11 @@ action.gradle.disabled=В данный момент это действ action.gradle.clear_caches=Очистить весь кэш Gradle... action.gradle.clear_caches.option.gradle_caches=Очистить кэш Gradle action.gradle.clear_caches.option.gradle_folder=Полностью очистить (удалить) папку Gradle -action.gradle.clear_caches.option.message=Это действие очистит весь кеш Gradle у всех генераторов и рабочих пространств.
Может решить некоторые проблемы со сборкой Gradle.

Это действие не повлияет на ваши файлы или рабочие пространства, но после него
первая сборка каждого типа и версии генератора займёт немного больше времени.
В некоторых случаях для устранения ошибок Gradle требуется полная очистка папки Gradle.

Во время этого действия все запущенные задачи сборки будут отменены, а все открытые тестовые клиенты — закрыты. +action.gradle.clear_caches.option.message=Это действие очистит весь кэш Gradle у всех генераторов и рабочих пространств.
Может решить некоторые проблемы со сборкой Gradle.

Это действие не повлияет на Ваши файлы или рабочие пространства, но первая после него сборка
каждого типа и версии генератора займёт немного больше времени.
В некоторых случаях для устранения ошибок Gradle требуется полная очистка папки Gradle.

Во время этого действия все запущенные задачи сборки будут отменены, а все открытые тестовые клиенты — закрыты. action.common.apply=Применить action.common.create=Создать action.common.resize=Изменить размер -action.gradle.clear_caches.option.title=Очистить весь кеш Gradle +action.gradle.clear_caches.option.title=Очистить весь кэш Gradle action.gradle.close_mcreator_while_installation_message=Gradle всё ещё продолжает настройку рабочего места\!
Нельзя закрывать MCreator, пока Gradle настраивается.
Вы можете отслеживать прогресс настройки на вкладке Консоль. action.gradle.close_mcreator_while_installation_title=Настройка Gradle action.gradle.close_mcreator_while_running_message=В фоновом режиме запущены задачи Gradle.
Вы уверены, что хотите закрыть эту рабочее пространство?

Если вы продолжите, выполняемые задачи будут отменены\! @@ -79,10 +79,10 @@ dialog.animation_maker.settings=Настройки анимации dialog.animation_maker.next_frame=Следующий кадр dialog.animation_maker.previous_frame=Предыдущий кадр dialog.animation_maker.animation_timeline=Временная шкала анимации -dialog.animation_maker.add_frames=Добавить кадр(ы) ... +dialog.animation_maker.add_frames=Добавить кадры... dialog.animation_maker.add_frames_from_template=Добавить кадры из шаблона... -dialog.animation_maker.add_frames_from_strip=Добавить кадры из полосы анимации... -dialog.animation_maker.add_frames_from_gif=Добавить кадры из GIF ... +dialog.animation_maker.add_frames_from_strip=Добавить кадры из анимационной полосы... +dialog.animation_maker.add_frames_from_gif=Добавить кадры из GIF... dialog.animation_maker.gif_importing=Импорт файла GIF dialog.animation_maker.gif_reading=Просмотр файла GIF dialog.animation_maker.gif_processing=Обработка файла GIF @@ -119,9 +119,9 @@ dialog.cache_cleanup.title=Очистка кэша Gradle dialog.cache_cleanup.progress.stopping_daemons=Остановка служб Gradle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Очистка папки кэша Gradle dialog.cache_cleanup.progress.build_task=Запущена задача сборки Gradle -dialog.code_error.compilation_desc=Один или несколько главных файлов мода не компилируются.

Обычно это вызвано ошибками в коде мода во время сборки.
MCreator может решить эту проблему для вас, перегенерировав код всего мода.

Если вы заблокировали некоторые элементы модов или главные файлы мода, они также могут вызвать эту ошибку.


Нажмите Сгенерировать код по новой, чтобы продолжить.
+dialog.code_error.compilation_desc=Один или несколько главных файлов мода не компилируются.

Обычно это вызвано ошибками в коде мода во время сборки.
MCreator может решить эту проблему, перегенерировав код всего мода.

Если Вы заблокировали некоторые элементы модов или главные файлы мода, они также могут вызывать эту ошибку.


Нажмите Сгенерировать код по новой, чтобы продолжить.
dialog.code_error.compilation_title=Ошибки компиляции главных файлов мода -dialog.code_error.compilation_list=Ваше рабочее пространство содержит элементы мода, которые не компилируются.

Скорее всего, это было вызвано последним добавленным или изменённым элементом мода. Попробуйте изменить настройки элементов,
которые вызывают ошибки сборки (такие элементы перечислены ниже), чтобы попытаться решить эту проблему.

Если это не помогло, экспортируйте рабочее пространство в общедоступный ZIP-файл из меню Файл и отправьте его нам
через наш трекер ошибок на GitHub, чтобы мы смогли попытаться Вам помочь.

Список элементов мода, вызывающих ошибки компиляции (урезан до 10 элементов)\:

+dialog.code_error.compilation_list=Ваше рабочее пространство содержит элементы мода с ошибками компиляции.

Скорее всего, это было вызвано последним добавленным или изменённым элементом мода. Попробуйте изменить настройки элементов,
которые вызывают ошибки сборки (такие элементы перечислены ниже), чтобы попытаться решить эту проблему.

Если это не помогло, экспортируйте рабочее пространство в общедоступный ZIP-файл из меню Файл и отправьте его нам
через наш трекер ошибок на GitHub, чтобы мы попытались Вам помочь.

Список элементов мода, вызывающих ошибки компиляции\:

dialog.code_error.regenerate_code=Сгенерировать код по новой dialog.code_error.ignore_error=Пропустить ошибку dialog.code_error.show_in_workspace=Показать в рабочем пространстве @@ -150,7 +150,7 @@ dialog.file.error_already_exists_title=Перезапись файла dialog.file.select_directory_title=Выберите папку рабочего пространства dialog.gui.button_add_title=Редактор кнопок dialog.gui.button_change_width=Нажав OK, щёлкните ПКМ для изменения ширины кнопки -dialog.gui.button_resize=Чтобы изменить размер кнопки, используйте инструмент "Перемещение" и щёлкните правой кнопкой мыши при перемещении +dialog.gui.button_resize=Для изменения размера щёлкните ПКМ при использовании опции "Перемещение" dialog.gui.button_text=Текст кнопки\: dialog.gui.button_is_undecorated=Кнопка не оформлена? dialog.gui.button_event_on_clicked=При нажатии кнопки @@ -273,12 +273,14 @@ dialog.imageeditor_tool.use_canvas=Для использования нажми dialog.imageeditor.layer_panel_no_image=Нет изображения dialog.imageeditor.layer_panel_no_layers=Нет слоев dialog.imageeditor.layer_panel_new_layer=Новый слой +dialog.imageeditor.layer_panel_new_layer.floating=Новый слой из парящего dialog.imageeditor.layer_panel_move_up=Переместить выше dialog.imageeditor.layer_panel_move_down=Переместить ниже dialog.imageeditor.layer_panel_rename_layer=Переименовать слой dialog.imageeditor.layer_panel_toggle_visibility=Показать/спрятать dialog.imageeditor.layer_panel_delete_layer=Удалить слой dialog.imageeditor.layer_panel_duplicate_layer=Создать копию слоя +dialog.imageeditor.layer_panel_merge_layers_down=Объединить парящий слой со слоем ниже dialog.imageeditor.layer_panel_confirm_layer_deletion_message=Вы уверены, что хотите удалить следующие слои\:
dialog.imageeditor.layer_panel_confirm_layer_deletion_title=Удалить слой dialog.imageeditor.layer_panel_enter_new_name=Введите имя нового слоя\: @@ -323,6 +325,8 @@ dialog.image_maker.tools.types.noise_description=Инструмент для д dialog.image_maker.tools.types.move=Переместить слои dialog.image_maker.tools.types.move_layer=Перемещение слоя dialog.image_maker.tools.types.move_description=Инструмент для перемещения активных слоёв +dialog.image_maker.tools.types.select=Выделение +dialog.image_maker.tools.types.select_description=Инструмент для выделения области изображения dialog.image_maker.tools.types.pencil=Карандаш dialog.image_maker.tools.types.pencil_description=Базовый инструмент для рисования dialog.image_maker.tools.types.resizecanvas=Изменение размера холста @@ -361,6 +365,7 @@ dialog.item_selector.enter_tag_name.blocks=Введите имя блок dialog.item_selector.enter_tag_name.items=Введите имя предметной связки ниже (подобно шаблонам в списке)\:
dialog.item_selector.enter_tag_name.biomes=Введите имя связки биомов ниже (подобно шаблонам в списке)\:
dialog.item_selector.enter_tag_name.entities=Введите имя связки сущностей ниже (подобно шаблонам в списке)\:
+dialog.item_selector.enter_tag_name.damage_types=Введите имя связки типов урона ниже (проверьте список шаблонов)\:
dialog.item_selector.error_invalid_tag_name_title=Недопустимое имя связки dialog.item_selector.all=Все dialog.item_selector.blocks=Блоки @@ -380,7 +385,7 @@ dialog.modelement_id.info_message_title=Код элемента мода заб dialog.modelement_id.registry_name=Имя в реестре\: dialog.modelement_id.registry_name_info=Имя в реестре (не используется некоторыми элементами мода) dialog.modelement_id.registry_name_validator=Имя в реестре -dialog.modelement_id.use_caution_warn=Будьте осторожны, используя этот инструмент\!

Он может повлиять на существующие миры
и вызвать конфликты с другими модами\! +dialog.modelement_id.use_caution_warn=Будьте крайне осторожны, используя этот инструмент\! Не используйте идентификаторы повторно\!

Это действие может повлиять на существующие миры
и вызвать конфликты с другими модами\! dialog.modelement_id.id_and_registry_names="{0} — имя в реестре" dialog.modelement_id.invalid_registry_name=Введенное имя в реестре недействительно\!
Изменения не были сохранены. dialog.modelement_id.invalid_registry_name_title=Неверное имя в реестре @@ -421,6 +426,20 @@ dialog.preferences.themes.list=
Спи dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: неизвестный тип свойства +dialog.search_usages.list=Список элементов мода, использующие выбранные {0}\: +dialog.search_usages.list.empty=Выбранные {0} не задействованы ни в одном элементе мода. +dialog.search_usages.open_selected=Редактировать элемент мода +dialog.search_usages.title=Использование элемента +dialog.search_usages.deletion.confirm_msg=Вы уверены, что хотите удалить выбранные {0}?

Некоторые {0} из выбранного списка используются элементами мода, перечисленными ниже.
При продолжении может нарушиться работа проекта\! +dialog.search_usages.deletion_safe.confirm_msg=Вы уверены, что хотите удалить выбранные {0}?

Выбранные {0} не задействованы ни в одном элементе мода. Однако, они могут использоваться в пользовательском коде.
При продолжении эти ссылки станут недействительными, что может привести к сбоям в игре. +dialog.search_usages.deletion.confirm=Всё равно удалить +dialog.search_usages.type.mod_element=элементы мода +dialog.search_usages.type.resource.texture=текстуры +dialog.search_usages.type.resource.model=модели +dialog.search_usages.type.resource.sound=звуки +dialog.search_usages.type.resource.structure=структуры +dialog.search_usages.type.global_variable=глобальные переменные +dialog.search_usages.type.localization_key=ключи перевода dialog.sounds.name=Название звука dialog.sounds.registry_name=Имя звука в реестре\:
Переименование звука нарушит работу существующих ссылок на него dialog.sounds.files=Звуковые файлы\: @@ -455,7 +474,7 @@ dialog.textures_mapping.title_for_model=Привязки текстур к мо dialog.textures_mapping.add_new=Добавить привязку текстур dialog.textures_mapping.enter_name_message=Введите имя привязки текстур.
Это название используется для идентификации вашего набора текстур
при выборе привязки текстур для вашей модели. dialog.textures_mapping.enter_name_title=Новая привязка текстур -dialog.textures_mapping.jump_to=Перейти к ... +dialog.textures_mapping.jump_to=Перейти... dialog.textures_mapping.save=Сохранить привязки dialog.textures_mapping.model_texture_part=Часть текстуры модели\:
{0} dialog.textures_mapping.confirm_deletion_message=Вы уверены, что хотите удалить эту привязку?
Ваши текстуры могут оказаться повреждены в игре, если привязка ещё используется\! @@ -541,6 +560,7 @@ dialog.variables.variable_name=Имя переменной\: dialog.variables.variable_type=Тип переменной\: dialog.variables.variable_scope=Область переменной\: dialog.variables.new_title=Новая переменная +workspace.loading=Загрузка рабочего пространства... workspace.elements.list.locked=Заблокирован workspace.elements.folders.add_tooltip=Добавить новую папку в текущую папку workspace.elements.folders.up_tooltip=Вернуться в родительскую папку @@ -551,6 +571,7 @@ workspace.elements.folders.add.error_letters=Имя папки может сод workspace.elements.folders.add.error_exists=Папка с этим именем уже существует. workspace.elements.folders.rename.title=Переименовать папку workspace.elements.folders.rename.message=Введите имя папки\: +workspace.elements.list.special.item={0}
Тип\: {1} workspace.elements.list.folder=Папка workspace.elements.list.notlocked=Разблокирован workspace.elements.list.compiles=Компилируется @@ -595,14 +616,18 @@ workspace.elements.list.edit.delete=Удалить workspace.elements.list.edit.duplicate=Дублировать элемент мода... workspace.elements.list.edit.code=Открыть элемент в редакторе кода workspace.elements.list.edit.lock=Заблокировать/разблокировать элемент мода -workspace.elements.list.edit.id=Изменить ID элемента мода... +workspace.elements.list.edit.id=Изменить имена в реестре... +workspace.elements.list.edit.usages.tags=Среди выбранных элементов мода присутствуют связки.

Их имена в реестре могут также быть определены другими модами, поэтому используются только в слабых ссылках.
Поиск использованный этих элементов не поддерживается. +workspace.elements.list.edit.usages.tags.title=Использование связок workspace.elements.list.edit.add.folder=Добавить новую папку... workspace.elements.list.edit.rename.folder=Переименовать выбранную папку... -workspace.elements.confirm_delete_message=Вы уверены, что хотите удалить выбранные элементы ({0})?

Если вы использовали данные элементы мода в других элементах (как рецепт, в событии,
как вкладка и т. д.), их также необходимо удалить\! Иначе появятся ошибки сборки.

Элементы в удаляемых папках и вложенных в них будут перемещены в родительскую папку +workspace.elements.confirm_delete_msg_suffix=Элементы в удаляемых папках и вложенных в них будут перемещены в родительскую папку. workspace.elements.delete.tooltip=Удалить выбранный элемент мода workspace.elements.edit_code.tooltip=Редактировать исходный код выбранного элемента мода workspace.elements.lock_code_tooltip=(Раз-)Блокировка кода элемента
Если заблокировать элемент мода, MCreator не будет изменять его код, благодаря чему он станет
доступным для редактирования во встроенном редакторе кода и будет сохраняться даже при переключении рабочих пространств.
Используйте, только если намерены вручную изменить код и знаете о последствиях
блокировки кода элемента мода\! -workspace.elements.edit_registry_names.tooltip=Редактировать ID и имена элемента мода в реестре +workspace.elements.edit_registry_names.not_possible_message=Этот инструмент не может быть использован для редактирования имён реестра данного типа элементов мода. +workspace.elements.edit_registry_names.not_possible_title=Редактирование не допускается +workspace.elements.edit_registry_names.tooltip=Изменить имена в реестре workspace.elements.empty.tip=Нажмите на %1, чтобы добавить элементы workspace.elements.lock_modelement_message=Вы пытаетесь сохранить разблокированный файл мода\!

Если исходный код заблокирован, MCreator его не изменит, однако,
при обновлении MCreator исправления и изменения в новых версиях Minecraft
не будут применены к заблокированным элементам.

Выбранные заблокированные элементы будут разблокированы.
Это значит, что MCreator перезапишет их код, удалив пользовательский.

Пожалуйста, прочтите справку о блокировке кода на сайте MCreator перед использованием этого действия. workspace.elements.lock_modelement_confirm=(Раз-)Блокировка элемента мода @@ -676,8 +701,8 @@ trigger.entity_travels_to_dimension=Сущность переходит в из trigger.entity_uses_totem=Сущность использует тотем trigger.explosion_occurs=Происходит взрыв trigger.farmland_trampled=Пашня затоптана -trigger.gem_dropped=Предмет выпал -trigger.gem_expired=Предмет исчезает +trigger.gem_dropped=Предмет сброшен +trigger.gem_expired=Сброшенный предмет удаляется trigger.item_crafted=При крафте предмета trigger.item_destroyed=Предмет уничтожен trigger.item_smelted=Предмет переплавлен @@ -730,6 +755,7 @@ blockly.category.guimanagement=Действия с интерфейсами blockly.category.worldprocedures=Процедуры мира blockly.category.worlddata=Данные blockly.category.worldmanagement=Действия +blockly.category.scoreboard=Рейтинг blockly.category.basictasks=Основные задачи blockly.category.combattasks=Боевые задачи blockly.category.movementtasks=Задачи на движение @@ -781,11 +807,11 @@ blockly.block.block_fluidtank_fill=Наполнить на %4 единиц жи blockly.block.block_fluidtank_get=Получить уровень жидкости в баке %4 блока в x\: %1 y\: %2 z\: %3 со стороны %5 blockly.block.block_fluidtank_get_max=Получить ёмкость бака %4 блока в x\: %1 y\: %2 z\: %3 со стороны %5 blockly.block.block_fluidtank_tanks=Получить число баков у блока в x\: %1 y\: %2 z\: %3 со стороны %4 -blockly.block.block_registry_name=Получить имя %1 в реестре +blockly.block.block_registry_name=Имя блока %1 в реестре blockly.block.block_inv_clear_slot=Очистить ячейку %4 блока в x\: %1 y\: %2 z\: %3 (при наличии инвентаря) blockly.block.block_inv_damage_item=Нанести урон %4 предмету в ячейке %5 блока в x\: %1 y\: %2 z\: %3 при наличии инвентаря -blockly.block.block_inv_get_amount_inslot=Получить число предметов в ячейке %4 блока в x\: %1 y\: %2 z\: %3 (при наличии инвентаря) -blockly.block.block_inv_get_item_inslot=Получить копию предмета в ячейке %4 блока в x\: %1 y\: %2 z\: %3 (при наличии инвентаря) +blockly.block.block_inv_get_amount_inslot=Число предметов в ячейке %4 блока в x\: %1 y\: %2 z\: %3 (при наличии инвентаря) +blockly.block.block_inv_get_item_inslot=Копия предмета в ячейке %4 блока в x\: %1 y\: %2 z\: %3 (при наличии инвентаря) blockly.block.block_inv_remove_items=Убрать %4 предметов из ячейки %5 блока в x\: %1 y\: %2 z\: %3 при наличии инвентаря blockly.block.block_inv_set_items=Положить %4 %6 в ячейку %5 блока в x\: %1 y\: %2 z\: %3 при наличии инвентаря blockly.block.block_is_fluid=%1 — жидкость @@ -867,11 +893,18 @@ blockly.block.entity_allow_flying=Позволить сущности %2 лет blockly.block.entity_armor_value=Значение брони %1 blockly.block.entity_canusecommand=%2 имеет уровень разрешений %1 blockly.block.entity_check_creature_type=%1 — существо типа %2 +blockly.block.entity_check_main_hand=Главная рука сущности %1 — %2 blockly.block.entity_checkgamemode=%1 в игровом режиме %2 blockly.block.entity_clear_inventory=Очистить инвентарь сущности %1 blockly.block.entity_clearpotions=Снять все эффекты с сущности %1 blockly.block.entity_close_gui=Закрыть открытый для сущности %1 интерфейс blockly.block.entity_create=%1 Неподвижный экземпляр сущности типа %2 (без призыва) +blockly.block.entity_data_logic_get=Значение для сущности %1 типа %2 логического параметра %3 +blockly.block.entity_data_logic_set=Для сущности %1 типа %2 присвоить логическому параметру %3 значение %4 +blockly.block.entity_data_integer_get=Значение для сущности %1 типа %2 целочисленного параметра %3 +blockly.block.entity_data_integer_set=Для сущности %1 типа %2 присвоить целочисленному параметру %3 значение %4 +blockly.block.entity_data_string_get=Значение для сущности %1 типа %2 строкового параметра %3 +blockly.block.entity_data_string_set=Для сущности %1 типа %2 присвоить строковому параметру %3 значение %4 blockly.block.entity_deal_custom_damage=Нанести %1 урона сущности %2 с ключом перевода сообщения о смерти\: death.attack.%3(.player/.item) blockly.block.entity_despawn=Удалить %1 %2 blockly.block.entity_dimension_id=ID измерения сущности %1 @@ -886,20 +919,22 @@ blockly.block.entity_get_armor_slot_item=Предмет в ячейке %1 бр blockly.block.entity_get_controlling_passenger=%2 Сущность, управляющая %1 blockly.block.entity_get_first_passenger=%2 Первый из пассажиров %1 blockly.block.entity_get_fire_ticks=Оставшееся время горения сущности %1 -blockly.block.entity_get_fly_speed=Скорость полёта %1 blockly.block.entity_get_oxygen=Уровень кислорода %1 blockly.block.entity_get_percent_frozen=Доля оставшегося времени заморозки сущности %1 blockly.block.entity_get_root_vehicle=Самая нижняя сущность, которой управляет %1 (если не верхом — сама эта сущность) blockly.block.entity_get_saturation=Насыщение сущности %1 -blockly.block.entity_get_scoreboard_score=Получить из таблицы %2 счёт сущности %1 +blockly.block.entity_get_scoreboard_score=Счёт в таблице %2 сущности %1 blockly.block.entity_get_shootpower=Сила выстрела %1, если это — снаряд blockly.block.entity_get_slot=Копия предмета в ячейке %1 предмета %2 (при наличии инвентаря) blockly.block.entity_get_spawn_x=Координата X точки возрождения игрока %1 в его текущем мире %2 blockly.block.entity_get_spawn_y=Координата Y точки возрождения игрока %1 в его текущем мире %2 blockly.block.entity_get_spawn_z=Координата Z точки возрождения игрока %1 в его текущем мире %2 blockly.block.entity_get_stepheight=Высота шага сущности %1 +blockly.block.entity_get_use_item=Предмет, используемый сущностью %1 +blockly.block.entity_get_use_item_ticks=Время использования предмета сущностью %1 в тиках blockly.block.entity_get_uuid=UUID сущности %1 -blockly.block.entity_get_walk_speed=Скорость ходьбы %1 +blockly.block.entity_get_walk_speed=Базовая скорость ходьбы сущности %1 +blockly.block.entity_get_fly_speed=Базовая скорость полёта сущности %1 blockly.block.entity_getowner=%2 Владелец сущности %1 (если приручена) blockly.block.entity_getridingentity=%2 Сущность, контролируемая пассажиром %1 blockly.block.entity_gettargetentity=%2 Сущность — цель будущей атаки %1 @@ -974,7 +1009,7 @@ blockly.block.entity_pos_y=Координата Y сущности %1 blockly.block.entity_pos_z=Координата Z сущности %1 blockly.block.entity_potioneffectlevel=Уровень эффекта %2 на сущности %1 blockly.block.entity_potioneffectremaining=Оставшееся время (в тиках) эффекта %2 на сущности %1 -blockly.block.entity_registry_name=Получить имя %1 в реестре +blockly.block.entity_registry_name=Имя сущности %1 в реестре blockly.block.entity_remove_item=Убрать %2 %1 из главного инвентаря сущности %3 blockly.block.entity_remove_recipe=Заблокировать рецепт %2 для сущности %1 blockly.block.entity_remove_specific_potion_effect=Снять эффект %2 с сущности %1 @@ -1013,9 +1048,9 @@ blockly.block.entity_submerged_height=Погружённая высота сущ blockly.block.entity_swing_mainhand=Махнуть главной рукой сущности %1 blockly.block.entity_swing_offhand=Махнуть запасной рукой сущности %1 blockly.block.entity_switch_dimension=Перенести %1 в измерение %2 -blockly.block.entity_vel_x=Скорость сущности %1 по оси X %2 -blockly.block.entity_vel_y=Скорость сущности %1 по оси Y %2 -blockly.block.entity_vel_z=Скорость сущности %1 по оси Z %2 +blockly.block.entity_vel_x=Изменение позиции сущности %1 по оси X %2 +blockly.block.entity_vel_y=Изменение позиции сущности %1 по оси Y %2 +blockly.block.entity_vel_z=Изменение позиции сущности %1 по оси Z %2 blockly.block.entity_xplevel=Уровень опыта %1 blockly.block.entity_xp_until_next_level=Величина опыта, необходимая сущности %1 для завершения уровня blockly.block.execute_command=Выполнить команду /%1 в x\: %2 y\: %3 z\: %4 %5 @@ -1045,16 +1080,18 @@ blockly.block.gui_remove_items=Убрать %1 предметов из ячей blockly.block.gui_set_items=Положить %1 %3 в ячейку %2 открытого для сущности %4 интерфейса blockly.block.item_add_enhancement=Наложить зачарование %3 уровня %1 на %2 blockly.block.item_bucket_to_fluid=Содержащаяся в ведре %2 %1 жидкость %3, если нет — воздух (AIR) -blockly.block.item_can_harvest=Можно предметом %3 %1 добыть %4 %2 +blockly.block.item_can_harvest=Предметом %3 %1 можно добыть %4 %2 blockly.block.item_can_smelt=%1 может быть переплавлен blockly.block.item_check_rarity=Редкость предмета %1 — %2 blockly.block.item_cooldown_for=Перезаряжать %3 %1 тиков для %2 blockly.block.item_damage=Нанести урон %1 предмету %2 blockly.block.item_enchanted_with_xp=%1, зачарованный на %2 уровней опыта, зачарования сокровищ\: %3 blockly.block.item_fuel_power=Мощность топлива %1 +blockly.block.item_get_cooldown=Оставшаяся доля времени перезарядки %2 для сущности %1 blockly.block.item_get_damage=Урон предмета %1 blockly.block.item_get_enhancement=Уровень зачарования %2 предмета %1 blockly.block.item_get_max_damage=Максимальный урон предмета %1 +blockly.block.item_is_cooldown=%2 перезаряжается для сущности %1 blockly.block.item_is_enchantable=%1 можно зачаровать blockly.block.item_is_enchanted=%1 зачарован blockly.block.item_istype=Предмет %1 типа %2 @@ -1098,7 +1135,7 @@ blockly.block.math_random_number_between=Случайное целое числ blockly.block.mcitem_to_block=Предмет %2 %1 как %3 или воздух (AIR) в случае ошибки blockly.block.move_entity=Переместить %4 в x\: %1 y\: %2 z\: %3 blockly.block.place_schematic=Разместить структуру %6 %7 в x\: %1 y\: %2 z\: %3 с поворотом\: %4 отражением\: %5 %8 -blockly.block.play_sound=Проиграть звук %6 в x\: %1 y\: %2 z\: %3 уровень\: %4 высота\: %5 категория\: %7 +blockly.block.play_sound=Воспроизвести звук %6 в x\: %1 y\: %2 z\: %3 уровень\: %4 высота\: %5 категория\: %7 blockly.block.projectile_shoot_from_entity=Выстрелить %1 за сущность\: %2 со скоростью\: %3 неточность\: %4 %5 blockly.block.projectile_shoot_from_pos=Выстрелить %1 из x\: %2 y\: %3 z\: %4 в сторону dx\: %5 dy\: %6 dz\: %7 со скоростью\: %8 неточность\: %9 %10 blockly.block.projectiles_arrow=Стрела типа %1 с уроном\: %2 отталкиванием\: %3 пронзанием\: %4 стрелок\: %5 горящая\: %6 частицы\: %7 поднятие\: %8 @@ -1111,11 +1148,19 @@ blockly.block.set_time=Установить время на %1 %2 blockly.block.spawn_entity=Призвать сущность\: %4 в x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Призвать сущность\: %6 в x\: %1 y\: %2 z\: %3 поворот\: %4 наклон\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Призвать сущность\: %9 в x\: %1 y\: %2 z\: %3 поворот\: %4 наклон\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Создать предмет %1 в x\: %2 y\: %3 z\: %4 задержка получения\: %5 удаляемый\: %6 %7 +blockly.block.spawn_gem=Создать стопку с предметом %1 в x\: %2 y\: %3 z\: %4 задержка получения\: %5 удаляемая\: %6 %7 blockly.block.spawn_particle=Создать частицу в x\: %1 y\: %2 z\: %3 vx\: %4 vy\: %5 vz\: %6 тип\: %7 blockly.block.spawn_particle_multi=Создать %8 частиц на стороне сервера в x\: %1 y\: %2 z\: %3 в области dx\: %4 dy\: %5 dz\: %6 со скоростью %7 типа\: %9 %10 blockly.block.spawn_xporb=Создать сферу опыта в x\: %2 y\: %3 z\: %4 с количеством опыта %1 %5 blockly.block.strike_lightning=Ударить молнией в x\: %1 y\: %2 z\: %3 только визуально\: %4 %5 +blockly.block.team_add_entity=Добавить сущность %2 в команду %1 +blockly.block.team_create_new=Создать команду с именем %1 +blockly.block.team_delete=Удалить команду с именем %1 +blockly.block.team_get_entity_team=Команда сущности %1 +blockly.block.team_get_friendlyfire=Для команды %1 разрешён огонь по своим +blockly.block.team_remove_entity=Исключить сущность %2 из команды %1 +blockly.block.team_set_friendlyfire=Разрешить команде %1 огонь по своим\: %2 +blockly.block.team_set_friendlyfire.tooltip=Огонь по своим работает только с игроками. blockly.block.wait=Подождать %1 %2 тиков, затем на стороне сервера %5 %3 выполнить %4 blockly.block.world_data_heightat=Получить высоту %3 в x\: %1 z\: %2 blockly.block.world_data_biomeat=Биом в x\: %1 y\: %2 z\: %3 принадлежит типу %4 @@ -1220,7 +1265,7 @@ blockly.block.literal=Параметр %1 — слово %2 %3 blockly.block.literal.tooltip=Встроенная опция, подобная 'day', 'noon', 'normal', 'easy' и т. д. blockly.block.entity_get_armor_slot_item.tooltip=Ячейка 3 соответствует шлему, ячейка 0 — ботинкам blockly.block.entity_set_armor_slot_item.tooltip=Ячейка 3 соответствует шлему, ячейка 0 — ботинкам -blockly.block.entity_get_ticks_frozen=Получить время заморозки %1 в тиках +blockly.block.entity_get_ticks_frozen=Время заморозки %1 в тиках blockly.block.entity_set_ticks_frozen=Заморозить %1 на %2 тиков blockly.block.world_data_temperature.tooltip=Температура увеличена в 100 раз blockly.block.event_trigger.line1=Начало события — вызвано внешним триггером @@ -1390,6 +1435,7 @@ blockly.block.damagesource_get_entity=%2 Сущность, вызвавшая %1 blockly.block.damagesource_get_exhaustion=Истощение от урона %1 blockly.block.damagesource_is_cause_creative=%1 вызван игроком в творческом режиме blockly.block.damagesource_is_indirect=%1 — косвенный +blockly.block.damagesource_is_tagged_in=%1 имеется в связке типов урона %2 blockly.block.damagesource_scales_with_difficulty=%1 зависит от сложности blockly.block.direction_from_deps=Данная сторона blockly.block.direction_unspecified=Любая сторона @@ -1436,8 +1482,8 @@ blockly.block.return_itemstack=Вернуть предмет\: blockly.block.return_logic=Вернуть логическое\: blockly.block.return_number=Вернуть число\: blockly.block.return_string=Вернуть текст\: -blockly.block.registryname_to_mcitem=Получить предмет из имени в реестре %1 или AIR (воздух) в случае ошибки -blockly.block.registryname_to_mcitemblock=Получить блок из имени в реестре %1 или AIR (воздух) в случае ошибки +blockly.block.registryname_to_mcitem=Предмет из имени в реестре %1 или AIR (воздух) в случае ошибки +blockly.block.registryname_to_mcitemblock=Блок из имени в реестре %1 или AIR (воздух) в случае ошибки blockly.field_ai_condition_selector.tooltip.empty=Дважды щёлкните, чтобы изменить условия blockly.field_ai_condition_selector.tooltip.start_condition=Условие начала\: blockly.field_ai_condition_selector.tooltip.continue_condition=Условие продолжения\: @@ -1477,6 +1523,12 @@ dialog.workspace.export_workspace.compressing=Сжатие рабочего пр dialog.workspace.export_workspace.title=Экспорт рабочего пространства dialog.workspace.export_backup=Резервная копия проекта action.workspace.regenerate_and_build=Регенерация кода и сборка +tag.type.items=Предметы +tag.type.blocks=Блоки +tag.type.entities=Сущности +tag.type.functions=Функции +tag.type.biomes=Биомы +tag.type.damage_types=Типы урона modelement.unknown=Неизвестный modelement.achievement=Достижение modelement.armor=Броня @@ -1484,6 +1536,7 @@ modelement.biome=Биом modelement.block=Блок modelement.code=Пользовательский элемент modelement.command=Команда +modelement.damagetype=Тип урона modelement.dimension=Измерение modelement.enchantment=Зачарование modelement.gamerule=Игровое правило @@ -1521,6 +1574,7 @@ modelement.biome.description=Биом — это некоторая област modelement.block.description=Блок — базовый элемент Minecraft. Это трёхмерный объект, который может быть размещён в мире. modelement.code.description=Пользовательский элемент определяется с помощью пользовательского кода в редакторе. modelement.command.description=Команда — это набор текста и параметров, который запускает действие, когда пользователь вводит их в чат. +modelement.damagetype.description=Тип урона определяет, как урон применяется к сущностям. modelement.dimension.description=Измерение — это отдельный мир со своими собственными свойствами, который может иметь портал. modelement.enchantment.description=Зачарование — это модификатор, который добавляет специальные способности к предметам при наложении на них. modelement.gamerule.description=Игровое правило — это настраиваемый параметр определённого игрового мира. @@ -1654,6 +1708,8 @@ preferences.notifications.checkAndNotifyForUpdates=Уведомлять о вы preferences.notifications.checkAndNotifyForUpdates.description=Снимите флажок, если Вы не хотите получать уведомления о наличии обновлений.
Даже если Вы отключите эту опцию, при запуске будет показано небольшое уведомление в случае наличия обновлений. preferences.notifications.checkAndNotifyForPatches=Уведомлять о патчах к обновлениям при запуске MCreator preferences.notifications.checkAndNotifyForPatches.description=Снимите флажок, если Вы не хотите получать уведомления о выходе патчей.
Даже если Вы отключите эту опцию, при запуске будет показано небольшое уведомление в случае наличия обновлений. +preferences.notifications.showWebsiteNewsNotifications=Показывать уведомления о новостях на сайте при запуске +preferences.notifications.showWebsiteNewsNotifications.description=Если включено, окно выбора проекта будет показывать уведомления о новых новостях с сайта при запуске MCreator preferences.notifications.checkAndNotifyForPluginUpdates=Уведомлять об обновлениях плагинов сообщества preferences.notifications.checkAndNotifyForPluginUpdates.description=Снимите этот флажок, если вы не хотите получать уведомления об обновлениях сторонних плагинов.
Имейте в виду, что в случае, если серверы обновления плагинов сторонних производителей не работают или работают медленно,
эта опция может замедлить запуск MCreator и что эта опция позволяет сторонним плагинам,
которые мы не контролируем, получать доступ к их серверам обновления во время запуска MCreator. preferences.themes.select_theme=Выберите активную тему приложения @@ -2061,6 +2117,15 @@ elementgui.command.type=Тип\: elementgui.command.permission_level=Требуемый уровень разрешений\:
Минимальный уровень для использования команды elementgui.command.warning.empty_string=Имя команды не может быть пустым elementgui.command.arguments=Конструктор параметров и действий команды +elementgui.damagetype.damage_properties=Свойства урона +elementgui.damagetype.exhaustion=Величина истощения\:
По умолчанию — 0.1 +elementgui.damagetype.scaling=Урон зависит от сложности? +elementgui.damagetype.effects=Звуковой эффект урона\: +elementgui.damagetype.death_messages=Сообщения о смерти +elementgui.damagetype.normal_death_message=Простое сообщение о смерти\: +elementgui.damagetype.item_death_message=Сообщение о смерти от предмета\:
Используется при смерти игрока от сущности, держащей названный предмет +elementgui.damagetype.player_death_message=Сообщение о смерти от сущности\:
Используется при смерти игрока, спасающегося от сущности +elementgui.damagetype.error_empty_death_message=Сообщение о смерти не может быть пустым elementgui.dimension.can_player_respawn=Разрешено возрождение elementgui.dimension.has_fog=Включить плотный туман elementgui.dimension.is_dark=Выключить окружающий свет @@ -2081,7 +2146,7 @@ elementgui.dimension.biomes_in=Биомы в этом измерении\: elementgui.dimension.main_filler_block=Основной блок\:
Верхний мир, Нижний мир, Край elementgui.dimension.fluid_block=Основная жидкость\:
Верхний мир, Нижний мир, Край elementgui.dimension.sleep_result=Результат попытки сна\: -elementgui.dimension.fog_air_color=Переопределение цвета неба/тумана\:
При выборе DEFAULT цвет определяется текущей версией Minecraft +elementgui.dimension.fog_air_color=Переопределение цвета неба/тумана\:
Укажите DEFAULT для значения по умолчанию elementgui.dimension.enable_dimension_portal=Разрешить порталы в измерение\: elementgui.dimension.portal_frame_block=Блок рамки портала\: elementgui.dimension.portal_particles=Частицы блока портала\: @@ -2105,8 +2170,8 @@ elementgui.enchantment.curse=Является проклятием? elementgui.enchantment.allowed_on_books=Можно ли "хранить" в книгах? elementgui.enchantment.can_generate_in_loot_tables=Может ли появляться в таблицах добычи? elementgui.enchantment.can_villager_trade=Можно ли получить при торговле с крестьянином? -elementgui.enchantment.compatible_enchantments=Допустимые комбинации\:
Оставьте пустым для снятия ограничений -elementgui.enchantment.can_apply_to=Допустимые предметы\:
Оставьте пустым, чтобы разрешить наложение на все возможные предметы +elementgui.enchantment.compatible_enchantments=Допустимые комбинации\:
Оставьте пустым (в любом режиме) для снятия ограничений +elementgui.enchantment.can_apply_to=Допустимые предметы\:
Оставьте пустым (в любом режиме), чтобы разрешить наложение на все возможные предметы elementgui.enchantment.needs_name=У зачарования не определено название elementgui.gamerule.name=Название правила\: elementgui.gamerule.display_name=Видимое название правила\:
Будет показано в интерфейсе настройки значений правил @@ -2259,9 +2324,11 @@ elementgui.keybind.key_binding_category=Ключ перевода названи elementgui.keybind.key_procedure_triggers=Триггеры процедур привязки клавиш elementgui.keybind.error_key_needs_name=У привязки клавиши не определено имя elementgui.keybind.error_key_category_needs_name=У категории привязки клавиши не указан ключ перевода +elementgui.living_entity.visual_scale=Масштаб видимой модели\: +elementgui.living_entity.bounding_box_scale=Масштаб рамки-границы\: elementgui.living_entity.condition_solid_bounding_box=Рамка-граница сплошная? elementgui.living_entity.disable_collisions=Отключить столкновения -elementgui.living_entity.has_ai=Включить ИИ
При подключении убедитесь в определении задач ИИ ниже +elementgui.living_entity.has_ai=Включить ИИ
При подключении определите задачи ИИ ниже elementgui.living_entity.immune_fire=Огню elementgui.living_entity.immune_arrows=Стрелам elementgui.living_entity.immune_fall_damage=Урону от падения @@ -2275,14 +2342,17 @@ elementgui.living_entity.immune_trident=Трезубцам elementgui.living_entity.immune_anvil=Наковальням elementgui.living_entity.immune_wither=Иссушителю elementgui.living_entity.immune_dragon_breath=Драконье дыхание +elementgui.living_entity.is_water_mob=Сделать водной сущностью +elementgui.living_entity.condition_can_breathe_underwater=Может дышать под водой +elementgui.living_entity.condition_fluids_can_push=Сносится потоком воды elementgui.living_entity.is_flying_mob=Летающая сущность (игнорирует гравитацию, не получает урон от падения) elementgui.living_entity.spawn_dungeons=Призывать в подземельях elementgui.living_entity.is_rideable=Можно оседлать elementgui.living_entity.control_forward=Управление движением вперёд elementgui.living_entity.control_strafe=Управление движением вбок -elementgui.living_entity.is_breedable=Сделать животным, размножаемым предметом\:
Если отмечено, настройки поведения будут игнорироваться +elementgui.living_entity.is_breedable=Сделать животным, размножаемым предметом\:
Настройки поведения будут игнорироваться elementgui.living_entity.is_tameable=Можно приручить -elementgui.living_entity.is_ranged=Включить дальнюю атаку предметом, с интервалом и радиусом\:
Добавьте хотя бы одну задачу ИИ, определяющую сущности, на которых производятся атаки.
Если выбрано "Default item", укажите снаряд или оставьте пустым для использования стрелы. +elementgui.living_entity.is_ranged=Включить дальние атаки предметом, с интервалом и радиусом\:
Добавьте хотя бы одну задачу ИИ, определяющую целевые сущности.
Если выбрано "Default item", укажите снаряд (по умолчанию — стрела). elementgui.living_entity.event_struck_by_lightning=При попадании в сущность молнии elementgui.living_entity.event_mob_falls=При падении сущности elementgui.living_entity.event_mob_dies=При гибели сущности @@ -2298,6 +2368,7 @@ elementgui.living_entity.condition_is_shaking=Модель сущности др elementgui.living_entity.behaviour=Тип поведения ("Mob" — агрессивное, "Creature" — пассивное)\: elementgui.living_entity.creature_type=Тип существа (определяет некоторые особые атрибуты сущности)\: elementgui.living_entity.drop_health_xp_amount=Дроп, здоровье, опыт сущности\: +elementgui.living_entity.model_layers=Список слоёв модели elementgui.living_entity.follow_range_tracking_range=Дальность преследования и слежки\: elementgui.living_entity.attack_strenght_armor_value_knockback=Сила атаки, защита брони, отталкивание, сопротивление отталкиванию\: elementgui.living_entity.movement_speed_step_height=Скорость движения, высота шага\: @@ -2306,11 +2377,16 @@ elementgui.living_entity.is_immune_to=Включить невосприимчи elementgui.living_entity.ridable=Отметьте, чтобы игрок смог кататься на этой сущности
Также можно включить управление сущностью elementgui.living_entity.water_mob=Отметьте, чтобы эта сущность являлась водной\:
ВНИМАНИЕ\: Для использования сущностью этих свойств необходимо добавить задачи ИИ elementgui.living_entity.flying_mob=Отметьте, чтобы эта сущность могла летать\:
ВНИМАНИЕ\: Для использования сущностью этих свойств необходимо добавить задачи ИИ +elementgui.living_entity.add_model_layer=Добавить новый слой +elementgui.living_entity.layer_model=Модель\: +elementgui.living_entity.layer_texture=Текстура\: +elementgui.living_entity.layer_should_glow=Включить свечение +elementgui.living_entity.layer_display_condition=Условие видимости +elementgui.living_entity.layer_needs_texture=Не указана текстура слоя модели elementgui.living_entity.name=Имя сущности\: elementgui.living_entity.entity_model=Модель сущности\:
Поддерживается\: JAVA elementgui.living_entity.entity_model_import=Нажмите, чтобы импортировать текстуру модели сущности elementgui.living_entity.texture=Текстура сущности\:
Должна соответствовать модели (например, скин игрока не является текстурой модели Biped) -elementgui.living_entity.glow_texture=Светящаяся текстура сущности (опционально)\:
Текстура со свечением должна соответствовать модели, яркость изображения определяет уровень света elementgui.living_entity.bounding_box=Рамка-граница модели сущности\:
Ширина/Глубина, Высота, Размер тени, Смещение пассажира по оси Y elementgui.living_entity.spawn_egg_options=Свойства яйца призыва\:
Включить, цвет основы, цвет точек, вкладка в творческом меню elementgui.living_entity.mob_boss=Отметьте, чтобы эта сущность была боссом с полосой здоровья\: @@ -2332,14 +2408,24 @@ elementgui.living_entity.does_spawn_in_dungeons=Появляется ли эта elementgui.living_entity.spawn_general_condition=Пользовательское условие генерации\:
При подключении будет игнорироваться ванильное условие, задаваемое типом генерации
, но будут по-прежнему учитываться определяемые им группировка и вес записей.
elementgui.living_entity.bind_to_gui=Привязать эту сущность к интерфейсу\:
Укажите "Empty" (по умолчанию) для отключения инвентаря
elementgui.living_entity.inventory_size=Размер инвентаря (количество ячеек)\:
Укажите здесь самый большой ID ячейки в привязанном интерфейсе + 1 +elementgui.living_entity.entity_data=Параметры данных сущности
Синхронизируются между клиентом и сервером +elementgui.living_entity.entity_data_entries=Параметры данных +elementgui.living_entity.entity_data_entries.name=Имя\: +elementgui.living_entity.entity_data_entries.type=Тип\: +elementgui.living_entity.entity_data_entries.default_value=Значение по умолчанию\: +elementgui.living_entity.entity_data_entries.add_entry=Добавить запись +elementgui.living_entity.entity_data_entries.add_entry.name=Имя параметра\: +elementgui.living_entity.entity_data_entries.add_entry.type=Тип параметра\: +elementgui.living_entity.entity_data_entries.add_entry.title=Новый параметр elementgui.living_entity.error_entity_model_needs_texture=Не указана текстура модели сущности elementgui.living_entity.error_entity_needs_name=Не задано имя сущности elementgui.living_entity.page_visual=Внешний вид +elementgui.living_entity.page_model_layers=Слои модели elementgui.living_entity.page_sound=Звуки elementgui.living_entity.page_behaviour=Поведение +elementgui.living_entity.page_entity_data=Параметры данных elementgui.living_entity.page_ai_and_goals=ИИ и цели elementgui.living_entity.page_spawning=Генерация -elementgui.loot_table.name=Таблица добычи elementgui.loot_table.registry_name=Имя таблицы добычи в реестре\:
Добавьте префикс (такой, как "blocks/") для задания категории elementgui.loot_table.namespace=Домен таблицы добычи\:
Используйте "minecraft" для изменения ванильных таблиц elementgui.loot_table.type=Тип таблицы добычи\: @@ -2512,7 +2598,7 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=У рецеп elementgui.recipe.error_brewing_no_input_ingredient_and_result=У рецепта зельеварки должны быть определены исходный предмет, ингредиент и результат (отличные от воздуха) elementgui.structuregen.event_structure_instance_generated=При генерации структуры elementgui.structuregen.import_tooltip=Щёлкните для импорта файла NBT структуры
Больше параметров — в разделе "Структуры" на вкладке "Проект". -elementgui.structuregen.select_tooltip=Создаваемая структура\:
Больше параметров импорта структуры — в разделе "Структуры" на вкладке "Проект" +elementgui.structuregen.select_tooltip=Размещаемая структура\:
Больше параметров импорта структуры — в разделе "Структуры" на вкладке "Проект" elementgui.structuregen.ignore_blocks=Игнорировать блоки при размещении\: elementgui.structuregen.surface_detection_type=Карта высот для выбора поверхности\: elementgui.structuregen.terrain_adaptation=Подгонка ландшафта\: @@ -2523,7 +2609,7 @@ elementgui.structuregen.separation_spacing=Распределение по ча elementgui.structuregen.separation=Разделение\: elementgui.structuregen.spacing=Дистанция\: elementgui.structuregen.error_select_biomes=Необходимо выбрать хотя бы один биом\! -elementgui.structuregen.error_select_structure_spawn=Для продолжения необходимо выбрать структуру, которая будет генерироваться. +elementgui.structuregen.error_select_structure_spawn=Выберите структуру для генерации elementgui.tab.name=Название творческой вкладки\: elementgui.tab.icon=Иконка вкладки\: elementgui.tab.search_bar=Добавить строку поиска\: @@ -2593,9 +2679,8 @@ workspace.textures.new=Создать новую текстуру workspace.textures.import=Импорт текстур workspace.textures.edit_selected=Изменить выбранное... workspace.textures.duplicate_selected=Копировать выбранное... -workspace.textures.delete_selected=Удалить выбранное +workspace.textures.replace_selected=Заменить выбранное... workspace.textures.export_selected=Экспорт выбранного... -workspace.textures.confirm_deletion_message=Вы уверены, что хотите удалить этот файл?
ПРИМЕЧАНИЕ\: Если файл где-либо используется, это может привести к повреждённым текстурам\! workspace.textures.select_dupplicate_type=Выберите тип текстуры — копии выбранной\: workspace.textures.select_texture_type=Каков тип текстуры в этом файле? workspace.textures.category.block=Текстуры блоков\: @@ -2608,46 +2693,33 @@ workspace.textures.category.armor=Текстуры брони\: workspace.textures.category.other=Другие текстуры (картины, логотип мода и т. п.)\: workspace.3dmodel.description={0}
Привязка текстур\: {1} workspace.3dmodels.edit_texture_mappings=Изменить привязки текстур... -workspace.3dmodels.redefine_animations=Изменить анимации модели... -workspace.3dmodels.delete_selected=Удалить выбранное -workspace.3dmodels.delete_confirm_message=Вы уверены, что хотите удалить эту модель?
ПРИМЕЧАНИЕ\: Если модель где-либо используется, это может привести к повреждённым текстурам
и ошибкам сборки некоторых элементов\! -workspace.3dmodels.regenerating_code=Регенерация кода -workspace.3dmodels.regenerating_entity_code=Регенерация кода сущностей -workspace.3dmodels.rebuilding_workspace=Сборка рабочего пространства +workspace.3dmodels.redefine_animations=Изменить анимацию модели... workspace.3dmodels.animation_unsupported_title=Анимации не поддерживаются workspace.3dmodels.animation_unsupported_message=Эта модель не поддерживает анимации\! workspace.3dmodels.mappings_unsupported_title=Нет привязок workspace.3dmodels.mappings_unsupported_message=Эта модель не поддерживает привязки текстур\! -workspace.sounds.confirm_deletion_message=Вы уверены, что хотите удалить этот звук?
ПРИМЕЧАНИЕ\: Если звук где-либо используется, он больше не будет работать\! workspace.sounds.edit_selected=Изменить выбранное... workspace.sounds.play_selected=Воспроизвести выбранное -workspace.sounds.delete_selected=Удалить выбранное workspace.sounds.category=Категория звука\: {0} workspace.sounds.files=Звуковые файлы\: {0} workspace.sounds.subtitle_and_category=Подзаголовок\: {0}, Категория звука\: {1} workspace.screenshots.export_selected=Экспорт выбранного... -workspace.screenshots.delete_selected=Удалить выбранное workspace.screenshots.action_complete=Действие завершено workspace.screenshots.use_background_message=Выбранные скриншоты будут использоваться в качестве возможного фона при следующем запуске. workspace.screenshots.use_as_background=Использовать в качестве фона MCreator... -workspace.structure.confirm_deletion_message=Вы уверены, что хотите удалить эти структуры?
ПРИМЕЧАНИЕ\: Если структуры где-либо используются, они больше не будут работать\! workspace.variables.variable_name=Имя переменной workspace.variables.variable_type=Тип переменной workspace.variables.variable_scope=Область переменной workspace.variables.initial_value=Начальное значение workspace.variables.add_new=Добавить новую переменную -workspace.variables.remove_selected=Удалить выбранное workspace.variables.help=Справка по переменным workspace.variables.change_type=Вы уверены, что хотите изменить эту переменную?
Если переменная где-либо используется, это действие может привести к ошибкам сборки.
Однако, этого не случится, если Вы только что создали её. -workspace.variables.remove_variable_confirmation=Вы уверены, что хотите удалить эти переменные?
Если переменные где-либо используются, это действие может привести к ошибкам сборки. workspace.localization.add_entry=Добавить запись локализации -workspace.localization.remove_selected=Удалить выбранное workspace.localization.export_to_csv=Экспорт текущего языка в CSV workspace.localization.import_csv=Импорт CSV в текущий язык workspace.localization.key_name_title=Имя ключа workspace.localization.key_name_message=Введите имя ключа пользовательской записи\: workspace.localization.confirm_delete_map=Вы уверены, что хотите удалить эту карту переводов? -workspace.localization.confirm_delete_entry=Вы уверены, что хотите удалить эти записи?
ПРИМЕЧАНИЕ\: Если записи где-либо используются, имена привязанных к ним элементов не будут работать\! workspace.localization.export_translation=Экспорт карты переводов workspace.localization.confirm_export=Стандартная карта (en_us) не может быть экспортирована\!
Тексты на этом языке определены в элементах мода. workspace.localization.warning_export=Вы не можете импортировать CSV в стандартную карту (en_us)\!
Тексты на этом языке определены в элементах мода. @@ -2871,6 +2943,8 @@ dialog.list_field.biome_list_title=Выберите биомы dialog.list_field.biome_list_message=Выберите биомы, которые Вы хотите добавить в список\: dialog.list_field.biome_default_feature_title=Выберите стандартные особенности биома dialog.list_field.biome_default_feature_message=Выберите особенности, которые Вы хотите добавить в список\: +dialog.list_field.damage_type_list_title=Выберите типы урона +dialog.list_field.damage_type_list_message=Выберите типы урона, которые Вы хотите добавить в список\: dialog.list_field.dimension_title=Выберите измерения dialog.list_field.dimension_message=Выберите измерения, которые Вы хотите добавить в список\: dialog.list_field.enchantment_title=Выберите зачарования @@ -2888,6 +2962,7 @@ dialog.selector.damagesources.message=Пожалуйста, выберите т dialog.selector.dimension.message=Пожалуйста, выберите измерение\: dialog.selector.enchantments.message=Выберите зачарование\: dialog.selector.entity.message=Пожалуйста, выберите сущность\: +dialog.selector.entity_data.message=Пожалуйста, выберите параметр данных\: dialog.selector.fluids.message=Пожалуйста, выберите жидкость\: dialog.selector.gamerules.message=Пожалуйста, выберите игровое правило\: dialog.selector.gui.message=Пожалуйста, выберите интерфейс\: @@ -2943,6 +3018,17 @@ dialog.tools.inject_tags.tag.biomes.minecraft.is_river=Служит для оп dialog.tools.inject_tags.tag.biomes.minecraft.is_hill=Служит для определения биомов, подобных холмам. dialog.tools.inject_tags.tag.biomes.minecraft.is_forest=Служит для определения биомов, подобных лесу. dialog.tools.inject_tags.tag.biomes.minecraft.is_savanna=Служит для определения биомов, подобных саванне. +dialog.tools.inject_tags.tag.damage_types.minecraft.is_drowning=Типы урона в этой связке контролируются эффектом "Подводное дыхание" и игровым правилом "drowningDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_explosion=Типы урона в этой связке контролируются зачарованием "Взрывоустойчивость". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fall=Типы урона в этой связке контролируются эффектом "Плавное падение", зачарованием "Невесомость" и игровым правилом "fallDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fire=Типы урона в этой связке контролируются эффектом "Огнестойкость", зачарованием "Огнеупорность" и игровым правилом "fireDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_freezing=Типы урона в этой связке контролируются кожаной бронёй и игровым правилом "fallDamage". +dialog.tools.inject_tags.tag.damage_types.minecraft.is_projectile=Типы урона в этой связке контролируются зачарованием "Защита от снарядов". +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_armor=Типы урона в этой связке игнорируют броню и щиты. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_cooldown=Типы урона в этой связке игнорируют время неуязвимости. +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_effects=Типы урона в этой связке игнорируют любую защиту (эффекты зелий, броню и зачарования). +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_enchantments=Типы урона в этой связке игнорируют зачарования брони (например, "Защита"). +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_shield=Типы урона в этой связке игнорируют блокировку урона щитом. workspace_file_browser.title=Обозреватель файлов проекта workspace_file_browser.search=Поиск по имени файла workspace_file_browser.open=Открыть @@ -2984,7 +3070,7 @@ gradle.errors.clear_caches=Очистить кэш Gradle gradle.errors.open_options=Открыть настройки Gradle gradle.errors.open_help_page=Открыть страницу справки gradle.errors.cache_corrupted=Кэш Gradle повреждён\!

Похоже, что кэшированные зависимости Gradle повреждены либо устарели.
Кэш должен быть очищен и перезагружен. Это можно сделать, нажав на кнопку ниже.

Первая после очистки кэша сборка Gradle может длиться немного дольше, чем обычно. -gradle.errors.cache_outdated=Кэш Gradle устарел\!

Вы используете MCreator в автономном режиме. Кэш устарел и нуждается в обновлении.
Вам нужно отключить автономный режим в настройках MCreator,
чтобы Gradle мог скачать новые версии зависимостей Gradle и других кэшированных файлов.

После этого автономный режим может быть вновь включён. +gradle.errors.cache_outdated=Кэш Gradle устарел\!

Вы используете MCreator в автономном режиме. Кэш устарел и нуждается в обновлении.
Вам необходимо отключить автономный режим в настройках MCreator,
чтобы Gradle мог скачать новые версии зависимостей Gradle и других кэшированных файлов.

После этого автономный режим может быть вновь включён. gradle.errors.reobf_failed=Ошибка задачи Gradle "reobfJar"\!
Это происходит, если в именах файлов используются символы не из ASCII (буквы, кроме латинских). gradle.errors.internet_interrupted=Интернет-соединение было разорвано\!
Во время работы Gradle Ваше подключение к Интернету было нарушено, и Gradle не удалось
завершить загрузку необходимых файлов. Пожалуйста, убедитесь в стабильности подключения
и повторите последнее действие с доступом к Интернету. gradle.errors.no_internet=Gradle не удалось подключиться к интернету\!
Gradle не удалось загрузить необходимые файлы, так как подключение к интернету недоступно либо заблокировано
брандмауэром или антивирусным ПО. Если у других приложений есть интернет, попробуйте отключить брандмауэр и/или антивирусы.
В противном случае попробуйте запустить MCreator, когда появится подключение, т. к. Gradle требуется доступ к интернету
для выполнения некоторых задач.

Эта проблема также может быть вызвана перегрузкой нужных серверов. Если это так, попробуйте запустить MCreator,
когда нагрузка на них будет ниже. Может потребоваться несколько попыток,
поскольку предсказать уровень нагрузки проблематично. @@ -3035,6 +3121,18 @@ action.image_editor.save=Сохранить action.image_editor.save.tooltip=Нажмите, чтобы сохранить изменения в существующем файле. Для нового файла откроется диалоговое окно "Сохранить как". action.image_editor.redo=Вернуть изменения action.image_editor.redo.tooltip=Нажмите, чтобы вернуть изменения +action.image_editor.selection.clear=Очистить выделение +action.image_editor.selection.clear.tooltip=Нажмите для сброса выделенной области +action.image_editor.copy=Копировать +action.image_editor.copy.tooltip=Нажмите для копирования выделенной области в буфер обмена +action.image_editor.copy_all=Копировать всё +action.image_editor.copy_all.tooltip=Нажмите для копирования всего изображения в буфер обмена +action.image_editor.cut=Вырезать +action.image_editor.cut.tooltip=Нажмите для перемещения выделенной области в буфер обмена +action.image_editor.paste=Вставить +action.image_editor.paste.tooltip=Нажмите для вставки содержимого буфера обмена +action.image_editor.delete=Удалить +action.image_editor.delete.tooltip=Нажмите для удаления выбранной области action.ide.save=Сохранить код action.ide.save.result=Код сохранён action.ide.save.tooltip=Нажмите для сохранения кода в текущем редакторе @@ -3045,11 +3143,13 @@ common.add=Добавить common.close=Закрыть common.cancel=Отмена common.confirmation=Подтверждение +common.delete_selected=Удалить выбранное common.dependency={0}, тип\: {1} common.mod_element_name=Имя элемента мода common.namespace=Пространство имён common.name_already_exists=Это имя уже используется common.not_applicable=Н/Д +common.search_usages=Поиск использований в проекте common.warning=Предупреждение components.collapsible_panel.expand=Нажмите, чтобы развернуть components.collapsible_panel.collapse=Нажмите, чтобы свернуть @@ -3182,4 +3282,7 @@ notification.common.more_info=Подробнее notification.update_available.msg=Доступна новая версия MCreator.

Установленная версия\: {0}
Новая версия\: {1} notification.patch_available.msg=Доступна новая сборка версии {0}.

Установленная версия\: {0}.{1}
Новая версия\: {0}.{2} notification.plugin_updates.msg=Доступны обновления некоторых плагинов +notification.news.title=Новости на сайте\: {0} +notification.news.read_more=Узнать больше +notification.news.hide=Скрыть уведомление simple_list_entry.remove=Удалить эту запись \ No newline at end of file diff --git a/plugins/mcreator-localization/lang/texts_sv_SE.properties b/plugins/mcreator-localization/lang/texts_sv_SE.properties index 910490182f7..8487cdc3211 100644 --- a/plugins/mcreator-localization/lang/texts_sv_SE.properties +++ b/plugins/mcreator-localization/lang/texts_sv_SE.properties @@ -75,10 +75,6 @@ dialog.animation_maker.settings=Animationsinställningar dialog.animation_maker.next_frame=Nästa frame dialog.animation_maker.previous_frame=Föregående frame dialog.animation_maker.animation_timeline=Animationstidslinje -dialog.animation_maker.add_frames=Lägg till frame(s) ... -dialog.animation_maker.add_frames_from_template=Lägg till frames från mall... -dialog.animation_maker.add_frames_from_strip=Lägg till frames från animationsremsa ... -dialog.animation_maker.add_frames_from_gif=Lägg till frames från GIF... dialog.animation_maker.gif_importing=GIF-import dialog.animation_maker.gif_reading=Läser GIF dialog.animation_maker.gif_processing=Bearbetar GIF @@ -115,9 +111,7 @@ dialog.cache_cleanup.title=Rensning av Gradle cacher dialog.cache_cleanup.progress.stopping_daemons=Slutar köra Gradle daemons dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Rensar Gradle cache mappen dialog.cache_cleanup.progress.build_task=Körs Gradle bygguppgift -dialog.code_error.compilation_desc=En eller flera av dina huvudsakliga mod filer sammanställdes inte ordentligt.

Detta orsakas vanligtvis av inkonsekvenser i mod koden under byggandes.
MCreator kan lösa detta problem åt dig genom att regenerera hela mod's kod.

Om du har låst mod element eller mod bas-filer, Då kan de orsaka denna fel också.


Klicka Regenerera kod för att fortsätta med denna åtgärd.
dialog.code_error.compilation_title=Fel vid kompilering av huvudmod-fil -dialog.code_error.compilation_list=Din arbetsyta innehåller moddelement som inte kompilerar ordentligt.

Detta var sannolikt orsakat av det senaste mod elementet du lagt till eller redigerat. Försök att ändra inställningarna för mod element
som orsakar bygg fel (såsom element listas nedan) för att försöka åtgärda detta problem.

Om du inte kan lösa detta problem, exportera arbetsytan till delad ZIP-fil från File -menyn och skicka den till oss via
vår ärendehanterare på GitHub så att vi kan försöka hjälpa dig.

Lista över moddelement som orsakar kompileringsfel (trimmade till upp till 10 element)\:

dialog.code_error.regenerate_code=Regenerera kod dialog.code_error.ignore_error=Ignorera fel dialog.code_error.show_in_workspace=Visa i arbetsytan @@ -332,7 +326,6 @@ dialog.modelement_id.info_message_title=Mod-elementkoden är låst dialog.modelement_id.registry_name=Registreringsnamn\: dialog.modelement_id.registry_name_info=Registreringsnamn (inte alla mod-element använder det) dialog.modelement_id.registry_name_validator=Registreringsnamn -dialog.modelement_id.use_caution_warn=Använd detta verktyg med försiktighet\!

Att ändra Id\: n kan bryta dina befintliga världsparningar och orsaka
konflikter med andra mod-element från din mod\! dialog.modelement_id.id_and_registry_names="{0} - Registernamn" dialog.modelement_id.invalid_registry_name=Registernamnet du angav är inte giltigt\!
Ändringarna har inte sparats. dialog.modelement_id.invalid_registry_name_title=Ogiltigt registreringsnamn @@ -401,7 +394,6 @@ dialog.textures_mapping.title_for_model=Texturkartläggning för modell dialog.textures_mapping.add_new=Lägg till ny texturkartläggning dialog.textures_mapping.enter_name_message=Ange namn på texturkartläggningen.
Detta namn används för att identifiera din uppsättning texturer när
du väljer en texturkartläggning för din modell. dialog.textures_mapping.enter_name_title=Ny texturkartläggning -dialog.textures_mapping.jump_to=Hoppa till ... dialog.textures_mapping.save=Spara kartläggningar dialog.textures_mapping.model_texture_part=Modelltextur del\:
{0} dialog.textures_mapping.confirm_deletion_message=Är du säker på att du vill ta bort denna texturkartläggning?
Du kan få trasiga texturer om kartläggningen fortfarande används\! @@ -501,7 +493,6 @@ workspace.elements.list.filter=Filtrera workspace.elements.list.filter_all=Visa alla workspace.elements.list.filter_locked=Låsta element workspace.elements.list.filter_witherrors=Element med byggfel -workspace.category.mod_elements=Mod-element workspace.category.resources=Resurser workspace.category.variables=Variabler workspace.category.localization=Lokalisering @@ -514,12 +505,10 @@ workspace.elements.list.edit.delete=Radera workspace.elements.list.edit.duplicate=Duplicera mod element... workspace.elements.list.edit.code=Öppna mod element i kodredigerare workspace.elements.list.edit.lock=Lås upp/lås upp mod element -workspace.elements.list.edit.id=Redigera mod element ID... workspace.elements.list.edit.add.folder=Lägg till en ny mapp... workspace.elements.list.edit.rename.folder=Döp om vald mapp... workspace.elements.delete.tooltip=Radera valt mod element workspace.elements.edit_code.tooltip=Redigera kod för valt mod element -workspace.elements.edit_registry_names.tooltip=Redigera mod elementets ID och registreringsnamn workspace.elements.empty.tip=Tryck på %1 för att lägga till mod element workspace.elements.lock_modelement_confirm=Lås upp/lås upp mod elementets kod? workspace.elements.lock_modelement_title=Lås/lås upp mod element @@ -581,8 +570,6 @@ trigger.entity_tamed=Entitet tämjs trigger.entity_travels_to_dimension=Entitet reser till en dimension trigger.explosion_occurs=En explosion sker trigger.farmland_trampled=Åkerjord trampas ner -trigger.gem_dropped=Juvel tappas -trigger.gem_expired=Juvel förfaller trigger.item_crafted=Föremål tillverkas trigger.item_destroyed=Föremål förstörs trigger.item_smelted=Föremål smälts @@ -722,11 +709,9 @@ blockly.block.entity_execute_command=Kör kommandot /%1 i namnet av %2 %3 blockly.block.entity_foodlevel=Få matnivå på %1 blockly.block.entity_get_absorption=Få absorptionshälsa på %1 blockly.block.entity_get_first_passenger=%2 Få första passageraren av %1 -blockly.block.entity_get_fly_speed=Hämta flyghastighet av %1 blockly.block.entity_get_oxygen=Hämta syrehalten av%1 blockly.block.entity_get_saturation=Få matmättnadsnivå av %1 blockly.block.entity_get_slot=Hämta en kopia av föremål från plats %1 i %2 y\: z\: om den har ett förråd -blockly.block.entity_get_walk_speed=Hämta gånghastighet på %1 blockly.block.entity_getowner=%2 Hämta ägare av %1 om tämjd blockly.block.entity_has_achievement=Har %1 klarat avancemang %2 %3 blockly.block.entity_has_recipe=Har %1 upplåst recept %2 @@ -815,7 +800,6 @@ blockly.block.set_time=Sätt tiden till %1 %2 blockly.block.spawn_entity=Skapa entitet\: %4 vid x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Skapa entitet\: %6 vid x\: %1 y\: %2 z\: %3 med yaw\: %4 pitch\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Skapa entitet\: %9 vid x\: %1 y\: %2 z\: %3 med aw\: %4 pitch\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Skapa föremål/pärla %1 vid x\: %2 y\: %3 z\: %4 upphämtnings fördröjning\: %5 despawn\: %6 %7 blockly.block.spawn_particle_multi=Skapa %8 partiklar på serversidan vid x\: %1 y\: %2 z\: %3 i område dx\: %4 dy\: %5 dz\: %6 med hastighet %7 typ\: %9 %10 blockly.block.spawn_xporb=Skapa XP-klot vid x\: %2 y\: %3 z\: %4 med xp-beloppet %1 %5 blockly.block.strike_lightning=Strejka blixt på x\: %1 y\: %2 z\: %3 effekt endast\: %4 %5 diff --git a/plugins/mcreator-localization/lang/texts_tr_TR.properties b/plugins/mcreator-localization/lang/texts_tr_TR.properties index bb281c3c609..1931cf2a340 100644 --- a/plugins/mcreator-localization/lang/texts_tr_TR.properties +++ b/plugins/mcreator-localization/lang/texts_tr_TR.properties @@ -79,10 +79,6 @@ dialog.animation_maker.settings=Animasyon ayarları dialog.animation_maker.next_frame=Sonraki kare dialog.animation_maker.previous_frame=Önceki kare dialog.animation_maker.animation_timeline=Animasyon kronolojisi -dialog.animation_maker.add_frames=Kare(ler) ekle -dialog.animation_maker.add_frames_from_template=Şablondan bir kare seçin ... -dialog.animation_maker.add_frames_from_strip=Animasyona kare ekle... -dialog.animation_maker.add_frames_from_gif=GIF'den kareler ekle dialog.animation_maker.gif_importing=GIF içe aktar dialog.animation_maker.gif_reading=GIF Okunuyor dialog.animation_maker.gif_processing=GIF işleniyor @@ -119,9 +115,7 @@ dialog.cache_cleanup.title=Gradle önbelleği temizleme dialog.cache_cleanup.progress.stopping_daemons=Gradle daemons durduruluyor dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Gradle önbellek dosyası temizleniyor dialog.cache_cleanup.progress.build_task=Gradle yapılandırma görevi çalıştırılıyor -dialog.code_error.compilation_desc= Ana mod dosyanız düzgün bir şekilde derlenmedi.

Bu genellikle derlemeler sırasında mod kodundaki tutarsızlıklardan kaynaklanır.
MCreator bu sorunu çözebilir sizin için tüm mod kodunu yeniden oluşturarak.

Mod öğelerini veya mod temel dosyalarını kilitlediyseniz, bunlar da bu hataya neden olabilir.


Kodu yeniden oluştur Bu işleme devam etmek içindüğmesine basın.
dialog.code_error.compilation_title=Ana mod dosyası derleme hataları -dialog.code_error.compilation_list=Projenizde düzgün çalışmayan şeyler var.

En son eklediğiniz elemandan kaynaklanmış olması muhtemel.
Hataya neden olan mod öğelerinin ayarlarını değiştirmeyi deneyin.

Sorunu çözemezsenizDosyamenüsünden paylaşılabilir ZIP dosyasına çevirip hata izleyicimizle paylaşın, böylece size yardımcı olabiliriz.
.

Hataya neden olan mod öğelerinin listesi (en fazla 10 öğe gösterilir)\:

dialog.code_error.regenerate_code=Kodu yeniden oluştur dialog.code_error.ignore_error=Hataları Yoksay dialog.code_error.show_in_workspace=Çalışma Alanında Göster @@ -352,7 +346,6 @@ dialog.modelement_id.info_message_title=Mod öğesinin kodu kilitlendi dialog.modelement_id.registry_name=kayıt adı\: dialog.modelement_id.registry_name_info=kayıt adı (mod elements hepsinde kullanmalısın) dialog.modelement_id.registry_name_validator=kayıt adı -dialog.modelement_id.use_caution_warn= Bu aracı dikkatli kullanın\!

Kayıt adlarını değiştirmek, mevcut dünya kayıtlarınızı bozabilir ve
modunuzdaki diğer mod öğeleriyle çatışmalara neden olabilir\! dialog.modelement_id.id_and_registry_names="{0} - Kayıt adı" dialog.modelement_id.invalid_registry_name=Girdiğin kayıt adı geçerli değil\!
Değişiklikler kaydedilmedi. dialog.modelement_id.invalid_registry_name_title=geçersiz kayıt adı @@ -427,7 +420,6 @@ dialog.textures_mapping.title_for_model=Model için doku eşleşmeleri dialog.textures_mapping.add_new=Yeni doku eşleştirmesi ekle dialog.textures_mapping.enter_name_message=Doku eşleme adınızı girin.
Bu ad, modeliniz için bir doku eşlemesi seçerken
doku kümenizi tanımlamak için kullanılır. dialog.textures_mapping.enter_name_title=Yeni doku eşleşmesi -dialog.textures_mapping.jump_to=Atla... dialog.textures_mapping.save=Eşleşmeyi kaydet dialog.textures_mapping.model_texture_part=Model görünüş parçası\:
{0} dialog.textures_mapping.confirm_deletion_message=görünüşleri silmek istediğine emin misin?
eyer hala kullanımdaysa bozuk görünüşler elde edebilirsin\! @@ -550,7 +542,6 @@ workspace.elements.list.filter_all=Tümünü göster workspace.elements.list.filter_locked=kilitlenmiş elementler workspace.elements.list.filter_witherrors=oluşturma hatalı elementler workspace.elements.list.ascending=Artan -workspace.category.mod_elements=Mod elementleri workspace.category.resources=kaynaklar workspace.category.variables=değişkenler workspace.category.localization=Yerelleştirme @@ -567,14 +558,11 @@ workspace.elements.list.edit.delete=Sil workspace.elements.list.edit.duplicate=Yinelenen mod bileşeni... workspace.elements.list.edit.code=Mod bileşenini kod editöründe aç workspace.elements.list.edit.lock=Mod bileşenini kilitle/aç -workspace.elements.list.edit.id=Mod bileşeni IDlerini düzenle... workspace.elements.list.edit.add.folder=Yeni klasör ekle... workspace.elements.list.edit.rename.folder=Seçili klasörü yeniden adlandır... -workspace.elements.confirm_delete_message= Seçili ({0}) öğeleri silmek istediğinizden emin misiniz?

Seçili mod öğelerinin verilerini diğer mod öğelerinde kullandıysanız (tarif olarak, durumda, sekme olarak, ...) buna bağlı olan öğeleri de silmeniz gerekir\! Aksi takdirde, derleme hataları alırsınız.

Silinmiş klasör ve alt klasörlerdeki mod öğeleri üst klasöre taşınacaktır workspace.elements.delete.tooltip=seçilmiş mod elementini sil workspace.elements.edit_code.tooltip=seçilmiş mod elementinin kodlarını düzenle workspace.elements.lock_code_tooltip=Öğe Kodunu Kilitle / Kilidini Aç
Kod kilitlendikten sonra, MCreator kodu değiştirmeyecek, böylece değişiklik türü Kod görünümünden
düzenlenebilir hale gelir ve çalışma alanı değiştirilirken bile kod korunur.
Bunu yalnızca kodu manuel olarak düzenlemek istiyorsanız ve değişiklik öğesinin kodunu engellemenin sonuçlarının farkındaysanız kullanın\! -workspace.elements.edit_registry_names.tooltip=mod elementinin ID'sini ve kayıt adını düzenle workspace.elements.empty.tip=Mod bileşenleri eklemek için %1 bas workspace.elements.lock_modelement_message=Değişiklik öğesi kodunu kilitlemeye / kilidini açmaya çalışıyorsunuz\!

Kod kilitlendiğinde, MCreator kaynak kodunu değiştirmez, ancak bu
MCreator güncellendiğinde, hata düzeltmeleri ve güncellemeler olduğunda Minecraft sürümleri
kilitli öğelere uygulanmayacaktır.

Şimdi seçilen Kilitli Modların kilidi açılacaktır.
Bu eylemi kullanmadan önce MCreator'ın kilitleme kodundaki wiki sayfasını okuyun. workspace.elements.lock_modelement_confirm=Değişiklik Öğesi Kodunu Kilitle / Kilidini Aç? @@ -648,8 +636,6 @@ trigger.entity_travels_to_dimension=Varlık boyut değiştirdiğinde trigger.entity_uses_totem=Varlık ölmeme totemini kullanır trigger.explosion_occurs=Patlama meydana gelince trigger.farmland_trampled=Tarım alanı ciğnendiğinde -trigger.gem_dropped=eşya düşdüğünde -trigger.gem_expired=Eşyanın Dayanıklılığı bittiğinde trigger.item_crafted=eşya üretildiğinde trigger.item_destroyed=eşya parçalandığında trigger.item_smelted=eşya eritildiğinde @@ -812,7 +798,6 @@ blockly.block.entity_foodlevel=%1 'nin yiyecek seviyesini al blockly.block.entity_get_absorption=%1 seviyesinde soğurma efekti ver blockly.block.entity_get_armor_slot_item=%1'nın %2 zırh yuvasından öğe alın blockly.block.entity_get_fire_ticks=%1'in yanmaya devam edeceği tick süresini al -blockly.block.entity_get_fly_speed=%1 'nin uçma hızını al blockly.block.entity_get_oxygen=%1'nin oksijenini al blockly.block.entity_get_saturation=Yemek satürasyon seviyesini al %1 blockly.block.entity_get_scoreboard_score=%1'nin %2 scoreboard puanını iste @@ -821,7 +806,6 @@ blockly.block.entity_get_slot=Eğer %2'nin bir envanteri var ise, %1 slotundaki blockly.block.entity_get_spawn_x=Bulunduğu %2 dünyasında, %1'in X başlangıç koordinatını al blockly.block.entity_get_spawn_y=Bulunduğu %2 dünyasında, %1'in Y başlangıç koordinatını al blockly.block.entity_get_spawn_z=Bulunduğu %2 dünyasında, %1'in Z başlangıç koordinatını al -blockly.block.entity_get_walk_speed=%1 'nin yürüme hızını al blockly.block.entity_getowner=%2 eğer %1 evcilse sahibini iste blockly.block.entity_getridingentity=%2 %1'in sürdüğü varlığı iste blockly.block.entity_gettargetentity=%2 %1'in saldırı için hedeflediği varlığı iste @@ -1472,7 +1456,6 @@ elementgui.living_entity.immune_wither=Wither elementgui.living_entity.spawn_dungeons=Zindanlarda doğ elementgui.living_entity.is_rideable=sürülebilir elementgui.living_entity.is_tameable=Evcilleştirilebilir -elementgui.living_entity.is_ranged=Varlığın öğe, saldırı aralığı ve yarıçap ile aralıklı saldırılar yapmasını sağlayın\:
Saldırı hedeflerini tanımlamak için en az bir Agresif davran AI görevi ekleyin.
"Varsayılan öğe" seçiliyse, mermi öğesini seçin veya oku kullanmak için boş bırakın elementgui.living_entity.event_struck_by_lightning=Yıldırım tarafından çarpıldığında elementgui.living_entity.event_mob_falls=canlı düşdüğünde elementgui.living_entity.event_mob_dies=canlı öldüğünde @@ -1483,7 +1466,6 @@ elementgui.living_entity.event_mob_tick_update=Varlık güncellendiğinde elementgui.living_entity.is_immune_to=Canlının etkilenmediği şeyler\: elementgui.living_entity.name=canlının ismi\: elementgui.living_entity.entity_model_import=Varlık modeli dokusunu içe aktarmak için burayı tıklayın -elementgui.living_entity.glow_texture=Varlığın ışıma dokusu (isteğe bağlı)\:
Işıma dokusunun modele uyması gerekir, görüntü parlaklığı ışımayı belirler\nİÇERİK TALEBİ elementgui.living_entity.spawn_egg_options=Yumurta seçenekleri\:
Etkinleştir, temel renk, nokta rengi, Yaratıcı sekmesi elementgui.living_entity.sound=yaşama sesi\: elementgui.living_entity.step_sound=Adım sesi\:
Bloklardan gelen adım sesleri için boş bırakın\n @@ -1495,10 +1477,8 @@ elementgui.living_entity.spawn_weight=Doğma Ağırlığı\: elementgui.living_entity.spawn_general_condition=Özel yumurtlama koşulu\:
Özel yumurtlama koşulu kullanıldığında, yumurtlama türü koşulunun üzerine
yazılır, ancak yumurtlama türü gruplaması ve ağırlıklandırması kullanılmaya devam eder.
elementgui.living_entity.inventory_size=Envanter boyutu (yuva sayısı)\:
Bu değeri GUI'deki en büyük yuva kimliğine ayarlayın + 1\n elementgui.living_entity.error_entity_needs_name=Canlının isme ihtiyacı var -elementgui.living_entity.page_behaviour=Davranış elementgui.living_entity.page_ai_and_goals=Yapay zeka ve hedefler elementgui.living_entity.page_spawning=Doğma -elementgui.loot_table.name=ganimet elementgui.loot_table.type=ganimet tipi\: elementgui.loot_table.add_pool=ganimet havuzu ekle elementgui.loot_table.add_pool_entry=havuz girişi ekle @@ -1565,7 +1545,6 @@ elementgui.recipe.registry_name=üretim kayıt adı\: elementgui.recipe.xp_reward=XP ödülü\: elementgui.recipe.cooking_time=pişme süresi\: elementgui.structuregen.import_tooltip=nbt yapı dosyasını içe aktarmak için burayı tıklayın
Ek seçenekler için Çalışma Alanı sekmesinin Yapılar bölümünü kullanın. -elementgui.structuregen.select_tooltip=Oluşturulacak yapı\:
Daha fazla yapı içe aktarma seçeneği için, Çalışma Alanı sekmesinin yapı bölümünü kullanın elementgui.tab.name=Yaratıcı sekmesi adı\: elementgui.tab.search_bar=arama kutucuğunu göster\: elementgui.tab.error_needs_name=Yaratıcı sekmesinin bir adı olmalı @@ -1606,37 +1585,20 @@ workspace.resources.tab.structures=binalar workspace.resources.tab.screenshots=ekran görüntüleri workspace.textures.new=yeni görünüş oluştur workspace.textures.import=görünüş içeri aktar -workspace.textures.edit_selected=seçileni düzenle -workspace.textures.duplicate_selected=seçileni çoğalt -workspace.textures.delete_selected=seçilenleri sil -workspace.textures.export_selected=seçileni dışarı aktar -workspace.textures.confirm_deletion_message=Bu dosyayı gerçekten silmek istiyor musunuz?
NOT\: Bu dosyayı başka bir yerde kullanıyorsanız, dokular bozulabilir\! -workspace.3dmodels.edit_texture_mappings=görünüş haritalarını düzenle -workspace.3dmodels.redefine_animations=model animasyonlarını yeniden tanımla -workspace.3dmodels.delete_selected=seçileni sil -workspace.3dmodels.delete_confirm_message=Bu modeli gerçekten silmek istiyor musunuz?
NOT\: Bu modeli başka bir yerde kullanıyorsanız, dokular bozulabilir\!
ve bazı mod elemenleri çalışmayabilir\! -workspace.3dmodels.regenerating_code=Kod yenileniyor workspace.3dmodels.animation_unsupported_title=Animasyonlar desteklenmiyor workspace.3dmodels.mappings_unsupported_title=Eşleşme Yok -workspace.sounds.edit_selected=seçileni düzenle workspace.sounds.play_selected=Seçilenleri oynat -workspace.sounds.delete_selected=seçileni sil workspace.sounds.category=Ses kategrosi\:{0} workspace.sounds.files=Ses dosyaları\: {0} workspace.sounds.subtitle_and_category=Altyazı\: {0},Ses kategrosi\: {1} -workspace.screenshots.export_selected=seçileni dışarı aktar -workspace.screenshots.delete_selected=seçileni sil workspace.screenshots.action_complete=Eylem tamamlandı -workspace.screenshots.use_as_background=mcreator arkaplanı olarak kullan workspace.variables.variable_name=değişken adı workspace.variables.variable_type=değişken tipi workspace.variables.variable_scope=değişken scope workspace.variables.initial_value=ilk değer workspace.variables.add_new=yeni değişken ekle -workspace.variables.remove_selected=seçileni sil workspace.variables.help=değişkenler hakkında yardım workspace.localization.add_entry=dil ekle -workspace.localization.remove_selected=seçileni sil workspace.localization.export_to_csv=CSV olarak seçili dili dışarı aktar workspace.localization.import_csv=CSV olarak seçili dili içeri aktar workspace.localization.key_name_title=Anahtar adı diff --git a/plugins/mcreator-localization/lang/texts_uk_UA.properties b/plugins/mcreator-localization/lang/texts_uk_UA.properties index 71fd6f6b921..8d287424291 100644 --- a/plugins/mcreator-localization/lang/texts_uk_UA.properties +++ b/plugins/mcreator-localization/lang/texts_uk_UA.properties @@ -79,9 +79,9 @@ dialog.animation_maker.settings=Налаштування анімації dialog.animation_maker.next_frame=Наступний кадр dialog.animation_maker.previous_frame=Попередній кадр dialog.animation_maker.animation_timeline=Часова шкала анімації -dialog.animation_maker.add_frames=Додати кадр(-и)... +dialog.animation_maker.add_frames=Додати кадри... dialog.animation_maker.add_frames_from_template=Додати кадри з шаблону... -dialog.animation_maker.add_frames_from_strip=Додати кадри зі стрічки анімації... +dialog.animation_maker.add_frames_from_strip=Додати кадри зі смуги анімації... dialog.animation_maker.add_frames_from_gif=Додати кадри з GIF... dialog.animation_maker.gif_importing=Імпортувати GIF dialog.animation_maker.gif_reading=Зчитування GIF @@ -119,9 +119,7 @@ dialog.cache_cleanup.title=Очищення кешу Gradle dialog.cache_cleanup.progress.stopping_daemons=Припинення роботи служб Grandle dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Очищення теки кешу Gradle dialog.cache_cleanup.progress.build_task=Запуск завдання збірки Gradle -dialog.code_error.compilation_desc=Один або декілька основних файлів моду не скомпілювалися належним чином.

Зазвичай це пов’язано з неузгодженістю коду мода під час збірки.
MCreator може розв’язати цю проблему за вас, регенерувавши весь код мода.

Якщо у вас є заблоковані елементи мода або файли бази мода, вони також можуть спричинити цю помилку.


Натисніть кнопку Регенерувати код, щоб виконати цю дію.
dialog.code_error.compilation_title=Помилки компіляції основного файлу модифікації -dialog.code_error.compilation_list=Ваш робочий простір містить елементи модифікації, які не компілюються належним чином.

Швидше за все, це було спричинено останнім елементом модифікації, який ви додали або відредагували. Спробуйте змінити налаштування елементів модифікацій,
які спричиняють помилки при збиранні (такі елементи перелічено нижче), щоб спробувати виправити цю проблему.

Якщо ви не можете розв’язати цю проблему, експортуйте робочий простір до ZIP-файлу, до якого можна надати спільний доступ, з меню Файл і надішліть його нам через
наш трекер проблем на GitHub, щоб ми могли спробувати допомогти вам.

Список елементів модифікації, що спричиняють помилки компіляції (обрізано до 10 елементів)\:

dialog.code_error.regenerate_code=Регенерувати код dialog.code_error.ignore_error=Ігнорувати помилку dialog.code_error.show_in_workspace=Показати в робочому просторі @@ -370,7 +368,6 @@ dialog.modelement_id.info_message_title=Код елементу моду заб dialog.modelement_id.registry_name=Назва у реєстрі\: dialog.modelement_id.registry_name_info=Назва у реєстрі (не всі елементи мода його використовують) dialog.modelement_id.registry_name_validator=Назва у реєстрі -dialog.modelement_id.use_caution_warn=Користуйтеся цим інструментом обережно\!

Зміна назв у реєстрі може порушити наявні збереження світу
та спричинити конфлікти з іншими елементами вашого моду\! dialog.modelement_id.id_and_registry_names="{0} — Назва у реєстрі" dialog.modelement_id.invalid_registry_name=Уведена вами назва у реєстрі є недійсною\!
Зміни не було збережено. dialog.modelement_id.invalid_registry_name_title=Недійсна назва у реєстрі @@ -411,6 +408,12 @@ dialog.preferences.themes.list=
Спи dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: невідомий тип властивості +dialog.search_usages.type.resource.texture=текстура +dialog.search_usages.type.resource.model=модель +dialog.search_usages.type.resource.sound=звук +dialog.search_usages.type.resource.structure=структура +dialog.search_usages.type.global_variable=глобальна змінна +dialog.search_usages.type.localization_key=ключ локалізації dialog.sounds.name=Назва звуку dialog.sounds.registry_name=Назва звука у реєстрі\:
Якщо ви перейменуєте звук у використанні, наявні посилання будуть розірвані dialog.sounds.files=Звукові файли\: @@ -531,6 +534,7 @@ dialog.variables.variable_name=Назва змінної\: dialog.variables.variable_type=Тип змінної\: dialog.variables.variable_scope=Область змінної\: dialog.variables.new_title=Нова змінна +workspace.loading=Завантаження робочого простору... workspace.elements.list.locked=Заблоковано workspace.elements.folders.add_tooltip=Додати нову теку до поточного файлу workspace.elements.folders.up_tooltip=Повернутися до батьківської теки @@ -568,7 +572,6 @@ workspace.elements.list.filter_all=Показати все workspace.elements.list.filter_locked=Заблоковані елементи workspace.elements.list.filter_witherrors=Елементи з помилками збірки workspace.elements.list.ascending=За зростанням -workspace.category.mod_elements=Елементи моду workspace.category.resources=Ресурси workspace.category.variables=Змінні workspace.category.localization=Локалізація @@ -585,14 +588,11 @@ workspace.elements.list.edit.delete=Видалити workspace.elements.list.edit.duplicate=Копіювати елемент моду... workspace.elements.list.edit.code=Відкрити елемент моду в редакторі коду workspace.elements.list.edit.lock=Заблокувати / розблокувати елемент моду -workspace.elements.list.edit.id=Редагувати ID елементів моду... workspace.elements.list.edit.add.folder=Додати нову теку... workspace.elements.list.edit.rename.folder=Перейменувати вибрану теку... -workspace.elements.confirm_delete_message=Ви дійсно бажаєте видалити вибрані елементи ({0})?

Якщо ви використали дані вибраних елементів модифікації в інших елементах модифікації (як рецепт, як подію, як вкладку...) ви
повинні видалити елементи, що залежать від цього теж\! В іншому випадку ваші будуть будувати помилки.

Елементи модифікації у видаленій теці й підтеках будуть переміщені в батьківську теку workspace.elements.delete.tooltip=Видалити вибраний елемент моду workspace.elements.edit_code.tooltip=Редагувати код вибраного елементу моду workspace.elements.lock_code_tooltip=Заблокувати / розблокувати код елемента
Коли ви блокуєте код, MCreator не змінює код, тому тип модифікації стає
доступним для редагування у вікні коду, і код зберігається навіть при перемиканні робочих просторів.
Користуйтеся цим лише якщо ви бажаєте вручну редагувати код та усвідомлюєте наслідки
блокування коду елемента мода\! -workspace.elements.edit_registry_names.tooltip=Редагувати ID елементів моду та назви у реєстрі workspace.elements.empty.tip=Натисніть %1, щоб додати елементи моду workspace.elements.lock_modelement_message=Ви намагаєтеся заблокувати / розблокувати код елемента моду\!

Коли код заблоковано, MCreator не змінює вихідний код, але це означає,
що при оновленні MCreator, виправлення помилок і оновлення версії Minecraft
не будуть застосовані до заблокованих елементів.

Елементи мода, які зараз заблоковані та були вибрані, будуть розблоковані.
Це означає, що будь-який користувацький код для цих елементів мода буде замінено MCreator.

Будь ласка, прочитайте сторінку вікі на вебсайті MCreator про блокування коду, перш ніж користуватися цією дією. workspace.elements.lock_modelement_confirm=Заблокувати / розблокувати код елемента моду? @@ -666,8 +666,6 @@ trigger.entity_travels_to_dimension=Сутність подорожує у ви trigger.entity_uses_totem=Сутність використовує тотем trigger.explosion_occurs=Стається вибух trigger.farmland_trampled=Урожай розтоптано -trigger.gem_dropped=Предмет випав -trigger.gem_expired=Предмет зникає trigger.item_crafted=Предмет виготовлено trigger.item_destroyed=Предмет знищено trigger.item_smelted=Предмет виплавлено @@ -871,15 +869,12 @@ blockly.block.entity_get_armor_slot_item=Предмет у комірці %1 о blockly.block.entity_get_controlling_passenger=%2 Сутність, сидить верхом на %1 blockly.block.entity_get_first_passenger=%2 Отримати першого пасажира %1 blockly.block.entity_get_fire_ticks=Час горіння сутності, залишений в тіках - %1 -blockly.block.entity_get_fly_speed=Отримайте швидкість польоту %1 blockly.block.entity_get_oxygen=Отримайте рівень кисню %1 -blockly.block.entity_get_root_vehicle=Отримати сутність, на якій їздить %1, або саму сутність blockly.block.entity_get_saturation=Отримати рівень насиченості їжі %1 blockly.block.entity_get_scoreboard_score=Отримати значення %1 у таблиці %2 blockly.block.entity_get_shootpower=Отримати потужність пострілу, якщо %1 - снаряд blockly.block.entity_get_slot=Отримати копію предмету зі слота %1 блоку %2, якщо він має інвентар blockly.block.entity_get_stepheight=Висота кроку сутності %1 -blockly.block.entity_get_walk_speed=Отримати швидкість ходьби %1 blockly.block.entity_getowner=Отримати власника %2 %1, якщо %1 приручено blockly.block.entity_getridingentity=Отримати сутність %2, на якій їздить %1 blockly.block.entity_gettargetentity=%2 Отримати об'єкт %1 для атаки @@ -984,9 +979,6 @@ blockly.block.entity_stop_navigation=Спроба зупинити навіга blockly.block.entity_submerged_height=Отримати глибину занурення %1 blockly.block.entity_swing_mainhand=Змахнути головною рукою %1 blockly.block.entity_swing_offhand=Змахнути другою рукою об'єкту %1 -blockly.block.entity_vel_x=X швидкість %1 %2 -blockly.block.entity_vel_y=Y швидкість %1 %2 -blockly.block.entity_vel_z=Z швидкість %1 %2 blockly.block.entity_xplevel=Отримати рівень XP об'єкту %1 blockly.block.entity_xp_until_next_level=Отримати кількість необхідного XP, що потрібна %1 задля досягнення нового рівню blockly.block.execute_command=Виконати команду /%1 у x\: %2 y\: %3 z\: %4 %5 @@ -1080,7 +1072,6 @@ blockly.block.set_time=Установити час на %1 %2 blockly.block.spawn_entity=Створити сутність\: %4 на x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Призвати сутність\: %6 в x\: %1 y\: %2 z\: %3 поворот\: %4 нахил\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Призвати сутність\: %9 в x\: %1 y\: %2 z\: %3 поворот\: %4 нахил\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Створити предмет %1 в x\: %2 y\: %3 z\: %4 затримка отримання\: %5 зникає\: %6 %7 blockly.block.spawn_particle=Створити частинку в x\: %1 y\: %2 z\: %3 з vx\: %4 vy\: %5 vz\: %6 тип\: %7 blockly.block.spawn_particle_multi=Створити %8 частинку на стороні сервера в x\: %1 y\: %2 z\: %3 в області dx\: %4 dy\: %5 dz\: %6 зі швидкістю %7 типу\: %9 %10 blockly.block.spawn_xporb=Створити сферу досвіду в x\: %2 y\: %3 z\: %4 із кількістю досвіду %1 %5 @@ -1132,7 +1123,6 @@ blockly.block.move_indoors=Проходити за двері, якщо можл blockly.block.panic_when_attacked=Панікувати коли отримує шкоду з коефіцієнтом швидкості %1 %2 blockly.block.swim=Плавати навмання з коефіцієнтом швидкості %1 %2 blockly.block.swim_in_water=Плавати у воді %1 -blockly.block.watch_closest_entity=Дивитися на найближчу сутність типу %2 в радіусі %1 %3 blockly.block.wander=Блукати навмання (дозволяє ходити) з коефіцієнтом швидкості %1 %2 blockly.block.wander_avoid_water=Блукати навмання та уникати води з коефіцієнтом швидкості %1 %2 blockly.block.biome_entered=Якщо гравець входить в біом %1 @@ -1856,8 +1846,6 @@ elementgui.enchantment.curse=Чи є зачарування прокляттям elementgui.enchantment.allowed_on_books=Чи є зачарування у книжках? elementgui.enchantment.can_generate_in_loot_tables=Чи може зачарування генеруватися в таблицях здобичі? elementgui.enchantment.can_villager_trade=Чи може з’явитися у торгівлі з селянином? -elementgui.enchantment.compatible_enchantments=Чи можна поєднати\:
Залиште порожнім, щоб можна було поєднувати з будь-яким зачаруванням -elementgui.enchantment.can_apply_to=Чи можна застосовувати\:
Залиште порожнім, щоб можна було застосувати до всіх предметів elementgui.enchantment.needs_name=Зачарування потрібна назва elementgui.gamerule.name=Назва ігрового правила\: elementgui.gamerule.display_name=Назва ігрового правила\:
Назва буде показана в інтерфейсі налаштування правил гри @@ -1933,7 +1921,6 @@ elementgui.item.custom_properties.add=Додати властивість elementgui.item.custom_property.value=Значення властивості elementgui.living_entity.condition_solid_bounding_box=Чи обмежувальна рамка суцільна? elementgui.living_entity.disable_collisions=Вимкнути зіткнення (колізію) -elementgui.living_entity.has_ai=Увімкнути ШІ
Використовуючи ШІ, переконайтеся, що деякі завдання ШІ визначені нижче elementgui.living_entity.immune_fire=Вогню elementgui.living_entity.immune_arrows=Стріл elementgui.living_entity.immune_fall_damage=Шкоди від падіння @@ -1950,7 +1937,6 @@ elementgui.living_entity.immune_dragon_breath=Дихання дракона elementgui.living_entity.is_flying_mob=Є літаючою сутністю (гравітація не тягне її вниз, не отримує шкоду при падінні) elementgui.living_entity.spawn_dungeons=Поява в підземеллях elementgui.living_entity.is_rideable=Можна осідлати -elementgui.living_entity.is_breedable=Зробити цю сутність твариною, предмети для розведення\:
База сутності та тип поведінки будуть проігноровані, якщо позначено цей параметр elementgui.living_entity.is_tameable=Можна приручити elementgui.living_entity.event_struck_by_lightning=При ударі блискавки у сутність elementgui.living_entity.event_mob_falls=При падінні сутності @@ -1962,7 +1948,6 @@ elementgui.living_entity.event_mob_tick_update=При оновленні тик elementgui.living_entity.event_player_collides_with=При стиканні гравця зі сутністю elementgui.living_entity.event_initial_spawn=При початковій появі сутності elementgui.living_entity.condition_natural_spawn=Умова появи сутності -elementgui.living_entity.behaviour=Тип поведінки («Mob» — агресивна, «Creative» — пасивна)\: elementgui.living_entity.creature_type=Тип сутності (визначає деякі спеціальні атрибути сутності)\: elementgui.living_entity.drop_health_xp_amount=Випадіння, значення здоров’я, кількість досвіду\: elementgui.living_entity.attack_strenght_armor_value_knockback=Сила атаки, захист, відкидання при атаці, стійкість до відкидання\: @@ -1982,7 +1967,6 @@ elementgui.living_entity.enable_mob_spawning=Увімкнути генераці elementgui.living_entity.spawn_weight=Вага при появі\: elementgui.living_entity.page_visual=Зовнішній вигляд elementgui.living_entity.page_sound=Звуки -elementgui.living_entity.page_behaviour=Поведінка elementgui.living_entity.page_ai_and_goals=ШІ та цілі elementgui.living_entity.page_spawning=Поява elementgui.loot_table.registry_name=Назва таблиці здобичі в реєстрі\:
Використовуйте префікс «blocks/», щоб вказати категорію @@ -2049,7 +2033,6 @@ elementgui.recipe.error_campfire_no_ingredient_and_result=У рецепті пр elementgui.recipe.error_smithing_no_ingredient_addition_and_result=У рецепті ковальського столу повинен мати визначені вхідний предмет, добавка та результат (повітря не рахується) elementgui.recipe.error_brewing_no_input_ingredient_and_result=У рецепті варильної стійки повинен мати визначені вхідний предмет, інгредієнти та результат (повітря не рахується) elementgui.structuregen.import_tooltip=Натисніть, щоб імпортувати файл структури NBT
Більше параметрів у розділі «Структури» на вкладці «Робочий простір». -elementgui.structuregen.select_tooltip=Структура для появи\:
Більше про параметри та імпорту структур у розділі «Структури» на вкладці «Робочий простір» elementgui.tab.name=Назва творчої вкладки\: elementgui.tab.icon=Значок вкладки\: elementgui.tab.search_bar=Показати рядок пошуку\: @@ -2102,9 +2085,8 @@ workspace.textures.new=Створити нову текстуру workspace.textures.import=Імпортувати текстури workspace.textures.edit_selected=Редагувати вибране... workspace.textures.duplicate_selected=Дублювати вибране... -workspace.textures.delete_selected=Видалити вибране +workspace.textures.replace_selected=Замінити вибране... workspace.textures.export_selected=Експортувати вибране... -workspace.textures.confirm_deletion_message=Ви дійсно бажаєте видалити цей файл?
ПРИМІТКА\: Якщо ви десь використовуєте цей файл, то текстури можуть зламатися\! workspace.textures.select_dupplicate_type=Оберіть тип текстури, яку бажаєте скопіювати\: workspace.textures.select_texture_type=Який тип текстури у цьому файлі? workspace.textures.category.block=Текстури блоків\: @@ -2117,46 +2099,33 @@ workspace.textures.category.armor=Текстури обладунків\: workspace.textures.category.other=Інші текстури (картини, логотип моду тощо)\: workspace.3dmodel.description={0}
Прив’язка текстури\: {1} workspace.3dmodels.edit_texture_mappings=Редагувати прив’язки текстури... -workspace.3dmodels.redefine_animations=Перевизначити анімації моделі... -workspace.3dmodels.delete_selected=Видалити вибране -workspace.3dmodels.delete_confirm_message=Ви дійсно бажаєте видалити цю модель?
ПРИМІТКА\: Якщо ви використовуєте цю модель де-небудь, у вас можуть бути пошкоджені текстури
а деякі елементи мода можуть не скомпілюватися\! -workspace.3dmodels.regenerating_code=Регенерування коду -workspace.3dmodels.regenerating_entity_code=Регенерування коду сутностей -workspace.3dmodels.rebuilding_workspace=Перебірка робочого простору +workspace.3dmodels.redefine_animations=Перевизначити анімацію моделі... workspace.3dmodels.animation_unsupported_title=Анімації не підтримується workspace.3dmodels.animation_unsupported_message=Ця модель не підтримує анімацію\! workspace.3dmodels.mappings_unsupported_title=Без прив’язки workspace.3dmodels.mappings_unsupported_message=Ця модель не підтримує прив’язки текстур\! -workspace.sounds.confirm_deletion_message=Ви дійсно бажаєте видалити цей звук?
ПРИМІТКА\: Якщо ви використовуєте цей звук де-небудь, він більше не працюватиме\! workspace.sounds.edit_selected=Редагувати вибране... workspace.sounds.play_selected=Відтворити вибране -workspace.sounds.delete_selected=Видалити вибране workspace.sounds.category=Категорія звуку\: {0} workspace.sounds.files=Звукові файли\: {0} workspace.sounds.subtitle_and_category=Підзаголовок\: {0}, Категорія звуку\: {1} workspace.screenshots.export_selected=Експортувати вибране... -workspace.screenshots.delete_selected=Видалити вибране workspace.screenshots.action_complete=Дію виконано workspace.screenshots.use_background_message=Вибрані знімки екрана будуть використані як потенційне тло при наступному запуску. -workspace.screenshots.use_as_background=Використовувати вибране як тло MCreator... -workspace.structure.confirm_deletion_message=Ви дійсно бажаєте видалити вибрані структури?
ПРИМІТКА\: Якщо ви використовуєте їх де-небудь, вони більше не появлятимуться\! +workspace.screenshots.use_as_background=Використати вибране як тло MCreator... workspace.variables.variable_name=Назва змінної workspace.variables.variable_type=Тип змінної workspace.variables.variable_scope=Область змінної workspace.variables.initial_value=Початкове значення workspace.variables.add_new=Додати нову змінну -workspace.variables.remove_selected=Видалити вибране workspace.variables.help=Довідка зі змінними workspace.variables.change_type=Ви дійсно бажаєте змінити цю змінну?
Якщо ця змінна використовується, ця дія може призвести до помилок компіляції.
Якщо ви щойно створили її, ви можете її змінити. -workspace.variables.remove_variable_confirmation=Ви дійсно бажаєте видалити вибрані змінні?
Якщо ця змінна використовується, ця дія може призвести до помилок компіляції. workspace.localization.add_entry=Додати запис локалізації -workspace.localization.remove_selected=Видалити вибране workspace.localization.export_to_csv=Експортувати поточну мову в CSV workspace.localization.import_csv=Імпортувати CSV в поточну мову workspace.localization.key_name_title=Назва ключа workspace.localization.key_name_message=Уведіть назву ключа користувацького запису\: workspace.localization.confirm_delete_map=Ви дійсно бажаєте видалити цю локалізацію? -workspace.localization.confirm_delete_entry=Ви дійсно бажаєте видалити вибрані записи?
ПРИМІТКА\: Якщо вони все ще використовуються, назви елементів, прив’язані до них, не працюватимуть\! workspace.localization.export_translation=Експортувати переклад workspace.localization.confirm_export=Стандартний переклад (en_us) не може бути експортовано\!
Тексти цією мовою визначені в елементах моду. workspace.localization.warning_export=Ви не можете імпортувати CSV до стандартного перекладу (en_us)\!
Тексти цією мовою визначені в елементах модифікації. @@ -2454,6 +2423,7 @@ condition.common.no_additional=(без додаткової умови) condition.common.use_vanilla=(використовувати ванільну умову) condition.common.disable=Вимкнути procedure.common.no_procedure=(без процедури) +procedure.common.fixed=Значення\: procedure.common.if=\ якщо\: procedure.common.do=\ виконати\: gradle.errors.title=Виконання завдання Gradle призвело до помилки @@ -2522,11 +2492,13 @@ common.add=Додати common.close=Закрити common.cancel=Скасувати common.confirmation=Підтвердження +common.delete_selected=Видалити вибране common.dependency={0}, тип\: {1} common.mod_element_name=Назва елементу моду common.namespace=Простір імен common.name_already_exists=Ця назва вже існує common.not_applicable=Н/Д +common.search_usages=Пошук використань у робочому просторі common.warning=Попередження components.collapsible_panel.expand=Натисніть, щоб розгорнути components.collapsible_panel.collapse=Натисніть, щоб згорнути @@ -2625,4 +2597,7 @@ notification.common.more_info=Детальніше notification.update_available.msg=Доступна нова версія MCreator.

Установлена версія\: {0}
Нова версія\: {1} notification.patch_available.msg=Доступна нова версія {0}.

Установлена версія\: {0}.{1}
Нова версія\: {0}.{2} notification.plugin_updates.msg=Доступно оновлення для деяких плагінів +notification.news.title=Новини з вебсайту\: {0} +notification.news.read_more=Детальніше про це +notification.news.hide=Сховати сповіщення simple_list_entry.remove=Видалити цей запис \ No newline at end of file diff --git a/plugins/mcreator-localization/lang/texts_vi_VN.properties b/plugins/mcreator-localization/lang/texts_vi_VN.properties index bafcfb64dca..c36a7a2318f 100644 --- a/plugins/mcreator-localization/lang/texts_vi_VN.properties +++ b/plugins/mcreator-localization/lang/texts_vi_VN.properties @@ -119,9 +119,9 @@ dialog.cache_cleanup.title=Dọn dẹp bộ nhớ đệm Gradle dialog.cache_cleanup.progress.stopping_daemons=Dừng chạy Gradle deamons dialog.cache_cleanup.progress.clearing_gradle_caches_folder=Xóa thư mục bộ nhớ cache Gradle dialog.cache_cleanup.progress.build_task=Chạy tác vụ xây dựng Gradle -dialog.code_error.compilation_desc=Một hoặc nhiều tệp mod chính của bạn không được biên dịch đúng cách.

Điều này thường do mã mod không nhất quán trong quá trình xây dựng.
MCreator có thể giải quyết vấn đề này cho bạn bằng cách tạo lại toàn bộ mã của mod.

Nếu bạn đã khóa các phần tử mod hoặc tệp nền tảng của mod, chúng cũng có thể gây ra lỗi này.


Nhấp vàoTạo lại mãđể tiếp tục hành động này.
+dialog.code_error.compilation_desc=Một hoặc nhiều tệp mod chính của bạn không được biên dịch đúng cách.

Điều này thường do mã mod không nhất quán trong quá trình xây dựng.
MCreator có thể giải quyết nó cho bạn bằng cách tạo lại toàn bộ mã của mod.

Nếu bạn đã khóa các phần tử mod hoặc tệp nền tảng của mod, chúng cũng có thể gây ra lỗi này.


Nhấp vàoTạo lại mãđể tiếp tục hành động này.
dialog.code_error.compilation_title=Lỗi biên dịch tệp mod chính -dialog.code_error.compilation_list=Không gian làm việc của bạn chứa các phần tử mod không được biên dịch đúng cách.

Điều này rất có thể do phần tử mod cuối cùng mà bạn đã thêm hoặc chỉnh sửa gây ra. Thử thay đổi cài đặt của các phần tử mod
gây ra lỗi xây dựng (như các phần tử được liệt kê bên dưới) để cố gắng khắc phục sự cố này.

Nếu bạn không thể giải quyết sự cố này, hãy xuất không gian làm việc sang tệp ZIP có thể chia sẻ từ menuTệp và gửi cho chúng tôi qua
trình theo dõi vấn đề trên GitHub để chúng tôi có thể cố gắng giúp bạn.

Danh sách các phần tử mod gây ra quá trình biên dịch lỗi (được cắt tối đa 10 phần tử)\:

+dialog.code_error.compilation_list=Không gian làm việc của bạn chứa các phần tử mod không được biên dịch đúng cách.

Điều này rất có thể do phần tử mod cuối cùng mà bạn đã thêm hoặc chỉnh sửa gây ra. Thử thay đổi cài đặt của các phần tử mod
gây ra lỗi xây dựng (như các phần tử được liệt kê bên dưới) để cố gắng khắc phục sự cố này.

Nếu bạn không thể giải quyết sự cố này, hãy xuất không gian làm việc sang tệp ZIP có thể chia sẻ từ menuTệp và gửi cho chúng tôi qua
trình theo dõi vấn đề trên GitHub để chúng tôi có thể cố gắng giúp bạn.

Danh sách các phần tử mod gây ra lỗi biên dịch\:

dialog.code_error.regenerate_code=Tạo lại mã dialog.code_error.ignore_error=Bỏ qua lỗi dialog.code_error.show_in_workspace=Hiện trong không gian làm việc @@ -174,6 +174,16 @@ dialog.gui.model_rotation_x=Độ xoay yaw của mô hình theo độ dialog.gui.model_follow_mouse=Xoay mô hình theo chuyển động của con chuột dialog.gui.add_tooltip=Trình chỉnh sửa chú giải dialog.gui.tooltip_display_condition=Điều kiện hiển thị chú giải +dialog.gui.anchor=Neo ở\: +dialog.gui.anchor.top_left=Phía trên bên trái +dialog.gui.anchor.top_center=Chính giữa phía trên +dialog.gui.anchor.top_right=Phía trên bên phải +dialog.gui.anchor.center_left=Ở giữa bên trái +dialog.gui.anchor.center=Ở giữa +dialog.gui.anchor.center_right=Ở giữa bên phải +dialog.gui.anchor.bottom_left=Phía dưới bên trái +dialog.gui.anchor.bottom_center=Chính giữa phía dưới +dialog.gui.anchor.bottom_right=Phía dưới bên phải dialog.gradle_console.clear_log=Xoá nhật kí dialog.gradle_console.search=Tìm trong bảng điều khiển gradle dialog.gradle_console.start_build=Nhấp vào đây để xây dựng toàn bộ không gian làm việc
Bạn cũng có thể bắt đầu xây dựng bằng cách nhấn Ctrl + nhấp vào tab Bảng điều khiển @@ -346,6 +356,12 @@ dialog.image_maker.tools.component.colorselector_select_background=Đặt màu n dialog.item_selector.title=Trình chọn khối/vật phẩm dialog.item_selector.use_selected=Sử dụng lựa chọn dialog.item_selector.use_tag=Dùng nhãn +dialog.item_selector.use_tag.entities=Dùng nhãn thực thể +dialog.item_selector.enter_tag_name.blocks=Nhập tên nhãn khối bên dưới (kiểm tra danh sách cho các mẫu)\:
+dialog.item_selector.enter_tag_name.items=Nhập tên nhãn vật phẩm bên dưới (kiểm tra danh sách cho các mẫu)\:
+dialog.item_selector.enter_tag_name.biomes=Nhập tên nhãn quần xã bên dưới (kiểm tra danh sách cho các mẫu)\:
+dialog.item_selector.enter_tag_name.entities=Nhập tên nhãn thực thể bên dưới (kiểm tra danh sách cho các mẫu)\:
+dialog.item_selector.enter_tag_name.damage_types=Nhập tên nhãn loại sát thương bên dưới (kiểm tra danh sách cho các mẫu)\:
dialog.item_selector.error_invalid_tag_name_title=Tên nhãn không hợp lệ dialog.item_selector.all=Tất cả dialog.item_selector.blocks=Khối @@ -365,7 +381,7 @@ dialog.modelement_id.info_message_title=Mã phần tử mod bị khóa dialog.modelement_id.registry_name=Tên đăng kí\: dialog.modelement_id.registry_name_info=Tên đăng kí (không phải tất cả các phần tử mod nào đều sử dụng nó) dialog.modelement_id.registry_name_validator=Tên đăng kí -dialog.modelement_id.use_caution_warn=Sử dụng công cụ này một cách thận trọng\!

Thay đổi tên đăng kí có thể phá vỡ các thế giới đã lưu hiện có của bạn và gây ra
xung đột với các phần tử mod khác từ mod của bạn\! +dialog.modelement_id.use_caution_warn=Sử dụng công cụ này một cách thận trọng\! Chắc chắn rằng không sử dụng tên trùng lặp\!

Thay đổi tên đăng kí có thể phá vỡ các thế giới đã lưu hiện có của bạn và gây ra
xung đột với các phần tử mod khác từ mod của bạn\! dialog.modelement_id.id_and_registry_names="{0} - Tên đăng kí" dialog.modelement_id.invalid_registry_name=Tên đăng kí bạn vừa nhập không hợp lệ\!
Những thay đổi chưa được lưu. dialog.modelement_id.invalid_registry_name_title=Tên đăng kí không hợp lệ @@ -406,6 +422,19 @@ dialog.preferences.themes.list=
Danh s dialog.preferences.description={0}
{1} dialog.preferences.entry_description={0}\:
{1} dialog.preferences.unknown_property_type={0}\: loại thuộc tính không xác định +dialog.search_usages.list=Danh sách các phần tử mod sử dụng các {0} được chọn\: +dialog.search_usages.list.empty=Không có phần tử mod được tìm thấy nào sử dụng các {0} được chọn. +dialog.search_usages.open_selected=Chỉnh sửa phần tử mod được chọn +dialog.search_usages.deletion.confirm_msg=Bạn có chắc chắn muốn xóa các {0} được chọn?

Một số {0} được chọn vẫn đang được dùng bởi các phần tử mod được liệt kê bên dưới.
Nếu bạn tiếp tục với hành động xóa, không gian làm việc có thể bị hòng và/hoặc không thể biên dịch\! +dialog.search_usages.deletion_safe.confirm_msg=Bạn có chắc chắn muốn xóa các {0} được chọn?

Không có phần tử mod nào sử dụng các {0} từ danh sách được chọn. Dù vậy, chúng có thể vẫn được sử dụng trong các mã tùy chỉnh.
Nếu bạn tiếp tục, những tham chiếu này sẽ trở nên không hợp lệ, có thể dẫn đến tài nguyên bị hỏng hoặc sập trò chơi. +dialog.search_usages.deletion.confirm=Cứ xóa +dialog.search_usages.type.mod_element=phần tử mod +dialog.search_usages.type.resource.texture=kết cấu +dialog.search_usages.type.resource.model=mô hình +dialog.search_usages.type.resource.sound=âm thanh +dialog.search_usages.type.resource.structure=kiến trúc +dialog.search_usages.type.global_variable=biến toàn cầu +dialog.search_usages.type.localization_key=khóa bản địa dialog.sounds.name=Tên âm thanh dialog.sounds.registry_name=Tên đăng kí âm thanh\:
Nếu bạn đổi tên âm thanh đang sử dụng, các tham chiếu hiện có sẽ bị hỏng dialog.sounds.files=Tệp âm thanh\: @@ -526,6 +555,7 @@ dialog.variables.variable_name=Tên biến\: dialog.variables.variable_type=Loại biến\: dialog.variables.variable_scope=Variable Scope\: dialog.variables.new_title=Biến mới +workspace.loading=Đang tải không gian làm việc... workspace.elements.list.locked=Bị khóa workspace.elements.folders.add_tooltip=Thêm thư mục mới vào thư mục hiện tại workspace.elements.folders.up_tooltip=Di chuyển trở lại thư mục mẹ @@ -536,6 +566,7 @@ workspace.elements.folders.add.error_letters=Tên thư mục chỉ có thể ch workspace.elements.folders.add.error_exists=Thư mục với tên này đã tồn tại. workspace.elements.folders.rename.title=Đổi tên thư mục workspace.elements.folders.rename.message=Nhập tên thư mục mới\: +workspace.elements.list.special.item={0}
Loại\: {1} workspace.elements.list.folder=Thư mục workspace.elements.list.notlocked=Không bị khóa workspace.elements.list.compiles=Biên dịch @@ -563,7 +594,7 @@ workspace.elements.list.filter_all=Hiển thị tất cả workspace.elements.list.filter_locked=Các phần tử bị khóa workspace.elements.list.filter_witherrors=Các phần tử có lỗi xây dựng workspace.elements.list.ascending=Tăng dần -workspace.category.mod_elements=Phần tử mod +workspace.category.mod_elements=Các phần tử mod workspace.category.resources=Tài nguyên workspace.category.variables=Biến workspace.category.localization=Vị trí @@ -580,14 +611,17 @@ workspace.elements.list.edit.delete=Xóa workspace.elements.list.edit.duplicate=Sao chép phần tử mod... workspace.elements.list.edit.code=Mở phần tử mod trong trình chỉnh sửa mã workspace.elements.list.edit.lock=Khóa/mở khóa phần tử mod -workspace.elements.list.edit.id=Chỉnh sửa ID phần tử mod... +workspace.elements.list.edit.id=Chỉnh sửa tên đăng kí... +workspace.elements.list.edit.usages.tags=Danh sách phần tử được chọn có chứa các phần tử mod loại nhãn.

Các nhãn với tên đăng kí giống nhau cũng có thể được xác định bởi các mod khác và khó có thể tham chiếu.
Vậy nên không thể tìm kiếm việc sử dụng cho những phần tử này. workspace.elements.list.edit.add.folder=Thêm thư mục mới... workspace.elements.list.edit.rename.folder=Đổi tên thư mục được chọn... -workspace.elements.confirm_delete_message=Bạn có chắc chắn muốn xóa các phần tử ({0}) đã chọn không?

Nếu bạn đã sử dụng dữ liệu của các phần tử mod được chọn trong các phần tử mod khác (như công thức, trong sự kiện, trong tab,...) bạn
cũng phải xóa các phần tử phụ thuộc vào phần tử này\! Nếu không, bạn sẽ nhận được lỗi dựng.

Các phần tử mod trong thư mục đã xóa và thư mục con sẽ được di chuyển vào thư mục mẹ +workspace.elements.confirm_delete_msg_suffix=Các phần tử mod ở thư mục và thư mục con bị xóa sẽ được chuyển ra thư mục mẹ. workspace.elements.delete.tooltip=Xóa phần tử mod đã chọn workspace.elements.edit_code.tooltip=Sửa đổi mã của phần tử mod đã chọn workspace.elements.lock_code_tooltip=Khóa/mở khóa mã của phần tử
Khi bạn khóa mã, MCreator sẽ không thay đổi mã, do đó, loại mod trở nên
có thể chỉnh sửa từ chế độ xem mã và mã được giữ nguyên ngay cả khi chuyển đổi không gian làm việc.
Chỉ sử dụng điều này nếu bạn có ý định chỉnh sửa mã theo cách thủ công và hiểu được hậu quả
của việc khóa mã của phần tử mod\! -workspace.elements.edit_registry_names.tooltip=Chỉnh sửa ID phần tử mod và tên đăng kí +workspace.elements.edit_registry_names.not_possible_message=Không thể dùng công cụ này để chỉnh sửa tên đăng kí của loại phần tử mod này. +workspace.elements.edit_registry_names.not_possible_title=Không thể chỉnh sửa tên đăng kí +workspace.elements.edit_registry_names.tooltip=Chỉnh sửa tên đăng kí workspace.elements.empty.tip=Nhấn %1 để thêm phần tử mod workspace.elements.lock_modelement_message=Bạn đang cố gắng khóa/mở khóa mã của phần tử mod\!

Khi mã bị khóa, MCreator sẽ không thay đổi mã nguồn, nhưng điều này có nghĩa
rằng khi cập nhật MCreator, các bản sửa lỗi và nâng cấp phiên bản Minecraft sẽ không được
áp dụng cho các phần tử bị khóa.

Các phần tử mod bị khóa ngay bây giờ và được chọn sẽ được mở khóa.
Điều này có nghĩa là mọi mã tùy chỉnh cho phần tử mod này sẽ bị MCreator ghi đè.

Vui lòng đọc trang wiki trên trang web của MCreator về khóa mã trước khi sử dụng hành động này. workspace.elements.lock_modelement_confirm=Khóa/mở khóa mã phần tử mod? @@ -661,8 +695,6 @@ trigger.entity_travels_to_dimension=Thực thể di chuyển đến một thứ trigger.entity_uses_totem=Thực thể sử dụng một vật tổ trigger.explosion_occurs=Một vụ nổ xảy ra trigger.farmland_trampled=Đất trồng bị dẫm -trigger.gem_dropped=Một viên ngọc bị rơi -trigger.gem_expired=Đá quý hết hạn trigger.item_crafted=Một thứ gì đó được làm thủ công trigger.item_destroyed=Một phần tử đã bị phá hủy trigger.item_smelted=Một cái gì đó đã được nấu chín @@ -695,9 +727,27 @@ trigger.sapling_glow=Một lượt bắn phát triển trigger.village_siege=Zombies bao vây một ngôi làng trigger.world_ticks=Mọi cập nhật đánh dấu thế giới trigger.no_ext_trigger=Không có trình kích hoạt bổ sung +blockly.category.blockprocedures=Quy trình khối +blockly.category.blockactions=Hành động +blockly.category.blockdata=Dữ liệu +blockly.category.energyandfluid=Năng lượng & chất lỏng +blockly.category.damagesources=Quy trình sát thương blockly.category.directionactions=Quy trình về hướng +blockly.category.entityprocedures=Quy trình thực thể +blockly.category.entitydata=Dữ liệu +blockly.category.entitymanagement=Hành động +blockly.category.itemdata=Dữ liệu +blockly.category.itemmanagement=Hành động +blockly.category.itemprocedures=Quy trình vật phẩm +blockly.category.playerprocedures=Quy trình người chơi +blockly.category.playerdata=Dữ liệu +blockly.category.playermanagement=Hành động blockly.category.projectilemanagement=Quy trình vật bắn blockly.category.guimanagement=Slot & quy trình GUI +blockly.category.worldprocedures=Quy trình thế giới +blockly.category.worlddata=Dữ liệu +blockly.category.worldmanagement=Hành động +blockly.category.scoreboard=Bảng điểm blockly.category.basictasks=Tác vụ cơ bản blockly.category.combattasks=Tác vụ chiến đấu blockly.category.movementtasks=Tác vụ di chuyển @@ -788,6 +838,7 @@ blockly.block.blockat_is_solid=Là khối ở x\: %1 y\: %2 z\: %3 solid blockly.block.blockat_is_side_solid=Mặt %1 của khối tại x\: %2 y\: %3 z\: %4 là rắn blockly.block.blockat_lightlevel=Nhận mức độ sáng của khối ở x\: %1 y\: %2 z\: %3 blockly.block.blockat_opacity=Lấy độ trong suốt của khối tại x\: %1 y\: %2 z\: %3 +blockly.block.blockat_plant_type=Khối ở x\: %1 y\: %2 z\: %3 thuộc loại cây %4 blockly.block.blockitem_to_mcitem=Chuyển đổi %3 %1 thành %2 blockly.block.blockstate_from_deps=Trạng thái khối được cung cấp blockly.block.blockstate_get_boolean_property=Lấy thuộc tính boolean %1 của %3 %2 @@ -834,6 +885,7 @@ blockly.block.entity_allow_flying=Cho phép %2 bay nếu %1 không blockly.block.entity_armor_value=Giá trị bộ giáp của %1 blockly.block.entity_canusecommand=%2 có cấp quyền lệnh %1 không blockly.block.entity_check_creature_type=%1 có phải là sinh vật loại %2 +blockly.block.entity_checkgamemode=%1 ở chế độ chơi %2 blockly.block.entity_clear_inventory=Xóa túi đồ %1 blockly.block.entity_clearpotions=Xóa tất cả các hiệu ứng thuốc của %1 blockly.block.entity_close_gui=Đóng bất kỳ GUI nào đang mở cho %1 @@ -852,7 +904,6 @@ blockly.block.entity_get_armor_slot_item=Nhận vật phẩm từ khe bộ giáp blockly.block.entity_get_controlling_passenger=%2 Lấy hành khách mà đang điều khiển %1 blockly.block.entity_get_first_passenger=%2 Lấy hành khách đầu tiên của %1 blockly.block.entity_get_fire_ticks=Lấy số tick trên lửa còn lại của %1 -blockly.block.entity_get_fly_speed=Nhận tốc độ bay của %1 blockly.block.entity_get_oxygen=Nhận oxy của %1 blockly.block.entity_get_root_vehicle=Lấy thực thể thấp nhất mà %1 đang cưỡi, hoặc bản thân nếu không cưỡi cái gì blockly.block.entity_get_saturation=Nhận mức bão hòa thực phẩm là %1 @@ -863,7 +914,9 @@ blockly.block.entity_get_spawn_x=Lấy tọa độ sinh ra X của %1 tại th blockly.block.entity_get_spawn_y=Lấy tọa độ sinh ra Y của %1 tại thế giới hiện tại của nó %2 blockly.block.entity_get_spawn_z=Lấy tọa độ sinh ra Z của %1 tại thế giới hiện tại của nó %2 blockly.block.entity_get_stepheight=Lấy chiều cao bước đi của %1 -blockly.block.entity_get_walk_speed=Nhận tốc độ đi bộ của %1 +blockly.block.entity_get_use_item=Lấy vật phẩm %1 đang sử dụng +blockly.block.entity_get_use_item_ticks=Lấy số tick mà %1 đang dùng vật phẩm +blockly.block.entity_get_uuid=Lấy UUID của %1 blockly.block.entity_getowner=%2 lấy chủ nhân của %1 nếu được thuần phục blockly.block.entity_getridingentity=%2 Nhận thực thể %1 đang cưỡi blockly.block.entity_gettargetentity=%2 Nhận mục tiêu tấn công là %1 @@ -876,10 +929,12 @@ blockly.block.entity_haspotioneffect=%1 có thuốc %2 đang hoạt động blockly.block.entity_health=Lượng máu hiện tại của %1 blockly.block.entity_health_max=Lượng máu tối đa của %1 blockly.block.entity_inventory_foreach=Với mỗi ô kho đồ của %1 sao chép nội dung dưới dạng %2 làm %3 +blockly.block.entity_is_attackable=%1 có thể bị tấn công blockly.block.entity_is_elytra_flying=Cánh cứng của %1 bay blockly.block.entity_is_glowing=%1 đang phát sáng blockly.block.entity_is_swimming=%1 đang bơi blockly.block.entity_is_tagged_in=%1 được gắn nhãn trong các nhãn thực thể là %2 +blockly.block.entity_is_underwater=%1 dưới nước blockly.block.entity_isalive=%1 sống blockly.block.entity_isbeingridden=%1 đang được cưỡi blockly.block.entity_isblocking=%1 đang chặn @@ -950,7 +1005,9 @@ blockly.block.entity_set_display_name=Đặt tên hiển thị của %2 thành % blockly.block.entity_set_fire=Kích hoạt %2 trong %1 giây blockly.block.entity_set_flying=Làm cho %2 bay nếu %1 nếu không thì không blockly.block.entity_set_foodlevel=Đặt mức thực phẩm từ %2 đến %1 +blockly.block.entity_set_gamemode=Đặt chế độ chơi của %1 thành %2 blockly.block.entity_set_health=Đặt lượng máu của %2 thành %1 +blockly.block.entity_set_invisible=Đặt độ tàng hình của %1 thành %2 blockly.block.entity_set_mainhand_item=Đặt phần tử trong tay chính của %3 đến %2 %1 blockly.block.entity_set_movement=Cố gắng ghi đè vectơ chuyển động của %4 thành vx\: %1 vy\: %2 vz\: %3 blockly.block.entity_set_nogravity=Đặt không trọng lực của %1 sang %2 @@ -973,9 +1030,6 @@ blockly.block.entity_submerged_height=Nhận chiều cao chìm %1 blockly.block.entity_swing_mainhand=Swing tay chính của %1 blockly.block.entity_swing_offhand=Đuổi theo %1 blockly.block.entity_switch_dimension=Chuyển đổi chiều không gian của %1 thành %2 -blockly.block.entity_vel_x=Tốc độ X của %1 %2 -blockly.block.entity_vel_y=Tốc độ Y của %1 %2 -blockly.block.entity_vel_z=Tốc độ Z của %1 %2 blockly.block.entity_xplevel=Nhận XP cấp %1 blockly.block.entity_xp_until_next_level=Lấy lượng kinh nghiệm cần bởi %1 để lên cấp độ blockly.block.execute_command=Thực thi lệnh /%1 tại x\: %2 y\: %3 z\: %4 %5 @@ -1069,11 +1123,15 @@ blockly.block.set_time=Đặt thời gian thành %1 %2 blockly.block.spawn_entity=Sinh ra thực thể\: %4 tại x\: %1 y\: %2 z\: %3 %5 blockly.block.spawn_entity_with_rotation=Sinh ra thực thể\: %6 tại x\: %1 y\: %2 z\: %3 với yaw\: %4 độ cao\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=Sinh ra thực thể\: %9 tại x\: %1 y\: %2 z\: %3 với yaw\: %4 độ cao\: %5 vx\: %6 vy\: %7 vz\: %8 %10 -blockly.block.spawn_gem=Sinh ra vật phẩm/gem %1 tại x\: %2 y\: %3 z\: %4 độ trễ khi nhặt\: %5 biến mất\: %6 %7 blockly.block.spawn_particle=Sinh ra một hạt hiệu ứng đơn tại x\: %1 y\: %2 z\: %3 với vx\: %4 vy\: %5 vz\: %6 loại\: %7 blockly.block.spawn_particle_multi=Sinh ra hạt hiệu ứng %8 ở phía máy chủ tại x\: %1 y\: %2 z\: %3 trong khu vực dx\: %4 dy\: %5 dz\: %6 với tốc độ %7 loại\: %9 %10 blockly.block.spawn_xporb=Sinh ra quả cầu XP tại x\: %2 y\: %3 z\: %4 với số lượng XP là %1 %5 blockly.block.strike_lightning=Sét đánh ở x\: %1 y\: %2 z\: %3 chỉ ảnh hưởng\: %4 %5 +blockly.block.team_add_entity=Thêm thực thể %2 vào đội %1 +blockly.block.team_create_new=Tạo đội mới với tên %1 +blockly.block.team_delete=Xóa đội với tên %1 +blockly.block.team_get_entity_team=Lấy đội của thực thể %1 +blockly.block.team_remove_entity=Loại bỏ thực thể %2 khỏi đội %1 blockly.block.wait=Chờ %1 %2 tick rồi bên máy chủ %3 làm %4 blockly.block.world_data_heightat=Lấy độ cao %3 tại x\: %1 z\: %2 blockly.block.world_data_biomeat=Quần xã ở x\: %1 y\: %2 z\: %3 loại %4 @@ -1246,8 +1304,10 @@ blockly.block.feature_simple_random_selector=Tính năng ngẫu nhiên từ danh blockly.block.feature_simple_random_selector.input=tính năng\: blockly.block.feature_simple_random_selector.empty=Danh sách không thể để trống blockly.block.feature_tree.decorator_input=trình trang trí\: +blockly.block.feature_tree_pine.empty=(Không có) blockly.block.feature_tree_simple=Cây thuộc loại %1 với đất\: %2 thân cây\: %3 lá\: %4 rễ\: %5 chiều cao của %6 + tối đa %7 + tối đa %8 %9 luôn đặt đất\: %10 %11 bỏ qua dây leo\: %12 %13 trình trang trí\: blockly.block.feature_tree_simple.empty=(Không có) +blockly.block.feature_tree_spruce.empty=(Không có) blockly.block.placed_feature_inline=Tính năng được cấu hình\: %1 với vị trí bổ sung\: %2 blockly.block.placed_feature_inline.disabled_placement=Vị trí này không thể được sử dụng bên trong các tính năng được đặt nội tuyến blockly.block.placement_biome_filter=Chỉ khi quần xã ở vị trí hiện tại có tính năng này @@ -1298,6 +1358,8 @@ blockly.block.rule_test_tag_match=Khối ở trong nhãn\: %1 blockly.block.state_provider_randomized_int=%4 Trạng thái khối %1 với thuộc tính số nguyên %2 đặt thành %3 blockly.block.state_provider_weighted=%1 Trạng thái khối ngẫu nhiên từ danh sách trọng lượng\: blockly.block.state_provider_weighted.empty=Danh sách trọng lượng không thể để trống +blockly.block.tree_decorator_mutator.container=Danh sách các trình trang trí cây +blockly.block.tree_decorator_mutator.input=Trình trang trí cây blockly.block.vertical_anchor_above_bottom=%1 khối trên đáy của thế giới blockly.block.vertical_anchor_absolute=Y \= %1 blockly.block.vertical_anchor_below_top=%1 khối dưới đỉnh của thế giới @@ -1409,6 +1471,12 @@ dialog.workspace.export_workspace.compressing=Đang nén không gian làm việc dialog.workspace.export_workspace.title=Xuất vùng làm việc của bạn dialog.workspace.export_backup=Sao lưu không gian làm việc action.workspace.regenerate_and_build=Tạo lại mã và xây dựng +tag.type.items=Vật phẩm +tag.type.blocks=Khối +tag.type.entities=Thực thể +tag.type.functions=Chức năng +tag.type.biomes=Quần xã +tag.type.damage_types=Loại sát thương modelement.unknown=Không rõ modelement.achievement=Thành tựu modelement.armor=Bộ giáp @@ -1416,6 +1484,7 @@ modelement.biome=Quần xã sinh vật modelement.block=Khối modelement.code=Mục tùy chỉnh modelement.command=Lệnh +modelement.damagetype=Loại sát thương modelement.dimension=Thế giới khác modelement.enchantment=Phù phép modelement.gamerule=Luật chơi @@ -1438,6 +1507,7 @@ modelement.plant=Cây thực vật modelement.potioneffect=Hiệu ứng thuốc modelement.potion=Vật phẩm thuốc modelement.procedure=Quy trình +modelement.projectile=Vật bắn modelement.recipe=Công thức modelement.structure=Kiến trúc modelement.tab=Tab sáng tạo @@ -1578,6 +1648,8 @@ preferences.notifications.checkAndNotifyForUpdates=Thông báo về các bản p preferences.notifications.checkAndNotifyForUpdates.description=Bỏ chọn hộp này nếu bạn không muốn được thông báo về các bản cập nhật mới.
CẢNH BÁO\: Lưu ý rằng bạn có thể bỏ lỡ các bản cập nhật quan trọng và các bản sửa lỗi nếu bạn tắt tùy chọn này. preferences.notifications.checkAndNotifyForPatches=Thông báo về các cập nhật bản vá khi MCreator được khởi chạy preferences.notifications.checkAndNotifyForPatches.description=Bỏ chọn hộp này nếu bạn không muốn được thông báo về các bản cập nhật vá lỗi.
CẢNH BÁO\: Bạn nên để tùy chọn này được bật, nếu không bạn có thể bỏ lỡ các bản sửa lỗi quan trọng +preferences.notifications.showWebsiteNewsNotifications=Hiển thị thông báo tin tức trên website khi khởi động +preferences.notifications.showWebsiteNewsNotifications.description=Khi được bật, trình chọn không gian làm việc sẽ hiển thị thông báo về các tin tức mới trên website khi MCreator khởi động preferences.notifications.checkAndNotifyForPluginUpdates=Thông báo về các bản cập nhật plugin cộng đồng preferences.notifications.checkAndNotifyForPluginUpdates.description=Bỏ chọn hộp này nếu bạn không muốn được thông báo về các bản cập nhật plugin của bên thứ ba.
Hãy nhớ rằng trong trường hợp máy chủ cập nhật plugin của bên thứ ba bị trục trặc hoặc chậm, tùy chọn này có thể làm chậm quá trình khởi động MCreator và tùy chọn này cho phép
plugin của bên thứ ba mà chúng tôi không có quyền kiểm soát để truy cập vào máy chủ cập nhật của họ trong quá trình khởi động MCreator. preferences.themes.select_theme=Chọn chủ đề để sử dụng @@ -1751,6 +1823,7 @@ elementgui.common.tint_type=Loại nhuộm màu\:
Hỗ trợ\: k elementgui.common.include=Bao gồm elementgui.common.exclude=Ngoại trừ elementgui.common.is_bonemealable=Khối có thể được bón bằng bột xương? +elementgui.common.special_information=Thông tin đặc biệt elementgui.advancement.name=Tên thành tựu trong UI\: elementgui.advancement.description=Mô tả\: elementgui.advancement.icon=Hình\: @@ -1978,6 +2051,7 @@ elementgui.block.error_block_must_have_name=Khối phải có tên elementgui.block.page_tile_entity=Thực thể khối elementgui.block.page_energy_fluid_storage=Lưu trữ năng lượng và chất lỏng elementgui.command.name=Tên lệnh (không có /)\: +elementgui.command.type=Loại\: elementgui.command.permission_level=Cấp độ cho phép thực thi\:
Cấp độ tối thiểu để thực thi lệnh elementgui.command.warning.empty_string=Lệnh không thể là chuỗi trống elementgui.command.arguments=Trình dựng các tham số và hành động lệnh @@ -2001,7 +2075,6 @@ elementgui.dimension.biomes_in=Quần xã trong thế giới này\: elementgui.dimension.main_filler_block=Khối phụ chính\:
Bình thường, Nether, End elementgui.dimension.fluid_block=Khối chất lỏng\:
Bình thường, Nether, End elementgui.dimension.sleep_result=Kết quả sau khi ngủ\: -elementgui.dimension.fog_air_color=Ghi đè màu bầu trời/sương mù\:
Để MẶC ĐỊNH để xử lý mặc định cho mỗi phiên bản Minecraft elementgui.dimension.enable_dimension_portal=Bật cổng dịch chuyển đến thế giới\: elementgui.dimension.portal_frame_block=Khối khung cổng\: elementgui.dimension.portal_particles=Hạt hiệu ứng của khối cổng\: @@ -2025,8 +2098,6 @@ elementgui.enchantment.curse=Có phải là phù phép lời nguyền? elementgui.enchantment.allowed_on_books=Phép thuật này có được phép dùng trên sách không? elementgui.enchantment.can_generate_in_loot_tables=Phù phép này có thể được tạo trong bàn loot? elementgui.enchantment.can_villager_trade=Phù phép này có thể xuất hiện trong trao đổi với dân làng? -elementgui.enchantment.compatible_enchantments=Có thể kết hợp với\:
Để trống để cho phép kết hợp với bất kỳ phù phép nào -elementgui.enchantment.can_apply_to=Có thể áp dụng cho\:
Để trống để cho phép áp dụng cho tất cả các vật phẩm elementgui.enchantment.needs_name=Phù phép cần có tên elementgui.gamerule.name=Tên máy\: elementgui.gamerule.display_name=Tên luật chơi\:
Tên này sẽ được dùng cho màn hình cài đặt luật chơi @@ -2172,7 +2243,6 @@ elementgui.keybind.key_procedure_triggers=Trình kích hoạt quy trình phím elementgui.keybind.error_key_needs_name=Phím cần có tên elementgui.keybind.error_key_category_needs_name=Tên khóa danh mục phím được gắn elementgui.living_entity.disable_collisions=Tắt hộp va chạm -elementgui.living_entity.has_ai=Bật AI
Khi sử dụng AI, hãy đảm bảo có một số tác vụ AI bên dưới elementgui.living_entity.immune_fire=Lửa elementgui.living_entity.immune_arrows=Mũi tên elementgui.living_entity.immune_fall_damage=Sát thương do rơi @@ -2190,9 +2260,7 @@ elementgui.living_entity.spawn_dungeons=Sinh ra trong dungeons elementgui.living_entity.is_rideable=Có thể cưỡi elementgui.living_entity.control_forward=Kiểm soát chuyển động về phía trước elementgui.living_entity.control_strafe=Kiểm soát chuyển động đi lạc -elementgui.living_entity.is_breedable=Đặt thực thể này thànhloại động vật, các vật phẩm sinh sản\:
Cơ sở thực thể và loại hành vi sẽ bị bỏ qua nếu được chọn elementgui.living_entity.is_tameable=Có thể thuần phục -elementgui.living_entity.is_ranged=Làm thực thể tấn công từ xa với vật phẩm, khoảng thời gian tấn công và bán kính\:
Thêm ít nhất một Hành động tích cực chống lại nhiệm vụ AI để xác định mục tiêu tấn công.
Nếu "Vật phẩm mặc định" được chọn, chọn vật bắn hoặc bỏ trống để dùng mũi tên elementgui.living_entity.event_struck_by_lightning=Khi bị sét đánh elementgui.living_entity.event_mob_falls=Khi thực thể rơi elementgui.living_entity.event_mob_dies=Khi thực thể chết @@ -2203,7 +2271,6 @@ elementgui.living_entity.event_mob_tick_update=Trên cập nhật tick thực th elementgui.living_entity.event_player_collides_with=Khi người chơi va chạm với thực thể này elementgui.living_entity.event_initial_spawn=Thực thể xuất hiện ban đầu elementgui.living_entity.condition_natural_spawn=Điều kiện sinh ra của thực thể tự nhiên -elementgui.living_entity.behaviour= Đặc điểm hành vi (Mob là hung dữ, Sinh vật là thụ động)\: elementgui.living_entity.creature_type=Loại sinh vật (xác định một số thuộc tính thực thể đặc biệt)\: elementgui.living_entity.drop_health_xp_amount=Vật rơi tùy chỉnh, giá trị lượng máu, số lượng kinh nghiệm\: elementgui.living_entity.follow_range_tracking_range=Khoảng cách theo dõi, phạm vi theo dõi\: @@ -2217,7 +2284,6 @@ elementgui.living_entity.name=Tên thực thể\: elementgui.living_entity.entity_model=Mô hình thực thể\:
Được hỗ trợ\: JAVA elementgui.living_entity.entity_model_import=Nhấn vào đây để nhập kết cấu hạt mô hình thực thể elementgui.living_entity.texture=Kết cấu của thực thể\:
Kết cấu cần phải phù hợp với mô hình (ví dụ\: skin của người chơi KHÔNG phải là kết cấu mô hình hai chân) -elementgui.living_entity.glow_texture=Kết cấu phát sáng của thực thể (tùy chọn)\:
Kết cấu phát sáng cần phải vừa với mô hình, độ sáng hình ảnh quyết định độ sáng elementgui.living_entity.bounding_box=Hộp giới hạn mô hình thực thể\:
Chiều rộng/Chiều sâu, Chiều cao, Kích thước bóng, Phần bù Y của thực thể được gắn elementgui.living_entity.spawn_egg_options=Tùy chọn trứng sinh ra\:
Bật, màu cơ bản, màu chấm, tab sáng tạo elementgui.living_entity.mob_boss=Chọn nếu bạn muốn thực thể của mình trở thành boss với thanh máu\: @@ -2239,14 +2305,16 @@ elementgui.living_entity.does_spawn_in_dungeons=Thực thể này có sinh ra tr elementgui.living_entity.spawn_general_condition=Điều kiện sinh ra tùy chỉnh\:
Khi điều kiện sinh ra tùy chỉnh được sử dụng, điều kiện kiểu sinh sản sẽ bị ghi đè
với nó, nhưng nhóm kiểu sinh sản và trọng lượng sẽ vẫn được sử dụng.
elementgui.living_entity.bind_to_gui=Gắn thực thể này với GUI\:
Đặt thành Trống để vô hiệu hóa kho đồ (bạn muốn điều này trong hầu hết các trường hợp)
elementgui.living_entity.inventory_size=Kích cỡ kho đồ (số ô)\:
Đặt giá trị này thành ID ô lớn nhất trong GUI + 1 +elementgui.living_entity.entity_data_entries.name=Tên\: +elementgui.living_entity.entity_data_entries.type=Loại\: +elementgui.living_entity.entity_data_entries.default_value=Giá trị mặc định\: +elementgui.living_entity.entity_data_entries.add_entry=Thêm mục mới elementgui.living_entity.error_entity_model_needs_texture=Mô hình thực thể cần có kết cấu elementgui.living_entity.error_entity_needs_name=Thực thể cần có tên elementgui.living_entity.page_visual=Trực quan elementgui.living_entity.page_sound=Âm thanh -elementgui.living_entity.page_behaviour=Hành vi elementgui.living_entity.page_ai_and_goals=AI và mục tiêu elementgui.living_entity.page_spawning=Sinh ra -elementgui.loot_table.name=Bảng loot elementgui.loot_table.registry_name=Tên đăng kí bảng loot\:
Dùng prefix như là blocks/ để chỉ định thể loại elementgui.loot_table.namespace=Namespace bảng loot\:
Dùng namespace minecraft để thay đổi công thức vanilla elementgui.loot_table.type=Loại bảng loot\: @@ -2402,9 +2470,7 @@ elementgui.recipe.error_smithing_no_ingredient_addition_and_result=Công thức elementgui.recipe.error_brewing_no_input_ingredient_and_result=Công thức pha chế cần phải có đầu vào, thành phần và đầu ra được xác định (không tính không khí) elementgui.structuregen.event_structure_instance_generated=Khi kiến trúc được tạo elementgui.structuregen.import_tooltip=Nhấn vào đây để nhập tệp kiến trúc nbt
Sử dụng tab Cấu trúc trong không gian làm việc để có thêm tùy chọn. -elementgui.structuregen.select_tooltip=Kiến trúc để sinh ra\:
Để có thêm các tùy chọn nhập kiến trúc, hãy sử dụng phần kiến trúc của tab không gian làm việc elementgui.structuregen.ignore_blocks=Khối bỏ qua khi đặt\: -elementgui.structuregen.error_select_structure_spawn=Bạn cần chọn một kiến trúc sẽ được sinh ra bởi cấu trúc này để tiếp tục. elementgui.tab.name=Tên tab sáng tạo\: elementgui.tab.icon=Icon tab\: elementgui.tab.search_bar=Hiện thanh tìm kiếm\: @@ -2471,11 +2537,6 @@ workspace.resources.tab.structures=Kiến trúc workspace.resources.tab.screenshots=Ảnh chụp màn hình workspace.textures.new=Tạo kết cấu mới workspace.textures.import=Nhập kết cấu -workspace.textures.edit_selected=Chỉnh sửa mục được chọn... -workspace.textures.duplicate_selected=Sao chép mục được chọn... -workspace.textures.delete_selected=Xóa mục được chọn -workspace.textures.export_selected=Xuất mục được chọn... -workspace.textures.confirm_deletion_message=Bạn có chắc chắn muốn xóa tệp này không?
LƯU Ý\: Nếu bạn sử dụng tệp này ở bất kỳ đâu, bạn có thể có kết cấu bị hỏng\! workspace.textures.select_dupplicate_type=Chọn loại kết cấu bạn muốn sao chép\: workspace.textures.select_texture_type=Đây là loại kết cấu gì? workspace.textures.category.block=Kết cấu cho khối\: @@ -2487,47 +2548,29 @@ workspace.textures.category.screen=Kết cấu cho màn hình (thành tựu, cá workspace.textures.category.armor=Kết cấu cho bộ giáp\: workspace.textures.category.other=Các kết cấu khác (tranh vẽ, logo của mod, ...)\: workspace.3dmodel.description={0}
Mapping kết cấu\: {1} -workspace.3dmodels.edit_texture_mappings=Chỉnh sửa mapping kết cấu... -workspace.3dmodels.redefine_animations=Xác định lại hoạt ảnh của mô hình... -workspace.3dmodels.delete_selected=Xóa mục được chọn -workspace.3dmodels.delete_confirm_message=Bạn có chắc chắn muốn xóa mô hình này không?
LƯU Ý\: Nếu bạn sử dụng mô hình này ở bất kỳ đâu, bạn có thể có kết cấu bị hỏng
và một số phần tử mod có thể không dựng\! -workspace.3dmodels.regenerating_code=Tạo lại mã -workspace.3dmodels.regenerating_entity_code=Tạo lại mã của thực thể -workspace.3dmodels.rebuilding_workspace=Xây dựng lại không gian làm việc workspace.3dmodels.animation_unsupported_title=Hình động không được hỗ trợ workspace.3dmodels.animation_unsupported_message=Mô hình này không hỗ trợ hình động\! workspace.3dmodels.mappings_unsupported_title=Không có mapping workspace.3dmodels.mappings_unsupported_message=Mô hình này không hỗ trợ mapping kết cấu\! -workspace.sounds.confirm_deletion_message=Bạn có chắc chắn muốn xóa âm thanh này không?
LƯU Ý\: Nếu bạn sử dụng âm thanh này ở bất kỳ đâu, nó sẽ không còn hoạt động\! -workspace.sounds.edit_selected=Chỉnh sửa mục được chọn... workspace.sounds.play_selected=Phát âm thanh được chọn -workspace.sounds.delete_selected=Xóa mục được chọn workspace.sounds.category=Thể loại âm thanh\: {0} workspace.sounds.files=Tệp âm thanh\: {0} workspace.sounds.subtitle_and_category=Phụ đề\: {0}, Thể loại âm thanh\: {1} -workspace.screenshots.export_selected=Xuất mục được chọn... -workspace.screenshots.delete_selected=Xóa mục được chọn workspace.screenshots.action_complete=Hành động hoàn tất workspace.screenshots.use_background_message=Ảnh chụp màn hình đã chọn sẽ được sử dụng làm hình nền trong lần khởi chạy tiếp theo. -workspace.screenshots.use_as_background=Dùng hình được chọn làm hình nền MCreator... -workspace.structure.confirm_deletion_message=Bạn có chắc chắn muốn xóa các kiến trúc đã chọn không?
LƯU Ý\: Nếu bạn sử dụng chúng ở bất kỳ đâu, chúng sẽ không xuất hiện nữa\! workspace.variables.variable_name=Tên biến workspace.variables.variable_type=Loại biến workspace.variables.variable_scope=Variable Scope workspace.variables.initial_value=Giá trị ban đầu workspace.variables.add_new=Thêm một biến mới -workspace.variables.remove_selected=Xóa mục được chọn workspace.variables.help=Trợ giúp với biến workspace.variables.change_type=Bạn có chắc chắn rằng bạn muốn thay đổi biến này?
Nếu biến này được sử dụng, hành động này có thể gây ra lỗi biên dịch.
Nếu bạn vừa tạo nó, nó hoàn toàn ổn để thay đổi nó. -workspace.variables.remove_variable_confirmation=Bạn có chắc chắn muốn xóa những biến được chọn không?
Nếu biến này đang được sử dụng, hành động này có thể gây ra lỗi biên dịch. workspace.localization.add_entry=Thêm mục bản địa hóa -workspace.localization.remove_selected=Xóa mục được chọn workspace.localization.export_to_csv=Xuất ngôn ngữ hiện tại sang CSV workspace.localization.import_csv=Nhập CSV vào ngôn ngữ hiện tại workspace.localization.key_name_title=Tên khoá workspace.localization.key_name_message=Nhập tên khóa cho mục ngôn ngữ tùy chỉnh của bạn\: workspace.localization.confirm_delete_map=Bạn có chắc chắn muốn xóa bản đồ bản địa hóa này không? -workspace.localization.confirm_delete_entry=Bạn có chắc chắn muốn xóa các mục đã chọn không?
LƯU Ý\: Nếu chúng vẫn được sử dụng, tên của các mục được gắn với chúng sẽ không hoạt động\! workspace.localization.export_translation=Xuất bản dịch workspace.localization.confirm_export=Không thể xuất bản dịch mặc định (en_us)\!
Văn bản tiếng Anh được xác định trong phần tử mod. workspace.localization.warning_export=Bạn không thể nhập CSV vào bản dịch mặc định (en_us)\!
Văn bản tiếng Anh được xác định trong phần tử mod. diff --git a/plugins/mcreator-localization/lang/texts_zh_CN.properties b/plugins/mcreator-localization/lang/texts_zh_CN.properties index 58c09c3b786..f336fac0419 100644 --- a/plugins/mcreator-localization/lang/texts_zh_CN.properties +++ b/plugins/mcreator-localization/lang/texts_zh_CN.properties @@ -6,25 +6,25 @@ dialog.accelerators.title=快捷键映射 dialog.workspace_selector.new_workspace=新建工作区… dialog.workspace_selector.open_workspace=打开工作区… dialog.workspace_selector.import=从文件导入… -dialog.workspace_selector.recent_workspace={0}
最后一次打开于\: {2}
位置\: {1} +dialog.workspace_selector.recent_workspace={0}
上次打开于{2}
位置:{1} dialog.workspace_selector.no_workspaces_loaded=
载入最近工作区快捷方式失败。
重新打开它们,
以将它们再次加入到列表中。 dialog.workspace_selector.no_workspaces=无最近工作区 -dialog.workspace_selector.version=版本 {0} +dialog.workspace_selector.version=版本{0} dialog.workspace_selector.preferences=偏好设置 dialog.workspace_selector.donate=捐赠 -dialog.workspace_selector.news=来自 MCreator 网站的最新消息\: -dialog.workspace_selector.motw=每周模组\: -dialog.workspace_selector.webdata.loading=加载数据中…… -dialog.workspace_selector.delete_workspace.message=您是想让 {0} 从最近工作区中移除
还是从您的电脑磁盘中删除呢?(永久删除, 无法撤销)?

从列表中删除对于本地的工作区文件无任何影响 +dialog.workspace_selector.news=来自MCreator网站的最新消息: +dialog.workspace_selector.motw=每周模组: +dialog.workspace_selector.webdata.loading=正在加载数据… +dialog.workspace_selector.delete_workspace.message=您想让{0}从最近工作区中移除
还是从您的电脑磁盘中删除呢(永久删除,不可撤销)?

从列表中删除对于本地的工作区文件无任何影响 dialog.workspace_selector.delete_workspace.title=删除工作区 dialog.workspace_selector.delete_workspace.recent_list=从最近列表中移除 dialog.workspace_selector.delete_workspace.workspace=删除工作区目录 -dialog.workspace_selector.delete_workspace.confirmation=您确定要永久删除 {0} 吗?

如果您点击 ,所有工作区文件将不可逆转地从计算机中删除。 -action.mcreator_website=MCreator 网站 -action.mcreator_community=MCreator 社区 +dialog.workspace_selector.delete_workspace.confirmation=您确定要永久删除{0}吗?

如果您单击,所有工作区文件将不可逆转地从计算机中删除。 +action.mcreator_website=MCreator网站 +action.mcreator_community=MCreator社区 action.publish_modification=发布我的模组… action.preferences=偏好设置... -action.exit=退出 MCreator +action.exit=退出MCreator action.wiki=在线帮助 action.support=支持 action.create_texture=创建纹理… @@ -35,7 +35,7 @@ action.import_item_texture=导入物品纹理... action.import_entity_texture=导入实体纹理... action.import_effect_texture=导入效果纹理... action.import_particle_texture=导入粒子纹理... -action.import_screen_texture=导入图形界面(GUI)和叠加层等纹理… +action.import_screen_texture=导入GUI和叠加层等纹理… action.import_armor_texture=导入盔甲纹理… action.import_other_texture=导入画、图标等纹理… action.workspace.close=关闭当前工作区 @@ -48,80 +48,80 @@ action.replace_all=全部替换 action.show_workspace_browser=显示工作区文件浏览器 action.hide_workspace_browser=隐藏工作区文件浏览器 action.open_workspace_folder=打开工作区目录 -action.gradle.build_gradle_project=仅构建 Gradle 项目 -action.gradle.build_gradle_project.tooltip=这个操作将触发 Gradle 项目构建,而不更改任何源文件 +action.gradle.build_gradle_project=仅构建Gradle项目 +action.gradle.build_gradle_project.tooltip=该操作将触发Gradle项目构建,而不更改任何源文件 action.gradle.build_workspace=构建工作区 -action.gradle.build_workspace.tooltip=这个操作将重新生成模组基本源文件并构建 Gradle 项目 -action.gradle.cancel_task=取消 Gradle 任务 -action.gradle.disabled=由于 Gradle 任务在控制台中处于活动状态,该操作目前被禁用。
这可能由于 MCreator 启动了 Minecraft、处于构建状态、处于配置状态,或正在进行其他的
Gradle 操作。请检查控制台标签页获取更多信息,或等待任务完成。 -action.gradle.clear_caches=清除所有 Gradle 缓存... -action.gradle.clear_caches.option.gradle_caches=清除 Gradle 缓存 -action.gradle.clear_caches.option.gradle_folder=清除整个 Gradle 文件夹 -action.gradle.clear_caches.option.message=清理对于所有工作区和生成器的 Gradle 缓存。
这样做可以解决一些 Gradle 构建错误。

这个操作不会影响您的文件和工作区,但是在清理之后
每个生成器类型和版本将会在首次使用花费更多的时间以构建。
有时,清理整个 Gradle 文件夹可以解决一些构建错误。

任何正在进行的任务和测试所用的客户端在这个期间将会被关闭。 +action.gradle.build_workspace.tooltip=该操作将重新生成模组基本源文件并构建Gradle项目 +action.gradle.cancel_task=取消Gradle任务 +action.gradle.disabled=由于Gradle任务在控制台中处于活动状态,该操作目前被禁用。
这可能由于MCreator启动了Minecraft、处于构建状态、处于配置状态,或正在进行其他的
Gradle操作。请检查控制台标签页获取更多信息,或等待任务完成。 +action.gradle.clear_caches=清除所有Gradle缓存... +action.gradle.clear_caches.option.gradle_caches=清除Gradle缓存 +action.gradle.clear_caches.option.gradle_folder=清除整个Gradle文件夹 +action.gradle.clear_caches.option.message=清理对于所有工作区和生成器的Gradle缓存。
这样做可以解决一些Gradle构建错误。

该操作不会影响您的文件和工作区,但是在清理之后
每个生成器类型和版本将会在首次使用花费更多的时间以构建。
有时,清理整个Gradle文件夹可以解决一些构建错误。

任何正在进行的任务和测试所用的客户端在该期间将会被关闭。 action.common.apply=应用 action.common.create=创建 -action.common.resize=调整大小 -action.gradle.clear_caches.option.title=清除所有 Gradle 缓存 -action.gradle.close_mcreator_while_installation_message=Gradle 仍在设置工作区!
Gradle 在设置时您不能关闭 MCreator。 请等待设置完成。
您可以在控制台选项卡中查看设置进度。 -action.gradle.close_mcreator_while_installation_title=正在设置 Gradle -action.gradle.close_mcreator_while_running_message=后台有一些运行中的 Gradle 任务。
您确定要关闭这个工作区吗?

如果您继续,运行中的任务将被取消! +action.common.resize=调整尺寸 +action.gradle.clear_caches.option.title=清除所有Gradle缓存 +action.gradle.close_mcreator_while_installation_message=Gradle仍在设置工作区!
Gradle在设置期间您不能关闭MCreator。需要等待至设置完成。
您可以在控制台选项卡中查看设置进度。 +action.gradle.close_mcreator_while_installation_title=正在设置Gradle +action.gradle.close_mcreator_while_running_message=后台有一些运行中的Gradle任务。
您确定要关闭该工作区吗?

如果您继续,运行中的任务将被取消! action.gradle.close_mcreator_while_running_title=关闭工作区 dialog.ai_condition.additional_start=附加启动条件 dialog.ai_condition.additional_continue=附加中继条件 -dialog.ai_condition.panel_name=AI 条件编辑器 +dialog.ai_condition.panel_name=AI条件编辑器 dialog.animation_editor.title_wizard=模型动画定义向导 -dialog.animation_editor.action_set_new=设定新的动画 +dialog.animation_editor.action_set_new=设置新的动画 dialog.animation_editor.action_keep_current=保留当前动画 -dialog.animation_editor.action_set=设定动画 -dialog.animation_maker.frame_duration=每帧持续时间\:
刻;(20刻\=1秒) -dialog.animation_maker.interpolate_frame=启用插值帧\:
在预览中不可见 +dialog.animation_editor.action_set=设置动画 +dialog.animation_maker.frame_duration=每帧持续时间:
以刻为单位;(20刻\=1秒) +dialog.animation_maker.interpolate_frame=启用插值帧:
在预览中不可见 dialog.animation_maker.settings=动画设置 dialog.animation_maker.next_frame=下一帧 dialog.animation_maker.previous_frame=上一帧 dialog.animation_maker.animation_timeline=动画时间轴 dialog.animation_maker.add_frames=添加帧... -dialog.animation_maker.add_frames_from_template=从模板添加帧... -dialog.animation_maker.add_frames_from_strip=从已有动画文件添加帧... -dialog.animation_maker.add_frames_from_gif=从 GIF 添加帧... -dialog.animation_maker.gif_importing=GIF 导入 -dialog.animation_maker.gif_reading=读取 GIF -dialog.animation_maker.gif_processing=处理 GIF -dialog.animation_maker.gif_format_unsupported=不支持压缩的 GIF 格式! +dialog.animation_maker.add_frames_from_template=从模板中添加帧... +dialog.animation_maker.add_frames_from_strip=从已有动画文件中添加帧 +dialog.animation_maker.add_frames_from_gif=从GIF添加帧... +dialog.animation_maker.gif_importing=GIF导入 +dialog.animation_maker.gif_reading=正在读取GIF +dialog.animation_maker.gif_processing=正在处理GIF +dialog.animation_maker.gif_format_unsupported=不支持压缩的GIF格式! dialog.animation_maker.remove_selected_frames=删除选中帧 -dialog.animation_maker.save_animated_texture=保存这个动态纹理 +dialog.animation_maker.save_animated_texture=保存该动态纹理 dialog.animation_maker.kind_of_texture=这是哪种纹理? dialog.animation_maker.type_of_texture=纹理类型 -dialog.animation_maker.enter_texture_name=输入纹理名称(不含空格,仅允许小写字母与下划线_)\: +dialog.animation_maker.enter_texture_name=输入纹理名称(不含空格,仅允许小写字母与下划线_): dialog.animation_maker.resource_error=资源错误 -dialog.animation_maker.texture_already_exists={0} 已存在这个名称! -dialog.animation_maker.size_selection=大小选择 -dialog.animation_maker.animation_size=选择动画的大小\: +dialog.animation_maker.texture_already_exists=已存在名称{0}! +dialog.animation_maker.size_selection=尺寸选择 +dialog.animation_maker.animation_size=选择动画尺寸: dialog.animation_maker.template_color_choice=选择模板和颜色 -dialog.animation_maker.template=动画模板\: -dialog.animation_maker.color=动画颜色\: -dialog.animation_maker.saturation_lightness_lock=锁定饱和度和明度\: +dialog.animation_maker.template=动画模板: +dialog.animation_maker.color=动画颜色: +dialog.animation_maker.saturation_lightness_lock=锁定饱和度和明度: dialog.animation_maker.preview=预览 dialog.animation_maker.strip_color_choice=选择动画文件和颜色(可选) -dialog.animation_maker.strip=动画文件\: -dialog.animation_maker.colorize=着色\: +dialog.animation_maker.strip=动画文件: +dialog.animation_maker.colorize=着色: dialog.animation_maker.add_frames_from_file=从文件添加帧 -dialog.armor_image_maker.type=盔甲纹理类型\: -dialog.armor_image_maker.color=纹理颜色\: -dialog.armor_image_maker.saturation_lightness_lock=锁定饱和度和明度\: +dialog.armor_image_maker.type=盔甲纹理类型: +dialog.armor_image_maker.color=纹理颜色: +dialog.armor_image_maker.saturation_lightness_lock=锁定饱和度和明度: dialog.armor_image_maker.properties=盔甲纹理属性 dialog.armor_image_maker.preview=盔甲纹理预览 -dialog.armor_image_maker.save=保存这个盔甲 -dialog.armor_image_maker.name=输入盔甲纹理名称(不含空格)\: +dialog.armor_image_maker.save=保存该盔甲 +dialog.armor_image_maker.name=输入盔甲纹理名称(不含空格): dialog.armor_image_maker.resource_error=资源错误 dialog.armor_image_maker.name_already_exists=已有相同的盔甲名称! dialog.common.save_changes=保存更改 -dialog.cache_cleanup.title=清理 Gradle 缓存 -dialog.cache_cleanup.progress.stopping_daemons=正在停止运行 Gradle 程序 -dialog.cache_cleanup.progress.clearing_gradle_caches_folder=正在清理 Gradle 缓存文件夹 -dialog.cache_cleanup.progress.build_task=正在运行 Gradle 构建任务 -dialog.code_error.compilation_desc=您的主模组文件中有一个或多个未能正确编译

这通常是由于构建过程中模组代码不一致所造成的。
MCreator 可以通过重新生成整个模组的代码来解决这个问题。

如果您已经锁定了模组元素或模组基础文件,也会导致这个错误。


点击 重新生成代码 按钮以继续进行这个操作
+dialog.cache_cleanup.title=清理Gradle缓存 +dialog.cache_cleanup.progress.stopping_daemons=正在停止运行Gradle程序 +dialog.cache_cleanup.progress.clearing_gradle_caches_folder=正在清理Gradle缓存文件夹 +dialog.cache_cleanup.progress.build_task=正在运行Gradle构建任务 +dialog.code_error.compilation_desc=一个或多个主模组文件没有正确编译。

这通常是由构建期间模组代码的不一致引起的。
MCreator可以通过生成整个模组的代码来解决该问题。

如果您锁定了模组元素或模组基本文件,它们也可能导致此错误。


单击重新生成代码按钮继续此操作。
dialog.code_error.compilation_title=主模组文件编译错误 -dialog.code_error.compilation_list=您的工作区包含不能正常编译的模组元素.

这很可能是由您添加或编辑的最后一个模组元素造成的。尝试更改
导致构建错误的元素(这个类元素在下面列出) 的设置,以尝试解决这个问题。

如果您不能解决这个问题,您可将从 文件 菜单 将工作区导出为可共享的 ZIP 压缩文件,通过
GitHub 上的问题板块发送给我们,以便我们可以尝试帮助您。

导致编译错误的模组元素列表(最多10个元素):

+dialog.code_error.compilation_list=您的工作区包含不能正常编译的模组元素.

这很可能是由您添加或编辑的最后一个模组元素造成的。尝试更改
导致构建错误的元素(这样的元素在下面列出)的设置,以尝试解决该问题。

如果您不能解决该问题,您可将从文件菜单将工作区导出为可共享的ZIP压缩文件,通过
GitHub上的问题板块发送给我们,以便我们尝试帮助您。

导致编译错误的模组元素列表(最多10个元素):

dialog.code_error.regenerate_code=重新生成代码 dialog.code_error.ignore_error=忽略错误 dialog.code_error.show_in_workspace=在工作区中显示 @@ -131,46 +131,46 @@ dialog.console_search.match=匹配大小写 dialog.console_search.no_result=无结果 dialog.element_order.instructions=单击元素或选取并拖动以重新排序 dialog.element_order.editor_title=创造模式标签页元素顺序编辑器 -dialog.element_order.change_message=MCreator 现在将重建工作区代码以应用更改。

现有地图保存将保持旧的顺序! +dialog.element_order.change_message=MCreator现在将重建工作区代码以应用更改。

现有地图保存将保持旧的顺序! dialog.element_order.change_title=元素顺序更改 dialog.file.error_save_inside_workspace_root_message=您不能在工作区根目录内创建一个工作区。请先在此处创建一个子目录! dialog.file.error_save_inside_workspace_root_title=工作区错误 dialog.file.error_save_inside_folder_not_empty_message=您为工作区选择的目录不是空的! dialog.file.error_save_inside_folder_not_empty_title=目录不为空 -dialog.file.error_invalid_path=您为工作区选择的目录有无效路径!

您选择了以下目录\:
{0}

只有英文字母,数字, _/+-\\\:()[]。 在路径中允许@$\=` 和空格。 +dialog.file.error_invalid_path=您为工作区选择的目录有无效路径!

您选择了以下目录:
{0}

只有英文字母,数字, _/+-\\:()[]。 在路径中允许@$\=` 和空格。 dialog.file.error_invalid_path_title=无效的工作区目录路径 -dialog.file.error_invalid_name=您为工作区选择的目录名无效!

工作区文件夹不应包含以下字符\:/\\\:>"?*| 和空格。 +dialog.file.error_invalid_name=您为工作区选择的目录名无效!

工作区文件夹不应包含以下字符:/\\:>"?*| 和空格。 dialog.file.error_invalid_name_title=工作区目录名无效 dialog.file.error_directory_doesnt_exist=您要创建工作区的目录不存在! dialog.file.error_directory_doesnt_exist_title=工作区错误 -dialog.file.error_no_access=您为工作区选择的目录
位于 MCreator 无法写入或读取的文件夹中! +dialog.file.error_no_access=您为工作区选择的目录
位于MCreator无法读写的文件夹中! dialog.file.error_no_access_title=工作区目录权限错误 -dialog.file.error_already_exists=文件 “{0}” 已经存在。您想要替换它吗? +dialog.file.error_already_exists=文件{0}已经存在。您想要替换它吗? dialog.file.error_already_exists_title=覆盖文件 dialog.file.select_directory_title=选择工作区目录 dialog.gui.button_add_title=按钮编辑器 -dialog.gui.button_change_width=在点击“确定”后,鼠标右击以改变按钮宽度 -dialog.gui.button_resize=如需改变按钮的大小,使用“移动”工具,在移动时右击 -dialog.gui.button_text=按钮文本\: +dialog.gui.button_change_width=在单击“确定”后,鼠标右击以改变按钮宽度 +dialog.gui.button_resize=如需改变按钮的尺寸,使用“移动”工具,在移动时右击 +dialog.gui.button_text=按钮文本: dialog.gui.button_is_undecorated=按键按下会没反应吗? -dialog.gui.button_event_on_clicked=当按钮被点击时 +dialog.gui.button_event_on_clicked=当按钮被单击时 dialog.gui.button_display_condition=按钮显示条件 dialog.gui.image_button_add_title=图像按钮编辑器 dialog.gui.image_button_size=
图像按钮的高度和宽度都与文件相同
两个纹理文件应该拥有相同的比例
-dialog.gui.hovered_image_texture=悬停时的纹理\: -dialog.gui.image_texture=纹理\: -dialog.gui.image_use_scale=使用原始比例(1X 而不是 Minecraft 2X 缩放) +dialog.gui.hovered_image_texture=悬停时的纹理: +dialog.gui.image_texture=纹理: +dialog.gui.image_use_scale=使用原始比例(1X而不是Minecraft 2X缩放) dialog.gui.image_display_condition=图像显示条件 dialog.gui.image_title=图像编辑器 dialog.gui.label_event_display_condition=标签显示条件 -dialog.gui.label_text=文本\: +dialog.gui.label_text=文本: dialog.gui.label_component_title=标签编辑器 -dialog.gui.label_text_color=文本颜色\: +dialog.gui.label_text_color=文本颜色: dialog.gui.add_entity_model=渲染的实体编辑器 dialog.gui.entity_model_procedure=显示实体模型提供者 dialog.gui.model_display_condition=模型显示条件 -dialog.gui.model_scale=模型大小\: -dialog.gui.model_rotation_x=模型 Y 轴旋转(角度) +dialog.gui.model_scale=模型尺寸: +dialog.gui.model_rotation_x=模型Y轴旋转(角度) dialog.gui.model_follow_mouse=跟随鼠标旋转移动 dialog.gui.add_tooltip=提示框编辑器 dialog.gui.tooltip_display_condition=提示框显示条件 @@ -185,54 +185,54 @@ dialog.gui.anchor.bottom_left=左下角 dialog.gui.anchor.bottom_center=底部居中 dialog.gui.anchor.bottom_right=右下角 dialog.gradle_console.clear_log=清除日志 -dialog.gradle_console.search=在 Gradle 控制台中搜索 -dialog.gradle_console.start_build=点击此处来构建整个工作区
您也可以通过 Ctrl + 单击控制台选项卡构建 -dialog.gradle_console.run_specific_task=单击此处以运行一个特定的 Gradle 任务
这个工具只能在没有活动的 Gradle 任务运行时使用。 +dialog.gradle_console.search=在Gradle控制台中搜索 +dialog.gradle_console.start_build=单击此处来构建整个工作区
您也可以通过 Ctrl + 单击控制台选项卡构建 +dialog.gradle_console.run_specific_task=单击此处以运行一个特定的Gradle任务
该工具只能在没有活动的Gradle任务运行时使用。 dialog.gradle_console.copy_contents_clipboard=复制控制台内容到剪贴板 dialog.gradle_console.clear=清空控制台 dialog.gradle_console.show_info_log=在控制台中显示信息日志 dialog.gradle_console.show_errors=在控制台中显示错误 dialog.gradle_console.lock_scroll=滚动锁定 -dialog.gradle_console.offline_mode_message=您设置了 MCreator 在离线模式下运行!

MCreator 无法在离线模式下配置生成器。
所以离线模式将被禁用。 +dialog.gradle_console.offline_mode_message=您设置了MCreator在离线模式下运行!

MCreator无法在离线模式下配置生成器。
所以离线模式将被禁用。 dialog.gradle_console.offline_mode_title=离线模式警告 -dialog.gradle_console.gradle_caches_corrupted_message=MCreator 检测到 Gradle 缓存已损坏。
别担心,我们可以为您修复这个问题,我们只需要重新构建这些缓存。

这个操作不会影响您的文件或工作区,但在清理缓存后,
首次构建每个生成器类型和版本需要更长一点时间。
在某些情况下,需要清理整个 Gradle 文件夹以解决 Gradle 错误。

任何运行中的构建任务或开放的测试客户端将在这个操作期间关闭。 -dialog.gradle_console.gradle_caches_corrupted_title=Gradle 缓存已损坏 -dialog.gui.slot_id_already_used=储存槽 ID 已被使用 -dialog.gui.slot_id_must_be_number=储存槽 ID 必须是数字 -dialog.gui.slot_id=储存槽 ID\: -dialog.gui.slot_custom_color=自定义颜色
只在您想使用自定义颜色时点击\: -dialog.gui.slot_limit_stack_input=限制这个输入槽位的物品类型为\:
留空则没有限制。 该数值不影响自动化。
该条件会被放入条件覆盖(如果不是默认) +dialog.gradle_console.gradle_caches_corrupted_message=MCreator检测到Gradle缓存已损坏。
别担心,我们可以为您修复该问题,我们只需要重新构建这些缓存。

该操作不会影响您的文件或工作区,但在清理缓存后,
首次构建每个生成器类型和版本需要更长一点时间。
在某些情况下,需要清理整个Gradle文件夹以解决Gradle错误。

任何运行中的构建任务或开放的测试客户端将在该操作期间关闭。 +dialog.gradle_console.gradle_caches_corrupted_title=Gradle缓存已损坏 +dialog.gui.slot_id_already_used=槽位ID已被使用 +dialog.gui.slot_id_must_be_number=槽位ID必须是数字 +dialog.gui.slot_id=槽位ID: +dialog.gui.slot_custom_color=自定义颜色
只在您想使用自定义颜色时单击: +dialog.gui.slot_limit_stack_input=限制该输入槽位的物品类型为:
留空则没有限制。 该数值不影响自动化。
该条件会被放入条件覆盖(如果不是默认) dialog.gui.disable_pickup=禁用从物品栏取出物品 dialog.gui.disable_placement=禁用从物品栏放置物品 dialog.gui.slot_drop_item_when_gui_closed=当没有绑定任何外部容器时丢弃物品 -dialog.gui.slot_event_slot_content_changes=当储存槽内容改变时 -dialog.gui.slot_event_item_taken_from_slot=当物品从储存槽中拿走时 -dialog.gui.slot_event_transferred_from_slot=当物品从储存槽被玩家按住 Shift 拿走时 -dialog.gui.slot_input_editor_title=输入储存槽编辑器 -dialog.gui.slot_output_editor_title=输出储存槽编辑器 -dialog.gui.save_slot=保存储存槽 -dialog.gui.textfield_change_width=在点击“确定”后,右击以改变文本框宽度 -dialog.gui.textfield_resize=如需改变按钮的大小,请使用“移动”工具,在移动时右击 -dialog.gui.textfield_input_name=文本框内部名称(textFieldName)\: +dialog.gui.slot_event_slot_content_changes=当槽位内容改变时 +dialog.gui.slot_event_item_taken_from_slot=当物品从槽位中拿走时 +dialog.gui.slot_event_transferred_from_slot=当物品从槽位被玩家按住 Shift 拿走时 +dialog.gui.slot_input_editor_title=输入槽位编辑器 +dialog.gui.slot_output_editor_title=输出槽位编辑器 +dialog.gui.save_slot=保存槽位 +dialog.gui.textfield_change_width=在单击“确定”后,右击以改变文本框宽度 +dialog.gui.textfield_resize=如需改变按钮的尺寸,请使用“移动”工具,在移动时右击 +dialog.gui.textfield_input_name=文本框内部名称(textFieldName): dialog.gui.textfield_add=文本框编辑器 -dialog.gui.textfield_initial_text=初始文本\: +dialog.gui.textfield_initial_text=初始文本: dialog.gui.textfield_name_validator=文本框内部名称 -dialog.gui.checkbox_procedure_value=当 GUI 打开时勾选 +dialog.gui.checkbox_procedure_value=当GUI打开时勾选 dialog.gui.checkbox_add=复选框编辑器 -dialog.gui.checkbox_name=复选框内部名称\: -dialog.gui.checkbox_text=复选框旁边的文本\: +dialog.gui.checkbox_name=复选框内部名称: +dialog.gui.checkbox_text=复选框旁边的文本: dialog.gui.checkbox_name_validator=复选框内部名称 -action.gradle.reload_project=重新加载 Gradle 项目 -dialog.imageeditor.base_color=底色\: -dialog.imageeditor.base_texture=基础纹理\: -dialog.imageeditor.width=宽度\: -dialog.imageeditor.height=高度\: -dialog.imageeditor.color=颜色\: +action.gradle.reload_project=重新加载Gradle项目 +dialog.imageeditor.base_color=底色: +dialog.imageeditor.base_texture=基础纹理: +dialog.imageeditor.width=宽度: +dialog.imageeditor.height=高度: +dialog.imageeditor.color=颜色: dialog.imageeditor.color_layer_type=颜色 dialog.imageeditor.transparency=透明度 dialog.imageeditor.template=模板 dialog.imageeditor.no_layer=没有图层 -dialog.imageeditor.saturation=饱和度\: +dialog.imageeditor.saturation=饱和度: dialog.imageeditor.hsv_noise_hue=最大色调变化 dialog.imageeditor.hsv_noise_saturation=最大饱和度变化 dialog.imageeditor.hsv_noise_value=最大值变化 @@ -240,80 +240,82 @@ dialog.imageeditor.saturation_brightness_lock=锁定饱和度和亮度 dialog.imageeditor.desaturate_title=去饱和图层 dialog.imageeditor.desaturate_action=降低饱和度 dialog.imageeditor.template_from_title=来自模板 -dialog.imageeditor.template_generator=生成器模板\: +dialog.imageeditor.template_generator=生成器模板: dialog.imageeditor.template_select_texture=选择纹理 -dialog.imageeditor.template_layer_one=图层 1\: -dialog.imageeditor.template_layer_two=图层 2\: -dialog.imageeditor.template_layer_three=图层 3\: -dialog.imageeditor.template_layer_four=图层 4\: -dialog.imageeditor.template_rotation=旋转\: +dialog.imageeditor.template_layer_one=图层1: +dialog.imageeditor.template_layer_two=图层2: +dialog.imageeditor.template_layer_three=图层3: +dialog.imageeditor.template_layer_four=图层4: +dialog.imageeditor.template_rotation=旋转: dialog.imageeditor.template_randomize=随机化 dialog.imageeditor.template_create_and_merge=创建并合并 dialog.imageeditor.template_merged_layer=合并图层 dialog.imageeditor.noise_apply=为图层添加噪点 dialog.imageeditor.noise_randomize_seed=随机种子 -dialog.imageeditor.noise_seed=种子\: +dialog.imageeditor.noise_seed=种子: dialog.imageeditor.new_image_title=新建图像 -dialog.imageeditor.new_image_fill_with=填充\: +dialog.imageeditor.new_image_fill_with=填充: dialog.imageeditor.new_image_add_transparent_layer=添加一个透明图层 dialog.imageeditor.new_image_add_no_layer=不添加图层 dialog.imageeditor.new_layer=新建图层 -dialog.imageeditor.new_layer_name=图层名称\: -dialog.imageeditor.new_layer_fill_with=填充\: +dialog.imageeditor.new_layer_name=图层名称: +dialog.imageeditor.new_layer_fill_with=填充: dialog.imageeditor.new_layer_fills_transparency=用透明填充图层 -dialog.imageeditor.new_layer_x_offset=X 偏移\: -dialog.imageeditor.new_layer_y_offset=Y 偏移\: +dialog.imageeditor.new_layer_x_offset=X偏移量: +dialog.imageeditor.new_layer_y_offset=Y偏移量: dialog.imageeditor.recolor_layer=重新着色图层 dialog.imageeditor.recolor_action=重新着色 -dialog.imageeditor.resize_canvas=调整画布大小 -dialog.imageeditor.resize_layer=调整图层大小 -dialog.imageeditor.resize_enable_anti_aliasing=启用抗锯齿\: -dialog.imageeditor.resize_affect_canvas=使画布适应图层大小 -dialog.imageeditor_tool.use_canvas=点击画布以使用 +dialog.imageeditor.resize_canvas=调整画布尺寸 +dialog.imageeditor.resize_layer=调整图层尺寸 +dialog.imageeditor.resize_enable_anti_aliasing=启用抗锯齿: +dialog.imageeditor.resize_affect_canvas=使画布适应图层尺寸 +dialog.imageeditor_tool.use_canvas=单击画布以使用 dialog.imageeditor.layer_panel_no_image=没有图像 dialog.imageeditor.layer_panel_no_layers=没有图层 -dialog.imageeditor.layer_panel_new_layer=新图层 +dialog.imageeditor.layer_panel_new_layer=新建图层 +dialog.imageeditor.layer_panel_new_layer.floating=从浮动选区中创建新图层 dialog.imageeditor.layer_panel_move_up=上移 dialog.imageeditor.layer_panel_move_down=下移 dialog.imageeditor.layer_panel_rename_layer=重命名图层 dialog.imageeditor.layer_panel_toggle_visibility=切换可见性 dialog.imageeditor.layer_panel_delete_layer=删除图层 dialog.imageeditor.layer_panel_duplicate_layer=复制上一层 -dialog.imageeditor.layer_panel_confirm_layer_deletion_message=您确定要删除以下图层\:
+dialog.imageeditor.layer_panel_merge_layers_down=将该图层与下面的图层合并 +dialog.imageeditor.layer_panel_confirm_layer_deletion_message=您确定要删除以下图层:
dialog.imageeditor.layer_panel_confirm_layer_deletion_title=删除图层 -dialog.imageeditor.layer_panel_enter_new_name=输入新图层的名称\: +dialog.imageeditor.layer_panel_enter_new_name=输入新图层的名称: dialog.imageeditor.stamp_tool_lock_saturation_brightness=锁定饱和度和明度 -dialog.imageeditor.stamp_tool_smooth_resizing=平滑调整大小 +dialog.imageeditor.stamp_tool_smooth_resizing=平滑调整尺寸 dialog.imageeditor.stamp_tool_connect_points=连接点 -dialog.imageeditor.stamp_tool_base_texture=基础纹理\: -dialog.image_maker.save=保存这个纹理 -dialog.image_maker.save.view_only=这是一个仅供查看的外部图像资源。
这些受版权保护文件的分发可能会被
许可证禁止。

因这个,强烈建议您在继续操作前检查资产的
许可证。 +dialog.imageeditor.stamp_tool_base_texture=基础纹理: +dialog.image_maker.save=保存该纹理 +dialog.image_maker.save.view_only=这是一个仅供查看的外部图像资源。
这些受版权保护文件的发布可能会被
许可证禁止。

因此强烈建议您在继续操作前检查资产的
许可证。 dialog.image_maker.save_as_new=另存为新纹理 dialog.image_maker.generate_from_template=从模板生成 dialog.image_maker.texture_type.message=这是哪种纹理? dialog.image_maker.texture_type.title=纹理类型 -dialog.image_maker.enter_name=输入纹理名称(不含空格)\: +dialog.image_maker.enter_name=输入纹理名称(不含空格): dialog.image_maker.texture_name=纹理名称 -dialog.image_maker.texture_type_name_exists=具有这个名称的这类纹理已经存在! +dialog.image_maker.texture_type_name_exists=具有该名称的这类纹理已经存在! dialog.image_maker.resource_error=资源错误 -dialog.image_maker.info_bar=[{0},大小: {1}x{2}] 鼠标位置: {3}, {4} +dialog.image_maker.info_bar=[{0},尺寸:{1}x{2}] 鼠标位置:{3}, {4} dialog.image_maker.info_bar.new_image=新建图像 -dialog.image_maker.info_bar.source_image=源图像: {0} +dialog.image_maker.info_bar.source_image=源图像:{0} dialog.image_maker.info_bar.file=文件︰ {0} dialog.image_maker.tools.general=一般 dialog.image_maker.tools.drawing=绘图 dialog.image_maker.tools.filters=过滤器 -dialog.image_maker.tools.constraints=移动和调整大小 +dialog.image_maker.tools.constraints=移动和调整尺寸 dialog.image_maker.tools.undo=撤销(Ctrl + Z) dialog.image_maker.tools.redo=还原(Ctrl + Y) -dialog.image_maker.tools.undo_description=撤销上一次的操作 +dialog.image_maker.tools.undo_description=撤销上一次操作 dialog.image_maker.tools.redo_description=还原上一次操作 dialog.image_maker.tools.types.eraser=橡皮擦 dialog.image_maker.tools.types.eraser_description=一个基础擦除工具 dialog.image_maker.tools.types.colorize=着色 dialog.image_maker.tools.types.colorize_description=一个给图层上色的工具 dialog.image_maker.tools.types.colorpicker=拾色器 -dialog.image_maker.tools.types.colorpicker_description=一个将前景色设置为指定色的工具(点击 Shift 以设置背景色) +dialog.image_maker.tools.types.colorpicker_description=一个将前景色设置为指定色的工具(单击 Shift 以设置背景色) dialog.image_maker.tools.types.desaturate=降低饱和度 dialog.image_maker.tools.types.desaturate_description=一个用于淡化图层的工具 dialog.image_maker.tools.types.floodfill=填充 @@ -323,116 +325,133 @@ dialog.image_maker.tools.types.noise_description=一个将噪点添加到图层 dialog.image_maker.tools.types.move=移动工具 dialog.image_maker.tools.types.move_layer=移动图层 dialog.image_maker.tools.types.move_description=一个用于移动活动图层的工具 +dialog.image_maker.tools.types.select=选区工具 +dialog.image_maker.tools.types.select_description=一个选择区域的工具 dialog.image_maker.tools.types.pencil=铅笔 dialog.image_maker.tools.types.pencil_description=一个基础绘图工具 -dialog.image_maker.tools.types.resizecanvas=调整画布大小 -dialog.image_maker.tools.types.resizecanvas_description=一个调整主要画布大小的工具 -dialog.image_maker.tools.types.resize=调整大小 -dialog.image_maker.tools.types.resize_layer=调整图层大小 -dialog.image_maker.tools.types.resize_description=一个用于调整图层大小的工具 +dialog.image_maker.tools.types.resizecanvas=调整画布尺寸 +dialog.image_maker.tools.types.resizecanvas_description=一个调整主要画布尺寸的工具 +dialog.image_maker.tools.types.resize=调整尺寸 +dialog.image_maker.tools.types.resize_layer=调整图层尺寸 +dialog.image_maker.tools.types.resize_description=一个用于调整图层尺寸的工具 dialog.image_maker.tools.types.shapetool=形状 dialog.image_maker.tools.types.shapetool_description=形状创建工具 dialog.image_maker.tools.types.linetool=直线 dialog.image_maker.tools.types.linetool_description=直线绘制工具 dialog.image_maker.tools.types.stamp=印章 dialog.image_maker.tools.types.stamp_description=一个用于从模板创建纹理的工具 -dialog.image_maker.tools.types.threshold=临界点\: -dialog.image_maker.tools.types.shape=形状\: +dialog.image_maker.tools.types.threshold=临界点: +dialog.image_maker.tools.types.shape=形状: dialog.image_maker.tools.types.shape.square=正方形 dialog.image_maker.tools.types.shape.frame=边框 dialog.image_maker.tools.types.shape.circle=圆形 dialog.image_maker.tools.types.shape.ring=环形 dialog.image_maker.tools.types.smooth_edge=平滑边缘 dialog.image_maker.tools.types.pick_opacity=选择不透明度 -dialog.image_maker.tools.types.saturation=饱和度\: -dialog.image_maker.tools.types.drawing_size=大小\: +dialog.image_maker.tools.types.saturation=饱和度: +dialog.image_maker.tools.types.drawing_size=尺寸: dialog.image_maker.tools.types.drawing_connect_points=衔接点 dialog.image_maker.tools.component.colorselector_foreground=前景色 dialog.image_maker.tools.component.colorselector_background=背景色 dialog.image_maker.tools.component.colorselector_reset=重置前景色和背景色 -dialog.image_maker.tools.component.colorselector_swap=前景/背景色对换 -dialog.image_maker.tools.component.colorselector_select_foreground=选择前景色\: -dialog.image_maker.tools.component.colorselector_select_background=选择背景色\: +dialog.image_maker.tools.component.colorselector_swap=前景与背景色对换 +dialog.image_maker.tools.component.colorselector_select_foreground=选择前景色: +dialog.image_maker.tools.component.colorselector_select_background=选择背景色: dialog.item_selector.title=方块/物品选择器 -dialog.item_selector.use_selected=使用所选 +dialog.item_selector.use_selected=使用所选项 dialog.item_selector.use_tag=使用标签 dialog.item_selector.use_tag.entities=使用实体标签 -dialog.item_selector.enter_tag_name.blocks=在下面输入方块标签名称(请检查模板列表)\:
-dialog.item_selector.enter_tag_name.items=在下面输入物品标签名称(请检查模板列表)\:
-dialog.item_selector.enter_tag_name.biomes=在下面输入生物群系标签名称(请检查模板列表)\:
-dialog.item_selector.enter_tag_name.entities=在下面输入实体标签名称(请检查模板列表)\:
+dialog.item_selector.enter_tag_name.blocks=在下面输入方块标签名称(请检查模板列表):
+dialog.item_selector.enter_tag_name.items=在下面输入物品标签名称(请检查模板列表):
+dialog.item_selector.enter_tag_name.biomes=在下面输入生物群系标签名称(请检查模板列表):
+dialog.item_selector.enter_tag_name.entities=在下面输入实体标签名称(请检查模板列表):
+dialog.item_selector.enter_tag_name.damage_types=在下方输入伤害类型标签名称 (请检查模板列表):
dialog.item_selector.error_invalid_tag_name_title=无效的标签名 dialog.item_selector.all=全部 dialog.item_selector.blocks=方块 dialog.item_selector.items=物品 dialog.item_selector.potions=药水 dialog.item_selector.custom_elements=自定义元素 -dialog.item_selector.name=名称\: -dialog.item_selector.display_filter=\ 显示过滤器\: +dialog.item_selector.name=名称: +dialog.item_selector.display_filter=\ 显示过滤器: dialog.list_editor.title=字符串列表编辑器 dialog.list_editor.add=添加新条目 dialog.list_editor.clear=移除所有条目 dialog.list_editor.validator=列表条目 dialog.list_editor.errors.message=您列表中的一些字符串条目定义不正确。 dialog.list_editor.errors.title=无效的列表条目 -dialog.modelement_id.info_message=这个模组元素的代码已经锁定!
当代码被锁定时,MCreator 无法更改其源代码。 +dialog.modelement_id.info_message=该模组元素的代码已经锁定!
当代码被锁定时,MCreator无法更改其源代码。 dialog.modelement_id.info_message_title=模组元素代码已锁定 -dialog.modelement_id.registry_name=注册名\: +dialog.modelement_id.registry_name=注册名: dialog.modelement_id.registry_name_info=注册名(不是所有模组元素都使用它) dialog.modelement_id.registry_name_validator=注册名 -dialog.modelement_id.use_caution_warn=谨慎使用这个工具!

更改注册名可能破坏您现有的世界并导致
其与您的模组中的其他模组元素相冲突! +dialog.modelement_id.use_caution_warn=使用此工具请小心使用!请确保不要使用重复的名称!

更改注册名可能会破坏您现有的世界存档,并导致
与您模组的其他模组元素发生冲突! dialog.modelement_id.id_and_registry_names="{0} - 注册名" dialog.modelement_id.invalid_registry_name=您输入的注册名无效!
更改未保存。 dialog.modelement_id.invalid_registry_name_title=无效的注册名 -dialog.modelement_id.registry_name_changed=您更改了您的模组元素的注册名!

如果这个模组元素在其他模组元素类型中被引用, 尤其是进度或配方,
您可能需要重新生成代码来更新对新名称的引用。

您想现在开始重新生成代码吗? +dialog.modelement_id.registry_name_changed=您更改了您的模组元素的注册名!

如果该模组元素在其他模组元素类型中被引用, 尤其是进度或配方,
您可能需要重新生成代码来更新对新名称的引用。

您想现在开始重新生成代码吗? dialog.modelement_id.registry_name_changed_title=更改注册名 -dialog.new_modelement.registry_name=注册名\:{0} +dialog.new_modelement.registry_name=注册名:{0} dialog.new_modelement.registry_name.empty=<请输入模组元素的名称> -dialog.new_modelement.desc=输入 {0} 的名称\:
请不要使用原版已有的名称(例如“Dirt”,“ Coal”, “Diamond”, ...) 以获取更好的兼容性。
在可能的情况下使用驼峰命名法(如CustomGem)。
避免加入类型名称(如CustomGemItem, CustomTab, ...)。 -dialog.new_modelement.title_window=请输入 {0} 的名称 -dialog.new_modelement.create_new=创建新 {0} +dialog.new_modelement.desc=输入{0}的名称:
请不要使用原版已有的名称(例如:“Dirt”、“Coal”、“Diamond”、 ...) 以获取更好的兼容性。
在可能的情况下使用驼峰命名法(如CustomGem)。
避免加入类名(例如:CustomGemItem、CustomTab、...)。 +dialog.new_modelement.title_window=请输入{0}的名称 +dialog.new_modelement.create_new=创建新{0} dialog.option_pane.invalid_input=输入内容无效 -dialog.option_pane.invalid_text=您输入了无效文本。

错误信息\:
-dialog.preferences.change_language=自定义 {0}
您可以在这个管理自定义 {0}(*.{1}) -dialog.preferences.add_language=增加 {0} +dialog.option_pane.invalid_text=您输入了无效文本。

错误信息:
+dialog.preferences.change_language=自定义{0}
您可以在该管理自定义{0}(*.{1}) +dialog.preferences.add_language=增加{0} dialog.preferences.remove_selected_language=删除所选项 -dialog.preferences.manage_plugins=管理插件
这里您可以加载扩展功能的插件或添加新的生成器类型。
建议在添加新插件后重启 MCreator ! +dialog.preferences.manage_plugins=管理插件
这里您可以加载扩展功能的插件或添加新的生成器类型。
建议在添加新插件后重启MCreator! dialog.preferences.load_plugins=加载插件... dialog.preferences.explore_plugins=浏览插件 -dialog.preferences.open_folder=打开 {0} 文件夹 +dialog.preferences.open_folder=打开{0}文件夹 dialog.preferences.plugins=插件 -dialog.preferences.title_mcreator=MCreator 偏好设置 +dialog.preferences.title_mcreator=MCreator偏好设置 dialog.preferences.save=保存 dialog.preferences.restore_defaults=恢复默认值 dialog.preferences.restore_defaults_confirmation=您确定要恢复偏好设置到默认值吗?
这将不能撤消。 -dialog.preferences.page_ui_backgrounds=用户界面背景 +dialog.preferences.page_ui_backgrounds=UI背景 dialog.preferences.page_plugins=管理插件 -dialog.preferences.page_themes=UI 主题 +dialog.preferences.page_themes=UI主题 dialog.preferences.page_procedures_templates=流程模板 -dialog.preferences.page_aitasks_templates=AI 生成器模板 +dialog.preferences.page_aitasks_templates=AI生成器模板 dialog.preferences.page_cmdargs_templates=命令模板 dialog.preferences.page_features_templates=地物模板 dialog.preferences.page_texture_templates=纹理模板 dialog.preferences.page_armor_templates=盔甲模板 -dialog.preferences.java_plugins=启用 Java 插件
勾选这个项以启用 Java 插件。Java 插件可以完全访问您的工作区和计算机,请谨慎使用。
使用风险自负。重新启动程序以应用更改。 -dialog.preferences.plugins_list=已加载的插件\: -dialog.preferences.themes=UI 主题
在这个页上您可以看到已加载的插件提供的可用的主题。
要选择使用的主题,请在下拉列表中选中主题的 ID。重启 MCreator 以应用变化。 -dialog.preferences.themes.list=
可用的主题\: +dialog.preferences.java_plugins=启用Java插件
勾选该项启用Java插件。Java插件可以完全访问您的工作区和计算机,请谨慎使用。
使用风险自负。重新启动程序以应用更改。 +dialog.preferences.plugins_list=已加载的插件: +dialog.preferences.themes=UI主题
在该页上您可以看到已加载的插件提供的可用的主题。
要选择使用的主题,请在下拉列表中选中主题的ID。重启MCreator以应用更改。 +dialog.preferences.themes.list=
可用的主题: dialog.preferences.description={0}
{1} -dialog.preferences.entry_description={0}\:
{1} -dialog.preferences.unknown_property_type={0}\: 未知的属性类型 +dialog.preferences.entry_description={0}:
{1} +dialog.preferences.unknown_property_type={0}:未知的属性类型 +dialog.search_usages.list=使用所选的{0}的模组元素列表: +dialog.search_usages.list.empty=没有找到使用所选{0}的任何模组元素。 +dialog.search_usages.open_selected=编辑选中的元素 +dialog.search_usages.title=引用的元素 +dialog.search_usages.deletion.confirm_msg=您确定要删除所选的{0}吗?

选定的{0}仍被下面列出的模组元素使用。
如果您继续删除,工作区可能会损坏或无法构建! +dialog.search_usages.deletion_safe.confirm_msg=您确定要删除选定的{0}吗?

没有模组元素使用所选列表中的任何{0}。然而,它们仍可用于自定义代码。
如果您继续,那么这些引用将会无效,进而可能导致资源损坏或游戏崩溃。 +dialog.search_usages.deletion.confirm=仍要删除 +dialog.search_usages.type.mod_element=模组元素 +dialog.search_usages.type.resource.texture=纹理 +dialog.search_usages.type.resource.model=模型 +dialog.search_usages.type.resource.sound=声音 +dialog.search_usages.type.resource.structure=结构 +dialog.search_usages.type.global_variable=全局变量 +dialog.search_usages.type.localization_key=本地化键 dialog.sounds.name=声音名 -dialog.sounds.registry_name=声音注册名\:
如果您重命名正在使用的声音,现有的引用将会断开 -dialog.sounds.files=声音文件\: -dialog.sounds.category=声音类型\: -dialog.sounds.subtitle=声音字幕\: +dialog.sounds.registry_name=声音注册名:
如果您重命名正在使用的声音,现有的引用将会断开 +dialog.sounds.files=声音文件: +dialog.sounds.category=声音类型: +dialog.sounds.subtitle=声音字幕: dialog.sounds.edit=编辑声音 dialog.sounds.error_name_not_valid=您输入的声音名称无效!
更改将不会被保存。 dialog.sounds.error_name_not_valid_title=无效的声音名 dialog.sounds.error_select_valid_file=至少选择一个声音文件!
更改将不会被保存。 dialog.sounds.error_select_valid_file_title=没有声音文件 dialog.state_editor.header=属性值 -dialog.state_editor.use_entry=选中这个框以使用属性 +dialog.state_editor.use_entry=选中该框以使用属性 dialog.state_editor.title=状态编辑器 dialog.textures_import.texture_type=纹理类型 dialog.textures_import.block=方块 @@ -443,127 +462,129 @@ dialog.textures_import.particle=粒子 dialog.textures_import.screen=屏幕 dialog.textures_import.armor=盔甲 dialog.textures_import.other=其它 -dialog.textures_import.armor_needs_two_files=盔甲纹理需要两个文件\: -dialog.textures_import.armor_layers=*layer_1*.png 和 *layer_2*.png -dialog.textures_import.armor_part_one=盔甲纹理第一部分(*layer_1*.png)\: -dialog.textures_import.armor_part_two=盔甲纹理第二部分(*layer_2*.png)\: +dialog.textures_import.armor_needs_two_files=盔甲纹理需要两个文件: +dialog.textures_import.armor_layers=*layer_1*.png和*layer_2*.png +dialog.textures_import.armor_part_one=盔甲纹理第一部分(*layer_1*.png): +dialog.textures_import.armor_part_two=盔甲纹理第二部分(*layer_2*.png): dialog.textures_import.import_armor_texture=导入盔甲纹理 dialog.textures_import.error_both_texture_files_not_selected=您还没有选择两个纹理文件! -dialog.textures_import.error_texture_already_exists=纹理 {0} 已经存在!
您可以输入一个新名称或取消导入 +dialog.textures_import.error_texture_already_exists=名为{0}的纹理已经存在!
您可以输入一个新名称或取消导入 dialog.textures_import.error_texture_import_title=导入错误 dialog.textures_mapping.title_for_model=模型贴图 dialog.textures_mapping.add_new=添加新贴图 -dialog.textures_mapping.enter_name_message=输入您的贴图名称。
这个名称用于在
为您的模型选择贴图时识别您的纹理组合。 +dialog.textures_mapping.enter_name_message=输入您的贴图名称。
该名称用于在
为您的模型选择贴图时识别您的纹理组合。 dialog.textures_mapping.enter_name_title=新贴图 dialog.textures_mapping.jump_to=跳转到... dialog.textures_mapping.save=保存贴图 -dialog.textures_mapping.model_texture_part=模型纹理部分\:
{0} -dialog.textures_mapping.confirm_deletion_message=您确定要删除这个贴图吗?
如果贴图仍在使用,会出现损坏的纹理! +dialog.textures_mapping.model_texture_part=模型纹理部分:
{0} +dialog.textures_mapping.confirm_deletion_message=您确定要删除该贴图吗?
如果贴图仍在使用,会出现损坏的纹理! dialog.textures_selector.title_window=纹理选择器 dialog.textures_selector.select=选择 -dialog.textures_selector.select_texture=选择纹理\: -dialog.textures_selector.title={0} 纹理选择 +dialog.textures_selector.select_texture=选择纹理: +dialog.textures_selector.title={0}纹理选择 dialog.textures_selector.no_texture=





要选择纹理, 您需要先制作一个。

要制作纹理,请单击工具栏中的“资源”,然后单击"创建物品/方块纹理"。 -dialog.textures_selector.search=搜索\: +dialog.textures_selector.search=搜索: dialog.textures_selector.create_from_scratch=创建纹理
从零开始 -dialog.textures_selector.import=导入纹理
用于 {0} +dialog.textures_selector.import=导入纹理
用于{0} dialog.tools.armor_pack_title=盔甲包生成器 -dialog.tools.armor_pack_info=
使用这个工具,您可以仅用几次点击来制作您的盔甲。
这个工具将会生成\: 盔甲、盔甲合成表 -dialog.tools.armor_pack_base_item=盔甲包基本物品\: -dialog.tools.armor_pack_name=盔甲名称\: +dialog.tools.armor_pack_info=
使用该工具,您仅需点几下即可制作您的盔甲。
该工具将会生成:盔甲、盔甲合成配方 +dialog.tools.armor_pack_base_item=盔甲包基本物品: +dialog.tools.armor_pack_name=盔甲名称: dialog.tools.armor_pack_name_validator=盔甲包名称 -dialog.tools.armor_pack_color_accent=盔甲颜色\: -dialog.tools.armor_pack_power_factor=盔甲能力系数\:
相对铁盔甲而言 +dialog.tools.armor_pack_color_accent=盔甲颜色: +dialog.tools.armor_pack_power_factor=盔甲能力系数:
以铁盔甲为准 dialog.tools.armor_pack_create=创建盔甲包 dialog.tools.material_pack_title=材料包生成器 -dialog.tools.material_pack_info=
使用这个工具,您可以仅用几次点击来制作您的材料包。
这个工具将会制作\: 矿石、矿物块、矿石物品、基本矿石合成表、镐、斧、剑、
锹、锄头、工具合成表、盔甲、盔甲合成配方表 -dialog.tools.material_pack_name=材料包名称\: +dialog.tools.material_pack_info=
使用该工具,您仅需点几下即可制作您的材料包。
该工具将会制作:矿物、矿石方块、矿石掉落物、基本矿石合成配方、镐、斧、剑、
锹、锄头、工具合成配方、盔甲、盔甲合成配方 +dialog.tools.material_pack_name=材料包名称: dialog.tools.material_pack_name_validator=材料包名称 -dialog.tools.material_pack_type=材料包类型\: -dialog.tools.material_pack_color_accent=材料包颜色\: -dialog.tools.material_pack_power_factor=材料包能力系数\:
相对铁材料包而言 +dialog.tools.material_pack_type=材料包类型: +dialog.tools.material_pack_color_accent=材料包颜色: +dialog.tools.material_pack_power_factor=材料包能力系数:
以铁材料包为准 dialog.tools.material_pack_create=创建材料包 dialog.tools.ore_pack_title=矿石包生成器 -dialog.tools.ore_pack_info=
使用这个工具,您可以仅用几次点击来制作您的矿石包。
这个工具将会生成\: 矿石,矿石方块,矿石物品,基本矿石合成表 -dialog.tools.ore_pack_name=矿石包名称\: +dialog.tools.ore_pack_info=
使用该工具,您仅需点几下即可制作您的矿石包。
该工具将会生成:矿物,矿石方块,矿石掉落物,基本矿石合成配方 +dialog.tools.ore_pack_name=矿石包名称: dialog.tools.ore_pack_name_validator=矿石包名称 -dialog.tools.ore_pack_type=矿石包类型\: -dialog.tools.ore_pack_color_accent=矿石包颜色\: -dialog.tools.ore_pack_power_factor=矿石包能力系数\:
相对铁矿石包而言 +dialog.tools.ore_pack_type=矿石包类型: +dialog.tools.ore_pack_color_accent=矿石包颜色: +dialog.tools.ore_pack_power_factor=矿石包能力系数:
以铁矿石包为准 dialog.tools.ore_pack_create=创建矿石包 dialog.tools.tool_pack_title=工具包生成器 -dialog.tools.tool_pack_info=
使用这个工具,您可以仅用几次点击来制作您的工具包。
这个工具将会生成\: 镐子、斧头、剑、锹、锄以及相应的工具配方。 -dialog.tools.tool_pack_base_item=工具包基本物品\: -dialog.tools.tool_pack_name=工具包名称\: +dialog.tools.tool_pack_info=
使用该工具,您仅需点几下即可制作您的工具包。
该工具将会生成:镐、斧、剑、锹、锄以及相应的工具配方。 +dialog.tools.tool_pack_base_item=工具包基本物品: +dialog.tools.tool_pack_name=工具包名称: dialog.tools.tool_pack_name_validator=工具包名称 -dialog.tools.tool_pack_color_accent=工具包颜色\: -dialog.tools.tool_pack_power_factor=工具包能力系数\:
相对铁工具包而言 +dialog.tools.tool_pack_color_accent=工具包颜色: +dialog.tools.tool_pack_power_factor=工具包能力系数:
以铁工具包为准 dialog.tools.tool_pack_create=创建工具包 dialog.tools.wood_pack_title=木材包生成器 -dialog.tools.wood_pack_info=
使用这个工具,您只需几次点击就可以为您的木材包奠定基础。
这个工具将会制作\: 树叶、 原木、 木头、 木板、 楼梯、 台阶、 栅栏、 栅栏门、
压力板、按钮、合成配方和标签 -dialog.tools.wood_pack_name=木材包名称\: +dialog.tools.wood_pack_info=
使用该工具,您仅需点几下即可制作您的木材包。
该工具将会制作:树叶、原木、木头、木板、楼梯、台阶、栅栏、栅栏门、
压力板、按钮、合成配方和标签 +dialog.tools.wood_pack_name=木材包名称: dialog.tools.wood_pack_name_validator=木材包名称 -dialog.tools.wood_pack_color_accent=木材包颜色\: -dialog.tools.wood_pack_power_factor=木材包能力系数\:
相对橡木包 +dialog.tools.wood_pack_color_accent=木材包颜色: +dialog.tools.wood_pack_power_factor=木材包能力系数:
以橡木包为准 dialog.tools.wood_pack_create=创建木材包 -dialog.unsaved_changes.message=这个模组元素可能有未保存的更改。
您想要放弃这些更改吗? +dialog.unsaved_changes.message=该模组元素可能有未保存的更改。
您想要放弃这些更改吗? dialog.unsaved_changes.title=未保存的更改 -dialog.update_notify.message=您正在使用过时版本的 MCreator。
考虑更新您的 MCreator 以获取最新功能和错误修复!

您的版本\: {0}
最新版本\: {1}

最新版本的更新日志\:
-dialog.update_notify.update_title=MCreator 更新 -dialog.update_notify.more_recent_build=有一个最新的 {0} 版本。
请考虑 重新下载当前版本 以获取最新功能和错误修复!

您的版本号\: {1}
最新版本号\: {2}

更新日志 {3} 版本\:
-dialog.update_notify.error_failed_check_internet_message=检查更新失败。原因\:没有网络 -dialog.update_notify.error_failed_check_internet_title=无法连接到互联网 -dialog.update_notify.no_update_message=您已经安装了最新版 MCreator! +dialog.update_notify.message=您正在使用过时版本的MCreator。
考虑更新您的MCreator以获取最新功能和错误修复!

您的版本:{0}
最新版本:{1}

最新版本的更新日志:
+dialog.update_notify.update_title=MCreator更新 +dialog.update_notify.more_recent_build=有最新的{0}版本可用。
请考虑重新下载当前版本以获取最新功能和错误修复!

您的版本号:{1}
最新版本号:{2}

版本{3}的更新日志:
+dialog.update_notify.error_failed_check_internet_message=检查更新失败。原因:无网络连接 +dialog.update_notify.error_failed_check_internet_title=无网络连接 +dialog.update_notify.no_update_message=您已经安装了最新版MCreator! dialog.update_notify.no_pluin_update_message=目前没有可用的插件更新! dialog.update_notify.no_update_title=无更新 dialog.update_notify.open_download_page=打开下载页面 dialog.update_notify.remind_later=稍后提醒 -dialog.plugin_update_notify.message=MCreator 检测到以下插件可以更新\: +dialog.plugin_update_notify.message=MCreator检测到以下插件可以更新: dialog.plugin_update_notify.update=更新插件 dialog.plugin_update_notify.close=关闭当前窗口 dialog.plugin_update_notify.update_title=插件更新 -dialog.plugin_update_notify.version_message={0}
当前安装的版本\: {1}, 新版本\: {2} -dialog.plugin_update_notify.changes_message=最新版本中的更改\: +dialog.plugin_update_notify.version_message={0}
当前安装的版本:{1},新版本:{2} +dialog.plugin_update_notify.changes_message=最新版本中的更改: dialog.setup_workspace.title=对选定的生成器配置工作区 -dialog.reload_gradle_project.title=正在重新加载 Gradle 项目 -dialog.setup_workspace.progress.reloading_gradle_project=正在重新加载 Gradle 项目 -dialog.setup_workspace.progress.reloading_gradle_dependencies=正在重新加载 Gradle 依赖项 +dialog.reload_gradle_project.title=正在重新加载Gradle项目 +dialog.setup_workspace.progress.reloading_gradle_project=正在重新加载Gradle项目 +dialog.setup_workspace.progress.reloading_gradle_dependencies=正在重新加载Gradle依赖项 action.run_client=运行客户端 action.run_server_and_client=运行服务端和客户端 -dialog.run_server_and_client.eula_intro=为了运行 Minecraft 服务端,您需要同意 Minecraft EULA(最终用户许可协议)。
点击确定后,您将被重定向到他们的 EULA 网站。
阅读完后,返回 MCreator 选择您是否接受 EULA。 +dialog.run_server_and_client.eula_intro=要运行Minecraft服务端,您需要同意Minecraft EULA(最终用户许可协议)。
单击确定后,您将被重定向到他们的EULA网站。
阅读完后,返回MCreator选择您是否接受EULA。 dialog.run_server_and_client.agree=接受 dialog.run_server_and_client.disagree=拒绝 -dialog.run_server_and_client.eula_confirmation.message=您接受之前在 Minecraft 网站上阅读过的最终用户许可协议吗? +dialog.run_server_and_client.eula_confirmation.message=您接受之前在Minecraft网站上阅读过的最终用户许可协议吗? dialog.run_server_and_client.eula_confirmation.title=接受最终用户许可协议 -dialog.run_server_and_client.eula_rejected.message=为了运行 Minecraft 服务器,您需要同意 Minecraft EULA(最终用户许可协议)。
您可以通过重新启动 Minecraft 服务端再次进行操作。 -dialog.variables.enter_name_select_type=输入名称并选择变量类型\: -dialog.variables.variable_name=变量名称\: -dialog.variables.variable_type=变量类型\: -dialog.variables.variable_scope=变量范围\: +dialog.run_server_and_client.eula_rejected.message=要运行Minecraft服务端,您需要同意Minecraft EULA(最终用户许可协议)。
您可以通过重新启动Minecraft服务端再次进行操作。 +dialog.variables.enter_name_select_type=输入名称并选择变量类型: +dialog.variables.variable_name=变量名称: +dialog.variables.variable_type=变量类型: +dialog.variables.variable_scope=变量范围: dialog.variables.new_title=新建变量 +workspace.loading=正在加载工作区... workspace.elements.list.locked=已锁定 workspace.elements.folders.add_tooltip=在当前文件夹中添加新文件夹 workspace.elements.folders.up_tooltip=移动到父目录 workspace.elements.folders.rename_tooltip=重命名选中的文件夹 -workspace.elements.folders.add.message=输入文件夹的名称\: +workspace.elements.folders.add.message=输入文件夹的名称: workspace.elements.folders.add.title=添加文件夹 workspace.elements.folders.add.error_letters=文件夹名称只能包含英文字母、数字、._- 和空格。 -workspace.elements.folders.add.error_exists=这个名称的文件夹已经存在。 +workspace.elements.folders.add.error_exists=该名称的文件夹已经存在。 workspace.elements.folders.rename.title=重命名文件夹 -workspace.elements.folders.rename.message=输入新文件夹名称\: +workspace.elements.folders.rename.message=输入新文件夹名称: +workspace.elements.list.special.item={0}
类型:{1} workspace.elements.list.folder=文件夹 workspace.elements.list.notlocked=未锁定 workspace.elements.list.compiles=可编译 workspace.elements.list.compile_errors=编译错误 -workspace.elements.list.folder_actions=文件夹操作\: -workspace.elements.list.icon_size=显示类型\: +workspace.elements.list.folder_actions=文件夹操作: +workspace.elements.list.icon_size=显示类型: workspace.elements.list.large=大图标 workspace.elements.list.medium=中图标 workspace.elements.list.small=小图标 workspace.elements.list.tiles=平铺 workspace.elements.list.details=详情 workspace.elements.list.list=列表 -workspace.elements.list.icon_size.tooltip=您也可以在列表中使用 Ctrl + 鼠标滚轮来更改图标大小 +workspace.elements.list.icon_size.tooltip=您也可以在列表中使用 Ctrl + 鼠标滚轮来更改图标尺寸 workspace.elements.list.search_list=在列表中搜索 workspace.elements.list.search_folder=在当前文件夹中搜索 workspace.elements.list.descending=降序 @@ -571,7 +592,7 @@ workspace.elements.list.sort_name=名称 workspace.elements.list.sort_date=创建日期 workspace.elements.list.sort_type=类型 workspace.elements.list.sort_loading_order=加载顺序 -workspace.elements.list.search.tooltip=用它来搜索工作区。
对于模组元素,您可以使用块引用进行文字搜索,您可以用空格区分多个关键词。
搜索关键词可以是模组元素类型、名称、基本类型或过滤器,如f\:locked、 f\:ok 或 f\:err +workspace.elements.list.search.tooltip=用它来搜索工作区。
对于模组元素,您可以使用块引用进行文字搜索,您可以用空格区分多个关键词。
搜索关键词可以是模组元素类型、名称、基本类型或过滤器,如f\:locked、f\:ok或f\:err workspace.elements.list.sort=排序 workspace.elements.list.filter=筛选 workspace.elements.list.filter_all=显示全部 @@ -595,55 +616,59 @@ workspace.elements.list.edit.delete=删除 workspace.elements.list.edit.duplicate=复制模组元素... workspace.elements.list.edit.code=在代码编辑器中打开模组元素 workspace.elements.list.edit.lock=锁定/解锁模组元素 -workspace.elements.list.edit.id=编辑模组元素 ID... +workspace.elements.list.edit.id=编辑注册名... +workspace.elements.list.edit.usages.tags=所选元素列表包含标签类型模组元素。

具有相同注册名的标签也可能被其他模组定义,并且可能被少量引用。
因此无法搜索到这些元素的引用。 +workspace.elements.list.edit.usages.tags.title=引用的标签 workspace.elements.list.edit.add.folder=添加新文件夹 workspace.elements.list.edit.rename.folder=重命名选中的文件夹... -workspace.elements.confirm_delete_message=您确定要删除选定的({0}) 模组元素吗?

如果您在其它模组元素中使用选中的模组元素的数据(在配方中,事件引用,选项卡……)。 您
必须删除也依赖于这个元素的元素!否则您将会遇到构建错误。

子目录下的元素会被移到父目录 +workspace.elements.confirm_delete_msg_suffix=要被删除文件夹和子文件夹中的模组元素将被移动到父文件夹。 workspace.elements.delete.tooltip=删除选中的模组元素 workspace.elements.edit_code.tooltip=编辑选中的元素的代码 -workspace.elements.lock_code_tooltip=锁定/解锁元素代码
当您锁定代码,MCreator 将不会改动代码,因这个模组类型
可以从代码视图中进行编辑,并且即使在切换工作区时也可以保留代码。
仅当您打算手动编辑代码并且知道
锁定模组元素的代码的后果时才使用这个功能! -workspace.elements.edit_registry_names.tooltip=编辑模组元素 ID 和注册表名称 -workspace.elements.empty.tip=按 %1 添加模组元素 -workspace.elements.lock_modelement_message= 您正试图锁定/解锁模组元素的代码!

锁定代码后,MCreator 不会更改源代码,但这意味着在更新 MCreator 后,bug 修复和 Minecraft 版本升级
不会应用于已锁定的元素。

当前已锁定并已选择的模组元素将被解锁。
这意味着 MCreator 将覆盖这些模组元素的任何自定义代码。

在使用这个操作之前,请阅读 MCreator 网站上有关锁定代码的 Wiki 页面。 +workspace.elements.lock_code_tooltip=锁定/解锁元素代码
当您锁定代码,MCreator将不会改动代码,因此模组类型
可以从代码视图中进行编辑,并且即使在切换工作区时也可以保留代码。
仅当您打算手动编辑代码并且知道
锁定模组元素的代码的后果时才使用该功能! +workspace.elements.edit_registry_names.not_possible_message=无法使用此工具编辑此模组元素类型的注册名。 +workspace.elements.edit_registry_names.not_possible_title=无法编辑注册名 +workspace.elements.edit_registry_names.tooltip=编辑注册名 +workspace.elements.empty.tip=按下%1添加模组元素 +workspace.elements.lock_modelement_message=您正试图锁定/解锁模组元素的代码!

锁定代码后,MCreator不会更改源代码,但这意味着在更新MCreator后Bug修复和Minecraft版本升级
不会应用于已锁定的元素。

当前已锁定并已选择的模组元素将被解锁。
这意味着MCreator将覆盖这些模组元素的任何自定义代码。

在使用该操作之前,请阅读MCreator网站上有关锁定代码的Wiki页面。 workspace.elements.lock_modelement_confirm=锁定/解锁模组元素源代码? workspace.elements.lock_modelement_title=模组元素锁定/解锁 workspace.elements.lock_modelement_lock_unlock=锁定/解锁代码 workspace.elements.lock_modelement_locking_unlocking=锁定/解锁模组元素 workspace.elements.lock_modelement_regeneration=重新生成已解锁元素的代码 workspace.elements.lock_modelement_rebuilding_workspace=正在重新构建工作区 -workspace.elements.duplicate_message=输入新模组元素的名称\:
这个模组元素将与 {0} 相同, 但将使用这个名字。 -workspace.elements.duplicate_element=复制 {0} +workspace.elements.duplicate_message=输入新模组元素的名称:
该模组元素将与{0}相同, 但将使用该名字。
+workspace.elements.duplicate_element=复制{0} workspace.elements.duplicate=复制 -workspace.elements.edit_modelement_nosavedinstance=这个模组没有已保存的实例,可能已损坏或不兼容。
您可能需要删除和重做这个模组元素。 +workspace.elements.edit_modelement_nosavedinstance=该模组没有已保存的实例,可能已损坏或不兼容。
您可能需要删除和重做该模组元素。 workspace.elements.edit_modelement_nosavedinstance.title=无法加载模组元素 -blockly.compile_notes=警告和错误({0})\: -blockly.templates.aitasks=AI 模板 -blockly.templates.aitasks.export=导出 AI 设置 -blockly.templates.aitasks.export_failed.message=导出 AI 设置失败!
您的 AI 设置可能是空的或已损坏。 +blockly.compile_notes=警告和错误({0}): +blockly.templates.aitasks=AI模板 +blockly.templates.aitasks.export=导出AI设置 +blockly.templates.aitasks.export_failed.message=导出AI设置失败!
您的AI设置可能为空或已损坏。 blockly.templates.aitasks.export_failed.title=导出失败 -blockly.templates.aitasks.import=导入 AI 配置 -blockly.templates.aitasks.import_failed.message=无法导入 AI 配置!
您正在导入的 AI 任务设置文件无效。 +blockly.templates.aitasks.import=导入AI配置 +blockly.templates.aitasks.import_failed.message=导入AI设置失败!
您导入的AI任务设置文件无效。 blockly.templates.aitasks.import_failed.title=导入失败 blockly.templates.cmdargs=参数模板 blockly.templates.cmdargs.export=导出参数设置 -blockly.templates.cmdargs.export_failed.message=导出参数设置失败!
您的参数设置可能是空的或已损坏。 +blockly.templates.cmdargs.export_failed.message=导出参数设置失败!
您的参数设置可能为空或已损坏。 blockly.templates.cmdargs.export_failed.title=导出失败 blockly.templates.cmdargs.import=导入参数设置 blockly.templates.cmdargs.import_failed.message=导入参数设置失败!
您导入的参数设置文件无效。 blockly.templates.cmdargs.import_failed.title=导入失败 blockly.templates.features=地物模板 blockly.templates.features.export=导出地物 -blockly.templates.features.export_failed.message=无法导出地物!
您的地物可能为空或已损坏。 +blockly.templates.features.export_failed.message=导出地物失败!
您的地物可能为空或已损坏。 blockly.templates.features.export_failed.title=导出失败 blockly.templates.features.import=导入地物 -blockly.templates.features.import_failed.message=无法导入地物!
导入的地物文件无效。 +blockly.templates.features.import_failed.message=导入地物失败!
您导入的地物文件无效。 blockly.templates.features.import_failed.title=导入失败 blockly.templates.procedures=流程模板 blockly.templates.procedures.export=导出流程 -blockly.templates.procedures.export_failed.message=无法导出流程!
流程可能为空或已损坏。 +blockly.templates.procedures.export_failed.message=导出流程失败!
您的流程可能为空或已损坏。 blockly.templates.procedures.export_failed.title=导出失败 blockly.templates.procedures.import=导入流程 -blockly.templates.procedures.import_failed.message=无法导入流程!
导入的流程文件无效。 +blockly.templates.procedures.import_failed.message=导入流程失败!
您导入的流程文件无效。 blockly.templates.procedures.import_failed.title=导入失败 blockly.search_procedure_blocks=搜索流程块 trigger.triggers_on_client_side_only=该触发器仅能在客户端触发 @@ -675,30 +700,30 @@ trigger.entity_tamed=实体被驯服时 trigger.entity_travels_to_dimension=实体前往某个维度时 trigger.entity_uses_totem=实体使用不死图腾时 trigger.explosion_occurs=爆炸发生时 -trigger.farmland_trampled=农田遭到踩踏时 -trigger.gem_dropped=物品掉落时 -trigger.gem_expired=掉落物消失时 +trigger.farmland_trampled=耕地遭到踩踏时 +trigger.gem_dropped=物品被丢弃時 +trigger.gem_expired=丢弃物消失时 trigger.item_crafted=物品被合成时 trigger.item_destroyed=物品被破坏时 trigger.item_smelted=物品被冶炼时 -trigger.minecraft_world_loaded=Minecraft 加载世界时 -trigger.minecraft_world_unloaded=Minecraft 卸载世界时 +trigger.minecraft_world_loaded=Minecraft加载世界时 +trigger.minecraft_world_unloaded=Minecraft卸载世界时 trigger.mod_clientload=模组已在客户端侧加载时 trigger.mod_load=模组在游戏中加载时 -trigger.mod_serverload=模组已在服务端加载 +trigger.mod_serverload=模组已在服务端加载时 trigger.player_completes_advancement=玩家完成进度时 trigger.player_critical_hit=玩家造成暴击时 trigger.player_fishes_item=玩家钓到物品时 trigger.player_in_bed=玩家上床时 -trigger.player_left_click_block=玩家在方块上左键时 +trigger.player_left_click_block=玩家在方块上左击时 trigger.player_log_in=玩家加入世界时 trigger.player_log_out=玩家离开世界时 trigger.player_respawn=玩家重生时 -trigger.player_right_click_block=玩家在方块上右键时 -trigger.player_right_click_entity=玩家在实体上右键时 -trigger.player_right_click_item=玩家使用物品右键时 +trigger.player_right_click_block=玩家右击方块时 +trigger.player_right_click_entity=玩家右击实体时 +trigger.player_right_click_item=玩家右击使用物品时 trigger.player_ticks=玩家刻更新时 -trigger.entity_ticks=当加载的实体更新刻时 +trigger.entity_ticks=加载的实体更新刻时 trigger.player_use_hoe=玩家使用锄头时 trigger.player_useitem_finish=玩家完成使用物品时 trigger.player_useitem_start=玩家使用物品时 @@ -713,7 +738,7 @@ trigger.no_ext_trigger=无额外触发器 blockly.category.blockprocedures=方块流程 blockly.category.blockactions=方块管理 blockly.category.blockdata=方块数据 -blockly.category.energyandfluid=能量 & 流体 +blockly.category.energyandfluid=能量与流体 blockly.category.damagesources=伤害流程 blockly.category.directionactions=方向流程 blockly.category.entityprocedures=实体流程 @@ -726,10 +751,11 @@ blockly.category.playerprocedures=玩家流程 blockly.category.playerdata=玩家数据 blockly.category.playermanagement=玩家管理 blockly.category.projectilemanagement=弹射物流程 -blockly.category.guimanagement=储存槽与 GUI 流程 +blockly.category.guimanagement=槽位与GUI流程 blockly.category.worldprocedures=世界流程 blockly.category.worlddata=世界数据 blockly.category.worldmanagement=世界管理 +blockly.category.scoreboard=记分板 blockly.category.basictasks=基本任务 blockly.category.combattasks=战斗任务 blockly.category.movementtasks=移动任务 @@ -741,7 +767,7 @@ blockly.category.blocks=方块相关触发器 blockly.category.items=物品相关触发器 blockly.category.utility=实用工具触发器 blockly.category.world=世界相关触发器 -blockly.category.minecraft_components=Minecraft 内容 +blockly.category.minecraft_components=Minecraft内容 blockly.category.custom_variables=自定义变量 blockly.category.logic=逻辑 blockly.category.logic_and_loops=逻辑与循环 @@ -756,475 +782,494 @@ blockly.category.blockpredicates=有条件的位置 blockly.category.blocks.feature=方块 blockly.category.features=其它地物 blockly.category.intproviders=整数提供器 -blockly.category.heightplacements=高度位置 +blockly.category.heightplacements=高度 blockly.category.orefeatures=矿石地物 blockly.category.placements=常见位置 blockly.category.treefeatures=树木地物 blockly.category.arg_types=参数 blockly.category.actions=操作 -blockly.block.action_result_type=类型 %1 的操作结果 -blockly.block.advancement_isequalto=提供的进度等于 %1 -blockly.block.block_add=在 x\: %2 y\: %3 z\: %4 放置 %1 -blockly.block.block_energy_can_extract=在 x\: %1 y\: %2 z\: %3 的方块的 %4 侧能输出能量 -blockly.block.block_energy_can_receive=在 x\: %1 y\: %2 z\: %3 的方块的 %4 侧能接收能量 -blockly.block.block_energy_check_extract=向在 x\: %1 y\: %2 z\: %3 的方块的 %5 侧测试输出大小 %4 的能量,然后返回输出的量 -blockly.block.block_energy_check_receive=向在 x\: %1 y\: %2 z\: %3 的方块的 %5 侧测试发送大小 %4 的能量,然后返回发送的量 -blockly.block.block_energy_extract=如果在 x\: %1 y\: %2 z\: %3 的方块拥有能量存储,则从它的 %5 侧输出大小 %4 的能量 -blockly.block.block_energy_get=获取在 x\: %1 y\: %2 z\: %3 的方块的 %4 侧的能量 -blockly.block.block_energy_get_max=获取在 x\: %1 y\: %2 z\: %3 的方块的 %4 侧的能量容量 -blockly.block.block_energy_receive=如果在 x\: %1 y\: %2 z\: %3 的方块拥有能量存储,则向它的 %5 侧发送大小 %4 的能量 -blockly.block.block_fluid_to_bucket=转换流体 %1 为桶 %2 -blockly.block.block_fluidtank_check_drain=向在 x\: %1 y\: %2 z\: %3 的方块的 %5 侧测试输出大小 %4 的能量,然后返回输出的量 -blockly.block.block_fluidtank_check_fill=向在 x\: %1 y\: %2 z\: %3 的方块的 %5 侧测试发送大小 %4 的能量 %6,然后返回发送的量 -blockly.block.block_fluidtank_drain=从在 x\: %1 y\: %2 z\: %3 的方块的 %5 侧输出 %4 的流体(若该方块可储存流体) -blockly.block.block_fluidtank_fill=向在 x\: %1 y\: %2 z\: %3 处的方块的 %5 侧填充 %4 的流体 %6(若该方块可存储流体) -blockly.block.block_fluidtank_get=获取在 x\: %1 y\: %2 z\: %3 的方块 %4 在 %5 侧的流体槽液位 -blockly.block.block_fluidtank_get_max=获取在 x\: %1 y\: %2 z\: %3 的方块 %4 在 %5 侧的流体槽容量 -blockly.block.block_fluidtank_tanks=获取在 x\: %1 y\: %2 z\: %3 的方块 %4 侧的流体槽数 -blockly.block.block_registry_name=获取 %1 的注册名 -blockly.block.block_inv_clear_slot=如果在 x\: %1 y\: %2 z\: %3 的方块拥有物品栏,则清除其储存槽第 %4 个位置的物品 -blockly.block.block_inv_damage_item=如果在 x\: %1 y\: %2 z\: %3 的方块拥有物品栏,则减少其储存槽第 %5 个位置的物品 %4 的耐久 -blockly.block.block_inv_get_amount_inslot=如果在 x\: %1 y\: %2 z\: %3 的方块拥有物品栏,则获取其储存槽第 %4 个位置的物品个数 -blockly.block.block_inv_get_item_inslot=如果在 x\: %1 y\: %2 z\: %3 处的方块拥有物品栏,则获取其储存槽第 %4 个位置的物品 -blockly.block.block_inv_remove_items=如果在 x\: %1 y\: %2 z\: %3 的方块拥有物品栏,则清除其储存槽第 %5 个位置的物品 %4 个 -blockly.block.block_inv_set_items=如果在 x\: %1 y\: %2 z\: %3 的方块拥有物品栏,则将其储存槽第 %5 个位置的物品设为 %4 个 %6 -blockly.block.block_is_fluid=%1 是流体 -blockly.block.block_is_fluid_source=%1 是流体源 -blockly.block.block_is_tagged_in=%1 作为 %2 标记在方块标签中 -blockly.block.block_is_fertilizable=%1 可以被骨粉催熟 -blockly.block.block_is_valid_position=X\: %2 Y\: %3 Z\: %4 对于 %1 是个有效的位置 -blockly.block.block_is_waterloggable=%1 可含水 -blockly.block.block_nbt_logic_get=如果 x\: %1 y\: %2 z\: %3 的方块有方块实体数据,就获取它的 NBT 逻辑标签 %4 -blockly.block.block_nbt_logic_set=如果 x\: %1 y\: %2 z\: %3 的方块有方块实体数据 %6,就设置它的 NBT 逻辑(Logic)标签 %4 为 %5 -blockly.block.block_nbt_num_get=如果 x\: %1 y\: %2 z\: %3 的方块有方块实体数据,就获取它的 NBT 数字标签 %4 -blockly.block.block_nbt_num_set=如果 x\: %1 y\: %2 z\: %3 的方块有方块实体数据 %6,就设置他的 NBT 数字标签 %4 为 %5 -blockly.block.block_nbt_text_get=如果 x\: %1 y\: %2 z\: %3 的方块有方块实体数据,就获取它的 NBT 文本标签 %4 -blockly.block.block_nbt_text_set=如果 x\: %1 y\: %2 z\: %3 的方块有方块实体数据 %6,就设置它的 NBT 文本标签 %4 为 %5 -blockly.block.block_notify=更新/提示在 x\: %1 y\: %2 z\: %3 的方块 -blockly.block.block_play_break_effect=生成 %1 的破坏粒子于 x\: %2 y\: %3 z\: %4 -blockly.block.block_random_from_tag=如果没有找到方块,则在标签 %1 或空气中随机选择 -blockly.block.block_remove=移除在 x\: %1 y\: %2 z\: %3 的方块 -blockly.block.block_remove_drop=移除在 x\: %1 y\: %2 z\: %3 的方块并掉落在 x\: %4 y\: %5 z\: %6 -blockly.block.block_remove_with_particles=移除在 x\: %1 y\: %2 z\: %3 的方块并生成破坏粒子 -blockly.block.block_replace=将在 x\: %2 y\: %3 z\: %4 的方块替换为 %1 ,保持原状态 %5,保留 NBT/背包 %6 -blockly.block.block_schedule_tick=为在 x\: %1 y\: %2 z\: %3 的方块在 %4 刻后安排一次更新刻 -blockly.block.block_set_boolean_property=将位于 x\: %2 y\: %3 z\: %4 的方块的布尔值 %1 改为 %5 -blockly.block.block_set_direction=设置在 x\: %1 y\: %2 z\: %3 的方块的方向为 %4 -blockly.block.block_set_enum_property=设置在 x\: %2 y\: %3 z\: %4 的方块的枚举属性 %1 为 %5 -blockly.block.block_set_integer_property=设置在 x\: %2 y\: %3 z\: %4 的方块的整数属性 %1 为 %5 -blockly.block.block_simulate_right_click=在 x\: %1 y\: %2 z\: %3 的方块上模拟 %4 的右键操作 -blockly.block.blockat_enchant_power_bonus=获取在 x\: %1 y\: %2 z\: %3 处方块的附魔加成 -blockly.block.blockat_hardness=获取在 x\: %1 y\: %2 z\: %3 的方块的硬度 -blockly.block.blockat_harvestlevel=获取在 x\: %1 y\: %2 z\: %3 处的方块的挖掘等级 -blockly.block.blockat_is_solid=在 x\: %1 y\: %2 z\: %3 的方块为固体 -blockly.block.blockat_is_side_solid=在 x\: %2 y\: %3 z\: %4 的方块的 %1 侧是固体 -blockly.block.blockat_lightlevel=获取在 x\: %1 y\: %2 z\: %3 的方块的亮度等级 -blockly.block.blockat_opacity=获取在 x\: %1 y\: %2 z\: %3 处方块的不透明度 -blockly.block.blockat_plant_type=在 x\: %1 y\: %2 z\: %3 的方块是植物 %4 -blockly.block.blockitem_to_mcitem=将方块 %3 %1 转换为物品 %2 +blockly.block.action_result_type=类型%1的操作结果 +blockly.block.advancement_isequalto=提供的进度等于%1 +blockly.block.block_add=在x\:%2 y\:%3 z\:%4放置%1 +blockly.block.block_energy_can_extract=在x\:%1 y\:%2 z\:%3的方块的%4侧能输出能量 +blockly.block.block_energy_can_receive=在x\:%1 y\:%2 z\:%3的方块的%4侧能接收能量 +blockly.block.block_energy_check_extract=向在x\:%1 y\:%2 z\:%3的方块的%5侧测试输出大小%4的能量,然后返回输出的量 +blockly.block.block_energy_check_receive=向在x\:%1 y\:%2 z\:%3的方块的%5侧测试发送大小%4的能量,然后返回发送的量 +blockly.block.block_energy_extract=如果在x\:%1 y\:%2 z\:%3的方块拥有能量存储,则从它的%5侧输出大小%4的能量 +blockly.block.block_energy_get=获取在x\:%1 y\:%2 z\:%3的方块的%4侧的能量 +blockly.block.block_energy_get_max=获取在x\:%1 y\:%2 z\:%3的方块的%4侧的能量容量 +blockly.block.block_energy_receive=如果在x\:%1 y\:%2 z\:%3的方块拥有能量存储,则向它的%5侧发送大小%4的能量 +blockly.block.block_fluid_to_bucket=转换流体%1为桶%2 +blockly.block.block_fluidtank_check_drain=向在x\:%1 y\:%2 z\:%3的方块的%5侧测试输出大小%4的能量,然后返回输出的量 +blockly.block.block_fluidtank_check_fill=向在x\:%1 y\:%2 z\:%3的方块的%5侧测试发送大小%4的能量%6,然后返回发送的量 +blockly.block.block_fluidtank_drain=从在x\:%1 y\:%2 z\:%3的方块的%5侧输出%4的流体(若该方块可储存流体) +blockly.block.block_fluidtank_fill=向在x\:%1 y\:%2 z\:%3处的方块的%5侧填充%4的流体%6(若该方块可存储流体) +blockly.block.block_fluidtank_get=获取在x\:%1 y\:%2 z\:%3的方块%4在%5侧的流体槽液位 +blockly.block.block_fluidtank_get_max=获取在x\:%1 y\:%2 z\:%3的方块%4在%5侧的流体槽容量 +blockly.block.block_fluidtank_tanks=获取在x\:%1 y\:%2 z\:%3的方块%4侧的流体槽数 +blockly.block.block_registry_name=获取%1的注册名 +blockly.block.block_inv_clear_slot=如果在x\:%1 y\:%2 z\:%3的方块拥有物品栏,则清除其槽位第%4个位置的物品 +blockly.block.block_inv_damage_item=如果在x\:%1 y\:%2 z\:%3的方块拥有物品栏,则使其槽位第%5个位置的物品减少%4点耐久 +blockly.block.block_inv_get_amount_inslot=如果在x\:%1 y\:%2 z\:%3的方块拥有物品栏,则获取其槽位第%4个位置的物品个数 +blockly.block.block_inv_get_item_inslot=如果在x\:%1 y\:%2 z\:%3处的方块拥有物品栏,则获取其槽位第%4个位置的物品 +blockly.block.block_inv_remove_items=如果在x\:%1 y\:%2 z\:%3的方块拥有物品栏,则清除其槽位第%5个位置的物品%4个 +blockly.block.block_inv_set_items=如果在x\:%1 y\:%2 z\:%3的方块拥有物品栏,将其槽位第%5个位置的物品设置为%4个%6 +blockly.block.block_is_fluid=%1是流体 +blockly.block.block_is_fluid_source=%1是流体源 +blockly.block.block_is_tagged_in=%1作为%2标记在方块标签中 +blockly.block.block_is_fertilizable=%1可以被骨粉催熟 +blockly.block.block_is_valid_position=x\:%2 y\:%3 z\:%4对于%1是个有效的位置 +blockly.block.block_is_waterloggable=%1可含水 +blockly.block.block_nbt_logic_get=如果x\:%1 y\:%2 z\:%3的方块有方块实体数据,就获取它的NBT逻辑(Logic)标签%4 +blockly.block.block_nbt_logic_set=如果在x\:%1 y\:%2 z\:%3的方块有方块实体数据%6,则将它的NBT逻辑(Logic)标签%4设置为%5 +blockly.block.block_nbt_num_get=如果x\:%1 y\:%2 z\:%3的方块有方块实体数据,就获取它的NBT数字(Number)标签%4 +blockly.block.block_nbt_num_set=如果在x\:%1 y\:%2 z\:%3的方块有方块实体数据%6,则将它的NBT数字(Number)标签%4设置为%5 +blockly.block.block_nbt_text_get=如果x\:%1 y\:%2 z\:%3的方块有方块实体数据,就获取它的NBT文本(Text)标签%4 +blockly.block.block_nbt_text_set=如果在x\:%1 y\:%2 z\:%3的方块有方块实体数据%6,则将它的NBT文本(Text)标签%4设置为%5 +blockly.block.block_notify=更新/提示在x\:%1 y\:%2 z\:%3的方块 +blockly.block.block_play_break_effect=在x\:%2 y\:%3 z\:%4生成%1的破坏粒子 +blockly.block.block_random_from_tag=如果没有找到方块,则在标签%1或空气中随机选择 +blockly.block.block_remove=移除在x\:%1 y\:%2 z\:%3的方块 +blockly.block.block_remove_drop=移除在x\:%1 y\:%2 z\:%3的方块并掉落在x\:%4 y\:%5 z\:%6 +blockly.block.block_remove_with_particles=移除在x\:%1 y\:%2 z\:%3的方块并生成破坏粒子 +blockly.block.block_replace=将在x\:%2 y\:%3 z\:%4 的方块替换为%1,保持原状态%5,保留 NBT/背包%6 +blockly.block.block_schedule_tick=为在x\:%1 y\:%2 z\:%3的方块在%4刻后安排一次更新刻 +blockly.block.block_set_boolean_property=将在x\:%2 y\:%3 z\:%4的方块的布尔值%1设置为%5 +blockly.block.block_set_direction=将在x\:%1 y\:%2 z\:%3的方块的朝向设置为%4 +blockly.block.block_set_enum_property=将在x\:%2 y\:%3 z\:%4的方块的枚举属性%1设置为%5 +blockly.block.block_set_integer_property=将在x\:%2 y\:%3 z\:%4的方块的整数属性%1设置为%5 +blockly.block.block_simulate_right_click=在x\:%1 y\:%2 z\:%3的方块上模拟%4的右击操作 +blockly.block.blockat_enchant_power_bonus=获取在x\:%1 y\:%2 z\:%3处方块的附魔加成 +blockly.block.blockat_hardness=获取在x\:%1 y\:%2 z\:%3的方块的硬度 +blockly.block.blockat_harvestlevel=获取在x\:%1 y\:%2 z\:%3处的方块的挖掘等级 +blockly.block.blockat_is_solid=在x\:%1 y\:%2 z\:%3的方块为固体 +blockly.block.blockat_is_side_solid=在x\:%2 y\:%3 z\:%4的方块的%1侧是固体 +blockly.block.blockat_lightlevel=获取在x\:%1 y\:%2 z\:%3的方块的亮度等级 +blockly.block.blockat_opacity=获取在x\:%1 y\:%2 z\:%3处方块的不透明度 +blockly.block.blockat_plant_type=在x\:%1 y\:%2 z\:%3的方块是植物%4 +blockly.block.blockitem_to_mcitem=将方块%3%1转换为物品%2 blockly.block.blockstate_from_deps=提供的方块状态 -blockly.block.blockstate_get_boolean_property=获取 %3 %2 的布尔属性 %1 -blockly.block.blockstate_get_direction=获取 %2 %1 的方向 -blockly.block.blockstate_get_enum_property=获取 %3 %2 的枚举属性 %1 -blockly.block.blockstate_get_integer_property=获取 %3 %2 的整数属性 %1 -blockly.block.blockstate_with_boolean_property=布尔属性 %2 被设为 %3的 %1 %4 -blockly.block.blockstate_with_direction=方向被设为 %2 的 %1 %3 -blockly.block.blockstate_with_enum_property=枚举属性 %2 被设为 %3 的 %1 %4 -blockly.block.blockstate_with_integer_property=整数属性 %2 被设为 %3 的 %1 %4 -blockly.block.compare_blockstates=%3 %1 和 %4 %2 是相同的方块状态 -blockly.block.compare_dimensionids=%1 \= %2 -blockly.block.compare_directions=%1 \= %2 -blockly.block.compare_entities=%1 和 %2 是同一个实体 -blockly.block.compare_mcblocks=%3 %1 和 %4 %2 是相同的方块 -blockly.block.compare_mcitems=%3 %1 \= %4 %2 -blockly.block.compare_mcitems_oredictionary=%1 作为 %2 标记在物品标签中 -blockly.block.console_log=以 %2 级别记录 %1 日志 -blockly.block.copy_mcitem=创建一个 %2 %1 的副本 -blockly.block.deal_damage=对 %2 造成类型为 %3 的 %1 点伤害 -blockly.block.damagesource_isequalto=%1 类型为 %2 -blockly.block.direction_compare_axes=方向 %1 和 %2 在同一坐标轴上 -blockly.block.direction_foreach=对于每个方向,作为 %1 执行 %2 -blockly.block.direction_foreach_horizontal=对于每个水平方向,作为 %1 执行 %2 +blockly.block.blockstate_get_boolean_property=获取%3%2 的布尔属性%1 +blockly.block.blockstate_get_direction=获取%2%1的方向 +blockly.block.blockstate_get_enum_property=获取%3%2 的枚举属性%1 +blockly.block.blockstate_get_integer_property=获取%3%2 的整数属性%1 +blockly.block.blockstate_with_boolean_property=布尔属性%2被设置为%3的%1%4 +blockly.block.blockstate_with_direction=方向被设置为%2的%1%3 +blockly.block.blockstate_with_enum_property=枚举属性%2被设置为%3的%1%4 +blockly.block.blockstate_with_integer_property=整数属性%2被设置为%3的%1%4 +blockly.block.compare_blockstates=%3%1和%4%2是相同的方块状态 +blockly.block.compare_dimensionids=%1\=%2 +blockly.block.compare_directions=%1\=%2 +blockly.block.compare_entities=%1和%2是同一个实体 +blockly.block.compare_mcblocks=%3%1和%4%2是相同的方块 +blockly.block.compare_mcitems=%3%1\=%4%2 +blockly.block.compare_mcitems_oredictionary=%1作为%2标记在物品标签中 +blockly.block.console_log=以%2级别记录%1日志 +blockly.block.copy_mcitem=创建一个%2%1的副本 +blockly.block.deal_damage=对%2造成类型为%3的%1点伤害 +blockly.block.damagesource_isequalto=%1类型为%2 +blockly.block.direction_compare_axes=方向%1和%2在同一坐标轴上 +blockly.block.direction_foreach=对于每个方向,作为%1执行%2 +blockly.block.direction_foreach_horizontal=对于每个水平方向,作为%1执行%2 blockly.block.direction_iterator=方向迭代器 -blockly.block.direction_offset_x=方向 %1 的 X 偏移 -blockly.block.direction_offset_y=方向 %1 的 Y 偏移 -blockly.block.direction_offset_z=方向 %1 的 Z 偏移 -blockly.block.direction_opposite=%1 的反方向 +blockly.block.direction_offset_x=方向%1的X偏移量 +blockly.block.direction_offset_y=方向%1的Y偏移量 +blockly.block.direction_offset_z=方向%1的Z偏移量 +blockly.block.direction_opposite=%1的反方向 blockly.block.direction_random=随机方向 -blockly.block.direction_rotated_clockwise=%1 绕 Y 轴顺时针旋转90度 -blockly.block.direction_rotated_counterclockwise=%1 绕 Y 轴逆时针旋转90度 +blockly.block.direction_rotated_clockwise=%1绕Y轴顺时针旋转90度 +blockly.block.direction_rotated_counterclockwise=%1绕Y轴逆时针旋转90度 blockly.block.empty_itemstack=空物品栈 -blockly.block.entity_add_achievement=将进度 %2 添加到 %1 -blockly.block.entity_add_exhaustion=消耗 %1 的饱食度 %2 点 -blockly.block.entity_add_item=添加 %2 个 %1 到 %3 的物品栏 -blockly.block.entity_add_potion=将等级 %1,持续 %2 刻的 %4 药水添加到 %3 %5 -blockly.block.entity_add_potion_advanced=将等级 %1,持续 %2 刻的 %6 药水,由信标施加 %3,启用粒子效果 %4,添加到 %5 %7 -blockly.block.entity_add_recipe=将配方 %2 添加给 %1 -blockly.block.entity_add_xp=添加 %1 经验到 %2 -blockly.block.entity_add_xp_level=添加 %1 经验等级到 %2 -blockly.block.entity_allow_building=如果 %1,允许 %2 建造,否则不允许 -blockly.block.entity_allow_flying=如果 %1,允许 %2 飞行,否则不允许 -blockly.block.entity_armor_value=%1 的盔甲值 -blockly.block.entity_canusecommand=%2 有命令权限级别 %1 -blockly.block.entity_check_creature_type=%1 为生物类型 %2 -blockly.block.entity_checkgamemode=%1 游戏模式为 %2 -blockly.block.entity_clear_inventory=清空 %1 的物品栏 -blockly.block.entity_clearpotions=清除 %1 的所有药水效果 -blockly.block.entity_close_gui=关闭任何给 %1 打开的 GUI -blockly.block.entity_create=%1 类型为 %2 的静态实体实例(不生成) -blockly.block.entity_deal_custom_damage=对 %2 造成 %1 点伤害,本地化键名为 death.attack.%3(.player/.item) -blockly.block.entity_despawn=清除 %1 %2 -blockly.block.entity_dimension_id=%1 所在的维度 -blockly.block.entity_direction=以 %1 的南方向(yaw)为准的角度大小 -blockly.block.entity_direction_value=%1 的方向 -blockly.block.entity_disable_damage=如果 %1 ,则禁用 %2 的伤害能力,否则启用 -blockly.block.entity_execute_command=使 %2 %3 执行命令 /%1 -blockly.block.entity_extinguish=熄灭 %1 身上的火焰 -blockly.block.entity_foodlevel=获取 %1 的饱食度 -blockly.block.entity_get_absorption=获取 %1 的吸收生命值等级 -blockly.block.entity_get_armor_slot_item=获取 %2 的盔甲栏第 %1 个位置的物品 -blockly.block.entity_get_controlling_passenger=%2 获取正在骑乘 %1 的实体 -blockly.block.entity_get_first_passenger=%2 获取 %1 的第一位乘客 -blockly.block.entity_get_fire_ticks=获取 %1 着火的剩余刻数 -blockly.block.entity_get_fly_speed=获取 %1 的飞行速度 -blockly.block.entity_get_oxygen=获得 %1 的氧气值 -blockly.block.entity_get_percent_frozen=获取 %1 被冻结的百分比 -blockly.block.entity_get_root_vehicle=获取 %1 骑乘的最低实体,若未骑乘则返回自身 -blockly.block.entity_get_saturation=获取 %1 的饱和值 -blockly.block.entity_get_scoreboard_score=获取 %2 在记分板项 %1 的分数 -blockly.block.entity_get_shootpower=若 %1 是弹射物,获取其射击力量 -blockly.block.entity_get_slot=如果 %2 拥有物品栏,则获取其储存槽第 %1 个位置的物品(的副本) -blockly.block.entity_get_spawn_x=获取当前世界的 %1 出生点的 X 轴坐标 %2 -blockly.block.entity_get_spawn_y=获取当前世界的 %1 出生点的 Y 轴坐标 %2 -blockly.block.entity_get_spawn_z=获取当前世界的 %1 出生点的Z轴坐标 %2 -blockly.block.entity_get_stepheight=获取 %1 的可行走高度 -blockly.block.entity_get_uuid=获取 %1 的 UUID -blockly.block.entity_get_walk_speed=获得 %1的移动速度 -blockly.block.entity_getowner=%2 如果 %1 被驯服,获取其主人是谁 -blockly.block.entity_getridingentity=%2 获取实体 %1 正在骑乘的实体 -blockly.block.entity_gettargetentity=%2 获取 %1 的攻击目标 -blockly.block.entity_has_achievement=%1 完成了进度 %2 %3 -blockly.block.entity_has_recipe=%1 解锁了配方 %2 -blockly.block.entity_has_screen_open=%1 当前打开的 GUI 为 %2 -blockly.block.entity_has_item_inventory=%1 在 %2 的物品栏中 -blockly.block.entity_has_nogravity=%1 不受重力影响 -blockly.block.entity_haspotioneffect=%1 拥有药水效果 %2 -blockly.block.entity_health=获取 %1 的当前生命值 -blockly.block.entity_health_max=获取 %1 的最大生命值 -blockly.block.entity_inventory_foreach=获取 %1 物品栏的每个储存槽内容副本,存为一个 %2,执行 %3 -blockly.block.entity_is_attackable=%1 可以被攻击 -blockly.block.entity_is_elytra_flying=%1 正在使用鞘翅飞行 -blockly.block.entity_is_glowing=%1 在发光 -blockly.block.entity_is_swimming=%1 在游泳 -blockly.block.entity_is_tagged_in=%1 作为 %2 标记在实体标签中 -blockly.block.entity_is_underwater=%1 在水下 -blockly.block.entity_isalive=%1 活着 -blockly.block.entity_isbeingridden=%1 正在被骑 -blockly.block.entity_isblocking=%1 被阻挡 -blockly.block.entity_isburning=%1 在燃烧 -blockly.block.entity_ischild=%1 为幼年 -blockly.block.entity_iscreative=%1 的创造模式能力已启用 -blockly.block.entity_isimmunetoexplosions=%1 免疫爆炸 -blockly.block.entity_isimmunetofire=%1 免疫火 -blockly.block.entity_isinlava=%1 在熔岩中 -blockly.block.entity_isinvisible=%1 不可见 -blockly.block.entity_isinvulnerable=%1 免疫伤害 -blockly.block.entity_isinwall=%1 在固体墙内 -blockly.block.entity_isinwater=%1 在水中 -blockly.block.entity_isinwater_orbubblecolumn=%1 在水或气泡柱内 -blockly.block.entity_isinwaterrain_orbubblecolumn=%1 在水中、雨中或气泡柱内 -blockly.block.entity_isleashed=%1 被栓绳拴住 +blockly.block.entity_add_achievement=将进度%2添加到%1 +blockly.block.entity_add_exhaustion=消耗%1的饱食度%2点 +blockly.block.entity_add_item=添加%2个%1到%3的物品栏 +blockly.block.entity_add_potion=将等级%1,持续%2刻的%4药水添加到%3%5 +blockly.block.entity_add_potion_advanced=将等级%1,持续%2刻的%6药水,由信标施加%3,启用粒子效果%4,添加到%5%7 +blockly.block.entity_add_recipe=将配方%2添加给%1 +blockly.block.entity_add_xp=添加%1经验到%2 +blockly.block.entity_add_xp_level=添加%1经验等级到%2 +blockly.block.entity_allow_building=如果%1,允许%2建造,否则不允许 +blockly.block.entity_allow_flying=如果%1,允许%2飞行,否则不允许 +blockly.block.entity_armor_value=%1的盔甲值 +blockly.block.entity_canusecommand=%2有命令权限级别%1 +blockly.block.entity_check_creature_type=%1为生物类型%2 +blockly.block.entity_check_main_hand=%1把物品拿在%2手上 +blockly.block.entity_checkgamemode=%1游戏模式为%2 +blockly.block.entity_clear_inventory=清空%1的物品栏 +blockly.block.entity_clearpotions=清除%1的所有药水效果 +blockly.block.entity_close_gui=关闭任何给%1打开的GUI +blockly.block.entity_create=%1类型为%2的静态实体实例(不生成) +blockly.block.entity_data_logic_get=对于类型为%2的自定义实体%1获取其对应逻辑数据参数%3的值 +blockly.block.entity_data_logic_set=对于类型为%2的自定义实体%1将其对应逻辑数据参数%3的值设置为%4 +blockly.block.entity_data_integer_get=对于类型为%2的自定义实体%1获取其对应整数数据参数%3的值 +blockly.block.entity_data_integer_set=对于类型为%2的自定义实体%1将其对应整数数据参数%3的值设置为%4 +blockly.block.entity_data_string_get=对于类型为%2的自定义实体%1获取其对应字符串数据参数%3的值 +blockly.block.entity_data_string_set=对于类型为%2的自定义实体%1将其对应字符串数据参数%3的值设置为%4 +blockly.block.entity_deal_custom_damage=对%2造成%1点伤害,本地化键名为 death.attack.%3(.player/.item) +blockly.block.entity_despawn=清除%1%2 +blockly.block.entity_dimension_id=%1所在的维度 +blockly.block.entity_direction=以%1的南方向(yaw)为准的角度大小 +blockly.block.entity_direction_value=%1的方向 +blockly.block.entity_disable_damage=如果%1,则禁用%2的伤害能力,否则启用 +blockly.block.entity_execute_command=使%2%3执行命令 /%1 +blockly.block.entity_extinguish=熄灭%1身上的火焰 +blockly.block.entity_foodlevel=获取%1的饱食度 +blockly.block.entity_get_absorption=获取%1的伤害吸收等级 +blockly.block.entity_get_armor_slot_item=获取%2的盔甲栏第%1个位置的物品 +blockly.block.entity_get_controlling_passenger=%2获取正在骑乘%1的实体 +blockly.block.entity_get_first_passenger=%2 获取%1的第一位乘客 +blockly.block.entity_get_fire_ticks=获取%1着火的剩余刻数 +blockly.block.entity_get_oxygen=获得%1的氧气值 +blockly.block.entity_get_percent_frozen=获取%1被冻结的百分比 +blockly.block.entity_get_root_vehicle=获取%1正在乘坐的最低实体(如果未乘坐则获取自己) +blockly.block.entity_get_saturation=获取%1的饱和值 +blockly.block.entity_get_scoreboard_score=获取%2在记分板项%1的分数 +blockly.block.entity_get_shootpower=如果%1是弹射物,则获取其射击力量 +blockly.block.entity_get_slot=如果%2拥有物品栏,则获取其槽位第%1个位置的物品(的副本) +blockly.block.entity_get_spawn_x=获取当前世界的%1出生点的X轴坐标%2 +blockly.block.entity_get_spawn_y=获取当前世界的%1出生点的Y轴坐标%2 +blockly.block.entity_get_spawn_z=获取当前世界的%1出生点的Z轴坐标%2 +blockly.block.entity_get_stepheight=获取%1的最大行走高度 +blockly.block.entity_get_use_item=获取%1正在使用的物品 +blockly.block.entity_get_use_item_ticks=获取%1使用物品的刻数 +blockly.block.entity_get_uuid=获取%1的UUID +blockly.block.entity_get_walk_speed=获取%1的一般行走速度 +blockly.block.entity_get_fly_speed=获取%1的一般飞行速度 +blockly.block.entity_getowner=%2如果%1被驯服,获取其主人是谁 +blockly.block.entity_getridingentity=%2获取实体%1正在骑乘的实体 +blockly.block.entity_gettargetentity=%2获取%1的攻击目标 +blockly.block.entity_has_achievement=%1完成了进度%2%3 +blockly.block.entity_has_recipe=%1解锁了配方%2 +blockly.block.entity_has_screen_open=%1当前打开的GUI为%2 +blockly.block.entity_has_item_inventory=%1在%2的物品栏中 +blockly.block.entity_has_nogravity=%1不受重力影响 +blockly.block.entity_haspotioneffect=%1拥有药水效果%2 +blockly.block.entity_health=获取%1的当前生命值 +blockly.block.entity_health_max=获取%1的最大生命值 +blockly.block.entity_inventory_foreach=获取%1物品栏的每个槽位内容副本,存为一个%2,执行%3 +blockly.block.entity_is_attackable=%1可被攻击 +blockly.block.entity_is_elytra_flying=%1正在使用鞘翅飞行 +blockly.block.entity_is_glowing=%1在发光 +blockly.block.entity_is_swimming=%1在游泳 +blockly.block.entity_is_tagged_in=%1作为%2标记在实体标签中 +blockly.block.entity_is_underwater=%1在水下 +blockly.block.entity_isalive=%1活着 +blockly.block.entity_isbeingridden=%1正在被骑 +blockly.block.entity_isblocking=%1被阻挡 +blockly.block.entity_isburning=%1在燃烧 +blockly.block.entity_ischild=%1为幼年 +blockly.block.entity_iscreative=%1的创造模式能力已启用 +blockly.block.entity_isimmunetoexplosions=%1免疫爆炸 +blockly.block.entity_isimmunetofire=%1免疫火 +blockly.block.entity_isinlava=%1在熔岩中 +blockly.block.entity_isinvisible=%1不可见 +blockly.block.entity_isinvulnerable=%1免疫伤害 +blockly.block.entity_isinwall=%1在固体墙内 +blockly.block.entity_isinwater=%1在水中 +blockly.block.entity_isinwater_orbubblecolumn=%1在水或气泡柱内 +blockly.block.entity_isinwaterrain_orbubblecolumn=%1在水中、雨中或气泡柱内 +blockly.block.entity_isleashed=%1被栓绳拴住 blockly.block.entity_isnonboss=%1可以更改维度 -blockly.block.entity_isonground=%1 在地面上 -blockly.block.entity_isriding=%1 正在骑乘 -blockly.block.entity_issleeping=%1 在睡觉 -blockly.block.entity_issneaking=%1 在潜行 -blockly.block.entity_issprinting=%1 在疾跑 -blockly.block.entity_istamed=%1 被驯服 -blockly.block.entity_istamed_by=%1 被 %2 驯服 -blockly.block.entity_iteminhand=%1 的主手物品 -blockly.block.entity_iteminoffhand=%1 的副手物品 -blockly.block.entity_look_angle_x=%1 的视角向量的 X 值 -blockly.block.entity_look_angle_y=%1 的视角向量的 Y 值 -blockly.block.entity_look_angle_z=%1 的视角向量的 Z 值 -blockly.block.entity_look_face=%2 正在被看的方块面,距视点距离\: %1 流体模式 %3 方块模式 %4 -blockly.block.entity_looking_at_block=%2 正在看一个方块,视点距离\:%1 流体模式 %3 方块模式 %4 -blockly.block.entity_lookpos_x=面向 %2 的 X 方向,距视点距离\:%1 流体模式 %3 方块模式 %4 -blockly.block.entity_lookpos_y=面向 %2 的 Y 方向,距视点距离\:%1 流体模式 %3 方块模式 %4 -blockly.block.entity_lookpos_z=面向 %2 的 Z 方向,距视点距离\:%1 流体模式 %3 方块模式 %4 -blockly.block.entity_loot_table_foreach=对于战利品表 %1 中的每一件物品授予 %2 作为 %3 %4 %5 执行 %6 -blockly.block.entity_makeride=使 %1 骑乘 %2 -blockly.block.entity_maketamed=使 %2 驯服 %1 -blockly.block.entity_makestopriding=使 %1 停止骑乘实体 -blockly.block.entity_name=获取 %1 的(显示)名称 -blockly.block.entity_nbt_logic_get=获取 %2 的自定义逻辑 NBT 标签 %1 -blockly.block.entity_nbt_logic_set=设置 %3 的自定义逻辑 NBT 标签 %1 为 %2 -blockly.block.entity_nbt_num_get=获取 %2 的自定义数字 NBT 标签 %1 -blockly.block.entity_nbt_num_set=设置 %3 的自定义数字 NBT 标签 %1 为 %2 -blockly.block.entity_nbt_text_get=获取 %2 的自定义文本 NBT 标签 %1 -blockly.block.entity_nbt_text_set=设置 %3 的自定义文本 NBT 标签 %1 为 %2 -blockly.block.entity_open_gui=为 %4 在 x\: %1 y\: %2 z\: %3 处打开 GUI %5 -blockly.block.entity_override_fall=在下一个游戏刻,覆写 %2 的坠落距离为 %1 个方块 -blockly.block.entity_passengers_direct_foreach=对 %1 的每个直接乘客作为 %2 执行 %3 -blockly.block.entity_passengers_indirect_foreach=对每个 %1 的直接或非直接乘客作为 %2 执行 %3 -blockly.block.entity_pathfind_to=尝试让 %1 寻找路径移动到 x\: %2 y\: %3 z\: %4 并使其具有速度 %5 -blockly.block.entity_pitch=获取 %1 的头部角度(°) -blockly.block.entity_pos_x=获取 %1 的 X 轴坐标 -blockly.block.entity_pos_y=获取 %1 的 Y 轴坐标 -blockly.block.entity_pos_z=获取 %1 的 Z 轴坐标 -blockly.block.entity_potioneffectlevel=获取 %1 身上 %2 药水效果的等级 -blockly.block.entity_potioneffectremaining=获取 %1 %2 药水剩余的秒数 -blockly.block.entity_registry_name=获取 %1 的注册名 -blockly.block.entity_remove_item=从 %3 的物品栏中移除 %2 个 %1 -blockly.block.entity_remove_recipe=将配方 %2 从 %1 删除 -blockly.block.entity_remove_specific_potion_effect=从 %1 身上移除 %2 药水效果 -blockly.block.entity_remove_xp=从 %2 移除 %1 经验值 -blockly.block.entity_remove_xp_level=从 %2 移除 %1 经验等级 -blockly.block.entity_run_function=使 %2 运行函数 %1 %3 -blockly.block.entity_rotate_to_face=使 %4 朝向坐标x\: %1 y\: %2 z\: %3 -blockly.block.entity_send_chat=发送消息 %1 到 %3, 在快捷栏中显示\: %2 %4 -blockly.block.entity_set_armor_slot_item=将 %3 的盔甲栏第 %1 个位置设置为 %2 -blockly.block.entity_set_display_name=将 %2 的显示名称设置为 %1 -blockly.block.entity_set_fire=使 %2 着火 %1 秒 -blockly.block.entity_set_flying=如果 %1 则让 %2 飞行,否则不飞行 -blockly.block.entity_set_foodlevel=设置 %2 的饱食度为 %1 -blockly.block.entity_set_gamemode=将 %1 的游戏模式设置为 %2 -blockly.block.entity_set_health=将 %2 的生命值设置为 %1 -blockly.block.entity_set_invisible=将 %1 的隐身状态设置为 %2 -blockly.block.entity_set_mainhand_item=将 %3 主手中的物品设置为 %2 个 %1 -blockly.block.entity_set_movement=尝试覆写 %4 的运动矢量为 vx\: %1 vy\: %2 vz\: %3 -blockly.block.entity_set_nogravity=将 %1 的无重力标签设置为 %2 -blockly.block.entity_set_offhand_item=将 %3 副手中的物品设置为 %2 个 %1 -blockly.block.entity_set_oxygen=将 %1 的氧气值设置为 %2 -blockly.block.entity_set_rotation=使 %3 旋转,朝向\: %1 角度\: %2 -blockly.block.entity_set_saturation=将 %1 的饱和值设置为 %2 -blockly.block.entity_set_scoreboard_score=将 %3 的记分板项 %1 的分数设置为 %2 -blockly.block.entity_set_slot=如果 %2 拥有物品栏,则在其储存槽第 %1 个位置处放置 %4 个 %3 -blockly.block.entity_set_sneaking=将 %1 的潜行状态设置为 %2 -blockly.block.entity_set_stepheight=将 %1 的可行走高度设置为 %2 -blockly.block.entity_set_spawn=将 %4 的出生点设置为 x\: %1 y\: %2 z\: %3 -blockly.block.entity_set_sprinting=将 %1 的疾跑状态设置为 %2 -blockly.block.entity_set_target=将 %1 的攻击目标设置为 %2 -blockly.block.entity_setinweb=将 %1 设置为在蜘蛛网中,持续1刻 -blockly.block.entity_size_height=获取 %1 的碰撞箱高度 -blockly.block.entity_size_width=获取 %1 的碰撞箱宽度 -blockly.block.entity_stop_navigation=尝试停止导航 %1 -blockly.block.entity_submerged_height=获取 %1 的碰撞箱淹没的高度 -blockly.block.entity_swing_mainhand=摇动 %1 的主手 -blockly.block.entity_swing_offhand=摇动 %1 的副手 -blockly.block.entity_switch_dimension=将 %1 的维度切换为 %2 -blockly.block.entity_vel_x=获取 %1 的 X 速度 %2 -blockly.block.entity_vel_y=获取 %1 的 Y 速度 %2 -blockly.block.entity_vel_z=获取 %1 的 Z 速度 %2 -blockly.block.entity_xplevel=获取 %1 的经验等级 -blockly.block.entity_xp_until_next_level=获取 %1 升级所需的经验 -blockly.block.execute_command=在 x\: %2 y\: %3 z\: %4 %5 执行命令 /%1 -blockly.block.explode=在 x\: %2 y\: %3 z\: %4 生成等级为 %1, 伤害源类型为 %5 %6 的爆炸 -blockly.block.get_command_parameters=获取以字符串形式接受索引 %1 的所有命令参数 -blockly.block.get_command_parameter_blockpos_x=获取命令方块位置 X 参数 %1 -blockly.block.get_command_parameter_blockpos_y=获取命令方块位置 Y 参数 %1 -blockly.block.get_command_parameter_blockpos_z=获取命令方块位置 Z 参数 %1 -blockly.block.get_command_parameter_blockstate=获取方块命令参数 %1 -blockly.block.get_command_parameter_entity=%2 获取实体命令参数 %1 -blockly.block.get_command_parameter_entities_foreach=获取每个命令参数 %1 提供的实体,存为 %2 执行 %3 -blockly.block.get_command_parameter_itemstack=获取物品命令参数 %1 -blockly.block.get_command_parameter_logic=获取逻辑命令参数 %1 -blockly.block.get_command_parameter_message=获取消息命令参数 %1 -blockly.block.get_command_parameter_number=获取数字命令参数 %1 -blockly.block.get_command_parameter_string=获取字符串命令参数 %1 +blockly.block.entity_isonground=%1在地面上 +blockly.block.entity_isriding=%1在骑乘 +blockly.block.entity_issleeping=%1在睡觉 +blockly.block.entity_issneaking=%1在潜行 +blockly.block.entity_issprinting=%1在疾跑 +blockly.block.entity_istamed=%1被驯服 +blockly.block.entity_istamed_by=%1被%2驯服 +blockly.block.entity_iteminhand=%1的主手物品 +blockly.block.entity_iteminoffhand=%1的副手物品 +blockly.block.entity_look_angle_x=%1的视角向量的X值 +blockly.block.entity_look_angle_y=%1的视角向量的Y值 +blockly.block.entity_look_angle_z=%1的视角向量的Z值 +blockly.block.entity_look_face=%2正在被看的方块面距视点距离:%1,流体模式%3,方块模式%4 +blockly.block.entity_looking_at_block=%2 正在看一个方块,距视点距离:%1,流体模式:%3,方块模式:%4 +blockly.block.entity_lookpos_x=面向%2的X方向,距视点距离:%1,流体模式:%3,方块模式:%4 +blockly.block.entity_lookpos_y=面向%2的Y方向,距视点距离:%1,流体模式:%3,方块模式:%4 +blockly.block.entity_lookpos_z=面向%2的Z方向,距视点距离:%1,流体模式:%3,方块模式:%4 +blockly.block.entity_loot_table_foreach=对于战利品表%1中的每一件授予给%2的物品,作为%3%4%5,执行%6 +blockly.block.entity_makeride=使%1骑乘%2 +blockly.block.entity_maketamed=使%2驯服%1 +blockly.block.entity_makestopriding=使%1停止骑乘实体 +blockly.block.entity_name=获取%1的(显示)名称 +blockly.block.entity_nbt_logic_get=获取%2的自定义逻辑NBT标签%1 +blockly.block.entity_nbt_logic_set=将%3的自定义逻辑NBT标签%1设置为%2 +blockly.block.entity_nbt_num_get=获取%2的自定义数字NBT标签%1 +blockly.block.entity_nbt_num_set=将%3的自定义数字NBT标签%1设置为%2 +blockly.block.entity_nbt_text_get=获取%2的自定义文本NBT标签%1 +blockly.block.entity_nbt_text_set=将%3的自定义文本NBT标签%1设置为%2 +blockly.block.entity_open_gui=为%4在x\:%1 y\:%2 z\:%3打开GUI%5 +blockly.block.entity_override_fall=在下一个游戏刻,覆写%2的坠落距离为%1个方块 +blockly.block.entity_passengers_direct_foreach=对%1的每个直接乘客,作为%2,执行%3 +blockly.block.entity_passengers_indirect_foreach=对%1的每个直接或非直接乘客,作为%2,执行%3 +blockly.block.entity_pathfind_to=尝试让%1寻找路径移动到x\:%2 y\:%3 z\:%4使其具有速度%5 +blockly.block.entity_pitch=获取%1的头部角度(°) +blockly.block.entity_pos_x=获取%1的X轴坐标 +blockly.block.entity_pos_y=获取%1的Y轴坐标 +blockly.block.entity_pos_z=获取%1的Z轴坐标 +blockly.block.entity_potioneffectlevel=获取%1身上%2药水效果的等级 +blockly.block.entity_potioneffectremaining=获取%1%2药水剩余的秒数 +blockly.block.entity_registry_name=获取%1的注册名 +blockly.block.entity_remove_item=从%3的物品栏中移除%2个%1 +blockly.block.entity_remove_recipe=从%1删除配方%2 +blockly.block.entity_remove_specific_potion_effect=从%1身上移除%2药水效果 +blockly.block.entity_remove_xp=从%2移除%1经验值 +blockly.block.entity_remove_xp_level=从%2移除%1经验等级 +blockly.block.entity_run_function=使%2运行函数%1%3 +blockly.block.entity_rotate_to_face=使%4朝向坐标x\:%1 y\:%2 z\:%3 +blockly.block.entity_send_chat=发送消息%1到%3, 在动作栏中显示:%2%4 +blockly.block.entity_set_armor_slot_item=将%3的盔甲栏第%1个位置设置为%2 +blockly.block.entity_set_display_name=将%2的显示名称设置为%1 +blockly.block.entity_set_fire=使%2着火%1秒 +blockly.block.entity_set_flying=如果%1则让%2飞行,否则不飞行 +blockly.block.entity_set_foodlevel=将%2的饱食度设置为%1 +blockly.block.entity_set_gamemode=将%1的游戏模式设置为%2 +blockly.block.entity_set_health=将%2的生命值设置为%1 +blockly.block.entity_set_invisible=将%1的隐身状态设置为%2 +blockly.block.entity_set_mainhand_item=将%3主手中的物品设置为%2个%1 +blockly.block.entity_set_movement=尝试覆写%4的运动矢量为 vx\:%1vy\:%2 vz\:%3 +blockly.block.entity_set_nogravity=将%1的无重力标签设置为%2 +blockly.block.entity_set_offhand_item=将%3副手中的物品设置为%2个%1 +blockly.block.entity_set_oxygen=将%1的氧气值设置为%2 +blockly.block.entity_set_rotation=使%3旋转,朝向:%1,角度:%2 +blockly.block.entity_set_saturation=将%1的饱和值设置为%2 +blockly.block.entity_set_scoreboard_score=将%3的记分板项%1的分数设置为%2 +blockly.block.entity_set_slot=如果%2拥有物品栏,则在其槽位第%1个位置处放置%4个%3 +blockly.block.entity_set_sneaking=将%1的潜行状态设置为%2 +blockly.block.entity_set_stepheight=将%1的最大行走高度设置为%2 +blockly.block.entity_set_spawn=将%4的出生点设置为x\:%1 y\:%2 z\:%3 +blockly.block.entity_set_sprinting=将%1的疾跑状态设置为%2 +blockly.block.entity_set_target=将%1的攻击目标设置为%2 +blockly.block.entity_setinweb=将%1设置为在蜘蛛网中,持续1刻 +blockly.block.entity_size_height=获取%1的碰撞箱高度 +blockly.block.entity_size_width=获取%1的碰撞箱宽度 +blockly.block.entity_stop_navigation=尝试停止导航%1 +blockly.block.entity_submerged_height=获取%1的碰撞箱淹没的高度 +blockly.block.entity_swing_mainhand=摇动%1的主手 +blockly.block.entity_swing_offhand=摇动%1的副手 +blockly.block.entity_switch_dimension=将%1的维度切换为%2 +blockly.block.entity_vel_x=%1%2在X轴的速度 +blockly.block.entity_vel_y=%1%2在Y轴的速度 +blockly.block.entity_vel_z=%1%2在Z轴的速度 +blockly.block.entity_xplevel=获取%1的经验等级 +blockly.block.entity_xp_until_next_level=获取%1升级所需的经验 +blockly.block.execute_command=在x\:%2 y\:%3 z\:%4%5执行命令 /%1 +blockly.block.explode=在x\:%2 y\:%3 z\:%4生成等级为%1, 伤害源类型为%5%6的爆炸 +blockly.block.get_command_parameters=获取以字符串形式接受索引%1的所有命令参数 +blockly.block.get_command_parameter_blockpos_x=获取命令方块位置X参数%1 +blockly.block.get_command_parameter_blockpos_y=获取命令方块位置Y参数%1 +blockly.block.get_command_parameter_blockpos_z=获取命令方块位置Z参数%1 +blockly.block.get_command_parameter_blockstate=获取方块命令参数%1 +blockly.block.get_command_parameter_entity=%2获取实体命令参数%1 +blockly.block.get_command_parameter_entities_foreach=获取每个命令参数%1提供的实体,存为%2,执行%3 +blockly.block.get_command_parameter_itemstack=获取物品命令参数%1 +blockly.block.get_command_parameter_logic=获取逻辑命令参数%1 +blockly.block.get_command_parameter_message=获取消息命令参数%1 +blockly.block.get_command_parameter_number=获取数字命令参数%1 +blockly.block.get_command_parameter_string=获取字符串命令参数%1 blockly.block.get_dimensionid=%1 -blockly.block.get_localized_text=获取键 %1 %2 内的本地化文本 -blockly.block.gui_clear_slot=清除 %2 当前打开的 GUI 储存槽第 %1 个位置的物品 -blockly.block.gui_damage_item=减少 %3 当前打开的 GUI 的储存槽第 %2 个位置的物品 %1 的耐久 -blockly.block.gui_get_amount_inslot=获取 %2 当前打开的 GUI 的储存槽第 %1 个位置的物品数量 -blockly.block.gui_get_item_inslot=获取 %2 当前打开的 GUI 的储存槽第 %1 个位置的物品 -blockly.block.gui_get_text_textfield=获取文本框 %1 中的文本 %2 -blockly.block.gui_get_value_checkbox=%1 复选框已勾选 %2 -blockly.block.gui_set_text_textfield=将文本框 %1 内的文本替换为 %3 %2 -blockly.block.gui_remove_items=移除 %3 当前打开的 GUI 的储存槽第 %2 个位置的物品 %1 个 -blockly.block.gui_set_items=设置 %4 当前打开的 GUI 的储存槽第 %2 个位置的物品为 %1 个 %3 -blockly.block.item_add_enhancement=向 %2 添加 等级 %1 的 %3 附魔 -blockly.block.item_bucket_to_fluid=将桶 %2 %1 转换为流体方块 %3 ,如果转换失败则转换为空气 -blockly.block.item_can_harvest=%3 %1 能采集 %4 %2 -blockly.block.item_can_smelt=%1 可被冶炼 -blockly.block.item_check_rarity=%1 的稀有度是 %2 -blockly.block.item_cooldown_for=为 %2 冷却 %3 并持续 %1 刻 -blockly.block.item_damage=对 %2 造成 %1 点损坏 -blockly.block.item_enchanted_with_xp=对 %1 使用 %2 等级的经验附魔后的物品,为宝藏附魔\:%3 -blockly.block.item_fuel_power=获取 %1 的燃料能量 -blockly.block.item_get_damage=获取 %1 已消耗的耐久度 -blockly.block.item_get_enhancement=获取 %1 的 %2 附魔等级 -blockly.block.item_get_max_damage=获取 %1 的最大耐久 -blockly.block.item_is_enchantable=%1 可附魔 -blockly.block.item_is_enchanted=%1 已附魔 -blockly.block.item_istype=%1 的物品类型为 %2 -blockly.block.item_is_food=%1 是食物 -blockly.block.item_get_food_value=获取 %1 的饱食度 -blockly.block.item_get_saturation_value=获取 %1 的饱和值 -blockly.block.item_get_harvest_level=获得 %1 的挖掘等级 -blockly.block.item_name=获取 %1 的显示名称 -blockly.block.item_nbt_copy=将 %1 的 NBT标签复制到 %2(如果有) -blockly.block.item_nbt_logic_get=获取 %2 的 NBT 逻辑标签 %1 -blockly.block.item_nbt_logic_set=将 %3 的 NBT 逻辑标签 %1 设置为 %2 -blockly.block.item_nbt_num_get=获取 %2 的 NBT 数字标签 %1 -blockly.block.item_nbt_num_set=设置 %3 的 NBT 数字标签 %1 为 %2 -blockly.block.item_nbt_text_get=获取 %2 的 NBT 文本标签 %1 -blockly.block.item_nbt_text_set=将 %3 的 NBT 文字标签 %1 设置为 %2 -blockly.block.item_random_from_tag=如果没有找到物品,则在标签 %1 或空气中随机选择 -blockly.block.item_registry_name=获取 %1 的注册名 -blockly.block.item_set_damage=将 %2 已消耗的耐久度设置为 %1 -blockly.block.item_set_display_name=将 %2 的显示名称设置为 %1 -blockly.block.item_show_totemlike_animation=使 %1 显示类似不死图腾的动画 %2 -blockly.block.item_smelting_result=获取 %1 的冶炼结果 -blockly.block.itementity_to_mcitem=转换物品实体 %1 为物品栈 -blockly.block.itemhandler_get_slot=如果 %2 拥有物品栏,则获取其储存槽第 %1 个位置的物品 -blockly.block.itemhandler_set_slot=如果 %2 拥有物品栏,则在其储存槽第 %1 个位置放置 %4 个 %3 -blockly.block.itemstack_get_count=获取在 %1 的物品数量 -blockly.block.itemstack_get_max_stack_size=获取 %1 的最大堆叠数量 -blockly.block.itemstack_is_stackable=%1 可堆叠 -blockly.block.itemstack_is_damaged=%1 已损坏 -blockly.block.itemstack_is_damageable=%1 可损坏 -blockly.block.itemstack_grow=使 %2 增加 %1 个物品 -blockly.block.itemstack_has_enchantment=%1 拥有附魔 %2 +blockly.block.get_localized_text=获取键%1%2的本地化文本 +blockly.block.gui_clear_slot=清除%2当前打开的GUI槽位第%1个位置的物品 +blockly.block.gui_damage_item=使%3当前打开的GUI的槽位第%2个位置的物品减少%1点耐久 +blockly.block.gui_get_amount_inslot=获取%2当前打开的GUI的槽位第%1个位置的物品数量 +blockly.block.gui_get_item_inslot=获取%2当前打开的GUI的槽位第%1个位置的物品 +blockly.block.gui_get_text_textfield=获取文本框%1中的文本%2 +blockly.block.gui_get_value_checkbox=%1复选框已勾选%2 +blockly.block.gui_set_text_textfield=将文本框%1内的文本替换为%3%2 +blockly.block.gui_remove_items=移除%3当前打开的GUI的槽位第%2个位置的物品%1个 +blockly.block.gui_set_items=将%4当前打开的GUI的槽位第%2个位置的物品设置为%1个%3 +blockly.block.item_add_enhancement=向%2添加等级%1的%3附魔 +blockly.block.item_bucket_to_fluid=将桶%2%1转换为流体方块%3,如果转换失败则转换为空气 +blockly.block.item_can_harvest=%3%1能采集%4%2 +blockly.block.item_can_smelt=%1可被冶炼 +blockly.block.item_check_rarity=%1的稀有度是%2 +blockly.block.item_cooldown_for=为%2冷却%3并持续%1刻 +blockly.block.item_damage=对%2造成%1点损坏 +blockly.block.item_enchanted_with_xp=对%1使用%2等级的经验附魔后的物品,为宝藏附魔:%3 +blockly.block.item_fuel_power=获取%1的燃料能量 +blockly.block.item_get_cooldown=获取%2在%1侧的剩余冷却时间的百分比 +blockly.block.item_get_damage=获取%1已消耗的耐久度 +blockly.block.item_get_enhancement=获取%1的%2附魔等级 +blockly.block.item_get_max_damage=获取%1的最大耐久 +blockly.block.item_is_cooldown=%2在%1侧处于冷却时间 +blockly.block.item_is_enchantable=%1可附魔 +blockly.block.item_is_enchanted=%1已附魔 +blockly.block.item_istype=%1的物品类型为%2 +blockly.block.item_is_food=%1是食物 +blockly.block.item_get_food_value=获取%1的饱食度 +blockly.block.item_get_saturation_value=获取%1的饱和值 +blockly.block.item_get_harvest_level=获得%1的挖掘等级 +blockly.block.item_name=获取%1的显示名称 +blockly.block.item_nbt_copy=将%1的NBT标签复制到%2(如果有) +blockly.block.item_nbt_logic_get=获取%2的NBT逻辑标签%1 +blockly.block.item_nbt_logic_set=将%3的NBT逻辑标签%1设置为%2 +blockly.block.item_nbt_num_get=获取%2的NBT数字标签%1 +blockly.block.item_nbt_num_set=将%3的NBT数字标签%1设置为%2 +blockly.block.item_nbt_text_get=获取%2的NBT文本标签%1 +blockly.block.item_nbt_text_set=将%3的NBT文字标签%1设置为%2 +blockly.block.item_random_from_tag=如果没有找到物品,则在标签%1或空气中随机选择 +blockly.block.item_registry_name=获取%1的注册名 +blockly.block.item_set_damage=将%2已消耗的耐久度设置为%1 +blockly.block.item_set_display_name=将%2的显示名称设置为%1 +blockly.block.item_show_totemlike_animation=使%1显示类似不死图腾的动画%2 +blockly.block.item_smelting_result=获取%1的冶炼结果 +blockly.block.itementity_to_mcitem=将物品实体%1转换为物品栈 +blockly.block.itemhandler_get_slot=如果%2拥有物品栏,则获取其槽位第%1个位置的物品 +blockly.block.itemhandler_set_slot=如果%2拥有物品栏,则在其槽位第%1个位置放置%4个%3 +blockly.block.itemstack_get_count=获取在%1的物品数量 +blockly.block.itemstack_get_max_stack_size=获取%1的最大堆叠数量 +blockly.block.itemstack_is_stackable=%1可堆叠 +blockly.block.itemstack_is_damaged=%1已损坏 +blockly.block.itemstack_is_damageable=%1可损坏 +blockly.block.itemstack_grow=使%2增加%1个物品 +blockly.block.itemstack_has_enchantment=%1拥有附魔%2 blockly.block.itemstack_iterator=物品栈迭代器 -blockly.block.itemstack_remove_specific_enchantment=从 %1 移除指定的附魔 %2 -blockly.block.itemstack_set_count=将在 %2 的物品数量设置为 %1 -blockly.block.itemstack_shrink=使 %2 减少 %1 个物品 +blockly.block.itemstack_remove_specific_enchantment=从%1移除指定的附魔%2 +blockly.block.itemstack_set_count=将在%2的物品数量设置为%1 +blockly.block.itemstack_shrink=使%2减少%1个物品 blockly.block.itemstack_to_mcitem=提供的物品栈 -blockly.block.logic_entity_compare=%1 的(子)类型为 %2 -blockly.block.loot_table_foreach=对于战利品表 %1 中的每个物品 %2 %3 %4 执行 %5 -blockly.block.math_random_int_between=随机整数(%1~%2)包含 -blockly.block.math_random_number_between=随机数(%1~%2) -blockly.block.mcitem_to_block=将 %2 %1 转换为方块 %3 ,如果转换失败则转换为空气 -blockly.block.move_entity=将 %4 的位置设置为 x\: %1 y\: %2 z\: %3 -blockly.block.place_schematic=将 NBT 结构文件 %6 %7 放置在 x\: %1 y\: %2 z\: %3 ,旋转\: %4 镜像\: %5 %8 -blockly.block.play_sound=在 x\:%1 y\:%2 z\:%3 播放音量为 %4,音高为 %5,类别为 %7 的声音 %6 -blockly.block.projectile_shoot_from_entity=让 %2 发射 %1,速度\:%3 不准确度\:%4 %5 -blockly.block.projectile_shoot_from_pos=从 x\: %2 y\: %3 z\: %4 发射 %1,方向dx\: %5 dy\: %6 dz\: %7 速度\:%8 不准确度\:%9 %10 -blockly.block.projectiles_arrow=类型为 %1 的箭,伤害\:%2 击退\:%3 穿透\:%4 射出者\:%5 火焰\:%6 粒子\:%7 拾取类型\:%8 -blockly.block.projectiles_fireball=类型为 %1 的火球,加速度 ax\: %2 ay\: %3 az\: %4 发射者\:%5 -blockly.block.projectiles_throwable=类型为 %1 的投掷型弹射物,发射者\:%2 +blockly.block.logic_entity_compare=%1的(子)类型为%2 +blockly.block.loot_table_foreach=对于战利品表%1中的每个物品,存为%2%3%4,执行%5 +blockly.block.math_random_int_between=在>\=%1和<\=%2内的随机整数 +blockly.block.math_random_number_between=在>%1和<%2内的随机整数 +blockly.block.mcitem_to_block=将%2%1转换为方块%3,如果转换失败则转换为空气 +blockly.block.move_entity=将%4的位置设置为x\:%1 y\:%2 z\:%3 +blockly.block.place_schematic=将NBT结构文件%6%7放置在x\:%1 y\:%2 z\:%3,旋转:%4,镜像:%5%8 +blockly.block.play_sound=在x\:%1 y\:%2 z\:%3播放音量为:%4,音高为:%5,类型为:%7的声音%6 +blockly.block.projectile_shoot_from_entity=让%2发射%1,速度:%3,不准确度:%4%5 +blockly.block.projectile_shoot_from_pos=从x\:%2 y\:%3 z\:%4发射%1,方向dx\:%5 dy\:%6 dz\:%7,速度:%8 ,不准确度:%9%10 +blockly.block.projectiles_arrow=类型为%1的箭,伤害:%2,带击退:%3,带穿透:%4,发射者:%5,为火矢箭:%6,粒子:%7,拾取类型:%8 +blockly.block.projectiles_fireball=类型为%1的火球,加速度ax\:%2 ay\:%3 az\:%4,发射者:%5 +blockly.block.projectiles_throwable=类型为%1的投掷型弹射物,发射者:%2 blockly.block.provided_dimensionid=提供的维度类型 -blockly.block.run_function=在 x\: %2 y\: %3 z\: %4 运行函数 %1 %5 -blockly.block.set_global_spawn=将全局生成点设置为 x\: %1 y\: %2 z\: %3 -blockly.block.set_time=将时间设置为 %1 %2 -blockly.block.spawn_entity=在x\: %1 y\: %2 z\: %3 处生成实体\: %4 %5 -blockly.block.spawn_entity_with_rotation=在x\: %1 y\: %2 z\: %3 处生成实体\: %6 偏移\: %4 俯仰度\: %5 %7 -blockly.block.spawn_entity_with_rotation_velocity=在 x\: %1 y\: %2 z\: %3 与偏移\: %4 俯仰度\: %5 vx\: %6 vy\: %7 vz\: %8 处生成实体\: %9 %10 -blockly.block.spawn_gem=生成掉落物 %1 于 x\: %2 y\: %3 z\: %4 拾取延迟\: %5 自然消失\: %6 %7 -blockly.block.spawn_particle=在 x\: %1 y\: %2 z\: %3 处,移动向量 vx\: %4 vy\: %5 vz\: %6 生成单个粒子,类型\:%7 -blockly.block.spawn_particle_multi=在服务端生成散布的 %8 个粒子,中心点位于 x\: %1 y\: %2 z\: %3,距离中心点的最大偏移 dx\: %4 dy\: %5 dz\: %6 ,最大速度: %7 ,类型\: %9 %10 -blockly.block.spawn_xporb=在 x\: %2 y\: %3 z\: %4 生成经验值为 %1 的经验球 %5 -blockly.block.strike_lightning=在 x\:%1 y\:%2 z\:%3 处劈下闪电,仅有效果\:%4 %5 -blockly.block.wait=等待 %1 %2 刻于服务端 %5 %3 然后执行 %4 -blockly.block.world_data_heightat=在x\: %1 z\: %2 获取 %3 的高度 -blockly.block.world_data_biomeat=%4 生物群系位于 x\: %1 y\: %2 z\: %3 -blockly.block.world_data_biomeat_tag=生物群系 x\: %1 y\: %2 z\: %3 标记在生物群系标签中为 %4 -blockly.block.world_data_block_direction_at=获取在 x\: %1 y\: %2 z\: %3 的方块的方向 -blockly.block.world_data_blockat=获取位于 x\: %1 y\: %2 z\: %3 的方块(包含状态)%4 -blockly.block.world_data_canseesky=位置 x\: %1 y\: %2 z\: %3 是露天的 -blockly.block.world_data_checkdifficulty=在提供的世界中难度为 %1 +blockly.block.run_function=在x\:%2 y\:%3 z\:%4运行函数%1%5 +blockly.block.set_global_spawn=将全局生成点设置为x\:%1 y\:%2 z\:%3 +blockly.block.set_time=将时间设置为%1%2 +blockly.block.spawn_entity=在x\:%1 y\:%2 z\:%3生成实体%4%5 +blockly.block.spawn_entity_with_rotation=在x\:%1 y\:%2 z\:%3生成实体%6,偏移:%4,俯仰度:%5%7 +blockly.block.spawn_entity_with_rotation_velocity=在x\:%1 y\:%2 z\:%3生成实体%9,偏移:%4,俯仰度:%5,vx\:%6 vy\:%7 vz\:%8%10 +blockly.block.spawn_gem=在x\:%2 y\:%3 z\:%4生成掉落物%1,拾取延迟:%5,未拾取自动消失:%6%7 +blockly.block.spawn_particle=在x\:%1 y\:%2 z\:%3生成单个粒子,移动向量 vx\:%4 vy\:%5 vz\:%6 ,类型:%7 +blockly.block.spawn_particle_multi=在服务端生成散布的%8 个粒子,中心点位于x\:%1 y\:%2 z\:%3,距离中心点的最大偏移 dx\:%4 dy\:%5 dz\:%6 ,最大速度:%7 ,类型:%9%10 +blockly.block.spawn_xporb=在x\:%2 y\:%3 z\:%4生成经验值为%1的经验球%5 +blockly.block.strike_lightning=在x\:%1 y\:%2 z\:%3处劈下闪电,仅有效果:%4%5 +blockly.block.team_add_entity=将实体%2添加到队伍%1 +blockly.block.team_create_new=新建名为%1的队伍 +blockly.block.team_delete=删除名为%1的队伍 +blockly.block.team_get_entity_team=获取实体%1所在的队伍 +blockly.block.team_get_friendlyfire=名为%1的队伍允许PvP +blockly.block.team_remove_entity=将实体%2从队伍%1中移除 +blockly.block.team_set_friendlyfire=将名为%1的队伍的允许PvP状态设置为%2 +blockly.block.team_set_friendlyfire.tooltip=允许PvP只会对玩家有效 +blockly.block.wait=等待%1%2刻于服务端%5%3然后执行%4 +blockly.block.world_data_heightat=在x\:%1z\:%2获取%3的高度 +blockly.block.world_data_biomeat=%4生物群系位于x\:%1 y\:%2 z\:%3 +blockly.block.world_data_biomeat_tag=生物群系x\:%1 y\:%2 z\:%3标记在生物群系标签中为%4 +blockly.block.world_data_block_direction_at=获取在x\:%1 y\:%2 z\:%3的方块的方向 +blockly.block.world_data_blockat=获取在x\:%1 y\:%2 z\:%3的方块(包含状态)%4 +blockly.block.world_data_canseesky=位置x\:%1 y\:%2 z\:%3为露天 +blockly.block.world_data_checkdifficulty=在提供的世界中难度为%1 blockly.block.world_data_current_time=获取当前世界的时间 -blockly.block.world_data_dimensionid=获取已提供的世界的维度 ID -blockly.block.world_data_fluidat=获取位于 x\: %1 y\: %2 z\: %3 的流体的方块(包含状态) %4 -blockly.block.world_data_get_indirect_power=获取在 x\: %1 y\: %2 z\: %3 的方块的非直接能量 -blockly.block.world_data_get_redstone_power=获取在 x\: %1 y\: %2 z\: %3 的方块在 %4 侧的红石信号强度 -blockly.block.world_data_is_block_powered=在 x\: %1 y\: %2 z\: %3 的方块被红石信号激活 -blockly.block.world_data_isair=在 x\: %1 y\: %2 z\: %3 处为空气 -blockly.block.world_data_isday=在提供的世界 %1 中为白天 -blockly.block.world_data_israided=在 x\: %1 y\: %2 z\: %3 处发生了袭击 %4 +blockly.block.world_data_dimensionid=获取已提供的世界的维度ID +blockly.block.world_data_fluidat=获取在x\:%1 y\:%2 z\:%3作为流体的方块(包含状态)%4 +blockly.block.world_data_get_indirect_power=获取在x\:%1 y\:%2 z\:%3的方块的非直接能量 +blockly.block.world_data_get_redstone_power=获取在x\:%1 y\:%2 z\:%3的方块在%4侧的红石信号强度 +blockly.block.world_data_is_block_powered=在x\:%1 y\:%2 z\:%3的方块被红石信号激活 +blockly.block.world_data_isair=在x\:%1 y\:%2 z\:%3处为空气 +blockly.block.world_data_isday=在提供的世界%1中为白天 +blockly.block.world_data_israided=在x\:%1 y\:%2 z\:%3处发生了袭击%4 blockly.block.world_data_israining=在提供的世界中为雨天 -blockly.block.world_data_isremote=世界客户端已提供 -blockly.block.world_data_isthundering=在提供的世界 %1 为雷雨天 -blockly.block.world_data_light_level=获取在 x\: %1 y\: %2 z\: %3 的亮度等级 -blockly.block.world_data_logic_getgamerule=获取逻辑游戏规则 %1 -blockly.block.world_data_logic_setgamerule=将逻辑游戏规则 %2 设置为 %1 +blockly.block.world_data_isremote=提供的世界仅在客户端存在 +blockly.block.world_data_isthundering=在提供的世界%1为雷雨天 +blockly.block.world_data_light_level=获取在x\:%1 y\:%2 z\:%3的亮度等级 +blockly.block.world_data_logic_getgamerule=获取逻辑游戏规则%1 +blockly.block.world_data_logic_setgamerule=将逻辑游戏规则%2设置为%1 blockly.block.world_data_moon_phase=获取月相 -blockly.block.world_data_num_getgamerule=获取数字游戏规则 %1 -blockly.block.world_data_num_setgamerule=将数字游戏规则 %2 设置为 %1 +blockly.block.world_data_num_getgamerule=获取数字游戏规则%1 +blockly.block.world_data_num_setgamerule=将数字游戏规则%2设置为%1 blockly.block.world_data_number_players_server=获取连接到服务器的玩家数量 blockly.block.world_data_number_players_world=获取指定世界中存在的玩家数量 -blockly.block.world_data_spawn_x=获取当前世界出生点的 x 坐标 -blockly.block.world_data_spawn_y=获取当前世界出生点的 y 坐标 -blockly.block.world_data_spawn_z=获取当前世界出生点的 z 坐标 -blockly.block.world_data_temperature=获取在 x\: %1 y\: %2 z\: %3 的生物群系温度 -blockly.block.world_data_isvillage=坐标 x\: %1 y\: %2 z\: %3 处在一个村庄内 %4 -blockly.block.world_entity_inrange=%5 获取位于 x\: %1 y\: %2 z\: %3,边长为 %4 的正方体范围内最近的类型为 %6 的实体 -blockly.block.world_entity_inrange_exists=实体 %5 在中心位于 x\: %1 y\: %2 z\: %3 的边长 %4 的正方体范围内存在 -blockly.block.world_entity_inrange_foreach=遍历每个位于以 x\: %1 y\: %2 z\: %3 为中心,边长为 %4 的正方体内的实体,作为 %5 进行 %6 操作 -blockly.block.world_entity_player_foreach=遍历当前世界中的玩家作为 %1 进行 %2 操作 -blockly.block.world_loot_table_foreach=对于战利品表 %1 中的每个物品,在 x\: %2 y\: %3 z\: %4 作为 %5 %6 %7 执行 %8 -blockly.block.world_make_portal=如果形状合适则在 x\: %1 y\: %2 z\: %3 处放置维度 %4 的传送门 -blockly.block.world_send_chat=给所有玩家发送聊天信息\: %1 %2 -blockly.block.world_set_downfall=如果 %1 ,则启用下雨,否则禁用 -blockly.block.world_spawn_falling_block=在x\: %2 y\: %3 z\: %4 以坠落的方块形式生成 %1 %5 -blockly.block.world_switch_world=在服务端世界中执行 %1 %2 -blockly.block.world_use_bonemeal=在 x\: %1 y\: %2 z\: %3 应用骨粉 -blockly.block.attack_action=回击攻击者生物,向同伴寻求帮助 %1 %2 -blockly.block.attack_entity=攻击(仅在视野内 %1)(仅在附近 %2) 的类型为\:%3 的实体 %4 -blockly.block.attack_fly=在半径 %2 内以速度为 %1 进行飞行攻击(仅适用于飞行实体)%3 -blockly.block.attack_on_collide=以 %1 的速度进行近战/接触攻击(在失去视线后追逐 %2) %3 -blockly.block.attack_with_range=以 %1 的速度在半径为 %2 进行近战攻击(失去目标后追逐 %3)%4 -blockly.block.avoid_entity=躲避半径为\: %1,近速度为\: %2,远速度为\: %3,类型为 %4 的实体 %5 -blockly.block.break_blocks=以速度%1,最大检测高度为%3 ,破坏类型为%2的方块 %4 -blockly.block.find_and_move_to_air=呼吸 %1 -blockly.block.breed=如果是动物 %2,则以 %1 的速度繁殖、寻找同伴 -blockly.block.climb_powder_snow=爬出细雪 %1 -blockly.block.doors_break=破坏门 %1 -blockly.block.doors_close=关上门 %1 -blockly.block.doors_open=打开门 %1 -blockly.block.eat_grass=吃草 %1 -blockly.block.fight_as_owner=攻击主人所攻击的实体 %1 -blockly.block.fly=以速度 %1 在周围飞行(仅适用于飞行中的实体) %2 -blockly.block.follow_boat=跟随船 %1 -blockly.block.follow_entity=以 %1 的速度,最大范围为\:%2,搜索范围为\:%3,跟随相同的生物 %4 -blockly.block.follow_item_in_hands=当 %2 在主手时以 %1 的速度跟随,被恐吓时以 %3 %4 的速度移动 -blockly.block.follow_owner=如果被驯服,以 %1 的速度(最小视距 %2 最大视距 %3 ) 跟随主人 %4 -blockly.block.follow_parent=如果动物是 %2,则以 %1 的速度跟随父母 -blockly.block.leap_at_target=以 %1 速度跃向目标实体 %2 -blockly.block.look_around=环顾四周 %1 -blockly.block.move_indoors=尽可能移到室内 %1 -blockly.block.panic_when_attacked=当速度为 %1 受到攻击时会恐慌 %2 -blockly.block.protect_owner=攻击攻击主人的实体 %1 -blockly.block.restrict_sun=避开阳光 %1 -blockly.block.swim=以 %1 速度随机游泳 %2 -blockly.block.swim_in_water=漂浮在水中 %1 -blockly.block.try_and_find_water=尝试找到水 %1 -blockly.block.watch_closest_entity=在半径 %1 内观察距离最近的类型为 %2 的实体 %3 -blockly.block.wander=以 %1 的速度四处游荡(允许行走) %2 -blockly.block.wander_avoid_water=以 %1 的速度四处游荡并避开水域 %2 -blockly.block.biome_entered=如果玩家进入生物群系 %1 -blockly.block.block_placed=如果 %1 被放置 +blockly.block.world_data_spawn_x=获取当前世界出生点的X轴坐标 +blockly.block.world_data_spawn_y=获取当前世界出生点的Y轴坐标 +blockly.block.world_data_spawn_z=获取当前世界出生点的Z轴坐标 +blockly.block.world_data_temperature=获取在x\:%1 y\:%2 z\:%3的生物群系温度 +blockly.block.world_data_isvillage=坐标x\:%1 y\:%2 z\:%3处在一个村庄内%4 +blockly.block.world_entity_inrange=%5获取位于中心于x\:%1 y\:%2 z\:%3,边长为%4的正方体范围内最近的类型为%6的实体 +blockly.block.world_entity_inrange_exists=实体%5在中心位于x\:%1 y\:%2 z\:%3的边长%4的正方体范围内存在 +blockly.block.world_entity_inrange_foreach=遍历每个位于以x\:%1 y\:%2 z\:%3为中心,边长为%4的正方体内的实体,作为%5执行%6 +blockly.block.world_entity_player_foreach=遍历当前世界中的玩家作为%1执行%2 +blockly.block.world_loot_table_foreach=对于战利品表%1中的每个物品,在x\:%2 y\:%3 z\:%4作为%5%6%7,执行%8 +blockly.block.world_make_portal=如果形状合适则在x\:%1 y\:%2 z\:%3处放置维度%4的传送门 +blockly.block.world_send_chat=给所有玩家发送聊天信息:%1%2 +blockly.block.world_set_downfall=如果%1,则启用下雨,否则禁用 +blockly.block.world_spawn_falling_block=在x\:%2 y\:%3 z\:%4以坠落的方块形式生成%1%5 +blockly.block.world_switch_world=在服务端世界中执行%1%2 +blockly.block.world_use_bonemeal=在x\:%1 y\:%2 z\:%3应用骨粉 +blockly.block.attack_action=回击攻击者生物,向同伴寻求帮助%1%2 +blockly.block.attack_entity=攻击(仅在视野内%1)(仅在附近%2) 的类型为%3的实体%4 +blockly.block.attack_fly=在半径%2内以速度为%1进行飞行攻击(仅适用于飞行实体)%3 +blockly.block.attack_on_collide=以%1的速度进行近战/接触攻击(失去目标后追逐%2)%3 +blockly.block.attack_with_range=以%1的速度在半径为%2进行近战攻击(失去目标后追逐%3)%4 +blockly.block.avoid_entity=躲避半径为%1,近速度为%2,远速度为%3,类型为%4的实体%5 +blockly.block.break_blocks=以速度%1,最大检测高度为%3 ,破坏类型为%2的方块%4 +blockly.block.find_and_move_to_air=呼吸%1 +blockly.block.breed=如果是动物,则以%1的速度繁殖、寻找同伴%2 +blockly.block.climb_powder_snow=爬出细雪%1 +blockly.block.doors_break=破坏门%1 +blockly.block.doors_close=关上门%1 +blockly.block.doors_open=打开门%1 +blockly.block.eat_grass=吃草%1 +blockly.block.fight_as_owner=攻击主人所攻击的实体%1 +blockly.block.fly=以速度%1在周围飞行(仅适用于飞行中的实体)%2 +blockly.block.follow_boat=跟随船%1 +blockly.block.follow_entity=以%1的速度,最大范围为%2,搜索范围为%3,跟随相同的生物%4 +blockly.block.follow_item_in_hands=当%2在主手时以%1的速度跟随,被恐吓时以%3%4的速度移动 +blockly.block.follow_owner=如果被驯服,以%1的速度(最小视距%2,最大视距%3) 跟随主人%4 +blockly.block.follow_parent=如果是动物,则以%1的速度跟随父母%2 +blockly.block.leap_at_target=以%1速度跃向目标实体%2 +blockly.block.look_around=环顾四周%1 +blockly.block.move_indoors=尽可能移到室内%1 +blockly.block.panic_when_attacked=速度为%1受到攻击时会恐慌%2 +blockly.block.protect_owner=攻击伤害主人的实体%1 +blockly.block.restrict_sun=避开阳光%1 +blockly.block.swim=以%1速度随机游泳%2 +blockly.block.swim_in_water=漂浮在水中%1 +blockly.block.try_and_find_water=尝试找到水%1 +blockly.block.watch_closest_entity=在半径%1内监视距离玩家最近的%2实体%3 +blockly.block.wander=以%1的速度四处游荡(允许行走)%2 +blockly.block.wander_avoid_water=以%1的速度四处游荡并避开水域%2 +blockly.block.biome_entered=如果玩家进入生物群系%1 +blockly.block.block_placed=如果%1被放置 blockly.block.custom_trigger=自定义触发器(使用流程或命令) -blockly.block.dimension_entered=如果玩家进入维度 %1 -blockly.block.dimension_left=如果玩家离开维度 %1 -blockly.block.item_consumed=如果 %1 被消耗 -blockly.block.item_damaged=如果 %3 被损坏,程度在 %1 和 %2 之间 -blockly.block.item_in_inventory=如果玩家在物品栏中有 %1 至 %2 的 %3 +blockly.block.dimension_entered=如果玩家进入维度%1 +blockly.block.dimension_left=如果玩家离开维度%1 +blockly.block.item_consumed=如果%1被消耗 +blockly.block.item_damaged=如果%3的损坏程度在%1和%2内 +blockly.block.item_in_inventory=如果玩家在物品栏中有%1至%2的%3 blockly.block.tick=每游戏刻 -blockly.block.blockpos=方块位置参数 %1 %2 %3 +blockly.block.blockpos=方块位置参数%1%2%3 blockly.block.old_command=接受所有参数和调用流程 -blockly.block.blockstate=方块状态参数 %1 %2 %3 -blockly.block.number_default=数字参数 %1 %2 %3 -blockly.block.number_min=最小值参数 %1\:%2 %3 %4 -blockly.block.number_min_max=为参数 %1 赋值,最小值\:%2,最大值\:%3 %4 %5 -blockly.block.logic=逻辑参数 %1 %2 %3 -blockly.block.string=类型为 %2,参数为 %1 的字符串 %3%4 +blockly.block.blockstate=方块状态参数%1%2%3 +blockly.block.number_default=数字参数%1%2%3 +blockly.block.number_min=为参数%1赋值,最小值:%2%3%4 +blockly.block.number_min_max=为参数%1赋值,最小值:%2,最大值:%3%4%5 +blockly.block.logic=逻辑参数%1%2%3 +blockly.block.string=类型为%2,参数为%1的字符串%3%4 blockly.block.string.tooltip=“可引用文本”允许引号内的句子。 -blockly.block.entity=生物参数 %1 对于 %2 %3 %4 -blockly.block.item=物品参数 %1 %2 %3 -blockly.block.is_mod_loaded=加载了 ID 为 %1 的模组 -blockly.block.message=消息参数 %1 %2 %3 -blockly.block.message.tooltip=消息参数用于诸如/ban 或 /kick 等命令。 -blockly.block.literal=字面参数 %1 %2 %3 -blockly.block.literal.tooltip=内置的选项是 'day', 'noon ', 'normal', 'easy' 等。 -blockly.block.entity_get_armor_slot_item.tooltip=ID 3 是头盔,ID 0 是靴子 -blockly.block.entity_set_armor_slot_item.tooltip=ID 3 是头盔,ID 0 是靴子 -blockly.block.entity_get_ticks_frozen=获取 %1 被冻结的刻数 -blockly.block.entity_set_ticks_frozen=将 %1 被冻结的刻数设置为 %2 +blockly.block.entity=实体参数%1对于%2%3%4 +blockly.block.item=物品参数%1%2%3 +blockly.block.is_mod_loaded=加载了ID为%1的模组 +blockly.block.message=消息参数%1%2%3 +blockly.block.message.tooltip=消息参数用于诸如 /ban 或 /kick 等命令。 +blockly.block.literal=字母参数%1%2%3 +blockly.block.literal.tooltip=内置选项为'day', 'noon ', 'normal', 'easy'等。 +blockly.block.entity_get_armor_slot_item.tooltip=ID 3是头盔,ID 0是靴子 +blockly.block.entity_set_armor_slot_item.tooltip=ID 3是头盔,ID 0是靴子 +blockly.block.entity_get_ticks_frozen=获取%1被冻结的刻数 +blockly.block.entity_set_ticks_frozen=将%1被冻结的刻数设置为%2 blockly.block.world_data_temperature.tooltip=生物群系温度乘以100 blockly.block.event_trigger.line1=事件触发器 - 由外部调用触发 -blockly.block.event_trigger.line2=或者当(全局触发器)\: +blockly.block.event_trigger.line2=或者当(全局触发器): blockly.block.event_trigger.tooltip=这是事件的起始点。 blockly.block.cancel_event.line1=取消已触发全局触发器的事件 blockly.block.cancel_event.line2=仅适用于可取消的全局触发器 @@ -1232,168 +1277,169 @@ blockly.block.set_event_result.line1=将全局触发事件的结果设置为 blockly.block.set_event_result.line2=只适用于带有结果的全局触发器 blockly.block.call_procedure=调用流程 blockly.block.procedure_retval=调用流程并获取返回值 -blockly.block.block_holderset_list=方块列表\: +blockly.block.block_holderset_list=方块列表: blockly.block.block_holderset_list.empty=(空列表) -blockly.block.block_holderset_list.input=方块\: +blockly.block.block_holderset_list.input=方块: blockly.block.call_procedure.at=\ 在 -blockly.block.block_holderset_tag=方块标签\: %1 -blockly.block.block_predicate_all_of=满足所有条件时\: +blockly.block.block_holderset_tag=方块标签:%1 +blockly.block.block_predicate_all_of=满足所有条件时: blockly.block.block_predicate_all_of.empty=(总是) -blockly.block.block_predicate_all_of.input=条件\: -blockly.block.block_predicate_any_of=满足任一条件时\: +blockly.block.block_predicate_all_of.input=条件: +blockly.block.block_predicate_any_of=满足任一条件时: blockly.block.block_predicate_any_of.empty=(从不) -blockly.block.block_predicate_any_of.input=条件\: -blockly.block.block_predicate_inside_world=坐标 x\: %1 y\: %2 z\: %3 处在世界范围内 -blockly.block.block_predicate_has_sturdy_face=在 x\:%1 y\:%2 z\:%3 的方块有固体面 %4 +blockly.block.block_predicate_any_of.input=条件: +blockly.block.block_predicate_inside_world=位置x\:%1 y\:%2 z\:%3在世界范围内 +blockly.block.block_predicate_has_sturdy_face=在x\:%1 y\:%2 z\:%3的方块有固体面%4 blockly.block.block_predicate_is_air=当前位置为空气 blockly.block.block_predicate_is_air_or_water=当前位置为空气或水 -blockly.block.block_predicate_matching_blocks=在 x\: %2 y\: %3 z\: %4 处的方块存在于方块列表或标签 %1 中 +blockly.block.block_predicate_matching_blocks=在x\:%2 y\:%3 z\:%4的方块存在于方块列表或标签%1中 blockly.block.block_predicate_mutator.container=条件列表 blockly.block.block_predicate_mutator.input=条件 -blockly.block.block_predicate_not=非 %1 -blockly.block.block_predicate_replaceable=位置 x\: %1 y\: %2 z\: %3 处的方块可被替换 -blockly.block.block_predicate_solid=位置 x\: %1 y\: %2 z\: %3 处的方块为固体 +blockly.block.block_predicate_not=非%1 +blockly.block.block_predicate_replaceable=在x\:%1 y\:%2 z\:%3的方块可被替换 +blockly.block.block_predicate_solid=在x\:%1 y\:%2 z\:%3的方块为固体 blockly.block.block_predicate_true=True -blockly.block.block_predicate_would_survive=%1 将在 x\: %2 y\: %3 z\: %4 处存在 -blockly.block.feature_bamboo=有 %1 几率种在灰化土上的竹子 +blockly.block.block_predicate_would_survive=%1将在x\:%2 y\:%3 z\:%4存在 +blockly.block.feature_bamboo=有%1几率种在灰化土上的竹子 blockly.block.block_list_mutator.container=方块列表 blockly.block.block_list_mutator.input=方块 -blockly.block.feature_block_pile=由方块 %1 组成的方块堆 -blockly.block.feature_block_column_simple=由方块 %2 组成高度为 %1 的方块柱 +blockly.block.feature_block_pile=由方块%1组成的方块堆 +blockly.block.feature_block_column_simple=由方块%2组成高度为%1的方块柱 blockly.block.feature_coral_claw=水下珊瑚爪地物 blockly.block.feature_coral_mushroom=水下珊瑚菇地物 blockly.block.feature_coral_tree=水下珊瑚树地物 -blockly.block.feature_custom_structure=自定义结构\: %1 %2,向 x 轴偏移 %3、y 轴偏移 %4、z 轴偏移 %5 %6 ,随机旋转\:%7 %8,随机镜像\:%9 %10,且不放置在方块列表或标签中的方块\:%11 -blockly.block.feature_delta=由方块 %1 填充内部,方块 %2 形成边缘组成大小为 %3,边缘大小为 %4 的三角洲地物 -blockly.block.feature_forest_rock=由方块 %1 组成的巨石地物 -blockly.block.feature_geode_simple=大小为 %1 %2 的紫晶洞地物无法替换标签中的方块\:%3 %4 如果发现标签 %6 中的 %5 方块则丢弃\: %7 填充\: %8 ,用于填充内层的方块\: %9,可生长的方块\: %10,用于填充中层的方块\: %11,用于填充外层的方块\:%12 -blockly.block.feature_geode_simple.input=紫水晶\: +blockly.block.feature_custom_structure=自定义结构:%1%2,放置位置x\:%3 y\:%4 z\:%5%6 ,随机旋转:%7%8,随机镜像:%9%10,且不放置在方块列表或标签中的方块:%11 +blockly.block.feature_delta=由方块%1填充内部,方块%2形成边缘组成尺寸为%3,边缘尺寸为%4的三角洲地物 +blockly.block.feature_forest_rock=由方块%1组成的巨石地物 +blockly.block.feature_geode_simple=大小为%1%2 的紫晶洞地物无法替换标签中的方块:%3%4如果发现标签%6 中的%5方块则丢弃:%7 填充:%8 ,用于填充内层的方块:%9,可生长的方块:%10,用于填充中层的方块:%11,用于填充外层的方块:%12 +blockly.block.feature_geode_simple.input=紫水晶: blockly.block.feature_geode_simple.empty=紫水晶列表不能为空 -blockly.block.feature_huge_brown_mushroom=由菌帽为 %1 ,菌柄为 %2 组成半径为 %3 的巨型棕色蘑菇地物 -blockly.block.feature_huge_red_mushroom=由菌帽为 %1 ,菌柄为 %2 组成半径为 %3 的巨型红色蘑菇地物 -blockly.block.feature_huge_fungus=由菌帽为 %1 ,菌柄为 %2 组成半径为 %3 ,可以种在 %1 的菌体,可否生长 %5 %6 菌柄可以替换与其匹配的方块(1.20+)\: %7 -blockly.block.feature_lake=由 %1 组成的湖泊,其边缘方块为 %2 +blockly.block.feature_huge_brown_mushroom=由菌帽为%1,菌柄为%2组成半径为%3的巨型棕色蘑菇地物 +blockly.block.feature_huge_red_mushroom=由菌帽为%1,菌柄为%2组成半径为%3的巨型红色蘑菇地物 +blockly.block.feature_huge_fungus=由菌帽为%1,菌柄为%2组成半径为%3,可以种在%1的菌体,可否生长%5%6 菌柄可以替换与其匹配的方块(1.20+):%7 +blockly.block.feature_lake=由%1组成的湖泊,其边缘方块为%2 blockly.block.feature_no_op=空地物 -blockly.block.feature_ore=大小为 %1 的矿石地物 %2,其暴露在外时有 %3 的几率不生成 +blockly.block.feature_ore=尺寸为%1的矿石地物%2,其暴露在外时有%3的几率不生成 blockly.block.feature_ore.empty=(空列表) -blockly.block.feature_random_patch_simple=由方块\: %4 组成的一小块地物,其中条件\: %5,尝试次数\: %1,XZ 轴延伸\: %2,Y 轴延伸\: %3 -blockly.block.feature_random_patch=由地物\: %4 组成的一小块地物,尝试次数\: %1 %5,XZ 轴延伸\: %2,Y 轴延伸\: %3 +blockly.block.feature_random_patch_simple=由方块:%4组成的一小块地物,其中条件:%5,尝试次数:%1,XZ 轴延伸:%2,Y 轴延伸:%3 +blockly.block.feature_random_patch=由地物:%4组成的一小块地物,尝试次数:%1%5,XZ 轴延伸:%2,Y 轴延伸:%3 blockly.block.feature_replace_single_block=单个矿石方块地物 blockly.block.feature_replace_single_block.empty=(空列表) -blockly.block.feature_replace_sphere=替换方块 %2 的 %1 团簇,其半径为 %3 -blockly.block.feature_scattered_ore=大小为 %1 的分散矿石地物 %2,其暴露在外时有 %3 几率不生成 +blockly.block.feature_replace_sphere=替换方块%2的%1团簇,其半径为%3 +blockly.block.feature_scattered_ore=尺寸为%1的分散矿石地物%2,其暴露在外时有%3几率不生成 blockly.block.feature_scattered_ore.empty=(空列表) -blockly.block.feature_seagrass=有 %1 的几率出现高海草的单一海草地物 -blockly.block.feature_simple_block=由方块 %1 组成的单方块地物 +blockly.block.feature_seagrass=有%1的几率出现高海草的单一海草地物 +blockly.block.feature_simple_block=由方块%1组成的单方块地物 blockly.block.feature_simple_random_mutator.container=(可用的)地物列表 blockly.block.feature_simple_random_mutator.input=地物 blockly.block.feature_simple_random_selector=列表中的随机地物: blockly.block.feature_simple_random_selector.input=地物: blockly.block.feature_simple_random_selector.empty=列表不能为空 -blockly.block.feature_tree.decorator_input=树木装饰\: -blockly.block.feature_tree_pine=种植在 %2 泥土上的 %1 树木,树干由 %3 组成,由 %4 组成高度为 %5 的树叶,根由 %6 组成, 高度为 %7,最多 %8,最多 %9 %10 ,生成时底部有泥土\: %11 %12 不生成藤蔓\: %13 %14 其树木装饰为\: +blockly.block.feature_tree.decorator_input=树木装饰: +blockly.block.feature_tree_pine=种植在%2泥土上的%1树木,树干由%3组成,由%4组成高度为%5的树叶,根由%6组成, 高度为%7,最多%8,最多%9%10 ,生成时底部有泥土:%11%12,不生成藤蔓:%13%14,其树木装饰为: blockly.block.feature_tree_pine.empty=(无) -blockly.block.feature_tree_simple=种植在 %2 泥土上且高度为 %6 的 %1 树木,树干由 %3 组成,树叶由 %4 组成,根由 %5 组成,最多 %7 ,最多 %8 %9 ,生成时底部有泥土\: %10 %11 不生成藤蔓\: %12 %13 其树木装饰为\: +blockly.block.feature_tree_simple=种植在%2泥土上且高度为%6的%1树木,树干由%3组成,树叶由%4组成,根由%5组成,最多%7 ,最多%8%9 ,生成时底部有泥土:%10%11,不生成藤蔓:%12%13,其树木装饰为: blockly.block.feature_tree_simple.empty=(无) -blockly.block.feature_tree_spruce=带 %1 的云杉树,其树干由 %2 组成,树叶由 %3 组成,最大树叶半径为 %4,暴露的树干高度为 %5 格,根为 %6,高度为 %7,最多为 %8,最多为 %9 %10,生成时底部有泥土\: %11 %12 不生成藤蔓\: %13 %14 +blockly.block.feature_tree_spruce=带%1的云杉树,其树干由%2组成,树叶由%3组成,最大树叶半径为%4,暴露的树干高度为%5格,根为%6,高度为%7,最多为%8,最多为%9%10,生成时底部有泥土:%11%12 不生成藤蔓:%13%14 blockly.block.feature_tree_spruce.empty=(无) -blockly.block.placed_feature_inline=配置地物: %1 将其放在额外位置: %2 -blockly.block.placed_feature_inline.disabled_placement=该位置无法放置 Minecraft 内置的地物 -blockly.block.placement_biome_filter=仅当当前位置的生物群系具有这个地物时 -blockly.block.placement_block_predicate_filter=仅当条件 %1 已满足时 -blockly.block.placement_block_survival_filter=仅当 %1 能在当前位置存在时 -blockly.block.placement_carving_mask=在由 %1 雕刻工具切割出的每一个位置 -blockly.block.placement_environment_scan=向 %2 的方向扫描最多 %1 个方块,直到条件 %3 满足 -blockly.block.placement_environment_scan_advanced=当条件 %4 为 true 时,最多向 %2 方向扫描 %1 个方块直到满足条件 %3 -blockly.block.height_provider_biased_to_bottom=偏向于底部高度介于最小值\:%1 最大值\:%2 统一范围\:%3 -blockly.block.height_provider_constant=固定高度\: %1 -blockly.block.height_provider_trapezoid=梯形分布的高度介于最小值\:%1 最大值\:%2 平均范围\:%3 -blockly.block.height_provider_uniform=在最小值 %1 和 最大值 %2 中均匀分布 -blockly.block.height_provider_very_biased_to_bottom=非常偏向于最小值\:%1 最大值\:%2 之间的底部高度平均范围\:%3 -blockly.block.height_provider_weighted=来自权重列表的随机高度\: -blockly.block.height_provider_weighted.empty=权重列表不能为空 -blockly.block.int_provider_biased_to_bottom=在最小值\:%1 和最大值\:%2 之间逐渐递减的随机整数 -blockly.block.int_provider_clamped=%1 在最小值为\:%2 和最大值为\:%3 之间 -blockly.block.int_provider_clamped_normal=最小值为\:%3 最大值为\:%4 ,平均数为\:%1 偏差为\:%2 正态分布的随机整数 -blockly.block.int_provider_constant=常数\: %1 -blockly.block.int_provider_uniform=在最小值\:%1 和最大值\:%2 之间的随机整数 -blockly.block.int_provider_weighted=来自权重列表的随机整数提供程序\: -blockly.block.int_provider_weighted.empty=权重列表不能为空 +blockly.block.placed_feature_inline=配置地物:%1 将其放在额外位置:%2 +blockly.block.placed_feature_inline.disabled_placement=该位置无法放置Minecraft内置的地物 +blockly.block.placement_biome_filter=仅当当前位置的生物群系具有该地物时 +blockly.block.placement_block_predicate_filter=仅当条件%1已满足时 +blockly.block.placement_block_survival_filter=仅当%1能在当前位置存在时 +blockly.block.placement_carving_mask=在由%1雕刻工具切割出的每一个位置 +blockly.block.placement_environment_scan=向%2的方向扫描最多%1个方块,直到条件%3满足 +blockly.block.placement_environment_scan_advanced=当条件%4为true时,最多向%2方向扫描%1个方块直到满足条件%3 +blockly.block.height_provider_biased_to_bottom=在最小值%1,最大值%2,均匀范围%3内随机选取高度(偏向于底部) +blockly.block.height_provider_constant=恒定高度:%1 +blockly.block.height_provider_trapezoid=在最小值%1,最大值%2,均匀范围%3内随机选取高度(等腰梯形分布) +blockly.block.height_provider_uniform=在最小值%1,最大值%2内随机选取高度(均匀分布) +blockly.block.height_provider_very_biased_to_bottom=在最小值%1,最大值%2,均匀范围%3内随机选取高度 +blockly.block.height_provider_weighted=来自加权列表的随机高度: +blockly.block.height_provider_weighted.empty=加权列表不能为空 +blockly.block.int_provider_biased_to_bottom=在最小值%1,最大值%2内逐渐递减的随机整数 +blockly.block.int_provider_clamped=%1在最小值%2,最大值%3内 +blockly.block.int_provider_clamped_normal=在最小值%3,最大值%4,平均数%1,偏差%2内选取随机整数(正态分布) +blockly.block.int_provider_constant=常数:%1 +blockly.block.int_provider_uniform=在最小值%1和最大值%2内的随机整数 +blockly.block.int_provider_weighted=来自加权列表的随机整数提供程序: +blockly.block.int_provider_weighted.empty=加权列表不能为空 blockly.block.ore_mutator.container=矿石目标列表 blockly.block.ore_mutator.input=矿石目标 -blockly.block.ore_mutator.try=尝试\: -blockly.block.ore_mutator.else_try=否则尝试\: -blockly.block.ore_target=矿石目标 - 将 %1 替换为 %2 -blockly.block.placement_count=重复 %1 次 -blockly.block.placement_count_on_every_layer=在区块内随机朝 XZ 方向移动,在每个垂直层上重复 %1 次 -blockly.block.placement_heightmap=在高度图上 %1 -blockly.block.placement_in_square=在区块内随机的 XZ 位置 -blockly.block.placement_noise_based_count=基于噪声计数,计数噪声比为\:%1 噪声比例系数为\:%2 噪声偏移量为\:%3 -blockly.block.placement_noise_threshold_count=如果当前位置的生物群系噪声低于 %1,则重复 %2 次,否则重复 %3 次 -blockly.block.placement_height_range=在高度 %1 -blockly.block.placement_height_triangular=在最小值\:%1 和最大值\:%2 之间三角分布 -blockly.block.placement_height_uniform=在最小值\:%1 和最大值\:%2 之间均匀分布 -blockly.block.placement_offset=水平偏移 %1 垂直偏移 %2 -blockly.block.placement_rarity=有 %1 分之 1 的几率 -blockly.block.placement_surface_relative_threshold=仅限当前高度相对于高度图 %1 位于最小值 %2 和最大值 %3 之间时 -blockly.block.placement_surface_water_depth=仅当地表水在当前位置最多为 %1 块深时 +blockly.block.ore_mutator.try=尝试: +blockly.block.ore_mutator.else_try=否则尝试: +blockly.block.ore_target=矿石目标 - 将%1替换为%2 +blockly.block.placement_count=重复%1次 +blockly.block.placement_count_on_every_layer=在区块内随机朝XZ方向移动,在每个垂直层上重复%1次 +blockly.block.placement_heightmap=在高度图上%1 +blockly.block.placement_in_square=在区块内随机的XZ位置 +blockly.block.placement_noise_based_count=基于噪声计数,计数噪声比为%1,噪声比例系数为%2,噪声偏移为%3 +blockly.block.placement_noise_threshold_count=如果当前位置的生物群系噪声低于%1,则重复%2次,否则重复%3次 +blockly.block.placement_height_range=在高度:%1 +blockly.block.placement_height_triangular=在最小值%1和最大值%2内随机选取整数(三角分布) +blockly.block.placement_height_uniform=在最小值%1和最大值%2内随机选取高度(均匀分布) +blockly.block.placement_offset=水平偏移量%1,垂直偏移量%2 +blockly.block.placement_rarity=有%1分之1的几率 +blockly.block.placement_surface_relative_threshold=仅限当前高度相对于高度图%1位于最小值%2和最大值%3内时 +blockly.block.placement_surface_water_depth=仅当地表水在当前位置最多为%1块深时 blockly.block.root_placer_none=没有根 blockly.block.rule_test_always_true=True -blockly.block.rule_test_block_match=方块是 %1 -blockly.block.rule_test_blockstate_match=方块状态为 %1 -blockly.block.rule_test_random_block_match=方块有 %2 的几率是 %1 -blockly.block.rule_test_random_blockstate_match=方块状态有 %2 的几率为 %1 -blockly.block.rule_test_tag_match=方块在标签 %1 中 -blockly.block.state_provider_randomized_int=%4 将方块状态 %1 的整数属性 %2 设置为 %3 -blockly.block.state_provider_weighted=%1 来自权重列表的随机方块状态\: +blockly.block.rule_test_block_match=方块是%1 +blockly.block.rule_test_blockstate_match=方块状态为%1 +blockly.block.rule_test_random_block_match=方块有%2的几率是%1 +blockly.block.rule_test_random_blockstate_match=方块状态有%2的几率为%1 +blockly.block.rule_test_tag_match=方块在标签%1中 +blockly.block.state_provider_randomized_int=%4被设置为%3的方块状态%1的整数属性%2 +blockly.block.state_provider_weighted=%1来自加权列表的随机方块状态: blockly.block.state_provider_weighted.empty=权重列表不能为空 -blockly.block.tree_decorator_alter_ground=用 %1 作为树木附近的地面 -blockly.block.tree_decorator_beehive=有 %1 的几率带蜂巢的树 -blockly.block.tree_decorator_cocoa=有 %1 的几率树干带可可果的树 -blockly.block.tree_decorator_leave_vine=有 %1 的几率树叶带藤蔓的树 +blockly.block.tree_decorator_alter_ground=用%1作为树木附近的地面 +blockly.block.tree_decorator_beehive=有%1的几率带蜂巢的树 +blockly.block.tree_decorator_cocoa=有%1的几率树干带可可果的树 +blockly.block.tree_decorator_leave_vine=有%1的几率树叶带藤蔓的树 blockly.block.tree_decorator_trunk_vine=树干藤蔓 blockly.block.tree_decorator_mutator.container=树木装饰列表 blockly.block.tree_decorator_mutator.input=树木装饰 -blockly.block.vertical_anchor_above_bottom=仅当地表水在当前位置最多为 %1 块深时 -blockly.block.vertical_anchor_absolute=Y \= %1 -blockly.block.vertical_anchor_below_top=世界顶部下方的 %1 个方块 +blockly.block.vertical_anchor_above_bottom=仅当地表水在当前位置最多为%1块深时 +blockly.block.vertical_anchor_absolute=Y\=%1 +blockly.block.vertical_anchor_below_top=世界顶部下方的%1个方块 blockly.block.geode_crystal_mutator.container=紫水晶列表 blockly.block.geode_crystal_mutator.input=紫水晶 -blockly.block.weighted_list.weight=权重\: -blockly.block.weighted_list.entry=高度\: +blockly.block.weighted_list.weight=权重: +blockly.block.weighted_list.entry=高度: blockly.block.weighted_list_mutator.container=条目列表 blockly.block.weighted_list_mutator.input=高度 -blockly.block.aitasks_container=AI 任务 / 目标列表 +blockly.block.aitasks_container=AI任务/目标列表 blockly.block.aitasks_container.tip=列表中位于高位置的任务具有高优先级 -blockly.block.aitasks_container.tooltip=这是 AI 任务列表的开始点 +blockly.block.aitasks_container.tooltip=这是AI任务列表的开始点 blockly.block.cmdargs_start=命令入口点 -blockly.block.advancement_trigger=授予玩家这个进度 -blockly.block.advancement_trigger.tooltip=连接一个触发这个进度的触发器方块 +blockly.block.advancement_trigger=授予玩家该进度 +blockly.block.advancement_trigger.tooltip=连接一个触发该进度的触发器方块 blockly.block.feature_container=配置地物 blockly.block.feature_container.tooltip=这是要定义的地物类型 blockly.block.feature_container.with_placement=将其放在 blockly.block.set_var=设置 -blockly.block.set_to=至\: +blockly.block.set_to=至: blockly.block.get_var=获取 -blockly.block.var_for_entity=对于实体\: +blockly.block.var_for_entity=对于实体: blockly.block.entity_from_deps=事件/目标实体 blockly.block.source_entity_from_deps=源实体 blockly.block.immediate_source_entity_from_deps=直接源实体 blockly.block.entity_iterator=实体迭代器 blockly.block.entity_none=无实体 blockly.block.damagesource_from_deps=提供的伤害源 -blockly.block.damagesource_from_type=伤害源的类型为 %1 -blockly.block.damagesource_from_type_cause=由 %2 造成的 %1 伤害源 -blockly.block.damagesource_from_type_cause_directcause=由 %2 造成的 %1 伤害源,为直接伤害\:%3 -blockly.block.damagesource_get_direct_entity=%2 获取造成直接伤害 %1 的实体 -blockly.block.damagesource_get_entity=%2 获取造成伤害 %1 的实体 -blockly.block.damagesource_get_exhaustion=获取 %1 造成的伤害 -blockly.block.damagesource_is_cause_creative=%1 伤害是处于创造模式玩家造成的 -blockly.block.damagesource_is_indirect=%1 为间接伤害 -blockly.block.damagesource_scales_with_difficulty=%1 造成的伤害会随难度减少 +blockly.block.damagesource_from_type=伤害源的类型为%1 +blockly.block.damagesource_from_type_cause=由%2造成的%1伤害源 +blockly.block.damagesource_from_type_cause_directcause=由%2造成的%1伤害源,为直接伤害:%3 +blockly.block.damagesource_get_direct_entity=%2获取造成直接伤害%1的实体 +blockly.block.damagesource_get_entity=%2获取造成伤害%1的实体 +blockly.block.damagesource_get_exhaustion=获取%1减少的饱食度 +blockly.block.damagesource_is_cause_creative=%1伤害是处于创造模式玩家造成的 +blockly.block.damagesource_is_indirect=%1为间接伤害 +blockly.block.damagesource_is_tagged_in=%1在伤害类型中被标记为%2 +blockly.block.damagesource_scales_with_difficulty=%1造成的伤害会随难度减少 blockly.block.direction_from_deps=触发方向/面 blockly.block.direction_unspecified=任何方向 -blockly.block.java_code=自定义代码片段\: +blockly.block.java_code=自定义代码片段: blockly.block.logic_ternary_op.if=如果 blockly.block.logic_ternary_op.then=然后 blockly.block.logic_ternary_op.else=否则 @@ -1401,82 +1447,88 @@ blockly.block.controls_while=(重复执行) 当 blockly.block.math_from_text=从文本中获取数字 blockly.block.text_replace.replace=将 blockly.block.text_replace.with=替换为 -blockly.block.text_replace.of=于字符串\: +blockly.block.text_replace.of=于字符串: blockly.block.text_contains.in=文本 -blockly.block.text_contains.check=包含\: -blockly.block.text_substring.substring=获取子字符串\: -blockly.block.text_substring.from=取从位置\: -blockly.block.text_substring.to=到位置\: -blockly.block.text_format_number.format=格式化数字\: -blockly.block.text_format_number.as=格式化序列\: -blockly.block.text_is_empty=文本为空\: -blockly.block.text_trim=修剪文本\: -blockly.block.text_uppercase=大写文本\: -blockly.block.text_lowercase=小写文本\: -blockly.block.text_starts_with.in=文本\: -blockly.block.text_starts_with.check=开始于\: -blockly.block.text_ends_with.in=文本\: -blockly.block.text_ends_with.check=结束于\: +blockly.block.text_contains.check=包含: +blockly.block.text_substring.substring=获取子字符串: +blockly.block.text_substring.from=取从位置: +blockly.block.text_substring.to=到位置: +blockly.block.text_format_number.format=格式化数字: +blockly.block.text_format_number.as=格式化序列: +blockly.block.text_is_empty=文本为空: +blockly.block.text_trim=修剪文本: +blockly.block.text_uppercase=大写文本: +blockly.block.text_lowercase=小写文本: +blockly.block.text_starts_with.in=文本: +blockly.block.text_starts_with.check=开始于: +blockly.block.text_ends_with.in=文本: +blockly.block.text_ends_with.check=结束于: blockly.block.time_as_string=获取时间作为文本 blockly.block.time_to_formatted_string=作为格式化文本的时间 blockly.block.time_day_of_week=当前日期(星期) -blockly.block.time_day_of_month=当前月份中的日期 -blockly.block.time_hours=当前时刻(时) -blockly.block.time_minutes=当前时刻(分) -blockly.block.time_month=当前月份 -blockly.block.time_seconds=当前时刻(秒) -blockly.block.time_year=当前年份 +blockly.block.time_day_of_month=当前月份(号数) +blockly.block.time_hours=当前时刻(小时) +blockly.block.time_minutes=当前时刻(分钟) +blockly.block.time_month=当前时刻(月份) +blockly.block.time_seconds=当前时刻(秒数) +blockly.block.time_year=当前时刻(年份) blockly.block.time_week_of_year=当前日期(周次) blockly.block.return=返回 -blockly.block.return_actionresulttype=返回的操作结果\: -blockly.block.return_blockstate=返回的方块状态\: -blockly.block.return_direction=返回的方向\: -blockly.block.return_entity=返回的实体\: -blockly.block.return_itemstack=返回的物品栈\: -blockly.block.return_logic=返回的逻辑\: -blockly.block.return_number=返回的数字\: +blockly.block.return_actionresulttype=返回的操作结果: +blockly.block.return_blockstate=返回的方块状态: +blockly.block.return_direction=返回的方向: +blockly.block.return_entity=返回的实体: +blockly.block.return_itemstack=返回的物品栈: +blockly.block.return_logic=返回的逻辑: +blockly.block.return_number=返回的数字: blockly.block.return_string=返回的文本: -blockly.block.registryname_to_mcitem=获取注册名为 %1 的物品,如果获取失败则将获得空气 -blockly.block.registryname_to_mcitemblock=获取注册名为 %1 的方块,如果获取失败则将获得空气 +blockly.block.registryname_to_mcitem=获取注册名为%1的物品,如果获取失败则将获得空气 +blockly.block.registryname_to_mcitemblock=获取注册名为%1的方块,如果获取失败则将获得空气 blockly.field_ai_condition_selector.tooltip.empty=双击以选择条件 -blockly.field_ai_condition_selector.tooltip.start_condition=启动条件\: -blockly.field_ai_condition_selector.tooltip.continue_condition=继续条件\: -blockly.field_ai_condition_selector.conditions=条件\: +blockly.field_ai_condition_selector.tooltip.start_condition=启动条件: +blockly.field_ai_condition_selector.tooltip.continue_condition=继续条件: +blockly.field_ai_condition_selector.conditions=条件: blockly.field_data_list_selector.tooltip.empty=双击以选择一个值 blockly.field_mcitem_selector.tooltip.empty_block=双击以选择一个方块 blockly.field_mcitem_selector.tooltip.empty_block_item=双击以选择一个方块或物品 -blockly.extension.data_list_selector.no_entry=没有选取可用的项目 -blockly.extension.placement_count.count=输入的数字必须在 0 至 256 之间 -blockly.extension.placement_count_on_every_layer.count=输入的数字必须在 0 至 256 之间 -blockly.extension.placement_offset.xz=垂直偏移必须介于-16到16之间 -blockly.extension.placement_offset.y=垂直偏移必须介于-16和16之间 +blockly.extension.data_list_selector.no_entry=没有条目被选取 +blockly.extension.placement_count.count=输入的数字必须在0至256内 +blockly.extension.placement_count_on_every_layer.count=输入的数字必须在0至256内 +blockly.extension.placement_offset.xz=水平偏移量必须介于-16到16内 +blockly.extension.placement_offset.y=垂直偏移量必须介于-16和16内 blockly.extension.state_provider_randomized_int.value=整数属性的数值不能为负 -blockly.extension.feature_delta.size=三角洲大小必须介于0到16之间 -blockly.extension.feature_delta.rimSize=边沿大小必须介于0到16之间 -blockly.extension.feature_replace_sphere.radius=半径必须介于0和12之间 +blockly.extension.feature_delta.size=三角洲尺寸必须介于0到16内 +blockly.extension.feature_delta.rimSize=边沿尺寸必须介于0到16内 +blockly.extension.feature_replace_sphere.radius=半径必须介于0和12内 blockly.extension.feature_block_column_simple.height=高度必须至少为0 -blockly.extension.feature_tree_pine.foliage_height=树叶高度必须介于 0 到 24 之间 -blockly.extension.feature_tree_spruce.radius=树叶半径必须介于 0 到 24 之间 -blockly.extension.feature_tree_spruce.trunk_height=暴露的树干高度必须介于 0 到 24 之间 +blockly.extension.feature_tree_pine.foliage_height=树叶高度必须介于0到24内 +blockly.extension.feature_tree_spruce.radius=树叶半径必须介于0到24内 +blockly.extension.feature_tree_spruce.trunk_height=暴露的树干高度必须介于0到24内 action.workspace.export_mod=导出模组用于发布... action.workspace.export_mod_deobf=导出反混淆模组... -dialog.workspace.export.message=当您发布您自己的模组时请时刻注意以下几点\:

您被允许在您自己的协议和许可证下分发。
需要遵守因为您作为一个 Minecraft 模组作者而适用的其它法律、许可证、条款
(例如 Minecraft 最终用户许可协议、Minecraft Forge 最终用户许可协议...).
欢迎您在您的模组页面提及与推荐 MCreator。

考虑向 MCreator 开发人员捐赠 以便维护和开发这个软件,以及提供给您支持和更新。谢谢! +dialog.workspace.export.message=当您发布您自己的模组时请注意以下几点:

您被允许在您自己的协议和许可证下分发。
需要遵守因为您作为一个Minecraft模组作者而适用的其它法律、许可证、条款
(例如Minecraft最终用户许可协议、Minecraft Forge最终用户许可协议...).
.很欢迎您在您的模组页面提及与推荐MCreator。

考虑向MCreator开发人员捐赠以便维护和开发该软件,以及提供给您支持和更新。谢谢! dialog.workspace.export.title=导出并发布模组 dialog.workspace.export_deobf.title=导出反混淆模组 -dialog.workspace.export_deobf.message=反混淆后的模组不能在标准安装下的 Minecraft 中使用。
仅当您有充分理由使用它时才使用这个选项。

是否使用这个选项? +dialog.workspace.export_deobf.message=反混淆后的模组不能在标准安装下的Minecraft中使用。
仅当您有充分理由使用它时才使用该选项。

是否使用该选项? dialog.workspace.export.option.donate_and_export=导出模组并捐赠 dialog.workspace.export.option.just_export=导出模组而不捐赠 -dialog.workspace.export.error.message=您的工作区包含不编译和导出的模组元素。
未导出模组文件。 +dialog.workspace.export.error.message=您的工作区包含无法编译和导出的模组元素。
未导出模组文件。 dialog.workspace.export.error.title=导出失败 -action.workspace.import_from_zip=从 ZIP 压缩文件中导入为工作区... +action.workspace.import_from_zip=从ZIP压缩文件中导入为工作区... action.workspace.new=新建工作区… action.workspace.open=打开工作区… -action.workspace.export_workspace=将工作区导出到可共享的 ZIP 压缩文件... -action.workspace.export_workspace_include_run=将工作区导出为可共享的 ZIP 压缩文件(带 run 目录)... -dialog.workspace.export_workspace.compressing=压缩工作区 +action.workspace.export_workspace=将工作区导出到ZIP压缩文件... +action.workspace.export_workspace_include_run=将工作区导出为可共享的ZIP压缩文件(带run目录)... +dialog.workspace.export_workspace.compressing=正在压缩工作区 dialog.workspace.export_workspace.title=工作区导出 dialog.workspace.export_backup=工作区备份 action.workspace.regenerate_and_build=重新生成代码并构建 +tag.type.items=物品 +tag.type.blocks=方块 +tag.type.entities=实体 +tag.type.functions=函数 +tag.type.biomes=生物群系 +tag.type.damage_types=伤害类型 modelement.unknown=未知 modelement.achievement=进度 modelement.armor=盔甲 @@ -1484,6 +1536,7 @@ modelement.biome=生物群系 modelement.block=方块 modelement.code=自定义元素 modelement.command=命令 +modelement.damagetype=伤害类型 modelement.dimension=维度 modelement.enchantment=附魔 modelement.gamerule=游戏规则 @@ -1514,13 +1567,14 @@ modelement.tag=标签 modelement.tool=工具 modelement.villagerprofession=村民职业 modelement.villagertrade=村民交易项 -modelement.unknown.description=这个模组元素类型不再存在 -modelement.achievement.description=进度是当用户执行所需的操作时显示的文本。 +modelement.unknown.description=该模组元素类型不存在 +modelement.achievement.description=进度是当用户需要执行一些所需的操作时显示的文本。 modelement.armor.description=盔甲是一件可以被穿上并给予您保护的物品。 modelement.biome.description=生物群系是一个具有特定地理特征、植被颜色、天气和动物的区域。 -modelement.block.description=方块是 Minecraft 中的基本单位,是一个可放置在世界内的 3D 对象。 +modelement.block.description=方块是Minecraft中的基本单位,是一个可放置在世界内的3D对象。 modelement.code.description=自定义元素是使用代码编辑器中的自定义代码定义的。 -modelement.command.description=命令是一组文本,当用户将其发送至聊天时触发操作。 +modelement.command.description=命令是一组当用户将其发送至聊天框时会触发操作的文本。 +modelement.damagetype.description=伤害类型决定了如何对实体施加伤害。 modelement.dimension.description=维度是一个生成的世界,具有自己的属性并且可以具有传送门。 modelement.enchantment.description=附魔是一种修饰,在应用时会为物品增加特殊能力。 modelement.gamerule.description=游戏规则是游戏中特定世界的可自定义的参数 @@ -1529,17 +1583,17 @@ modelement.fluid.description=流体是可以充当液体或气体的特殊方块 modelement.food.description=食物是一种可以食用的物品,并且可以给予您状态效果。 modelement.fuel.description=燃料是可以用作熔炉燃料的方块或物品。 modelement.function.description=函数允许玩家在调用时执行命令集。 -modelement.gui.description=GUI 是一个可显示的面板,包含诸如按钮、标签、储存槽等元素…… +modelement.gui.description=GUI是一个可显示的面板,包含诸如按钮、标签、槽位等元素…… modelement.itemextension.description=物品扩展是能够添加到物品的一组额外属性。 modelement.item.description=物品是一个可以被手持的对象。您可以使用它,并且它可以有耐久度。 modelement.keybind.description=按键绑定为客户端添加新的快捷键,当它被按下或者释放时会执行您所设置的逻辑。 modelement.loottable.description=战利品表表示应在容器中自然生成哪些物品。 -modelement.livingentity.description=生物是具有活动能力,AI任务,生命值等的实体。 +modelement.livingentity.description=生物是具有活动能力,AI任务,生命值等的实体 modelement.musicdisc.description=音乐唱片是一种可以放入唱片机中播放的物品。 -modelement.overlay.description=叠加层功能添加了可以在游戏界面中看到的额外 GUI 叠加层。 -modelement.painting.description=画是一张图片,您可以使用画的物品将其放在墙上 +modelement.overlay.description=叠加层功能添加了可以在游戏界面中看到的额外GUI叠加层。 +modelement.painting.description=画是一张图片,您可以使用画的物品形式将其放在墙上 modelement.particle.description=粒子是一种特殊的图形效果,在某些事件触发时产生。 -modelement.plant.description=植物是一种在草地上生成的方块,可以捡起,也可以生长。 +modelement.plant.description=植物是一种在草方块上生成的方块,可以捡起,也可以生长。 modelement.potioneffect.description=药水效果是一种可以给予实体的效果。 modelement.potion.description=药水是一种可以给予实体效果的物品。 modelement.procedure.description=流程是具有可选全局触发器的图形化设计的事件。 @@ -1552,59 +1606,59 @@ modelement.tool.description=工具是可以帮助您比用手更快,更好地 modelement.villagerprofession.description=村民职业决定了一个村民的服装和他的交易内容 modelement.villagertrade.description=村民交易项可以添加了一个新的交易项至某个村民职业 preferences.section.ui=用户界面 -preferences.section.ui.description=在此处您可以更改用户界面设置和参数。您需要重启 MCreator 以生效 +preferences.section.ui.description=在此处您可以更改用户界面设置和参数,需要重启MCreator以生效。 preferences.section.backups=备份与保存 -preferences.section.backups.description=在此处您可以更改与工作区项目文件自动保存和自动备份的设置 +preferences.section.backups.description=在此处您可以更改与工作区项目文件自动保存和自动备份的设置。 preferences.section.blockly=可视化编辑器 preferences.section.blockly.description=在此处您可以修改流程、叠加层和生物编辑器中使用的可视化编辑器偏好设置。 preferences.section.ide=代码编辑器 -preferences.section.ide.description=在此处您可以修改内建代码编辑器设置 -preferences.section.gradle=Gradle 与运行 -preferences.section.gradle.description=在此处您可以调整 Gradle 系统设置,已进行的 Gradle 任务不会使用新设置 +preferences.section.ide.description=在此处您可以修改内置代码编辑器设置 +preferences.section.gradle=Gradle与运行 +preferences.section.gradle.description=在此处您可以调整Gradle系统设置,已进行的Gradle任务不会使用新设置。 preferences.section.bedrock=基岩版设置 preferences.section.bedrock.description=在此处您可以调整基岩版支持的设置 preferences.section.notifications=通知 -preferences.section.notifications.description=在此处您可以更改 MCreator 的通知设置。 +preferences.section.notifications.description=在此处您可以更改MCreator的通知设置。 preferences.ui.language=界面语言 -preferences.ui.language.description=警告\:翻译由社区贡献,可能丢失、不准确或错误。
您需要重新启动 MCreator 以应用更改。 -preferences.ui.useMacOSMenuBar=使用默认的 macOS 菜单栏 -preferences.ui.useMacOSMenuBar.description=在 macOS 设备上,使用位于屏幕顶部的默认菜单栏。 +preferences.ui.language.description=警告:翻译由社区贡献,可能缺失、不准确或错误。
需要重启MCreator以应用更改。 +preferences.ui.useMacOSMenuBar=使用默认的macOS菜单栏 +preferences.ui.useMacOSMenuBar.description=在macOS设备上,使用位于屏幕顶部的默认菜单栏。 preferences.ui.useNativeFileChooser=使用默认系统文件选择器 -preferences.ui.useNativeFileChooser.description=选择以使用默认系统文件选择器。目前仅在 Windows 上工作。 +preferences.ui.useNativeFileChooser.description=选择以使用默认系统文件选择器,目前仅在Windows上工作。 preferences.ui.interfaceAccentColor=界面强调色 preferences.ui.interfaceAccentColor.description=界面元素的主要颜色,如果更改,软件需要重启 -preferences.ui.backgroundSource=UI 背景来源 -preferences.ui.backgroundSource.description=这个选项指定了用于加载 MCreator UI 背景的源。 +preferences.ui.backgroundSource=UI背景源 +preferences.ui.backgroundSource.description=该选项指定了用于加载MCreator UI背景的源。 preferences.ui.interfaceTheme=界面主题 -preferences.ui.interfaceTheme.description=用于界面的颜色主题,如更改则需重新启动软件。
警告\:浅色主题是实验性功能,可能不总是外观良好或可用。 +preferences.ui.interfaceTheme.description=用于界面的颜色主题,如果更改,软件需要重启。
警告:浅色主题是实验性功能,可能不总是外观良好或可用。 preferences.ui.aaText=启用文本抗锯齿 -preferences.ui.aaText.description=建议启用这个功能。禁用这个功能将禁用字体抗锯齿。 +preferences.ui.aaText.description=建议启用该功能,禁用该功能将禁用字体抗锯齿。 preferences.ui.textAntialiasingType=抗锯齿类型 preferences.ui.textAntialiasingType.description=除非字体渲染效果不佳,请将其保持默认(开)。 preferences.ui.expandSectionsByDefault=默认展开界面的扩展部分 preferences.ui.expandSectionsByDefault.description=选中以显示默认被折叠的界面,保持展开状态 -preferences.ui.use2DAcceleration=在 GPU 上使用 OpenGL 加速 2D 渲染 -preferences.ui.use2DAcceleration.description=这个选项可提升 2D 用户界面的渲染性能,但有可能在一些电脑上变得更差
重启 MCreator 以生效 +preferences.ui.use2DAcceleration=在GPU上使用OpenGL加速2D渲染 +preferences.ui.use2DAcceleration.description=该选项可提升2D用户界面的渲染性能,但有可能在一些电脑上变得更差。
需要重启MCreator以生效 preferences.ui.autoReloadTabs=自动重载选项卡内的数据 -preferences.ui.autoReloadTabs.description=如果您在切换选项卡时有性能问题,请禁用这个选项 +preferences.ui.autoReloadTabs.description=如果您在切换选项卡时有性能问题,请禁用该选项 preferences.ui.remindOfUnsavedChanges=模组元素编辑器未保存时的警告 preferences.ui.remindOfUnsavedChanges.description=如果启用,关闭未保存的模组元素编辑器将建议保存它们 -preferences.ui.discordRichPresenceEnable=启用 Discord 状态监视 -preferences.ui.discordRichPresenceEnable.description=启用时,Discord 应用将显示您正在使用 MCreator +preferences.ui.discordRichPresenceEnable=启用Discord状态监视 +preferences.ui.discordRichPresenceEnable.description=启用时,Discord应用将显示您正在使用MCreator preferences.backups.workspaceAutosaveInterval=工作区自动保存间隔(秒) -preferences.backups.workspaceAutosaveInterval.description=这个参数定义当工作区有更改时应该多久被自动保存
工作区在 MCreator 关闭时也会自动保存 +preferences.backups.workspaceAutosaveInterval.description=该参数定义当工作区有更改时应该多久被自动保存
工作区在MCreator关闭时也会自动保存 preferences.backups.automatedBackupInterval=工作区自动备份间隔(分钟) -preferences.backups.automatedBackupInterval.description=这个参数定义工作区多久被备份一次。
数值越小,备份越多但历史间隔也会更短。 +preferences.backups.automatedBackupInterval.description=该参数定义工作区多久被备份一次。
数值越小,备份越多但历史间隔也会更短。 preferences.backups.numberOfBackupsToStore=存储的备份数量 -preferences.backups.numberOfBackupsToStore.description=这个数字定义多少被存储的备份数量
如果产生了比这个个数多的备份,则最早的会被丢弃 +preferences.backups.numberOfBackupsToStore.description=该数字定义多少被存储的备份数量
如果产生了比该个数多的备份,则最早的会被丢弃 preferences.backups.backupOnVersionSwitch=在使用新版本打开工作区时进行完整备份 -preferences.backups.backupOnVersionSwitch.description=如果启用,MCreator 将会在新版本打开工作区前对工作区做一个完整备份 +preferences.backups.backupOnVersionSwitch.description=如果启用,MCreator将会在新版本打开工作区前对工作区做一个完整备份 preferences.blockly.blockRenderer=方块渲染器 preferences.blockly.blockRenderer.description=可视化编辑器中的方块渲染器(显示样式) preferences.blockly.useSmartSort=使用智能流程块排序 preferences.blockly.useSmartSort.description=如果启用,流程块将被智能排序,否则将按字母顺序排序。 preferences.blockly.expandCategories=展开块 -preferences.blockly.expandCategories.description=此选项定义了在打开可视化编辑器时嵌入的块类别是否应该展开,
通常情况下默认使用 Default 。需要重启 MCreator 才能生效。 +preferences.blockly.expandCategories.description=此选项定义了在打开可视化编辑器时嵌入的块类别是否应该展开,
通常情况下默认使用Default,需要重启MCreator以生效。 preferences.blockly.enableComments=允许注释 preferences.blockly.enableComments.description=启用以对可视化编辑器的内容进行注释 preferences.blockly.enableCollapse=让可视化编辑器内容可折叠 @@ -1616,69 +1670,69 @@ preferences.blockly.maxScale.description=可视化编辑器最大支持的缩放 preferences.blockly.minScale=最小缩放范围 preferences.blockly.minScale.description=可视化编辑器最小支持的缩放范围(%) preferences.blockly.scaleSpeed=缩放速度 -preferences.blockly.scaleSpeed.description=无缩放 - 100, 放大 > 100, 缩小 < 100 +preferences.blockly.scaleSpeed.description=无缩放-100,放大>100,缩小<100 preferences.blockly.legacyFont=使用经典字体 preferences.blockly.legacyFont.description=如果可视化编辑器的文字渲染故障,启用它 preferences.blockly.transparentBackground=启用透明背景 -preferences.blockly.transparentBackground.description=这使可视化编辑器背景透明,在其后面传递 UI 背景, 目前只能在 Windows 上工作。
此参数是实验性的,可能导致错误的外观或降低可视化编辑器的性能。 +preferences.blockly.transparentBackground.description=这使可视化编辑器背景透明,在其后面传递UI背景, 目前只能在Windows上工作。
此参数是实验性的,可能导致错误的外观或降低可视化编辑器的性能。 preferences.blockly.colorSaturation=块颜色饱和度 -preferences.blockly.colorSaturation.description=此选项决定可视化编辑器的块饱和度。增加数值让块更加独特。默认值为 45。 +preferences.blockly.colorSaturation.description=此选项决定可视化编辑器的块饱和度,增加数值让块更加独特。默认值为45。 preferences.blockly.colorValue=块颜色亮度 -preferences.blockly.colorValue.description=此选项决定可视化编辑器的块亮度。增加其数值让块更独特。默认值为 65。 +preferences.blockly.colorValue.description=此选项决定可视化编辑器的块亮度,增加其数值让块更独特。默认值为65。 preferences.ide.editorTheme=代码编辑器颜色主题 -preferences.ide.fontSize=代码编辑器字体大小 -preferences.ide.fontSize.description=代码编辑器中的初始字体大小 +preferences.ide.fontSize=代码编辑器字体尺寸 +preferences.ide.fontSize.description=代码编辑器中的初始字体尺寸 preferences.ide.autocomplete=启用自动补全 preferences.ide.autocompleteMode=智能下拉模式 preferences.ide.autocompleteMode.description=手动触发器仅由 Ctrl + 空格自动完成,智能模式会根据上下文触发它 preferences.ide.autocompleteDocWindow=启用智能文档窗口 -preferences.ide.autocompleteDocWindow.description=在智能列表窗口旁显示额外 Java 文档窗口 +preferences.ide.autocompleteDocWindow.description=在智能列表窗口旁显示额外Java文档窗口 preferences.ide.lineNumbers=在编辑器中显示行数 preferences.ide.errorInfoEnable=在编辑器中显示信息栏 preferences.ide.errorInfoEnable.description=显示错误、警告和当前搜索结果行 preferences.gradle.compileOnSave=保存模组元素时自动构建工作区 -preferences.gradle.compileOnSave.description=除非您知道您为什么需要这个,否则保持启用,不然模组中的错误可能不会被提醒 -preferences.gradle.passLangToMinecraft=向测试用 Minecraft 客户端传递语言设置 -preferences.gradle.passLangToMinecraft.description=如果启用,将会在每次启动 Minecraft 时将其语言设置为与 MCreator 一致的语言。 +preferences.gradle.compileOnSave.description=除非您知道您为什么需要,否则保持启用,不然模组中的错误可能不会被提醒 +preferences.gradle.passLangToMinecraft=向测试用Minecraft客户端传递语言设置 +preferences.gradle.passLangToMinecraft.description=如果启用,将会在每次启动Minecraft时将其语言设置为与MCreator一致的语言。 preferences.gradle.Xms=初始内存 -preferences.gradle.Xms.description=Gradle 任务开始时预留的内存(单位\: MB) +preferences.gradle.Xms.description=Gradle任务开始时预留的内存(单位:MB) preferences.gradle.Xmx=最大内存 -preferences.gradle.Xmx.description=Gradle 允许使用的最大内存(单位\:MB) -preferences.gradle.offline=在离线模式下运行 Gradle -preferences.gradle.offline.description=如果您已经在有网络连接的情况下成功完成工作区的第一次构建,但现在需要在无网络的情况下开发模组,可选中这个复选框。
只在您无法连接网络或网络不通畅时使用有意义!
启用这个选项可能会来一些构建问题,所以请只在必要时使用!
+preferences.gradle.Xmx.description=Gradle允许使用的最大内存(单位:MB) +preferences.gradle.offline=在离线模式下运行Gradle +preferences.gradle.offline.description=如果您已经在有网络连接的情况下成功完成工作区的第一次构建,但现在需要在无网络的情况下开发模组,可选中该复选框。
只在您无法连接网络或网络不通畅时使用有意义!
启用该选项可能会来一些构建问题,所以请只在必要时使用!
preferences.bedrock.silentReload=静默重载已打开的基岩版应用 -preferences.bedrock.silentReload.description=请记住,静默重载不会保存任何未保存的世界进程,因这个仅将其与测试世界一起使用 +preferences.bedrock.silentReload.description=请记住,静默重载不会保存任何未保存的世界进程,因此仅将其与测试世界一起使用 preferences.notifications.openWhatsNextPage=当新工作区配置好后显示“接下来如何做?” -preferences.notifications.openWhatsNextPage.description=取消这个复选框可禁止该页面在创建新工作区时自动弹出 -preferences.notifications.checkAndNotifyForUpdates=在 MCreator 启动时通知新的主要版本 -preferences.notifications.checkAndNotifyForUpdates.description=如果您不想收到新的重大更新通知,请取消选择这个复选框。
注意\:即使您取消选择该复选框,如果发现了可用的更新,在 MCreator 启动时仍会有小通知。 -preferences.notifications.checkAndNotifyForPatches=在 MCreator 启动时提示补丁更新 -preferences.notifications.checkAndNotifyForPatches.description=如果不想收到补丁更新通知,请取消这个复选框。
注意\:即使您取消选择该复选框,如果发现了可用的更新,在 MCreator 启动时仍会有小通知。 +preferences.notifications.openWhatsNextPage.description=取消该复选框可禁止该页面在创建新工作区时自动弹出 +preferences.notifications.checkAndNotifyForUpdates=在MCreator启动时通知新的主要版本 +preferences.notifications.checkAndNotifyForUpdates.description=如果您不想收到新的重大更新通知,请取消选择该复选框。
注意:即使您取消选择该复选框,如果发现了可用的更新,在MCreator启动时仍会有小通知。 +preferences.notifications.checkAndNotifyForPatches=在MCreator启动时提示补丁更新 +preferences.notifications.checkAndNotifyForPatches.description=如果不想收到补丁更新通知,请取消该复选框。
注意:即使您取消选择该复选框,如果发现了可用的更新,在MCreator启动时仍会有小通知。 preferences.notifications.showWebsiteNewsNotifications=启动时显示网站新闻通知 -preferences.notifications.showWebsiteNewsNotifications.description=启用时,工作区选择器将在 MCreator 启动时显示关于新网站新闻的通知 +preferences.notifications.showWebsiteNewsNotifications.description=启用时,工作区选择器将在MCreator启动时显示关于新的网站新闻的通知 preferences.notifications.checkAndNotifyForPluginUpdates=通知社区插件更新 -preferences.notifications.checkAndNotifyForPluginUpdates.description=如果您不想收到第三方插件更新通知,请取消选中这个项。
记住,如果第三方插件更新服务器已经关闭或连接缓慢, 这个选项可能会减慢MCreator 启动的速度,并且会允许
第三方插件在 MCreator 启动期间访问它们的更新服务器。 +preferences.notifications.checkAndNotifyForPluginUpdates.description=如果您不想收到第三方插件更新通知,请取消选中该项。
记住,如果第三方插件更新服务器已经关闭或连接缓慢, 该选项可能会减慢MCreator启动的速度,并且会允许
第三方插件在MCreator启动期间访问它们的更新服务器。 preferences.themes.select_theme=选择使用的主题 -preferences.themes.select_theme.description=该主题包含 MCreator 使用的资源。 +preferences.themes.select_theme.description=该主题包含MCreator使用的资源。 dialog.workspace.regenerate_and_build.title=重新生成代码并构建 dialog.workspace.regenerate_and_build.progress.removing_autogenerated_code=正在删除自动生成的代码 -dialog.workspace.regenerate_and_build.progress.loading_mod_elements=预加载模组元素 +dialog.workspace.regenerate_and_build.progress.loading_mod_elements=预加载模组元素中 dialog.workspace.regenerate_and_build.progress.regenerating_code=正在重新生成代码 -dialog.workspace.regenerate_and_build.error.failed_to_import.message=导入模组元素 {0} 失败

MCreator 无法导入工作区文件中定义的元素,
因为它缺少模组定义。 MCreator 将跳过那个模组。
如果没有某些模组元素,您的工作区可能无法正常工作。

已跳过的模组元素\: {1} -dialog.workspace.regenerate_and_build.error.failed_to_import.title=导入失败 +dialog.workspace.regenerate_and_build.error.failed_to_import.message=导入模组元素{0}失败

MCreator无法导入工作区文件中定义的元素,
因为它缺少模组定义。 MCreator将跳过那个模组。
如果没有某些模组元素,您的工作区可能无法正常工作。

已跳过的模组元素:{1} +dialog.workspace.regenerate_and_build.error.failed_to_import.title=导入错误 dialog.workspace.regenerate_and_build.error.failed_to_import.option.skip_one=跳过模组元素 dialog.workspace.regenerate_and_build.error.failed_to_import.option.skip_all=跳过所有 -dialog.workspace.regenerate_and_build.warning.skipped_import_of.message=MCreator 跳过导入了 {0} 模组元素,因为模组定义丢失。

工作区可能无法正常工作。
这个错误是由您导入的工作区文件损坏造成的。 +dialog.workspace.regenerate_and_build.warning.skipped_import_of.message=MCreator跳过了对{0}模组元素的导入,因为其模组定义丢失。

工作区可能无法正常工作。
该错误是由您导入的工作区文件损坏造成的。 dialog.workspace.regenerate_and_build.warning.skipped_import_of.title=导入错误 -dialog.workspace.regenerate_and_build.warning.elements_with_locked_code.message=这个工作区包含已锁定代码的模组元素。

如果 Minecraft 版本已更改或代码有任何其他的更改,
您的工作区可能无法编译,因为 MCreator 不会自动更新已锁定代码的模组元素。

在这种情况下,您需要对已锁定代码的模组元素进行手动更新和修复错误。 +dialog.workspace.regenerate_and_build.warning.elements_with_locked_code.message=该工作区包含已锁定代码的模组元素。

如果Minecraft版本已更改或代码有任何其他的更改,
您的工作区可能无法编译,因为MCreator不会自动更新已锁定代码的模组元素。

在这种情况下,您需要对已锁定代码的模组元素进行手动更新和修复错误。 dialog.workspace.regenerate_and_build.warning.elements_with_locked_code.title=导入提醒 dialog.workspace.regenerate_and_build.progress.regenerating_workspace_and_resources=正在重新生成工作区基础与资源 dialog.workspace.regenerate_and_build.progress.reformating_code=正在格式化代码与组织导出 dialog.workspace.regenerate_and_build.progress.clean_up_workspace=正在清理工作区 -dialog.workspace.regenerate_and_build.progress.rebuilding_workspace=正在重新构建 Gradle 工作区 +dialog.workspace.regenerate_and_build.progress.rebuilding_workspace=正在重新构建Gradle工作区 dialog.workspace.import_from_zip.importing=从 ZIP 压缩文件中导入工作区 -dialog.workspace.import_from_zip.extracting=导出工作区 -dialog.workspace.import_from_zip.failed_message=您尝试导入的文件不是
合法可分发的 MCreator ZIP 工作区文件。 +dialog.workspace.import_from_zip.extracting=正在导出工作区 +dialog.workspace.import_from_zip.failed_message=您尝试导入的文件不是
合法可分发的MCreator ZIP工作区文件。 dialog.workspace.import_from_zip.failed_title=无效的工作区 action.workspace.settings=工作区设置... dialog.workspace.settings.workspace_switch.title=工作区切换 @@ -1689,105 +1743,105 @@ dialog.workspace.settings.workspace_package_startdot=包名不能以点开头 dialog.workspace.settings.workspace_package_enddot=包名不能以点结尾 dialog.workspace.settings.workspace_package_pattern=包名只能包含英文字母、数字、下划线和点。 dialog.workspace.settings.workspace_package_avoid_numbers=避免使用包名中的数字 -dialog.workspace.settings.workspace_nopic_default=没有图片 / 默认图片 -dialog.workspace.settings.workspace_modid=模组 ID -action.gradle.run_gradle_task=执行 Gradle 任务... -action.gradle.run_gradle_task.dialog.instructions=输入 Gradle 任务命令\:
只有当您知道这个工具是干什么时再使用它 -dialog.gradle.run_gradle_task.title=运行 Gradle 任务 +dialog.workspace.settings.workspace_nopic_default=没有图片/默认图片 +dialog.workspace.settings.workspace_modid=模组ID +action.gradle.run_gradle_task=执行Gradle任务... +action.gradle.run_gradle_task.dialog.instructions=输入Gradle任务命令:
只有当您知道该工具是干什么时再使用它 +dialog.gradle.run_gradle_task.title=运行Gradle任务 action.workspace.edit_creative_tab_order=编辑元素在创造模式物品栏选项卡中的顺序... action.workspace.resources.import_structure=导入结构... -action.workspace.resources.import_structure_from_minecraft=从 Minecraft 导入结构... -dialog.workspace.resources.import_structure_from_minecraft.message=请选择要导入的结构
您需要去测试用 Minecraft 客户端创建结构
使用结构方块,结构将会显示在这个列表里。 +action.workspace.resources.import_structure_from_minecraft=从Minecraft导入结构... +dialog.workspace.resources.import_structure_from_minecraft.message=请选择要导入的结构
您需要去测试用Minecraft客户端创建结构
使用结构方块,结构将会显示在该列表里。 dialog.workspace.resources.import_structure_from_minecraft.title=导入结构 -action.workspace.resources.import_sound=导入 ogg 声音... -action.workspace.resources.import_java_model=导入 Java 3D 模型... -dialog.workspace.resources.import_java_model.version_notice.message=为 Minecraft >\= 1.15 制作的 Java 模型将不适用于低于1.15的版本(如1.14.4)!

要在 Blockbench 中设置模型版本,请转到文件 -> 项目 -> 导出版本。
设置新导出版本后,将模型重新导出到 Java 文件并用 MCreator 导入。 -dialog.workspace.resources.import_java_model.version_notice_new.message=该生成器支持以下 Java 模型版本\:

{0}


确保您的 Java 模型代码是适用于这个 Minecraft 版本的。
您在其它生成器中可能能够再利用这个模型,
取决于其它生成器是否声明对这个模型的 Minecraft 版本兼容。 -dialog.workspace.resources.import_java_model.version_notice.title=Java 模型导入 -dialog.workspace.version_switch.java_model_warning=看起来您的工作区使用了 Java 模型。

您切换的生成器需要不同的 Minecraft 版本。为了无损转换,
您需要以相同的名称导出目标生成器的 Minecraft 版本的模型并再次导入。
MCreator 之后将在生成器之间切换时使用正确版本的模型。

您需要重新导出以下格式不受这个生成器支持的 Java 模型\:

{0} -dialog.workspace.version_switch.java_model_warning.title=Java 模型警告 -dialog.workspace.resources.import_java_model.invalid_model_name.message=您的模型名称 {0} 不是一个有效的 Java 名称!

自定义生物模型名称不能包含空格、以数字开头或包含非 ASCII 字母。

模型名称不是文件名,但是是模型的 Java 代码(模型类名称) 中的名称!
解决这个问题的最好办法是在导出模型之前在您的 3D 建模软件中正确定义模型名称。 +action.workspace.resources.import_sound=导入ogg声音... +action.workspace.resources.import_java_model=导入Java 3D模型... +dialog.workspace.resources.import_java_model.version_notice.message=为Minecraft>\=1.15制作的Java模型将不适用于低于1.15的版本(如1.14.4)!

要在Blockbench中设置模型版本,请转到文件->项目->导出版本。
设置新导出版本后,将模型重新导出到Java文件并用MCreator导入。 +dialog.workspace.resources.import_java_model.version_notice_new.message=该生成器支持以下Java模型版本:

{0}


确保您的Java模型代码是适用于该Minecraft版本的。
您在其它生成器中可能能够再利用该模型,
取决于其它生成器是否声明对该模型的Minecraft版本兼容。 +dialog.workspace.resources.import_java_model.version_notice.title=Java模型导入 +dialog.workspace.version_switch.java_model_warning=看起来您的工作区使用了Java模型。

您切换的生成器需要不同的Minecraft版本。为了无损转换,
您需要以相同的名称导出目标生成器的Minecraft版本的模型并再次导入。
MCreator之后将在生成器间切换时使用正确版本的模型。

您需要重新导出以下格式不受该生成器支持的Java模型:

{0} +dialog.workspace.version_switch.java_model_warning.title=Java模型警告 +dialog.workspace.resources.import_java_model.invalid_model_name.message=您的模型名称{0}不是一个有效的Java名称!

自定义生物模型名称不能包含空格、以数字开头或包含非ASCII字母。

模型名称不是文件名,但是是模型的Java代码(模型类名称)中的名称!
解决该问题的最好办法是在导出模型之前在您的3D建模软件中正确定义模型名称。 dialog.workspace.resources.import_java_model.invalid_model_name.title=无效的模型名称 -dialog.workspace.resources.import_java_model.invalid_model_format.message=您的模型不是有效的 Java 模型。

确保所有的模型部分都有一个有效的 Java 名称
是具有有效语法的 Java 模型。 +dialog.workspace.resources.import_java_model.invalid_model_format.message=您的模型不是有效的Java模型。

确保所有的模型部分都有一个有效的Java名称
是具有有效语法的Java模型。 dialog.workspace.resources.import_java_model.invalid_model_format.title=无效模型 -dialog.workspace.resources.import_java_model.geckolib_needed.title=模型需要外部 API -dialog.workspace.resources.import_java_model.geckolib_needed.message=这个模型需要 Geckolib 库来支持动画并正确构建。
创建一个没有 Geckolib 动画或手动启用 Geckolib 依赖关系的模型并修改实体渲染代码。 -dialog.workspace.resources.import_java_model.incompatible_model.title=不兼容的 Java 模型 -dialog.workspace.resources.import_java_model.incompatible_model.message=MCreator 检测到您导入的模型与当前生成器不兼容。

请确保您正在从模型制作器中导出 Minecraft 版本和映射类型正确的 Java 模型。 -dialog.workspace.resources.import_java_model.model_already_exists.message=名称为 {0} 的 Java 模型已存在。
确保代码中的模型名称不同,然后重新导入。 +dialog.workspace.resources.import_java_model.geckolib_needed.title=模型需要外部API +dialog.workspace.resources.import_java_model.geckolib_needed.message=该模型需要Geckolib库来支持动画并正确构建。
创建一个没有Geckolib动画或手动启用Geckolib依赖项的模型并修改实体渲染代码。 +dialog.workspace.resources.import_java_model.incompatible_model.title=不兼容的Java模型 +dialog.workspace.resources.import_java_model.incompatible_model.message=MCreator检测到您导入的模型与当前生成器不兼容。

请确保您正在从模型制作器中导出Minecraft版本和映射类型正确的Java模型。 +dialog.workspace.resources.import_java_model.model_already_exists.message=名为{0}的Java模型已存在。
确保代码中的模型名称不同,然后重新导入。 dialog.workspace.resources.import_java_model.model_already_exists.title=模型已存在 -action.workspace.resources.import_json_model=导入 JSON 3D 模型... -action.workspace.resources.import_obj_mtl_model=导入 OBJ+MTL 3D 模型... -dialog.workspace.resources.import_obj_mtl_model.message=您需要注意 OBJ 模型渲染器有一些限制\:

- 只有非常基本的 MTL 材质被支持
- UV 贴图只能有 0 到 1 的 vt
- UV 纹理需要为 PNG 格式
- 确保 .mtl 和 .obj 文件只含有 ASCII 字符
- 确保 .mtl 和 .obj 文件名是小写的并且不包含任何空白符
- OBJ 文件需要指向一个正确的材质纹理

如果可能,使用 JSON 模型而不是 OBJ 模型会工作得更好。 -dialog.workspace.resources.import_obj_mtl_model.title=导入 OBJ 模型 -dialog.workspace.open_failed_message=工作区打开失败!
您正在尝试打开的工作区适用于更新版本的 MCreator!
您不能在旧版本中打开这个工作区。 请更新您的 MCreator 到最新版本。 +action.workspace.resources.import_json_model=导入JSON 3D模型... +action.workspace.resources.import_obj_mtl_model=导入OBJ+MTL 3D模型... +dialog.workspace.resources.import_obj_mtl_model.message=您需要注意OBJ模型渲染器有一些限制:

-只有非常基本的MTL材质被支持
-UV贴图只能有0到1的vt
-UV纹理需要为PNG格式
-确保.mtl和.obj文件只含有ASCII字符
- 确保.mtl 和.obj文件名是小写的并且不包含任何空格
-OBJ文件需要指向一个正确的材质

如果可能,使用JSON模型而不是OBJ模型会工作得更好。 +dialog.workspace.resources.import_obj_mtl_model.title=导入OBJ模型 +dialog.workspace.open_failed_message=工作区打开失败!
您正在尝试打开的工作区适用于更新版本的MCreator!
您不能在旧版本中打开该工作区。 请更新您的MCreator到最新版本。 dialog.workspace.open_failed_title=工作区打开失败 -dialog.workspace.got_corrupted_message=您正在打开的工作区已损坏,可能是由于 MCreator 意外关闭。

但不用担心
MCreator 会自动备份工作区,以便从备份中恢复它。

选择您想要从下拉列表中恢复工作区的备份并点击确定
+dialog.workspace.got_corrupted_message=您正在打开的工作区已损坏,可能是由于MCreator意外关闭。

但不用担心
MCreator会自动备份工作区,以便从备份中恢复它。

选择您想要从下拉列表中恢复工作区的备份并单击确定。
dialog.workspace.got_corrupted_title=从备份恢复工作区 -dialog.workspace.is_not_valid_message=工作区打开失败!
您要打开的工作区不是一个有效的 MCreator 工作区或已损坏!

如果您没有更改文件夹名称并看到本提示,意味着工作区文件可能已损坏。
工作区文件备份存储在 <workspace folder>/.mcreator/workspaceBackups

消息\: +dialog.workspace.is_not_valid_message=工作区打开失败!
您要打开的工作区不是一个有效的MCreator工作区或已损坏!

如果您没有更改文件夹名称并看到本提示,意味着工作区文件可能已损坏。
工作区文件备份存储在 <workspace folder>/.mcreator/workspaceBackups

消息: dialog.workspace.is_not_valid_title=工作区打开失败 -dialog.workspace.unknown_generator_message=该工作区使用不支持的生成器类型\:{0}
为该工作区选择一个支持的生成器。 +dialog.workspace.unknown_generator_message=该工作区使用不支持的生成器类型:{0}
为该工作区选择一个支持的生成器。 dialog.workspace.unknown_generator_title=不支持的生成器 action.check_for_updates=检查更新 action.check_for_plugin_updates=检查插件更新 -action.open_java_edition_dir=打开 Java 版安装目录 -dialog.open_java_edition_dir.fail.message=打开 Java 版安装目录失败。 +action.open_java_edition_dir=打开Java版安装目录 +dialog.open_java_edition_dir.fail.message=打开Java版安装目录失败。 dialog.open_java_edition_dir.fail.title=目录打开失败 action.open_bedrock_edition_dir=打开基岩版应用目录 dialog.open_bedrock_edition_dir.fail.message=打开基岩版安装目录失败! dialog.open_bedrock_edition_dir.fail.title=目录打开失败 -action.show_data_list.entity=实体 ID 列表 +action.show_data_list.entity=实体ID列表 action.show_data_list.item_block=物品与方块列表 -action.show_data_list.particle=粒子效果 ID 列表 +action.show_data_list.particle=粒子效果ID列表 action.show_data_list.sound=声音列表 action.show_data_list.burn_time=物品燃烧时间列表 action.show_data_list.vanilla_loot_table=原版战利品表 -action.about=关于 MCreator +action.about=关于MCreator dialog.about.option.website=网站 dialog.about.option.support=支持 dialog.about.option.eula=最终用户许可协议 dialog.about.option.third_party_licenses=第三方许可 dialog.about.option.donate=捐赠 -dialog.about.message=MCreator {0}
完整版本为\: {1}
最新版本为\: {2}

工作区元素格式版本\: {3}

当前的操作系统架构为\:{4}位系统({5})
运行 MCreator 的 JVM 架构为\:{6}位 JVM

由 Pylo 和社区贡献者开发。
由 Pylo 主持和维护(https\://www.pylo.co)。

点击下面读取 MCreator 和第三方许可。


-dialog.about.title=关于 MCreator -dialog.about.third_party.message=第三方许可协议位于 license 文件夹
在 MCreator 的安装目录。 +dialog.about.message=MCreator {0}
正式版为:{1}
最新版为:{2}

工作区元素格式版本:{3}

当前的操作系统架构为:{4}位系统({5})
运行MCreator的JVM架构为:{6}位JVM

由Pylo和社区贡献者开发。
由Pylo主持和维护(https\://www.pylo.co)。

单击下面读取MCreator和第三方许可。


+dialog.about.title=关于MCreator +dialog.about.third_party.message=第三方许可位于MCreator的安装目录中的license文件夹。
dialog.about.third_party.title=第三方许可协议 -dialog.about.eula.title=MCreator 最终用户许可协议 +dialog.about.eula.title=MCreator最终用户许可协议 action.keyboard_shortcuts=键盘快捷键 action.knowledge_base=知识库 action.donate=捐赠 -action.procedure.enter_procedure_name=输入新流程的名称\: +action.procedure.enter_procedure_name=输入新流程的名称: action.procedure.new_procedure_dialog_title=新建流程 action.procedure.create_procedure=创建流程 action.procedure.match_dependencies=仅显示与提供的数据依赖项匹配的流程。
您可以通过创建一个新的流程元素来添加新的流程。 action.procedure.missing_dependencies= - 缺少依赖项 -minmaxspinner.min=最小值\: -minmaxspinner.max=最大值\: +minmaxspinner.min=最小值: +minmaxspinner.max=最大值: elementgui.common.texture=纹理 elementgui.common.add_bounding_box=添加碰撞箱 elementgui.common.gen_from_block_model=从方块模型生成 -elementgui.common.gen_from_block_model_failed.message=无法为所选的 JSON 模型生成碰撞箱!
请确保您使用的模型是一个有效的 Minecraft JSON 模型。 +elementgui.common.gen_from_block_model_failed.message=生成所选的JSON模型碰撞箱失败!
请确保您使用的模型是一个有效的Minecraft JSON模型 elementgui.common.gen_from_block_model_failed.title=损坏的模型 elementgui.common.bounding_box_entries=碰撞箱条目 elementgui.common.custom_bounding_box=启用自定义碰撞箱 -elementgui.common.disable_offset=禁用碰撞箱随方块模型而偏移\:
如果“随机模型偏移”未设置为“禁用”则可选 +elementgui.common.disable_offset=禁用碰撞箱随方块模型而偏移:
如果“随机模型偏移”未设置为“禁用”则可选 elementgui.common.subtract=减 -elementgui.common.creative_tab=创造模式物品栏选项卡\: -elementgui.common.enchantability=附魔能力\: -elementgui.common.repair_items=修复物品\: +elementgui.common.creative_tab=创造模式物品栏选项卡: +elementgui.common.enchantability=附魔能力: +elementgui.common.repair_items=修复物品: elementgui.common.enable=选中以启用 -elementgui.common.default_sound_type=原版声音集\: -elementgui.common.custom_sound_type=自定义声音集\: +elementgui.common.default_sound_type=原版声音集: +elementgui.common.custom_sound_type=自定义声音集: elementgui.common.properties_sound=声音属性 -elementgui.common.soundtypes.break_sound=破坏声音\: -elementgui.common.soundtypes.step_sound=步行声音\: -elementgui.common.soundtypes.place_sound=放置声音\: -elementgui.common.soundtypes.hit_sound=受伤声音\: -elementgui.common.soundtypes.fall_sound=摔落声音\: +elementgui.common.soundtypes.break_sound=破坏声音: +elementgui.common.soundtypes.step_sound=步行声音: +elementgui.common.soundtypes.place_sound=放置声音: +elementgui.common.soundtypes.hit_sound=受伤声音: +elementgui.common.soundtypes.fall_sound=摔落声音: elementgui.common.error_sound_empty_null=自定义声音不能为空 -elementgui.common.hardness=硬度\: -elementgui.common.resistance=抗性\: -elementgui.common.luminance=亮度\: +elementgui.common.hardness=硬度: +elementgui.common.resistance=抗性: +elementgui.common.luminance=亮度: elementgui.common.light_opacity=光不透明度 elementgui.common.page_triggers=触发器 elementgui.common.page_bounding_boxes=碰撞箱 @@ -1796,61 +1850,61 @@ elementgui.common.page_properties=属性 elementgui.common.page_advanced_properties=高级属性 elementgui.common.page_inventory=物品栏 elementgui.common.page_generation=生成 -elementgui.common.name_in_gui=游戏内名称\: -elementgui.common.rarity=稀有度\: -elementgui.common.max_stack_size=最大堆叠数量\: -elementgui.common.item_model=物品模型\:
选择要使用的物品模型。支持的文件\:JSON,OBJ -elementgui.common.fire_spread_speed=火势传播速度\:
保留0以进行原版处理 -elementgui.common.emissive_rendering=启用发光渲染(发光)\: -elementgui.common.tick_rate=刻更新速率\:
设置为0以禁用自动更新刻 +elementgui.common.name_in_gui=游戏内名称: +elementgui.common.rarity=稀有度: +elementgui.common.max_stack_size=最大堆叠数量: +elementgui.common.item_model=物品模型:
选择要使用的物品模型。支持的文件:JSON,OBJ +elementgui.common.fire_spread_speed=火势传播速度:
保留0以进行原版处理 +elementgui.common.emissive_rendering=启用发光渲染(发光): +elementgui.common.tick_rate=刻更新速率:
设置为0以禁用自动更新刻 elementgui.common.use_table_loot_drops=使用战利品表掉落物品 -elementgui.common.use_loot_table_for_drop=使用战利品表掉落物品\:
如果选中这个选项,则需要定义战利品表掉落物品 -elementgui.common.creative_pick_item=选取物品\:
留空为预设创造模式选取物品 -elementgui.common.custom_drop=自定义掉落物\:
留空使其掉落本身 -elementgui.common.drop_amount=掉落数量\: -elementgui.common.ai_path_node_type=AI 路径节点类型\: -elementgui.common.offset_type=随机模型位移\: -elementgui.common.restrict_to_biomes=被限制的生物群系\:
留空表示没有生物群系被限制 +elementgui.common.use_loot_table_for_drop=使用战利品表掉落物品:
如果选中该选项,则需要定义战利品表掉落物品 +elementgui.common.creative_pick_item=选取物品:
留空为预设创造模式选取物品 +elementgui.common.custom_drop=自定义掉落物:
留空使其掉落本身 +elementgui.common.drop_amount=掉落数量: +elementgui.common.ai_path_node_type=AI路径节点类型: +elementgui.common.offset_type=随机模型位移: +elementgui.common.restrict_to_biomes=被限制的生物群系:
留空表示没有生物群系被限制 elementgui.common.properties_bonemeal=骨粉属性 elementgui.common.properties_general=通用属性 elementgui.common.properties_dropping=掉落属性 -elementgui.common.event_right_clicked_air=当右键点击空气时(实体的位置) -elementgui.common.event_right_clicked_block=当右键点击方块时(方块的位置) +elementgui.common.event_right_clicked_air=右击空气时(实体的位置) +elementgui.common.event_right_clicked_block=右击方块时(方块的位置) elementgui.common.event_on_neighbour_block_changes=当毗邻方块更新时 elementgui.common.event_on_update_tick=当游戏刻更新时 elementgui.common.event_on_crafted=当物品被合成或烧炼时 elementgui.common.event_on_block_placed_by=当方块被谁放置时 elementgui.common.event_on_random_update=客户端显示随机刻 elementgui.common.event_on_block_hit_by_projectile=当方块被抛射物击中时 -elementgui.common.event_is_bonemeal_target=骨粉可在这个方块使用时 +elementgui.common.event_is_bonemeal_target=骨粉可在该方块使用时 elementgui.common.event_bonemeal_success_condition=骨粉使用成功的条件 -elementgui.common.event_on_bonemeal_success=当骨粉成功使用时 -elementgui.common.tint_type=着色类型\:
支持\: X形纹理,单一纹理,草,JSON模型(带色调) +elementgui.common.event_on_bonemeal_success=骨粉成功使用时 +elementgui.common.tint_type=着色类型:
支持:X形纹理,单一纹理,草,JSON模型(带色调) elementgui.common.include=包含 -elementgui.common.exclude=排除 -elementgui.common.is_bonemealable=这个方块可以被骨粉催熟? +elementgui.common.exclude=不含 +elementgui.common.is_bonemealable=该方块可以被骨粉催熟? elementgui.common.special_information=特殊信息 -elementgui.advancement.name=进度 GUI 名称\: -elementgui.advancement.description=进度描述\: -elementgui.advancement.icon=进度图标\: -elementgui.advancement.background=进度背景\:
仅用于根进度 -elementgui.advancement.type=进度类型\: -elementgui.advancement.parent=进度父项\:
根进度显示为选项卡 -elementgui.advancement.show_toast=完成时弹出提示\: -elementgui.advancement.announce_to_chat=完成后发布聊天通知\: -elementgui.advancement.hide_if_not_completed=尚未完成时隐藏\: -elementgui.advancement.hide_display=隐藏进度显示\:
只用于"逻辑"进度,例如函数触发器 -elementgui.advancement.reward_xp=奖励所给的经验值\:
在玩家完成进度时给予 -elementgui.advancement.reward_functions=进度达成后执行的函数\:
-elementgui.advancement.reward_loot_tables=进度达成后奖励的战利品表\:
-elementgui.advancement.reward_recipes=进度达成后解锁的配方\:
+elementgui.advancement.name=进度GUI名称: +elementgui.advancement.description=进度描述: +elementgui.advancement.icon=进度图标: +elementgui.advancement.background=进度背景:
仅用于根进度 +elementgui.advancement.type=进度类型: +elementgui.advancement.parent=进度父项:
根进度显示为选项卡 +elementgui.advancement.show_toast=完成时弹出提示: +elementgui.advancement.announce_to_chat=完成后发布聊天通知: +elementgui.advancement.hide_if_not_completed=尚未完成时隐藏: +elementgui.advancement.hide_display=隐藏进度显示:
只用于"逻辑"进度,例如函数触发器 +elementgui.advancement.reward_xp=奖励所给的经验值:
在玩家完成进度时给予 +elementgui.advancement.reward_functions=进度达成后执行的函数:
+elementgui.advancement.reward_loot_tables=进度达成后奖励的战利品表:
+elementgui.advancement.reward_recipes=进度达成后解锁的配方:
elementgui.advancement.display_paramters=进度显示参数 -elementgui.advancement.logic=进度逻辑\: +elementgui.advancement.logic=进度逻辑: elementgui.advancement.cant_be_empty=进度名称不能为空 elementgui.advancement.must_have_description=进度必须有描述 elementgui.advancement.trigger_builder=进度触发器(使用流程处理更高级的使用情况) elementgui.advancement.need_trigger=该进度需要选择某种类型的触发器 ! -elementgui.advancement.trigger=进度触发器\:{0} +elementgui.advancement.trigger=进度触发器:{0} elementgui.armor.armor_helmet=启用头盔 elementgui.armor.armor_chestplate=启用胸甲 elementgui.armor.armor_leggings=启用护腿 @@ -1863,116 +1917,116 @@ elementgui.armor.advanced_helmet=高级头盔设置 elementgui.armor.advanced_chestplate=高级胸甲设置 elementgui.armor.advanced_leggings=高级护腿设置 elementgui.armor.advanced_boots=高级靴子设置 -elementgui.armor.supported_java=模型\:
支持类型\: JAVA +elementgui.armor.supported_java=模型:
支持类型:JAVA elementgui.armor.part_arm_left=左臂 elementgui.armor.part_arm_right=右臂 elementgui.armor.part_leg_left=左腿 elementgui.armor.part_leg_right=右腿 elementgui.armor.part_boot_left=左脚 elementgui.armor.part_boot_right=右脚 -elementgui.armor.texture=盔甲纹理\: -elementgui.armor.helmet_name=游戏内显示的头盔名称\: -elementgui.armor.chestplate_name=游戏中胸甲名称\: -elementgui.armor.leggings_name=游戏内显示的护腿名称\: -elementgui.armor.boots_name=游戏内显示的靴子名称\: -elementgui.armor.layer_texture=盔甲层纹理\:
如果列表为空,您需要先导入或创建盔甲纹理 -elementgui.armor.equip_sound=盔甲装备声音\: -elementgui.armor.max_damage_absorption=盔甲耐久度基数\: -elementgui.armor.damage_values=已消耗的耐久值(头盔, 胸甲, 护腿, 靴子)\: -elementgui.armor.toughness=盔甲韧性(默认为 0.0, 钻石材质为 2.0)\: -elementgui.armor.knockback_resistance=击退抗性(默认 0.0, 下界合金 0.1)\: +elementgui.armor.texture=盔甲纹理: +elementgui.armor.helmet_name=游戏内显示的头盔名称: +elementgui.armor.chestplate_name=游戏中显示的胸甲名称: +elementgui.armor.leggings_name=游戏内显示的护腿名称: +elementgui.armor.boots_name=游戏内显示的靴子名称: +elementgui.armor.layer_texture=盔甲层纹理:
如果列表为空,您需要先导入或创建盔甲纹理 +elementgui.armor.equip_sound=盔甲装备声音: +elementgui.armor.max_damage_absorption=盔甲耐久度基数: +elementgui.armor.damage_values=已消耗的耐久值(头盔, 胸甲, 护腿, 靴子): +elementgui.armor.toughness=盔甲韧性(默认为0.0, 钻石材质为2.0): +elementgui.armor.knockback_resistance=击退抗性(默认为0.0, 下界合金材质为0.1): elementgui.armor.need_texture=已启用的盔甲部件需要纹理 elementgui.armor.boots_need_name=该靴子需要一个名称 elementgui.armor.chestplate_needs_name=该胸甲需要一个名字 elementgui.armor.leggings_need_name=该护腿需要一个名称 elementgui.armor.helmet_needs_name=该头盔需要一个名称 elementgui.armor.armor_needs_texture=该盔甲需要一个纹理 -elementgui.armor.helmet={0} 头盔 -elementgui.armor.chestplate={0} 胸甲 -elementgui.armor.leggings={0} 护腿 -elementgui.armor.boots={0} 靴子 +elementgui.armor.helmet={0}头盔 +elementgui.armor.chestplate={0}胸甲 +elementgui.armor.leggings={0}护腿 +elementgui.armor.boots={0}靴子 elementgui.armor.piglin_neutral=盔甲是否让猪灵中立? elementgui.biome.custom_trees=自定义 elementgui.biome.vanilla_trees=原版 -elementgui.biome.generate_strongholds=在这个生物群系中生成末地要塞吗? -elementgui.biome.generate_mineshafts=在这个生物群系中生成废弃矿井吗? -elementgui.biome.generate_mineshafts_mesa=在这个生物群系中生成恶地矿井吗? -elementgui.biome.generate_pillager_outposts=在这个生物群系中生成掠夺者前哨站吗? -elementgui.biome.generate_village=生成村庄的类型\: -elementgui.biome.generate_mansions=在这个生物群系中生成林地府邸吗? -elementgui.biome.generate_jungle_temples=在这个生物群系中生成丛林神庙吗? -elementgui.biome.generate_desert_pyramids=在这个生物群系中生成沙漠神殿吗? -elementgui.biome.generate_swamp_huts=在这个生物群系中生成沼泽小屋吗? -elementgui.biome.generate_igloos=在这个生物群系中生成雪屋吗? -elementgui.biome.generate_monuments=在这个生物群系中生成海底神殿吗? -elementgui.biome.generate_shipwrecks=在这个生物群系中生成沉船吗? -elementgui.biome.generate_shipwrecks_beached=在这个生物群系中生成搁浅的沉船吗? -elementgui.biome.generate_ocean_ruins=在这个生物群系中生成海底废墟吗? -elementgui.biome.generate_buried_treasures=在这个生物群系中生成埋藏的宝藏吗? -elementgui.biome.generate_nether_bridges=在这个生物群系中生成下界要塞吗? -elementgui.biome.generate_nether_fossils=在这个生物群系中生成下界化石吗? -elementgui.biome.generate_bastion_remnants=在这个生物群系中生成堡垒遗迹吗? -elementgui.biome.generate_ruined_portals=生成废弃传送门,类型\: -elementgui.biome.generate_end_cities=在这个生物群系中生成末地城吗? +elementgui.biome.generate_strongholds=在该生物群系中生成末地要塞吗? +elementgui.biome.generate_mineshafts=在该生物群系中生成废弃矿井吗? +elementgui.biome.generate_mineshafts_mesa=在该生物群系中生成恶地矿井吗? +elementgui.biome.generate_pillager_outposts=在该生物群系中生成掠夺者前哨站吗? +elementgui.biome.generate_village=生成村庄的类型: +elementgui.biome.generate_mansions=在该生物群系中生成林地府邸吗? +elementgui.biome.generate_jungle_temples=在该生物群系中生成丛林神庙吗? +elementgui.biome.generate_desert_pyramids=在该生物群系中生成沙漠神殿吗? +elementgui.biome.generate_swamp_huts=在该生物群系中生成沼泽小屋吗? +elementgui.biome.generate_igloos=在该生物群系中生成雪屋吗? +elementgui.biome.generate_monuments=在该生物群系中生成海底神殿吗? +elementgui.biome.generate_shipwrecks=在该生物群系中生成沉船吗? +elementgui.biome.generate_shipwrecks_beached=在该生物群系中生成搁浅的沉船吗? +elementgui.biome.generate_ocean_ruins=在该生物群系中生成海底废墟吗? +elementgui.biome.generate_buried_treasures=在该生物群系中生成埋藏的宝藏吗? +elementgui.biome.generate_nether_bridges=在该生物群系中生成下界要塞吗? +elementgui.biome.generate_nether_fossils=在该生物群系中生成下界化石吗? +elementgui.biome.generate_bastion_remnants=在该生物群系中生成堡垒遗迹吗? +elementgui.biome.generate_ruined_portals=生成废弃传送门,类型: +elementgui.biome.generate_end_cities=在该生物群系中生成末地城吗? elementgui.biome.generate_overworld=在主世界中生成生物群系吗? elementgui.biome.generate_overworld_caves=在主世界洞穴中生成生物群系吗? elementgui.biome.generate_nether=在下界中生成生物群系吗? -elementgui.biome.raining_possibility=气候降雨或雪的可能性(范围从0到1)\: -elementgui.biome.temperature=气候温度\:
确定降雨或雪的类型 -elementgui.biome.trees_per_chunk=每区块内树的数量\:
设置为0则禁止生成树 -elementgui.biome.default_features=默认生物群系地物\:
-elementgui.biome.name=名称\: -elementgui.biome.ground_block=地面的方块\:
它应该被标记在 minecraft\:dirt 方块标签中 -elementgui.biome.undeground_block=地下的方块\:
它应该被标记在 minecraft\:dirt 方块标签中 -elementgui.biome.underwater_block=水下的方块\:
留空将使用地下方块作为水下方块。 -elementgui.biome.air_color=空气颜色\: -elementgui.biome.tree_shape=树的形状\: -elementgui.biome.tree_definition=树的定义\: -elementgui.biome.grass_color=草的颜色\: -elementgui.biome.foliage_color=树叶的颜色\: -elementgui.biome.water_color=水的颜色\: -elementgui.biome.water_fog_color=水雾颜色\: -elementgui.biome.minimal_tree_height=树最小的高度\: -elementgui.biome.stem_block=茎干\: -elementgui.biome.branch_block=枝叶\: -elementgui.biome.vines_block=藤蔓\: -elementgui.biome.fruits_block=果实\: +elementgui.biome.raining_possibility=气候降雨或雪的可能性(范围从0到1): +elementgui.biome.temperature=气候温度:
确定降雨或雪的类型 +elementgui.biome.trees_per_chunk=每区块内树的数量:
设置为0则禁止生成树 +elementgui.biome.default_features=默认生物群系地物:
+elementgui.biome.name=名称: +elementgui.biome.ground_block=地面的方块:
它应该被标记在minecraft\:dirt方块标签中 +elementgui.biome.undeground_block=地下的方块:
它应该被标记在minecraft\:dirt方块标签中 +elementgui.biome.underwater_block=水下的方块:
留空将使用地下方块作为水下方块。 +elementgui.biome.air_color=空气颜色: +elementgui.biome.tree_shape=树的形状: +elementgui.biome.tree_definition=树的定义: +elementgui.biome.grass_color=草的颜色: +elementgui.biome.foliage_color=树叶的颜色: +elementgui.biome.water_color=水的颜色: +elementgui.biome.water_fog_color=水雾颜色: +elementgui.biome.minimal_tree_height=树最小的高度: +elementgui.biome.stem_block=茎干: +elementgui.biome.branch_block=枝叶: +elementgui.biome.vines_block=藤蔓: +elementgui.biome.fruits_block=果实: elementgui.biome.sounds=生物群系音乐和声音 elementgui.biome.particles=生物群系环境粒子 -elementgui.biome.enable_particles=启用粒子效果\: -elementgui.biome.ambient_sound=环境声音\:
这个声音将不断在生物群系中播放 -elementgui.biome.mood_sound=气氛声音\:
在玩家在生物群系中至少延迟一段时间播放 -elementgui.biome.mood_sound_delay=气氛声音延迟(刻)\: -elementgui.biome.additions_sound=附加声音\:
偶尔播放的附加声声音果 -elementgui.biome.music=生物群系的音乐\:
在生物群系中随机播放音乐 -elementgui.biome.particle_type=粒子类型\: -elementgui.biome.particle_probability=粒子生成几率(每个刻的几率为百分比)\: +elementgui.biome.enable_particles=启用粒子效果: +elementgui.biome.ambient_sound=环境声音:
该声音将不断在生物群系中播放 +elementgui.biome.mood_sound=气氛声音:
在玩家在生物群系中至少延迟一段时间播放 +elementgui.biome.mood_sound_delay=气氛声音延迟(刻): +elementgui.biome.additions_sound=附加声音:
偶尔播放的附加声声音果 +elementgui.biome.music=生物群系的音乐:
在生物群系中随机播放音乐 +elementgui.biome.particle_type=粒子类型: +elementgui.biome.particle_probability=粒子生成几率(每个刻的几率为百分比): elementgui.biome.vanilla_features=原版地物 -elementgui.biome.custom_tree_properties=自定义的树特征 -elementgui.biome.spawn_entities=要在这个生物群系中生成的实体(如果自定义实体已经声明要在这个生物群系中生成,则不要在此处再次添加它)\:
注意\:自定义实体的附加生成条件仅在自定义实体本身处定义时才有效,在这个定义无效。 +elementgui.biome.custom_tree_properties=自定义树地物 +elementgui.biome.spawn_entities=要在该生物群系中生成的实体(如果自定义实体已经声明要在该生物群系中生成,则不要在此处再次添加它):
注意:自定义实体的附加生成条件仅在自定义实体本身处定义时才有效,在该定义无效。 elementgui.biome.general_properties=属性 elementgui.biome.effects=效果 elementgui.biome.features=地物 elementgui.biome.structures=结构 elementgui.biome.entity_spawning=实体生成 elementgui.biome.biome_generation=生成器 -elementgui.biome.gen_temperature=生物群系生成时的温度范围\: -elementgui.biome.gen_humidity=生物群系生成时的湿度范围\: -elementgui.biome.gen_continentalness=生物群系生成时的大陆范围\: -elementgui.biome.gen_erosion=生物群系生成时的侵蚀范围\: -elementgui.biome.gen_weirdness=生物群系奇异的噪声范围\: -elementgui.biome.coverage_estimate=世界表面覆盖估计\:
估计这个生物群系将覆盖多少世界表面 +elementgui.biome.gen_temperature=生物群系生成时的温度范围: +elementgui.biome.gen_humidity=生物群系生成时的湿度范围: +elementgui.biome.gen_continentalness=生物群系生成时的大陆范围: +elementgui.biome.gen_erosion=生物群系生成时的侵蚀范围: +elementgui.biome.gen_weirdness=生物群系奇异的噪声范围: +elementgui.biome.coverage_estimate=世界表面覆盖估计:
估计该生物群系将覆盖多少世界表面 elementgui.biome.needs_name=该生物群系需要一个名称 elementgui.block.enable_energy_storage=选中以启用能量存储 elementgui.block.enable_fluid_storage=选中以启用流体存储 -elementgui.block.has_inventory=为这个方块启用实体功能。如果您需要以下任何一项,请选中这个框\:
-可包含项目的方块,可与漏斗和/或红石比较器交互的方块
-可存储NBT数据标签的块
-具有储液或储能功能的方块 +elementgui.block.has_inventory=为该方块启用实体功能。如果您需要以下任何一项,请选中该框:
-可包含项目的方块,可与漏斗和/或红石比较器交互的方块
-可存储NBT数据标签的块
-具有储液或储能功能的方块 elementgui.block.event_on_block_added=放置方块时 -elementgui.block.event_on_block_destroyed_by_player=当方块被玩家破坏时 -elementgui.block.event_on_block_destroyed_by_explosion=当方块被爆炸破坏时 -elementgui.block.event_on_player_starts_destroy=当玩家开始破坏时 -elementgui.block.event_on_entity_collides=当实体在方块中碰撞时 -elementgui.block.event_on_entity_walks_on=当实体在方块上行走时 -elementgui.block.event_on_right_clicked=在方块上右键 +elementgui.block.event_on_block_destroyed_by_player=方块被玩家破坏时 +elementgui.block.event_on_block_destroyed_by_explosion=方块被爆炸破坏时 +elementgui.block.event_on_player_starts_destroy=玩家开始破坏时 +elementgui.block.event_on_entity_collides=实体在方块中碰撞时 +elementgui.block.event_on_entity_walks_on=实体在方块上行走时 +elementgui.block.event_on_right_clicked=右击方块时 elementgui.block.event_on_redstone_on=红石电源开启时 elementgui.block.event_on_redstone_off=红石电源关闭时 elementgui.block.event_placing_condition=方块有效的放置条件 @@ -1983,86 +2037,95 @@ elementgui.block.texture_place_front_side=正面/侧面 elementgui.block.texture_place_right=右侧 elementgui.block.texture_place_back=背面 elementgui.block.block_base_item_texture=方块基础(模型和行为)和(可选的)纹理 -elementgui.block.block_base=方块基础\:
大多数方块都应该保留在默认状态 -elementgui.block.item_texture=方块物品纹理\:
用于物品栏中的方块和在手上渲染的可选纹理 -elementgui.block.particle_texture=方块粒子纹理\:
方块破碎粒子的可选纹理 +elementgui.block.block_base=方块基础:
大多数方块都应该保留在默认状态 +elementgui.block.item_texture=方块物品纹理:
用于物品栏中的方块和在手上渲染的可选纹理 +elementgui.block.particle_texture=方块粒子纹理:
方块破碎粒子的可选纹理 elementgui.block.block_textures=方块纹理 -elementgui.block.transparency_type=纹理透明度类型\: -elementgui.block.has_trasparency=如果您的方块含有透明部分,请选中这个选项\: -elementgui.block.connected_sides=选中这个项以启用连接边\:
只应使用于透明方块。 -elementgui.block.fluid_overlay=选中这个项以隐藏在流体中时的流体纹理\: -elementgui.block.model=方块模型\:
支持\:内置,JSON,OBJ -elementgui.block.rotation_mode=方块旋转模式\:
选择这个方块应如何旋转 +elementgui.block.transparency_type=纹理透明度类型: +elementgui.block.has_trasparency=如果您的方块含有透明部分,请选中该选项: +elementgui.block.connected_sides=选中该项以启用连接边:
只应使用于透明方块。 +elementgui.block.fluid_overlay=选中该项以隐藏在流体中时的流体纹理: +elementgui.block.model=方块模型:
支持:内置,JSON,OBJ +elementgui.block.rotation_mode=方块旋转模式:
选择该方块应如何旋转 elementgui.block.enable_pitch=X轴旋转吗?
仅适用于水平旋转方块 -elementgui.block.is_waterloggable=方块是否可含水? \:
由非1x1x1形状的方块使用 +elementgui.block.is_waterloggable=方块是否可含水? :
由非1x1x1形状的方块使用 elementgui.block.block_tint=方块颜色 elementgui.block.is_item_tinted=方块物品是否应用色调?
如果勾选,方块在物品栏中也会应用色调。 -elementgui.block.bounding_block_min_x=最小X坐标\: -elementgui.block.bounding_block_max_x=最大X坐标\: -elementgui.block.bounding_block_min_y=最小Y坐标\: -elementgui.block.bounding_block_max_y=最大Y坐标\: -elementgui.block.bounding_block_min_z=最小Z坐标\: -elementgui.block.bounding_block_max_z=最大Z坐标\: +elementgui.block.bounding_block_min_x=最小X坐标: +elementgui.block.bounding_block_max_x=最大X坐标: +elementgui.block.bounding_block_min_y=最小Y坐标: +elementgui.block.bounding_block_max_y=最大Y坐标: +elementgui.block.bounding_block_min_z=最小Z坐标: +elementgui.block.bounding_block_max_z=最大Z坐标: elementgui.block.render_type=渲染类型和旋转(对于没有基础类型的方块) elementgui.block.transparency=透明度 -elementgui.block.material=材料\: -elementgui.block.slipperiness=光滑度\:
正常光滑度为 0.6 -elementgui.block.speed_factor=速度系数\:
正常速度系数是 1.0 -elementgui.block.jump_factor=跳跃系数\:
正常跳跃系数是 1.0 +elementgui.block.material=材料: +elementgui.block.slipperiness=光滑度:
正常光滑度为0.6 +elementgui.block.speed_factor=速度系数:
正常速度系数是1.0 +elementgui.block.jump_factor=跳跃系数:
正常跳跃系数是1.0 elementgui.block.has_gravity=受重力影响? elementgui.block.can_walk_through=可以穿过方块吗? -elementgui.block.harvest_tool=能够摧毁它的工具\: +elementgui.block.harvest_tool=能够破坏它的工具: elementgui.block.harvest_level=需要指定工具的挖掘等级破坏才会掉落物品: elementgui.block.requires_correct_tool=需要正确的工具以掉落物品? elementgui.block.is_unbreakable=该方块是否不可被破坏? elementgui.block.is_replaceable=是否可以替换? -elementgui.block.tick_randomly=启用随机刻\:
随全局随机刻系数进行随机刻 -elementgui.block.color_on_map=在地图上的颜色\: +elementgui.block.tick_randomly=启用随机刻:
随全局随机刻系数进行随机刻 +elementgui.block.color_on_map=在地图上的颜色: elementgui.block.can_plants_grow=植物可在该方块上种植? -elementgui.block.beacon_color_modifier=信标颜色修改器\: +elementgui.block.beacon_color_modifier=信标颜色修改器: elementgui.block.is_ladder=方块是否像梯子一样?
方块必须不占用空间才能正常工作。 -elementgui.block.enchantments_bonus=附魔能量加成\: -elementgui.block.flammability=方块易燃性\: -elementgui.block.push_reaction=被推动的反应\: +elementgui.block.enchantments_bonus=附魔能量加成: +elementgui.block.flammability=方块易燃性: +elementgui.block.push_reaction=被推动的反应: elementgui.block.properties_advanced_block=高级方块属性 -elementgui.block.bind_gui=绑定这个方块到图形界面\:
可选\:方块可以有容器,但没有图形界面。 -elementgui.block.bind_gui_open=右键打开绑定的界面\: -elementgui.block.inventory_size=物品栏大小(储存槽数量)\:
一般这个值设置为绑定的 GUI 的最大储存槽 ID + 1 -elementgui.block.drop_inventory_items=当方块被摧毁时,从物品栏中掉落物品\: -elementgui.block.comparator_data=启用方块比较器数据输出\: -elementgui.block.input_slots=禁用从以下位置取出\:
输入用逗号分隔的储存槽ID列表 -elementgui.block.output_slots=禁用放入以下位置\:
输入用逗号分隔的储存槽ID列表 +elementgui.block.bind_gui=绑定该方块到图形界面:
可选:方块可以有容器,但没有图形界面。 +elementgui.block.bind_gui_open=右击打开绑定的界面: +elementgui.block.inventory_size=物品栏大小(槽位数量):
一般该值设置为绑定的GUI的最大槽位ID + 1 +elementgui.block.drop_inventory_items=当方块被摧毁时,从物品栏中掉落物品: +elementgui.block.comparator_data=启用方块比较器数据输出: +elementgui.block.input_slots=禁用从以下位置取出:
输入用逗号分隔的槽位ID列表 +elementgui.block.output_slots=禁用放入以下位置:
输入用逗号分隔的槽位ID列表 elementgui.block.energy_storage=能量储存 elementgui.block.fluid_tank=流体储罐 -elementgui.block.enable_storage_energy=启用能量存储\: -elementgui.block.initial_energy=初始能量\: -elementgui.block.energy_max_capacity=最大能量\: -elementgui.block.energy_max_receive=最大能量接收\:
每次输入 -elementgui.block.energy_max_extract=最大能量提取\:
每次提取 -elementgui.block.enable_storage_fluid=启用流体存储\: -elementgui.block.fluid_capacity=最大流体容量\:
单位\:毫桶 -elementgui.block.fluid_restrictions=限制接受流体\:
空表示不限制。包括流动流体和静止流体 -elementgui.block.tile_entity_tip=注\:能源储存和流体储罐必须启用方块实体(nbt)才能运行。 +elementgui.block.enable_storage_energy=启用能量存储: +elementgui.block.initial_energy=初始能量: +elementgui.block.energy_max_capacity=最大能量: +elementgui.block.energy_max_receive=最大能量接收:
每次输入 +elementgui.block.energy_max_extract=最大能量提取:
每次提取 +elementgui.block.enable_storage_fluid=启用流体存储: +elementgui.block.fluid_capacity=最大流体容量:
单位:毫桶 +elementgui.block.fluid_restrictions=限制接受流体:
空表示不限制。包括流动流体和静止流体 +elementgui.block.tile_entity_tip=注:能源储存和流体储罐必须启用方块实体(nbt)才能运行。 elementgui.block.settings_inventory=物品栏设置 -elementgui.block.generate_feature=选中此项可在世界上生成矿石\: -elementgui.block.generation_shape=生成形状\: -elementgui.block.gen_replace_blocks=这个方块可以替换\: -elementgui.block.gen_chunck_count=每区块矿石组的平均数量\:
将这个值设定得太高(> 32)可能会导致游戏崩溃 -elementgui.block.gen_group_size=每组矿石的平均数量\:
将这个值设定得太高(> 32)可能会导致游戏崩溃 -elementgui.block.gen_height=生成高度\: +elementgui.block.generate_feature=选中此项可在世界上生成矿石: +elementgui.block.generation_shape=生成形状: +elementgui.block.gen_replace_blocks=该方块可以替换: +elementgui.block.gen_chunck_count=每区块矿石组的平均数量:
将该值设置得太高(> 32)可能会导致游戏崩溃 +elementgui.block.gen_group_size=每组矿石的平均数量:
将该值设置得太高(> 32)可能会导致游戏崩溃 +elementgui.block.gen_height=生成高度: elementgui.block.properties_redstone=红石属性 -elementgui.block.redstone_connect=红石是否连接到这个方块?
如仅需要能量运作则无需选中这个项 +elementgui.block.redstone_connect=红石是否连接到该方块?
如仅需要能量运作则无需选中该项 elementgui.block.emits_redstone=是否输出红石信号? -elementgui.block.redstone_power=红石信号强度\: +elementgui.block.redstone_power=红石信号强度: elementgui.common.value=数值 elementgui.block.error_block_must_have_name=方块必须有名称 elementgui.block.page_tile_entity=方块实体 elementgui.block.page_energy_fluid_storage=能量和流体存储 -elementgui.command.name=命令名称(不需要输入 /)\: -elementgui.command.type=类型\: -elementgui.command.permission_level=执行权限级别\:
命令运行的最低级别 +elementgui.command.name=命令名称(不需要输入 /): +elementgui.command.type=类型: +elementgui.command.permission_level=执行权限级别:
命令运行的最低级别 elementgui.command.warning.empty_string=命令不能为空的字符串 elementgui.command.arguments=命令参数和操作生成器 +elementgui.damagetype.damage_properties=伤害属性 +elementgui.damagetype.exhaustion=伤害降低的饱食度值:
默认值为0.1 +elementgui.damagetype.scaling=伤害量会随难度增加吗? +elementgui.damagetype.effects=受伤声音: +elementgui.damagetype.death_messages=死亡消息 +elementgui.damagetype.normal_death_message=一般死亡消息: +elementgui.damagetype.item_death_message=物品死亡消息:
当玩家被持有被命名物品杀死实体时 +elementgui.damagetype.player_death_message=额外死亡信息:
当玩家逃离实体时死亡时显示。 +elementgui.damagetype.error_empty_death_message=死亡消息不能为空 elementgui.dimension.can_player_respawn=可以在这里重生玩家 elementgui.dimension.has_fog=启用浓雾 elementgui.dimension.is_dark=关闭环境光源 @@ -2078,86 +2141,86 @@ elementgui.dimension.event_player_enters=当玩家进入维度时 elementgui.dimension.event_player_leaves=当玩家离开维度时 elementgui.dimension.event_can_make_portal=可以制作传送门 elementgui.dimension.event_can_travel_through_portal=可以通过传送门 -elementgui.dimension.world_gen_type=\ 世界基本类型\: -elementgui.dimension.biomes_in=这个维度中的生物群系\: -elementgui.dimension.main_filler_block=主要填充方块\:
主世界、下界、 末地 -elementgui.dimension.fluid_block=流体方块\:
主世界、下界、 末地 -elementgui.dimension.sleep_result=试图睡眠的结果\: -elementgui.dimension.fog_air_color=天空/雾色彩覆盖\:
保留“默认”以适应不同 Minecraft 版本的自行处理 -elementgui.dimension.enable_dimension_portal=启用维度传送门\: -elementgui.dimension.portal_frame_block=传送门框架方块\: -elementgui.dimension.portal_particles=传送门方块散发的粒子为\: -elementgui.dimension.portal_sound=传送门方块发出的声音为\: -elementgui.dimension.portal_luminance=传送门方块发出的亮度为\: +elementgui.dimension.world_gen_type=\ 世界基本类型: +elementgui.dimension.biomes_in=该维度中的生物群系: +elementgui.dimension.main_filler_block=主要填充方块:
主世界、下界、 末地 +elementgui.dimension.fluid_block=流体方块:
主世界、下界、 末地 +elementgui.dimension.sleep_result=试图睡眠的结果: +elementgui.dimension.fog_air_color=天空/雾色彩覆盖方式:
留空使用Minecraft默认处理 +elementgui.dimension.enable_dimension_portal=启用维度传送门: +elementgui.dimension.portal_frame_block=传送门框架方块: +elementgui.dimension.portal_particles=传送门方块散发的粒子为: +elementgui.dimension.portal_sound=传送门方块发出的声音为: +elementgui.dimension.portal_luminance=传送门方块发出的亮度为: elementgui.dimension.enable_new_igniter=启用使用物品激活传送门 -elementgui.dimension.portal_igniter_name=传送门触发物品名称\: -elementgui.dimension.portal_igniter_tab=激活传送门的物品选项卡\: -elementgui.dimension.portal_igniter_texture=激活传送门的物品纹理\: -elementgui.dimension.portal_block_texture=传送门方块纹理\: +elementgui.dimension.portal_igniter_name=传送门触发物品名称: +elementgui.dimension.portal_igniter_tab=激活传送门的物品选项卡: +elementgui.dimension.portal_igniter_texture=激活传送门的物品纹理: +elementgui.dimension.portal_block_texture=传送门方块纹理: elementgui.dimension.error_portal_igniter_needs_name=激活传送门的物品需要一个名称 elementgui.dimension.error_select_biome=请选择至少一个生物群系 elementgui.dimension.page_portal=传送门 -elementgui.enchantment.name=魔咒名称\: -elementgui.enchantment.type=魔咒类型\: -elementgui.enchantment.rarity=魔咒稀有度\: -elementgui.enchantment.level=魔咒支持的等级\: -elementgui.enchantment.damage_modifier=伤害减量\:
对拥有这个附魔的物品的实体,与附魔等级共同生效 -elementgui.enchantment.treasure_enchantment=这个附魔是宝藏型附魔吗? -elementgui.enchantment.curse=这个附魔是诅咒型附魔吗? -elementgui.enchantment.allowed_on_books=是否允许在书上附魔这个魔咒? -elementgui.enchantment.can_generate_in_loot_tables=这个附魔会在战利品表中出现吗? -elementgui.enchantment.can_villager_trade=这个附魔会在村民交易中出现吗? -elementgui.enchantment.compatible_enchantments=可与以下魔咒共存\:
留空以允许与任何魔咒共存 -elementgui.enchantment.can_apply_to=可以附魔到\:
留空以允许附魔到所有适用的物品 +elementgui.enchantment.name=魔咒名称: +elementgui.enchantment.type=魔咒类型: +elementgui.enchantment.rarity=魔咒稀有度: +elementgui.enchantment.level=魔咒支持的等级: +elementgui.enchantment.damage_modifier=伤害减量:
对拥有该附魔的物品的实体,与附魔等级共同生效 +elementgui.enchantment.treasure_enchantment=该附魔是宝藏型魔咒吗? +elementgui.enchantment.curse=该附魔是诅咒型附魔吗? +elementgui.enchantment.allowed_on_books=是否允许在书上附魔该魔咒? +elementgui.enchantment.can_generate_in_loot_tables=该附魔会在战利品表中出现吗? +elementgui.enchantment.can_villager_trade=该附魔会在村民交易中出现吗? +elementgui.enchantment.compatible_enchantments=可以共存的附魔:
留空(在包含和不含模式下工作)以让您的附魔与所有附魔可共存 +elementgui.enchantment.can_apply_to=可以应用到:
留空(在包含和不含模式下工作)以允许附魔应用到所有适用的物品 elementgui.enchantment.needs_name=魔咒需要一个名称 -elementgui.gamerule.name=内部名称\: -elementgui.gamerule.display_name=游戏规则名称\:
这个名称将用于游戏规则设置界面 -elementgui.gamerule.description=游戏规则描述\:
描述将用于游戏规则设置的界面 -elementgui.gamerule.category=类别\: -elementgui.gamerule.type=游戏规则类型\: -elementgui.gamerule.default_value=默认值\: +elementgui.gamerule.name=内部名称: +elementgui.gamerule.display_name=游戏规则名称:
该名称将用于游戏规则设置界面 +elementgui.gamerule.description=游戏规则描述:
描述将用于游戏规则设置的界面 +elementgui.gamerule.category=类别: +elementgui.gamerule.type=游戏规则类型: +elementgui.gamerule.default_value=默认值: elementgui.gamerule.gamerule_needs_display_name=游戏规则需要一个显示名称 elementgui.gamerule.gamerule_needs_description=游戏规则需要一个描述 elementgui.feature.additional_generation_condition=附加的生成条件 elementgui.feature.feature_builder=地物生成器 -elementgui.feature.generation_stage=生成阶段\: +elementgui.feature.generation_stage=生成阶段: elementgui.fluid.page_visual_and_properties=视觉和属性 elementgui.fluid.block_properties=流体方块属性 elementgui.fluid.bucket_properties=流体桶属性 elementgui.fluid.fluid_properties=流体属性 elementgui.fluid.can_multiply=可否生成无限流体源? -elementgui.fluid.flow_rate=流速\: -elementgui.fluid.level_decrease=每个方块的液位降低\: -elementgui.fluid.slope_find_distance=寻找斜坡距离\: +elementgui.fluid.flow_rate=流速: +elementgui.fluid.level_decrease=每个方块的液位降低: +elementgui.fluid.slope_find_distance=寻找斜坡距离: elementgui.fluid.spawn_particles=生成液滴粒子吗? -elementgui.fluid.drip_particle=液滴粒子\: -elementgui.fluid.tint_type=着色类型\: -elementgui.fluid.flow_strength=流动强度\: +elementgui.fluid.drip_particle=液滴粒子: +elementgui.fluid.tint_type=着色类型: +elementgui.fluid.flow_strength=流动强度: elementgui.fluid.when_added=放置方块时 -elementgui.fluid.when_entity_collides=当生物/玩家碰撞这个方块时 +elementgui.fluid.when_entity_collides=生物/玩家碰撞该方块时 elementgui.fluid.texture_still=静止的纹理 elementgui.fluid.texture_flowing=流动的纹理 elementgui.fluid.modded_properties=模组流体属性 -elementgui.fluid.luminosity=亮度\:
发出的亮度等级 -elementgui.fluid.density=密度\:
对于负值而言,液体会被视为一种气体。 -elementgui.fluid.viscosity=黏度\:
越高则流动越慢 -elementgui.fluid.temperature=温度\: -elementgui.fluid.type=流体类型
将继承该流体的一些属性 +elementgui.fluid.luminosity=亮度:
发出的亮度等级 +elementgui.fluid.density=密度:
对于负值而言,液体会被视为一种气体。 +elementgui.fluid.viscosity=黏度:
越高则流动越慢 +elementgui.fluid.temperature=温度: +elementgui.fluid.type=流体类型
将继承该类流体的一些属性 elementgui.fluid.generate_bucket_label=自动生成流体桶? elementgui.fluid.error_fluid_needs_name=流体需要一个名称 elementgui.fluid.error_bucket_needs_name=流体桶一个需要名称 -elementgui.fluid.bucket_name_in_gui=游戏内桶名称\: -elementgui.fluid.bucket_texture=铁桶的纹理\:
留空以使用自动生成的纹理 -elementgui.fluid.empty_sound=桶倒空的声音\: +elementgui.fluid.bucket_name_in_gui=游戏内桶名称: +elementgui.fluid.bucket_texture=桶的纹理:
留空以使用自动生成的纹理 +elementgui.fluid.empty_sound=桶倒空的声音: elementgui.fluid.event_flow_condition=其他流动条件 elementgui.fluid.event_before_replacing_block=在替换一个方块之前 -elementgui.function.registry_name=函数注册名\: -elementgui.function.namespace=函数命名空间\:
在大多数情况下,您可能想要保留“mod” -elementgui.function.indications=    在下面输入函数代码(Minecraft 函数/命令语法-每行一个命令)\: -elementgui.gui.gui_opened=当这个界面打开时 -elementgui.gui.gui_open_ticks=当这个界面打开期间,每刻发生 -elementgui.gui.gui_closed=当这个界面被关闭 -elementgui.gui.gui_triggers=GUI 流程触发器 +elementgui.function.registry_name=函数注册名: +elementgui.function.namespace=函数命名空间:
在大多数情况下,您可能想要保留“mod” +elementgui.function.indications=    在下面输入函数代码(Minecraft函数/命令语法-每行一个命令): +elementgui.gui.gui_opened=该GUI打开时 +elementgui.gui.gui_open_ticks=该GUI打开时,每刻发生 +elementgui.gui.gui_closed=该GUI关闭时 +elementgui.gui.gui_triggers=GUI流程触发器 elementgui.gui.render_background_layer=渲染背景图层 elementgui.gui.pause_game=打开时暂停游戏 elementgui.gui.component_list=组件列表 @@ -2171,99 +2234,101 @@ elementgui.gui.add_imagebutton=添加图像按钮 elementgui.gui.add_text_label=添加文本标签 elementgui.gui.add_image=添加图像 elementgui.gui.add_text_input=添加文本框 -elementgui.gui.add_input_slot=添加输入储存槽 -elementgui.gui.add_output_slot=添加输出储存槽 +elementgui.gui.add_input_slot=添加输入槽位 +elementgui.gui.add_output_slot=添加输出槽位 elementgui.gui.add_checkbox=添加复选框 elementgui.gui.add_entity_model=添加实体模型 elementgui.gui.add_tooltip=添加提示框 elementgui.gui.snap_components_on_grid=对齐网格上的组件 -elementgui.gui.grid_x=网格 x\: -elementgui.gui.offset_x=\ 偏移量 x\: -elementgui.gui.grid_y=网格 y\: -elementgui.gui.offset_y=\ 偏移量 y\: +elementgui.gui.grid_x=网格x\: +elementgui.gui.offset_x=\ 偏移量x\: +elementgui.gui.grid_y=网格y\: +elementgui.gui.offset_y=\ 偏移量y\: elementgui.gui.editor_options=编辑器选项 -elementgui.gui.gui_properties=GUI 属性 -elementgui.gui.gui_type=GUI 类型\: -elementgui.gui.warning_switch_gui=如果您有任何储存槽或物品栏,而要切换到基本的 GUI,它们将被移除。
要继续吗? -elementgui.gui.width_height=GUI的宽度x高度\: -elementgui.gui.inventory_offset=物品栏偏移\: +elementgui.gui.gui_properties=GUI属性 +elementgui.gui.gui_type=GUI类型: +elementgui.gui.warning_switch_gui=如果您有任何槽位或物品栏,而要切换到基本的GUI,它们将被移除。
要继续吗? +elementgui.gui.width_height=GUI的宽度x高度: +elementgui.gui.inventory_offset=物品栏偏移: elementgui.gui.overlay_properties=叠加层属性 -elementgui.gui.overlay_target=叠加层目标\: -elementgui.gui.rendering_priority=渲染优先级\: +elementgui.gui.overlay_target=叠加层目标: +elementgui.gui.rendering_priority=渲染优先级: elementgui.gui.import_overlay_base_texture=单击此处导入叠加层基础纹理 -elementgui.gui.overlay_base_texture=基础纹理\: -elementgui.item_extension.item=物品扩展源\: +elementgui.gui.overlay_base_texture=基础纹理: +elementgui.item_extension.item=物品扩展源: elementgui.item_extension.fuel_properties=作为燃料 -elementgui.item_extension.enable_fuel=使该物品成为燃料\: -elementgui.item_extension.burn_time=燃烧时间(能量)\: -elementgui.item_extension.fuel_success_condition=燃烧成功条件\: +elementgui.item_extension.enable_fuel=使该物品成为燃料: +elementgui.item_extension.burn_time=燃烧时间(能量): +elementgui.item_extension.fuel_success_condition=燃烧成功条件: elementgui.item_extension.compost_properties=作为堆肥材料 -elementgui.item_extension.layer_chance=堆肥成功率\: +elementgui.item_extension.layer_chance=堆肥成功率: elementgui.item_extension.dispense_properties=作为发射器输出 elementgui.item_extension.has_dispense_behavior=启用自定义发射器行为 elementgui.item_extension.dispense_success_condition=成功发射的条件 elementgui.item_extension.dispense_result_itemstack=当尝试发射时 elementgui.item_extension.dispense_result_itemstack.default=(成功则从物品栈减少一个物品) elementgui.item.texture=物品纹理 -elementgui.item.destroy_speed=物品破坏速度\: +elementgui.item.destroy_speed=物品破坏速度: elementgui.item.can_destroy_any_block=可以摧毁方块吗? -elementgui.item.container_item=合成后,输入的物品是否保留在工作台的方格中? -elementgui.item.use_duration=物品使用时间\:
使用正数值使食物类物品可食用 -elementgui.item.container_item_damage=在合成时以减少物品耐久代替消耗物品
请确保开启“保持在合成网格中”并且该物品拥有耐久值这一属性 -elementgui.item.number_of_uses=物品使用次数/耐久度(设置0以禁用)\:
如果您想要制作一个工具,请创建一个工具取代它 +elementgui.item.container_item=合成后,输入的物品是否留在合成方格中? +elementgui.item.use_duration=物品使用时间:
使用正数值使食物类物品可食用 +elementgui.item.container_item_damage=在合成时以减少物品耐久代替消耗物品
请确保开启“留在合成网格中”并且该物品拥有耐久值这一属性 +elementgui.item.number_of_uses=物品使用次数/耐久度(设置0以禁用):
如果您想要制作一个工具,请创建一个工具取代它 elementgui.item.is_immune_to_fire=物品是否防火? -elementgui.item.recipe_remainder=合成后剩下的物品
请确保启用"保持在合成网格中"。留空则使用本身。 -elementgui.item.damage_vs_entity=对生物造成伤害(选中以开启)\:
近战伤害 +elementgui.item.recipe_remainder=合成后剩下的物品
请确保启用"留在合成方格中"。留空则使用本身。 +elementgui.item.damage_vs_entity=对生物造成伤害(选中以开启):
近战伤害 elementgui.item.glowing_effect=物品是否有发光效果? elementgui.item.item_3d_model=物品 3D 模型 -elementgui.item.bind_gui=绑定这个物品到 GUI\:
设置为 <NONE> 以禁用物品栏 -elementgui.item.inventory_size=物品栏大小(储存槽数量)\:
一般这个值设置为绑定的GUI的最大储存槽ID + 1 -elementgui.item.event_entity_hit=当实体被该物品击中 -elementgui.item.event_inventory_tick=当物品在背包中,每刻发生 -elementgui.item.event_hand_tick=当物品在手上,每刻发生 -elementgui.item.event_stopped_using=在玩家停止使用时 -elementgui.item.event_entity_swings=当实体挥动物品时 -elementgui.item.event_on_dropped=当物品由玩家掉落 +elementgui.item.bind_gui=绑定该物品到GUI:
设置为<NONE>以禁用物品栏 +elementgui.item.inventory_size=物品栏大小(槽位数量):
一般该值设置为绑定的GUI的最大槽位ID+1 +elementgui.item.event_entity_hit=实体被该物品击中时 +elementgui.item.event_inventory_tick=物品在背包中时,每刻发生 +elementgui.item.event_hand_tick=物品在手上时,每刻发生 +elementgui.item.event_stopped_using=玩家停止使用 +elementgui.item.event_entity_swings=实体挥动物品时 +elementgui.item.event_on_dropped=玩家丢弃物品时 elementgui.item.player_useitem_finish=玩家完成使用物品时 elementgui.item.food_properties=食物属性 -elementgui.item.is_food=这个物品是食物吗? -elementgui.item.nutritional_value=营养值\: -elementgui.item.saturation=饱食度\: -elementgui.item.eating_result=食用物品结果\:
留空以消耗食物。 -elementgui.item.is_meat=这个食物是肉类嘛? +elementgui.item.is_food=该物品是食物吗? +elementgui.item.nutritional_value=营养值: +elementgui.item.saturation=饱食度: +elementgui.item.eating_result=食用物品结果:
留空以消耗食物。 +elementgui.item.is_meat=该食物是肉类嘛? elementgui.item.is_edible=该食物是否可以在饱食度为满的情况下食用? -elementgui.item.item_animation=物品动画\: +elementgui.item.item_animation=物品动画: elementgui.item.custom_properties.title=自定义物品属性 elementgui.item.custom_properties.add=添加自定义属性 -elementgui.item.custom_properties.add.message=输入要添加的自定义属性名\: +elementgui.item.custom_properties.add.message=输入要添加的自定义属性名: elementgui.item.custom_properties.add.input=属性名 -elementgui.item.custom_property.name=属性名\: +elementgui.item.custom_property.name=属性名: elementgui.item.custom_property.value=属性值提供器 -elementgui.item.custom_property.remove=删除这个属性 +elementgui.item.custom_property.remove=删除该属性 elementgui.item.custom_states.title=物品状态
使用与条件匹配的最高值状态将被使用。 如果没有匹配,将使用默认纹理和模型 elementgui.item.custom_states.add=添加自定义状态 -elementgui.item.custom_state.model=物品模型\: -elementgui.item.custom_state.remove=删除这个状态 +elementgui.item.custom_state.model=物品模型: +elementgui.item.custom_state.remove=删除该状态 elementgui.item.page_item_states=物品状态 elementgui.item.ranged_properties=远程物品属性 elementgui.item.enable_ranged_item=该物品是否为远程物品(可发射弹射物)? -elementgui.item.projectile=要发射的弹射物\: +elementgui.item.projectile=要发射的弹射物: elementgui.item.shoot_constantly=激活时持续射击? elementgui.item.event_on_use=当远程物品使用时 elementgui.item.can_use_ranged=可以使用远程物品 -elementgui.item.error_needs_name=该食物需要一个名称 -elementgui.item.error_item_needs_name=该物品需要一个名称 +elementgui.item.error_needs_name=食物需要一个名称 +elementgui.item.error_item_needs_name=物品需要一个名称 elementgui.keybind.event_key_pressed=按下按键时 elementgui.keybind.event_key_released=松开按键时 -elementgui.keybind.key_trigger_event=触发事件的按键\: -elementgui.keybind.key_binding_name=按键绑定名称\: -elementgui.keybind.key_binding_category=按键绑定的分类的翻译键\: +elementgui.keybind.key_trigger_event=触发事件的按键: +elementgui.keybind.key_binding_name=按键绑定名称: +elementgui.keybind.key_binding_category=按键绑定的分类的翻译键: elementgui.keybind.key_procedure_triggers=按键绑定流程触发器 elementgui.keybind.error_key_needs_name=按键绑定需要一个名称 elementgui.keybind.error_key_category_needs_name=按键绑定分类需要一个名称 +elementgui.living_entity.visual_scale=模型外观尺寸: +elementgui.living_entity.bounding_box_scale=碰撞箱尺寸: elementgui.living_entity.condition_solid_bounding_box=是否启用像方块的碰撞箱? elementgui.living_entity.disable_collisions=禁用碰撞箱 -elementgui.living_entity.has_ai=启用 AI
当使用 AI 时,请确保在下方定义一些 AI 任务 +elementgui.living_entity.has_ai=启用AI
请确保在下面定义了一些AI任务 elementgui.living_entity.immune_fire=火 elementgui.living_entity.immune_arrows=箭 elementgui.living_entity.immune_fall_damage=坠落伤害 @@ -2285,90 +2350,106 @@ elementgui.living_entity.spawn_dungeons=在地牢中生成 elementgui.living_entity.is_rideable=可骑乘的 elementgui.living_entity.control_forward=向前移动控制 elementgui.living_entity.control_strafe=横向移动控制 -elementgui.living_entity.is_breedable=将这个实体设置为动物,用于繁殖的物品为\:
如果选中,实体基础和行为类型将被忽略 +elementgui.living_entity.is_breedable=使该实体为动物,繁殖物品:
实体基础和行为类型将被忽略。 elementgui.living_entity.is_tameable=可以驯服 -elementgui.living_entity.is_ranged=让实体使用物品、攻击间隔和半径进行远程攻击\:
至少添加一个 AI 任务来定义攻击目标。
如果已选择“默认物品(Default Item)”,选择将发射的物品或留空以使用箭矢 +elementgui.living_entity.is_ranged=启用使用物品进行远程攻击,攻击间隔和半径:
至少添加一个AI以定义攻击目标的任务。
如果选择了「Default Item(默认物品)」,则选择弹射物或留空以使用箭。 elementgui.living_entity.event_struck_by_lightning=当闪电击中实体时 elementgui.living_entity.event_mob_falls=当实体坠落时 elementgui.living_entity.event_mob_dies=当实体死亡时 elementgui.living_entity.event_mob_is_hurt=当实体受伤时 -elementgui.living_entity.event_mob_right_clicked=当右击实体时 -elementgui.living_entity.event_mob_kills_another=当这个实体杀死另一个实体 +elementgui.living_entity.event_mob_right_clicked=右击实体时 +elementgui.living_entity.event_mob_kills_another=当该实体杀死另一个实体 elementgui.living_entity.event_mob_tick_update=当实体更新刻时 elementgui.living_entity.event_player_collides_with=当玩家与该实体发生碰撞时 elementgui.living_entity.event_initial_spawn=实体初始生成时 elementgui.living_entity.condition_natural_spawn=自然实体生成条件 elementgui.living_entity.condition_is_model_transparent=实体模型是否存在透明? elementgui.living_entity.condition_is_shaking=实体模型在抖动吗? -elementgui.living_entity.behaviour=行为特性(怪物具有攻击性, 动物是被动的)\: -elementgui.living_entity.creature_type=生物类型(定义一些特殊实体属性)\: -elementgui.living_entity.drop_health_xp_amount=掉落物数量(可选)、生命值、经验值数量\: -elementgui.living_entity.follow_range_tracking_range=跟随范围,追踪范围\: -elementgui.living_entity.attack_strenght_armor_value_knockback=攻击力,盔甲保护能力,攻击击退距离,击退抗性\: -elementgui.living_entity.movement_speed_step_height=移动速度,可行走高度\: -elementgui.living_entity.equipment=装备(可选\:主手、副手、头盔、胸甲、护腿、靴子)\:
仅适用于两足动物和僵尸模型 -elementgui.living_entity.is_immune_to=实体所免疫的伤害\: -elementgui.living_entity.ridable=选中以使这个实体可以被玩家骑行
您也可以选择性地启用实体控制 -elementgui.living_entity.water_mob=该实体是否为水生实体\:
注意\:您仍然需要 AI 任务来使生物使用这些属性 -elementgui.living_entity.flying_mob=该实体是否为飞行实体\:
注意\:您仍然需要 AI 任务来使生物使用这些属性 -elementgui.living_entity.name=实体名称\: -elementgui.living_entity.entity_model=实体模型\:
支持类型\:JAVA +elementgui.living_entity.behaviour=实体行为类型(Mob则为敌对,Creature则为被动): +elementgui.living_entity.creature_type=生物类型(定义一些特殊实体属性): +elementgui.living_entity.drop_health_xp_amount=掉落物数量(可选)、生命值、经验值数量: +elementgui.living_entity.model_layers=模型图层列表 +elementgui.living_entity.follow_range_tracking_range=跟随范围,追踪范围: +elementgui.living_entity.attack_strenght_armor_value_knockback=攻击力,盔甲保护能力,攻击击退距离,击退抗性: +elementgui.living_entity.movement_speed_step_height=移动速度,最大行走高度: +elementgui.living_entity.equipment=装备(可选:主手、副手、头盔、胸甲、护腿、靴子):
仅适用于两足动物和僵尸模型 +elementgui.living_entity.is_immune_to=实体所免疫的伤害: +elementgui.living_entity.ridable=选中以使该实体可以被玩家骑行
您也可以选择性地启用实体控制 +elementgui.living_entity.water_mob=该实体是否为水生实体:
注意:您仍然需要AI任务来使生物使用这些属性 +elementgui.living_entity.flying_mob=该实体是否为飞行实体:
注意:您仍然需要AI任务来使生物使用这些属性 +elementgui.living_entity.add_model_layer=新增模型图层 +elementgui.living_entity.layer_model=模型: +elementgui.living_entity.layer_texture=纹理: +elementgui.living_entity.layer_should_glow=使纹理发光 +elementgui.living_entity.layer_display_condition=显示条件 +elementgui.living_entity.layer_needs_texture=模型图层必须有纹理 +elementgui.living_entity.name=实体名称: +elementgui.living_entity.entity_model=实体模型:
支持类型:JAVA elementgui.living_entity.entity_model_import=单击此处导入实体模型纹理 -elementgui.living_entity.texture=实体纹理\:
纹理需要与模型匹配(例如玩家皮肤纹理不是模型纹理) -elementgui.living_entity.glow_texture=实体的发光纹理(可选)\:
发光纹理需要与模型匹配,图像亮度决定光源强度 -elementgui.living_entity.bounding_box=实体模型碰撞箱\:
宽度,厚度,高度,阴影半径,乘客 Y 高度 -elementgui.living_entity.spawn_egg_options=刷怪蛋选项\:
启用,底色,斑点色,创造模式选项卡 -elementgui.living_entity.mob_boss=该实体是 BOSS 且有 BOSS 血条吗? -elementgui.living_entity.label=实体标签名(留空则隐藏)\:
-elementgui.living_entity.sound=空闲声音\: -elementgui.living_entity.step_sound=行走声音\:
留空以使用方块被踩踏的声音 -elementgui.living_entity.hurt_sound=受伤声音\: -elementgui.living_entity.death_sound=死亡声音\: -elementgui.living_entity.mob_base=实体基础(不推荐使用)\:
这个选项会覆盖一些參数! -elementgui.living_entity.ai_parameters=AI 参数 -elementgui.living_entity.ai_tasks=实体 AI 任务/目标生成器 -elementgui.living_entity.enable_mob_spawning=启用实体生成\: -elementgui.living_entity.despawn_idle=闲置时消失\: -elementgui.living_entity.spawn_weight=生成权重\: -elementgui.living_entity.spawn_type=生物自然生成类型(影响生成地点与时间范围)\: -elementgui.living_entity.spawn_group_size=一个生成组中要生成的实体数量\: -elementgui.living_entity.restrict_to_biomes=实体生成的生物群系(空为不受限制)\:
对于自定义生物群系,这也可以在生物群系编辑器中定义 -elementgui.living_entity.does_spawn_in_dungeons=这个实体是否在地牢中生成? -elementgui.living_entity.spawn_general_condition=自定义生成条件\:
当使用自定义生成条件时, 生成类型条件将被覆盖
但生成类型分组和权重仍将被使用。
-elementgui.living_entity.bind_to_gui=绑定GUI到这个实体\:
设置为空以禁用背包(您在大多数情况下都希望这样做)
-elementgui.living_entity.inventory_size=物品栏大小(储存槽数量)\:
这个值设置为GUI的最大储存槽ID + 1 +elementgui.living_entity.texture=实体纹理:
纹理需要与模型匹配(例如玩家皮肤纹理不是模型纹理) +elementgui.living_entity.bounding_box=实体模型碰撞箱:
宽度,厚度,高度,阴影半径,乘客 Y 高度 +elementgui.living_entity.spawn_egg_options=刷怪蛋选项:
启用,底色,斑点色,创造模式选项卡 +elementgui.living_entity.mob_boss=该实体是BOSS且有BOSS血条吗? +elementgui.living_entity.label=实体标签名(留空则隐藏):
+elementgui.living_entity.sound=空闲声音: +elementgui.living_entity.step_sound=行走声音:
留空以使用方块被踩踏的声音 +elementgui.living_entity.hurt_sound=受伤声音: +elementgui.living_entity.death_sound=死亡声音: +elementgui.living_entity.mob_base=实体基础(不推荐使用):
该选项会覆盖一些參数! +elementgui.living_entity.ai_parameters=AI参数 +elementgui.living_entity.ai_tasks=实体AI任务/目标生成器 +elementgui.living_entity.enable_mob_spawning=启用实体生成: +elementgui.living_entity.despawn_idle=空闲时消失: +elementgui.living_entity.spawn_weight=生成权重: +elementgui.living_entity.spawn_type=生物自然生成类型(影响生成地点与时间范围): +elementgui.living_entity.spawn_group_size=一个生成组中要生成的实体数量: +elementgui.living_entity.restrict_to_biomes=实体生成的生物群系(空为不受限制):
对于自定义生物群系,这也可以在生物群系编辑器中定义 +elementgui.living_entity.does_spawn_in_dungeons=该实体是否在地牢中生成? +elementgui.living_entity.spawn_general_condition=自定义生成条件:
当使用自定义生成条件时, 生成类型条件将被覆盖
但生成类型分组和权重仍将被使用。
+elementgui.living_entity.bind_to_gui=绑定GUI到该实体:
设置为空以禁用背包(您在大多数情况下都希望这样做)
+elementgui.living_entity.inventory_size=物品栏大小(槽位数量):
该值设置为GUI的最大槽位ID+1 +elementgui.living_entity.entity_data=实体数据访问器
在客户端和服务端间同步 +elementgui.living_entity.entity_data_entries=数据条目 +elementgui.living_entity.entity_data_entries.name=名称: +elementgui.living_entity.entity_data_entries.type=类型: +elementgui.living_entity.entity_data_entries.default_value=默认值: +elementgui.living_entity.entity_data_entries.add_entry=添加新条目 +elementgui.living_entity.entity_data_entries.add_entry.name=数据条目名称: +elementgui.living_entity.entity_data_entries.add_entry.type=数据条目类型: +elementgui.living_entity.entity_data_entries.add_entry.title=新建数据条目 elementgui.living_entity.error_entity_model_needs_texture=实体模型需要一个纹理 elementgui.living_entity.error_entity_needs_name=实体需要一个名称 elementgui.living_entity.page_visual=外观 +elementgui.living_entity.page_model_layers=模型图层 elementgui.living_entity.page_sound=声音 -elementgui.living_entity.page_behaviour=行为 -elementgui.living_entity.page_ai_and_goals=AI 和目标 +elementgui.living_entity.page_behaviour=实体行为 +elementgui.living_entity.page_entity_data=已同步的数据 +elementgui.living_entity.page_ai_and_goals=AI和目标 elementgui.living_entity.page_spawning=生成 -elementgui.loot_table.name=战利品表 -elementgui.loot_table.registry_name=战利品表注册名\:
使用类似于blocks/的前缀来明确类别 -elementgui.loot_table.namespace=战利品表命名空间\:
使用 minecraft 命名空间来改变原版战利品表 -elementgui.loot_table.type=战利品表类型\: +elementgui.loot_table.registry_name=战利品表注册名:
使用类似于blocks/的前缀来明确类别 +elementgui.loot_table.namespace=战利品表命名空间:
使用minecraft命名空间来改变原版战利品表 +elementgui.loot_table.type=战利品表类型: elementgui.loot_table.add_pool=添加战利品表池 elementgui.loot_table.enable_pool_rolls=启用奖励抽取 -elementgui.loot_table.rolls=基础抽取次数\: -elementgui.loot_table.bonus_rolls=额外抽取次数\: +elementgui.loot_table.rolls=基础抽取次数: +elementgui.loot_table.bonus_rolls=额外抽取次数: elementgui.loot_table.add_pool_entry=添加池条目 -elementgui.loot_table.remove_pool=删除这个池 +elementgui.loot_table.remove_pool=删除该池 elementgui.loot_table.pool=战利品表池 elementgui.loot_table.affected_by_fortune=受时运影响 elementgui.loot_table.enable_explosion_decay=启用爆炸衰减 -elementgui.loot_table.entry_item=条目物品\: -elementgui.loot_table.entry_weight=条目权重\: -elementgui.loot_table.count=数量\: -elementgui.loot_table.silk_touch_mode=精准采集模式\: -elementgui.loot_table.enchantments_level=该魔咒在物品条目中的等级\: -elementgui.music_disc.event_entity_hitwith=当实体被该物品击中 -elementgui.music_disc.event_inventory=当物品在背包中,每刻发生 -elementgui.music_disc.event_inhand=当物品在手上,每刻发生 -elementgui.music_disc.event_swing=当实体挥动物品时 -elementgui.music_disc.music_mono_tip=播放声音\:
音乐需要单声道才能正常工作 -elementgui.music_disc.disc_description=唱片描述\: -elementgui.music_disc.disc_length=音乐长度(刻)\: +elementgui.loot_table.entry_item=条目物品: +elementgui.loot_table.entry_weight=条目权重: +elementgui.loot_table.count=数量: +elementgui.loot_table.silk_touch_mode=精准采集模式: +elementgui.loot_table.enchantments_level=该魔咒在物品条目中的等级: +elementgui.music_disc.event_entity_hitwith=实体被该物品击中时 +elementgui.music_disc.event_inventory=物品在背包中时,每刻发生 +elementgui.music_disc.event_inhand=物品在手上时,每刻发生 +elementgui.music_disc.event_swing=实体挥动物品时 +elementgui.music_disc.music_mono_tip=播放声音:
音乐需要单声道才能正常工作 +elementgui.music_disc.disc_description=唱片描述: +elementgui.music_disc.disc_length=音乐长度(刻): elementgui.music_disc.disc_analog_output=唱片机被红石比较器检测时发出的红石信号强度 elementgui.music_disc.has_glowing_effect=启用发光效果? elementgui.music_disc.disc_texture=音乐唱片纹理 @@ -2376,22 +2457,22 @@ elementgui.music_disc.error_disc_needs_name=唱片需要一个名称 elementgui.music_disc.error_disc_needs_description=唱片需要一个描述 elementgui.music_disc.error_needs_sound=选择一个声音 elementgui.overlay.event_display_ingame=显示游戏内叠加层 -elementgui.painting.painting_title=画的标题\: -elementgui.painting.painting_author=画的作者\: -elementgui.painting.painting_width=画的宽度\:
16 像素 \= 1 方块宽度 -elementgui.painting.painting_height=画的高度\:
16 像素 \= 1 方块高度 +elementgui.painting.painting_title=画的标题: +elementgui.painting.painting_author=画的作者: +elementgui.painting.painting_width=画的宽度:
16像素 \= 1格 +elementgui.painting.painting_height=画的高度:
16像素 \= 1格 elementgui.painting.painting_needs_title=画需要一个标题 elementgui.painting.painting_needs_author=画需要一个作者 -elementgui.particle.angular_acceleration=粒子角加速度\:
顺时针,单位是弧度/刻的平方 -elementgui.particle.angular_velocity=粒子角速度\:
顺时针,单位是弧度/刻 +elementgui.particle.angular_acceleration=粒子角加速度:
顺时针,单位是弧度/刻的平方 +elementgui.particle.angular_velocity=粒子角速度:
顺时针,单位是弧度/刻 elementgui.particle.expiry_condition=附加粒子消失条件 -elementgui.particle.animated_texture=动画化这个粒子吗?
只能使用堆叠纹理 -elementgui.particle.render_type=粒子渲染类型\: -elementgui.particle.visual_scale=粒子视觉大小\: -elementgui.particle.bbox=粒子碰撞箱的宽和高\: -elementgui.particle.speed_factor=速度系数为\:
对于仅受重力而移动的粒子(例如水滴)使用 0 -elementgui.particle.gravity=粒子重力\: -elementgui.particle.max_age=粒子存在时间的最大值(刻) 和差异(每个粒子最大+/-)\: +elementgui.particle.animated_texture=动画化该粒子吗?
只能使用堆叠纹理 +elementgui.particle.render_type=粒子渲染类型: +elementgui.particle.visual_scale=粒子视觉尺寸: +elementgui.particle.bbox=粒子碰撞箱的宽和高: +elementgui.particle.speed_factor=速度系数为:
对于仅受重力而移动的粒子(例如水滴)使用 0 +elementgui.particle.gravity=粒子重力: +elementgui.particle.max_age=粒子存在时间的最大值(刻) 和差异(每个粒子最大+/-): elementgui.particle.always_show=总是显示粒子? elementgui.particle.does_collide=粒子碰撞吗? elementgui.plant.is_replaceable=是否可以替换? @@ -2400,15 +2481,15 @@ elementgui.plant.use_static_plant_type=使用静态植物类型 elementgui.plant.use_double_plant_type=使用大型花类型 elementgui.plant.use_growable_plant_type=使用可生长的植物类型 elementgui.plant.event_on_added=添加植物时 -elementgui.plant.event_on_destroyed_by_player=当植物被玩家破坏时 -elementgui.plant.event_on_destroyed_by_explosion=当植物被爆炸炸毁时 +elementgui.plant.event_on_destroyed_by_player=植物被玩家破坏时 +elementgui.plant.event_on_destroyed_by_explosion=当植物被爆炸炸毁 elementgui.plant.event_on_start_to_destroy=开始破坏时 -elementgui.plant.event_on_entity_collides=当生物/玩家与植物相撞时 -elementgui.plant.event_on_right_clicked=当植物被右键点击时 +elementgui.plant.event_on_entity_collides=生物/玩家与植物相撞时 +elementgui.plant.event_on_right_clicked=右击植物时 elementgui.plant.condition_additional_placing=附加位置/生长条件 -elementgui.plant.block_model=植物模型\:
选择要使用的植物模型。支持的文件\:JSON,OBJ -elementgui.plant.item_texture=植物物品纹理\:
用于物品栏中的和手上的植物渲染的可选纹理 -elementgui.plant.particle_texture=植物粒子纹理\:
植物破碎粒子的可选纹理 +elementgui.plant.block_model=植物模型:
选择要使用的植物模型。支持的文件:JSON,OBJ +elementgui.plant.item_texture=植物物品纹理:
用于物品栏中的和手上的植物渲染的可选纹理 +elementgui.plant.particle_texture=植物粒子纹理:
植物破碎粒子的可选纹理 elementgui.plant.textures_and_model=植物纹理、模型、可选纹理、着色类型、特殊信息 elementgui.plant.texture_place_top_main=顶部/主面 elementgui.plant.texture_place_bottom=底部 @@ -2416,22 +2497,22 @@ elementgui.plant.is_item_tinted=植物物品是否应用色调?
生成类型:
这将影响静态植物和大型植物 elementgui.plant.type_growable=可生长的植物类型 -elementgui.plant.max_height=最大高度\: +elementgui.plant.max_height=最大高度: elementgui.plant.type_double=两格高植物类型 -elementgui.plant.color_on_map=地图上的植物颜色\: -elementgui.plant.type=植物类型\: -elementgui.plant.can_be_placed_on=植物可放置/生长的可选方块列表\:
如果列表为空,则使用选定的植物类型方块 -elementgui.plant.flammability=植物易燃性\: +elementgui.plant.color_on_map=地图上的植物颜色: +elementgui.plant.type=植物类型: +elementgui.plant.can_be_placed_on=植物可放置/生长的可选方块列表:
如果列表为空,则使用选定的植物类型方块 +elementgui.plant.flammability=植物易燃性: elementgui.plant.force_ticking=强制植物刻更新? elementgui.plant.is_unbreakable=植物是否无法破坏? elementgui.plant.plant_is_replaceable=植物能否被替换? elementgui.plant.suspicious_stew_effect=谜之炖菜效果 elementgui.plant.suspicious_stew_duration=谜之炖菜效果持续时间 -elementgui.plant.has_tile_entity=是否为方块实体?
仅在您想要在这个植物中使用NBT标签时启用 -elementgui.plant.gen_chunk_count=区块内生成几率\:
这个参数确定每个区块上的生成数 -elementgui.plant.generate_at_any_height=在任何高度生成植物\: -elementgui.plant.patch_size=区块大小\:
这个参数决定每个区块的植物数量 -elementgui.plant.generate_feature=选中此项可在世界上生成植物\: +elementgui.plant.has_tile_entity=是否为方块实体?
仅在您想要在该植物中使用NBT标签时启用 +elementgui.plant.gen_chunk_count=区块内生成几率:
该参数确定每个区块上的生成数 +elementgui.plant.generate_at_any_height=在任何高度生成植物: +elementgui.plant.patch_size=区块内植物数量:
该参数决定每个区块的植物数量 +elementgui.plant.generate_feature=选中此项可在世界上生成植物: elementgui.plant.error_plant_needs_name=植物需要一个名称 elementgui.plant.page_visual_and_type=视觉和类型 elementgui.plant.properties_advanced_plant=高级植物属性 @@ -2439,73 +2520,73 @@ elementgui.potioneffect.is_instant=即时的 elementgui.potioneffect.is_bad=负面的 elementgui.potioneffect.is_benefitical=正面的 elementgui.potioneffect.event_potion_applied=当药水效果开始/应用时 -elementgui.potioneffect.event_potion_tick=在效果持续时,每刻发生 -elementgui.potioneffect.event_potion_expires=当效果结束时 +elementgui.potioneffect.event_potion_tick=效果持续时,每刻发生 +elementgui.potioneffect.event_potion_expires=当效果结束 elementgui.potioneffect.event_tick_condition=活动刻条件 -elementgui.potioneffect.display_name=药水效果显示名称\: -elementgui.potioneffect.color=药水效果颜色\: +elementgui.potioneffect.display_name=药水效果显示名称: +elementgui.potioneffect.color=药水效果颜色: elementgui.potioneffect.icon=药水效果图标 -elementgui.potioneffect.instant=这个药水是否立即生效?
如果选中这个选项,将不会调用药水的每游戏刻流程触发器 +elementgui.potioneffect.instant=该药水是否立即生效?
如果选中该选项,将不会调用药水的每游戏刻流程触发器 elementgui.potioneffect.bad=这种药水效果对玩家是负面的吗? elementgui.potioneffect.benefitical=这种药水效果对玩家是正面的吗? -elementgui.potioneffect.render_status_inventory=在物品栏旁渲染当前药水效果\: -elementgui.potioneffect.render_status_hud=在 HUD 中渲染当前药水效果\: +elementgui.potioneffect.render_status_inventory=在物品栏旁渲染当前药水效果: +elementgui.potioneffect.render_status_hud=在HUD中渲染当前药水效果: elementgui.potioneffect.error_effect_needs_display_name=药水效果需要一个显示名称 -elementgui.potion.potion_name=药水瓶的名称\:
不能为空 -elementgui.potion.splash_name=喷溅药水名称\:
不能为空 -elementgui.potion.lingering_name=滞留药水的名称\:
不能为空 -elementgui.potion.arrow_name=箭矢名称\:
不能为空 +elementgui.potion.potion_name=药水瓶的名称:
不能为空 +elementgui.potion.splash_name=喷溅药水名称:
不能为空 +elementgui.potion.lingering_name=滞留药水的名称:
不能为空 +elementgui.potion.arrow_name=箭矢名称:
不能为空 elementgui.potion.effects=效果列表 elementgui.potion.add_entry=添加新效果 -elementgui.potion.effect=效果\: -elementgui.potion.duration=持续时间\: -elementgui.potion.amplifier=效果增幅\: +elementgui.potion.effect=效果: +elementgui.potion.duration=持续时间: +elementgui.potion.amplifier=效果增幅: elementgui.potion.ambient=由信标所施加? elementgui.potion.show_particles=显示粒子? elementgui.potion.error_potion_needs_display_name=药水需要一个显示名称 elementgui.procedure.dependencies_added=
  !   新的依赖项已添加。 请确保您使用的触发器提供了这些依赖项。 -elementgui.procedure.dependencies_not_provided=
 X  您选择的外部触发器不提供以下依赖项\: {0} -elementgui.procedure.cancelable_trigger=
可取消 -elementgui.procedure.can_specify_result_trigger=
可以指定结果 -elementgui.procedure.client_side_trigger=
客户端限定 -elementgui.procedure.server_side_trigger=
服务端限定 +elementgui.procedure.dependencies_not_provided=
 X  您选择的外部触发器不提供以下依赖项:{0} +elementgui.procedure.cancelable_trigger=
可取消 +elementgui.procedure.can_specify_result_trigger=
可以指定结果 +elementgui.procedure.client_side_trigger=
客户端限定 +elementgui.procedure.server_side_trigger=
服务端限定 elementgui.procedure.global_trigger_unsupported=选定的全局触发器不支持。它将被忽略。 -elementgui.procedure.global_trigger_not_activated=选定的全局触发器需要 {0} 在工作区设置中启用,或者当前生成器不支持它。 -elementgui.procedure.global_trigger_tick_based={0} 全局触发器基于刻事件。请记住,运行过于复杂或要求高的流程会严重影响游戏性能。 +elementgui.procedure.global_trigger_not_activated=选定的全局触发器需要{0}在工作区设置中启用,或者当前生成器不支持它。 +elementgui.procedure.global_trigger_tick_based={0}全局触发器基于刻事件。请记住,运行过于复杂或要求高的流程会严重影响游戏性能。 elementgui.procedure.global_trigger_does_not_exist=该流程使用了一个不存在的全局触发器 -elementgui.procedure.variable_name_clashes_with_dep=变量名称 “{0}” 与依赖项名称冲突 +elementgui.procedure.variable_name_clashes_with_dep=变量名称“{0}”与依赖关系名称冲突 elementgui.procedure.return_type=返回类型 elementgui.procedure.local_variables=局部变量 -elementgui.procedure.name_already_exists_dep=这个名称已经存在为流程依赖项 -elementgui.procedure.confirm_delete_var_msg=您确定要删除这个变量?
如果该变量被使用中,这个操作可能会导致编译错误。 +elementgui.procedure.name_already_exists_dep=该名称已作为流程依赖项存在 +elementgui.procedure.confirm_delete_var_msg=您确定要删除该变量?
如果该变量被使用中,该操作可能会导致编译错误。 elementgui.procedure.required_dependencies=需要的依赖项 elementgui.procedure.provided_dependencies=\ 提供的依赖项 elementgui.procedure.external_trigger_does_not_provide_all_dependencies=您选择的外部触发器并不能提供
您的流程所需的所有依赖项! elementgui.projectile.power=默认弹射物的速度:
弓发射速度为 1 -elementgui.projectile.damage=默认弹射物的伤害\: -elementgui.projectile.knockback=默认弹射物击退距离\: +elementgui.projectile.damage=默认弹射物的伤害: +elementgui.projectile.knockback=默认弹射物击退距离: elementgui.projectile.show_particles=弹射物是否会在飞行中生成粒子? elementgui.projectile.ignite_fire=弹射物是否在击中实体时着火? -elementgui.projectile.item_texture=弹射物所需的物品纹理:
如果默认模型被弹射物使用,该物品将使用弹射物的模型 +elementgui.projectile.item_texture=弹射物所需物品:
如果默认模型被弹射物使用,该物品将使用弹射物的模型 elementgui.projectile.model=弹射物模型:
支持类型:JAVA -elementgui.projectile.model_tooltip=点击此处导入远程物品模型纹理 +elementgui.projectile.model_tooltip=单击此处导入远程物品模型纹理 elementgui.projectile.model_texture=弹射物模型的纹理:
仅与自定义模型一起使用 -elementgui.projectile.action_sound=弹射物发射时的声音\: -elementgui.projectile.event_hits_block=当弹射物击中方块时 -elementgui.projectile.event_hits_player=当弹射物击中玩家时 -elementgui.projectile.event_hits_entity=当弹射物击中实体时 -elementgui.projectile.event_flying_tick=当弹射物飞行时,每刻发生 +elementgui.projectile.action_sound=弹射物发射时的声音: +elementgui.projectile.event_hits_block=弹射物击中方块时 +elementgui.projectile.event_hits_player=弹射物击中玩家时 +elementgui.projectile.event_hits_entity=弹射物击中实体时 +elementgui.projectile.event_flying_tick=弹射物飞行时,每刻发生 elementgui.projectile.error_custom_model_needs_texture=自定义弹射物模型需要一个纹理 elementgui.recipe.is_shapeless=是否为无序合成? elementgui.recipe.definition=配方定义 -elementgui.recipe.crafting_book_category=合成手册类别\: -elementgui.recipe.cooking_book_category=烹饪手册类别\: -elementgui.recipe.registry_name=配方注册名\: -elementgui.recipe.name_space=配方命名空间\:
使用 minecraft 命名空间来改变原版配方 -elementgui.recipe.group=配方组名称\: -elementgui.recipe.type=配方类型\:
建议不要修改已有的配方类型 -elementgui.recipe.xp_reward=经验值奖励\: -elementgui.recipe.cooking_time=烹调时间(单位为刻,20 刻为 1 秒)\: +elementgui.recipe.crafting_book_category=合成手册类别: +elementgui.recipe.cooking_book_category=烹饪手册类别: +elementgui.recipe.registry_name=配方注册名: +elementgui.recipe.name_space=配方命名空间:
使用 M命名空间来改变原版配方 +elementgui.recipe.group=配方组名称: +elementgui.recipe.type=配方类型:
建议不要修改已有的配方类型 +elementgui.recipe.xp_reward=经验值奖励: +elementgui.recipe.cooking_time=烹调时间(单位为刻,20刻为1秒): elementgui.recipe.error_crafting_no_result=合成配方需要定义一个结果(空气不计入) elementgui.recipe.error_crafting_no_ingredient=合成配方需要定义一个材料(空气不计入) elementgui.recipe.error_smelting_no_ingredient_and_result=熔炼配方需要定义一个输入输出(空气不计入) @@ -2516,79 +2597,79 @@ elementgui.recipe.error_campfire_no_ingredient_and_result=营火烹饪配方需 elementgui.recipe.error_smithing_no_ingredient_addition_and_result=锻造台配方需要定义一个添加、输入和输出(空气不计入) elementgui.recipe.error_brewing_no_input_ingredient_and_result=酿造台配方需要定义一个材料、输入和输出(空气不计入) elementgui.structuregen.event_structure_instance_generated=结构在存档生成时 -elementgui.structuregen.import_tooltip=点击此处导入 NBT 结构文件
使用工作区选项卡中的结构部分可获得更多选项。 -elementgui.structuregen.select_tooltip=要生成的结构\:
有关更多结构导入选项,请使用工作区选项卡的结构部分。 +elementgui.structuregen.import_tooltip=单击此处导入NBT结构文件
使用工作区选项卡中的结构部分可获得更多选项。 +elementgui.structuregen.select_tooltip=要生成的结构:
要获取更多结构导入选项,请使用工作区选项卡的结构部分 elementgui.structuregen.ignore_blocks=生成时忽略的方块 -elementgui.structuregen.surface_detection_type=地面检测类型\: -elementgui.structuregen.terrain_adaptation=地形适应类型\: -elementgui.structuregen.generation_stage=生成阶段\: -elementgui.structuregen.biomes_to_spawn=将会生成结构的生物群系\: -elementgui.structuregen.projection=结构高度适应高度方式\: +elementgui.structuregen.surface_detection_type=地面检测类型: +elementgui.structuregen.terrain_adaptation=地形适应类型: +elementgui.structuregen.generation_stage=生成阶段: +elementgui.structuregen.biomes_to_spawn=将会生成结构的生物群系: +elementgui.structuregen.projection=结构高度适应高度方式: elementgui.structuregen.separation_spacing=结构在区块内的分布方式: -elementgui.structuregen.separation=最小距离\: -elementgui.structuregen.spacing=平均距离\: +elementgui.structuregen.separation=最小距离: +elementgui.structuregen.spacing=平均距离: elementgui.structuregen.error_select_biomes=请在将会生成结构的生物群系选择至少一个生物群系 -elementgui.structuregen.error_select_structure_spawn=您需要选择一个由这个结构生成的结构才能继续。 -elementgui.tab.name=创造模式选项卡名称\: -elementgui.tab.icon=选项卡图标\: -elementgui.tab.search_bar=显示搜索栏\: -elementgui.tab.add_stuff_tip=要将方块/物品添加到这个选项卡,创建新元素并将这个标签设置为物品栏选项卡。 +elementgui.structuregen.error_select_structure_spawn=您需要选择一个结构来生成 +elementgui.tab.name=创造模式选项卡名称: +elementgui.tab.icon=选项卡图标: +elementgui.tab.search_bar=显示搜索栏: +elementgui.tab.add_stuff_tip=要将方块/物品添加到该选项卡,创建新元素并将该标签设置为物品栏选项卡。 elementgui.tab.error_needs_name=创造模式选项卡需要一个名字 elementgui.tag.registry_name=标签注册名 -elementgui.tag.namespace=标签的命名空间\:
选择 minecraft 命名空间以使用原版标签;选择 forge 命名空间以便与其他模组共享标签 +elementgui.tag.namespace=标签的命名空间:
选择 M命名空间以使用原版标签;选择 Forge命名空间以便与其他模组共享标签 elementgui.tag.type=标签类型 -elementgui.tag.elements=这个标签下的元素\: -elementgui.tool.event_block_destroyed=当方块被工具破坏 -elementgui.tool.event_entity_hit_with=当实体被工具击中时 -elementgui.tool.event_in_inventory_tick=当工具出现在物品栏时 -elementgui.tool.event_in_hand_tick=当工具出现在手中时 -elementgui.tool.event_swings=当实体挥动物品时 +elementgui.tag.elements=该标签下的元素: +elementgui.tool.event_block_destroyed=方块被工具破坏时 +elementgui.tool.event_entity_hit_with=实体被工具击中时 +elementgui.tool.event_in_inventory_tick=工具出现在物品栏时,每刻发生 +elementgui.tool.event_in_hand_tick=工具出现在手中时,每刻发生 +elementgui.tool.event_swings=实体挥动物品时 elementgui.tool.texture=工具纹理 -elementgui.tool.tool_3d_model=工具 3D 模型 +elementgui.tool.tool_3d_model=工具3D模型 elementgui.tool.shield_blocking_model=盾牌格挡时的模型: -elementgui.tool.type=类型\: -elementgui.tool.harvest_level=挖掘等级\: -elementgui.tool.efficiency=效率\: -elementgui.tool.attack_speed=攻击速度\: -elementgui.tool.damage_vs_entity=对生物/动物伤害(近战伤害)\: -elementgui.tool.usage_count=使用次数/耐久度\: -elementgui.tool.blocks_affected=受影响的方块\: +elementgui.tool.type=类型: +elementgui.tool.harvest_level=挖掘等级: +elementgui.tool.efficiency=效率: +elementgui.tool.attack_speed=攻击速度: +elementgui.tool.damage_vs_entity=对生物/动物伤害(近战伤害): +elementgui.tool.usage_count=使用次数/耐久度: +elementgui.tool.blocks_affected=受影响的方块: elementgui.tool.is_immune_to_fire=该工具防火吗? -elementgui.tool.stays_in_grid_when_crafting=合成后,输入的物品是否保留在工作台的方格中? -elementgui.tool.damaged_on_crafting=合成界面修复
确保启用“留在工作台的方格中”并且该物品是可损坏的 +elementgui.tool.stays_in_grid_when_crafting=合成后,输入的物品是否保留在合成方格中? +elementgui.tool.damaged_on_crafting=合成界面修复
确保启用“留在合成方格中”并且该物品是可损坏的 elementgui.tool.needs_a_name=工具需要一个名称 -elementgui.villager_profession.display_name=职业显示名称\: -elementgui.villager_profession.profession_block=职业的工作站点方块\: +elementgui.villager_profession.display_name=职业显示名称: +elementgui.villager_profession.profession_block=职业的工作站点方块: elementgui.villager_profession.profession_block_validator=村民的工作站点方块 -elementgui.villager_profession.action_sound=职业的工作声音\: -elementgui.villager_profession.hat=村民的帽子类型\: -elementgui.villager_profession.import_profession_texture=点击此处导入这个普通村民的职业纹理 -elementgui.villager_profession.import_zombified_profession_texture=点击此处导入这个僵尸村民的职业纹理 -elementgui.villager_profession.profession_texture=普通村民的职业纹理\: -elementgui.villager_profession.zombified_profession_texture=僵尸村民的职业纹理\: +elementgui.villager_profession.action_sound=职业的工作声音: +elementgui.villager_profession.hat=村民的帽子类型: +elementgui.villager_profession.import_profession_texture=单击此处导入该普通村民的职业纹理 +elementgui.villager_profession.import_zombified_profession_texture=单击此处导入该僵尸村民的职业纹理 +elementgui.villager_profession.profession_texture=普通村民的职业纹理: +elementgui.villager_profession.zombified_profession_texture=僵尸村民的职业纹理: elementgui.villager_profession.profession_needs_display_name=村民职业需要一个显示名 elementgui.villager_profession.profession_needs_texture=村民的职业需要一个纹理 elementgui.villager_profession.profession_needs_zombified_texture=僵尸村民的职业需要纹理 elementgui.villager_trade.add_profession_trades=为某一职业添加交易项 elementgui.villager_trade.add_entry=添加交易项 elementgui.villager_trade.remove_profession_trades=为该职业移除交易项 -elementgui.villager_trade.remove_entry=移除这个交易项 +elementgui.villager_trade.remove_entry=移除该交易项 elementgui.villager_trade.profession_trades=职业交易项 -elementgui.villager_trade.profession=职业\: -elementgui.villager_trade.level=等级\: -elementgui.villager_trade.price1=购买物品1\: -elementgui.villager_trade.price2=购买物品2(可选)\: -elementgui.villager_trade.sale=出售物品\: -elementgui.villager_trade.count_price_sale=数量\: -elementgui.villager_trade.max_trades=最大交易数\: -elementgui.villager_trade.xp=村民获得的经验\: -elementgui.villager_trade.price_multiplier=价格倍数\: +elementgui.villager_trade.profession=职业: +elementgui.villager_trade.level=等级: +elementgui.villager_trade.price1=购买物品1: +elementgui.villager_trade.price2=购买物品2(可选): +elementgui.villager_trade.sale=出售物品: +elementgui.villager_trade.count_price_sale=数量: +elementgui.villager_trade.max_trades=最大交易数: +elementgui.villager_trade.xp=村民获得的经验: +elementgui.villager_trade.price_multiplier=价格倍数: tab.workspace=工作区 tab.console=控制台 tab.image_maker=图像生成器 tab.animation_maker=动画生成器 tab.armor_image_maker=盔甲纹理生成器 -workspace.statusbar.autosave_message=工作区自动保存时间为 {0} +workspace.statusbar.autosave_message=工作区自动保存时间为{0} workspace.resources.tab.textures=纹理文件 workspace.resources.tab.3d_models=3D 模型和贴图 workspace.resources.tab.sounds=声音文件 @@ -2596,73 +2677,59 @@ workspace.resources.tab.structures=结构 workspace.resources.tab.screenshots=截图 workspace.textures.new=创建新的纹理 workspace.textures.import=导入纹理 -workspace.textures.edit_selected=编辑选中... -workspace.textures.duplicate_selected=复制选中... -workspace.textures.delete_selected=删除选中 -workspace.textures.export_selected=导出选中 -workspace.textures.confirm_deletion_message=您确定要删除这个文件吗?
注意\:如果您在任何地方使用这个文件,可能会出现损坏的纹理! -workspace.textures.select_dupplicate_type=选择您想要复制到的纹理类型\: -workspace.textures.select_texture_type=这个文件是哪种纹理? -workspace.textures.category.block=方块纹理\: -workspace.textures.category.item=物品纹理\: -workspace.textures.category.entity=实体纹理\: -workspace.textures.category.effect=药水效果纹理\: -workspace.textures.category.particle=粒子纹理\: -workspace.textures.category.screen=屏幕纹理(进度,GUI,叠加层...)\: -workspace.textures.category.armor=盔甲纹理\: -workspace.textures.category.other=其它纹理(画,模组图标...)\: -workspace.3dmodel.description={0}
贴图\:{1} +workspace.textures.edit_selected=编辑选中项... +workspace.textures.duplicate_selected=复制选中项... +workspace.textures.replace_selected=替换所选项... +workspace.textures.export_selected=导出所选项... +workspace.textures.select_dupplicate_type=选择您想要复制到的纹理类型: +workspace.textures.select_texture_type=该文件是哪种纹理? +workspace.textures.category.block=方块纹理: +workspace.textures.category.item=物品纹理: +workspace.textures.category.entity=实体纹理: +workspace.textures.category.effect=药水效果纹理: +workspace.textures.category.particle=粒子纹理: +workspace.textures.category.screen=屏幕纹理(进度,GUI,叠加层...): +workspace.textures.category.armor=盔甲纹理: +workspace.textures.category.other=其它纹理(画,模组图标...): +workspace.3dmodel.description={0}
贴图:{1} workspace.3dmodels.edit_texture_mappings=编辑贴图... -workspace.3dmodels.redefine_animations=重定义模型动画 ... -workspace.3dmodels.delete_selected=删除选中 -workspace.3dmodels.delete_confirm_message=您确定要删除这个模型吗?
注意\:如果您在任何地方使用这个模型,可能会出现损坏的纹理。
并且一些模组元素可能无法编译! -workspace.3dmodels.regenerating_code=重新生成代码 -workspace.3dmodels.regenerating_entity_code=重新生成实体代码 -workspace.3dmodels.rebuilding_workspace=正在重新构建工作区 +workspace.3dmodels.redefine_animations=重定义模型动画... workspace.3dmodels.animation_unsupported_title=不支持的动画 -workspace.3dmodels.animation_unsupported_message=这个模型不支持动画! +workspace.3dmodels.animation_unsupported_message=该模型不支持动画! workspace.3dmodels.mappings_unsupported_title=没有贴图 -workspace.3dmodels.mappings_unsupported_message=这个模型不支持贴图! -workspace.sounds.confirm_deletion_message=您确定要删除这个声音吗?
注意\:如果您在任何地方使用这个声音,它将不再起作用! -workspace.sounds.edit_selected=编辑选中... +workspace.3dmodels.mappings_unsupported_message=该模型不支持贴图! +workspace.sounds.edit_selected=编辑选中项... workspace.sounds.play_selected=播放选中项 -workspace.sounds.delete_selected=删除选中 -workspace.sounds.category=声音类别\:{0} -workspace.sounds.files=声音文件\: {0} -workspace.sounds.subtitle_and_category=副标题\: {0}, 声音类别\: {1} -workspace.screenshots.export_selected=导出选中 -workspace.screenshots.delete_selected=删除选中 +workspace.sounds.category=声音类别:{0} +workspace.sounds.files=声音文件:{0} +workspace.sounds.subtitle_and_category=字幕:{0},声音类别:{1} +workspace.screenshots.export_selected=导出选中项... workspace.screenshots.action_complete=操作完成 workspace.screenshots.use_background_message=所选屏幕截图将作为下次启动时的背景。 -workspace.screenshots.use_as_background=把选中的图片设置为 MCreator 的背景图片... -workspace.structure.confirm_deletion_message=您确定您想要删除选定的结构吗?
注意\:如果您在任何地方使用它们,它们将不会再生成! +workspace.screenshots.use_as_background=使用选中项作为MCreator背景... workspace.variables.variable_name=变量名 workspace.variables.variable_type=变量类型 workspace.variables.variable_scope=变量作用域 workspace.variables.initial_value=初始值 workspace.variables.add_new=添加新的变量 -workspace.variables.remove_selected=移除选中 workspace.variables.help=变量帮助 -workspace.variables.change_type=您确定要更改这个变量吗?
如果这个变量正在使用,这个操作可能导致编译错误。
如果您刚刚创建它,更改它是没问题的。 -workspace.variables.remove_variable_confirmation=您确定要删除这些变量?
如果这些变量正在使用中,这个操作可能会导致编译错误。 +workspace.variables.change_type=您确定要更改该变量吗?
如果该变量正在使用,该操作可能导致编译错误。
如果您刚刚创建它,更改它是没问题的。 workspace.localization.add_entry=添加本地化项 -workspace.localization.remove_selected=移除选中 -workspace.localization.export_to_csv=导出当前的语言为 CSV 文件 -workspace.localization.import_csv=导入 CSV 文件到当前语言中 +workspace.localization.export_to_csv=导出当前的语言为CSV文件 +workspace.localization.import_csv=导入CSV文件到当前语言中 workspace.localization.key_name_title=键名 -workspace.localization.key_name_message=输入您自定义语言条目的键名\: -workspace.localization.confirm_delete_map=您确定要删除这个本地化映射吗? -workspace.localization.confirm_delete_entry=您确定要删除选定的条目吗?
注意\:如果它们仍在使用,绑定它们的元素名称将无法工作! +workspace.localization.key_name_message=输入您自定义语言条目的键名: +workspace.localization.confirm_delete_map=您确定要删除该本地化映射吗? workspace.localization.export_translation=导出译文 workspace.localization.confirm_export=无法导出默认翻译(en_us) !
英语文本为模组元素定义。 workspace.localization.warning_export=您不能导入CSV到默认翻译(en_us)!
英语文本为模组元素定义。 workspace.localization.add_localization=添加新的本地化 workspace.localization.language_choose=选择本地化语言
-workspace.localization.language_copy=选择要复制
现有翻译的语言\: +workspace.localization.language_copy=选择要复制
现有译文的语言: workspace.localization.column_key=语言资源键 -workspace.stats.empty={0} [{1}]\: 尚无模组元素 -workspace.stats.current_workspace={0} [{1}]\: {2} 模组元素 -gradle.idle=Gradle 处于空闲状态 +workspace.stats.empty={0} [{1}]:尚无模组元素 +workspace.stats.current_workspace={0} [{1}]:{2}模组元素 +gradle.idle=Gradle处于空闲状态 menubar.code=代码 menubar.image=图像 menubar.file=文件 @@ -2671,137 +2738,137 @@ menubar.workspace=工作区 menubar.resources=资源 menubar.build_and_run=构建并运行 menubar.tools=工具 -menubar.tools.data_lists=Minecraft 数据列表 +menubar.tools.data_lists=M数据列表 menubar.window=窗口 menubar.help=帮助 menubar.help.search.tooltip=搜索教程,示例... -dialog.setup_workspace.step.gradle_files=正在设置 Gradle 项目文件 -dialog.setup_workspace.step.gradle_daemons=停止运行 Gradle 程序 -dialog.setup_workspace.step.gradle_project=正在设置 Gradle 项目 -dialog.setup_workspace.step.importing_gradle=正在导入 Gradle 项目 +dialog.setup_workspace.step.gradle_files=正在设置Gradle项目文件 +dialog.setup_workspace.step.gradle_daemons=停止运行Gradle程序 +dialog.setup_workspace.step.gradle_project=正在设置Gradle项目 +dialog.setup_workspace.step.importing_gradle=正在导入Gradle项目 dialog.setup_workspace.step.generating_base=生成基础源码 -dialog.setup_workspace.step.failed_gradle_caches=重新加载 Gradle 缓存失败 -dialog.setup_workspace.step.failed_build_caches=构建缓存失败。原因\: -dialog.setup_workspace.step.workspace_setup_fail=工作区建立失败

MCreator 工作区建立失败。根据出现的提示,尝试修复错误并重新建立。

请检查 https\://mcreator.net/support/knowledgebase 获取修复错误的提示。

若您是中国大陆用户,请先尝试重新建立,多试几次。

如果您可以自己修复错误(生成器、构建文件错误,或中国大陆用户可能存在的互联网连接问题...),解决
之后再点击第一个按钮。MCreator 将再次自动建立工作区。如果多次出现同一错误,请选择将错误日志复制到
剪贴板进行进一步检查。您可以关闭 MCreator,并在您认为问题已经解决时再次运行它。 -dialog.setup_workspace.step.workspace_setup_fail_title=MCreator 安装失败! -dialog.setup_workspace.step.workspace_setup_rerun=重新建立工作区
我已经解决了问题 +dialog.setup_workspace.step.failed_gradle_caches=重新加载Gradle缓存失败 +dialog.setup_workspace.step.failed_build_caches=构建缓存失败。原因: +dialog.setup_workspace.step.workspace_setup_fail=工作区配置失败

MCreator工作区配置失败。根据出现的提示,尝试修复错误并重新配置。

请访问 https\://mcreator.net/support/knowledgebase 获取修复错误的提示。

若您是中国大陆用户,请先尝试重新配置,多试几次。

如果您可以自己修复错误(生成器、构建文件错误,或中国大陆用户可能存在的互联网连接问题...),解决
之后再单击第一个按钮。MCreator将再次自动配置工作区。如果多次出现同一错误,请选择将错误日志复制到
剪贴板进行进一步检查。您可以关闭MCreator,并在您认为问题已经解决时再次运行它。 +dialog.setup_workspace.step.workspace_setup_fail_title=MCreator安装失败! +dialog.setup_workspace.step.workspace_setup_rerun=重新构建工作区
我已经解决了问题 dialog.setup_workspace.step.workspace_setup_openpref=打开偏好设置
并在之后重新运行 -dialog.setup_workspace.step.workspace_setup_copyclipboard=复制错误到剪贴板
并关闭这个工作区 +dialog.setup_workspace.step.workspace_setup_copyclipboard=复制错误到剪贴板
并关闭该工作区 dialog.setup_workspace.step.workspace_setup_close=关闭当前工作区 -dialog.setup_workspace.step.workspace_setup_fail_additionalinfo=

附加信息\: +dialog.setup_workspace.step.workspace_setup_fail_additionalinfo=

附加信息: dialog.new_workspace.title=新建工作区 common.help=帮助 dialog.new_workspace.button_new=创建新工作区 -dialog.new_workspace.type=工作区类型\: +dialog.new_workspace.type=工作区类型: dialog.workspace_settings.save_changes=保存更改 dialog.workspace_settings.title=工作区设置 dialog.workspace_settings.refactor.yes=是,重置工作区 dialog.workspace_settings.refactor.no=不,还原更改 dialog.workspace_settings.refactor.title=重置请求 -dialog.workspace_settings.refactor.text=您已更改了一些参数,需要重置整个工作区。

如果您有任何已锁定的模组元素,您最可能需要在这个更改后修改他们的代码。
您确定要继续吗? -dialog.workspace_settings.refactor.text_flavor_switch=您已经更改了一些需要重构整个工作区的参数。
如果您有任何已锁定的模组元素,您很可能需要在更改后调整其代码。

您确定要更改生成器类型吗?

不同的模组 API 在某些功能的使用上可能存在差异。
一些生成器也可能会有其它生成器所不支持的功能。

如果您继续,将进行备份,但您也应该自己进行备份。 +dialog.workspace_settings.refactor.text=您已更改了一些参数,需要重置整个工作区。

如果您有任何已锁定的模组元素,您最可能需要在该更改后修改他们的代码。
您确定要继续吗? +dialog.workspace_settings.refactor.text_flavor_switch=您已经更改了一些需要重构整个工作区的参数。

如果您有任何已锁定的模组元素,您很可能需要在更改后调整其代码。

您确定要更改生成器类型吗?

不同的模组API在某些功能的使用上可能存在差异。
一些生成器也可能会有其它生成器所不支持的功能。

如果您继续,将进行备份,但您也应该自己进行备份。 dialog.workspace_settings.lock_base_files=锁定基本模组文件 dialog.workspace_settings.server_side_mod=这是服务端模组 dialog.workspace_settings.tab.general=常规设置 -dialog.workspace_settings.tab.apis=外部 API +dialog.workspace_settings.tab.apis=外部API dialog.workspace_settings.tab.advanced=高级设置 dialog.workspace_settings.mod_name.invalid=模组名称不能为空,不能包含引号 dialog.workspace_settings.mod_name.verison_in_name=模组版本不应该是名称的一部分 dialog.workspace_settings.version.error=版本不能为空,不能包含引号 -dialog.workspace_settings.version.error2=版本号无效。原因\: {0} +dialog.workspace_settings.version.error2=版本号无效。原因:{0} dialog.workspace_settings.description.error=描述不能包含引号 dialog.workspace_settings.author.error=作者姓名不能包含引号 dialog.workspace_settings.website.error=网站链接不能包含引号 dialog.workspace_settings.section.basic=基础设置 dialog.workspace_settings.section.details=模组详情 -dialog.workspace_settings.display_name=模组显示名称\:
这个名称显示在游戏中 -dialog.workspace_settings.mod_id=模组 ID / 命名空间\:
用于模组识别 -dialog.workspace_settings.package=模组包名称\:
必须是一个有效的 Java 包名 -dialog.workspace_settings.generator=Minecraft 版本(生成器)\:
模组所用的 Minecraft 版本 -dialog.workspace_settings.version=模组版本\:
应该遵循M.m.p格式 -dialog.workspace_settings.description=模组描述\:
您的模组的简短描述 -dialog.workspace_settings.author=作者名称\: -dialog.workspace_settings.license=模组许可协议\: -dialog.workspace_settings.website=网站链接\: -dialog.workspace_settings.credits=模组贡献文本\: -dialog.workspace_settings.picture=模组 LOGO / 图片\:
在“资源”标签添加需要的图片(分类\:其他) +dialog.workspace_settings.display_name=模组显示名称:
该名称显示在游戏中 +dialog.workspace_settings.mod_id=模组ID/ 命名空间:
用于模组识别 +dialog.workspace_settings.package=模组包名称:
必须是一个有效的Java包名 +dialog.workspace_settings.generator=Minecraft版本(生成器):
模组所用的Minecraft版本 +dialog.workspace_settings.version=模组版本:
应该遵循M.m.p格式 +dialog.workspace_settings.description=模组描述:
您的模组的简短描述 +dialog.workspace_settings.author=作者名称: +dialog.workspace_settings.license=模组许可协议: +dialog.workspace_settings.website=网站链接: +dialog.workspace_settings.credits=模组贡献文本: +dialog.workspace_settings.picture=模组 LOGO / 图片:
在“资源”标签添加需要的图片(分类:其他) dialog.workspace_settings.credits.error=贡献文本不能包含引号 -dialog.workspace_settings.section.external_apis=外部 API 支持 -dialog.workspace_settings.section.external_apis.tooltip=选中复选框以添加依赖的外部 API
警告\: 如果您的模组使用外部 API, 一旦您导出它,不同时安装 API,它将无法正常工作 +dialog.workspace_settings.section.external_apis=外部API支持 +dialog.workspace_settings.section.external_apis.tooltip=选中复选框以添加依赖的外部API
警告:如果您的模组使用外部API, 一旦您导出它,不同时安装API,它将无法正常工作 dialog.workspace_settings.explore_plugins=浏览插件 -dialog.workspace_settings.plugins_tip=寻找更多 API?去看看 MCreator 插件。 -dialog.workspace_settings.version_check=Forge 版本检查 -dialog.workspace_settings.section.version_check=禁用 Minecraft 版本检查?
如果您想要确保用户使用正确的 Minecraft Forge 版本,
取消选中这个项并启用 Minecraft Forge 版本检查。 +dialog.workspace_settings.plugins_tip=寻找更多API?去看看MCreator插件。 +dialog.workspace_settings.version_check=Forge版本检查 +dialog.workspace_settings.section.version_check=禁用Minecraft版本检查?
如果您想要确保用户使用正确的Minecraft Forge版本,
取消选中该项并启用Minecraft Forge版本检查。 dialog.workspace_settings.section.advanced=高级设置 dialog.workspace_settings.server_side_only=模组是否只需要在服务端安装? dialog.workspace_settings.lock_base_files_label=锁定基础模组文件吗?
仅在您需要时, 并且在您懂Java时使用 -dialog.workspace_settings.update_url=模组更新 JSON URL\: -dialog.workspace_settings.required_mods=额外需要的模组\:
用逗号分隔模组 id -dialog.workspace_settings.dependencies=其他依赖项\:
使用逗号分隔模组 id -dialog.workspace_settings.dependants=其他依赖项\:
使用逗号分隔模组 id -dialog.workspace_settings.error_list=工作区设置有以下问题\: +dialog.workspace_settings.update_url=模组更新JSON URL: +dialog.workspace_settings.required_mods=额外需要的模组:
用逗号分隔模组ID +dialog.workspace_settings.dependencies=其他依赖项:
使用逗号分隔模组ID +dialog.workspace_settings.dependants=其他依赖项:
使用逗号分隔模组ID +dialog.workspace_settings.error_list=工作区设置有以下问题: dialog.workspace_settings.dialog.error.title=无效的工作区设置 dialog.workspace_settings.dialog.error=错误被标记在窗口上,带有红色颜色和错误图标,这样您就可以找到它们,
并根据此处的说明修复错误。 -dialog.new_workspace.spigot.display_name=显示插件名称\:
仅用于 MCreator -dialog.new_workspace.spigot.plugin_name=插件名称\:
用于插件识别 -dialog.new_workspace.spigot.generator=Minecraft 版本(生成器)\:
目标 Java 版版本 -dialog.new_workspace.spigot.package=插件 Java 包名称\:
用于代码生成器的根目录 -dialog.new_workspace.spigot.folder=工作区文件夹\: -dialog.new_workspace.spigot.notice=Spigot 插件是基于 Java 的服务器端模组,它们在 Minecraft Java 版上工作,
需要安装 Spigot 服务器 API 但不需要对客户进行任何特殊修改。 -dialog.new_workspace.spigot.toggle=\ Spigot 服务器插件 -dialog.new_workspace.forge.display_name=模组显示名称\:
这个名称显示在游戏中 -dialog.new_workspace.forge.modid=模组 ID / 命名空间\:
用于模组识别 -dialog.new_workspace.forge.generator=Minecraft 版本(生成器)\:
目标 Java 版版本 -dialog.new_workspace.forge.package=模组 Java包名称\:
用于代码生成器的根目录 -dialog.new_workspace.forge.folder=工作区文件夹\: -dialog.new_workspace.forge.notice=Minecraft Forge 模组是基于 Java 的 Minecraft Java 版模组,需要将
Minecraft Forge 安装在客户端或服务器上才能工作。 -dialog.new_workspace.forge.toggle=\ Minecraft Forge 模组 -dialog.new_workspace.neoforge.display_name=模组显示名称\:
这个名称显示在游戏中 -dialog.new_workspace.neoforge.modid=模组 ID / 命名空间\:
用于模组识别 -dialog.new_workspace.neoforge.generator=Minecraft 版本(生成器)\:
目标 Java 版版本 -dialog.new_workspace.neoforge.package=模组 Java 包名称\:
用于代码生成器的根目录 -dialog.new_workspace.neoforge.folder=工作区文件夹\: -dialog.new_workspace.neoforge.notice=NeoForge 模组是基于 Java 的 Minecraft Java 版模组,并且需要
NeoForge 安装在客户端或服务器上才能正常工作。 -dialog.new_workspace.neoforge.toggle=\ NeoForge 模组 -dialog.new_workspace.fabric.display_name=Fabric 模组显示名称\:
这个名称显示在游戏中 -dialog.new_workspace.fabric.modid=模组 ID / 命名空间\:
用于模组识别 -dialog.new_workspace.fabric.generator=Minecraft 版本(生成器)\:
目标 Java 版版本 -dialog.new_workspace.fabric.package=模组 Java包名称\:
用于代码生成器的根目录 -dialog.new_workspace.fabric.folder=工作区文件夹\: -dialog.new_workspace.fabric.notice=Fabric Minecraft 模组是基于Java的Minecraft Java版模组,需要将
Fabric安装在客户端(和服务器)上才能工作。 -dialog.new_workspace.fabric.toggle=\ Minecraft Fabric 模组 -dialog.new_workspace.quilt.display_name=Quilt 模组显示名称:
这个名称在游戏中显示 -dialog.new_workspace.quilt.modid=模组 ID / 命名空间\:
用于模组识别 -dialog.new_workspace.quilt.generator=Minecraft 版本(生成器)\:
目标 Java 版版本 -dialog.new_workspace.quilt.package=模组 Java 包名称\:
用于代码生成器的根目录 -dialog.new_workspace.quilt.folder=工作区文件夹\: -dialog.new_workspace.quilt.notice=QuiltMC Minecraft 模组是基于 Java 的 Minecraft Java 版模组。需要
Quilt 加载器安装在客户端或服务器上才能工作。 -dialog.new_workspace.quilt.toggle=\ QuiltMC 模组 -dialog.new_workspace.addon.display_name=Add-on 显示名称\:
这个名称显示在游戏中 -dialog.new_workspace.addon.addon_id=Add-on ID\:
用于 Add-on 识别 -dialog.new_workspace.addon.generator=Minecraft 版本(生成器)\:
目标基岩版版本 -dialog.new_workspace.addon.folder=工作区文件夹\: -dialog.new_workspace.addon.notice1=Add-On 目前是 Minecraft 和 MCreator 中的实验性功能,因这个功能
的覆盖面有限。 -dialog.new_workspace.addon.notice2=Add-On 是 Minecraft 基岩版的模组,不需要安装任何额外的软件
或模组加载器 -dialog.new_workspace.addon.toggle=\ Minecraft add-on -dialog.new_workspace.datapack.display_name=数据包显示名称\:
这个名称显示在游戏中 -dialog.new_workspace.datapack.modid=数据包 ID / 命名空间\:
用于包的识别 -dialog.new_workspace.datapack.generator=Minecraft 版本(生成器)\:
目标 Java 版版本 -dialog.new_workspace.datapack.folder=工作区文件夹\: -dialog.new_workspace.datapack.notice=Minecraft数据包是适用于 Minecraft Java 版且不需要安装任何
额外软件或模组加载器但功能设置有限的原版模组。 -dialog.new_workspace.datapack.toggle=\ Minecraft 数据包 -dialog.new_workspace.disabled.tooltip=您需要至少安装一个支持这个生成器类型的插件。 +dialog.new_workspace.spigot.display_name=插件显示名称:
仅用于MCreator +dialog.new_workspace.spigot.plugin_name=插件名称:
用于插件识别 +dialog.new_workspace.spigot.generator=Minecraft版本(生成器):
目标Java版版本 +dialog.new_workspace.spigot.package=插件Java包名称:
用于代码生成器的根目录 +dialog.new_workspace.spigot.folder=工作区文件夹: +dialog.new_workspace.spigot.notice=Spigot 插件是基于 Java 的服务器端模组,它们在Minecraft Java 版上工作,
需要安装 Spigot 服务器API但不需要对客户进行任何特殊修改。 +dialog.new_workspace.spigot.toggle=\ Spigot服务器插件 +dialog.new_workspace.forge.display_name=模组显示名称:
该名称显示在游戏中 +dialog.new_workspace.forge.modid=模组ID/ 命名空间:
用于模组识别 +dialog.new_workspace.forge.generator=Minecraft版本(生成器):
目标Java版版本 +dialog.new_workspace.forge.package=模组Java包名称:
用于代码生成器的根目录 +dialog.new_workspace.forge.folder=工作区文件夹: +dialog.new_workspace.forge.notice=Minecraft Forge模组是基于 Java 的Minecraft Java 版模组,需要将
Minecraft Forge安装在客户端或服务器上才能工作。 +dialog.new_workspace.forge.toggle=Minecraft Forge模组 +dialog.new_workspace.neoforge.display_name=模组显示名称:
该名称显示在游戏中 +dialog.new_workspace.neoforge.modid=模组ID/ 命名空间:
用于模组识别 +dialog.new_workspace.neoforge.generator=Minecraft版本(生成器):
目标Java版版本 +dialog.new_workspace.neoforge.package=模组Java包名称:
用于代码生成器的根目录 +dialog.new_workspace.neoforge.folder=工作区文件夹: +dialog.new_workspace.neoforge.notice=NeoForge模组是基于Java的Minecraft Java 版模组,并且需要
NeoForge安装在客户端或服务端上才能正常工作。 +dialog.new_workspace.neoforge.toggle=\ NeoForge模组 +dialog.new_workspace.fabric.display_name=Fabric模组显示名称:
该名称显示在游戏中 +dialog.new_workspace.fabric.modid=模组ID/ 命名空间:
用于模组识别 +dialog.new_workspace.fabric.generator=Minecraft版本(生成器):
目标Java版版本 +dialog.new_workspace.fabric.package=模组 Java包名称:
用于代码生成器的根目录 +dialog.new_workspace.fabric.folder=工作区文件夹: +dialog.new_workspace.fabric.notice=FabricMinecraft 模组是基于Java的Minecraft Java版模组,需要将
Fabric安装在客户端(和服务器)上才能工作。 +dialog.new_workspace.fabric.toggle=\ Minecraft Fabric模组 +dialog.new_workspace.quilt.display_name=Quilt模组显示名称:
该名称在游戏中显示 +dialog.new_workspace.quilt.modid=模组ID/ 命名空间:
用于模组识别 +dialog.new_workspace.quilt.generator=Minecraft版本(生成器):
目标Java版版本 +dialog.new_workspace.quilt.package=模组Java包名称:
用于代码生成器的根目录 +dialog.new_workspace.quilt.folder=工作区文件夹: +dialog.new_workspace.quilt.notice=QuiltMCMinecraft 模组是基于 Java 的Minecraft Java 版模组。需要
Quilt 加载器安装在客户端或服务器上才能工作。 +dialog.new_workspace.quilt.toggle=\ QuiltMC模组 +dialog.new_workspace.addon.display_name=附加包显示名称:
该名称显示在游戏中 +dialog.new_workspace.addon.addon_id=附加包ID:
用于附加包识别 +dialog.new_workspace.addon.generator=Minecraft版本(生成器):
目标基岩版版本 +dialog.new_workspace.addon.folder=工作区文件夹: +dialog.new_workspace.addon.notice1=附加包目前是Minecraft和MCreator中的实验性功能,所以功能
覆盖有限。 +dialog.new_workspace.addon.notice2=附加包是Minecraft基岩版的模组,不需要安装任何额外的软件
或模组加载器(modloader) +dialog.new_workspace.addon.toggle=Minecraft附加包 +dialog.new_workspace.datapack.display_name=数据包显示名称:
该名称显示在游戏中 +dialog.new_workspace.datapack.modid=数据包ID/ 命名空间:
用于包的识别 +dialog.new_workspace.datapack.generator=Minecraft版本(生成器):
目标Java版版本 +dialog.new_workspace.datapack.folder=工作区文件夹: +dialog.new_workspace.datapack.notice=Minecraft数据包是适用于Minecraft Java版且不需要安装任何
额外软件或模组加载器但功能设置有限的原版模组。 +dialog.new_workspace.datapack.toggle=Minecraft数据包 +dialog.new_workspace.disabled.tooltip=您需要至少安装一个支持该生成器类型的插件。 dialog.new_workspace.dialog_plugin_needed.title=需要插件 -dialog.new_workspace.dialog_plugin_needed.text=目前没有安装支持这个生成器类型的插件。
您想要浏览 MCreator 插件库吗? -dialog.new_workspace.error_list=工作区设置有以下问题\: +dialog.new_workspace.dialog_plugin_needed.text=目前没有安装支持该生成器类型的插件。
您想要浏览MCreator插件库吗? +dialog.new_workspace.error_list=工作区设置有以下问题: dialog.new_workspace.main_title_html=创建新工作区
请完成下面的新建工作区配置 -elementgui.particle.animated_frame_duration=动态纹理帧持续时间(刻)\: +elementgui.particle.animated_frame_duration=动态纹理帧持续时间(刻): elementgui.spawnlist.add_entry=添加生成条目 elementgui.spawnlist.spawn_entries=实体生成条目 elementgui.save_mod_element=保存模组元素 elementgui.code_viewer=生成的代码查看器 elementgui.save_keep_open=保存并保持打开 -elementgui.errors.heading=以下模组元素问题需要解决\: +elementgui.errors.heading=以下模组元素问题需要解决: elementgui.errors.title=页面上的错误/问题 elementgui.errors.note=错误被标记在窗口上,带有红色颜色和错误图标,这样您就可以找到它们,
并根据此处的说明修复错误。 action.pack_tools.material=创建材料包... @@ -2809,16 +2876,16 @@ action.pack_tools.ore=创建矿石包... action.pack_tools.tool=创建工具包... action.pack_tools.wood=创建木材包... action.pack_tools.armor=创建盔甲包... -dialog.generator_selector.current= 选定的生成器\: -dialog.generator_selector.generator_status=状态\: {0} +dialog.generator_selector.current= 选定的生成器: +dialog.generator_selector.generator_status=状态:{0} dialog.generator_selector.generator_status.deprecated=已被废弃 dialog.generator_selector.generator_status.dev=正在开发 dialog.generator_selector.generator_status.experimental=测试中 dialog.generator_selector.generator_status.legacy=遗留版本 dialog.generator_selector.generator_status.lts=长期支持 dialog.generator_selector.generator_status.stable=稳定版本 -dialog.generator_selector.features=特性概述\: -dialog.generator_selector.mod_element_types=支持的模组元素类型\: +dialog.generator_selector.features=特性概述: +dialog.generator_selector.mod_element_types=支持的模组元素类型: dialog.generator_selector.title=生成器选择器 dialog.generator_selector.coverage.textures=纹理 dialog.generator_selector.coverage.sounds=声音 @@ -2826,9 +2893,9 @@ dialog.generator_selector.coverage.soundcategories=声音类别 dialog.generator_selector.coverage.structures=结构 dialog.generator_selector.coverage.translations=翻译 dialog.generator_selector.coverage.variables=变量 -dialog.generator_selector.coverage.java_models=Java 3D 模型 -dialog.generator_selector.coverage.json_models=JSON 3D 模型 -dialog.generator_selector.coverage.obj_models=OBJ 3D 模型 +dialog.generator_selector.coverage.java_models=Java 3D模型 +dialog.generator_selector.coverage.json_models=JSON 3D 模 +dialog.generator_selector.coverage.obj_models=OBJ 3D模型 dialog.generator_selector.coverage.achievements=进度 dialog.generator_selector.coverage.biomes=生物群系 dialog.generator_selector.coverage.blocksitems=方块和物品 @@ -2857,88 +2924,91 @@ dialog.generator_selector.coverage.planttypes=植物类型 dialog.generator_selector.coverage.generationsteps=生成步骤 dialog.generator_selector.coverage.villagerprofessions=村民职业 dialog.generator_selector.coverage.itemtypes=物品类型 -dialog.generator_selector.element_coverage=原版/Forge 元素覆盖率(与最新支持的 Minecraft 版本相比)\: -dialog.generator_selector.procedure_coverage=流程系统覆盖率\: +dialog.generator_selector.element_coverage=原版/Forge元素覆盖率(与最新支持的Minecraft版本相比): +dialog.generator_selector.procedure_coverage=流程系统覆盖率: dialog.generator_selector.dev_gen_message=将当前生成器切换到开发中的生成器是行不通的。 dialog.generator_selector.dev_gen_title=不支持切换 dialog.generator_selector.coverage.procedures=流程块 -dialog.generator_selector.coverage.aitasks=AI 的任务与目标 +dialog.generator_selector.coverage.aitasks=AI的任务与目标 dialog.generator_selector.coverage.triggers=全局触发器 dialog.generator_selector.coverage.jsontriggers=进度触发器 dialog.generator_selector.coverage.cmdargs=命令参数 dialog.generator_selector.coverage.features=地物方块 dialog.generator_selector.generator_info=生成器信息 -dialog.spawn_list_entry.entity=实体\: -dialog.spawn_list_entry.type=生成类型\: -dialog.spawn_list_entry.weight=生成权重\: -dialog.spawn_list_entry.group_size=组大小\: +dialog.spawn_list_entry.entity=实体: +dialog.spawn_list_entry.type=生成类型: +dialog.spawn_list_entry.weight=生成权重: +dialog.spawn_list_entry.group_size=组大小: dialog.list_field.biome_list_title=选择生物群系 -dialog.list_field.biome_list_message=选择您想要添加到列表中的生物群系\: +dialog.list_field.biome_list_message=选择您想要添加到列表中的生物群系: dialog.list_field.biome_default_feature_title=选择生物群系默认地物 -dialog.list_field.biome_default_feature_message=选择您想要添加到列表中的生物群系默认地物\: +dialog.list_field.biome_default_feature_message=选择您想要添加到列表中的生物群系默认地物: +dialog.list_field.damage_type_list_title=选择伤害类型 +dialog.list_field.damage_type_list_message=选择要添加到列表中的伤害类型: dialog.list_field.dimension_title=选择维度 -dialog.list_field.dimension_message=选择您想要添加到列表中的维度\: +dialog.list_field.dimension_message=选择您想要添加到列表中的维度: dialog.list_field.enchantment_title=选择附魔 -dialog.list_field.enchantment_message=选择您想要添加到列表中的附魔\: +dialog.list_field.enchantment_message=选择您想要添加到列表中的附魔: dialog.list_field.entity_title=选择实体 -dialog.list_field.entity_message=选择您想要添加到列表中的实体\: +dialog.list_field.entity_message=选择您想要添加到列表中的实体: dialog.list_field.fluid_title=选择流体 -dialog.list_field.fluid_message=选择您想要添加到列表中的流体\: +dialog.list_field.fluid_message=选择您想要添加到列表中的流体: dialog.list_field.mod_element_title=选择元素 -dialog.list_field.mod_element_message=选择您想要添加到列表中的 {0} \: -dialog.list_selector.filter=筛选\: -dialog.selector.achievements.message=请选择一个进度\: -dialog.selector.biome.message=请选择一个生物群系\: -dialog.selector.damagesources.message=请选择一个伤害类型\: +dialog.list_field.mod_element_message=选择您想要添加到列表中的{0} : +dialog.list_selector.filter=筛选: +dialog.selector.achievements.message=请选择一个进度: +dialog.selector.biome.message=请选择一个生物群系: +dialog.selector.damagesources.message=请选择一个伤害类型: dialog.selector.dimension.message=请选择一个维度: -dialog.selector.enchantments.message=请选择一个附魔\: -dialog.selector.entity.message=请选择一个实体\: +dialog.selector.enchantments.message=请选择一个附魔: +dialog.selector.entity.message=请选择一个实体: +dialog.selector.entity_data.message=请选择一个数据参数: dialog.selector.fluids.message=请选择一个流体: dialog.selector.gamerules.message=请选择一个游戏规则: -dialog.selector.gui.message=请选择一个 GUI: +dialog.selector.gui.message=请选择一个GUI: dialog.selector.itemtypes.message=请选择一个物品类型 -dialog.selector.particles.message=请选择一个粒子\: -dialog.selector.potions.message=请选择一个药水\: -dialog.selector.effects.message=请选择一个药水效果\: -dialog.selector.procedure.message=请选择一个流程\: -dialog.selector.projectiles.message=请选择一个弹射物\: +dialog.selector.particles.message=请选择一个粒子: +dialog.selector.potions.message=请选择一个药水: +dialog.selector.effects.message=请选择一个药水效果: +dialog.selector.procedure.message=请选择一个流程: +dialog.selector.projectiles.message=请选择一个弹射物: dialog.selector.sound.title=声音选择 -dialog.selector.sound.message=请选择一个声音\: -dialog.selector.structures.message=请选择一个结构\: +dialog.selector.sound.message=请选择一个声音: +dialog.selector.structures.message=请选择一个结构: dialog.selector.title=数据列表项选择 dialog.tools.inject_tags.title=添加常见标签到工作区 dialog.tools.inject_tags.confirm=添加标签 -dialog.tools.inject_tags.text_top=选择要添加到工作区的标签,然后点击"添加标签"。
如果您已经手动 (不使用这个工具) 添加了任何这个类标签类型, 不要在这里勾选他们来避免冲突。 +dialog.tools.inject_tags.text_top=选择要添加到工作区的标签,然后单击"添加标签"。
如果您已经手动 (不使用该工具) 添加了任何该类标签类型, 不要在这里勾选他们来避免冲突。 action.pack_tools.tag=添加通用标签到工作区... -dialog.tools.inject_tags.tag.blocks.minecraft.dirt=树和其它植物可以在这些方块上生长。将您生物群系使用的地上(地下)方块加入这个标签组。 -dialog.tools.inject_tags.tag.blocks.minecraft.logs=如果这个标签中的一个方块在树叶方块周围,树叶将不会消失。 -dialog.tools.inject_tags.tag.blocks.minecraft.climbable=这个标签用于确定玩家可以攀爬的方块。也用于实体的 AI 寻路。 +dialog.tools.inject_tags.tag.blocks.minecraft.dirt=树和其它植物可以在这些方块上生长。将您生物群系使用的地上(地下)方块加入该标签组。 +dialog.tools.inject_tags.tag.blocks.minecraft.logs=如果该标签中的一个方块在树叶方块周围,树叶将不会消失。 +dialog.tools.inject_tags.tag.blocks.minecraft.climbable=该标签用于确定玩家可以攀爬的方块,也用于实体的AI寻路。 dialog.tools.inject_tags.tag.blocks.minecraft.fences=用于路径查找并定义与栅栏和拴绳的连接。 -dialog.tools.inject_tags.tag.blocks.minecraft.wooden_fences=用于 1.16.x 来定义与木制栅栏的连接。用这个标签标记的方块也包含 "minecraft\:fences" 标签。 +dialog.tools.inject_tags.tag.blocks.minecraft.wooden_fences=用于1.16.x来定义与木制栅栏的连接。用该标签标记的方块也包含 "minecraft\:fences" 标签。 dialog.tools.inject_tags.tag.blocks.minecraft.walls=用于路径查找并定义与其他墙、玻璃板、铁栏杆和栅栏门的连接。 dialog.tools.inject_tags.tag.blocks.minecraft.small_flowers=蜜蜂可以对这些方块进行授粉,末影人可以持有这些方块。 dialog.tools.inject_tags.tag.blocks.minecraft.tall_flowers=蜜蜂可以对这些方块进行授粉。 dialog.tools.inject_tags.tag.blocks.minecraft.bee_growables=蜜蜂可以为这些方块传粉以生长一个阶段 -dialog.tools.inject_tags.tag.blocks.minecraft.impermeable=这个标签中的方块不会让流体或蜂蜜滴穿透。 -dialog.tools.inject_tags.tag.blocks.minecraft.leaves=用于定义用剪刀和剑的破坏速度,用于某些怪物的 AI。 +dialog.tools.inject_tags.tag.blocks.minecraft.impermeable=该标签中的方块不会让流体或蜂蜜滴穿透。 +dialog.tools.inject_tags.tag.blocks.minecraft.leaves=用于定义用剪刀和剑的破坏速度,用于某些怪物的AI。 dialog.tools.inject_tags.tag.blocks.minecraft.valid_spawn=用来确定一个位置是否是玩家有效的初始出生位置。 -dialog.tools.inject_tags.tag.blocks.minecraft.fire=用于生物的 AI 路径设置,根据他们对火焰的反应。 +dialog.tools.inject_tags.tag.blocks.minecraft.fire=用于生物的AI路径设置,根据他们对火焰的反应。 dialog.tools.inject_tags.tag.blocks.minecraft.beacon_base_blocks=用于信标检查哪些基座方块可以激活它。 dialog.tools.inject_tags.tag.blocks.minecraft.dragon_immune=用来确定末影龙无法摧毁哪些方块。 dialog.tools.inject_tags.tag.blocks.minecraft.wither_immune=用来确定凋灵无法摧毁哪些方块。 dialog.tools.inject_tags.tag.blocks.minecraft.animals_spawnable_on=用于确定生物可以生成在哪个方块上。 dialog.tools.inject_tags.tag.blocks.minecraft.prevent_mob_spawning_inside=生物不能在标签组中标记的方块中生成。 -dialog.tools.inject_tags.tag.items.minecraft.arrows=这个标签组中的物品可以被弓和弩射出。 -dialog.tools.inject_tags.tag.items.minecraft.planks=这个标签组中的物品将适用所有原版木板配方。 -dialog.tools.inject_tags.tag.items.minecraft.flowers=这些物品可以繁殖蜜蜂。蜜蜂会跟随持有这个标签组中物品的玩家。 +dialog.tools.inject_tags.tag.items.minecraft.arrows=该标签组中的物品可以被弓和弩射出。 +dialog.tools.inject_tags.tag.items.minecraft.planks=该标签组中的物品将适用所有原版木板配方。 +dialog.tools.inject_tags.tag.items.minecraft.flowers=这些物品可以繁殖蜜蜂。蜜蜂会跟随持有该标签组中物品的玩家。 dialog.tools.inject_tags.tag.items.minecraft.small_flowers=可以用来做谜之炖菜,喂食哞菇,拥有 flowers 标签的其它属性 -dialog.tools.inject_tags.tag.functions.minecraft.tick=标记在这个标签组中的函数将每刻执行。 -dialog.tools.inject_tags.tag.functions.minecraft.load=在这个标签组中标记的函数将在世界加载时调用。 -dialog.tools.inject_tags.tag.entities.minecraft.arrows=这个标签组中的实体可以被弓和弩射中。 -dialog.tools.inject_tags.tag.entities.minecraft.beehive_inhabitors=这个标签组中的实体可以进入蜂窝中。 -dialog.tools.inject_tags.tag.entities.minecraft.impact_projectiles=这个标签组中的实体可以激活目标。 -dialog.tools.inject_tags.tag.entities.minecraft.raiders=这个标签中的实体参与袭击。 -dialog.tools.inject_tags.tag.entities.minecraft.skeletons=这个标签中的实体杀死苦力怕可以掉落音乐唱片。 +dialog.tools.inject_tags.tag.functions.minecraft.tick=标记在该标签组中的函数将每刻执行。 +dialog.tools.inject_tags.tag.functions.minecraft.load=在该标签组中标记的函数将在世界加载时调用。 +dialog.tools.inject_tags.tag.entities.minecraft.arrows=该标签组中的实体可以被弓和弩射中。 +dialog.tools.inject_tags.tag.entities.minecraft.beehive_inhabitors=该标签组中的实体可以进入蜂窝中。 +dialog.tools.inject_tags.tag.entities.minecraft.impact_projectiles=该标签组中的实体可以激活目标。 +dialog.tools.inject_tags.tag.entities.minecraft.raiders=该标签中的实体参与袭击。 +dialog.tools.inject_tags.tag.entities.minecraft.skeletons=该标签中的实体杀死苦力怕可以掉落音乐唱片。 dialog.tools.inject_tags.tag.biomes.minecraft.is_overworld=标记在主世界中生成的生物群系。 dialog.tools.inject_tags.tag.biomes.minecraft.is_nether=标记在下界中生成的生物群系。 dialog.tools.inject_tags.tag.biomes.minecraft.is_end=标记末地中生成的生物群系。 @@ -2948,75 +3018,86 @@ dialog.tools.inject_tags.tag.biomes.minecraft.is_river=标记在河流类型中 dialog.tools.inject_tags.tag.biomes.minecraft.is_hill=标记为丘陵的生物群系。 dialog.tools.inject_tags.tag.biomes.minecraft.is_forest=标记在森林类型中的生物群系。 dialog.tools.inject_tags.tag.biomes.minecraft.is_savanna=热带草原类型的标记生物群系 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_drowning=该标签组中的伤害类型会受到水下呼吸效果和“ drowningDamage”游戏规则(是否会被溺水)的影响。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_explosion=该标签组中的伤害类型会受到爆炸保护附魔的影响。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fall=该标签组中的伤害类型会受到缓降效果、摔落缓冲附魔和"fallDamage"游戏规则(是否会被摔死)的影响。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fire=该标签组中的伤害类型受抗火效果、火焰保护附魔和“fireDamage”(是否会被烧伤)游戏规则的影响。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_freezing=该标签组中的伤害类型会受到皮革盔甲和“ freezeDamage”(是否会被冻伤)游戏规则的影响。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_projectile=该标签组中的伤害类型会受到弹射物保护附魔的影响。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_armor=该标签组中的伤害类型无法通过盔甲或盾牌减伤。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_cooldown=该标签组中的伤害类型会跳过无敌时间。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_effects=该标签组中的伤害类型会无视所有保护,如保护类效果、有保护类附魔盔甲或保护类附魔。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_enchantments=该标签组中的伤害类型会无视盔甲附魔(例如保护附魔)。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_shield=该标签组中的伤害类型会无视盾牌格挡。 workspace_file_browser.title=工作区文件浏览器 workspace_file_browser.search=以文件名搜索 workspace_file_browser.open=打开 workspace_file_browser.open_desktop=以默认程序打开 workspace_file_browser.show_in_explorer=在资源管理器中显示 workspace_file_browser.remove_file=删除…… -workspace_file_browser.remove_file.message=您确定要删除选中的文件吗?
注意\:删错文件会破坏工作区 -workspace_file_browser.new_class.class_name=键入这个类的名称\:
确保类名是没有 .java 扩展名(后缀)的有效 Java 名称。
文件将被添加到选定的包中,如果没有选择则将被添加到默认的包中。 +workspace_file_browser.remove_file.message=您确定要删除选中的文件吗?
注意:删错文件会破坏工作区 +workspace_file_browser.new_class.class_name=键入该类的名称:
确保类名是没有 .java 扩展名(后缀)的有效Java名称。
文件将被添加到选定的包中,如果没有选择则将被添加到默认的包中。 workspace_file_browser.new_class.class_name.title=类名 -workspace_file_browser.new_image=键入这个图像的文件名 -workspace_file_browser.new_json=键入 json 的文件名 -workspace_file_browser.new_package.package_name=键入包名\:
请确保您的包名是有效的(例如. my.custom.package)
所有包名将从默认包名声明开始! +workspace_file_browser.new_image=键入该图像的文件名 +workspace_file_browser.new_json=键入json的文件名 +workspace_file_browser.new_package.package_name=键入包名:
请确保您的包名是有效的(例如my.custom.package)
所有包名将从默认包名声明开始! workspace_file_browser.new_package.package_name.title=包名 -workspace_file_browser.new_folder_name.folder_name=输入这个文件夹的名字 +workspace_file_browser.new_folder_name.folder_name=输入该文件夹的名字 workspace_file_browser.new_folder_name.folder_name.title=文件夹名 workspace_file_browser.new_folder_name.folder=文件夹 datalist_combobox.not_supported={0} - 不支持 -help_loader.no_entry_learn_more=没有定义帮助条目。在 MCreator 的 Wiki 上了解更多关于 {1} 的内容 -help_loader.learn_about=
在 MCreator 的 Wiki 上了解更多关于 {1} -help_loader.no_help_entry=尚未为 {0} 定义帮助条目。
+help_loader.no_entry_learn_more=没有定义提示。在MCreator的Wiki上了解更多关于{1}的内容。 +help_loader.learn_about=
在MCreator的Wiki上了解更多关于{1}的内容。 +help_loader.no_help_entry=尚未为{0}定义提示。
help_loader.no_help_found=给定的帮助环境中没有找到帮助。 -theme.default_dark.description=默认 MCreator 暗色主题 -theme.default_light.description=默认 MCreator 亮色主题 -theme.matrix.description=由 Max094_Reikeb 贡献的社区主题 -theme.midnight.description=由 Van 贡献的社区主题 +theme.default_dark.description=默认MCreator暗色主题 +theme.default_light.description=默认MCreator亮色主题 +theme.matrix.description=由Max094_Reikeb贡献的社区主题 +theme.midnight.description=由Van贡献的社区主题 condition.common.false=(从不) condition.common.true=(总是) condition.common.no_additional=(没有附加条件) condition.common.use_vanilla=(使用原版条件) condition.common.disable=禁用 procedure.common.no_procedure=(无流程) -procedure.common.fixed=固定数值\: +procedure.common.fixed=固定数值: procedure.common.if=\ 如果 procedure.common.do=\ 执行 -gradle.errors.title=Gradle 任务失败,出现错误 -gradle.errors.error=错误代码\: +gradle.errors.title=Gradle任务失败,出现错误 +gradle.errors.error=错误代码: gradle.errors.do_nothing=不进行任何操作 -gradle.errors.clear_caches=清除 Gradle 缓存 -gradle.errors.open_options=打开 Gradle 选项 +gradle.errors.clear_caches=清除Gradle缓存 +gradle.errors.open_options=打开Gradle选项 gradle.errors.open_help_page=打开帮助页面​​​​​​​​ -gradle.errors.cache_corrupted=Gradle 缓存已损坏!

Gradle 所依赖的缓存似乎已损坏或过时。
缓存需要清除并重新下载。您可以通过点击下面的按钮来做到这一点。

在您清理缓存后,第一次构建 Gradle 可能需要比通常更长的时间。
重要消息\: 如果这个提示重复出现,说明可能是工作区和生成器的问题。
若新建工作区正常,请导出本工作区,再导入一次。
若新建工作区也有问题,说明是生成器问题,请去 Github 汇报 Bug。 -gradle.errors.cache_outdated=Gradle 缓存已过时!

您正在离线模式中使用 MCreator。 缓存已经过时,需要更新。
您需要在偏好设置- Gradle 选项中禁用 MCreator 的离线模式,
这样 Gradle 才可以下载新版本的依赖和缓存文件。

过后,您可以重新开启离线模式。 -gradle.errors.reobf_failed=Gradle reobfJar 任务失败!
如果您在文件名中使用非 ASCII(非英文字母) 字符,就会发生这种情况。 -gradle.errors.internet_interrupted=网络连接中断了!
Gradle 运行时您的网络连接中断了,
没有下载完所需的文件。请确认
您的网络连接稳定,并重试。 -gradle.errors.no_internet=Gradle 联网失败!
Gradle 下载所需的文件失败,因为网络连接可能不可用,
或者被防火墙和杀毒软件阻断。如果其它应用能够联网,尝试关闭防火墙和杀毒软件。
如果您根本没有网络,尝试在有网络连接的时候使用 MCreator,
因为 Gradle 需要联网来完成一些任务。

这个问题也可能会在依赖服务器过载时发生。如果是这样,
等至服务器不拥挤后再使用 MCreator,
可能需要多试几次,因为服务器负荷是不可预测的。 -gradle.errors.jvm_heap_space=Gradle 使用的 Java 虚拟机运行内存不足!
被分配给 Gradle 使用的 Java 虚拟机的运行内存太低了。
您可以在 MCreator 的偏好设置- Gradle 选项来进行更改。 -gradle.errors.xms_invalid=检查到非法运行内存分配!
您给 Gradle 分配了非法的运行内存初始值
您可以在 MCreator 的偏好设置- Gradle 选项来进行更改。 -gradle.errors.xmx_invalid=检查到非法运行内存分配!
您给 Gradle 分配了非法的运行内存最大值
您可以在 MCreator 的偏好设置- Gradle 选项来进行更改。 -gradle.errors.jvm_crashed=Java 虚拟机的本地代码崩溃了。别担心!
用 Java 有时就会发生这种事。这个错误不是由您的模组和代码造成的。
重新运行一次任务就可以修复。

错误详细(由 Java 提供)\:
Java 运行环境检测到重大错误。
如果您想要提交错误报告,请访问\:https\://bugreport.java.com/bugreport/crash.jsp
该错误是在 Java 虚拟机之外的本地代码中发生。 -gradle.errors.build_failed=MCreator 检测到 Gradle 没能成功地完成构建。

这可能由多种原因导致。我们已经建立了一个帮助页面,
包括了这个问题的常见原因和解决方法。

检查控制台日志,找到错误提示,将它们与帮助页面上的典例比较。
然后按照指示去做,来解决这个问题。

重要消息\:如果您是中国大陆用户,这很可能是外网访问慢所致。
建议多试几次,或者使用可靠的 VPN,如果上述方法无效,请选择手动下载构建文件,一般情况下构建需要半个小时或以上。 -gradle.errors.build_failed.title=Gradle 构建失败 +gradle.errors.cache_corrupted=Gradle缓存已损坏!

Gradle所依赖的缓存似乎已损坏或过时。
缓存需要清除并重新下载。您可以通过单击下面的按钮来做到这一点。

在您清理缓存后,第一次构建Gradle可能需要比通常更长的时间。
重要消息:如果该提示重复出现,说明可能是工作区和生成器的问题。
若新建工作区正常,请导出本工作区,再导入一次。
若新建工作区也有问题,说明是生成器问题,请去 Github 汇报 Bug。 +gradle.errors.cache_outdated=Gradle缓存已过时!

您正在离线模式中使用 MCreator。 缓存已经过时,需要更新。
您需要在偏好设置-Gradle选项中禁用MCreator的离线模式,
这样Gradle才可以下载新版本的依赖和缓存文件。

过后,您可以重新开启离线模式。 +gradle.errors.reobf_failed=Gradle reobfJar任务失败!
这通常发生在您在文件名中使用非ASCII(非英文字母) 字符。 +gradle.errors.internet_interrupted=网络连接中断了!
Gradle运行时您的网络连接中断了,
没有下载完所需的文件。请确认
您的网络连接稳定,并重试。 +gradle.errors.no_internet=Gradle无法联网!
Gradle无法下载所需的文件,因为网络连接可能不可用,
或者被防火墙和杀毒软件阻止。如果其它应用能够联网,请尝试关闭防火墙和杀毒软件。
如果您根本没有网络,尝试在有网络连接的时候使用MCreator,
因为Gradle需要联网来完成一些任务。

该问题也可能会在所依赖的服务器过载时发生。如果是这样,
等至服务器不拥挤后再使用MCreator,
可能需要多试几次,因为服务器负荷是不可预测的。 +gradle.errors.jvm_heap_space=Gradle使用的Java虚拟机运行内存不足!
被分配给Gradle使用的Java虚拟机的运行内存太低了。
您可以在MCreator的偏好设置-Gradle选项来进行更改。 +gradle.errors.xms_invalid=检查到非法运行内存分配!
您给Gradle分配了非法的运行内存初始值
您可以在MCreator的偏好设置-Gradle选项来进行更改。 +gradle.errors.xmx_invalid=检查到非法运行内存分配!
您给Gradle分配了非法的运行内存最大值
您可以在MCreator的偏好设置-Gradle选项来进行更改。 +gradle.errors.jvm_crashed=Java虚拟机的本地代码崩溃了。别担心!
用Java有时就会发生这种事。该错误不是由您的模组和代码造成的。
重新运行一次任务就可以修复。

错误详细(由Java提供):
Java运行环境检测到重大错误。
如果您想要提交错误报告,请访问:https\://bugreport.java.com/bugreport/crash.jsp
该错误是在Java虚拟机之外的本地代码中发生。 +gradle.errors.build_failed=MCreator检测到Gradle没能成功地完成构建。

这可能由多种原因导致。我们已经建立了一个帮助页面,
包括了该问题的常见原因和解决方法。

检查控制台日志,找到错误提示,将它们与帮助页面上的典例比较。
然后按照指示去做,来解决该问题。

重要消息:如果您是中国大陆用户,这很可能是外网访问慢所致。
建议多试几次,或者使用可靠的VPN。如果上述方法无效,请选择手动下载构建文件,一般情况下构建需要半个小时或以上。 +gradle.errors.build_failed.title=Gradle构建失败 validators.only_number_list=只允许数字列表 validators.java_name.cannot_start_with_underscore=名称不能以下划线开始 validators.java_name.needs_name=名称不能为空 validators.java_name.invalid_name=无效的名称 -validators.java_name.reserved_keywords=名称包含保留的 Java 关键字 +validators.java_name.reserved_keywords=名称包含保留的Java关键字 validators.java_name.vanilla_names=不要使用原版的名字,这可能会导致构建问题! validators.java_name.characters_convertible=名称包含将被转换的字符 validators.java_names.upper_case_first_character=Java标准推荐首字母大写 validators.select_element=请选择元素 -validators.registry_name.empty={0} 不能为空 -validators.registry_name.length={0} 不能超过 {1} 个字符 -validators.registry_name.invalid={0} 只能包含小写英文字母、 数字和 {1} -validators.registry_name.invalid2={0} 的最后不能是";" -validators.registry_name.invalid3={0} 不能包含多个";" -validators.unique_name.empty={0} 不能为空 -validators.unique_name.duplicate={0} 已经被使用 +validators.registry_name.empty={0}不能为空 +validators.registry_name.length={0}不能超过{1}个字符 +validators.registry_name.invalid={0}只能包含小写英文字母、数字和{1} +validators.registry_name.invalid2={0}的最后不能是";" +validators.registry_name.invalid3={0}不能包含多个";" +validators.unique_name.empty={0}不能为空 +validators.unique_name.duplicate={0}已经被使用 validator.texture_needed=您需要选择一个纹理 -validator.image_size=所选图像大小不相同 +validator.image_size=所选图像尺寸不相同 validator.image_size.empty=主图像为空或为null validator.singletag.multiple=当在列表中使用标签时,只能在列表中显示单个元素 action.ide.refomat_code_only=仅重新格式化代码 @@ -3029,17 +3110,29 @@ action.browser.new_package=包 action.browser.new_json_file=JSON文件 action.browser.new_image_file=图片文件 action.browser.new_folder=文件夹 -action.browser.new_class=Java 类 +action.browser.new_class=Java类 action.ide.search_in_code=在代码中搜索 action.ide.replace_in_code=在代码中替换 action.image_editor.undo=撤消更改 action.image_editor.undo.tooltip=单击此处撤销之前的更改 action.image_editor.save_as=另存为 -action.image_editor.save_as.tooltip=点击此处将更改保存到新文件 +action.image_editor.save_as.tooltip=单击此处将更改保存到新文件 action.image_editor.save=保存 action.image_editor.save.tooltip=单击此处可将更改保存到现有文件。如果是新文件,将打开“另存为”对话框。 action.image_editor.redo=还原更改 action.image_editor.redo.tooltip=单击此处还原之前的更改 +action.image_editor.selection.clear=清除所选内容 +action.image_editor.selection.clear.tooltip=单击此处以清除所选内容 +action.image_editor.copy=复制 +action.image_editor.copy.tooltip=单击此处将选定区域复制到剪贴板 +action.image_editor.copy_all=全部复制 +action.image_editor.copy_all.tooltip=单击此处将整个图像复制到剪贴板 +action.image_editor.cut=剪切 +action.image_editor.cut.tooltip=单击此处将选定区域剪切到剪贴板 +action.image_editor.paste=粘贴 +action.image_editor.paste.tooltip=单击此处以粘贴剪贴板的内容 +action.image_editor.delete=删除 +action.image_editor.delete.tooltip=单击此处以删除选定区域 action.ide.save=保存代码 action.ide.save.result=代码已保存 action.ide.save.tooltip=单击此处以在当前代码编辑器中保存代码 @@ -3050,104 +3143,106 @@ common.add=添加 common.close=关闭 common.cancel=取消 common.confirmation=确认 -common.dependency={0}, 类型为\: {1} +common.delete_selected=删除选中项 +common.dependency={0},类型为:{1} common.mod_element_name=模组元素名称 common.namespace=命名空间 common.name_already_exists=名称已存在 common.not_applicable=N/A +common.search_usages=在工作区中搜索引用 common.warning=警告 components.collapsible_panel.expand=单击展开 components.collapsible_panel.collapse=单击折叠 -components.state_label.when=当 {0} 时 -components.state_label.edit=编辑这个状态 +components.state_label.when=当{0}时 +components.state_label.edit=编辑该状态 components.state_label.error_empty=状态不能为空。 components.state_label.error_empty.title=空状态 -components.state_label.error_duplicate=这个状态已被定义。 +components.state_label.error_duplicate=该状态已被定义。 components.state_label.error_duplicate.title=重复的状态 ide.warnings.read_only=这是(反编译/提供的)源代码,只读,仅供内部参考和教育使用 -ide.warnings.created_from_ui={0} 是从 MCreator 的界面创建的。您需要锁定它的代码来防止代码被覆盖! -ide.warnings.save_unlocked_element=您正在尝试保存未锁定的代码文件!

这意味着 MCreator 可能会在某些情况下覆盖您的更改。
要防止这种情况,您可以锁定代码。

如果代码被锁定,MCreator 将不更改源代码。 但这意味着当
升级 MCreator 或更改 Minecraft 版本时, 更改和修复不会应用于被锁定的元素,
需要手动修复。

请在进行这个操作之前阅读 MCreator 网站上有关锁定代码的 wiki 页面。 -ide.warnings.save_unlocked_element.title=覆盖 MCreator 生成的文件 -ide.warnings.file_not_saved=文件 {0} 尚未保存。
请选择解决这个冲突的方式\: +ide.warnings.created_from_ui={0}是从MCreator的界面创建的。您需要锁定它的代码来防止代码被覆盖! +ide.warnings.save_unlocked_element=您正在尝试保存未锁定的代码文件!

这意味着MCreator可能会在某些情况下覆盖您的更改。
要防止这种情况,您可以锁定代码。

如果代码被锁定,MCreator将不更改源代码。 但这意味着当
升级MCreator或更改Minecraft版本时, 更改和修复不会应用于被锁定的元素,
需要手动修复。

请在进行该操作之前阅读MCreator网站上有关锁定代码的 wiki 页面。 +ide.warnings.save_unlocked_element.title=覆盖MCreator生成的文件 +ide.warnings.file_not_saved=文件{0}尚未保存。
请选择解决方式: ide.errors.failed_find_declaration=无法找到声明! ide.tips.save_and_build=代码已保存并开始构建 ide.tips.reformat_and_organize_imports=重新格式化和组织了代码和导入 -ide.tips.save_and_launch=代码已保存并启动 Minecraft +ide.tips.save_and_launch=代码已保存并启动Minecraft ide.actions.lock_and_save=锁定代码并保存 ide.actions.save_without_locking=不锁定并保存 ide.action.close_and_save=关闭并保存 -dialog.new_workspace.letters_valid=路径中只允许有英文字母、数字、 _/+-\\\:()[].@$\=` 和空格。 -dialog.new_workspace.valid_characters=工作区文件夹名不应包含以下字符\:/\\\:>"?*| 和空格 -dialog.new_workspace.file_permission_problem=MCreator 没有在选定的目录中读写的权限! -blockly.warning.no_side_sync=块 {0} 不自动同步客户端和服务端,这意味着它在某些情况下可能无法正常工作。 +dialog.new_workspace.letters_valid=路径中只允许有英文字母、数字、 _/+-\\:()[].@$\=` 和空格。 +dialog.new_workspace.valid_characters=工作区文件夹名不应包含以下字符:/\\:>"?*| 和空格 +dialog.new_workspace.file_permission_problem=MCreator没有在选定的目录中读写的权限! +blockly.warning.no_side_sync=块{0}不会在客户端和服务端间自动同步,这意味着它在某些情况下可能无法正常工作。 blockly.warning.no_more_argument=在消息参数之后添加更多的参数将使该命令无法工作。 blockly.warning.no_item_extension_fuel=从一个被“燃料物品扩展条件”触发的流程中获取燃料值将导致循环,从而使游戏崩溃 blockly.warning.state_provider_int_property_warning=如果方块没有给定的属性,或者给定的值超出限制,数据包将会无法识别。 blockly.warnings.binary_operations=双输入块的输入中的一个为空。对其使用默认类型值。 -blockly.warnings.boolean=获取逻辑块值失败,使用 true 作为值。 -blockly.warnings.flow_control=无法获取循环中断类型。 {0} -blockly.warnings.variables.local_scope_unsupported=这个编辑器不支持本地变量! -blockly.warnings.skip=跳过这个块。 +blockly.warnings.boolean=无法获取逻辑块值,使用true作为值 +blockly.warnings.flow_control=无法获取循环中断类型。{0} +blockly.warnings.variables.local_scope_unsupported=该编辑器不支持本地变量! +blockly.warnings.skip=跳过该块。 blockly.warnings.ternary_operator.no_condition=找到无条件的三元运算符方块,使用 true 作为值。 -blockly.warnings.number_block=找不到数字块值,使用 0 作为值。 -blockly.warnings.constant_number_block=未能找到常数值,使用 0 作为值。 -blockly.warnings.disabled_block_type.skip=禁用块类型 {0} 。跳过这个块。 -blockly.warnings.unknown_block_type.skip=未知块类型 {0} 。跳过这个块。 +blockly.warnings.number_block=无法找到数字块值,使用0作为值。 +blockly.warnings.constant_number_block=无法找到常数值,使用0作为值。 +blockly.warnings.disabled_block_type.skip=块类型{0}已禁用,正在跳过该块。 +blockly.warnings.unknown_block_type.skip=块类型{0}为未知 ,正在跳过该块。 blockly.warnings.skip_unknown_var_type=跳过未知的变量类型! -blockly.warnings.if_no_condition=检测到 if 块未包含条件。该条件将始终为 true。 -blockly.warnings.if_no_main_body=检测到缺少主体的 if 块! +blockly.warnings.if_no_condition=检测到if块未包含条件。该条件将始终为true。 +blockly.warnings.if_no_main_body=发现没有主体的if方块! blockly.warnings.empty_code_block=空代码块被跳过。 -blockly.warnings.empty_not_block=检测到 not 块未传入任何值。该块的返回值将始终为 False。 -blockly.warnings.empty_loop=循环块条件或主体为空,这个块已被跳过。 -blockly.warnings.empty_print_block=空 print 打印块已被跳过。 -blockly.warnings.call_procedure.nonexistent=流程调用块调用了不存在的流程 {0} +blockly.warnings.empty_not_block=发现了没有输入任何值的not块,它的返回值将总为False。 +blockly.warnings.empty_loop=循环块条件或主体为空,该块已被跳过。 +blockly.warnings.empty_print_block=空print打印块已被跳过。 +blockly.warnings.call_procedure.nonexistent=流程调用块调用了不存在的流程{0} blockly.warnings.call_procedure.missing_inputs=在特定位置调用流程块缺少坐标输入。它将被作为普通调用流程块处理。 -blockly.warnings.old_command.note=接受所有参数和调用流程是一个旧的块。只在没有其他参数被使用,并且您想要任意输入参数时才使用。 +blockly.warnings.old_command.note=接受所有参数和调用流程是一个旧的块,只在没有其他参数被使用,并且您想要任意输入参数时才使用。 blockly.warnings.call_procedure.empty=空流程调用块被跳过。 blockly.warnings.retval.empty=空返回块被跳过。 blockly.warnings.singular_math=数学块中有值为空。使用值0。 blockly.warnings.empty_compare_text=字符串比较块中有值为空。使用默认值。 -blockly.warnings.empty_text_block=空文本块。其值将为空字符串。 -blockly.warnings.empty_text_length=空字符串长度块。其值将为0。 -blockly.warnings.empty_text_is_empty_block=空“文本是否为空”块。其值将为 true。 -blockly.warnings.empty_text_uppercase_block=跳过空文本大写块。使用默认值。 -blockly.warnings.empty_text_lowercase_block=跳过空文本小写块。使用默认值。 -blockly.warnings.empty_text_trim_block=跳过空文本修剪块。使用默认值。 -blockly.warnings.block_not_supported=选定的发生器不支持 {0} 块。它将被跳过。 -blockly.warnings.unmodifiable_ai_bases=所选的生物 AI 基础不支持自定义 AI 任务,这个 AI 将不会生成。 -blockly.warnings.statement_input_empty=块 {1} 上的声明输入 {0} 为空。 -blockly.warnings.features.missing_placement=缺少位置。地物可能不会在指定位置生成 -blockly.errors.disabled_block_type.remove=禁用块类型 {0}。删除这个块! -blockly.errors.unknown_block_type.remove=未知块类型 {0}。删除这个块! -blockly.errors.cancel_event.null=加载选定的外部触发器失败。 +blockly.warnings.empty_text_block=空文本块,其值将为空字符串。 +blockly.warnings.empty_text_length=空字符串长度块,其值将为0。 +blockly.warnings.empty_text_is_empty_block=空“文本为空”块,其值将为true。 +blockly.warnings.empty_text_uppercase_block=跳过空文本大写块,使用默认值。 +blockly.warnings.empty_text_lowercase_block=跳过空文本小写块,使用默认值。 +blockly.warnings.empty_text_trim_block=跳过空文本修剪块,使用默认值。 +blockly.warnings.block_not_supported=选定的生成器不支持{0}块,它将被跳过。 +blockly.warnings.unmodifiable_ai_bases=所选的生物AI基础不支持自定义AI任务,该AI将不会生成。 +blockly.warnings.statement_input_empty=块{1}上的声明输入{0}为空。 +blockly.warnings.features.missing_placement=缺少位置,地物可能不会在指定位置生成 +blockly.errors.disabled_block_type.remove=块类型{0}已禁用,删除该块! +blockly.errors.unknown_block_type.remove=块类型{0}为未知,删除该块! +blockly.errors.cancel_event.null=无法加载选定的外部触发器。 blockly.errors.cancel_event.not_cancellable=选定的全局触发器不可取消。 -blockly.errors.cancel_event.no_selected_trigger=这个流程不使用全局触发器,因这个取消事件块不能取消任何触发器。 +blockly.errors.cancel_event.no_selected_trigger=该流程不使用全局触发器,因此取消事件块不能取消任何触发器。 blockly.errors.custom_dependency=自定义依赖方块未完全定义! -blockly.errors.variables.invalid_local_var={0} 块绑定到的本地变量不存在。 {1} -blockly.errors.variables.invalid_var={0} 块绑定到的变量不存在。 {1} -blockly.errors.variables.no_local_scope.statement=语句 {0} 不支持本地变量。 -blockly.errors.variables.missing_entity_input={0} 个玩家变量块缺少实体输入。 -blockly.errors.variables.no_getter_support=当前生成器不支持获取在 {1} 范围内的类型 {0} 变量 -blockly.errors.variables.no_setter_support=当前生成器不支持设置在 {1} 范围内的类型 {0} 变量。{2} -blockly.errors.variables.improperly_defined=一个 {0} 变量块未正确定义。 +blockly.errors.variables.invalid_local_var={0}块绑定到的本地变量不存在。{1} +blockly.errors.variables.invalid_var={0}块绑定的变量不存在。{1} +blockly.errors.variables.no_local_scope.statement=语句{0}不支持本地变量。 +blockly.errors.variables.missing_entity_input={0}个玩家变量块缺少实体输入。 +blockly.errors.variables.no_getter_support=当前生成器不支持获取在{1}范围内的类型{0}变量 +blockly.errors.variables.no_setter_support=当前生成器不支持设置在{1}范围内的类型{0}变量。{2} +blockly.errors.variables.improperly_defined=一个{0}变量块未正确定义。 blockly.errors.time_to_formatted_string=格式化后的文本块时间不能为空。 -blockly.errors.unsupported=这个编辑器不支持 {0} 流程块! -blockly.errors.remove_block=删除这个模块! +blockly.errors.unsupported=该编辑器不支持{0}流程块! +blockly.errors.remove_block=删除该块! blockly.errors.ternary_operator.nesting=三元运算符块不能嵌套在输出值中。 blockly.errors.ternary_operator.no_output=找到没有输出值的三元运算符块。 -blockly.errors.empty_mcitem=空 Minecraft 元素块。您需要定义元素。 -blockly.errors.exception_compiling=编译该块时出现异常\: {0} +blockly.errors.empty_mcitem=空Minecraft元素块,您需要定义元素。 +blockly.errors.exception_compiling=编译该块时出现异常:{0} blockly.errors.invalid_return_block=有返回值的流程必须始终以有效的返回块结束 blockly.errors.empty_output_code_block=输出代码块不能为空! blockly.errors.empty_text_to_number=字符串到数字转换器块为空 -blockly.errors.procedure_retval.nonexistent=调用流程并获取返回值块调用了不存在的流程 {0} +blockly.errors.procedure_retval.nonexistent=调用流程并获取返回值块调用了不存在的流程{0} blockly.errors.procedure_retval.empty=空流程返回值块 -blockly.errors.retval.inside_statement=返回块 {0} 在语句块内无法工作! +blockly.errors.retval.inside_statement=返回块{0}在语句块内无法工作! blockly.errors.retval.one_retval_block=在单一流程中只能使用一种返回类型。 blockly.error.event_result.failed_external_trigger=加载选定的外部触发器失败。 blockly.error.event_result.external_trigger_no_result=选定的全局触发器没有结果 -blockly.errors.event_result.no_external_trigger_used=这个流程不使用全局触发器,因这个设置事件结果块不能设置任何结果。 -blockly.errors.event_result.unsupported=这个编辑器不支持设置事件结果流程块! +blockly.errors.event_result.no_external_trigger_used=该流程不使用全局触发器,因此设置事件结果块不能设置任何结果。 +blockly.errors.event_result.unsupported=该编辑器不支持设置事件结果流程块! blockly.errors.empty_text_contains=文本包含块不能有空输入! blockly.errors.empty_text_starts_with=“检测文本是否以...开头”块输入不能为空! blockly.errors.empty_text_ends_with=“检测文本是否以...结尾”块输入不能为空! @@ -3157,37 +3252,37 @@ blockly.errors.join.undefined_inputs=连接为字符串块需要定义所有输 blockly.errors.join.invalid=跳过无效的连接字符串块。 blockly.errors.empty_replace=替换字符串块内容不能为空! blockly.errors.empty_substring=取子字符串块不能有空输入! -blockly.errors.block_not_supported=选定的发生器不支持 {0} 块。它将被跳过。 -blockly.errors.block_errors_in_statements=返回块 {0} 在语句块内无法工作! -blockly.errors.field_not_defined=块 {1} 上的字段 {0} 未被定义。 -blockly.errors.input_empty=块 {1} 上的输入 {0} 是空的。 -blockly.errors.duplicate_dependencies_provided=输入 {0} 所提供的依赖项已经由父语句输入提供的依赖项 -blockly.errors.duplicate_dependencies_provided.statement=语句输入 {0} 提供的依赖项已经由父语句输入提供 -blockly.errors.api_required=块 {1} 所需的API "{0}" 在工作区设置中被禁用,或者不被当前生成器支持。 -blockly.errors.call_procedure_missing_deps=您要调用的流程({0}) 未提供所需的依赖项 {1} +blockly.errors.block_not_supported=选定的生成器不支持{0}块,它将被跳过。 +blockly.errors.block_errors_in_statements=返回块{0}在语句块内无法工作! +blockly.errors.field_not_defined=块{1}上的框{0}未被定义。 +blockly.errors.input_empty=块{1}上的输入{0}是空的。 +blockly.errors.duplicate_dependencies_provided=输入{0}所提供的依赖项已经由父语句输入提供 +blockly.errors.duplicate_dependencies_provided.statement=语句输入{0}提供的依赖项已经由父语句输入提供 +blockly.errors.api_required=块{1}所需的API"{0}"在工作区设置中被禁用,或者不被当前生成器支持。 +blockly.errors.call_procedure_missing_deps=您要调用的流程({0})未提供所需的依赖项{1} blockly.errors.features.missing_feature=缺少地物 blockly.block.cancel_event=取消事件 -dialog.bedrock.enable_addons=您的 Add-On 以前没有被添加到您的 Minecraft 基岩版中。

请确保您 在设置选定的世界中都启用了您的附加组件。
要让 Add-On 正常工作, 请确保您的测试世界有
启用作弊模式和实验性游戏玩法这样才可使 Add-On 正常工作。 -dialog.bedrock.enable_addons.title=启用 Add-On +dialog.bedrock.enable_addons=您的附加包以前没有被添加到您的Minecraft基岩版中。

请确保您 在设置选定的世界中都启用了您的附加组件。
要让附加包正常工作, 请确保您的测试世界有
启用作弊模式和实验性游戏玩法这样才可使附加包正常工作。 +dialog.bedrock.enable_addons.title=启用附加包 dialog.bedrock.options.close_reload=关闭并重新加载 dialog.bedrock.options.close_reload_always=关闭并重新加载(不再询问) dialog.bedrock.options.cancel=取消测试运行 -dialog.bedrock.already_opened=检测到 Minecraft 基岩版已经运行。您可以\:
  1. 关闭它(任何已打开的世界都不会被保存),重新加载 addon 并再次启动
  2. 执行第一个操作,并在之后的运行中禁用这个消息
  3. 取消本次运行,手动关闭 Minecraft 基岩版并再次点击运行按钮 -dialog.bedrock.already_opened.title=Minecraft 基岩版已经打开 -dialog.bedrock.failed=无法打开 Minecraft 基岩版。
    请确保您已从商店安装它。 +dialog.bedrock.already_opened=检测到Minecraft基岩版已经运行。您可以:
    1. 关闭它(任何已打开的世界都不会被保存),重新加载 addon 并再次启动
    2. 执行第一个操作,并在之后的运行中禁用该消息
    3. 取消本次运行,手动关闭Minecraft基岩版并再次单击运行按钮 +dialog.bedrock.already_opened.title=Minecraft基岩版已经打开 +dialog.bedrock.failed=无法打开Minecraft基岩版。
      请确保您已从商店安装它。 dialog.bedrock.failed.title=客户端运行失败 dialog.bedrock.unsupported=您似乎没有从商店安装基岩版。 -dialog.bedrock.unsupported.windows=基岩版目前仅在 Windows 10+ 上支持 +dialog.bedrock.unsupported.windows=基岩版目前仅在Windows 10+上支持 dialog.bedrock.unsupported.title=不支持运行客户端 -dialog.plugin_load_failed.msg1=某些插件加载失败\: -dialog.plugin_load_failed.msg2=某些功能可能无法正常工作。请检查 MCreator 日志文件获取更多详细信息。
      我们建议联系插件作者获取更多信息和支持。 +dialog.plugin_load_failed.msg1=某些插件加载失败: +dialog.plugin_load_failed.msg2=某些功能可能无法正常工作。请检查MCreator日志文件获取更多详细信息。
      我们建议联系插件作者获取更多信息和支持。 dialog.plugin_load_failed.title=某些插件加载失败 -notification.plugin_load_failed.msg=以下插件加载失败\: +notification.plugin_load_failed.msg=以下插件加载失败: notification.common.more_info=更多信息 -notification.update_available.msg=MCreator 有新版本可用。

      已安装版本\:{0}
      新版本\:{1} -notification.patch_available.msg=有新版本 {0} 可用。

      已安装版本\: {0}.{1}
      最新的版本\: {0}.{2} +notification.update_available.msg=MCreator有新版本可用。

      已安装版本:{0}
      新版本:{1} +notification.patch_available.msg=有新版本{0}可用。

      已安装版本:{0}.{1}
      最新版:{0}.{2} notification.plugin_updates.msg=有可用的插件更新 -notification.news.title=来自 MCreator 网站的新闻\: {0} +notification.news.title=来自MCreator网站的新闻:{0} notification.news.read_more=了解更多 notification.news.hide=隐藏通知 -simple_list_entry.remove=删除这个条目 \ No newline at end of file +simple_list_entry.remove=删除该条目 \ No newline at end of file diff --git a/plugins/mcreator-localization/lang/texts_zh_TW.properties b/plugins/mcreator-localization/lang/texts_zh_TW.properties index c9849ac5541..39dd993108d 100644 --- a/plugins/mcreator-localization/lang/texts_zh_TW.properties +++ b/plugins/mcreator-localization/lang/texts_zh_TW.properties @@ -3,23 +3,23 @@ dialog.accelerators.accelerator=快速鍵 dialog.accelerators.action=操作 dialog.accelerators.title=快速鍵對照 -dialog.workspace_selector.new_workspace=建立新工作室… -dialog.workspace_selector.open_workspace=開啟工作室… +dialog.workspace_selector.new_workspace=建立新工作空間… +dialog.workspace_selector.open_workspace=開啟工作空間… dialog.workspace_selector.import=從檔案匯入… dialog.workspace_selector.recent_workspace={0}
      最後一次開啟與\:{2}
      位置\:{1} -dialog.workspace_selector.no_workspaces_loaded=
      無法載入近期開啟的工作室捷徑
      重開它們以再次
      將其加入清單中。 -dialog.workspace_selector.no_workspaces=沒有近期的工作室 +dialog.workspace_selector.no_workspaces_loaded=
      無法載入近期開啟的工作空間捷徑
      重開它們以再次
      將其加入清單中。 +dialog.workspace_selector.no_workspaces=沒有近期使用的工作空間 dialog.workspace_selector.version=版本 {0} dialog.workspace_selector.preferences=偏好設定 dialog.workspace_selector.donate=捐贈 dialog.workspace_selector.news=MCreator 官網的最新資訊\: dialog.workspace_selector.motw=每周模組推薦\: dialog.workspace_selector.webdata.loading=載入資料中... -dialog.workspace_selector.delete_workspace.message=你想讓 {0} 從最近的工作室中移除
      還是從你的電腦磁碟中刪除呢?(此次刪除不能撤銷)?

      從清單中刪除對於本地的工作室檔案無任何影響 -dialog.workspace_selector.delete_workspace.title=刪除工作室 +dialog.workspace_selector.delete_workspace.message=你想讓 {0} 從最近的工作空間中移除
      還是從你的電腦磁碟中刪除呢?(此次刪除不能撤銷)?

      從清單中刪除對於本地的工作空間檔案無任何影響 +dialog.workspace_selector.delete_workspace.title=刪除工作空間 dialog.workspace_selector.delete_workspace.recent_list=從最近清單中移除 -dialog.workspace_selector.delete_workspace.workspace=刪除工作室資料夾 -dialog.workspace_selector.delete_workspace.confirmation=你確定要永久刪除 {0} 嗎?

      如果你點擊 ,所有工作室檔案將從計算機中永久刪除。 +dialog.workspace_selector.delete_workspace.workspace=刪除工作空間資料夾 +dialog.workspace_selector.delete_workspace.confirmation=你確定要永久刪除 {0} 嗎?

      如果你點擊 ,所有工作空間檔案將從計算機中永久刪除。 action.mcreator_website=MCreator 官網 action.mcreator_community=MCreator 社群 action.publish_modification=發布我的模組… @@ -27,45 +27,45 @@ action.preferences=偏好設定… action.exit=關閉 MCreator action.wiki=線上說明 action.support=支援 -action.create_texture=創建材質… -action.create_armor_texture=創建盔甲材質… -action.create_animated_texture=創建動態材質… -action.import_block_texture=匯入方塊材質… -action.import_item_texture=匯入物品材質… -action.import_entity_texture=匯入實體材質... -action.import_effect_texture=匯入效果材質... -action.import_particle_texture=匯入粒子材質... -action.import_screen_texture=匯入介面和疊加層等材質… -action.import_armor_texture=匯入盔甲材質… -action.import_other_texture=匯入繪畫、图示等材質... -action.workspace.close=關閉此工作室 +action.create_texture=建立紋理… +action.create_armor_texture=建立盔甲紋理… +action.create_animated_texture=建立動態紋理… +action.import_block_texture=匯入方塊紋理… +action.import_item_texture=匯入物品紋理… +action.import_entity_texture=匯入實體紋理... +action.import_effect_texture=匯入效果紋理... +action.import_particle_texture=匯入粒子紋理... +action.import_screen_texture=匯入介面和疊加層等紋理… +action.import_armor_texture=匯入盔甲紋理… +action.import_other_texture=匯入繪畫、图示等紋理... +action.workspace.close=關閉此工作空間 action.show_console=顯示控制台 -action.show_workspace=顯示工作室選項卡 +action.show_workspace=顯示工作空間選項卡 action.close_all_tabs=關閉所有選項卡 action.close_tab=關閉目前選項卡 action.replace=替換 action.replace_all=全部替換 -action.show_workspace_browser=顯示工作室檔案瀏覽器 -action.hide_workspace_browser=隱藏工作室檔案瀏覽器 -action.open_workspace_folder=開啟工作室資料夾 +action.show_workspace_browser=顯示工作空間檔案瀏覽器 +action.hide_workspace_browser=隱藏工作空間檔案瀏覽器 +action.open_workspace_folder=開啟工作空間資料夾 action.gradle.build_gradle_project=僅建置 Gradle 專案 action.gradle.build_gradle_project.tooltip=此操作將在不對任何原始檔案作出變更的情況下觸發 Gradle 專案建置。 -action.gradle.build_workspace=建置工作室 +action.gradle.build_workspace=建置工作空間 action.gradle.build_workspace.tooltip=此操作將重新生成主模組原始檔案並建置 Gradle 專案 action.gradle.cancel_task=取消 Gradle 任務 action.gradle.disabled=由於 Gradle 任務在控制台中處於活動狀態,因此當前已停用此操作。
      這可能是因 MCreator 啟動了 Minecraft 客戶端, 又可能處於建置或配置狀態,或其它
      Gradle 操作。請檢查控制台以取得更多訊息,或等至任務完成。 action.gradle.clear_caches=清除所有 Gradle 快取檔案... action.gradle.clear_caches.option.gradle_caches=清除 Gradle 快取檔案 action.gradle.clear_caches.option.gradle_folder=清除整個 Gradle 資料夾 -action.gradle.clear_caches.option.message=此操作將清除所有生成器和工作室的所有Gradle快取檔案。
      這樣做可以解決某些情況下Gradle建置錯誤。

      此操作不會影響你的檔案或工作室,但是清除快取後,
      每種類型和版本的生成器的首次建置都將花費更長的時間。
      在某些情況下,需要清除整個Gradle資料夾才能解決Gradle錯誤。

      在此操作期間,所有正在執行的建置任務和打開的測試客戶端都將關閉。 +action.gradle.clear_caches.option.message=此操作將清除所有生成器和工作空間的所有Gradle快取檔案。
      這樣做可以解決某些情況下Gradle建置錯誤。

      此操作不會影響你的檔案或工作空間,但是清除快取後,
      每種類型和版本的生成器的首次建置都將花費更長的時間。
      在某些情況下,需要清除整個Gradle資料夾才能解決Gradle錯誤。

      在此操作期間,所有正在執行的建置任務和打開的測試客戶端都將關閉。 action.common.apply=套用 -action.common.create=創建 +action.common.create=建立 action.common.resize=調整大小 action.gradle.clear_caches.option.title=清除所有 Gradle 快取檔案 -action.gradle.close_mcreator_while_installation_message=Gradle 仍在設定工作室\!
      在設定 Gradle 時,你無法關閉 MCreator。請等待安裝完成。
      你可以在控制台中監視安裝進度。 +action.gradle.close_mcreator_while_installation_message=Gradle 仍在設定工作空間!
      在設定 Gradle 時,你無法關閉 MCreator。請等待安裝完成。
      你可以在控制台中監視安裝進度。 action.gradle.close_mcreator_while_installation_title=Gradle 設定中 -action.gradle.close_mcreator_while_running_message=有一些 Gradle 任務仍在後台中執行。
      確定要關閉此工作室嗎?

      如果繼續,正在執行的任務將會被取消。 -action.gradle.close_mcreator_while_running_title=關閉工作室 +action.gradle.close_mcreator_while_running_message=有一些 Gradle 任務仍在後台中執行。
      確定要關閉此工作空間嗎?

      如果繼續,正在執行的任務將會被取消。 +action.gradle.close_mcreator_while_running_title=關閉工作空間 dialog.ai_condition.additional_start=附加啟動條件 dialog.ai_condition.additional_continue=附加繼續條件 dialog.ai_condition.panel_name=AI 智慧條件編輯器 @@ -79,19 +79,19 @@ dialog.animation_maker.settings=動畫設定 dialog.animation_maker.next_frame=下一幀 dialog.animation_maker.previous_frame=上一幀 dialog.animation_maker.animation_timeline=動畫時間軸 -dialog.animation_maker.add_frames=添加幀... -dialog.animation_maker.add_frames_from_template=從範本中添加幀... -dialog.animation_maker.add_frames_from_strip=從已有動畫中添加幀... -dialog.animation_maker.add_frames_from_gif=從 GIF 檔案添加幀... +dialog.animation_maker.add_frames=新增幀... +dialog.animation_maker.add_frames_from_template=從範本中新增幀 +dialog.animation_maker.add_frames_from_strip=從已有動畫中新增幀 +dialog.animation_maker.add_frames_from_gif=從 GIF 新增幀 dialog.animation_maker.gif_importing=GIF 匯入 dialog.animation_maker.gif_reading=讀取 GIF dialog.animation_maker.gif_processing=處理 GIF dialog.animation_maker.gif_format_unsupported=不支援壓縮的 GIF 格式! dialog.animation_maker.remove_selected_frames=刪除所選定的幀 -dialog.animation_maker.save_animated_texture=儲存此動態材質 -dialog.animation_maker.kind_of_texture=這是哪種材質? -dialog.animation_maker.type_of_texture=材質類型 -dialog.animation_maker.enter_texture_name=輸入材質名稱(不能含有空格、英文大寫、和英文以外的語言)\: +dialog.animation_maker.save_animated_texture=儲存此動態紋理 +dialog.animation_maker.kind_of_texture=這是哪種紋理? +dialog.animation_maker.type_of_texture=紋理類型 +dialog.animation_maker.enter_texture_name=輸入紋理名稱(不能含有空格、英文大寫、和英文以外的語言)\: dialog.animation_maker.resource_error=資源錯誤 dialog.animation_maker.texture_already_exists={0} 此名稱已存在! dialog.animation_maker.size_selection=大小選擇 @@ -105,13 +105,13 @@ dialog.animation_maker.strip_color_choice=選擇動畫和顏色(可 dialog.animation_maker.strip=動畫檔案\: dialog.animation_maker.colorize=著色\: dialog.animation_maker.add_frames_from_file=從其它檔案中添加幀 -dialog.armor_image_maker.type=盔甲材質類型\: -dialog.armor_image_maker.color=材質顏色\: +dialog.armor_image_maker.type=盔甲紋理類型\: +dialog.armor_image_maker.color=紋理顏色\: dialog.armor_image_maker.saturation_lightness_lock=鎖定飽和度和亮度\: -dialog.armor_image_maker.properties=盔甲材質屬性 -dialog.armor_image_maker.preview=盔甲材質預覽 +dialog.armor_image_maker.properties=盔甲紋理屬性 +dialog.armor_image_maker.preview=盔甲紋理預覽 dialog.armor_image_maker.save=儲存此盔甲 -dialog.armor_image_maker.name=盔甲材質名稱(不能含有空格、英文大寫、和英文以外的語言)\: +dialog.armor_image_maker.name=盔甲紋理名稱(不能含有空格、英文大寫、和英文以外的語言)\: dialog.armor_image_maker.resource_error=資源錯誤 dialog.armor_image_maker.name_already_exists=此盔甲名稱已存在! dialog.common.save_changes=儲存變更 @@ -119,35 +119,35 @@ dialog.cache_cleanup.title=Gradle 快取檔案清理 dialog.cache_cleanup.progress.stopping_daemons=停止執行 Gradle 程式中 dialog.cache_cleanup.progress.clearing_gradle_caches_folder=清除 Gradle 快取檔案資料夾中 dialog.cache_cleanup.progress.build_task=執行 Gradle 建置任務中 -dialog.code_error.compilation_desc=你的一個或多個主模組檔案未正確編譯。

      這通常是由於建置期間模組程式碼不一致造成的。
      MCreator 可通過重新生成整個模組的程式碼以解決此問題。

      若你鎖定模組元素或模組基礎文件,它們也會導致此錯誤。


      點擊重新生成程式碼按鈕以繼續此操作。
      +dialog.code_error.compilation_desc=你的一個或多個主模組檔案未正確編譯。

      這通常是由於建置過程中的模組程式碼不一致導致的。
      MCreator 可以透過重新生成整個模組的程式碼來解決這個問題。

      如果你鎖定了模組元素或模組基礎文件,也會導致此錯誤。


      點擊重新生成代碼程式碼以執行此操作。
      dialog.code_error.compilation_title=主要模組檔案編譯錯誤 -dialog.code_error.compilation_list=你的工作室中包含無法編譯的模組元素。

      這很可能是由你添加或編輯的最後一個模組元素所引起的。 嘗試變更
      導致建置錯誤的元素設定(下面列出了此類元素)以嘗試解決此問題。

      如果無法解決此問題,請從 文件 菜单將工作室匯出成 ZIP 檔案,然後將此檔案寄送到
      Github 上的 Bug 追蹤器,可以為你提供幫助。

      導致建置錯誤的模組元素清單(最多顯示 10 個元素)\:

      +dialog.code_error.compilation_list=你的工作空間包含無法正確編譯的模組元素。

      這很可能是由於你最後添加或編輯的模組元素引起的。嘗試修改導致建置錯誤的模組元素的設定(下面列出了這些元素)以嘗試解決此問題。

      如果你無法解決此問題,請從「檔案」選單中將工作空間匯出為可共用的 ZIP 檔案,然後在 GitHub 上的問題追蹤器傳送給我們,以便我們嘗試幫助你。

      導致編譯錯誤的模組元素列表\:

      dialog.code_error.regenerate_code=重新生成程式碼 dialog.code_error.ignore_error=忽略錯誤 -dialog.code_error.show_in_workspace=在工作室中顯示 +dialog.code_error.show_in_workspace=在工作空間中顯示 dialog.code_error.show_build_log=顯示建置日誌 dialog.code_error.title=一些模組元素導致編譯錯誤 dialog.console_search.match=匹配大小寫 dialog.console_search.no_result=找不到任何結果 dialog.element_order.instructions=點擊元素或拖動來對齊重新排序 dialog.element_order.editor_title=創造模式選項卡順序編輯器 -dialog.element_order.change_message=MCreator 現在將重建工作室程式碼以套用變更。

      現有資料將存儲!(例如\: 測試客戶端的地圖) +dialog.element_order.change_message=MCreator 現在將重建工作空間程式碼以套用變更。

      現有資料將存儲!(例如\: 測試客戶端的地圖) dialog.element_order.change_title=元素順序變更 -dialog.file.error_save_inside_workspace_root_message=你不能在工作室的根檔案夾中創建新工作室。 首先在這裡創建一個子目錄! -dialog.file.error_save_inside_workspace_root_title=工作室錯誤 -dialog.file.error_save_inside_folder_not_empty_message=你為工作室選擇的目錄不為空! +dialog.file.error_save_inside_workspace_root_message=你不能在工作空間的根檔案夾中建立新工作空間。 首先在這裡建立一個子目錄! +dialog.file.error_save_inside_workspace_root_title=工作空間錯誤 +dialog.file.error_save_inside_folder_not_empty_message=你為工作空間選擇的目錄不為空! dialog.file.error_save_inside_folder_not_empty_title=目錄不能為空 -dialog.file.error_invalid_path=你為工作室選擇的目錄路徑無效!

      你選擇了以下目錄\:
      {0}

      只能填入英文字母、數字、_/+-\\\:()[].,@$\=`,路徑中允許使用空格。 -dialog.file.error_invalid_path_title=無效的工作室目錄路徑 -dialog.file.error_invalid_name=你的工作室所選擇的目錄名稱無效!

      工作室資料夾中,不能包含以下字符\:/ \\\:>“?* | 和空格。 -dialog.file.error_invalid_name_title=無效的工作室目錄名稱 -dialog.file.error_directory_doesnt_exist=你要創建的工作室的目錄不存在! -dialog.file.error_directory_doesnt_exist_title=工作室錯誤 -dialog.file.error_no_access=你为工作室所選擇的目錄
      位於 MCreator 無法讀寫的資料夾中! -dialog.file.error_no_access_title=工作室目錄權限錯誤 +dialog.file.error_invalid_path=你為工作空間選擇的目錄路徑無效!

      你選擇了以下目錄\:
      {0}

      只能填入英文字母、數字、_/+-\\\:()[].,@$\=`,路徑中允許使用空格。 +dialog.file.error_invalid_path_title=無效的工作空間目錄路徑 +dialog.file.error_invalid_name=你的工作空間所選擇的目錄名稱無效!

      工作空間資料夾中,不能包含以下字符\:/ \\\:>“?* | 和空格。 +dialog.file.error_invalid_name_title=無效的工作空間目錄名稱 +dialog.file.error_directory_doesnt_exist=你要建立的工作空間的目錄不存在! +dialog.file.error_directory_doesnt_exist_title=工作空間錯誤 +dialog.file.error_no_access=你为工作空間所選擇的目錄
      位於 MCreator 無法讀寫的資料夾中! +dialog.file.error_no_access_title=工作空間目錄權限錯誤 dialog.file.error_already_exists=檔案 {0} 已存在。 是否替換現有檔案? dialog.file.error_already_exists_title=覆蓋檔案 -dialog.file.select_directory_title=選擇工作室目錄 +dialog.file.select_directory_title=選擇工作空間目錄 dialog.gui.button_add_title=按鈕編輯器 dialog.gui.button_change_width=點擊確定後,用滑鼠右鍵單擊以變更按鈕的寬度 dialog.gui.button_resize=要調整按鈕的大小,請使用移動工具,然後在移動時用滑鼠右鍵點擊 @@ -156,9 +156,9 @@ dialog.gui.button_is_undecorated=按鍵點擊後沒效果嗎? dialog.gui.button_event_on_clicked=按鈕被點擊時 dialog.gui.button_display_condition=按鈕顯示條件 dialog.gui.image_button_add_title=圖片按鈕編輯器 -dialog.gui.image_button_size=
      圖片按鈕的高度和寬度都與檔案相同
      兩個材質檔案應該擁有相同的比例
      -dialog.gui.hovered_image_texture=懸停時的材質\: -dialog.gui.image_texture=材質\: +dialog.gui.image_button_size=
      圖片按鈕的高度和寬度都與檔案相同
      兩個紋理檔案應該擁有相同的比例
      +dialog.gui.hovered_image_texture=懸停時的紋理\: +dialog.gui.image_texture=紋理\: dialog.gui.image_use_scale=使用原始比例(一倍比例代替原版 Minecraft 兩倍比例) dialog.gui.image_display_condition=圖片顯示條件 dialog.gui.image_title=圖片編輯器 @@ -174,7 +174,7 @@ dialog.gui.model_rotation_x=模型 Y 軸旋轉 (角度) dialog.gui.model_follow_mouse=跟隨滑鼠旋轉移動 dialog.gui.add_tooltip=提示框編輯器 dialog.gui.tooltip_display_condition=提示框顯示條件 -dialog.gui.anchor=對齊至: +dialog.gui.anchor=對齊至\: dialog.gui.anchor.top_left=左上方 dialog.gui.anchor.top_center=居中頂部 dialog.gui.anchor.top_right=右上方 @@ -186,7 +186,7 @@ dialog.gui.anchor.bottom_center=底部居中 dialog.gui.anchor.bottom_right=右下方 dialog.gradle_console.clear_log=清除日誌 dialog.gradle_console.search=在 Gradle 控制台中搜尋 -dialog.gradle_console.start_build=點擊此按鈕可以建置整個工作室
      你也可以透過 Ctrl 加上點擊「控制台」選項卡來開始建置 +dialog.gradle_console.start_build=點擊此按鈕可以建置整個工作空間
      你也可以透過 Ctrl 加上點擊控制台選項卡來開始建置 dialog.gradle_console.run_specific_task=點擊此按鈕可執行特定的 Gradle 任務
      僅在沒有 Gradle 沒有任務執行時,才可以使用此工具。 dialog.gradle_console.copy_contents_clipboard=將控制台內容復製到剪貼簿 dialog.gradle_console.clear=清除控制台 @@ -195,7 +195,7 @@ dialog.gradle_console.show_errors=在控制台中顯示錯誤日誌 dialog.gradle_console.lock_scroll=滾動鎖定 dialog.gradle_console.offline_mode_message=你已將 MCreator 設定為在離線模式下執行!

      MCreator 無法在離線模式下設定生成器。
      離線模式將被停用。 dialog.gradle_console.offline_mode_title=離線模式警告 -dialog.gradle_console.gradle_caches_corrupted_message=MCreator 檢測到 Gradle 快取已損壞。
      別擔心,我們可以為你解決此問題,只需要重建這些快取即可。.

      此操作不影響你的檔案或工作室,但是清除快取後,
      每種生成器類型和版本的第一次建置將花費更長時間。
      在某些情況下,需要清除整個 Gradle 資料夾才能解決 Gradle 錯誤。

      在此操作期間任何正在執行的建置任務或開啓的測試客戶端都將關閉。 +dialog.gradle_console.gradle_caches_corrupted_message=MCreator 檢測到 Gradle 快取已損壞。
      別擔心,我們可以為你解決此問題,只需要重建這些快取即可。.

      此操作不影響你的檔案或工作空間,但是清除快取後,
      每種生成器類型和版本的第一次建置將花費更長時間。
      在某些情況下,需要清除整個 Gradle 資料夾才能解決 Gradle 錯誤。

      在此操作期間任何正在執行的建置任務或開啓的測試客戶端都將關閉。 dialog.gradle_console.gradle_caches_corrupted_title=Gradle 快取檔案已損壞 dialog.gui.slot_id_already_used=此存儲槽 ID 已被使用 dialog.gui.slot_id_must_be_number=存儲槽 ID 必須是數字 @@ -224,7 +224,7 @@ dialog.gui.checkbox_text=核取方塊旁的文字\: dialog.gui.checkbox_name_validator=核取方塊內部名稱 action.gradle.reload_project=重載 Gradle 專案 dialog.imageeditor.base_color=主要顏色\: -dialog.imageeditor.base_texture=基礎材質\: +dialog.imageeditor.base_texture=基礎紋理\: dialog.imageeditor.width=寬度\: dialog.imageeditor.height=高度\: dialog.imageeditor.color=顏色 @@ -241,14 +241,14 @@ dialog.imageeditor.desaturate_title=去飽和層 dialog.imageeditor.desaturate_action=去飽和度 dialog.imageeditor.template_from_title=取自範本 dialog.imageeditor.template_generator=生成器範本\: -dialog.imageeditor.template_select_texture=選擇材質 +dialog.imageeditor.template_select_texture=選擇紋理 dialog.imageeditor.template_layer_one=圖層 1\: dialog.imageeditor.template_layer_two=圖層 2\: dialog.imageeditor.template_layer_three=圖層 3\: dialog.imageeditor.template_layer_four=圖層 4\: dialog.imageeditor.template_rotation=旋轉\: dialog.imageeditor.template_randomize=隨機化 -dialog.imageeditor.template_create_and_merge=創建並合併 +dialog.imageeditor.template_create_and_merge=建立並合併 dialog.imageeditor.template_merged_layer=合併圖層 dialog.imageeditor.noise_apply=將噪聲套用於圖層 dialog.imageeditor.noise_randomize_seed=隨機種子碼 @@ -273,28 +273,30 @@ dialog.imageeditor_tool.use_canvas=點擊在畫布上使用 dialog.imageeditor.layer_panel_no_image=沒有圖片 dialog.imageeditor.layer_panel_no_layers=無圖層 dialog.imageeditor.layer_panel_new_layer=新增圖層 +dialog.imageeditor.layer_panel_new_layer.floating=從浮動選區中建立新圖層 dialog.imageeditor.layer_panel_move_up=往上移動 dialog.imageeditor.layer_panel_move_down=往下移動 dialog.imageeditor.layer_panel_rename_layer=重命名圖層 dialog.imageeditor.layer_panel_toggle_visibility=切換可見性 dialog.imageeditor.layer_panel_delete_layer=刪除圖層 dialog.imageeditor.layer_panel_duplicate_layer=復製上一層 +dialog.imageeditor.layer_panel_merge_layers_down=合并該圖層與下面的圖層 dialog.imageeditor.layer_panel_confirm_layer_deletion_message=確定要刪除以下圖層\:
      dialog.imageeditor.layer_panel_confirm_layer_deletion_title=刪除圖層 dialog.imageeditor.layer_panel_enter_new_name=輸入新圖層名稱\: dialog.imageeditor.stamp_tool_lock_saturation_brightness=鎖定飽和度和亮度 dialog.imageeditor.stamp_tool_smooth_resizing=平滑調整大小 dialog.imageeditor.stamp_tool_connect_points=連接點 -dialog.imageeditor.stamp_tool_base_texture=基礎材質\: -dialog.image_maker.save=儲存此材質 +dialog.imageeditor.stamp_tool_base_texture=基礎紋理\: +dialog.image_maker.save=儲存此紋理 dialog.image_maker.save.view_only=該外部圖片資源僅可觀看。
      這些受版權保護的檔案的可能會被
      授權協議要求禁止分發,

      因此強烈建議你在繼續操作前查看資產的
      授權協議。 -dialog.image_maker.save_as_new=另存為新材質 +dialog.image_maker.save_as_new=另存為新紋理 dialog.image_maker.generate_from_template=從範本生成 -dialog.image_maker.texture_type.message=這是哪種材質? -dialog.image_maker.texture_type.title=材質類型 -dialog.image_maker.enter_name=輸入材質名稱(不能含有空格、英文大寫、和英文以外的語言)\: -dialog.image_maker.texture_name=材質名稱 -dialog.image_maker.texture_type_name_exists=具有此名稱的這種類型的材質已經存在! +dialog.image_maker.texture_type.message=這是哪種紋理? +dialog.image_maker.texture_type.title=紋理類型 +dialog.image_maker.enter_name=輸入紋理名稱(不能含有空格、英文大寫、和英文以外的語言)\: +dialog.image_maker.texture_name=紋理名稱 +dialog.image_maker.texture_type_name_exists=具有此名稱的這種類型的紋理已經存在! dialog.image_maker.resource_error=資源錯誤 dialog.image_maker.info_bar=[{0},大小\: {1}x{2}] 滑鼠位置\: {3},{4} dialog.image_maker.info_bar.new_image=新增圖片 @@ -323,6 +325,8 @@ dialog.image_maker.tools.types.noise_description=一個把噪點加入至圖層 dialog.image_maker.tools.types.move=移動工具 dialog.image_maker.tools.types.move_layer=移動圖層 dialog.image_maker.tools.types.move_description=一個用於移動活動圖層的工具 +dialog.image_maker.tools.types.select=選區工具 +dialog.image_maker.tools.types.select_description=一個選擇區域的工具 dialog.image_maker.tools.types.pencil=鉛筆 dialog.image_maker.tools.types.pencil_description=一個基礎繪圖工具 dialog.image_maker.tools.types.resizecanvas=調整畫布大小 @@ -335,7 +339,7 @@ dialog.image_maker.tools.types.shapetool_description=形狀創造工具 dialog.image_maker.tools.types.linetool=線 dialog.image_maker.tools.types.linetool_description=直線繪製工具 dialog.image_maker.tools.types.stamp=印章 -dialog.image_maker.tools.types.stamp_description=從範本中套用材質的工具 +dialog.image_maker.tools.types.stamp_description=從範本中套用紋理的工具 dialog.image_maker.tools.types.threshold=臨界值\: dialog.image_maker.tools.types.shape=形狀\: dialog.image_maker.tools.types.shape.square=方形 @@ -361,6 +365,7 @@ dialog.item_selector.enter_tag_name.blocks=在下面輸入方塊標籤名 dialog.item_selector.enter_tag_name.items=在下面輸入物品標籤名(檢查範本清單)\:
      dialog.item_selector.enter_tag_name.biomes=在下面輸入生態域標籤名(檢查範本清單)\:
      dialog.item_selector.enter_tag_name.entities=在下面輸入實體標籤名(檢查範本清單)\:
      +dialog.item_selector.enter_tag_name.damage_types=在下方輸入傷害類型標籤名稱 (請檢查範本列表)\:
      dialog.item_selector.error_invalid_tag_name_title=無效的標籤名 dialog.item_selector.all=全部 dialog.item_selector.blocks=方塊 @@ -370,17 +375,17 @@ dialog.item_selector.custom_elements=自訂元素 dialog.item_selector.name=名稱\: dialog.item_selector.display_filter=\ 顯示過濾器\: dialog.list_editor.title=字串清單編輯器 -dialog.list_editor.add=新增條目 -dialog.list_editor.clear=移除所有條目 -dialog.list_editor.validator=清單條目 -dialog.list_editor.errors.message=你列表中的一些字串條目定義不正確。 -dialog.list_editor.errors.title=無效的列表條目 +dialog.list_editor.add=新增項 +dialog.list_editor.clear=移除所有項 +dialog.list_editor.validator=清單項 +dialog.list_editor.errors.message=你列表中的一些字串項定義不正確。 +dialog.list_editor.errors.title=無效的列表項 dialog.modelement_id.info_message=此模組元素已經鎖定程式碼!
      程式碼被鎖定後,MCreator無法變更其程式碼。 dialog.modelement_id.info_message_title=模組元素程式碼已鎖定 dialog.modelement_id.registry_name=註冊表名稱\: dialog.modelement_id.registry_name_info=註冊表名稱(並非所有模組元素都使用它) dialog.modelement_id.registry_name_validator=註冊表名稱 -dialog.modelement_id.use_caution_warn=謹慎使用此工具!

      變更註冊表名稱可能會破壞現有的世界存檔
      並導致其它模組元素與你的模組發生衝突! +dialog.modelement_id.use_caution_warn=使用此工具請小心使用!請確保不要使用重複的名稱!

      更改註冊表名稱可能會破壞你現有的世界存檔,並導致
      與你模組的其他模組元素發生衝突! dialog.modelement_id.id_and_registry_names="{0} - 註冊表名稱" dialog.modelement_id.invalid_registry_name=你輸入的註冊表名稱無效!
      變更尚未儲存。 dialog.modelement_id.invalid_registry_name_title=無效的註冊表名稱 @@ -388,9 +393,9 @@ dialog.modelement_id.registry_name_changed=你已變更了模組元素 dialog.modelement_id.registry_name_changed_title=變更註冊表名稱 dialog.new_modelement.registry_name=註冊表名稱\: {0} dialog.new_modelement.registry_name.empty=<請先輸入模組元素的名稱> -dialog.new_modelement.desc=輸入 {0} 的名稱\:
      請不要使用原版已有的名稱 (例如「Dirt」,「 Coal」, 「Diamond」, ...) 以獲取更好的兼容性。
      在可能的情況下使用駝峰命名法(如CustomGem)。
      避免加入類型名稱(如CustomGemItem, CustomTab, ...)。 +dialog.new_modelement.desc=輸入 {0} 的名稱\:
      請不要使用原版已有的名稱 (例如 Dirt,Coal,Diamond...) 以取取更好的相容性。
      在可能的情況下使用駝峰命名法(如 CustomGem)。
      避免加入類型名稱(如 CustomGemItem, CustomTab, ...)。 dialog.new_modelement.title_window=輸入 {0} 的名稱 -dialog.new_modelement.create_new=創建新的 {0} +dialog.new_modelement.create_new=建立新的 {0} dialog.option_pane.invalid_input=輸入無效 dialog.option_pane.invalid_text=你輸入了無效的文字。

      錯誤訊息\:
      dialog.preferences.change_language=自訂 {0}
      你可以管理自訂 {0} (*.{1}) 在這裡 @@ -401,7 +406,7 @@ dialog.preferences.load_plugins=載入新插件... dialog.preferences.explore_plugins=瀏覽插件 dialog.preferences.open_folder=開啟 {0} 資料夾 dialog.preferences.plugins=插件 -dialog.preferences.title_mcreator=MCreator偏好设定 +dialog.preferences.title_mcreator=MCreator 偏好设定 dialog.preferences.save=儲存 dialog.preferences.restore_defaults=復原預設值 dialog.preferences.restore_defaults_confirmation=你確定要恢復偏好设定到預設值嗎?
      這將不能撤消。 @@ -412,15 +417,29 @@ dialog.preferences.page_procedures_templates=函式範本 dialog.preferences.page_aitasks_templates=AI 生成器範本 dialog.preferences.page_cmdargs_templates=指令範本 dialog.preferences.page_features_templates=地物範本 -dialog.preferences.page_texture_templates=材質範本 +dialog.preferences.page_texture_templates=紋理範本 dialog.preferences.page_armor_templates=盔甲範本 -dialog.preferences.java_plugins=啟用Java插件
      選擇此項以啟用Java插件。Java插件可完全訪問你的工作室與你的計算機,請謹慎使用。
      風險自負。重啟應用程序以套用變更。 +dialog.preferences.java_plugins=啟用Java插件
      選擇此項以啟用Java插件。Java插件可完全訪問你的工作空間與你的計算機,請謹慎使用。
      風險自負。重啟應用程序以套用變更。 dialog.preferences.plugins_list=已載入的插件\: dialog.preferences.themes=介面主題
      在這個頁面,你可以看到載入插件的可用主題。
      要改變使用的主題,在下面的下拉菜單中選擇主題ID。重新啟動MCreator以查看變更 dialog.preferences.themes.list=
      可用主題清單\: dialog.preferences.description={0}
      {1} dialog.preferences.entry_description={0}\:
      {1} dialog.preferences.unknown_property_type={0}\:屬性類型未知 +dialog.search_usages.list=使用選定的 {0} 的模組元素列表\: +dialog.search_usages.list.empty=找不到使用任何選定 {0} 的模組元素。 +dialog.search_usages.open_selected=編輯選定的模組元素。 +dialog.search_usages.title=使用的元素 +dialog.search_usages.deletion.confirm_msg=你確定要刪除選定的 {0} 嗎?

      選定的 {0} 仍被下面列出的模組元素使用。
      如果繼續刪除,工作空間可能會損壞並且(或)無法建置! +dialog.search_usages.deletion_safe.confirm_msg=你確定要刪除選定的 {0} 嗎?

      沒有任何模組元素使用選定列表中的任何 {0} 。然而,它們仍可能被用於自訂程式碼中。
      如果繼續執行,這些使用將會無效,可能導致資源損壞或遊戲崩潰。 +dialog.search_usages.deletion.confirm=仍然刪除 +dialog.search_usages.type.mod_element=模組元素 +dialog.search_usages.type.resource.texture=紋理 +dialog.search_usages.type.resource.model=模型 +dialog.search_usages.type.resource.sound=音效 +dialog.search_usages.type.resource.structure=結構 +dialog.search_usages.type.global_variable=全域變數 +dialog.search_usages.type.localization_key=在地化鍵名 dialog.sounds.name=音效名稱 dialog.sounds.registry_name=音效註冊表名稱\:
      如果你重命名正在使用的音效,則現有引用將中斷 dialog.sounds.files=音效檔案\: @@ -434,7 +453,7 @@ dialog.sounds.error_select_valid_file_title=沒有音效檔案 dialog.state_editor.header=屬性值 dialog.state_editor.use_entry=勾選此框以使用屬性 dialog.state_editor.title=狀態編輯器 -dialog.textures_import.texture_type=材質類型 +dialog.textures_import.texture_type=紋理類型 dialog.textures_import.block=方塊 dialog.textures_import.item=物品 dialog.textures_import.entity=實體 @@ -443,30 +462,30 @@ dialog.textures_import.particle=粒子 dialog.textures_import.screen=屏幕 dialog.textures_import.armor=盔甲 dialog.textures_import.other=其它 -dialog.textures_import.armor_needs_two_files=盔甲層材質需要兩個檔案\: +dialog.textures_import.armor_needs_two_files=盔甲層紋理需要兩個檔案\: dialog.textures_import.armor_layers=*layer_1*.png 和 *layer_2*.png -dialog.textures_import.armor_part_one=盔甲材質第1部分 (*layer_1*.png)\: -dialog.textures_import.armor_part_two=盔甲材質第2部分 (*layer_2*.png)\: -dialog.textures_import.import_armor_texture=匯入盔甲材質 -dialog.textures_import.error_both_texture_files_not_selected=你尚未選擇兩個材質檔案! -dialog.textures_import.error_texture_already_exists=材質 {0} 已經存在!
      你可以輸入新名稱或取消匯入 +dialog.textures_import.armor_part_one=盔甲紋理第1部分 (*layer_1*.png)\: +dialog.textures_import.armor_part_two=盔甲紋理第2部分 (*layer_2*.png)\: +dialog.textures_import.import_armor_texture=匯入盔甲紋理 +dialog.textures_import.error_both_texture_files_not_selected=你尚未選擇兩個紋理檔案! +dialog.textures_import.error_texture_already_exists=紋理 {0} 已經存在!
      你可以輸入新名稱或取消匯入 dialog.textures_import.error_texture_import_title=匯入錯誤 dialog.textures_mapping.title_for_model=模型的貼圖 dialog.textures_mapping.add_new=新增貼圖 -dialog.textures_mapping.enter_name_message=輸入貼圖名稱。
      當為模型選擇貼圖時,該名稱用於標識一組材質。 +dialog.textures_mapping.enter_name_message=輸入貼圖名稱。
      當為模型選擇貼圖時,該名稱用於標識一組紋理。 dialog.textures_mapping.enter_name_title=新的貼圖 -dialog.textures_mapping.jump_to=跳到 ... +dialog.textures_mapping.jump_to=跳至... dialog.textures_mapping.save=存儲貼圖 -dialog.textures_mapping.model_texture_part=模型材質部分\:
      {0} -dialog.textures_mapping.confirm_deletion_message=你確定要刪除此貼圖嗎?
      如果貼圖仍在使用中,則此材質可能會遺失! -dialog.textures_selector.title_window=材質選擇器 +dialog.textures_mapping.model_texture_part=模型紋理部分\:
      {0} +dialog.textures_mapping.confirm_deletion_message=你確定要刪除此貼圖嗎?
      如果貼圖仍在使用中,則此紋理可能會遺失! +dialog.textures_selector.title_window=紋理選擇器 dialog.textures_selector.select=選擇 -dialog.textures_selector.select_texture=選擇材質\: -dialog.textures_selector.title={0} 材質選擇 -dialog.textures_selector.no_texture=





      為了選擇材質,你需要製作一個材質。

      要製作一個材質,請點擊工具欄中的“資源”,然後點擊“創建物品/方塊材質”。 +dialog.textures_selector.select_texture=選擇紋理\: +dialog.textures_selector.title={0} 紋理選擇 +dialog.textures_selector.no_texture=





      為了選擇紋理,你需要製作一個紋理。

      要製作一個紋理,請點擊工具欄中的“資源”,然後點擊“建立物品/方塊紋理”。 dialog.textures_selector.search=搜尋\: -dialog.textures_selector.create_from_scratch=創建材質
      從頭開始 -dialog.textures_selector.import=匯入材質
      用於 {0} +dialog.textures_selector.create_from_scratch=建立紋理
      從頭開始 +dialog.textures_selector.import=匯入紋理
      用於 {0} dialog.tools.armor_pack_title=盔甲包製作器 dialog.tools.armor_pack_info=
      使用此工具,可快速製造盔甲相關元素。
      此工具將製作\:盔甲、盔甲合成配方。 dialog.tools.armor_pack_base_item=盔甲包基礎物品\: @@ -474,7 +493,7 @@ dialog.tools.armor_pack_name=盔甲名稱\: dialog.tools.armor_pack_name_validator=盔甲包名稱 dialog.tools.armor_pack_color_accent=盔甲主要顏色\: dialog.tools.armor_pack_power_factor=盔甲的保護系數\:
      相對於鐵制盔甲 -dialog.tools.armor_pack_create=創建盔甲包 +dialog.tools.armor_pack_create=建立盔甲包 dialog.tools.material_pack_title=材料包製作器 dialog.tools.material_pack_info=
      使用此工具,可以快速製作許多材料此工具將製作\:礦物、礦物方塊、礦物物品、礦物配方
      鎬子、斧頭、劍、鏟子、鋤頭、工具配方、盔甲、盔甲配方。 dialog.tools.material_pack_name=材料包名稱\: @@ -482,7 +501,7 @@ dialog.tools.material_pack_name_validator=材料包名稱 dialog.tools.material_pack_type=材料包類型\: dialog.tools.material_pack_color_accent=材料包主要顏色\: dialog.tools.material_pack_power_factor=材料包能力系數\:
      相對於鐵材料包 -dialog.tools.material_pack_create=創建材料包 +dialog.tools.material_pack_create=建立材料包 dialog.tools.ore_pack_title=礦石包製作器 dialog.tools.ore_pack_info=
      使用此工具,可快速製造礦石相關元素。
      此工具將製作\:礦石、礦石方塊,礦石物品、礦石配方。 dialog.tools.ore_pack_name=礦石包名稱\: @@ -490,7 +509,7 @@ dialog.tools.ore_pack_name_validator=礦石包名稱 dialog.tools.ore_pack_type=礦石包類型\: dialog.tools.ore_pack_color_accent=礦石包主要顏色 dialog.tools.ore_pack_power_factor=礦石包能力系數\:
      相對於鐵礦石包 -dialog.tools.ore_pack_create=創建礦石包 +dialog.tools.ore_pack_create=建立礦石包 dialog.tools.tool_pack_title=工具包製作器 dialog.tools.tool_pack_info=
      使用此工具,可以快速製作工具相關元素。
      此工具將製作\:鎬子,斧頭、劍、鏟子、鋤頭、工具配方。 dialog.tools.tool_pack_base_item=工具包基礎物品\: @@ -498,49 +517,50 @@ dialog.tools.tool_pack_name=工具包名稱\: dialog.tools.tool_pack_name_validator=工具包名稱 dialog.tools.tool_pack_color_accent=工具包主要顏色\: dialog.tools.tool_pack_power_factor=工具包能力係數\:
      相對於鐵工具包 -dialog.tools.tool_pack_create=創建工具包 +dialog.tools.tool_pack_create=建立工具包 dialog.tools.wood_pack_title=木材包製作器 dialog.tools.wood_pack_info=
      使用此工具,可以快速製作木材相關元素。
      此工具將製作\:樹葉、原木、木材、木塊、半磚、樓梯、柵欄、柵欄門、
      壓力板、按鈕、合成配方和標籤 dialog.tools.wood_pack_name=木材包名稱\: dialog.tools.wood_pack_name_validator=木材包名稱 dialog.tools.wood_pack_color_accent=木材包主要顏色\: dialog.tools.wood_pack_power_factor=木材包能力系數\:
      相對於橡木木包 -dialog.tools.wood_pack_create=創建木材包 +dialog.tools.wood_pack_create=建立木材包 dialog.unsaved_changes.message=此模組元素可能存在未存儲的變更。
      是否放棄這些變更? dialog.unsaved_changes.title=未儲存的變更 dialog.update_notify.message=你正在使用MCreator的過時版本
      請考慮更新MCreator以取得最新功能和錯誤修復!

      你的版本\: {0}
      最新版本\:{1}

      最新版本的更新日誌\:
      -dialog.update_notify.update_title=MCreator更新 +dialog.update_notify.update_title=MCreator 更新 dialog.update_notify.more_recent_build=有一個針對 {0} 版本的更新分支版本
      考慮重新下載當前版本以取得最新功能和錯誤修復!

      你的內部版本號\: {1}
      最新的內部版本號\:{2}

      內部版本的更新日誌\:{3}
      dialog.update_notify.error_failed_check_internet_message=無法檢查更新。 原因\:沒有網路 dialog.update_notify.error_failed_check_internet_title=沒有網路連線 -dialog.update_notify.no_update_message=你已經安裝了最新版本的MCreator! +dialog.update_notify.no_update_message=你已安裝了最新版 MCreator! dialog.update_notify.no_pluin_update_message=目前沒有可用的插件更新! dialog.update_notify.no_update_title=沒有更新 dialog.update_notify.open_download_page=開啟下載頁面 dialog.update_notify.remind_later=稍後提醒我 -dialog.plugin_update_notify.message=MCreator檢測到以下插件可更新\: +dialog.plugin_update_notify.message=MCreator 檢測到以下插件可更新\: dialog.plugin_update_notify.update=更新插件 dialog.plugin_update_notify.close=關閉此視窗 dialog.plugin_update_notify.update_title=插件更新 dialog.plugin_update_notify.version_message={0}
      目前安裝的版本\:{1},新版本\:{2} dialog.plugin_update_notify.changes_message=最新版本中的變更\: -dialog.setup_workspace.title=對選定的生成器設定工作室 +dialog.setup_workspace.title=對選定的生成器設定工作空間 dialog.reload_gradle_project.title=重載 Gradle 專案中 dialog.setup_workspace.progress.reloading_gradle_project=重載 Gradle 專案中 dialog.setup_workspace.progress.reloading_gradle_dependencies=重載 Gradle 依賴項中 action.run_client=執行客戶端 action.run_server_and_client=執行伺服端和客戶端 -dialog.run_server_and_client.eula_intro=
      為執行Minecraft伺服端,你得先同意Minecraft的最終用戶許可協議(EULA)。點擊確定後,你會開啟他們的最終用戶許可協議(EULA)的網站。
      閱讀後,請返回MCreator選擇你是否接受最終用戶許可協議(EULA)。 +dialog.run_server_and_client.eula_intro=
      為執行 Minecraft 伺服端,你得先同意 Minecraft 的最終用戶許可協議(EULA)。點擊確定後,你會開啟他們的最終用戶許可協議(EULA)的網站。
      閱讀後,請返回 MCreator 選擇你是否接受最終用戶許可協議(EULA)。 dialog.run_server_and_client.agree=接受 dialog.run_server_and_client.disagree=拒絕 -dialog.run_server_and_client.eula_confirmation.message=你接受在Minecraft網站上閱讀過的最終用戶許可協議(EULA)嗎? +dialog.run_server_and_client.eula_confirmation.message=你接受在 Minecraft 網站上閱讀過的最終用戶許可協議(EULA) 嗎? dialog.run_server_and_client.eula_confirmation.title=接受最終用戶許可協議(EULA) -dialog.run_server_and_client.eula_rejected.message=為了執行Minecraft伺服器,你需要同意Minecraft最終用戶許可協議(EULA),才能執行
      你可以通過再次執行Minecraft伺服器重新此操作。 +dialog.run_server_and_client.eula_rejected.message=為了執行 Minecraft 伺服器,你需要同意 Minecraft 最終用戶許可協議(EULA),才能執行
      你可以再次執行 Minecraft 伺服器重新此操作。 dialog.variables.enter_name_select_type=輸入名稱並選擇變數類型\: dialog.variables.variable_name=變數名稱\: dialog.variables.variable_type=變數類型\: dialog.variables.variable_scope=變數範圍\: dialog.variables.new_title=新增變數 +workspace.loading=正在加載工作空間... workspace.elements.list.locked=已鎖定 workspace.elements.folders.add_tooltip=將新資料夾添加到當前的資料夾 workspace.elements.folders.up_tooltip=移至父資料夾 @@ -551,6 +571,7 @@ workspace.elements.folders.add.error_letters=資料夾名稱只能包含英文 workspace.elements.folders.add.error_exists=此資料夾名稱已經存在 workspace.elements.folders.rename.title=重新命名資料夾 workspace.elements.folders.rename.message=請輸入新的資料夾名稱\: +workspace.elements.list.special.item={0}
      類型\: {1} workspace.elements.list.folder=資料夾 workspace.elements.list.notlocked=未鎖定 workspace.elements.list.compiles=可編譯 @@ -568,10 +589,10 @@ workspace.elements.list.search_list=在清單上搜尋 workspace.elements.list.search_folder=在當前資料夾中搜尋 workspace.elements.list.descending=遞減 workspace.elements.list.sort_name=名稱 -workspace.elements.list.sort_date=創建日期 +workspace.elements.list.sort_date=建立日期 workspace.elements.list.sort_type=類型 workspace.elements.list.sort_loading_order=載入順序 -workspace.elements.list.search.tooltip=在這裡搜尋工作室
      對於模組元素,你可以使用方塊引號進行文字搜索或使用空格進行多個關鍵字搜索。
      關鍵字可以是模組元素類型,名稱,基本類型或篩選,例如 f\:locked、f\:ok、f\:err +workspace.elements.list.search.tooltip=在這裡搜尋工作空間
      對於模組元素,你可以使用方塊引號進行文字搜索或使用空格進行多個關鍵字搜索。
      關鍵字可以是模組元素類型,名稱,基本類型或篩選,例如 f\:locked、f\:ok、f\:err workspace.elements.list.sort=排序方式 workspace.elements.list.filter=篩選 workspace.elements.list.filter_all=顯示全部 @@ -595,22 +616,26 @@ workspace.elements.list.edit.delete=刪除 workspace.elements.list.edit.duplicate=復製模組元素... workspace.elements.list.edit.code=在程式碼編輯器中打開模組元素 workspace.elements.list.edit.lock=鎖定/解鎖模組元素 -workspace.elements.list.edit.id=編輯模組元素ID... +workspace.elements.list.edit.id=編輯註冊表名稱 +workspace.elements.list.edit.usages.tags=所選元素列表包含標籤類型的模組元素。

      具有相同註冊表名稱的標籤也可能由其他模組定義,並且有可能部分被使用
      因此,搜尋這些元素的使用是不可能的。 +workspace.elements.list.edit.usages.tags.title=使用的標籤 workspace.elements.list.edit.add.folder=新增資料夾... workspace.elements.list.edit.rename.folder=重命名選取的資料夾... -workspace.elements.confirm_delete_message=確定要刪除所選內容 ({0}) 元素嗎?

      如果你在其它模組元素中使用了選定的模組元素的數據(作為配方、事件、選項卡...) 你還必須刪除也依賴於此元素的元素! 否則將會建置錯誤。

      已刪除的資料夾和子資料夾的模組元素將被移至父資料夾 +workspace.elements.confirm_delete_msg_suffix=被刪除的檔案夾及其子檔案夾中的模組元素將被移至父檔案夾。 workspace.elements.delete.tooltip=刪除所選的模組元素 workspace.elements.edit_code.tooltip=編輯選中的元素的程式碼 -workspace.elements.lock_code_tooltip=鎖定/解鎖元素的程式碼
      鎖定程式碼時,MCreator不會變更程式碼,因此模組類型可以從程式碼編輯器中進行編輯,
      並且即使在切換工作室時也可以保留程式碼 。
      僅在當你打算手動編輯程式碼並且知道鎖定模組元素程式碼的後果時才使用此功能! -workspace.elements.edit_registry_names.tooltip=編輯命名空間ID和註冊表名稱 +workspace.elements.lock_code_tooltip=鎖定/解鎖元素的程式碼
      鎖定程式碼時,MCreator 不會變更程式碼,因此模組類型可以從程式碼編輯器中進行編輯,
      並且即使在切換工作空間時也可以保留程式碼 。
      僅在當你打算手動編輯程式碼並且知道鎖定模組元素程式碼的後果時才使用此功能! +workspace.elements.edit_registry_names.not_possible_message=無法使用此工具編輯此模組元素的註冊表名稱。 +workspace.elements.edit_registry_names.not_possible_title=無法編輯註冊表名稱 +workspace.elements.edit_registry_names.tooltip=編輯註冊名 workspace.elements.empty.tip=按下 %1 新增模組元素 -workspace.elements.lock_modelement_message=你正試圖鎖定/解鎖模組元素的程式碼!

      鎖定程式碼後,MCreator不會變更原始程式碼,但這意味著
      在更新MCreator時,
      錯誤修復和Minecraft版本升級不會套用於已鎖定的元素。
      當前已鎖定並已選擇的模組元素將被解鎖。

      這意味著MCreator將覆蓋這些模組元素的任何自訂程式碼。

      在使用此操作之前,請閱讀MCreator網站上有關鎖定程式碼的Wiki頁面。 +workspace.elements.lock_modelement_message=你正試圖鎖定/解鎖模組元素的程式碼!

      鎖定程式碼後,MCreator 不會變更原始程式碼,但這意味著
      在更新 MCreator 時,
      錯誤修復和 Minecraft 版本升級不會套用於已鎖定的元素。
      當前已鎖定並已選擇的模組元素將被解鎖。

      這意味著 MCreator 將覆蓋這些模組元素的任何自訂程式碼。

      在使用此操作之前,請閱讀 MCreator 官網上有關鎖定程式碼的 Wiki 頁面。 workspace.elements.lock_modelement_confirm=鎖定/解鎖模組元素程式碼? workspace.elements.lock_modelement_title=模組元素鎖定/解鎖 workspace.elements.lock_modelement_lock_unlock=鎖定/解鎖程式碼 workspace.elements.lock_modelement_locking_unlocking=鎖定/解鎖模組元素 workspace.elements.lock_modelement_regeneration=重新生成已解鎖元素程式碼 -workspace.elements.lock_modelement_rebuilding_workspace=正在重新建置工作室 +workspace.elements.lock_modelement_rebuilding_workspace=正在重新建置工作空間 workspace.elements.duplicate_message=輸入新的模組元素名稱\:
      這個模組元素將與 {0} 完全相同,但是改用這個新的名稱。
      workspace.elements.duplicate_element=復製 {0} workspace.elements.duplicate=復製 @@ -624,12 +649,12 @@ blockly.templates.aitasks.export_failed.title=匯出失敗 blockly.templates.aitasks.import=匯入AI設定 blockly.templates.aitasks.import_failed.message=匯入AI設定失敗!
      你匯入的AI任務設定檔案無效。 blockly.templates.aitasks.import_failed.title=匯入失敗 -blockly.templates.cmdargs=參數範本 -blockly.templates.cmdargs.export=匯出參數設定 -blockly.templates.cmdargs.export_failed.message=無法匯出參數設定!
      你的參數設定可能為空或已損壞。 +blockly.templates.cmdargs=引數範本 +blockly.templates.cmdargs.export=匯出引數設定 +blockly.templates.cmdargs.export_failed.message=無法匯出引數設定!
      你的引數設定可能為空或已損壞。 blockly.templates.cmdargs.export_failed.title=匯出失敗 -blockly.templates.cmdargs.import=匯入參數設定 -blockly.templates.cmdargs.import_failed.message=匯入參數設定失敗!
      你匯入的參數設定檔案無效。 +blockly.templates.cmdargs.import=匯入引數設定 +blockly.templates.cmdargs.import_failed.message=匯入引數設定失敗!
      你匯入的引數設定檔案無效。 blockly.templates.cmdargs.import_failed.title=匯入失敗 blockly.templates.features=地物範本 blockly.templates.features.export=匯出地物 @@ -676,8 +701,8 @@ trigger.entity_travels_to_dimension=實體前往某個維度時 trigger.entity_uses_totem=實體使用不死圖騰時 trigger.explosion_occurs=一個爆炸發生時 trigger.farmland_trampled=耕地被踩踏時 -trigger.gem_dropped=物品掉落時 -trigger.gem_expired=掉落物消失時 +trigger.gem_dropped=物品被丢出来時 +trigger.gem_expired=丢弃的物品消失時 trigger.item_crafted=物品被合成時 trigger.item_destroyed=物品被破壞時 trigger.item_smelted=物品被熔煉時 @@ -730,6 +755,7 @@ blockly.category.guimanagement=存儲槽與介面函式 blockly.category.worldprocedures=世界函式 blockly.category.worlddata=資料 blockly.category.worldmanagement=行為 +blockly.category.scoreboard=計分板 blockly.category.basictasks=基本行為 blockly.category.combattasks=戰鬥行為 blockly.category.movementtasks=移動行為 @@ -749,7 +775,7 @@ blockly.category.math=數學運算 blockly.category.text=文字 blockly.category.time=日期與時間 blockly.category.advanced=進階 -blockly.category.commands=指令參數 +blockly.category.commands=指令引數 blockly.category.return=返回方塊 blockly.category.advancedfeatures=進階地物 blockly.category.blockpredicates=有條件的位置 @@ -760,14 +786,14 @@ blockly.category.heightplacements=高度位置 blockly.category.orefeatures=礦石地物 blockly.category.placements=常見位置 blockly.category.treefeatures=树木地物 -blockly.category.arg_types=參數 +blockly.category.arg_types=引數 blockly.category.actions=操作 blockly.block.action_result_type=類型 %1 的操作結果 blockly.block.advancement_isequalto=提供的進度等於 %1 blockly.block.block_add=在 x\: %2 y\: %3 z\: %4 放置 %1 blockly.block.block_energy_can_extract=在 x\: %1 y\: %2 z\: %3 的方塊的 %4 側能提取能量 blockly.block.block_energy_can_receive=在 x\: %1 y\: %2 z\: %3 的方塊的 %4 側能接收能量 -blockly.block.block_energy_check_extract=向在 x\: %1 y\: %2 z\: %3 的方塊的 %5 側測試提取大小為%4 的能量,然後返回輸出的量 +blockly.block.block_energy_check_extract=向在 x\: %1 y\: %2 z\: %3 的方塊的 %5 側測試提取大小為 %4 的能量,然後返回輸出的量 blockly.block.block_energy_check_receive=向在 x\: %1 y\: %2 z\: %3 的方塊的 %5 側測試傳送大小為 %4 的能量,然後返回傳送的量 blockly.block.block_energy_extract=如果在 x\: %1 y\: %2 z\: %3 的方塊的 %5 側擁有能量存儲,則從它提取大小為 %4 的能量 blockly.block.block_energy_get=取得位於 x\: %1 y\: %2 z\: %3 的方塊的 %4 側的能量 @@ -867,11 +893,18 @@ blockly.block.entity_allow_flying=如果 %1,允許 %2 飛行,否則不允許 blockly.block.entity_armor_value=%1 的盔甲值 blockly.block.entity_canusecommand=%2 有指令權限級別 %1 blockly.block.entity_check_creature_type=%1 為生物類型 %2 +blockly.block.entity_check_main_hand=%1 把物品拿在 %2 手上 blockly.block.entity_checkgamemode=%1 的遊戲模式是 %2 blockly.block.entity_clear_inventory=清空 %1 的物品欄 blockly.block.entity_clearpotions=清除 %1 的所有藥水效果 blockly.block.entity_close_gui=關閉任何给 %1 打開的介面 blockly.block.entity_create=%1 類型為 %2 的靜態實體實例(不生成) +blockly.block.entity_data_logic_get=對於類型 %2 的自訂實體 %1 取得對應邏輯資料 %3 的值 +blockly.block.entity_data_logic_set=對於類型 %2 的自訂實體 %1 將對應邏輯資料 %3 的值設為 %4 +blockly.block.entity_data_integer_get=對於類型 %2 的自訂實體 %1 取得對應整數資料 %3 的值 +blockly.block.entity_data_integer_set=對於類型 %2 的自訂實體 %1 將對應整數資料 %3 的值設為 %4 +blockly.block.entity_data_string_get=對於類型 %2 的自訂實體 %1 取得對應字串資料 %3 的值 +blockly.block.entity_data_string_set=對於類型 %2 的自訂實體 %1 將對應字串資料 %3 的值設為 %4 blockly.block.entity_deal_custom_damage=對 %2 造成 %1 點傷害,其鍵名為 death.attack.%3(.player/.item) blockly.block.entity_despawn=清除 %1 %2 blockly.block.entity_dimension_id=所在的維度 %1 的 ID @@ -886,10 +919,9 @@ blockly.block.entity_get_armor_slot_item=取得 %2 的盔甲物品欄第 %1 個 blockly.block.entity_get_controlling_passenger=%2 取得正在騎乘 %1 的實體 blockly.block.entity_get_first_passenger=%2 取得 %1 的第一位乘客 blockly.block.entity_get_fire_ticks=取得 %1 著火的剩余刻數 -blockly.block.entity_get_fly_speed=取得 %1 的飛行速度 blockly.block.entity_get_oxygen=取得 %1 的氧氣值 blockly.block.entity_get_percent_frozen=取得 %1 被凍結的百分比 -blockly.block.entity_get_root_vehicle=取得 %1 騎乘的最低實體,若未騎乘則返回自身 +blockly.block.entity_get_root_vehicle=取得 %1 騎乘的最低實體(未騎乘則取得自身) blockly.block.entity_get_saturation=取得 %1 的食物飽和度 blockly.block.entity_get_scoreboard_score=取得 %2 在計分板 %1 的分數 blockly.block.entity_get_shootpower=若 %1 是彈射物,取得其射擊力 @@ -898,8 +930,11 @@ blockly.block.entity_get_spawn_x=取得當前世界的 %1 出生點的 X 軸座 blockly.block.entity_get_spawn_y=取得當前世界的 %1 出生點的 Y 軸座標 %2 blockly.block.entity_get_spawn_z=取得當前世界的 %1 出生點的 Z 轴座標 %2 blockly.block.entity_get_stepheight=取得 %1 的可行走高度 +blockly.block.entity_get_use_item=取得 %1 正在使用的物品 +blockly.block.entity_get_use_item_ticks=取得 %1 的物品使用刻數,使用者\: blockly.block.entity_get_uuid=取得 %1 的 UUID -blockly.block.entity_get_walk_speed=取得 %1 的行走速度 +blockly.block.entity_get_walk_speed=取得 %1 的基礎步行速度 +blockly.block.entity_get_fly_speed=取得 %1 的基礎飛行速度 blockly.block.entity_getowner=%2 如果 %1 被馴服,取得其主人是誰 blockly.block.entity_getridingentity=%2 取得實體 %1 正在騎乘 blockly.block.entity_gettargetentity=%2 取得 %1 的攻擊目標 @@ -1013,25 +1048,25 @@ blockly.block.entity_submerged_height=取得 %1 的碰撞箱淹沒的高度 blockly.block.entity_swing_mainhand=揮動 %1 的慣用手 blockly.block.entity_swing_offhand=揮動 %1 的非慣用手 blockly.block.entity_switch_dimension=將 %1 的維度切換為 %2 -blockly.block.entity_vel_x=取得 %1 的 X 速度 %2 -blockly.block.entity_vel_y=取得 %1 的 Y 速度 %2 -blockly.block.entity_vel_z=取得 %1 的 Z 速度 %2 +blockly.block.entity_vel_x=%1 %2 在 X 轴的速度 +blockly.block.entity_vel_y=%1 %2 在 Y 轴的速度 +blockly.block.entity_vel_z=%1 %2 在 Z 轴的速度 blockly.block.entity_xplevel=取得 %1 的經驗等級 blockly.block.entity_xp_until_next_level=取得 %1 升級至下一級所需的經驗量 blockly.block.execute_command=在 x\: %2 y\: %3 z\: %4 %5 執行指令 /%1 blockly.block.explode=在 x\:%2 y\:%3 z\:%4 生成等級為 %1,傷害源類型為 %5 的爆炸 %6 -blockly.block.get_command_parameters=取得以字串形式接受索引 %1 的所有指令參數 -blockly.block.get_command_parameter_blockpos_x=取得指令方塊位置 X 參數 %1 -blockly.block.get_command_parameter_blockpos_y=取得指令方塊位置 Y 參數 %1 -blockly.block.get_command_parameter_blockpos_z=取得指令方塊位置 Z 參數 %1 -blockly.block.get_command_parameter_blockstate=取得方塊指令參數 %1 -blockly.block.get_command_parameter_entity=%2 取得實體指令參數 %1 -blockly.block.get_command_parameter_entities_foreach=取得每個指令參數 %1 提供的實體,存為 %2 執行 %3 -blockly.block.get_command_parameter_itemstack=取得物品指令參數 %1 -blockly.block.get_command_parameter_logic=取得邏輯指令參數 %1 -blockly.block.get_command_parameter_message=取得訊息指令參數 %1 -blockly.block.get_command_parameter_number=取得數字指令參數 %1 -blockly.block.get_command_parameter_string=取得字串指令參數 %1 +blockly.block.get_command_parameters=取得以字串形式接受索引 %1 的所有指令引數 +blockly.block.get_command_parameter_blockpos_x=取得指令方塊位置 X 引數 %1 +blockly.block.get_command_parameter_blockpos_y=取得指令方塊位置 Y 引數 %1 +blockly.block.get_command_parameter_blockpos_z=取得指令方塊位置 Z 引數 %1 +blockly.block.get_command_parameter_blockstate=取得方塊指令引數 %1 +blockly.block.get_command_parameter_entity=%2 取得實體指令引數 %1 +blockly.block.get_command_parameter_entities_foreach=取得每個指令引數 %1 提供的實體,存為 %2 執行 %3 +blockly.block.get_command_parameter_itemstack=取得物品指令引數 %1 +blockly.block.get_command_parameter_logic=取得邏輯指令引數 %1 +blockly.block.get_command_parameter_message=取得訊息指令引數 %1 +blockly.block.get_command_parameter_number=取得數字指令引數 %1 +blockly.block.get_command_parameter_string=取得字串指令引數 %1 blockly.block.get_dimensionid=%1 blockly.block.get_localized_text=取得鍵 %1 %2 內的在地化文字 blockly.block.gui_clear_slot=清除當前打開的 %2 的物品欄的存儲槽第 %1 個位置的物品 @@ -1052,9 +1087,11 @@ blockly.block.item_cooldown_for=為 %2 冷卻 %3 持續 %1 刻 blockly.block.item_damage=對 %2 減少 %1 耐久度 blockly.block.item_enchanted_with_xp=對物品 %1 用 %2 等級的經驗進行附魔,出現寶藏級附魔\:%3 blockly.block.item_fuel_power=取得 %1 的燃料能量 +blockly.block.item_get_cooldown=取得 %2 在 %1 剩餘冷卻時間的百分比 blockly.block.item_get_damage=取得 %1 的已消耗的耐久度 blockly.block.item_get_enhancement=取得 %1 的 %2 附魔等級 blockly.block.item_get_max_damage=取得 %1 的最大耐久 +blockly.block.item_is_cooldown=%2 在 %1 處於冷卻狀態 blockly.block.item_is_enchantable=%1 可附魔 blockly.block.item_is_enchanted=%1 已附魔 blockly.block.item_istype=%1 的物品類型為 %2 @@ -1098,7 +1135,7 @@ blockly.block.math_random_number_between=隨機整數(%1~%2) blockly.block.mcitem_to_block=將 %2 %1 轉換為 %3 ,若失敗則轉換為空氣 blockly.block.move_entity=將 %4 的位置設為 x\: %1 y\: %2 z\: %3 blockly.block.place_schematic=放置 NBT 結構檔案 %6 %7 至x\: %1 y\: %2 z\: %3,旋轉 %4 鏡像 %5 %8 -blockly.block.play_sound=在 x\:%1 y\:%2 z\:%3 播放音量 %4,音高為 %5,類別為 %7 的 %6 +blockly.block.play_sound=在 x\:%1 y\:%2 z\:%3 播放音量 %4 音高 %5 類型 %7 的聲音 %6 blockly.block.projectile_shoot_from_entity=讓 %2 發射 %1,速度\:%3 不準確度\:%4 %5 blockly.block.projectile_shoot_from_pos=從 x\: %2 y\: %3 z\: %4 發射 %1,方向 dx\: %5 dy\: %6 dz\: %7 速度\:%8 不準確度\:%9 %10 blockly.block.projectiles_arrow=類型為 %1 的箭,傷害大小\:%2 擊退距離\:%3 穿透\:%4 發射者\:%5 帶火焰\:%6 粒子效果\:%7 拾取類型\:%8 @@ -1111,11 +1148,19 @@ blockly.block.set_time=將時間設為 %1 %2 blockly.block.spawn_entity=在 x\: %1 y\: %2 z\: %3 生成實體\: %4 %5 blockly.block.spawn_entity_with_rotation=在x\: %1 y\: %2 z\: %3 生成實體\: %6 偏移\: %4 俯仰度\: %5 %7 blockly.block.spawn_entity_with_rotation_velocity=在 x\: %1 y\: %2 z\: %3 與偏移\: %4 俯仰度\: %5 vx\: %6 vy\: %7 vz\: %8 %10 生成實體\: %9 -blockly.block.spawn_gem=生成掉落物 %1 於 x\: %2 y\: %3 z\: %4 拾取延遲\: %5 自然消失\: %6 %7 +blockly.block.spawn_gem=在 x\:%2 y\:%3 z\:%4 生成掉落物 %1 拾取延遲\:%5 自然消失\: %6 %7 blockly.block.spawn_particle=在 x\: %1 y\: %2 z\: %3 移動向量 vx\: %4 vy\: %5 vz\: %6 生成單個粒子,類型\:%7 blockly.block.spawn_particle_multi=在伺服端生成中心點位於 x\: %1 y\: %2 z\: %3 距離中心點的偏移 dx\: %4 dy\: %5 dz\: %6,速度為 %7 的粒子 %8,類型\:%9 %10 blockly.block.spawn_xporb=在 x\: %2 y\: %3 z\: %4 生成經驗值為 %1 的經驗球 %5 blockly.block.strike_lightning=在 x\:%1 y\:%2 z\:%3 劈下閃電,只有效果\:%4 %5 +blockly.block.team_add_entity=將實體 %2 添加到隊伍 %1 +blockly.block.team_create_new=建立名為 %1 的新隊伍 +blockly.block.team_delete=刪除名為 %1 的隊伍 +blockly.block.team_get_entity_team=取得實體 %1 所在的隊伍 +blockly.block.team_get_friendlyfire=名為 %1 的隊伍允許 PvP +blockly.block.team_remove_entity=將實體 %2 從隊伍 %1 中移除 +blockly.block.team_set_friendlyfire=將名為 %1 的隊伍的允許 PvP 狀態設為 %2 +blockly.block.team_set_friendlyfire.tooltip=允許 PvP 只對玩家有效 blockly.block.wait=等待 %1 %2 刻,然後在伺服器端 %5 %3 上執行 %4 blockly.block.world_data_heightat=在x\: %1 z\: %2 處取得 %3 高度 blockly.block.world_data_biomeat=%4 生態域位於 x\: %1 y\: %2 z\: %3 @@ -1134,7 +1179,7 @@ blockly.block.world_data_isair=x\: %1 y\: %2 z\: %3 為空氣 blockly.block.world_data_isday=在提供的世界 %1 中為白天 blockly.block.world_data_israided=在 x\: %1 y\: %2 z\: %3 發生了突襲 %4 blockly.block.world_data_israining=在提供的維度中為雨天 -blockly.block.world_data_isremote=世界客戶端已提供 +blockly.block.world_data_isremote=提供的世界僅存在客戶端 blockly.block.world_data_isthundering=在提供的維度 %1 中為雷暴 blockly.block.world_data_light_level=取得位於 x\: %1 y\: %2 z\: %3 的亮度 blockly.block.world_data_logic_getgamerule=取得邏輯遊戲規則 %1 @@ -1190,7 +1235,7 @@ blockly.block.restrict_sun=避開太陽 %1 blockly.block.swim=以 %1 速度隨機游泳 %2 blockly.block.swim_in_water=漂浮在水中 %1 blockly.block.try_and_find_water=試圖發現水 %1 -blockly.block.watch_closest_entity=在半徑 %1 內觀察最近的 %2 類型的實體 %3 +blockly.block.watch_closest_entity=觀察半徑為 %1 內的 %2 類型的最近實體 %3 blockly.block.wander=以 %1 的速度遊蕩(允許行走)%2 blockly.block.wander_avoid_water=以 %1 的速度四处游荡并避开水域 %2 blockly.block.biome_entered=如果玩家進入生態域 %1 @@ -1202,21 +1247,21 @@ blockly.block.item_consumed=如果 %1 被消耗 blockly.block.item_damaged=如果 %3 被損壞,程度在 %1 和 %2 之間 blockly.block.item_in_inventory=如果玩家在物品欄中有 %1 至 %2 的 %3 blockly.block.tick=每遊戲刻 -blockly.block.blockpos=方塊位置參數 %1 %2 %3 -blockly.block.old_command=接受所有參數和調用函式 -blockly.block.blockstate=方塊狀態參數 %1 %2 %3 -blockly.block.number_default=數字參數 %1 %2 %3 -blockly.block.number_min=最小值參數 %1\:%2 %3 %4 -blockly.block.number_min_max=為參數 %1 賦值,最小值\:%2,最大值\:%3 %4 %5 -blockly.block.logic=邏輯參數 %1 %2 %3 -blockly.block.string=類型為 %2,參數為 %1 的字串 %3 %4 +blockly.block.blockpos=方塊位置引數 %1 %2 %3 +blockly.block.old_command=接受所有引數和調用函式 +blockly.block.blockstate=方塊狀態引數 %1 %2 %3 +blockly.block.number_default=數字引數 %1 %2 %3 +blockly.block.number_min=最小值引數 %1\:%2 %3 %4 +blockly.block.number_min_max=為引數 %1 賦值,最小值\:%2,最大值\:%3 %4 %5 +blockly.block.logic=邏輯引數 %1 %2 %3 +blockly.block.string=類型為 %2,引數為 %1 的字串 %3 %4 blockly.block.string.tooltip=「可引用文字」允許引號內的句子。 -blockly.block.entity=生物參數 %1 對於 %2 %3 %4 -blockly.block.item=物品參數 %1 %2 %3 +blockly.block.entity=生物引數 %1 對於 %2 %3 %4 +blockly.block.item=物品引數 %1 %2 %3 blockly.block.is_mod_loaded=載入了 ID 為 %1 的模組 -blockly.block.message=消息參數 %1 %2 %3 -blockly.block.message.tooltip=消息參數用於諸如/ban 或 /kick 等指令。 -blockly.block.literal=字面參數 %1 %2 %3 +blockly.block.message=消息引數 %1 %2 %3 +blockly.block.message.tooltip=消息引數用於諸如/ban 或 /kick 等指令。 +blockly.block.literal=字面引數 %1 %2 %3 blockly.block.literal.tooltip=內置的選項是 'day', 'noon ', 'normal', 'easy' 等。 blockly.block.entity_get_armor_slot_item.tooltip=ID 3 是頭盔,ID 0 是靴子 blockly.block.entity_set_armor_slot_item.tooltip=ID 3 是頭盔,ID 0 是靴子 @@ -1253,7 +1298,7 @@ blockly.block.block_predicate_mutator.input=條件 blockly.block.block_predicate_not=不是 %1 blockly.block.block_predicate_replaceable=在 x\:%1 y\:%2 y\:%3 的方塊可以替換 blockly.block.block_predicate_solid=在 x\:%1 y\:%2 y\:%3 的方塊為固體 -blockly.block.block_predicate_true=真 +blockly.block.block_predicate_true=True blockly.block.block_predicate_would_survive=%1 將在 x\: %2 y\: %3 z\: %4 存在 blockly.block.feature_bamboo=有 %1 概率種在灰壤上的竹子 blockly.block.block_list_mutator.container=方塊清單 @@ -1290,7 +1335,7 @@ blockly.block.feature_simple_random_mutator.input=地物 blockly.block.feature_simple_random_selector=清單中的隨機地物\: blockly.block.feature_simple_random_selector.input=地物\: blockly.block.feature_simple_random_selector.empty=清單不能為空 -blockly.block.feature_tree.decorator_input=裝飾: +blockly.block.feature_tree.decorator_input=裝飾\: blockly.block.feature_tree_pine=種植在 %2 泥土上的 %1 樹木,樹幹由 %3 組成,由 %4 組成高度為 %5 的樹葉,根由 %6 組成, 高度為 %7,最多 %8,最多 %9 %10 ,生成時底部有泥土\: %11 %12 不生成藤蔓\: %13 %14 其樹木裝飾為\: blockly.block.feature_tree_pine.empty=(無) blockly.block.feature_tree_simple=種植在 %2 泥土上且高度為 %6 的 %1 樹木,樹幹由 %3 組成,樹葉由 %4 組成,根由 %5 組成,最多 %7 ,最多 %8 %9 ,生成時底部有泥土\: %10 %11 不生成藤蔓\: %12 %13 其裝飾為\: @@ -1304,7 +1349,7 @@ blockly.block.placement_block_predicate_filter=僅當條件 %1 已滿足時 blockly.block.placement_block_survival_filter=僅當 %1 能在當前位置生成 blockly.block.placement_carving_mask=在由 %1 切割出的每一個位置 blockly.block.placement_environment_scan=向 %2 的方向最多掃描 %1 個方塊,直到滿足條件 %3 -blockly.block.placement_environment_scan_advanced=當條件 %4 為真時,最多向 %2 方向掃描 %1 個方塊直到條件 %3 滿足 +blockly.block.placement_environment_scan_advanced=當條件 %4 為true時,最多向 %2 方向掃描 %1 個方塊直到條件 %3 滿足 blockly.block.height_provider_biased_to_bottom=在最小值\:%1 最大值\:%2 統一範圍\:%3 之間隨機選取高度(偏向底部) blockly.block.height_provider_constant=固定高度\: %1 blockly.block.height_provider_trapezoid=在最小值\:%1 最大值\:%2 均勻範圍\:%3 隨機選取高度(等腰梯形分布) @@ -1338,7 +1383,7 @@ blockly.block.placement_rarity=有 %1 分之 1 的概率 blockly.block.placement_surface_relative_threshold=僅限當前高度相對於高度圖 %1 位於最小值\: %2 和最大值\:%3 之間時 blockly.block.placement_surface_water_depth=僅當地表水在當前位置最多為 %1 塊深時 blockly.block.root_placer_none=無根 -blockly.block.rule_test_always_true=真 +blockly.block.rule_test_always_true=True blockly.block.rule_test_block_match=方塊是 %1 blockly.block.rule_test_blockstate_match=方塊狀態為 %1 blockly.block.rule_test_random_block_match=方塊有 %2 的概率是 %1 @@ -1360,8 +1405,8 @@ blockly.block.vertical_anchor_below_top=世界頂部下方的 %1 個方塊 blockly.block.geode_crystal_mutator.container=紫水晶清單 blockly.block.geode_crystal_mutator.input=紫水晶 blockly.block.weighted_list.weight=權重\: -blockly.block.weighted_list.entry=條目\: -blockly.block.weighted_list_mutator.container=條目清單 +blockly.block.weighted_list.entry=項\: +blockly.block.weighted_list_mutator.container=項清單 blockly.block.weighted_list_mutator.input=高度 blockly.block.aitasks_container=AI任務/目標清單 blockly.block.aitasks_container.tip=清單中較高的任務的優先級較高 @@ -1390,6 +1435,7 @@ blockly.block.damagesource_get_entity=%2 取得造成 %1 傷害的實體 blockly.block.damagesource_get_exhaustion=取得 %1 造成的傷害值 blockly.block.damagesource_is_cause_creative=%1 是由創造模式玩家造成的 blockly.block.damagesource_is_indirect=%1 為非直接傷害 +blockly.block.damagesource_is_tagged_in=%1 在傷害類型中被標記為 %2 blockly.block.damagesource_scales_with_difficulty=%1 会受難度影響而減少傷害 blockly.block.direction_from_deps=觸發方向/面 blockly.block.direction_unspecified=任何方向 @@ -1435,7 +1481,7 @@ blockly.block.return_entity=返回的實體\: blockly.block.return_itemstack=返回的物品棧\: blockly.block.return_logic=返回的邏輯\: blockly.block.return_number=返回的數字\: -blockly.block.return_string=返回的文字: +blockly.block.return_string=返回的文字\: blockly.block.registryname_to_mcitem=取得註冊表名稱 %1 的物品,如果取得失敗則將取得空氣 blockly.block.registryname_to_mcitemblock=取得註冊表名稱 %1 的方塊,如果取得失敗則將取得空氣 blockly.field_ai_condition_selector.tooltip.empty=雙擊以選擇條件 @@ -1445,7 +1491,7 @@ blockly.field_ai_condition_selector.conditions=條件\: blockly.field_data_list_selector.tooltip.empty=雙擊以選擇一個值 blockly.field_mcitem_selector.tooltip.empty_block=雙擊以選擇一個方塊 blockly.field_mcitem_selector.tooltip.empty_block_item=雙擊以選擇一個方塊或物品 -blockly.extension.data_list_selector.no_entry=沒有選取可用的項目 +blockly.extension.data_list_selector.no_entry=沒有選取可用的項 blockly.extension.placement_count.count=輸入的數字必須在0至256之間 blockly.extension.placement_count_on_every_layer.count=輸入的數字必須在0至256之間 blockly.extension.placement_offset.xz=垂直偏移必須介於-16到16之間 @@ -1466,17 +1512,23 @@ dialog.workspace.export_deobf.title=匯出反混淆的模組 dialog.workspace.export_deobf.message=反混淆後的模組不能在標準安裝下的Minecraft中使用。
      僅在有充分理由使用此選項時才使用此選項。

      確定要使用此選項嗎? dialog.workspace.export.option.donate_and_export=捐贈並匯出模組 dialog.workspace.export.option.just_export=匯出模組而不捐贈 -dialog.workspace.export.error.message=你的工作室包含無法編譯且無法匯出的模組元素。
      未生成任何模組檔案。 +dialog.workspace.export.error.message=你的工作空間包含無法編譯且無法匯出的模組元素。
      未生成任何模組檔案。 dialog.workspace.export.error.title=匯出失敗 -action.workspace.import_from_zip=將工作室ZIP檔案匯入此工作室... -action.workspace.new=新增工作室… -action.workspace.open=開啟工作室… -action.workspace.export_workspace=從工作室 ZIP 檔案匯出工作室... -action.workspace.export_workspace_include_run=將 ZIP 檔案匯出工作室(與程式執行目錄)... -dialog.workspace.export_workspace.compressing=壓縮工作室 -dialog.workspace.export_workspace.title=工作室匯出 -dialog.workspace.export_backup=工作室備份 +action.workspace.import_from_zip=將工作空間ZIP檔案匯入此工作空間... +action.workspace.new=新增工作空間… +action.workspace.open=開啟工作空間… +action.workspace.export_workspace=從工作空間 ZIP 檔案匯出工作空間... +action.workspace.export_workspace_include_run=將 ZIP 檔案匯出工作空間(與程式執行目錄)... +dialog.workspace.export_workspace.compressing=壓縮工作空間 +dialog.workspace.export_workspace.title=工作空間匯出 +dialog.workspace.export_backup=工作空間備份 action.workspace.regenerate_and_build=重新生成程式碼並建置 +tag.type.items=物品 +tag.type.blocks=方塊 +tag.type.entities=實體 +tag.type.functions=函數 +tag.type.biomes=生態域 +tag.type.damage_types=傷害類型 modelement.unknown=未知 modelement.achievement=進度 modelement.armor=盔甲 @@ -1484,6 +1536,7 @@ modelement.biome=生態域 modelement.block=方塊 modelement.code=自訂元素 modelement.command=指令 +modelement.damagetype=傷害類型 modelement.dimension=維度 modelement.enchantment=附魔 modelement.gamerule=遊戲規則 @@ -1521,9 +1574,10 @@ modelement.biome.description=生態域是一個具有特定地理特徵、植被 modelement.block.description=方塊是 Minecraft 中基本的單位,是可放置在世界內的 3D 對象。 modelement.code.description=自訂元素是使用程式碼編輯器中的自訂程式碼定義的。 modelement.command.description=指令是一組文字字串,當玩家在聊天窗口將其輸入時啟動。 +modelement.damagetype.description=傷害類型決定了如何對實體施加傷害。 modelement.dimension.description=維度是一個生成的世界,具有自己的屬性並且可以具有傳送門。 modelement.enchantment.description=附魔是一種改變物品特質的方式,會為物品增加特殊能力。 -modelement.gamerule.description=遊戲規則是特定世界內的可自訂參數 +modelement.gamerule.description=遊戲規則是特定世界內的可自訂引數 modelement.feature.description=地物是在世界生成中用以生成特殊元素的功能。 modelement.fluid.description=流體是可以充當流體的特殊方塊,在世界中自由流動。 modelement.food.description=食物是一種可以食用的物品,並且可以給予你狀態效果。 @@ -1532,7 +1586,7 @@ modelement.function.description=函數允許玩家呼叫時執行指令集。 modelement.gui.description=介面是可顯示的面板,具有按鈕,標籤,存儲槽等元素。 modelement.itemextension.description=物品擴展是能夠添加到物品的一組額外屬性。 modelement.item.description=物品是可以手持的物件。 你可以使用它並讓它有耐久度。 -modelement.keybind.description=按鍵對應是為客戶端加入新的按鍵,这些按键在按下或释放时会执行你选定的事件。 +modelement.keybind.description=按鍵對應是為客戶端加入新的按鍵,這些按鍵在按下或釋出時會執行你選定的事件。 modelement.loottable.description=戰利品表表示應在容器中自然生成哪些物品。 modelement.livingentity.description=生物是具有活動能力,AI 行為,生命值等的實體 modelement.musicdisc.description=唱片是一種可以放入唱片機中播放的物品。 @@ -1544,7 +1598,7 @@ modelement.potioneffect.description=藥水效果是一種可以給予實體的 modelement.potion.description=藥水是一種可以給予實體效果的物品。 modelement.procedure.description=函式是具有可選全域觸發器的圖形化設計的事件。 modelement.projectile.description=投射物是一個可向任意方向發射的實體。 -modelement.recipe.description=配方是一組定義好的方塊和物品,可通過使用一些方法將原料轉換為新的方塊和物品。 +modelement.recipe.description=配方是一組定義好的方塊和物品,可透過使用一些方法將原料轉換為新的方塊和物品。 modelement.structure.description=結構是依條件生成的一小組方塊 modelement.tab.description=創造模式選項卡是一個在創造模式物品欄中顯示的物品和方塊的合集。 modelement.tag.description=標籤用於使用不同標籤類型對元素進行分組。 @@ -1552,9 +1606,9 @@ modelement.tool.description=工具是可以幫助你比用手更快,更好地 modelement.villagerprofession.description=村民職業決定了村民的服裝和他的交易項 modelement.villagertrade.description=村民的交易項可添加新交易項至村民職業 preferences.section.ui=使用者介面 -preferences.section.ui.description=在此處你可以變更使用者介面設定和參數。 如果變更了這些設定,需要重新啟動MCreator才能生效。 +preferences.section.ui.description=在此處你可以變更使用者介面設定和引數。 如果變更了這些設定,需要重新啟動 MCreator 才能生效。 preferences.section.backups=備份和存儲 -preferences.section.backups.description=在此處你可以變更與工作室項目檔案的自動存儲和自動備份相關的設定。 +preferences.section.backups.description=在此處你可以變更與工作空間項目檔案的自動存儲和自動備份相關的設定。 preferences.section.blockly=視覺化編輯器 preferences.section.blockly.description=在此處你可以修改函式、疊加層和生物編輯器中使用的視覺化編輯器偏好設定。 preferences.section.ide=程式碼編輯器 @@ -1564,9 +1618,9 @@ preferences.section.gradle.description=在此處你可以調整 Gradle 的系統 preferences.section.bedrock=基岩版設定 preferences.section.bedrock.description=在此處你可以調整 Minecraft基岩版支援的設定 preferences.section.notifications=通知 -preferences.section.notifications.description=在此頁面上,你可以變更有關MCreator中通知的設定。 +preferences.section.notifications.description=在此頁面上,你可以變更有關 MCreator 的通知設定。 preferences.ui.language=介面語言 -preferences.ui.language.description=警告\:翻譯由社區貢獻,可能出現翻譯丟失、不準確或錯誤。
      你需重啟MCreator以套用此變更。 +preferences.ui.language.description=警告\:翻譯由社區貢獻,可能出現翻譯丟失、不準確或錯誤。
      你需重啟 MCreator 以套用此變更。 preferences.ui.useMacOSMenuBar=使用預設的macOS選單欄 preferences.ui.useMacOSMenuBar.description=在macOS上,使用位於螢幕頂部的預設選單欄。 preferences.ui.useNativeFileChooser=使用預設系統檔案選擇器 @@ -1574,7 +1628,7 @@ preferences.ui.useNativeFileChooser.description=勾選以使用預設系統檔 preferences.ui.interfaceAccentColor=使用者介面主要顏色 preferences.ui.interfaceAccentColor.description=介面元素的主要顏色。 如果變更,則需要重新啟動該程式。 preferences.ui.backgroundSource=介面背景來源 -preferences.ui.backgroundSource.description=這指定了MCreator用於載入介面背景的源 +preferences.ui.backgroundSource.description=這指定了 MCreator 用於載入介面背景的來源 preferences.ui.interfaceTheme=介面顏色主題 preferences.ui.interfaceTheme.description=介面使用的顏色主題。 如果變更,則需要重新啟動該程式。
      警告\: 淺色主題是實驗性功能,可能並不總是看起來不錯或可用。 preferences.ui.aaText=啟用文字抗鋸齒 @@ -1589,16 +1643,16 @@ preferences.ui.autoReloadTabs=自動重載選項頁內的資料 preferences.ui.autoReloadTabs.description=如果你在切換選項卡時有效能問題,請停用此選項 preferences.ui.remindOfUnsavedChanges=模組元素編輯器中變更未存儲时的警告 preferences.ui.remindOfUnsavedChanges.description=如果啟用,關閉模組元素編輯器而不存儲其變更時,將建議存儲它們 -preferences.ui.discordRichPresenceEnable=啟用Discord狀態監視 -preferences.ui.discordRichPresenceEnable.description=啟用時,Discord應用程式將顯示你正在使用MCreator -preferences.backups.workspaceAutosaveInterval=工作室自動儲存間隔(秒) -preferences.backups.workspaceAutosaveInterval.description=此參數定義在發生任何變更的情況下應多久自動儲存工作室。
      在MCreator關閉時,也會自動儲存工作室。 +preferences.ui.discordRichPresenceEnable=啟用 Discord 狀態監視 +preferences.ui.discordRichPresenceEnable.description=啟用時,Discord 應用程式將顯示你正在使用 MCreator +preferences.backups.workspaceAutosaveInterval=工作空間自動儲存間隔(秒) +preferences.backups.workspaceAutosaveInterval.description=此引數定義在發生任何變更的情況下應多久自動儲存工作空間。
      在 MCreator 關閉時,也會自動儲存工作空間。 preferences.backups.automatedBackupInterval=自動備份時間間隔(以分鐘為單位) -preferences.backups.automatedBackupInterval.description=此參數定義備份工作室的頻率。
      數字越小代表更多的逐步備份,但歷史記錄間隔更短。 +preferences.backups.automatedBackupInterval.description=此引數定義備份工作空間的頻率。
      數字越小代表更多的逐步備份,但歷史記錄間隔更短。 preferences.backups.numberOfBackupsToStore=儲存的備份數量 preferences.backups.numberOfBackupsToStore.description=此數字定義儲存的備份數量。
      如果備份數量超過此數量,則最早的將被丟棄。 -preferences.backups.backupOnVersionSwitch=使用新版本中開啟工作室時進行完整備份 -preferences.backups.backupOnVersionSwitch.description=如果啟用,MCreator將執行完整的工作室備份,然後再開啟新版本的工作室資料夾。 +preferences.backups.backupOnVersionSwitch=使用新版本中開啟工作空間時進行完整備份 +preferences.backups.backupOnVersionSwitch.description=如果啟用,MCreator 將執行完整的工作空間備份,然後再開啟新版本的工作空間資料夾。 preferences.blockly.blockRenderer=方塊渲染器 preferences.blockly.blockRenderer.description=視覺化編輯器中方塊渲染器(顯示風格) preferences.blockly.useSmartSort=使用智慧函式塊排序 @@ -1620,7 +1674,7 @@ preferences.blockly.scaleSpeed.description=無縮放 - 100, 放大 >100, 縮小< preferences.blockly.legacyFont=使用傳統字體 preferences.blockly.legacyFont.description=如果視覺化編輯器的文字渲染故障,請啟用此選項 preferences.blockly.transparentBackground=啟用透明背景 -preferences.blockly.transparentBackground.description=這使視覺化編輯器背景透明,在其後面傳輸 UI 背景, 目前僅在 Windows 上工作。
      此參數是實驗性的,可能導致錯誤的外觀或降低視覺化編輯器的性能。 +preferences.blockly.transparentBackground.description=這使視覺化編輯器背景透明,在其後面傳輸 UI 背景, 目前僅在 Windows 上工作。
      此引數是實驗性的,可能導致錯誤的外觀或降低視覺化編輯器的性能。 preferences.blockly.colorSaturation=塊顏色飽和度 preferences.blockly.colorSaturation.description=此選項決定視覺化編輯器的塊飽和度,增加其數值讓塊更加獨特。預設值為 45。 preferences.blockly.colorValue=塊顏色亮度 @@ -1630,59 +1684,59 @@ preferences.ide.fontSize=編輯器字體大小 preferences.ide.fontSize.description=程式碼編輯器中的初始字體大小 preferences.ide.autocomplete=啟用自動补全 preferences.ide.autocompleteMode=智慧下拉模式 -preferences.ide.autocompleteMode.description=手動觸發僅通過 Ctrl +空格鍵即可自動完成,智慧模式則會根據上下文而觸發。 +preferences.ide.autocompleteMode.description=手動觸發僅透過 Ctrl +空格鍵即可自動完成,智慧模式則會根據上下文而觸發。 preferences.ide.autocompleteDocWindow=啟用智慧檔案視窗 preferences.ide.autocompleteDocWindow.description=除了智慧視窗清單外,顯示其它Java檔案視窗 preferences.ide.lineNumbers=在編輯器中顯示行號 preferences.ide.errorInfoEnable=在編輯器中顯示信息欄 preferences.ide.errorInfoEnable.description=顯示錯誤行數,警告和當前搜索結果 -preferences.gradle.compileOnSave=儲存模組元素後建置工作室 +preferences.gradle.compileOnSave=儲存模組元素後建置工作空間 preferences.gradle.compileOnSave.description=請保持啟用,除非你知道為什麼需要這樣做,否則可能不會收到有關模組錯誤的通知。 -preferences.gradle.passLangToMinecraft=將語言設定傳遞到Minecraft測試客戶端 +preferences.gradle.passLangToMinecraft=將語言設定傳遞到 Minecraft 測試客戶端 preferences.gradle.passLangToMinecraft.description=啟用後,Minecraft的介面語言/在地化設定將在每次執行時設為和 MCreator 一致的語言。 preferences.gradle.Xms=初始記憶體大小 preferences.gradle.Xms.description=在任務開始時保留的記憶體空間。 preferences.gradle.Xmx=最大記憶體大小 preferences.gradle.Xmx.description=Gradle 系統允許保留的最大記憶體空間。 preferences.gradle.offline=以離線模式執行 Gradle -preferences.gradle.offline.description=如果你已經在有網路連線的情況下成功完成工作室的第一次建置,但現在需在無網路的情況下開發模組,可勾選此選項。
      僅當你無網路連線時才使用此功能!
      啟用此選項可能會來一些建置問題,因此僅在絕對必要之時使用!
      +preferences.gradle.offline.description=如果你已經在有網路連線的情況下成功完成工作空間的第一次建置,但現在需在無網路的情況下開發模組,可勾選此選項。
      僅當你無網路連線時才使用此功能!
      啟用此選項可能會來一些建置問題,因此僅在絕對必要之時使用!
      preferences.bedrock.silentReload=靜默重載已開啟基岩版應用程式 -preferences.bedrock.silentReload.description=請記住,靜默重載不會存儲任何未存儲的世界進度,因此僅將其與測試世界一起使用 -preferences.notifications.openWhatsNextPage=當新工作室設定好後將顯示「接下來如何做?」 -preferences.notifications.openWhatsNextPage.description=取消勾選此選項可禁止該頁面在建立新工作室時自動彈出 -preferences.notifications.checkAndNotifyForUpdates=在MCreator啟動時通知新的重大更新通知 +preferences.bedrock.silentReload.description=注意\:靜默重載不會存儲任何未存儲的世界進度,因此僅將其與測試世界一起使用 +preferences.notifications.openWhatsNextPage=當新工作空間設定好後將顯示「接下來如何做?」 +preferences.notifications.openWhatsNextPage.description=取消勾選此選項可禁止該頁面在建立新工作空間時自動彈出 +preferences.notifications.checkAndNotifyForUpdates=在 MCreator 啟動時通知新的重大更新通知 preferences.notifications.checkAndNotifyForUpdates.description=如果你不想收到新的重大更新通知,請取消勾選该项。
      注意\: 即使你取消勾選,如果發現了可用的更新,在MCreator啟動時仍會有小通知。 -preferences.notifications.checkAndNotifyForPatches=在MCreator啟動時通知修補程式(小更新)更新 -preferences.notifications.checkAndNotifyForPatches.description=如果你不希望收到修補程式(小更新)更新的通知,請取消勾選該項。
      注意\: 即使你取消勾選,如果發現了可用的更新,在MCreator啟動時仍會有小通知。 +preferences.notifications.checkAndNotifyForPatches=在 MCreator 啟動時通知修補程式(小更新) 更新 +preferences.notifications.checkAndNotifyForPatches.description=如果你不希望收到修補程式(小更新) 更新的通知,請取消勾選此框。
      注意\: 即使你取消勾選該核取方塊,如果發現了可用的更新,在 MCreator 啟動時仍會有小通知。 preferences.notifications.showWebsiteNewsNotifications=啟動時顯示官網新聞通知 -preferences.notifications.showWebsiteNewsNotifications.description=啟用該項時,工作室選擇器將在 MCreator 啟動時顯示官網新聞的通知。 +preferences.notifications.showWebsiteNewsNotifications.description=啟用該項時,工作空間選擇器將在 MCreator 啟動時顯示官網新聞的通知。 preferences.notifications.checkAndNotifyForPluginUpdates=通知社群插件更新 -preferences.notifications.checkAndNotifyForPluginUpdates.description=如果你不想收到第三方插件更新的通知,請取消勾選此项。
      請記住,如果第三方插件更新伺服器出現故障或速度緩慢,此選項可能會減慢MCreator的啟動速度,而且此選項允許
      我們無法控制的第三方插件在MCreator啟動期間訪問其更新伺服器。 +preferences.notifications.checkAndNotifyForPluginUpdates.description=如果你不想收到第三方插件更新的通知,請取消勾選此项。
      注意\:如果第三方插件更新伺服器出現故障或速度緩慢,此選項可能會減慢 MCreator 的啟動速度,而且此選項允許
      我們無法控制的第三方插件在 MCreator 啟動期間訪問其更新伺服器。 preferences.themes.select_theme=選擇要使用的主題 -preferences.themes.select_theme.description=該主題包含MCreator所使用的資源。 +preferences.themes.select_theme.description=該主題包含 MCreator 所使用的資源。 dialog.workspace.regenerate_and_build.title=重新生成程式碼並建置 dialog.workspace.regenerate_and_build.progress.removing_autogenerated_code=正在刪除自動生成的程式碼 dialog.workspace.regenerate_and_build.progress.loading_mod_elements=預先載入模組元素 dialog.workspace.regenerate_and_build.progress.regenerating_code=正在重新生成程式碼 -dialog.workspace.regenerate_and_build.error.failed_to_import.message=無法匯入模組元素 {0}

      MCreator無法匯入工作室檔案中其中一個定義的元素,
      因為缺少模組定義。 MCreator將略過該模組。
      如果沒有一些模組元素,你的工作室可能無法正常運作。

      目前為止已略過的模組元素\:{1} +dialog.workspace.regenerate_and_build.error.failed_to_import.message=無法匯入模組元素 {0}

      MCreator無法匯入工作空間檔案中其中一個定義的元素,
      因為缺少模組定義。 MCreator將略過該模組。
      如果沒有一些模組元素,你的工作空間可能無法正常運作。

      目前為止已略過的模組元素\:{1} dialog.workspace.regenerate_and_build.error.failed_to_import.title=匯入錯誤 dialog.workspace.regenerate_and_build.error.failed_to_import.option.skip_one=略過模組元素 dialog.workspace.regenerate_and_build.error.failed_to_import.option.skip_all=全部略過 -dialog.workspace.regenerate_and_build.warning.skipped_import_of.message=由於缺少模組定義,MCreator略過了 {0} 模組元素的匯入。

      工作室可能無法正常運作。
      此錯誤是由於你匯入了損壞的工作室檔案導致的。 +dialog.workspace.regenerate_and_build.warning.skipped_import_of.message=由於缺少模組定義,MCreator 略過了 {0} 模組元素的匯入。

      工作空間可能無法正常運作。
      此錯誤是由於你匯入了損壞的工作空間檔案導致的。 dialog.workspace.regenerate_and_build.warning.skipped_import_of.title=匯入錯誤 -dialog.workspace.regenerate_and_build.warning.elements_with_locked_code.message=此工作室包含帶有鎖定程式碼的模組元素。

      如果Minecraft版本已變更或程式碼中有任何變更,
      由於MCreator不會更新鎖定程式碼内的模組元素,你的工作室可能無法編譯。

      在這種情況下,你將需要手動更新和修復具有鎖定程式碼的模組元素的錯誤。 +dialog.workspace.regenerate_and_build.warning.elements_with_locked_code.message=此工作空間含帶鎖定原始碼的模組元素。

      如果 Minecraft 版本已變更或原始碼中有任何變更,
      由於 MCreator 不會更新鎖定原始碼內的模組元素,你的工作空間可能無法編譯。

      在這種情況下,你將需要手動更新和修復具有鎖定原始碼的模組元素的錯誤。 dialog.workspace.regenerate_and_build.warning.elements_with_locked_code.title=匯入通知 -dialog.workspace.regenerate_and_build.progress.regenerating_workspace_and_resources=重新生成工作室基礎與資源中 +dialog.workspace.regenerate_and_build.progress.regenerating_workspace_and_resources=重新生成工作空間基礎與資源中 dialog.workspace.regenerate_and_build.progress.reformating_code=正在重新格式化程式碼並整理匯出 -dialog.workspace.regenerate_and_build.progress.clean_up_workspace=正在清理工作室 -dialog.workspace.regenerate_and_build.progress.rebuilding_workspace=重建 Gradle 工作室中 -dialog.workspace.import_from_zip.importing=從ZIP檔案中匯入工作室 -dialog.workspace.import_from_zip.extracting=匯出工作室 -dialog.workspace.import_from_zip.failed_message=你嘗試匯入的檔案不是
      合法可分發的 MCreator ZIP 工作室檔案。 -dialog.workspace.import_from_zip.failed_title=無效的工作室 -action.workspace.settings=工作室設定... -dialog.workspace.settings.workspace_switch.title=工作室切換 -dialog.workspace.settings.workspace_switch.progress.preparing=正在為生成器切換準備工作室 +dialog.workspace.regenerate_and_build.progress.clean_up_workspace=正在清理工作空間 +dialog.workspace.regenerate_and_build.progress.rebuilding_workspace=重建 Gradle 工作空間中 +dialog.workspace.import_from_zip.importing=從ZIP檔案中匯入工作空間 +dialog.workspace.import_from_zip.extracting=匯出工作空間 +dialog.workspace.import_from_zip.failed_message=你嘗試匯入的檔案不是
      合法可分發的 MCreator ZIP 工作空間檔案。 +dialog.workspace.import_from_zip.failed_title=無效的工作空間 +action.workspace.settings=工作空間設定... +dialog.workspace.settings.workspace_switch.title=工作空間切換 +dialog.workspace.settings.workspace_switch.progress.preparing=正在為生成器切換準備工作空間 dialog.workspace.settings.workspace_switch.progress.switching_version=正在切換版本 dialog.workspace.settings.workspace_package_empty=套件包名稱不能為空 dialog.workspace.settings.workspace_package_startdot=套件包名不能以點開頭 @@ -1701,10 +1755,10 @@ dialog.workspace.resources.import_structure_from_minecraft.message=請 dialog.workspace.resources.import_structure_from_minecraft.title=匯入結構 action.workspace.resources.import_sound=匯入 ogg 音效... action.workspace.resources.import_java_model=匯入Java 3D模型... -dialog.workspace.resources.import_java_model.version_notice.message=為 Minecraft>\= 1.15 製作的Java模型將不適用於低於1.15的版本(如 1.14.4)!

      要在Blockbench中設定模型版本,請轉到檔案 -> 專案 -> 匯出版本。
      設定新匯出版本後,將模型重新匯出到Java檔案並用MCreator匯入。 +dialog.workspace.resources.import_java_model.version_notice.message=為 Minecraft>\= 1.15 製作的 Java 模型將不適用於低於1.15的版本(如 1.14.4)!

      要在 Blockbench 中設定模型版本,請轉到檔案 -> 專案 -> 匯出版本。
      設定新匯出版本後,將模型重新匯出到 Java 檔案並用 MCreator 匯入。 dialog.workspace.resources.import_java_model.version_notice_new.message=此生成器支援以下Java模型版本\:

      {0}


      確保你的Java模型程式碼是為此Minecraft版本製作的。
      你可能無法將此模型與其它生成器一起使用,
      具體取決於其它生成器是否聲明與此模型的Minecraft版本相容。 dialog.workspace.resources.import_java_model.version_notice.title=Java模型匯入 -dialog.workspace.version_switch.java_model_warning=工作室使用了Java模型。

      你切換到的生成器需要不同的模型Minecraft版本。如要無縫切換,
      你將需要匯出模型,並再次以相同的
      名稱匯入它們。然後,MCreator將在生成器之間切換時使用正確的模型版本。

      你將需要重新匯出以下Java模型,其格式不受該生成器支援\:

      {0}。 +dialog.workspace.version_switch.java_model_warning=工作空間使用了 Java 模型。

      你切換到的生成器需要不同的 Minecraft版本。如要無縫切換,
      你將需要匯出模型,並再次以相同的
      名稱匯入它們。然後,MCreator 將在生成器之間切換時使用正確的模型版本。

      你將需要重新匯出以下 Java 模型,其格式不受該生成器支援\:

      {0}。 dialog.workspace.version_switch.java_model_warning.title=Java模型警告 dialog.workspace.resources.import_java_model.invalid_model_name.message=你的模型名稱 {0} 不是有效的Java名稱!

      自訂模組模型名稱不能包含 空白,以數字開頭或包含任何非ASCII字母。

      模型名稱不是檔案名稱,而是模型的Java程式碼中的名稱(模型的類別名稱)!
      解決此問題的最佳方法是在匯出模型之前在3D電腦繪圖軟體中正確定義模型名稱。 dialog.workspace.resources.import_java_model.invalid_model_name.title=無效的模型名稱 @@ -1713,20 +1767,20 @@ dialog.workspace.resources.import_java_model.invalid_model_format.title=無效 dialog.workspace.resources.import_java_model.geckolib_needed.title=該模型需要外部API dialog.workspace.resources.import_java_model.geckolib_needed.message=此模型需要Geckolib程式庫來支援動畫並正確建置。
      請製作一個沒有Geckolib動畫的模型,或手動啟用Geckolib依賴關係的模型並修改實體渲染程式碼。 dialog.workspace.resources.import_java_model.incompatible_model.title=不相容的Java模型 -dialog.workspace.resources.import_java_model.incompatible_model.message=MCreator檢測到正在匯入的模型與當前生成器不相容。

      請確保從正確的Minecraft版本的建模器匯出Java模型與映射類型。 +dialog.workspace.resources.import_java_model.incompatible_model.message=MCreator 檢測到正在匯入的模型與當前生成器不相容。

      請確保從正確 Minecraft 版本的建模器匯出 Java 模型與映射類型。 dialog.workspace.resources.import_java_model.model_already_exists.message=已存在名稱為 {0} 的Java模型!
      確保程式碼中的模型名稱不同,然後再次匯入。 dialog.workspace.resources.import_java_model.model_already_exists.title=模型已存在 action.workspace.resources.import_json_model=匯入 JSON 3D模型... action.workspace.resources.import_obj_mtl_model=匯入 OBJ+MTL 3D 模型... -dialog.workspace.resources.import_obj_mtl_model.message=OBJ模型渲染器具有一些需要注意的限制\:

      -僅支援非常基本的MTL材質
      -UV材質只能具有0到1之間的vt
      -UV材質需要為PNG格式
      -確保.mtl和.obj檔案中僅包含ASCII字母
      -確保.mtl和.obj檔案為小寫且名稱中沒有任何空格
      -OBJ檔案需要指向正確的材質檔案

      如果可能,請使用JSON模型代替OBJ模型,因為這樣會更好。 +dialog.workspace.resources.import_obj_mtl_model.message=OBJ 模型渲染器具有一些需要注意的限制\:

      -僅支援非常基本的 MTL 材料
      -UV 材料只能具有 0 到1 之間的 vt
      -UV 材料需要為 PNG 格式
      -確保 .mtl 和 .obj 檔案中僅包含 ASCII 字母
      -確保 .mtl 和 .obj 檔案為小寫且名稱中沒有任何空格
      -OBJ 檔案需要指向正確的材料檔案

      如果可能,請使用 JSON 模型代替 OBJ 模型,因為這樣會更好。 dialog.workspace.resources.import_obj_mtl_model.title=匯入 OBJ 模型 -dialog.workspace.open_failed_message=工作室開啟失敗!
      你嘗試開啟的工作室曾經在較新版本的MCreator中開啟過。
      你不能在較舊的版本中開啟此工作室。 請更新你的MCreator至最新版本。 -dialog.workspace.open_failed_title=工作室開啟失敗 -dialog.workspace.got_corrupted_message=你嘗試開啟的工作室已損壞。

      如果MCreator意外關閉,可能會發生這種情況,但不必擔心,
      MCreator會自動備份工作室,你可以從其中一個備份中還原它。

      從下拉式選單中選擇要還原工作室的備份,然後點擊確定。
      -dialog.workspace.got_corrupted_title=從備份中還原工作室 -dialog.workspace.is_not_valid_message=工作室開啟失敗!
      你要開啟的工作室不是有效的MCreator工作室或已損壞!

      如果你未變更資料夾名稱,並且看到此消息,工作室檔案可能已損壞。
      工作室檔案備份儲存在 <workspace folder>/.mcreator/workspaceBackups/

      訊息\: -dialog.workspace.is_not_valid_title=工作室開啟失敗 -dialog.workspace.unknown_generator_message=該工作室使用不支援的生成器類型\:{0}
      為該工作室選擇一個支援的生成器。 +dialog.workspace.open_failed_message=工作空間開啟失敗!
      你嘗試開啟的工作空間曾在較新版本的 MCreator 中開啟過。
      你不能在較舊的版本中開啟此工作空間。 請更新你的 MCreator 至最新版。 +dialog.workspace.open_failed_title=工作空間開啟失敗 +dialog.workspace.got_corrupted_message=你嘗試開啟的工作空間已損壞。

      如果 MCreator 意外關閉,可能會發生這種情況,但不必擔心,
      MCreator會自動備份工作空間,你可從其中一個備份中還原它。

      從下拉清單中選擇要還原工作空間內的備份,然後點擊確定。
      +dialog.workspace.got_corrupted_title=從備份中還原工作空間 +dialog.workspace.is_not_valid_message=工作空間開啟失敗!
      你要開啟的工作空間不是有效的 MCreator 工作空間或已損壞!

      如果你未變更資料夾名稱,並且看到此消息,工作空間檔案可能已損壞。
      工作空間檔案備份儲存在 <workspace folder>/.mcreator/workspaceBackups/

      訊息\: +dialog.workspace.is_not_valid_title=工作空間開啟失敗 +dialog.workspace.unknown_generator_message=該工作空間使用不支援的生成器類型\:{0}
      為該工作空間選擇一個支援的生成器。 dialog.workspace.unknown_generator_title=不支援的生成器 action.check_for_updates=檢查更新 action.check_for_plugin_updates=檢查插件更新 @@ -1742,33 +1796,33 @@ action.show_data_list.particle=粒子效果 ID 清單 action.show_data_list.sound=音效清單 action.show_data_list.burn_time=物品燃燒時間清單 action.show_data_list.vanilla_loot_table=原版戰利品表 -action.about=關於MCreator +action.about=關於 MCreator dialog.about.option.website=網站 dialog.about.option.support=支援 dialog.about.option.eula=許可協議 dialog.about.option.third_party_licenses=第三方授權協議 dialog.about.option.donate=捐贈 -dialog.about.message=MCreator {0}
      完整版為\:{1}
      最新版為\:{2}

      工作室元素格式版本為\:{3}

      作業系統架構為\:{4}-位作業系統 ({5})
      MCreato r自帶的 Java 虛擬機器架構為\:{6}-位 Java 虛擬機器

      由 Pylo 和社群貢獻者開發。
      由 Pylo 主管並維護(https\://www.pylo.co)。

      點擊下面閱讀 MCreator 和第三方許可協議


      -dialog.about.title=關於MCreator -dialog.about.third_party.message=第三方授權協議書位於MCreator安裝路徑內的 license 資料夾
      中。 +dialog.about.message=MCreator {0}
      完整版為\:{1}
      最新版為\:{2}

      工作空間元素格式版本為\:{3}

      作業系統架構為\:{4}-位作業系統 ({5})
      MCreato r自帶的 Java 虛擬機器架構為\:{6}-位 Java 虛擬機器

      由 Pylo 和社群貢獻者開發。
      由 Pylo 主管並維護(https\://www.pylo.co)。

      點擊下面閱讀 MCreator 和第三方許可協議


      +dialog.about.title=關於 MCreator +dialog.about.third_party.message=第三方授權協議位於 MCreator 安裝路徑內的 license 資料夾
      中。 dialog.about.third_party.title=第三方授權協議 -dialog.about.eula.title=MCreator使用者授權協議書 +dialog.about.eula.title=MCreator 使用者授權協議書 action.keyboard_shortcuts=鍵盤快速鍵 action.knowledge_base=知識庫 action.donate=捐贈 action.procedure.enter_procedure_name=輸入新的函式名稱\: action.procedure.new_procedure_dialog_title=新增函式 -action.procedure.create_procedure=新增函式 -action.procedure.match_dependencies=僅顯示與提供的數據依賴項匹配的函式。
      你可以通過創建新的函式元素來添加新的函式。 +action.procedure.create_procedure=新建函式 +action.procedure.match_dependencies=僅顯示與提供的數據依賴項匹配的函式。
      你可以透過建立新的函式元素來添加新的函式。 action.procedure.missing_dependencies=- 缺少依賴項 minmaxspinner.min=最小值\: minmaxspinner.max=最大値\: -elementgui.common.texture=材質 +elementgui.common.texture=紋理 elementgui.common.add_bounding_box=新增碰撞箱 elementgui.common.gen_from_block_model=從方塊模型生成 elementgui.common.gen_from_block_model_failed.message=無法為所選的JSON模型生成碰撞箱!
      請確保你使用的模型是一個有效的Minecraft JSON模型。 elementgui.common.gen_from_block_model_failed.title=損壞的模型 -elementgui.common.bounding_box_entries=碰撞箱條目 +elementgui.common.bounding_box_entries=碰撞箱項 elementgui.common.custom_bounding_box=啟用自訂碰撞箱 elementgui.common.disable_offset=停用將方塊模型偏移量應用於碰撞箱\:
      如果"隨機模型偏移量"不為「無(NONE)」,則適用。 elementgui.common.subtract=減去 @@ -1825,7 +1879,7 @@ elementgui.common.event_on_block_hit_by_projectile=方塊被拋射物擊中時 elementgui.common.event_is_bonemeal_target=骨粉可用在這個方塊上時 elementgui.common.event_bonemeal_success_condition=骨粉使用成功的條件 elementgui.common.event_on_bonemeal_success=骨粉成功使用時 -elementgui.common.tint_type=色調類型\:
      支援類型\: 十字形、單一材質、草地、有色調的JSON模型 +elementgui.common.tint_type=色調類型\:
      支援類型\: 十字形、單一紋理、草地、有色調的JSON模型 elementgui.common.include=包含 elementgui.common.exclude=排除 elementgui.common.is_bonemealable=此方塊可用骨粉成長? @@ -1844,7 +1898,7 @@ elementgui.advancement.reward_xp=經驗值獎勵\:
      在玩家完 elementgui.advancement.reward_functions=執行的函數\:
      在玩家完成進度時執行 elementgui.advancement.reward_loot_tables=戰利品表獎勵\:
      在玩家完成進度時給予 elementgui.advancement.reward_recipes=配方獎勵\:
      進度完成時要解鎖的配方清單 -elementgui.advancement.display_paramters=進度顯示參數 +elementgui.advancement.display_paramters=進度顯示引數 elementgui.advancement.logic=進度邏輯 elementgui.advancement.cant_be_empty=進度名稱不能為空 elementgui.advancement.must_have_description=進度必須有描述 @@ -1870,23 +1924,23 @@ elementgui.armor.part_leg_left=左腿 elementgui.armor.part_leg_right=右腿 elementgui.armor.part_boot_left=左脚 elementgui.armor.part_boot_right=右脚 -elementgui.armor.texture=盔甲材質\: +elementgui.armor.texture=盔甲紋理\: elementgui.armor.helmet_name=遊戲內顯示的頭盔名稱\: elementgui.armor.chestplate_name=遊戲內顯示的胸甲名稱\: elementgui.armor.leggings_name=遊戲內顯示的護腿名稱\: elementgui.armor.boots_name=遊戲內顯示的靴子名稱\: -elementgui.armor.layer_texture=盔甲層材質 \:
      如果清單為空,則需要首先匯入或創建盔甲材質 +elementgui.armor.layer_texture=盔甲層紋理 \:
      如果清單為空,則需要首先匯入或建立盔甲紋理 elementgui.armor.equip_sound=盔甲裝備音效\: elementgui.armor.max_damage_absorption=盔甲吸收的最大傷害值/耐久性\: elementgui.armor.damage_values=已消耗的耐久值 (頭盔, 胸甲, 護腿, 靴子)\: -elementgui.armor.toughness=盔甲韌性(預設為 0.0, 鑽石材質為 2.0)\: +elementgui.armor.toughness=盔甲韌性(預設為 0.0, 鑽石紋理為 2.0)\: elementgui.armor.knockback_resistance=擊退抵抗力(預設為 0.0,獄髓為 0.1)\: -elementgui.armor.need_texture=啟用盔甲部件需要材質 +elementgui.armor.need_texture=啟用盔甲部件需要紋理 elementgui.armor.boots_need_name=該靴子需要一個名稱 elementgui.armor.chestplate_needs_name=胸甲需要一個名稱 elementgui.armor.leggings_need_name=該護腿需要一個名稱 elementgui.armor.helmet_needs_name=該頭盔需要一個名稱 -elementgui.armor.armor_needs_texture=該盔甲需要材質 +elementgui.armor.armor_needs_texture=該盔甲需要紋理 elementgui.armor.helmet={0} 頭盔 elementgui.armor.chestplate={0} 胸甲 elementgui.armor.leggings={0} 護腿 @@ -1982,15 +2036,15 @@ elementgui.block.texture_place_bottom_main=底部/主要部分 elementgui.block.texture_place_front_side=正面/側面 elementgui.block.texture_place_right=右側 elementgui.block.texture_place_back=背面 -elementgui.block.block_base_item_texture=方塊基礎(模型和行為)和可選材質 +elementgui.block.block_base_item_texture=方塊基礎(模型和行為)和可選紋理 elementgui.block.block_base=方塊基礎\:
      大多數方塊應保留預設值 -elementgui.block.item_texture=方塊物品材質\:
      用於物品欄中的方塊和在手上渲染的可選材質 -elementgui.block.particle_texture=方塊粒子材質\:
      方塊破碎粒子的可選材質 -elementgui.block.block_textures=方塊材質 -elementgui.block.transparency_type=材質透明度類型\: +elementgui.block.item_texture=方塊物品紋理\:
      用於物品欄中的方塊和在手上渲染的可選紋理 +elementgui.block.particle_texture=方塊粒子紋理\:
      方塊破碎粒子的可選紋理 +elementgui.block.block_textures=方塊紋理 +elementgui.block.transparency_type=紋理透明度類型\: elementgui.block.has_trasparency=如果你的方塊具有透明部分,請勾選此選項\: elementgui.block.connected_sides=勾選此項以啟用連接方塊側面\:
      僅應與透明方塊一起使用 -elementgui.block.fluid_overlay=勾選此選項以隱藏水下時的流體材質\: +elementgui.block.fluid_overlay=勾選此選項以隱藏水下時的流體紋理\: elementgui.block.model=方塊模型\:
      支援\:內建、JSON、OBJ elementgui.block.rotation_mode=方塊旋轉模式\:
      選擇此方塊的旋轉方式 elementgui.block.enable_pitch=X軸旋轉嗎?
      僅適用於水平旋轉方塊 @@ -2005,7 +2059,7 @@ elementgui.block.bounding_block_min_z=最小 Z 座標\: elementgui.block.bounding_block_max_z=最大 Z 座標\: elementgui.block.render_type=渲染類型和旋轉(適用於無基礎的方塊) elementgui.block.transparency=透明度 -elementgui.block.material=材質\: +elementgui.block.material=材料\: elementgui.block.slipperiness=滑膩度\:
      正常滑膩度為0.6。 elementgui.block.speed_factor=速度係數\:
      正常速度係數為1.0。 elementgui.block.jump_factor=跳轉係數\:
      正常跳轉係數為1.0。 @@ -2062,7 +2116,16 @@ elementgui.command.name=指令名稱 (不需要輸入 /)\: elementgui.command.type=類型\: elementgui.command.permission_level=執行權限級別\:
      執行指令的最低級別 elementgui.command.warning.empty_string=指令不能為空的字串 -elementgui.command.arguments=指令參數和操作生成器 +elementgui.command.arguments=指令引數和操作生成器 +elementgui.damagetype.damage_properties=傷害屬性 +elementgui.damagetype.exhaustion=降低的飽食度值\:
      預設值為 0.1 +elementgui.damagetype.scaling=傷害量隨難度而增加嗎? +elementgui.damagetype.effects=受傷音效\: +elementgui.damagetype.death_messages=死亡消息\: +elementgui.damagetype.normal_death_message=一般死亡消息\: +elementgui.damagetype.item_death_message=物品死亡消息\:
      當玩家被持有被命名物品殺死實體時 +elementgui.damagetype.player_death_message=額外死亡信息\:
      當玩家逃離實體時死亡時顯示。 +elementgui.damagetype.error_empty_death_message=死亡消息不能為空 elementgui.dimension.can_player_respawn=玩家可否在這裡重生 elementgui.dimension.has_fog=啟用霧氣 elementgui.dimension.is_dark=停用環境光源 @@ -2083,7 +2146,7 @@ elementgui.dimension.biomes_in=在這個維度上的生態域\: elementgui.dimension.main_filler_block=主要填充方塊\:
      主世界、地獄、終界 elementgui.dimension.fluid_block=流體方塊\:
      主世界、地獄、終界 elementgui.dimension.sleep_result=嘗試睡眠的結果\: -elementgui.dimension.fog_air_color=天空/迷霧替代\:
      保留預設值,以根據不同Minecraft版本進行預設處理 +elementgui.dimension.fog_air_color=天空/霧色彩覆蓋方式\:
      留空使用Minecraft預設方式處理 elementgui.dimension.enable_dimension_portal=啟用維度傳送門\: elementgui.dimension.portal_frame_block=傳送門框架方塊\: elementgui.dimension.portal_particles=傳送門方塊發出的粒子為\: @@ -2092,8 +2155,8 @@ elementgui.dimension.portal_luminance=傳送門方塊發出的亮度為\: elementgui.dimension.enable_new_igniter=啟用傳送門激活器 elementgui.dimension.portal_igniter_name=傳送門激活物品名稱\: elementgui.dimension.portal_igniter_tab=傳送門激活器選項卡\: -elementgui.dimension.portal_igniter_texture=傳送門激活器材質\: -elementgui.dimension.portal_block_texture=傳送門方塊材質\: +elementgui.dimension.portal_igniter_texture=傳送門激活器紋理\: +elementgui.dimension.portal_block_texture=傳送門方塊紋理\: elementgui.dimension.error_portal_igniter_needs_name=該傳送門激活器需要一個名稱 elementgui.dimension.error_select_biome=請至少選擇一個生態域 elementgui.dimension.page_portal=傳送門 @@ -2107,8 +2170,8 @@ elementgui.enchantment.curse=此附魔是否為詛咒性附魔? elementgui.enchantment.allowed_on_books=此附魔是否能附在書上? elementgui.enchantment.can_generate_in_loot_tables=這個附魔可以在戰利品池裡出現嗎? elementgui.enchantment.can_villager_trade=這個附魔可以與村民交易取得嗎? -elementgui.enchantment.compatible_enchantments=可以同時擁有以下附魔\:
      留空以允許與任何附魔結合 -elementgui.enchantment.can_apply_to=適用物品\:
      留空以允許附在所有適用物品上 +elementgui.enchantment.compatible_enchantments=可共存的附魔\:
      留空(在包含和不含模式下工作)以讓你的附魔與所有附魔可共存 +elementgui.enchantment.can_apply_to=可套用至\:
      留空(在包含和不含模式下工作)以允許附魔套用到所有適用的物品 elementgui.enchantment.needs_name=該附魔需要一個名稱 elementgui.gamerule.name=內部名稱\: elementgui.gamerule.display_name=遊戲規則名稱\:
      該名稱將用於遊戲規則設定介面。 @@ -2135,8 +2198,8 @@ elementgui.fluid.tint_type=著色類型\: elementgui.fluid.flow_strength=流動強度\: elementgui.fluid.when_added=方塊放置時 elementgui.fluid.when_entity_collides=當生物/玩家碰撞方塊時 -elementgui.fluid.texture_still=靜止的材質 -elementgui.fluid.texture_flowing=流動的材質 +elementgui.fluid.texture_still=靜止的紋理 +elementgui.fluid.texture_flowing=流動的紋理 elementgui.fluid.modded_properties=模组流體屬性 elementgui.fluid.luminosity=亮度\:
      發出的光照等級 elementgui.fluid.density=密度\:
      對於負值而言,液體會被視為一種氣體。 @@ -2147,7 +2210,7 @@ elementgui.fluid.generate_bucket_label=自動生成流體桶? elementgui.fluid.error_fluid_needs_name=流體需要一個名稱 elementgui.fluid.error_bucket_needs_name=液體桶需要一個名稱 elementgui.fluid.bucket_name_in_gui=遊戲內顯示的桶名稱\: -elementgui.fluid.bucket_texture=桶材質\:
      留空以使用自動生成的材質 +elementgui.fluid.bucket_texture=桶紋理\:
      留空以使用自動生成的紋理 elementgui.fluid.empty_sound=桶倒空的音效\: elementgui.fluid.event_flow_condition=附加流動條件 elementgui.fluid.event_before_replacing_block=在替換方塊之前 @@ -2190,7 +2253,7 @@ elementgui.gui.inventory_offset=物品欄偏移\: elementgui.gui.overlay_properties=疊加層屬性 elementgui.gui.overlay_target=疊加層目標\: elementgui.gui.rendering_priority=渲染優先級\: -elementgui.gui.import_overlay_base_texture=點擊此按鈕匯入疊加層基本材質 +elementgui.gui.import_overlay_base_texture=點擊此按鈕匯入疊加層基本紋理 elementgui.gui.overlay_base_texture=基礎纹理\: elementgui.item_extension.item=物品擴展源\: elementgui.item_extension.fuel_properties=作為燃料 @@ -2204,15 +2267,15 @@ elementgui.item_extension.has_dispense_behavior=啟用自訂發射器行為 elementgui.item_extension.dispense_success_condition=成功發射的條件 elementgui.item_extension.dispense_result_itemstack=當嘗試發射時 elementgui.item_extension.dispense_result_itemstack.default=(成功則從物品棧減少一個物品) -elementgui.item.texture=物品材質 +elementgui.item.texture=物品紋理 elementgui.item.destroy_speed=物品摧毀速度\: elementgui.item.can_destroy_any_block=可以摧毀任何方塊? -elementgui.item.container_item=合成後,輸入的物品是否保留在工作台的方格中? +elementgui.item.container_item=合成後,輸入的物品是否保留在合成方格中? elementgui.item.use_duration=物品使用時長\:
      可食用的食物必須使用非負值 -elementgui.item.container_item_damage=合成時以減物品耐久代替消耗物品
      確保啟用「留在工作台的方格中」並且該物品可損壞 -elementgui.item.number_of_uses=物品使用次數/耐久性(設定為0以禁止損壞)\:
      如果要製作工具,請創建工具 +elementgui.item.container_item_damage=合成時以減少物品耐久代替消耗物品
      確保啟用「保留在合成方格中」並且該物品可損壞 +elementgui.item.number_of_uses=物品使用次數/耐久性(設定為0以禁止損壞)\:
      如果要製作工具,請建立工具 elementgui.item.is_immune_to_fire=該物品能防火嗎? -elementgui.item.recipe_remainder=合成配方剩餘物
      確保啟用「留在工作台的方格中」。留空以使用當前物品。 +elementgui.item.recipe_remainder=合成配方剩餘物
      確保啟用保留在合成方格中。留空以使用當前物品。 elementgui.item.damage_vs_entity=對生物/動物的傷害(選中以啟用)\:
      近戰傷害 elementgui.item.glowing_effect=物品有發光效果嗎 elementgui.item.item_3d_model=物品 3D 模型 @@ -2240,7 +2303,7 @@ elementgui.item.custom_properties.add.input=屬性名稱\: elementgui.item.custom_property.name=屬性名稱\: elementgui.item.custom_property.value=属性值提供器 elementgui.item.custom_property.remove=移除此屬性 -elementgui.item.custom_states.title=物品狀態
      使用和條件匹配的最高值狀態將被使用。 如果沒有匹配,將使用預設材質和模型 +elementgui.item.custom_states.title=物品狀態
      使用和條件匹配的最高值狀態將被使用。 如果沒有匹配,將使用預設紋理和模型 elementgui.item.custom_states.add=新增自訂狀態 elementgui.item.custom_state.model=物品模型\: elementgui.item.custom_state.remove=移除此狀態 @@ -2261,9 +2324,11 @@ elementgui.keybind.key_binding_category=按鍵對應分類在地化鍵名\: elementgui.keybind.key_procedure_triggers=按鍵對應函式觸發器 elementgui.keybind.error_key_needs_name=該按鍵對應需要一個名稱 elementgui.keybind.error_key_category_needs_name=按鍵綁定分類需要一個名稱 +elementgui.living_entity.visual_scale=模型外觀大小\: +elementgui.living_entity.bounding_box_scale=碰撞箱大小\: elementgui.living_entity.condition_solid_bounding_box=是否讓碰撞箱像固體一樣? elementgui.living_entity.disable_collisions=停用實體擠壓(碰撞箱) -elementgui.living_entity.has_ai=啟用AI
      使用AI時,請確保在下面定義了一些AI任務 +elementgui.living_entity.has_ai=啟用 AI
      請確保在下面定義了一些 AI 任務 elementgui.living_entity.immune_fire=火 elementgui.living_entity.immune_arrows=箭矢 elementgui.living_entity.immune_fall_damage=摔落傷害 @@ -2285,9 +2350,9 @@ elementgui.living_entity.spawn_dungeons=在地牢中生成 elementgui.living_entity.is_rideable=可騎乘 elementgui.living_entity.control_forward=向前移動控制 elementgui.living_entity.control_strafe=左右移動控制 -elementgui.living_entity.is_breedable=將此實體設定為動物,餵養的物品為\:
      如果勾選,實體基礎和行為類型將被忽略 +elementgui.living_entity.is_breedable=使實體為動物,繁殖物品\:
      實體基礎和行為類型將被忽略。 elementgui.living_entity.is_tameable=可馴服 -elementgui.living_entity.is_ranged=使實體使用物品、攻擊間隔和半徑進行遠程攻擊\:
      至少添加一個 AI 任務來定義攻擊目標。
      如果選擇「預設物品」(Default item),則選擇投擲物或留空以使用箭矢 +elementgui.living_entity.is_ranged=啟用使用物品進行遠程攻擊,攻擊間隔和半徑\:
      至少添加一個 AI 以定義攻擊目標的任務。
      如果選擇了 Default Item,則選擇投射物或留空以使用箭。 elementgui.living_entity.event_struck_by_lightning=該實體被閃電擊中時 elementgui.living_entity.event_mob_falls=該實體掉落時 elementgui.living_entity.event_mob_dies=該實體死亡時 @@ -2300,9 +2365,10 @@ elementgui.living_entity.event_initial_spawn=在初始實體生成時 elementgui.living_entity.condition_natural_spawn=實體的自然生成條件 elementgui.living_entity.condition_is_model_transparent=實體模型是否透明? elementgui.living_entity.condition_is_shaking=實體模型在抖動嗎? -elementgui.living_entity.behaviour=行為特徵(怪物具有攻擊性,动物具有被動性)\: +elementgui.living_entity.behaviour=生物行為 (Mob 為敵對,Creature 為被動)\: elementgui.living_entity.creature_type=生物類型(定義一些特殊的實體屬性)\: elementgui.living_entity.drop_health_xp_amount=掉落物數量(可選)、生命值、經驗數量\: +elementgui.living_entity.model_layers=模型圖層清單 elementgui.living_entity.follow_range_tracking_range=跟隨範圍,追蹤範圍\: elementgui.living_entity.attack_strenght_armor_value_knockback=攻擊力,盔甲保護能力,攻擊擊退距離,擊退抗性\: elementgui.living_entity.movement_speed_step_height=移動速度,可行走高度\: @@ -2311,11 +2377,16 @@ elementgui.living_entity.is_immune_to=實體對以下傷害免疫\: elementgui.living_entity.ridable=勾選以使玩家可騎上該實體
      你也可以選擇啟用对該實體的控制 elementgui.living_entity.water_mob=如果該實體為水生實體,勾選此選項\:
      注意\:你仍然需要AI任務才能使生物使用這些屬性 elementgui.living_entity.flying_mob=如果該實體為飛行實體,勾選此選項\:
      注意\:你仍然需要AI任務才能使生物使用這些屬性 +elementgui.living_entity.add_model_layer=新增模型圖層 +elementgui.living_entity.layer_model=模型\: +elementgui.living_entity.layer_texture=紋理\: +elementgui.living_entity.layer_should_glow=讓紋理發光 +elementgui.living_entity.layer_display_condition=顯示條件 +elementgui.living_entity.layer_needs_texture=模型圖層必須有一個紋理 elementgui.living_entity.name=實體名稱\: elementgui.living_entity.entity_model=實體模型\:
      支援類型\:JAVA -elementgui.living_entity.entity_model_import=點擊此處匯入實體模型材質 -elementgui.living_entity.texture=實體的材質\:
      材質需要合適的模型(例如,玩家的皮膚材質不是兩足動物模型的材質) -elementgui.living_entity.glow_texture=實體的發光材質(可選)\:
      發光材質需要合適的模型,圖片亮度決定發光亮度 +elementgui.living_entity.entity_model_import=點擊此處匯入實體模型紋理 +elementgui.living_entity.texture=實體的紋理\:
      紋理需要合適的模型(例如,玩家的皮膚紋理不是兩足動物模型的紋理) elementgui.living_entity.bounding_box=實體模型碰撞箱\:
      寬度/深度、高度、陰影大小、騎乘實體,Y軸偏移量 elementgui.living_entity.spawn_egg_options=生怪蛋選項\:
      啟用、底色、斑點顏色、創造模式選項卡 elementgui.living_entity.mob_boss=勾選以顯示Boss血量\: @@ -2324,8 +2395,8 @@ elementgui.living_entity.sound=空閒音效\: elementgui.living_entity.step_sound=移動音效\:
      留空為踏在方塊時的腳步聲 elementgui.living_entity.hurt_sound=受傷音效\: elementgui.living_entity.death_sound=死亡音效\: -elementgui.living_entity.mob_base=實體基礎(不推薦使用)\:
      這個選項會覆蓋一些參數! -elementgui.living_entity.ai_parameters=AI 參數 +elementgui.living_entity.mob_base=實體基礎(不推薦使用)\:
      這個選項會覆蓋一些引數! +elementgui.living_entity.ai_parameters=AI 引數 elementgui.living_entity.ai_tasks=實體AI任務/目標清單生成器 elementgui.living_entity.enable_mob_spawning=啟用實體生成\: elementgui.living_entity.despawn_idle=閒置時清除\: @@ -2337,14 +2408,24 @@ elementgui.living_entity.does_spawn_in_dungeons=該實體會在地牢中生成 elementgui.living_entity.spawn_general_condition=自訂生成條件\:
      使用自訂生成條件時,生成類型條件將會被其覆蓋,
      但仍會使用生成類型分組和權重。
      elementgui.living_entity.bind_to_gui=將此實體綁定到物品欄\:
      設為空以停用物品欄(在大多數情況下需要這樣做)
      elementgui.living_entity.inventory_size=物品欄大小(存儲槽數量)\:
      將此值設為物品欄中的最大存儲槽ID+ 1 -elementgui.living_entity.error_entity_model_needs_texture=該實體模型需要一個材質 +elementgui.living_entity.entity_data=實體資料存取器
      在客戶端和私服端間同步 +elementgui.living_entity.entity_data_entries=資料項 +elementgui.living_entity.entity_data_entries.name=名稱\: +elementgui.living_entity.entity_data_entries.type=類型\: +elementgui.living_entity.entity_data_entries.default_value=預設值\: +elementgui.living_entity.entity_data_entries.add_entry=新增項 +elementgui.living_entity.entity_data_entries.add_entry.name=資料項名稱\: +elementgui.living_entity.entity_data_entries.add_entry.type=資料項類型\: +elementgui.living_entity.entity_data_entries.add_entry.title=新增資料項 +elementgui.living_entity.error_entity_model_needs_texture=該實體模型需要一個紋理 elementgui.living_entity.error_entity_needs_name=該實體需要一個名稱 elementgui.living_entity.page_visual=外觀 +elementgui.living_entity.page_model_layers=模型圖層 elementgui.living_entity.page_sound=音效 -elementgui.living_entity.page_behaviour=行為 +elementgui.living_entity.page_behaviour=生物行為 +elementgui.living_entity.page_entity_data=已同步的資料 elementgui.living_entity.page_ai_and_goals=AI 和目標 elementgui.living_entity.page_spawning=生成 -elementgui.loot_table.name=戰利品表 elementgui.loot_table.registry_name=戰利品表的註冊名稱\:
      使用前綴如 block/ 來指定類別。 elementgui.loot_table.namespace=戰利品表命名空間\:
      使用minecraft命名空間來改變原版戰利品表 elementgui.loot_table.type=戰利品表類型\: @@ -2361,7 +2442,7 @@ elementgui.loot_table.entry_item=抽取物品清單\: elementgui.loot_table.entry_weight=抽取清單權重\: elementgui.loot_table.count=數量\: elementgui.loot_table.silk_touch_mode=絲綢之觸模式\: -elementgui.loot_table.enchantments_level=該附魔在物品條目中的等級\: +elementgui.loot_table.enchantments_level=該附魔在物品項中的等級\: elementgui.music_disc.event_entity_hitwith=當實體被物品擊中時 elementgui.music_disc.event_inventory=當物品出現在物品欄時 elementgui.music_disc.event_inhand=當物品出現在手中時 @@ -2371,7 +2452,7 @@ elementgui.music_disc.disc_description=唱片描述\: elementgui.music_disc.disc_length=音樂長度(刻)\: elementgui.music_disc.disc_analog_output=唱片機被紅石比較器檢測時發出的紅石信號強度 elementgui.music_disc.has_glowing_effect=是否有發光效果? -elementgui.music_disc.disc_texture=唱片材質 +elementgui.music_disc.disc_texture=唱片紋理 elementgui.music_disc.error_disc_needs_name=該唱片需要一個名稱 elementgui.music_disc.error_disc_needs_description=該唱片需要一個描述\: elementgui.music_disc.error_needs_sound=選擇音效 @@ -2385,7 +2466,7 @@ elementgui.painting.painting_needs_author=畫需要一個作者 elementgui.particle.angular_acceleration=粒子角加速度\:
      順時針方向,單位為弧度/刻^2 elementgui.particle.angular_velocity=粒子角速度\:
      順時針,單位是弧度/刻 elementgui.particle.expiry_condition=附加粒子消失條件 -elementgui.particle.animated_texture=對此粒子設定為動畫化?
      僅適用於平鋪材質 +elementgui.particle.animated_texture=對此粒子設定為動畫化?
      僅適用於平鋪紋理 elementgui.particle.render_type=粒子渲染類型\: elementgui.particle.visual_scale=粒子視覺大小\: elementgui.particle.bbox=粒子碰撞箱的寬度和高度\: @@ -2407,9 +2488,9 @@ elementgui.plant.event_on_entity_collides=當生物/玩家碰撞植物時 elementgui.plant.event_on_right_clicked=對植物右鍵點擊時 elementgui.plant.condition_additional_placing=附加的放置/生長條件 elementgui.plant.block_model=植物模型\:
      選擇要使用的植物模型。支援的檔案\:JSON,OBJ -elementgui.plant.item_texture=植物物品材質\:
      用於物品欄中的植物和在手上渲染的可選材質 -elementgui.plant.particle_texture=植物粒子材質 \:
      植物摧毀粒子的可選材質 -elementgui.plant.textures_and_model=植物材質、模型、可選材質、著色類型、特殊信息 +elementgui.plant.item_texture=植物物品紋理\:
      用於物品欄中的植物和在手上渲染的可選紋理 +elementgui.plant.particle_texture=植物粒子紋理 \:
      植物摧毀粒子的可選紋理 +elementgui.plant.textures_and_model=植物紋理、模型、可選紋理、著色類型、特殊信息 elementgui.plant.texture_place_top_main=頂部/主面 elementgui.plant.texture_place_bottom=底部 elementgui.plant.is_item_tinted=植物物品是否著色?
      如果勾選,則背包中的植物將著色。 @@ -2428,9 +2509,9 @@ elementgui.plant.plant_is_replaceable=該植物是否可以替換? elementgui.plant.suspicious_stew_effect=可疑的燉湯效果 elementgui.plant.suspicious_stew_duration=可疑的燉湯效果長度 elementgui.plant.has_tile_entity=是否為方塊實體?
      僅在你想要在這個植物中使用NBT標簽時啟用 -elementgui.plant.gen_chunk_count=區塊的生成頻率\:
      該參數決定了每個區塊的生成數 +elementgui.plant.gen_chunk_count=區塊的生成頻率\:
      該引數決定了每個區塊的生成數 elementgui.plant.generate_at_any_height=在任意高度生成植物\: -elementgui.plant.patch_size=區塊大小\:
      此參數決定每個區塊的植物數量 +elementgui.plant.patch_size=區塊大小\:
      此引數決定每個區塊的植物數量 elementgui.plant.generate_feature=勾選此項以在世界上生成植物\: elementgui.plant.error_plant_needs_name=該植物需要一個名稱 elementgui.plant.page_visual_and_type=視覺和類型 @@ -2470,8 +2551,8 @@ elementgui.procedure.can_specify_result_trigger=
      僅限客戶端 elementgui.procedure.server_side_trigger=
      僅限伺服端 elementgui.procedure.global_trigger_unsupported=你所選的全域觸發器不支援所選的生成器。 它將被忽略。 -elementgui.procedure.global_trigger_not_activated=你所選的全域觸發器需要在工作室設定中啟用 {0},否則當前生成器不支援 -elementgui.procedure.global_trigger_tick_based={0} 全域觸發器是基於刻事件的。請記住,每次刻執行太復雜或要求太高的程式會嚴重影響遊戲性能。 +elementgui.procedure.global_trigger_not_activated=你所選的全域觸發器需要在工作空間設定中啟用 {0},否則當前生成器不支援 +elementgui.procedure.global_trigger_tick_based={0} 全域觸發器是基於刻事件的。注意\:每次刻執行太復雜或要求太高的程式會嚴重影響遊戲性能。 elementgui.procedure.global_trigger_does_not_exist=你的函式使用了不存在的全域觸發器 elementgui.procedure.variable_name_clashes_with_dep=變數 “{0}” 的名稱與依賴項的名稱衝突 elementgui.procedure.return_type=返回類型 @@ -2481,21 +2562,21 @@ elementgui.procedure.confirm_delete_var_msg=你確定要刪除此變數? elementgui.procedure.required_dependencies=必需的依賴項 elementgui.procedure.provided_dependencies=\ 提供的依賴項 elementgui.procedure.external_trigger_does_not_provide_all_dependencies=你所選的外部觸發器無法提供
      函式需要的所有依賴項! -elementgui.projectile.power=預設投射物的速度:
      1 就像弓一樣 +elementgui.projectile.power=預設投射物的速度\:
      1 就像弓一樣 elementgui.projectile.damage=預設投射物造成的傷害\: elementgui.projectile.knockback=預設投射物的擊退距離\: elementgui.projectile.show_particles=投射物在飛行時會生成粒子嗎? elementgui.projectile.ignite_fire=投射物會在擊中實體時著火嗎? -elementgui.projectile.item_texture=投射物所需的物品:
      如果使用預設模型,該物品將使用投射物的模型 -elementgui.projectile.model=投射物模型\:
      支援類型:JAVA -elementgui.projectile.model_tooltip=點擊此處匯入遠程物品模型材質 -elementgui.projectile.model_texture=投射物的模型材質\:
      僅與自訂模型使用 +elementgui.projectile.item_texture=投射物所需的物品\:
      如果使用預設模型,該物品將使用投射物的模型 +elementgui.projectile.model=投射物模型\:
      支援類型\:JAVA +elementgui.projectile.model_tooltip=點擊此處匯入遠程物品模型紋理 +elementgui.projectile.model_texture=投射物的模型紋理\:
      僅與自訂模型使用 elementgui.projectile.action_sound=投射物投射時的聲音\: elementgui.projectile.event_hits_block=當投射物射中方塊時 elementgui.projectile.event_hits_player=當投射物射中玩家時 elementgui.projectile.event_hits_entity=當投射物射中生物時 elementgui.projectile.event_flying_tick=當投射物飛行時,每刻執行 -elementgui.projectile.error_custom_model_needs_texture=自訂投射物必須有材質 +elementgui.projectile.error_custom_model_needs_texture=自訂投射物必須有紋理 elementgui.recipe.is_shapeless=是否為無序合成? elementgui.recipe.definition=配方定義 elementgui.recipe.crafting_book_category=合成手冊類別\: @@ -2516,19 +2597,19 @@ elementgui.recipe.error_campfire_no_ingredient_and_result=營火配方需要定 elementgui.recipe.error_smithing_no_ingredient_addition_and_result=鍛造配方需要定義一個添加、輸入和輸出 (空氣不計入) elementgui.recipe.error_brewing_no_input_ingredient_and_result=釀造配方需要定義一個材料、輸入和輸出 (空氣不計入) elementgui.structuregen.event_structure_instance_generated=結構在存檔生成時 -elementgui.structuregen.import_tooltip=點擊此處匯入 NBT 結構檔案
      使用工作室選項卡中的結構部分可取得更多選項。 -elementgui.structuregen.select_tooltip=要生成的結構\:
      有關更多結構匯入選項,請使用工作室選項卡的結構部分。 +elementgui.structuregen.import_tooltip=點擊此處匯入 NBT 結構檔案
      使用工作空間選項卡中的結構部分可取得更多選項。 +elementgui.structuregen.select_tooltip=要生成的結構\:
      有關更多結構匯入選項,請使用在工作空間選項卡的結構部分 elementgui.structuregen.ignore_blocks=生成時忽略的方塊 elementgui.structuregen.surface_detection_type=地面侦测類型\: elementgui.structuregen.terrain_adaptation=對地形的適應類型\: elementgui.structuregen.generation_stage=生成階段\: -elementgui.structuregen.biomes_to_spawn=將會生成結構的生態域: +elementgui.structuregen.biomes_to_spawn=將會生成結構的生態域\: elementgui.structuregen.projection=結構高度適應地形方式\: elementgui.structuregen.separation_spacing=區塊內結構分布方式\: -elementgui.structuregen.separation=最小距離: +elementgui.structuregen.separation=最小距離\: elementgui.structuregen.spacing=平均距離\: elementgui.structuregen.error_select_biomes=至少在將會生成結構的生態域中選擇一個生態域 -elementgui.structuregen.error_select_structure_spawn=你需要選擇一個由這個結構生成的結構才能繼續。 +elementgui.structuregen.error_select_structure_spawn=你需要選擇一個結構來生成 elementgui.tab.name=創造模式選項卡名稱\: elementgui.tab.icon=選項卡圖標\: elementgui.tab.search_bar=顯示搜索欄 @@ -2543,9 +2624,9 @@ elementgui.tool.event_entity_hit_with=當實體被工具擊中時 elementgui.tool.event_in_inventory_tick=當工具出現在物品欄時 elementgui.tool.event_in_hand_tick=當工具出現在手中時 elementgui.tool.event_swings=當實體揮動物品時 -elementgui.tool.texture=工具材質 +elementgui.tool.texture=工具紋理 elementgui.tool.tool_3d_model=工具 3D 模型 -elementgui.tool.shield_blocking_model=盾牌的格擋模型: +elementgui.tool.shield_blocking_model=盾牌的格擋模型\: elementgui.tool.type=類型\: elementgui.tool.harvest_level=收集等級\: elementgui.tool.efficiency=效率\: @@ -2554,21 +2635,21 @@ elementgui.tool.damage_vs_entity=對生物/動物的傷害(近戰傷害)\: elementgui.tool.usage_count=使用次數/耐久度\: elementgui.tool.blocks_affected=受影響的方塊\: elementgui.tool.is_immune_to_fire=該工具不受火的影響嗎? -elementgui.tool.stays_in_grid_when_crafting=合成後,輸入的物品是否保留在工作台的方格中? -elementgui.tool.damaged_on_crafting=合成介面修復
      確保啟用「留在工作台的方格中」並且該物品可損壞 +elementgui.tool.stays_in_grid_when_crafting=合成後,輸入的物品是否保留在合成方格中? +elementgui.tool.damaged_on_crafting=合成介面修復
      確保啟用保留在合成方格中並且該物品可損壞 elementgui.tool.needs_a_name=該工具需要一個名稱 elementgui.villager_profession.display_name=職業顯示名稱 elementgui.villager_profession.profession_block=職業的工作站點方塊\: elementgui.villager_profession.profession_block_validator=村民的工作站點方塊 elementgui.villager_profession.action_sound=村民的工作音效\: elementgui.villager_profession.hat=村民的帽子類型\: -elementgui.villager_profession.import_profession_texture=點擊此處匯入該村民的職業材質 -elementgui.villager_profession.import_zombified_profession_texture=點擊此處匯入該殭屍村民的職業材質 -elementgui.villager_profession.profession_texture=普通村民的職業材質 -elementgui.villager_profession.zombified_profession_texture=殭屍村民的職業材質 +elementgui.villager_profession.import_profession_texture=點擊此處匯入該村民的職業紋理 +elementgui.villager_profession.import_zombified_profession_texture=點擊此處匯入該殭屍村民的職業紋理 +elementgui.villager_profession.profession_texture=普通村民的職業紋理 +elementgui.villager_profession.zombified_profession_texture=殭屍村民的職業紋理 elementgui.villager_profession.profession_needs_display_name=村民的職業需要顯示名稱 -elementgui.villager_profession.profession_needs_texture=普通村民的職業需要材質 -elementgui.villager_profession.profession_needs_zombified_texture=殭屍村民的職業需要材質 +elementgui.villager_profession.profession_needs_texture=普通村民的職業需要紋理 +elementgui.villager_profession.profession_needs_zombified_texture=殭屍村民的職業需要紋理 elementgui.villager_trade.add_profession_trades=為某職業添加交易項 elementgui.villager_trade.add_entry=添加交易项 elementgui.villager_trade.remove_profession_trades=為職業移除交易項 @@ -2583,76 +2664,62 @@ elementgui.villager_trade.count_price_sale=數量\: elementgui.villager_trade.max_trades=交易上限\: elementgui.villager_trade.xp=村民所取得的經驗\: elementgui.villager_trade.price_multiplier=價格倍數\: -tab.workspace=工作室\: +tab.workspace=工作空間\: tab.console=控制台 tab.image_maker=圖片製作器 tab.animation_maker=動畫製作器 -tab.armor_image_maker=盔甲材質製作器 -workspace.statusbar.autosave_message=工作室已在 {0} 自動存儲 -workspace.resources.tab.textures=材質檔案 +tab.armor_image_maker=盔甲紋理製作器 +workspace.statusbar.autosave_message=工作空間已在 {0} 自動存儲 +workspace.resources.tab.textures=紋理檔案 workspace.resources.tab.3d_models=3D模型和貼圖 workspace.resources.tab.sounds=音效檔案 workspace.resources.tab.structures=結構 workspace.resources.tab.screenshots=螢幕截圖 -workspace.textures.new=創建新材質 -workspace.textures.import=匯入材質 -workspace.textures.edit_selected=編輯所選... -workspace.textures.duplicate_selected=復製所選... -workspace.textures.delete_selected=刪除所選 -workspace.textures.export_selected=匯出所選... -workspace.textures.confirm_deletion_message=確定要刪除此檔案嗎?
      注意\: 如果在其它地方使用此檔案,可能會遺失該材質! -workspace.textures.select_dupplicate_type=選擇要復製到的材質類型\: -workspace.textures.select_texture_type=這個檔案是什麼類型的材質? -workspace.textures.category.block=方塊的材質\: -workspace.textures.category.item=物品材質\: -workspace.textures.category.entity=實體材質\: -workspace.textures.category.effect=藥水效果材質\: -workspace.textures.category.particle=粒子材質\: -workspace.textures.category.screen=屏幕材質(進度,介面,疊加層...)\: -workspace.textures.category.armor=盔甲材質\: -workspace.textures.category.other=其它材質(畫,模組圖示...)\: +workspace.textures.new=建立新紋理 +workspace.textures.import=匯入紋理 +workspace.textures.edit_selected=編輯選中項... +workspace.textures.duplicate_selected=複製選中項... +workspace.textures.replace_selected=替換所選... +workspace.textures.export_selected=匯出選中項 +workspace.textures.select_dupplicate_type=選擇要復製到的紋理類型\: +workspace.textures.select_texture_type=這個檔案是什麼類型的紋理? +workspace.textures.category.block=方塊的紋理\: +workspace.textures.category.item=物品紋理\: +workspace.textures.category.entity=實體紋理\: +workspace.textures.category.effect=藥水效果紋理\: +workspace.textures.category.particle=粒子紋理\: +workspace.textures.category.screen=屏幕紋理(進度,介面,疊加層...)\: +workspace.textures.category.armor=盔甲紋理\: +workspace.textures.category.other=其它紋理(畫,模組圖示...)\: workspace.3dmodel.description={0}
      貼圖\:{1} workspace.3dmodels.edit_texture_mappings=編輯貼圖... -workspace.3dmodels.redefine_animations=重新定義模型動畫... -workspace.3dmodels.delete_selected=刪除所選 -workspace.3dmodels.delete_confirm_message=確定要刪除此模型嗎?
      注意\: 如果在任何地方使用此模型,可能會遺失纹理
      並且某些模組元素可能無法編譯! -workspace.3dmodels.regenerating_code=重新生成程式碼 -workspace.3dmodels.regenerating_entity_code=重新生成實體程式碼 -workspace.3dmodels.rebuilding_workspace=正在重建工作室 +workspace.3dmodels.redefine_animations=充定義模型動畫 workspace.3dmodels.animation_unsupported_title=不支援動畫 workspace.3dmodels.animation_unsupported_message=該模型不支援動畫! workspace.3dmodels.mappings_unsupported_title=沒有貼圖 workspace.3dmodels.mappings_unsupported_message=該模型不支援貼圖! -workspace.sounds.confirm_deletion_message=你確定要刪除此音效嗎?
      注意\:如果你在其它地方使用此音效,它將不再起作用! -workspace.sounds.edit_selected=編輯所選... +workspace.sounds.edit_selected=編輯選中項... workspace.sounds.play_selected=播放選中項 -workspace.sounds.delete_selected=刪除所選 workspace.sounds.category=音效類別\:{0} workspace.sounds.files=音效檔案\: {0} workspace.sounds.subtitle_and_category=副標題\:{0},音效類別\:{1} -workspace.screenshots.export_selected=匯出所選... -workspace.screenshots.delete_selected=刪除所選 +workspace.screenshots.export_selected=匯出選中項 workspace.screenshots.action_complete=操作完成 -workspace.screenshots.use_background_message=選定的螢幕截圖將在下次啟動時用作MCreator的背景。 -workspace.screenshots.use_as_background=使用選定的项目作為MCreator背景... -workspace.structure.confirm_deletion_message=確定要刪除選定的結構嗎?
      注意\:如果在其它地方使用它們,它們將不再生成! +workspace.screenshots.use_background_message=選定的螢幕截圖將在下次啟動時用作 MCreator 的背景。 +workspace.screenshots.use_as_background=使用選中項作為 MCreator 背景... workspace.variables.variable_name=變數名稱 workspace.variables.variable_type=變數類型 workspace.variables.variable_scope=變數範圍 workspace.variables.initial_value=初始值 workspace.variables.add_new=新增變數 -workspace.variables.remove_selected=刪除選定 workspace.variables.help=變數說明 workspace.variables.change_type=你確定要變更這個變數嗎?
      如果這個變數正在使用中,這個動作可能會導致編譯錯誤。
      如果你剛剛建立了它,變更它是完全可以的。 -workspace.variables.remove_variable_confirmation=你確定要刪除選定的變數嗎?
      如果這個變數正在使用中,這個操作可能會引起編譯錯誤。 -workspace.localization.add_entry=新增在地化條目 -workspace.localization.remove_selected=刪除所選 +workspace.localization.add_entry=新增在地化項 workspace.localization.export_to_csv=將當前語言匯出為 CSV workspace.localization.import_csv=將 CSV 匯入到當前語言 workspace.localization.key_name_title=鍵名稱 -workspace.localization.key_name_message=輸入自訂語言條目的語言資源鍵名稱\: +workspace.localization.key_name_message=輸入自訂語言項的語言資源鍵名稱\: workspace.localization.confirm_delete_map=你確定要刪除此在地化映射嗎? -workspace.localization.confirm_delete_entry=確定要刪除選定的條目嗎?
      注意\:如果它們仍在被使用中,綁定到它們的元素名稱將不起作用! workspace.localization.export_translation=匯出翻譯 workspace.localization.confirm_export=預設翻譯 (en_us) 無法匯出!
      在模組元素中定義為英文。 workspace.localization.warning_export=你無法將 CSV 匯入到預設翻譯 (en_us)!
      在模組元素中定義為英文。 @@ -2667,7 +2734,7 @@ menubar.code=程式碼 menubar.image=圖片 menubar.file=檔案 menubar.file.recent=最近開啟 -menubar.workspace=工作室\: +menubar.workspace=工作空間\: menubar.resources=資源 menubar.build_and_run=建置並執行 menubar.tools=工具 @@ -2682,24 +2749,24 @@ dialog.setup_workspace.step.importing_gradle=匯入 Gradle 專案中 dialog.setup_workspace.step.generating_base=生成基本源碼 dialog.setup_workspace.step.failed_gradle_caches=重新載入 Gradle 快取失敗 dialog.setup_workspace.step.failed_build_caches=建置快取失敗。原因\: -dialog.setup_workspace.step.workspace_setup_fail=工作室設定失敗

      MCreator 設定失敗。基於你的建議,嘗試修復你的錯誤並重新執行它。

      請檢查 https\://mcreator.net/support/knowledgerbase 取得修復安裝錯誤的提示。

      如果這是第一次看到此訊息,請先嘗試重啟設定。

      如果你可以修復錯誤(網路連接問題... ,你可以解決這個問題,然後點擊第一個按鈕
      後面的你可以解決這個問題。MCreator 將再次自動執行設定。你選擇將錯誤日誌復製到
      剪貼簿以便進一步檢查。 你可以關閉 MCreator 並在你認為你解決問題時再次執行它。 -dialog.setup_workspace.step.workspace_setup_fail_title=MCreator安裝失敗! +dialog.setup_workspace.step.workspace_setup_fail=工作空間設定失敗

      MCreator 設定失敗。基於你的建議,嘗試修復你的錯誤並重新執行它。

      請檢查 https\://mcreator.net/support/knowledgerbase 取得修復安裝錯誤的提示。

      如果這是第一次看到此訊息,請先嘗試重啟設定。

      如果你可以修復錯誤(網路連接問題... ,你可以解決這個問題,然後點擊第一個按鈕
      後面的你可以解決這個問題。MCreator 將再次自動執行設定。你選擇將錯誤日誌復製到
      剪貼簿以便進一步檢查。 你可以關閉 MCreator 並在你認為你解決問題時再次執行它。 +dialog.setup_workspace.step.workspace_setup_fail_title=MCreator 安裝失敗! dialog.setup_workspace.step.workspace_setup_rerun=重新執行設定
      我已經解決了問題 dialog.setup_workspace.step.workspace_setup_openpref=打開偏好设定
      並在之後重新執行 -dialog.setup_workspace.step.workspace_setup_copyclipboard=復製錯誤到剪貼板
      並關閉此工作室 -dialog.setup_workspace.step.workspace_setup_close=關閉目前工作室 +dialog.setup_workspace.step.workspace_setup_copyclipboard=復製錯誤到剪貼簿
      並關閉此工作空間 +dialog.setup_workspace.step.workspace_setup_close=關閉目前工作空間 dialog.setup_workspace.step.workspace_setup_fail_additionalinfo=

      附加訊息\: -dialog.new_workspace.title=新增工作室 +dialog.new_workspace.title=新增工作空間 common.help=幫助 -dialog.new_workspace.button_new=新增工作室 -dialog.new_workspace.type=工作室類型\: +dialog.new_workspace.button_new=建立新工作空間 +dialog.new_workspace.type=工作空間類型\: dialog.workspace_settings.save_changes=存儲變更 -dialog.workspace_settings.title=工作室設定 -dialog.workspace_settings.refactor.yes=是,重構工作室 +dialog.workspace_settings.title=工作空間設定 +dialog.workspace_settings.refactor.yes=是,重構工作空間 dialog.workspace_settings.refactor.no=否,還原變更 dialog.workspace_settings.refactor.title=重構請求 -dialog.workspace_settings.refactor.text=你已經變更一些參數,這些參數需要重建整個工作室。

      如果你有任何鎖定的模組元素,那麼你很可能需要在此變更之後修改其程式碼。
      確定要繼續嗎? -dialog.workspace_settings.refactor.text_flavor_switch=你已經更改了一些需要重新建置整個工作室的參數。

      如果你有任何鎖定的模組元素,你很可能需要在此變更後調整其代碼。

      你確定要更改生成器類型嗎?

      不同的模組 API 在某些特性的使用上可能存在差異。
      一些生成器可能還具有其它生成器不支援的特性。

      如果你繼續,將進行備份,但是你也應該自行備份。 +dialog.workspace_settings.refactor.text=你已經變更一些引數,這些引數需要重建整個工作空間。

      如果你有任何鎖定的模組元素,那麼你很可能需要在此變更之後修改其程式碼。
      確定要繼續嗎? +dialog.workspace_settings.refactor.text_flavor_switch=你已經更改了一些需要重新建置整個工作空間的引數。

      如果你有任何鎖定的模組元素,你很可能需要在此變更後調整其代碼。

      你確定要更改生成器類型嗎?

      不同的模組 API 在某些特性的使用上可能存在差異。
      一些生成器可能還具有其它生成器不支援的特性。

      如果你繼續,將進行備份,但是你也應該自行備份。 dialog.workspace_settings.lock_base_files=鎖定基本模組檔案 dialog.workspace_settings.server_side_mod=這是伺服器端模組 dialog.workspace_settings.tab.general=一般設定 @@ -2729,7 +2796,7 @@ dialog.workspace_settings.credits.error=鳴謝不能以包含引號 dialog.workspace_settings.section.external_apis=外部 API 支援 dialog.workspace_settings.section.external_apis.tooltip=勾選此核取方塊以添加對所支援的第三方 API 的支援和依賴項
      警告\: 如果你的模組使用了第三方 API,一旦你匯出它,沒有它們就無法執行。 dialog.workspace_settings.explore_plugins=探索插件 -dialog.workspace_settings.plugins_tip=尋找更多API?請看MCreator插件。 +dialog.workspace_settings.plugins_tip=尋找更多 API?請看看 MCreator 插件。 dialog.workspace_settings.version_check=Forge 版本檢查 dialog.workspace_settings.section.version_check=是否停用 Minecraft Forge 版本檢查?
      如果要確保用戶使用正確的 Minecraft Forge 版本,請
      取消勾選並啟用 Minecraft Forge 版本檢查。 dialog.workspace_settings.section.advanced=進階設定 @@ -2739,76 +2806,76 @@ dialog.workspace_settings.update_url=模組更新 JSON URL\: dialog.workspace_settings.required_mods=其它必需的模組\:
      使用逗號分隔的模組 ID dialog.workspace_settings.dependencies=其它依賴項\:
      使用逗號分隔模組 ID dialog.workspace_settings.dependants=其它依賴项\:
      使用逗號分隔模組 ID -dialog.workspace_settings.error_list=工作室設定存在以下問題\: -dialog.workspace_settings.dialog.error.title=無效的工作室設定 +dialog.workspace_settings.error_list=工作空間設定存在以下問題\: +dialog.workspace_settings.dialog.error.title=無效的工作空間設定 dialog.workspace_settings.dialog.error=錯誤在窗口上用紅色和錯誤圖示標記,因此你可以根據此處的註釋找到它們並進行修復。 dialog.new_workspace.spigot.display_name=插件顯示名稱\:
      僅用於MCreator dialog.new_workspace.spigot.plugin_name=插件名稱\:
      用於插件識別 dialog.new_workspace.spigot.generator=Minecraft版本(生成器)\:
      目標Java版版本 dialog.new_workspace.spigot.package=插件 Java 包名稱\:
      用於程式碼生成器的根 -dialog.new_workspace.spigot.folder=工作室檔案夾\: +dialog.new_workspace.spigot.folder=工作空間檔案夾\: dialog.new_workspace.spigot.notice=Spigot插件是基於Java伺服器端的插件,可在Minecraft Java版本上執行,
      並且需要安裝Spigot伺服器API,但不需要對客戶端進行任何特殊修改。 dialog.new_workspace.spigot.toggle=\ Spigot 伺服器插件 dialog.new_workspace.forge.display_name=模組顯示名稱\:
      此名稱顯示在遊戲中 dialog.new_workspace.forge.modid=模組 ID / 名稱空間\:
      用於模組識別 dialog.new_workspace.forge.generator=Minecraft 版本(生成器)\:
      目標 Java 版版本 dialog.new_workspace.forge.package=模組 Java 包名稱\:
      用於程式碼生成器的根 -dialog.new_workspace.forge.folder=工作室檔案夾\: +dialog.new_workspace.forge.folder=工作空間檔案夾\: dialog.new_workspace.forge.notice=Minecraft Forge 模組是基於 Java 的模組,可在 Minecraft Java 版上執行,
      並且需要在客戶端(和伺服器) 上安裝 Minecraft Forge,才能正常執行。 dialog.new_workspace.forge.toggle=\ Minecraft Forge 模組 dialog.new_workspace.neoforge.display_name=模組顯示名稱\:
      此名稱顯示在遊戲中 dialog.new_workspace.neoforge.modid=模組 ID / 名稱空間\:
      用於模組識別 dialog.new_workspace.neoforge.generator=Minecraft 版本(生成器)\:
      目標 Java 版版本 dialog.new_workspace.neoforge.package=模組 Java 包名稱\:
      用於程式碼生成器的根 -dialog.new_workspace.neoforge.folder=工作室檔案夾\: +dialog.new_workspace.neoforge.folder=工作空間檔案夾\: dialog.new_workspace.neoforge.notice=NeoForge 模組是基於 Java 的模組,可在 Minecraft Java 版上執行,
      並且需要在客戶端(和伺服器) 上安裝 NeoForge,才能正常執行。 dialog.new_workspace.neoforge.toggle=\ NeoForge 模組 dialog.new_workspace.fabric.display_name=Fabric 模組顯示名稱\:
      此名稱在遊戲中顯示 dialog.new_workspace.fabric.modid=模組 ID / 名稱空間\:
      用於模組識別 dialog.new_workspace.fabric.generator=Minecraft 版本(生成器)\:
      目標 Java 版版本 dialog.new_workspace.fabric.package=模組 Java 包名稱\:
      用於程式碼生成器的根 -dialog.new_workspace.fabric.folder=工作室檔案夾\: +dialog.new_workspace.fabric.folder=工作空間檔案夾\: dialog.new_workspace.fabric.notice=MinecraftFabric 模組是基於 Java 的模組,可在 MinecraftJava 版上執行,
      並且需要在客戶端(和伺服器)上安裝MinecraftFabric,才能正常執行。 dialog.new_workspace.fabric.toggle=\ Minecraft Fabric 模組 dialog.new_workspace.quilt.display_name=Quilt 模組顯示名稱\:
      此名稱顯示在遊戲中 dialog.new_workspace.quilt.modid=模組 ID / 名稱空間\:
      用於模組識別 dialog.new_workspace.quilt.generator=Minecraft 版本(生成器)\:
      目標 Java 版版本 dialog.new_workspace.quilt.package=模組 Java 包名稱\:
      用於程式碼生成器的根 -dialog.new_workspace.quilt.folder=工作室檔案夾\: +dialog.new_workspace.quilt.folder=工作空間檔案夾\: dialog.new_workspace.quilt.notice=QuiltMC Minecraft 模組是基於 Java 的模組,可在 Minecraft Java 版上執行,
      並且需要在客戶端(和伺服器) 上安裝 Quilt loader,才能正常執行。 dialog.new_workspace.quilt.toggle=\ QulitMC 模組 dialog.new_workspace.addon.display_name=附加包顯示名稱\:
      此名稱顯示在遊戲中 dialog.new_workspace.addon.addon_id=附加包 ID\:
      用於附加包標識 dialog.new_workspace.addon.generator=Minecraft版本(生成器)\:
      目標基岩版版本 -dialog.new_workspace.addon.folder=工作室檔案夾\: -dialog.new_workspace.addon.notice1=插件目前在Minecraft和MCreator中都是實驗性功能,因此該功能
      覆蓋面有限。 +dialog.new_workspace.addon.folder=工作空間檔案夾\: +dialog.new_workspace.addon.notice1=附加包目前在 Minecraft 和 MCreator 中都是實驗性功能,因此該功能
      覆蓋面有限。 dialog.new_workspace.addon.notice2=附加包(Add-on)是Minecraft 基岩版(Bedrock Edition)的模組,不需要安裝任何其它軟體或模組載入器(modloader)。 dialog.new_workspace.addon.toggle=\ Minecraft 附加包 dialog.new_workspace.datapack.display_name=資料包顯示名稱\:
      此名稱在遊戲中顯示 dialog.new_workspace.datapack.modid=模組 ID/名稱空間\:
      用於建置識別證(辨識模組用) dialog.new_workspace.datapack.generator=Minecraft版本 (生成器)\:
      目標 Java 版版本 -dialog.new_workspace.datapack.folder=工作室檔案夾\: +dialog.new_workspace.datapack.folder=工作空間檔案夾\: dialog.new_workspace.datapack.notice=Minecraft資料包是可在Minecraft Java 版上執行且無需安裝任何
      附加軟體或模組載入器(modloader),但功能有限。 dialog.new_workspace.datapack.toggle=\ Minecraft 資料包 dialog.new_workspace.disabled.tooltip=你需要安裝至少一個支援此生成器類型的插件。 dialog.new_workspace.dialog_plugin_needed.title=需要插件 -dialog.new_workspace.dialog_plugin_needed.text=當前未安裝支援此生成器類型的插件。
      你是否要瀏覽MCreator的插件庫以取得插件? -dialog.new_workspace.error_list=你的工作室設定存在以下問題\: -dialog.new_workspace.main_title_html=建立新的工作室
      再下方輸入工作室詳細資訊 -elementgui.particle.animated_frame_duration=動態材質幀持續時間(以遊戲刻為單位)\: -elementgui.spawnlist.add_entry=添加生成條目 -elementgui.spawnlist.spawn_entries=實體生成條目 +dialog.new_workspace.dialog_plugin_needed.text=當前未安裝支援此生成器類型的插件。
      你是否要瀏覽 MCreator 的插件庫以取得插件? +dialog.new_workspace.error_list=你的工作空間設定存在以下問題\: +dialog.new_workspace.main_title_html=建立新的工作空間
      再下方輸入工作空間詳細資訊 +elementgui.particle.animated_frame_duration=動態紋理幀持續時間(以遊戲刻為單位)\: +elementgui.spawnlist.add_entry=添加生成項 +elementgui.spawnlist.spawn_entries=實體生成項 elementgui.save_mod_element=存儲模組元素 elementgui.code_viewer=生成的程式碼查看器 elementgui.save_keep_open=存儲並保持開啟 elementgui.errors.heading=以下模組元素問題需要解決\: elementgui.errors.title=頁面上的錯誤/問題 elementgui.errors.note=錯誤在編輯器上用紅色和錯誤圖示標記,因此你可以根據此處的註釋查找並修復
      錯誤。 -action.pack_tools.material=創建材料包... -action.pack_tools.ore=創建礦石包... -action.pack_tools.tool=創建工具包... -action.pack_tools.wood=創建木材包... -action.pack_tools.armor=創建盔甲包... +action.pack_tools.material=建立材料包... +action.pack_tools.ore=建立礦石包... +action.pack_tools.tool=建立工具包... +action.pack_tools.wood=建立木材包... +action.pack_tools.armor=建立盔甲包... dialog.generator_selector.current= 選定的生成器 dialog.generator_selector.generator_status=狀態\:{0} dialog.generator_selector.generator_status.deprecated=已被棄用 @@ -2820,7 +2887,7 @@ dialog.generator_selector.generator_status.stable=穩定版本 dialog.generator_selector.features=功能概述\: dialog.generator_selector.mod_element_types=支援的模組元素類型\: dialog.generator_selector.title=生成器選擇器 -dialog.generator_selector.coverage.textures=材質 +dialog.generator_selector.coverage.textures=紋理 dialog.generator_selector.coverage.sounds=音效 dialog.generator_selector.coverage.soundcategories=音效類別 dialog.generator_selector.coverage.structures=結構 @@ -2846,7 +2913,7 @@ dialog.generator_selector.coverage.gamerules=遊戲規則 dialog.generator_selector.coverage.itemproperties=物品屬性 dialog.generator_selector.coverage.keybuttons=按鍵與按鈕 dialog.generator_selector.coverage.mapcolors=地圖顏色 -dialog.generator_selector.coverage.materials=材質 +dialog.generator_selector.coverage.materials=材料 dialog.generator_selector.coverage.particles=粒子 dialog.generator_selector.coverage.pathnodetypes=路徑節點類型 dialog.generator_selector.coverage.effects=藥水效果 @@ -2865,7 +2932,7 @@ dialog.generator_selector.coverage.procedures=函式塊 dialog.generator_selector.coverage.aitasks=AI 任務/目標 dialog.generator_selector.coverage.triggers=全局觸發器 dialog.generator_selector.coverage.jsontriggers=進度觸發器\: -dialog.generator_selector.coverage.cmdargs=指令參數 +dialog.generator_selector.coverage.cmdargs=指令引數 dialog.generator_selector.coverage.features=地物方塊 dialog.generator_selector.generator_info=生成器訊息 dialog.spawn_list_entry.entity=實體\: @@ -2876,6 +2943,8 @@ dialog.list_field.biome_list_title=選擇生態域 dialog.list_field.biome_list_message=選擇要添加到清單中的生態域\: dialog.list_field.biome_default_feature_title=選擇生態域預設地物 dialog.list_field.biome_default_feature_message=選擇要添加到清單中的生態域預設地物\: +dialog.list_field.damage_type_list_title=選擇傷害類型 +dialog.list_field.damage_type_list_message=選擇要添加到清單中的傷害類型\: dialog.list_field.dimension_title=選擇維度\: dialog.list_field.dimension_message=選擇要添加到清單中的維度\: dialog.list_field.enchantment_title=選擇附魔 @@ -2893,6 +2962,7 @@ dialog.selector.damagesources.message=請選擇傷害類型\: dialog.selector.dimension.message=請選擇維度\: dialog.selector.enchantments.message=請選擇附魔\: dialog.selector.entity.message=請選擇實體\: +dialog.selector.entity_data.message=請選擇資料\: dialog.selector.fluids.message=請選擇流體\: dialog.selector.gamerules.message=請選擇遊戲規則\: dialog.selector.gui.message=請選擇介面\: @@ -2906,15 +2976,15 @@ dialog.selector.sound.title=音效選擇 dialog.selector.sound.message=請選擇音效\: dialog.selector.structures.message=請選擇結構\: dialog.selector.title=資料清單項選擇 -dialog.tools.inject_tags.title=將通用標籤添加到工作室 +dialog.tools.inject_tags.title=將通用標籤添加到工作空間 dialog.tools.inject_tags.confirm=新增標籤 -dialog.tools.inject_tags.text_top=選擇要添加到工作室的標籤,然後點擊“添加標籤”。
      如果你已經手動(不使用此工具)添加了任何這些標籤 類型,請不要在此處進行檢查以避免衝突。 -action.pack_tools.tag=將通用標籤添加到工作室... +dialog.tools.inject_tags.text_top=選擇要添加到工作空間的標籤,然後點擊“添加標籤”。
      如果你已經手動(不使用此工具)添加了任何這些標籤 類型,請不要勾選它以避免衝突。 +action.pack_tools.tag=將通用標籤添加到工作空間... dialog.tools.inject_tags.tag.blocks.minecraft.dirt=樹苗和其它植物可以在這些方塊上生長。 將你用於生態域所用的地表(地下)的方塊添加到該標籤組。 dialog.tools.inject_tags.tag.blocks.minecraft.logs=如果此標籤中的某個方塊位於葉子方塊周圍,則葉子不會腐爛。 dialog.tools.inject_tags.tag.blocks.minecraft.climbable=該標籤用於確定玩家可以攀爬的障礙物。 也由實體AI尋路使用。 dialog.tools.inject_tags.tag.blocks.minecraft.fences=用於尋路並確定與柵欄和拴繩的連接。 -dialog.tools.inject_tags.tag.blocks.minecraft.wooden_fences=在遊戲版本1.16.x中用於確定與木柵欄的連接。 用該標籤標記的方塊也包含“minecraft\:fences”標籤。 +dialog.tools.inject_tags.tag.blocks.minecraft.wooden_fences=在遊戲版本 1.16.x 中用於確定與木柵欄的連接。 用該標籤標記的方塊也包含 “minecraft\:fences” 標籤。 dialog.tools.inject_tags.tag.blocks.minecraft.walls=用於路徑查找並定義與其它牆、玻璃片、鐵柵欄和柵欄門的連接。 dialog.tools.inject_tags.tag.blocks.minecraft.small_flowers=蜜蜂可以給這些方塊授粉,終界使者可以拿起這些方塊 dialog.tools.inject_tags.tag.blocks.minecraft.tall_flowers=蜜蜂可以給這些花授粉 @@ -2948,13 +3018,24 @@ dialog.tools.inject_tags.tag.biomes.minecraft.is_river=標記在河流類型中 dialog.tools.inject_tags.tag.biomes.minecraft.is_hill=標記為丘陵的生態域。 dialog.tools.inject_tags.tag.biomes.minecraft.is_forest=標記在森林類型中的生態域。 dialog.tools.inject_tags.tag.biomes.minecraft.is_savanna=標記在熱帶草原類型中的生態域。 -workspace_file_browser.title=工作室檔案瀏覽器 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_drowning=此標籤組中的傷害類型會受到水中呼吸效果和「 drowningDamage」遊戲規則(是否會被溺水)的影響。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_explosion=此標籤組中的傷害類型會受到爆炸保護附魔的影響。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fall=此標籤組中的傷害類型會受到緩降效果、輕盈附魔和 "fallDamage" 遊戲規則的影響。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_fire=此標籤組中的傷害類型受抗火效果、火焰保護附魔和「fireDamage」(是否會被燒傷)遊戲規則的影響。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_freezing=此標籤組中的傷害類型會受到皮革盔甲和 freezeDamage 遊戲規則的影響。 +dialog.tools.inject_tags.tag.damage_types.minecraft.is_projectile=此標籤組中的傷害類型會受到投射物保護附魔的影響。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_armor=此標籤組中的傷害類型無法通過盔甲或盾牌減傷。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_cooldown=此標籤組中的傷害類型將無視無敵時間。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_effects=此標籤組中的傷害類型將無視所有保護,如保護類效果、有保護類附魔盔甲或保護類附魔。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_enchantments=此標籤組中的傷害類型會無視盔甲附魔(例如保護附魔)。 +dialog.tools.inject_tags.tag.damage_types.minecraft.bypasses_shield=此標籤組中的傷害類型會無視盾牌格擋。 +workspace_file_browser.title=工作空間檔案瀏覽器 workspace_file_browser.search=按檔案名稱搜尋 workspace_file_browser.open=開啟 workspace_file_browser.open_desktop=以預設程序開啟 workspace_file_browser.show_in_explorer=在資源管理器顯示 workspace_file_browser.remove_file=刪除 -workspace_file_browser.remove_file.message=確定要刪除所選檔案嗎?
      注意\:若刪除不當,可能會損壞工作室 +workspace_file_browser.remove_file.message=確定要刪除所選檔案嗎?
      注意\:若刪除不當,可能會損壞工作空間 workspace_file_browser.new_class.class_name=輸入類別的名稱\:
      確保類別的名稱是有效的Java名稱,沒有.java副檔名。
      檔案將被新增到選定的套件包中,如果沒有選擇,則添加到預設套件包中。 workspace_file_browser.new_class.class_name.title=類別名稱 workspace_file_browser.new_image=輸入圖片檔案名稱\: @@ -2966,11 +3047,11 @@ workspace_file_browser.new_folder_name.folder_name.title=資料夾名稱 workspace_file_browser.new_folder_name.folder=資料夾 datalist_combobox.not_supported={0}-不支援 help_loader.no_entry_learn_more=未定義幫助說明。在MCreator的Wiki上了解有關{1}的更多資訊。 -help_loader.learn_about=
      在MCreator的Wiki上了解有關{1}的更多資訊。 -help_loader.no_help_entry=尚未為{0}定義幫助說明。
      +help_loader.learn_about=
      在 MCreator 的 Wiki 上了解有關{1}的更多訊息。 +help_loader.no_help_entry=尚未為 {0} 定義幫助說明。
      help_loader.no_help_found=沒有找到給定幫助上下文的幫助。 -theme.default_dark.description=MCreator預設黑暗模式主題 -theme.default_light.description=MCreator預設明亮模式主題 +theme.default_dark.description=MCreator 預設黑暗模式主題 +theme.default_light.description=MCreator 預設明亮模式主題 theme.matrix.description=社群貢獻的主題由 Max094_Reikeb 製作 theme.midnight.description=社群貢獻的主題由 Van 製作 condition.common.false=(永不) @@ -3015,7 +3096,7 @@ validators.registry_name.invalid2={0} 的最後不能是";" validators.registry_name.invalid3={0} 不能包含多個";" validators.unique_name.empty={0} 不能為空 validators.unique_name.duplicate={0} 已被使用 -validator.texture_needed=你需要選擇一個材質 +validator.texture_needed=你需要選擇一個紋理 validator.image_size=所選圖片大小不相同 validator.image_size.empty=主圖片為空或為 null validator.singletag.multiple=當你在清單中使用標籤時,清單中只顯示一個元素。 @@ -3037,9 +3118,21 @@ action.image_editor.undo.tooltip=點擊這裡可以撤銷之前的修改 action.image_editor.save_as=另存新檔 action.image_editor.save_as.tooltip=點擊這裡,將變更儲存到一個新檔案中 action.image_editor.save=儲存 -action.image_editor.save.tooltip=點擊這個來存儲對現有檔案的修改。如果是一個新的檔案,會打開一個 「另存為」 對話框。 +action.image_editor.save.tooltip=點擊這個來存儲對現有檔案的修改。如果是一個新檔案,會打開一個另存為對話框。 action.image_editor.redo=復原變更 action.image_editor.redo.tooltip=點擊這裡,重做之前的改動 +action.image_editor.selection.clear=清除所選内容 +action.image_editor.selection.clear.tooltip=點擊此處清除所選内容 +action.image_editor.copy=複製 +action.image_editor.copy.tooltip=點擊此處把選定區域複製到剪貼簿 +action.image_editor.copy_all=複製全部 +action.image_editor.copy_all.tooltip=點擊此處將整個圖片複製到剪貼簿 +action.image_editor.cut=剪切 +action.image_editor.cut.tooltip=點擊此處把選定區域剪切到剪貼簿 +action.image_editor.paste=貼上 +action.image_editor.paste.tooltip=點擊此處貼上剪貼簿的内容 +action.image_editor.delete=刪除 +action.image_editor.delete.tooltip=點擊此處刪除選定區域 action.ide.save=儲存程式碼 action.ide.save.result=程式碼已儲存 action.ide.save.tooltip=點擊這裡,在目前程式碼編輯器中存儲程式碼 @@ -3050,11 +3143,13 @@ common.add=添加 common.close=關閉 common.cancel=取消 common.confirmation=確定 +common.delete_selected=刪除所選 common.dependency={0}, 类型為\: {1} common.mod_element_name=模組元素名稱 common.namespace=命名空間 common.name_already_exists=此名稱已存在 common.not_applicable=N/A +common.search_usages=在工作空間搜尋使用 common.warning=警告 components.collapsible_panel.expand=點擊展開 components.collapsible_panel.collapse=點擊摺疊 @@ -3065,9 +3160,9 @@ components.state_label.error_empty.title=空狀態 components.state_label.error_duplicate=此狀態已被定義。 components.state_label.error_duplicate.title=重復的狀態 ide.warnings.read_only=這是(反編譯/提供的)程式碼,只能讀取,僅用於內部參考和教育用途。 -ide.warnings.created_from_ui={0} 是由MCreator的介面創建的。你需要鎖定它的程式碼,以防止程式碼被改寫! +ide.warnings.created_from_ui={0} 是由 MCreator 的介面建立的。你需要鎖定它的程式碼,以防止程式碼被改寫! ide.warnings.save_unlocked_element=你試圖儲存未鎖定的模組檔案!

      這意味著 MCreator 在某些情況下可能會覆蓋你的修改。
      為了防止這種情況,你可以鎖定程式碼。

      如果程式碼被鎖定,MCreator不會變更程式碼,但這意味著當
      更新 MCreator 或變更 Minecraft 版本時,變更和修復不會被套用
      到被鎖定的元素,而是需要手動完成。

      在使用此操作之前,請閱讀 MCreato r網站上關於鎖定程式碼的 wiki 頁面 -ide.warnings.save_unlocked_element.title=覆蓋MCreator生成的檔案 +ide.warnings.save_unlocked_element.title=覆蓋 MCreator 生成的檔案 ide.warnings.file_not_saved=檔案 {0} 沒有被儲存。
      請選擇想要的方法來解決這個衝突。 ide.errors.failed_find_declaration=沒能找到聲明! ide.tips.save_and_build=儲存程式碼並開始建置 @@ -3077,39 +3172,39 @@ ide.actions.lock_and_save=鎖定程式碼並儲存 ide.actions.save_without_locking=儲存而不鎖定 ide.action.close_and_save=關閉和儲存 dialog.new_workspace.letters_valid=在路徑中只允許有英文字母、數字、_/+-\\()[].,@$\=`和空格。 -dialog.new_workspace.valid_characters=工作室資料夾不應包含以下字元\: /\:>"?*|和空白處 -dialog.new_workspace.file_permission_problem=MCreator在選定的目錄中沒有讀寫權限! +dialog.new_workspace.valid_characters=工作空間資料夾不應包含以下字元\: /\:>"?*|和空白處 +dialog.new_workspace.file_permission_problem=MCreator 在選定的目錄中沒有讀寫權限! blockly.warning.no_side_sync=塊 {0} 不會在客戶端和伺服器之間自動同步,這意味著在某些情況下它可能無法正常工作。 -blockly.warning.no_more_argument=在消息參數之後添加更多的參數將使該指令無法工作。 -blockly.warning.no_item_extension_fuel=從一個被「燃料物品擴展條件」觸發的函式中取得燃料值將導致循環,從而使遊戲崩潰 +blockly.warning.no_more_argument=在消息引數之後添加更多的引數將使該指令無法工作。 +blockly.warning.no_item_extension_fuel=從一個被燃料物品擴展條件觸發的函式中取得燃料值將導致循環,從而使遊戲崩潰 blockly.warning.state_provider_int_property_warning=如果方塊沒有給定的屬性,或者給定的值超出限制,資料包將會無法識別。 blockly.warnings.binary_operations=雙輸入塊的輸入中的一個為空。對其使用預設類型值。 -blockly.warnings.boolean=取得邏輯塊值失敗,使用真作為值。 +blockly.warnings.boolean=取得邏輯塊值失敗,使用 true 作為值。 blockly.warnings.flow_control=無法取得迴圈中斷類型。 {0} blockly.warnings.variables.local_scope_unsupported=編輯器不支援本地變數! blockly.warnings.skip=略過此塊。 -blockly.warnings.ternary_operator.no_condition=找到無條件的三元運算符方塊,使用真作為值。 +blockly.warnings.ternary_operator.no_condition=找到無條件的三元運算符方塊,使用 true 作為值。 blockly.warnings.number_block=找不到數字塊值,使用 0 作為值。 blockly.warnings.constant_number_block=未能找到常數值,使用 0 作為值。 blockly.warnings.disabled_block_type.skip=停用塊類型 {0} 。略過此塊。 blockly.warnings.unknown_block_type.skip=未知塊類型 {0} 。略過此塊。 blockly.warnings.skip_unknown_var_type=略過未知變數類型 -blockly.warnings.if_no_condition=如果沒有條件方塊,條件將始終為真。 +blockly.warnings.if_no_condition=如果沒有條件方塊,條件將始終為 true。 blockly.warnings.if_no_main_body=發現無主體的 if 塊! blockly.warnings.empty_code_block=空程式碼塊被略過。 -blockly.warnings.empty_not_block=發現未輸入任意值的not塊。它的返回值將總為False。 +blockly.warnings.empty_not_block=發現未輸入任意值的 not 塊。它的返回值將總為 False。 blockly.warnings.empty_loop=循環塊條件或主體為空,此塊已被略過。 blockly.warnings.empty_print_block=已略過空打印塊 blockly.warnings.call_procedure.nonexistent=函式呼叫塊呼叫了不存在的函式 {0} blockly.warnings.call_procedure.missing_inputs=在特定位置呼叫函式塊缺少座標輸入。它將被作為普通呼叫函式塊處理。 -blockly.warnings.old_command.note=接受所有參數和呼叫函式是一個舊塊。只在無其它參數被使用,且你想要任意輸入參數時才使用。 +blockly.warnings.old_command.note=接受所有引數和呼叫函式是一個舊塊。只在無其它引數被使用,且你想要任意輸入引數時才使用。 blockly.warnings.call_procedure.empty=空函式呼叫塊被略過。 blockly.warnings.retval.empty=已略過空返回塊 blockly.warnings.singular_math=數學塊中有值為空。使用值 0。 blockly.warnings.empty_compare_text=字符串比較塊中有值為空。使用預設值。 blockly.warnings.empty_text_block=空文字塊。其值將為空字串。 blockly.warnings.empty_text_length=空字串長度塊。其值將為0。 -blockly.warnings.empty_text_is_empty_block=空「文字是否為空」塊。其值將為真。 +blockly.warnings.empty_text_is_empty_block=空文字是否為空塊。其值將為 true。 blockly.warnings.empty_text_uppercase_block=略過空文字大寫塊。使用預設值。 blockly.warnings.empty_text_lowercase_block=略過空文字小寫塊。使用預設值。 blockly.warnings.empty_text_trim_block=略過空文字修剪塊。使用預設值。 @@ -3163,7 +3258,7 @@ blockly.errors.field_not_defined=塊 {1} 上的字段 {0} 未被定義。 blockly.errors.input_empty=块 {1} 上的輸入 {0} 為空。 blockly.errors.duplicate_dependencies_provided=輸入 {0} 所提供的依賴項已經由父語句輸入提供 blockly.errors.duplicate_dependencies_provided.statement=語句輸入 {0} 提供的依賴項已經由父語句輸入提供 -blockly.errors.api_required=塊 {1} 所需的API "{0}" 在工作室設定中被停用,或者不被當前生成器支援。 +blockly.errors.api_required=塊 {1} 所需的API "{0}" 在工作空間設定中被停用,或者不被當前生成器支援。 blockly.errors.call_procedure_missing_deps=你呼叫的函式 ({0}) 未提供所需的依賴項 {1} blockly.errors.features.missing_feature=缺少地物 blockly.block.cancel_event=取消事件 @@ -3172,7 +3267,7 @@ dialog.bedrock.enable_addons.title=啟用附加包 dialog.bedrock.options.close_reload=關閉並重載 dialog.bedrock.options.close_reload_always=關閉並重載(不再詢問) dialog.bedrock.options.cancel=取消測試執行 -dialog.bedrock.already_opened=檢測到Minecraft基岩版已執行。你可以\:
      1. 關閉它 (任何已打开的世界都不會被储存),重載附加包并再次啟動
      2. 执行第一个操作,并在之后的執行中停用該訊息
      3. 取消運行,手動關閉Minecraft基岩版并再次點擊執行按鈕 +dialog.bedrock.already_opened=檢測到 Minecraft 基岩版已執行。你可以\:
        1. 關閉它 (任何已打开的世界都不會被储存),重載附加包并再次啟動
        2. 执行第一个操作,并在之后的執行中停用該訊息
        3. 取消執行,手動關閉 Minecraft 基岩版并再次點擊執行按鈕 dialog.bedrock.already_opened.title=Minecraft 基岩版已開啟 dialog.bedrock.failed=Minecraft 基岩版開啟失敗。
          請確保你已從商店安裝它。 dialog.bedrock.failed.title=執行客戶端失敗 @@ -3184,10 +3279,10 @@ dialog.plugin_load_failed.msg2=部分功能可能無法正常工作。請檢查 dialog.plugin_load_failed.title=一些插件載入失敗 notification.plugin_load_failed.msg=下列插件載入失敗\: notification.common.more_info=更多資訊 -notification.update_available.msg=MCreator有新版本可用。

          已安裝版本\: {0}
          新版本\: {1} +notification.update_available.msg=MCreator 有新版本可用。

          已安裝版本\: {0}
          新版本\: {1} notification.patch_available.msg=有新版本 {0} 可用。

          已安裝版本\: {0}.{1}
          新版本\: {0}.{2} notification.plugin_updates.msg=有可用的插件更新 -notification.news.title=來自官網的新聞:{0} +notification.news.title=來自官網的新聞\:{0} notification.news.read_more=瞭解更多 notification.news.hide=隱藏此通知 simple_list_entry.remove=移除此項 \ No newline at end of file diff --git a/plugins/mcreator-themes/themes/default_dark/images/18px/add_new.png b/plugins/mcreator-themes/themes/default_dark/images/18px/add_new.png new file mode 100644 index 00000000000..08f2898c9b0 Binary files /dev/null and b/plugins/mcreator-themes/themes/default_dark/images/18px/add_new.png differ diff --git a/plugins/mcreator-themes/themes/default_dark/images/18px/merge.png b/plugins/mcreator-themes/themes/default_dark/images/18px/merge.png new file mode 100644 index 00000000000..b97256d8487 Binary files /dev/null and b/plugins/mcreator-themes/themes/default_dark/images/18px/merge.png differ diff --git a/plugins/mcreator-themes/themes/default_dark/images/img_editor/select.png b/plugins/mcreator-themes/themes/default_dark/images/img_editor/select.png new file mode 100644 index 00000000000..861411d759f Binary files /dev/null and b/plugins/mcreator-themes/themes/default_dark/images/img_editor/select.png differ diff --git a/plugins/mcreator-themes/themes/default_dark/images/mod_types/damagetype.png b/plugins/mcreator-themes/themes/default_dark/images/mod_types/damagetype.png new file mode 100644 index 00000000000..ac93d4035de Binary files /dev/null and b/plugins/mcreator-themes/themes/default_dark/images/mod_types/damagetype.png differ diff --git a/plugins/mcreator-themes/themes/default_dark/images/recipe/smithing.png b/plugins/mcreator-themes/themes/default_dark/images/recipe/smithing.png index 202ade9cbeb..0ef471a904b 100644 Binary files a/plugins/mcreator-themes/themes/default_dark/images/recipe/smithing.png and b/plugins/mcreator-themes/themes/default_dark/images/recipe/smithing.png differ diff --git a/plugins/mcreator-themes/themes/default_dark/images/searchsmall.png b/plugins/mcreator-themes/themes/default_dark/images/searchsmall.png new file mode 100644 index 00000000000..91f16416b01 Binary files /dev/null and b/plugins/mcreator-themes/themes/default_dark/images/searchsmall.png differ diff --git a/plugins/mcreator-themes/themes/default_dark/styles/blockly.css b/plugins/mcreator-themes/themes/default_dark/styles/blockly.css index 0a1f5e50d76..ae9043c2c33 100644 --- a/plugins/mcreator-themes/themes/default_dark/styles/blockly.css +++ b/plugins/mcreator-themes/themes/default_dark/styles/blockly.css @@ -65,7 +65,7 @@ body { } .whlab > .blocklyFlyoutLabelText { - fill: white; + fill: white !important; } .blocklyDropDownDiv { diff --git a/plugins/mcreator-themes/themes/default_light/images/mod_types/damagetype.png b/plugins/mcreator-themes/themes/default_light/images/mod_types/damagetype.png new file mode 100644 index 00000000000..cb52e0730ad Binary files /dev/null and b/plugins/mcreator-themes/themes/default_light/images/mod_types/damagetype.png differ diff --git a/plugins/mcreator-themes/themes/matrix/styles/blockly.css b/plugins/mcreator-themes/themes/matrix/styles/blockly.css index b2052d73232..8653c8af46a 100644 --- a/plugins/mcreator-themes/themes/matrix/styles/blockly.css +++ b/plugins/mcreator-themes/themes/matrix/styles/blockly.css @@ -65,7 +65,7 @@ body { } .whlab > .blocklyFlyoutLabelText { - fill: white; + fill: white !important; } .blocklyDropDownDiv { diff --git a/plugins/mcreator-themes/themes/midnight/styles/blockly.css b/plugins/mcreator-themes/themes/midnight/styles/blockly.css index ecb6498f967..3c9715506f9 100644 --- a/plugins/mcreator-themes/themes/midnight/styles/blockly.css +++ b/plugins/mcreator-themes/themes/midnight/styles/blockly.css @@ -65,7 +65,7 @@ body { } .whlab > .blocklyFlyoutLabelText { - fill: #eaeaea; + fill: #eaeaea !important; } .blocklyDropDownDiv { diff --git a/src/main/java/net/mcreator/Launcher.java b/src/main/java/net/mcreator/Launcher.java index ee14a10957c..77f4d3873a8 100644 --- a/src/main/java/net/mcreator/Launcher.java +++ b/src/main/java/net/mcreator/Launcher.java @@ -19,23 +19,22 @@ package net.mcreator; import javafx.embed.swing.JFXPanel; +import net.mcreator.io.LoggingSystem; import net.mcreator.io.OS; import net.mcreator.io.UserFolderManager; import net.mcreator.preferences.PreferencesManager; import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.blockly.WebConsoleListener; -import net.mcreator.util.*; -import org.apache.logging.log4j.Level; +import net.mcreator.ui.component.util.ThreadUtil; +import net.mcreator.util.MCreatorVersionNumber; +import net.mcreator.util.TerribleModuleHacks; +import net.mcreator.util.UTF8Forcer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javax.swing.*; import java.io.IOException; -import java.io.PrintStream; -import java.lang.management.ManagementFactory; -import java.lang.reflect.InvocationTargetException; import java.util.Arrays; -import java.util.List; import java.util.Properties; public class Launcher { @@ -43,33 +42,18 @@ public class Launcher { public static MCreatorVersionNumber version; public static void main(String[] args) { - List arguments = Arrays.asList(args); + LoggingSystem.init(); - System.setProperty("jna.nosys", "true"); - System.setProperty("log_directory", UserFolderManager.getFileFromUserFolder("").getAbsolutePath()); - - if (OS.getOS() == OS.WINDOWS && ManagementFactory.getRuntimeMXBean().getInputArguments().stream() - .noneMatch(arg -> arg.contains("idea_rt.jar"))) { - System.setProperty("log_disable_ansi", "true"); - } else { - System.setProperty("log_disable_ansi", "false"); - } - - final Logger LOG = LogManager.getLogger("Launcher"); // init logger after log directory is set - - System.setErr(new PrintStream(new LoggingOutputStream(LogManager.getLogger("STDERR"), Level.ERROR), true)); - System.setOut(new PrintStream(new LoggingOutputStream(LogManager.getLogger("STDOUT"), Level.INFO), true)); - Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler()); - - TerribleModuleHacks.openAllUnnamed(); + TerribleModuleHacks.openAllFor(ClassLoader.getSystemClassLoader().getUnnamedModule()); TerribleModuleHacks.openMCreatorRequirements(); UTF8Forcer.forceGlobalUTF8(); + final Logger LOG = LogManager.getLogger("Launcher"); // init logger after log directory is set + try { Properties conf = new Properties(); conf.load(Launcher.class.getResourceAsStream("/mcreator.conf")); - version = new MCreatorVersionNumber(conf); } catch (IOException e) { LOG.error("Failed to read MCreator config", e); @@ -95,22 +79,8 @@ public static void main(String[] args) { System.setProperty("sun.java2d.d3d", "false"); System.setProperty("prism.lcdtext", "false"); - // if the OS is macOS, we enable javafx single thread mode to avoid some deadlocks with JFXPanel - if (OS.getOS() == OS.MAC) { - System.setProperty("javafx.embed.singleThread", "true"); - } - - if ("true".equals(System.getProperty("javafx.embed.singleThread"))) { - LOG.warn("Running in javafx.embed.singleThread environment. " - + "This is just a note and should not cause any problems."); - } - // Init JFX Toolkit - try { - SwingUtilities.invokeAndWait(JFXPanel::new); - } catch (InterruptedException | InvocationTargetException e) { - LOG.error("Failed to start JFX toolkit", e); - } + ThreadUtil.runOnSwingThreadAndWait(JFXPanel::new); WebConsoleListener.registerLogger(LOG); @@ -133,7 +103,7 @@ public static void main(String[] args) { System.exit(-2); } - MCreatorApplication.createApplication(arguments); + MCreatorApplication.createApplication(Arrays.asList(args)); } } diff --git a/src/main/java/net/mcreator/element/BaseType.java b/src/main/java/net/mcreator/element/BaseType.java index 3d60eb60b42..84e1a3b706e 100644 --- a/src/main/java/net/mcreator/element/BaseType.java +++ b/src/main/java/net/mcreator/element/BaseType.java @@ -22,15 +22,10 @@ public enum BaseType { // @formatter:off - ARMOR, - BIOME, BLOCK, BLOCKENTITY, - DATAPACK, - ENTITY, - GUI, ITEM, - OTHER, + ENTITY, FEATURE; // @formatter:on diff --git a/src/main/java/net/mcreator/element/GeneratableElement.java b/src/main/java/net/mcreator/element/GeneratableElement.java index 4bafa7fb2c6..35782b63c7b 100644 --- a/src/main/java/net/mcreator/element/GeneratableElement.java +++ b/src/main/java/net/mcreator/element/GeneratableElement.java @@ -27,7 +27,6 @@ import net.mcreator.element.parts.IWorkspaceDependent; import net.mcreator.element.parts.procedure.RetvalProcedure; import net.mcreator.generator.template.IAdditionalTemplateDataProvider; -import net.mcreator.ui.MCreator; import net.mcreator.ui.minecraft.states.StateMap; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; @@ -37,16 +36,13 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.awt.image.BufferedImage; -import java.lang.reflect.Array; import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.lang.reflect.Type; import java.util.List; -import java.util.Map; public abstract class GeneratableElement { - public static final int formatVersion = 55; + public static final int formatVersion = 57; private static final Logger LOG = LogManager.getLogger("Generatable Element"); @@ -176,7 +172,10 @@ public GeneratableElement deserialize(JsonElement jsonElement, Type type, GeneratableElement generatableElement = gson.fromJson(jsonObject, modElementType.getModElementStorageClass()); generatableElement.setModElement(lastModElement); // set the mod element reference - passWorkspace(generatableElement, workspace); + + // Populate workspace-dependant fields with workspace reference + IWorkspaceDependent.processWorkspaceDependentObjects(generatableElement, + workspaceDependent -> workspaceDependent.setWorkspace(workspace)); List converters = ConverterRegistry.getConvertersForModElementType(modElementType); if (converters != null) { @@ -242,41 +241,6 @@ public JsonElement serialize(GeneratableElement modElement, Type type, return root; } - private void passWorkspace(Object object, Workspace workspace) { - if (object == null) - return; - - // Pass workspace if IWorkspaceDependent - if (object instanceof IWorkspaceDependent iws) - iws.setWorkspace(workspace); - - // Then check if we can pass workspace to any of the children - if (object instanceof Iterable list) { - for (Object element : list) - passWorkspace(element, workspace); - } else if (object instanceof Map map) { - for (Object element : map.keySet()) - passWorkspace(element, workspace); - for (Object element : map.values()) - passWorkspace(element, workspace); - } else if (object.getClass().isArray()) { - int length = Array.getLength(object); - for (int i = 0; i < length; i++) - passWorkspace(Array.get(object, i), workspace); - } else if (object.getClass().getModule() == MCreator.class.getModule()) { - for (Field field : object.getClass().getDeclaredFields()) { - field.setAccessible(true); - if (!Modifier.isStatic(field.getModifiers()) && !Modifier.isTransient(field.getModifiers())) { - try { - passWorkspace(field.get(object), workspace); - } catch (Exception e) { - LOG.warn("Failed to pass workspace to field " + field.getName() + " of object " - + object.getClass().getSimpleName()); - } - } - } - } - } } public static final class Unknown extends GeneratableElement { diff --git a/src/main/java/net/mcreator/element/ModElementType.java b/src/main/java/net/mcreator/element/ModElementType.java index 4866b497ac4..8598bb2f391 100644 --- a/src/main/java/net/mcreator/element/ModElementType.java +++ b/src/main/java/net/mcreator/element/ModElementType.java @@ -19,7 +19,6 @@ package net.mcreator.element; -import net.mcreator.element.parts.procedure.Procedure; import net.mcreator.generator.GeneratorStats; import net.mcreator.ui.MCreator; import net.mcreator.ui.init.L10N; @@ -28,13 +27,11 @@ import net.mcreator.workspace.elements.ModElement; import javax.swing.*; -import java.lang.reflect.Field; import java.util.Locale; public class ModElementType { private final String registryName; - private final BaseType baseType; private final ModElementGUIProvider modElementGUIProvider; private final Class modElementStorageClass; @@ -44,11 +41,8 @@ public class ModElementType { private final Character shortcut; private GeneratorStats.CoverageStatus status = GeneratorStats.CoverageStatus.FULL; - private boolean hasProcedureTriggers; - - public ModElementType(String registryName, Character shortcut, BaseType baseType, - ModElementGUIProvider modElementGUIProvider, Class modElementStorageClass) { - this.baseType = baseType; + public ModElementType(String registryName, Character shortcut, ModElementGUIProvider modElementGUIProvider, + Class modElementStorageClass) { this.registryName = registryName; this.shortcut = shortcut; @@ -57,12 +51,6 @@ public ModElementType(String registryName, Character shortcut, BaseType baseType this.readableName = L10N.t("modelement." + registryName.toLowerCase(Locale.ENGLISH)); this.description = L10N.t("modelement." + registryName.toLowerCase(Locale.ENGLISH) + ".description"); - - for (Field field : modElementStorageClass.getFields()) - if (field.getType().isAssignableFrom(Procedure.class)) { - hasProcedureTriggers = true; - break; - } } public String getRegistryName() { @@ -73,10 +61,6 @@ public Character getShortcut() { return shortcut; } - public BaseType getBaseType() { - return baseType; - } - public String getReadableName() { return readableName; } @@ -105,10 +89,6 @@ public void setStatus(GeneratorStats.CoverageStatus status) { this.status = status; } - public boolean hasProcedureTriggers() { - return hasProcedureTriggers; - } - @Override public String toString() { return this.registryName; } @@ -131,6 +111,7 @@ public interface ModElementGUIProvider { public static ModElementType BIOME; public static ModElementType BLOCK; public static ModElementType COMMAND; + public static ModElementType DAMAGETYPE; public static ModElementType DIMENSION; public static ModElementType CODE; public static ModElementType ENCHANTMENT; diff --git a/src/main/java/net/mcreator/element/ModElementTypeLoader.java b/src/main/java/net/mcreator/element/ModElementTypeLoader.java index b5bc99511b6..4bd5a9638b5 100644 --- a/src/main/java/net/mcreator/element/ModElementTypeLoader.java +++ b/src/main/java/net/mcreator/element/ModElementTypeLoader.java @@ -31,43 +31,44 @@ public class ModElementTypeLoader { public static void loadModElements() { //@formatter:off - ModElementType.ADVANCEMENT = register(new ModElementType<>("achievement", 'h', BaseType.DATAPACK, AchievementGUI::new, Achievement.class)); - ModElementType.ARMOR = register(new ModElementType<>("armor", 'a', BaseType.ARMOR, ArmorGUI::new, Armor.class)); - ModElementType.BIOME = register(new ModElementType<>("biome", 'o', BaseType.BIOME, BiomeGUI::new, Biome.class)); - ModElementType.BLOCK = register(new ModElementType<>("block", 'b', BaseType.BLOCK, BlockGUI::new, Block.class)); - ModElementType.COMMAND = register(new ModElementType<>("command", 'c', BaseType.OTHER, CommandGUI::new, Command.class)); - ModElementType.DIMENSION = register(new ModElementType<>("dimension", 'd', BaseType.OTHER, DimensionGUI::new, Dimension.class)); - ModElementType.CODE = register(new ModElementType<>("code", null, BaseType.OTHER, CustomElementGUI::new, CustomElement.class)); - ModElementType.ENCHANTMENT = register(new ModElementType<>("enchantment", 'm', BaseType.OTHER, EnchantmentGUI::new, Enchantment.class)); - ModElementType.FEATURE = register(new ModElementType<>("feature", 'f', BaseType.FEATURE, FeatureGUI::new, Feature.class)); - ModElementType.FLUID = register(new ModElementType<>("fluid", null, BaseType.BLOCK, FluidGUI::new, Fluid.class)); - ModElementType.FUNCTION = register(new ModElementType<>("function", 'u', BaseType.DATAPACK, FunctionGUI::new, Function.class)); - ModElementType.GAMERULE = register(new ModElementType<>("gamerule", null, BaseType.OTHER, GameRuleGUI::new, GameRule.class)); - ModElementType.GUI = register(new ModElementType<>("gui", 'g', BaseType.GUI, CustomGUIGUI::new, GUI.class)); - ModElementType.ITEM = register(new ModElementType<>("item", 'i', BaseType.ITEM, ItemGUI::new, Item.class)); - ModElementType.ITEMEXTENSION = register(new ModElementType<>("itemextension", null, BaseType.OTHER, ItemExtensionGUI::new, ItemExtension.class)); - ModElementType.KEYBIND = register(new ModElementType<>("keybind", 'k', BaseType.OTHER, KeyBindGUI::new, KeyBinding.class)); - ModElementType.LIVINGENTITY = register(new ModElementType<>("livingentity", 'e', BaseType.ENTITY, LivingEntityGUI::new, LivingEntity.class)); - ModElementType.LOOTTABLE = register(new ModElementType<>("loottable", 'l', BaseType.DATAPACK, LootTableGUI::new, LootTable.class)); - ModElementType.MUSICDISC = register(new ModElementType<>("musicdisc", 'x', BaseType.OTHER, MusicDiscGUI::new, MusicDisc.class)); - ModElementType.OVERLAY = register(new ModElementType<>("overlay", 'v', BaseType.OTHER, OverlayGUI::new, Overlay.class)); - ModElementType.PAINTING = register(new ModElementType<>("painting", null, BaseType.OTHER, PaintingGUI::new, Painting.class)); - ModElementType.PARTICLE = register(new ModElementType<>("particle", 'y', BaseType.OTHER, ParticleGUI::new, Particle.class)); - ModElementType.PLANT = register(new ModElementType<>("plant", 'n', BaseType.BLOCK, PlantGUI::new, Plant.class)); - ModElementType.POTION = register(new ModElementType<>("potion", 'z', BaseType.OTHER, PotionGUI::new, Potion.class)); - ModElementType.POTIONEFFECT = register(new ModElementType<>("potioneffect", null, BaseType.OTHER, PotionEffectGUI::new, PotionEffect.class)); - ModElementType.PROCEDURE = register(new ModElementType<>("procedure", 'p', BaseType.OTHER, ProcedureGUI::new, Procedure.class)); - ModElementType.PROJECTILE = register(new ModElementType<>("projectile", 'q', BaseType.ENTITY, ProjectileGUI::new, Projectile.class)); - ModElementType.RECIPE = register(new ModElementType<>("recipe", 'r', BaseType.DATAPACK, RecipeGUI::new, Recipe.class)); - ModElementType.STRUCTURE = register(new ModElementType<>("structure", 's', BaseType.FEATURE, StructureGUI::new, Structure.class)); - ModElementType.TAB = register(new ModElementType<>("tab", 'w', BaseType.OTHER, TabGUI::new, Tab.class)); - ModElementType.TAG = register(new ModElementType<>("tag", 'j', BaseType.DATAPACK, TagGUI::new, Tag.class)); - ModElementType.TOOL = register(new ModElementType<>("tool", 't', BaseType.ITEM, ToolGUI::new, Tool.class)); - ModElementType.VILLAGERPROFESSION = register(new ModElementType<>("villagerprofession", null, BaseType.OTHER, VillagerProfessionGUI::new, VillagerProfession.class)); - ModElementType.VILLAGERTRADE = register(new ModElementType<>("villagertrade", null, BaseType.OTHER, VillagerTradeGUI::new, VillagerTrade.class)); + ModElementType.ADVANCEMENT = register(new ModElementType<>("achievement", 'h', AchievementGUI::new, Achievement.class)); + ModElementType.ARMOR = register(new ModElementType<>("armor", 'a', ArmorGUI::new, Armor.class)); + ModElementType.BIOME = register(new ModElementType<>("biome", 'o', BiomeGUI::new, Biome.class)); + ModElementType.BLOCK = register(new ModElementType<>("block", 'b', BlockGUI::new, Block.class)); + ModElementType.COMMAND = register(new ModElementType<>("command", 'c', CommandGUI::new, Command.class)); + ModElementType.DAMAGETYPE = register(new ModElementType<>("damagetype", null, DamageTypeGUI::new, DamageType.class)); + ModElementType.DIMENSION = register(new ModElementType<>("dimension", 'd', DimensionGUI::new, Dimension.class)); + ModElementType.CODE = register(new ModElementType<>("code", null, CustomElementGUI::new, CustomElement.class)); + ModElementType.ENCHANTMENT = register(new ModElementType<>("enchantment", 'm', EnchantmentGUI::new, Enchantment.class)); + ModElementType.FEATURE = register(new ModElementType<>("feature", 'f', FeatureGUI::new, Feature.class)); + ModElementType.FLUID = register(new ModElementType<>("fluid", null, FluidGUI::new, Fluid.class)); + ModElementType.FUNCTION = register(new ModElementType<>("function", 'u', FunctionGUI::new, Function.class)); + ModElementType.GAMERULE = register(new ModElementType<>("gamerule", null, GameRuleGUI::new, GameRule.class)); + ModElementType.GUI = register(new ModElementType<>("gui", 'g', CustomGUIGUI::new, GUI.class)); + ModElementType.ITEM = register(new ModElementType<>("item", 'i', ItemGUI::new, Item.class)); + ModElementType.ITEMEXTENSION = register(new ModElementType<>("itemextension", null, ItemExtensionGUI::new, ItemExtension.class)); + ModElementType.KEYBIND = register(new ModElementType<>("keybind", 'k', KeyBindGUI::new, KeyBinding.class)); + ModElementType.LIVINGENTITY = register(new ModElementType<>("livingentity", 'e', LivingEntityGUI::new, LivingEntity.class)); + ModElementType.LOOTTABLE = register(new ModElementType<>("loottable", 'l', LootTableGUI::new, LootTable.class)); + ModElementType.MUSICDISC = register(new ModElementType<>("musicdisc", 'x', MusicDiscGUI::new, MusicDisc.class)); + ModElementType.OVERLAY = register(new ModElementType<>("overlay", 'v', OverlayGUI::new, Overlay.class)); + ModElementType.PAINTING = register(new ModElementType<>("painting", null, PaintingGUI::new, Painting.class)); + ModElementType.PARTICLE = register(new ModElementType<>("particle", 'y', ParticleGUI::new, Particle.class)); + ModElementType.PLANT = register(new ModElementType<>("plant", 'n', PlantGUI::new, Plant.class)); + ModElementType.POTION = register(new ModElementType<>("potion", 'z', PotionGUI::new, Potion.class)); + ModElementType.POTIONEFFECT = register(new ModElementType<>("potioneffect", null, PotionEffectGUI::new, PotionEffect.class)); + ModElementType.PROCEDURE = register(new ModElementType<>("procedure", 'p', ProcedureGUI::new, Procedure.class)); + ModElementType.PROJECTILE = register(new ModElementType<>("projectile", 'q', ProjectileGUI::new, Projectile.class)); + ModElementType.RECIPE = register(new ModElementType<>("recipe", 'r', RecipeGUI::new, Recipe.class)); + ModElementType.STRUCTURE = register(new ModElementType<>("structure", 's', StructureGUI::new, Structure.class)); + ModElementType.TAB = register(new ModElementType<>("tab", 'w', TabGUI::new, Tab.class)); + ModElementType.TAG = register(new ModElementType<>("tag", 'j', TagGUI::new, Tag.class)); + ModElementType.TOOL = register(new ModElementType<>("tool", 't', ToolGUI::new, Tool.class)); + ModElementType.VILLAGERPROFESSION = register(new ModElementType<>("villagerprofession", null, VillagerProfessionGUI::new, VillagerProfession.class)); + ModElementType.VILLAGERTRADE = register(new ModElementType<>("villagertrade", null, VillagerTradeGUI::new, VillagerTrade.class)); // Unregistered type used to mask legacy removed mod element types - ModElementType.UNKNOWN = new ModElementType<>("unknown", null, BaseType.OTHER, (mc, me, e) -> null, GeneratableElement.Unknown.class); + ModElementType.UNKNOWN = new ModElementType<>("unknown", null, (mc, me, e) -> null, GeneratableElement.Unknown.class); //@formatter:on } diff --git a/src/main/java/net/mcreator/element/converter/ConverterRegistry.java b/src/main/java/net/mcreator/element/converter/ConverterRegistry.java index 6877c4c6cbe..8b601653702 100644 --- a/src/main/java/net/mcreator/element/converter/ConverterRegistry.java +++ b/src/main/java/net/mcreator/element/converter/ConverterRegistry.java @@ -23,6 +23,7 @@ import net.mcreator.element.converter.v2019_5.RecipeTypeConverter; import net.mcreator.element.converter.v2020_1.AchievementFixer; import net.mcreator.element.converter.v2020_2.GUIBindingInverter; +import net.mcreator.element.converter.v2021_1.LegacyDimensionProcedureRemover; import net.mcreator.element.converter.v2020_3.OpenGUIProcedureDepFixer; import net.mcreator.element.converter.v2020_3.ProcedureEntityDepFixer; import net.mcreator.element.converter.v2020_4.BiomeSpawnListConverter; @@ -44,10 +45,7 @@ import net.mcreator.element.converter.v2023_2.BlockOreReplacementBlocksFixer; import net.mcreator.element.converter.v2023_2.ExplodeProcedureConverter; import net.mcreator.element.converter.v2023_2.PaintingFieldsFixer; -import net.mcreator.element.converter.v2023_3.HugeFungusFeatureConverter; -import net.mcreator.element.converter.v2023_3.MaterialProcedureConverter; -import net.mcreator.element.converter.v2023_3.PlantGenerationTypeConverter; -import net.mcreator.element.converter.v2023_3.ProcedureDamageSourceFixer; +import net.mcreator.element.converter.v2023_3.*; import net.mcreator.element.converter.v2023_4.*; import java.util.HashMap; @@ -109,7 +107,8 @@ public class ConverterRegistry { put(ModElementType.LIVINGENTITY, List.of( new EntityTexturesConverter(), new EntitiesRangedAttackConverter(), - new WaterEntitiesConverter() + new WaterEntitiesConverter(), + new EntityGlowLayerConverter() )); put(ModElementType.OVERLAY, List.of( new OverlayCoordinateConverter(), @@ -137,6 +136,7 @@ public class ConverterRegistry { new EffectTextureConverter() )); put(ModElementType.PROCEDURE, List.of( + new LegacyDimensionProcedureRemover(), new ProcedureEntityDepFixer(), new OpenGUIProcedureDepFixer(), new ProcedureGlobalTriggerFixer(), @@ -152,6 +152,7 @@ public class ConverterRegistry { new ExplodeProcedureConverter(), new MaterialProcedureConverter(), new ProcedureDamageSourceFixer(), + new LegacyGameModeConverter(), new ProcedureArrowProjectileFixer() )); put(ModElementType.RECIPE, List.of( @@ -168,7 +169,8 @@ public class ConverterRegistry { new FeatureDimensionRestrictionConverter() )); put(ModElementType.STRUCTURE, List.of( - new StructureToFeatureConverter() + new StructureToFeatureConverter(), + new StructureIgnoredBlocksConverter() )); put(ModElementType.MUSICDISC, List.of( new SpecialInformationConverter(), diff --git a/src/main/java/net/mcreator/element/converter/ConverterUtils.java b/src/main/java/net/mcreator/element/converter/ConverterUtils.java index d02eeaea943..3a95b9c7ddf 100644 --- a/src/main/java/net/mcreator/element/converter/ConverterUtils.java +++ b/src/main/java/net/mcreator/element/converter/ConverterUtils.java @@ -20,6 +20,7 @@ package net.mcreator.element.converter; import net.mcreator.element.GeneratableElement; +import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.FolderElement; import net.mcreator.workspace.elements.ModElement; import org.apache.logging.log4j.LogManager; @@ -62,4 +63,13 @@ public static void convertElementToDifferentType(IConverter converter, ModElemen } } + public static String findSuitableModElementName(Workspace workspace, String desiredName) { + if (!workspace.containsModElement(desiredName)) + return desiredName; + int i = 1; + while (workspace.containsModElement(desiredName + i)) + i++; + return desiredName + i; + } + } diff --git a/src/main/java/net/mcreator/element/converter/v2021_1/LegacyDimensionProcedureRemover.java b/src/main/java/net/mcreator/element/converter/v2021_1/LegacyDimensionProcedureRemover.java new file mode 100644 index 00000000000..f3cd2d5aa3d --- /dev/null +++ b/src/main/java/net/mcreator/element/converter/v2021_1/LegacyDimensionProcedureRemover.java @@ -0,0 +1,82 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.element.converter.v2021_1; + +import net.mcreator.element.converter.ProcedureConverter; +import net.mcreator.element.types.Procedure; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.StringReader; +import java.io.StringWriter; +import java.util.Arrays; +import java.util.List; + +public class LegacyDimensionProcedureRemover extends ProcedureConverter { + + // Dimensions no longer have numerical IDs, so there is no conversion route but to use placeholder value of 0 in those cases + private static final String PLACEHOLDER_BLOCK = "0"; + + private static final List DIMENSION_ID_BLOCKS = Arrays.asList("entity_dimension_id", + "world_data_dimensionid", "get_dimensionid"); + + @Override public int getVersionConvertingTo() { + return 15; + } + + @Override protected String fixXML(Procedure procedure, String xml) throws Exception { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(new InputSource(new StringReader(xml))); + doc.getDocumentElement().normalize(); + + NodeList nodeList = doc.getElementsByTagName("block"); + for (int i = 0; i < nodeList.getLength(); i++) { + Element element = (Element) nodeList.item(i); + if (DIMENSION_ID_BLOCKS.contains(element.getAttribute("type"))) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document newElementDoc = builder.parse(new InputSource(new StringReader(PLACEHOLDER_BLOCK))); + Element newElement = newElementDoc.getDocumentElement(); + Node importedNode = doc.importNode(newElement, true); + Node clonedNode = doc.adoptNode(importedNode); + Element parentElement = (Element) element.getParentNode(); + parentElement.replaceChild(clonedNode, element); + } + } + + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + StringWriter writer = new StringWriter(); + transformer.transform(new DOMSource(doc), new StreamResult(writer)); + + return writer.getBuffer().toString(); + } + +} diff --git a/src/main/java/net/mcreator/element/converter/v2021_2/PotionToEffectConverter.java b/src/main/java/net/mcreator/element/converter/v2021_2/PotionToEffectConverter.java index 9fc318f2212..214592d6b43 100644 --- a/src/main/java/net/mcreator/element/converter/v2021_2/PotionToEffectConverter.java +++ b/src/main/java/net/mcreator/element/converter/v2021_2/PotionToEffectConverter.java @@ -23,6 +23,7 @@ import com.google.gson.JsonElement; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; +import net.mcreator.element.converter.ConverterUtils; import net.mcreator.element.converter.IConverter; import net.mcreator.element.parts.EffectEntry; import net.mcreator.element.types.Potion; @@ -48,67 +49,66 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, String originalName = input.getModElement().getName(); - if (workspace.getModElementByName(originalName + "PotionEffect") == null) { - try { - String displayName = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject().get("name") + try { + String displayName = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject().get("name") + .getAsString(); + + if (displayName.isEmpty()) + displayName = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject().get("effectName") .getAsString(); - if (displayName.isEmpty()) - displayName = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject() - .get("effectName").getAsString(); - - if (displayName.isEmpty()) - displayName = originalName; - - potion.potionName = displayName; - potion.splashName = "Splash " + displayName; - potion.lingeringName = "Lingering " + displayName; - potion.arrowName = "Arrow of " + displayName; - - potion.effects = new ArrayList<>(); - Potion.CustomEffectEntry effectEntry = new Potion.CustomEffectEntry(); - effectEntry.effect = new EffectEntry(workspace, "CUSTOM:" + potion.getModElement().getName()); - effectEntry.amplifier = 0; - effectEntry.duration = 3600; - effectEntry.ambient = false; - effectEntry.showParticles = true; - potion.effects.add(effectEntry); - - workspace.getModElementManager().storeModElementPicture(potion); - workspace.getGenerator().generateElement(potion); - workspace.getModElementManager().storeModElement(potion); - - PotionEffect potionEffect = new Gson().fromJson(jsonElementInput.getAsJsonObject().get("definition"), - PotionEffect.class); - - // Pre-update for FV31 - new texture types - try { - FileIO.copyFile(workspace.getFolderManager() - .getTextureFile(FilenameUtilsPatched.removeExtension(potionEffect.icon), TextureType.OTHER), - workspace.getFolderManager() - .getTextureFile(FilenameUtilsPatched.removeExtension(potionEffect.icon), - TextureType.EFFECT)); - } catch (Exception e) { - LOG.warn("Failed to copy image for potion effect " + potionEffect.getModElement().getType() + ": " - + e.getMessage()); - } - - potionEffect.setModElement( - new ModElement(workspace, originalName + "PotionEffect", ModElementType.POTIONEFFECT)); - - potionEffect.getModElement() - .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); - - // for backwards game saves compatibility - potionEffect.getModElement().setRegistryName(input.getModElement().getRegistryName()); - - workspace.getModElementManager().storeModElementPicture(potionEffect); - workspace.addModElement(potionEffect.getModElement()); - workspace.getGenerator().generateElement(potionEffect); - workspace.getModElementManager().storeModElement(potionEffect); + if (displayName.isEmpty()) + displayName = originalName; + + potion.potionName = displayName; + potion.splashName = "Splash " + displayName; + potion.lingeringName = "Lingering " + displayName; + potion.arrowName = "Arrow of " + displayName; + + potion.effects = new ArrayList<>(); + Potion.CustomEffectEntry effectEntry = new Potion.CustomEffectEntry(); + effectEntry.effect = new EffectEntry(workspace, "CUSTOM:" + potion.getModElement().getName()); + effectEntry.amplifier = 0; + effectEntry.duration = 3600; + effectEntry.ambient = false; + effectEntry.showParticles = true; + potion.effects.add(effectEntry); + + workspace.getModElementManager().storeModElementPicture(potion); + workspace.getGenerator().generateElement(potion); + workspace.getModElementManager().storeModElement(potion); + + PotionEffect potionEffect = new Gson().fromJson(jsonElementInput.getAsJsonObject().get("definition"), + PotionEffect.class); + + // Pre-update for FV31 - new texture types + try { + FileIO.copyFile(workspace.getFolderManager() + .getTextureFile(FilenameUtilsPatched.removeExtension(potionEffect.icon), TextureType.OTHER), + workspace.getFolderManager() + .getTextureFile(FilenameUtilsPatched.removeExtension(potionEffect.icon), + TextureType.EFFECT)); } catch (Exception e) { - LOG.warn("Failed to update potion to new format", e); + LOG.warn("Failed to copy image for potion effect " + potionEffect.getModElement().getType() + ": " + + e.getMessage()); } + + potionEffect.setModElement(new ModElement(workspace, + ConverterUtils.findSuitableModElementName(workspace, originalName + "PotionEffect"), + ModElementType.POTIONEFFECT)); + + potionEffect.getModElement() + .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); + + // for backwards game saves compatibility + potionEffect.getModElement().setRegistryName(input.getModElement().getRegistryName()); + + workspace.getModElementManager().storeModElementPicture(potionEffect); + workspace.addModElement(potionEffect.getModElement()); + workspace.getGenerator().generateElement(potionEffect); + workspace.getModElementManager().storeModElement(potionEffect); + } catch (Exception e) { + LOG.warn("Failed to update potion to new format", e); } return potion; diff --git a/src/main/java/net/mcreator/element/converter/v2022_2/EntityTexturesConverter.java b/src/main/java/net/mcreator/element/converter/v2022_2/EntityTexturesConverter.java index cf4f7dd6d35..4b360cad3c6 100644 --- a/src/main/java/net/mcreator/element/converter/v2022_2/EntityTexturesConverter.java +++ b/src/main/java/net/mcreator/element/converter/v2022_2/EntityTexturesConverter.java @@ -20,6 +20,7 @@ package net.mcreator.element.converter.v2022_2; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import net.mcreator.element.GeneratableElement; import net.mcreator.element.converter.IConverter; import net.mcreator.element.types.LivingEntity; @@ -27,8 +28,13 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.workspace.Workspace; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class EntityTexturesConverter implements IConverter { + + private static final Logger LOG = LogManager.getLogger(EntityTexturesConverter.class); + @Override public GeneratableElement convert(Workspace workspace, GeneratableElement input, JsonElement jsonElementInput) { LivingEntity entity = (LivingEntity) input; @@ -39,12 +45,20 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, .getTextureFile(FilenameUtilsPatched.removeExtension(entity.mobModelTexture), TextureType.ENTITY)); - if (entity.mobModelGlowTexture != null && !entity.mobModelGlowTexture.isEmpty()) { - FileIO.copyFile(workspace.getFolderManager() - .getTextureFile(FilenameUtilsPatched.removeExtension(entity.mobModelGlowTexture), - TextureType.OTHER), workspace.getFolderManager() - .getTextureFile(FilenameUtilsPatched.removeExtension(entity.mobModelGlowTexture), - TextureType.ENTITY)); + try { + JsonObject jsonObject = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject(); + if (jsonObject.get("mobModelGlowTexture") != null) { + String glowTexture = jsonObject.get("mobModelGlowTexture").getAsString(); + if (!glowTexture.isEmpty()) { + FileIO.copyFile(workspace.getFolderManager() + .getTextureFile(FilenameUtilsPatched.removeExtension(glowTexture), TextureType.OTHER), + workspace.getFolderManager() + .getTextureFile(FilenameUtilsPatched.removeExtension(glowTexture), + TextureType.ENTITY)); + } + } + } catch (Exception e) { + LOG.warn("Failed to migrate entity glow texture", e); } return entity; @@ -53,4 +67,5 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, @Override public int getVersionConvertingTo() { return 31; } + } diff --git a/src/main/java/net/mcreator/element/converter/v2022_2/ItemDispenseBehaviorToItemExtensionConverter.java b/src/main/java/net/mcreator/element/converter/v2022_2/ItemDispenseBehaviorToItemExtensionConverter.java index 96e31e23faa..1fb585ff280 100644 --- a/src/main/java/net/mcreator/element/converter/v2022_2/ItemDispenseBehaviorToItemExtensionConverter.java +++ b/src/main/java/net/mcreator/element/converter/v2022_2/ItemDispenseBehaviorToItemExtensionConverter.java @@ -23,6 +23,7 @@ import com.google.gson.JsonObject; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; +import net.mcreator.element.converter.ConverterUtils; import net.mcreator.element.converter.IConverter; import net.mcreator.element.parts.MItemBlock; import net.mcreator.element.parts.procedure.Procedure; @@ -41,51 +42,46 @@ public class ItemDispenseBehaviorToItemExtensionConverter implements IConverter public GeneratableElement convert(Workspace workspace, GeneratableElement input, JsonElement jsonElementInput) { try { String originalName = input.getModElement().getName(); + JsonObject item = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); + if (item.get("hasDispenseBehavior") != null && item.get("hasDispenseBehavior").getAsBoolean()) { + ItemExtension itemExtension; - if (workspace.getModElementByName(originalName + "Extension") == null) { + for (ModElement me : workspace.getModElements().stream() + .filter(me -> me.getType() == ModElementType.ITEMEXTENSION).toList()) { + itemExtension = (ItemExtension) me.getGeneratableElement(); + if (itemExtension != null && itemExtension.item.equals( + new MItemBlock(workspace, item.get("name").getAsString()))) { + itemExtension.hasDispenseBehavior = true; - JsonObject item = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); - if (item.get("hasDispenseBehavior") != null && item.get("hasDispenseBehavior").getAsBoolean()) { - ItemExtension itemExtension; - - for (ModElement me : workspace.getModElements().stream() - .filter(me -> me.getType() == ModElementType.ITEMEXTENSION).toList()) { - itemExtension = (ItemExtension) me.getGeneratableElement(); - if (itemExtension != null && itemExtension.item.equals( - new MItemBlock(workspace, item.get("name").getAsString()))) { - itemExtension.hasDispenseBehavior = true; - - if (item.get("dispenseSuccessCondition") != null) - itemExtension.dispenseSuccessCondition = new Procedure( - item.get("dispenseSuccessCondition").getAsJsonObject().get("name") - .getAsString()); - if (item.get("dispenseResultItemstack") != null) - itemExtension.dispenseResultItemstack = new Procedure( - item.get("dispenseResultItemstack").getAsJsonObject().get("name") - .getAsString()); - return input; - } + if (item.get("dispenseSuccessCondition") != null) + itemExtension.dispenseSuccessCondition = new Procedure( + item.get("dispenseSuccessCondition").getAsJsonObject().get("name").getAsString()); + if (item.get("dispenseResultItemstack") != null) + itemExtension.dispenseResultItemstack = new Procedure( + item.get("dispenseResultItemstack").getAsJsonObject().get("name").getAsString()); + return input; } + } - itemExtension = new ItemExtension( - new ModElement(workspace, originalName + "Extension", ModElementType.ITEMEXTENSION)); + itemExtension = new ItemExtension(new ModElement(workspace, + ConverterUtils.findSuitableModElementName(workspace, originalName + "Extension"), + ModElementType.ITEMEXTENSION)); - itemExtension.item = new MItemBlock(workspace, "CUSTOM:" + input.getModElement().getName()); - itemExtension.hasDispenseBehavior = item.get("hasDispenseBehavior").getAsBoolean(); - if (item.get("dispenseSuccessCondition") != null) - itemExtension.dispenseSuccessCondition = new Procedure( - item.get("dispenseSuccessCondition").getAsJsonObject().get("name").getAsString()); - if (item.get("dispenseResultItemstack") != null) - itemExtension.dispenseResultItemstack = new Procedure( - item.get("dispenseResultItemstack").getAsJsonObject().get("name").getAsString()); + itemExtension.item = new MItemBlock(workspace, "CUSTOM:" + input.getModElement().getName()); + itemExtension.hasDispenseBehavior = item.get("hasDispenseBehavior").getAsBoolean(); + if (item.get("dispenseSuccessCondition") != null) + itemExtension.dispenseSuccessCondition = new Procedure( + item.get("dispenseSuccessCondition").getAsJsonObject().get("name").getAsString()); + if (item.get("dispenseResultItemstack") != null) + itemExtension.dispenseResultItemstack = new Procedure( + item.get("dispenseResultItemstack").getAsJsonObject().get("name").getAsString()); - itemExtension.getModElement() - .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); - workspace.getModElementManager().storeModElementPicture(itemExtension); - workspace.addModElement(itemExtension.getModElement()); - workspace.getGenerator().generateElement(itemExtension); - workspace.getModElementManager().storeModElement(itemExtension); - } + itemExtension.getModElement() + .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); + workspace.getModElementManager().storeModElementPicture(itemExtension); + workspace.addModElement(itemExtension.getModElement()); + workspace.getGenerator().generateElement(itemExtension); + workspace.getModElementManager().storeModElement(itemExtension); } } catch (Exception e) { LOG.warn("Failed to update item to new format", e); diff --git a/src/main/java/net/mcreator/element/converter/v2023_1/FluidGenToFeatureConverter.java b/src/main/java/net/mcreator/element/converter/v2023_1/FluidGenToFeatureConverter.java index 623bc9b21c7..1450c48ad66 100644 --- a/src/main/java/net/mcreator/element/converter/v2023_1/FluidGenToFeatureConverter.java +++ b/src/main/java/net/mcreator/element/converter/v2023_1/FluidGenToFeatureConverter.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; +import net.mcreator.element.converter.ConverterUtils; import net.mcreator.element.converter.IConverter; import net.mcreator.element.parts.BiomeEntry; import net.mcreator.element.parts.procedure.Procedure; @@ -44,89 +45,88 @@ public class FluidGenToFeatureConverter implements IConverter { public GeneratableElement convert(Workspace workspace, GeneratableElement input, JsonElement jsonElementInput) { try { String modElementName = input.getModElement().getName(); + JsonObject fluid = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); - if (workspace.getModElementByName(modElementName + "Feature") == null) { - JsonObject fluid = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); + // If the list of restriction dimensions is empty, there's no feature to convert + if (fluid.get("spawnWorldTypes") != null && !fluid.getAsJsonArray("spawnWorldTypes").isEmpty()) { + Feature feature = new Feature(new ModElement(workspace, + ConverterUtils.findSuitableModElementName(workspace, modElementName + "Feature"), + ModElementType.FEATURE)); - // If the list of restriction dimensions is empty, there's no feature to convert - if (fluid.get("spawnWorldTypes") != null && !fluid.getAsJsonArray("spawnWorldTypes").isEmpty()) { - Feature feature = new Feature( - new ModElement(workspace, modElementName + "Feature", ModElementType.FEATURE)); - - int rarity = 5; - if (fluid.get("frequencyOnChunks") != null) { - rarity = fluid.get("frequencyOnChunks").getAsInt(); - } - - feature.generationStep = "LAKES"; + int rarity = 5; + if (fluid.get("frequencyOnChunks") != null) { + rarity = fluid.get("frequencyOnChunks").getAsInt(); + } - if (fluid.get("restrictionBiomes") != null && !fluid.getAsJsonArray("restrictionBiomes") - .isEmpty()) { - fluid.getAsJsonArray("restrictionBiomes").iterator().forEachRemaining( - e -> feature.restrictionBiomes.add( - new BiomeEntry(workspace, e.getAsJsonObject().get("value").getAsString()))); - } else if (fluid.get("spawnWorldTypes") != null) { - JsonArray spawnWorldTypes = fluid.get("spawnWorldTypes").getAsJsonArray(); - if (spawnWorldTypes.size() == 1) { - String spawnWorldType = spawnWorldTypes.get(0).getAsString(); - if (spawnWorldType.equals("Surface")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_overworld")); - } else if (spawnWorldType.equals("Nether")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_nether")); - } else if (spawnWorldType.equals("End")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_end")); - } else if (spawnWorldType.startsWith("CUSTOM:")) { - ModElement modElement = workspace.getModElementByName( - spawnWorldType.replaceFirst("CUSTOM:", "")); + feature.generationStep = "LAKES"; + + if (fluid.get("restrictionBiomes") != null && !fluid.getAsJsonArray("restrictionBiomes").isEmpty()) { + fluid.getAsJsonArray("restrictionBiomes").iterator().forEachRemaining( + e -> feature.restrictionBiomes.add( + new BiomeEntry(workspace, e.getAsJsonObject().get("value").getAsString()))); + } else if (fluid.get("spawnWorldTypes") != null) { + JsonArray spawnWorldTypes = fluid.get("spawnWorldTypes").getAsJsonArray(); + if (spawnWorldTypes.size() == 1) { + String spawnWorldType = spawnWorldTypes.get(0).getAsString(); + if (spawnWorldType.equals("Surface")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_overworld")); + } else if (spawnWorldType.equals("Nether")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_nether")); + } else if (spawnWorldType.equals("End")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_end")); + } else if (spawnWorldType.startsWith("CUSTOM:")) { + ModElement modElement = workspace.getModElementByName( + spawnWorldType.replaceFirst("CUSTOM:", "")); + if (modElement != null) { GeneratableElement generatableElement = modElement.getGeneratableElement(); if (generatableElement instanceof Dimension dimension) { feature.restrictionBiomes.addAll(dimension.biomesInDimension); } } } - } else { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_overworld")); - } - - if (fluid.get("generateCondition") != null) { - feature.generateCondition = new Procedure( - fluid.get("generateCondition").getAsJsonObject().get("name").getAsString()); } + } else { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_overworld")); + } - feature.featurexml = """ - - - CUSTOM:%s - Blocks.AIR - - %d - - - 0 - 256 - - 32DOWN - - - - - """.formatted( - modElementName, rarity); - - feature.getModElement() - .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); - workspace.getModElementManager().storeModElementPicture(feature); - workspace.addModElement(feature.getModElement()); - workspace.getGenerator().generateElement(feature); - workspace.getModElementManager().storeModElement(feature); - - // If porting 1.19.2 FG workspace, there may be biome modifier present that break workspaces - // 2022.3 does not cache files to remove yet, so we need to do a hacky removal here - // Fixes #3641 - new File(workspace.getGenerator().getModDataRoot(), - "forge/biome_modifier/" + input.getModElement().getRegistryName() - + "_biome_modifier.json").delete(); + if (fluid.get("generateCondition") != null) { + feature.generateCondition = new Procedure( + fluid.get("generateCondition").getAsJsonObject().get("name").getAsString()); } + + feature.featurexml = """ + + + CUSTOM:%s + Blocks.AIR + + %d + + + 0 + 256 + + 32DOWN + + + + + """.formatted( + modElementName, rarity); + + feature.getModElement() + .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); + workspace.getModElementManager().storeModElementPicture(feature); + workspace.addModElement(feature.getModElement()); + workspace.getGenerator().generateElement(feature); + workspace.getModElementManager().storeModElement(feature); + + // If porting 1.19.2 FG workspace, there may be biome modifier present that break workspaces + // 2022.3 does not cache files to remove yet, so we need to do a hacky removal here + // Fixes #3641 + new File(workspace.getGenerator().getModDataRoot(), + "forge/biome_modifier/" + input.getModElement().getRegistryName() + + "_biome_modifier.json").delete(); } } catch (Exception e) { LOG.warn("Failed to move fluid generation settings to feature mod element", e); diff --git a/src/main/java/net/mcreator/element/converter/v2023_3/LegacyGameModeConverter.java b/src/main/java/net/mcreator/element/converter/v2023_3/LegacyGameModeConverter.java new file mode 100644 index 00000000000..07ca3c3f78a --- /dev/null +++ b/src/main/java/net/mcreator/element/converter/v2023_3/LegacyGameModeConverter.java @@ -0,0 +1,35 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.element.converter.v2023_3; + +import net.mcreator.element.converter.ProcedureConverter; +import net.mcreator.element.types.Procedure; + +public class LegacyGameModeConverter extends ProcedureConverter { + + @Override public int getVersionConvertingTo() { + return 46; + } + + @Override protected String fixXML(Procedure procedure, String xml) { + return xml.replace("NOT_SET", "SURVIVAL"); + } + +} diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/BlockFeatureDimensionRestrictionConverter.java b/src/main/java/net/mcreator/element/converter/v2023_4/BlockFeatureDimensionRestrictionConverter.java index e2261435ea2..58b649d976c 100644 --- a/src/main/java/net/mcreator/element/converter/v2023_4/BlockFeatureDimensionRestrictionConverter.java +++ b/src/main/java/net/mcreator/element/converter/v2023_4/BlockFeatureDimensionRestrictionConverter.java @@ -62,9 +62,11 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, } else if (spawnWorldType.startsWith("CUSTOM:")) { ModElement modElement = workspace.getModElementByName( spawnWorldType.replaceFirst("CUSTOM:", "")); - GeneratableElement generatableElement = modElement.getGeneratableElement(); - if (generatableElement instanceof Dimension dimension) { - restrictionBiomes.addAll(dimension.biomesInDimension); + if (modElement != null) { + GeneratableElement generatableElement = modElement.getGeneratableElement(); + if (generatableElement instanceof Dimension dimension) { + restrictionBiomes.addAll(dimension.biomesInDimension); + } } } } diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/BlockGenerationConditionRemover.java b/src/main/java/net/mcreator/element/converter/v2023_4/BlockGenerationConditionRemover.java index c0cf5c1fb25..7093056ffa1 100644 --- a/src/main/java/net/mcreator/element/converter/v2023_4/BlockGenerationConditionRemover.java +++ b/src/main/java/net/mcreator/element/converter/v2023_4/BlockGenerationConditionRemover.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; +import net.mcreator.element.converter.ConverterUtils; import net.mcreator.element.converter.IConverter; import net.mcreator.element.parts.BiomeEntry; import net.mcreator.element.parts.MItemBlock; @@ -48,79 +49,80 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, Block block = (Block) input; try { String modElementName = input.getModElement().getName(); - if (workspace.getModElementByName(modElementName + "Feature") == null) { - JsonObject definition = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); - - // Check if we need to convert the element - if (definition.has("spawnWorldTypes") && !definition.getAsJsonArray("spawnWorldTypes").isEmpty() - && definition.has("generateCondition")) { - Feature feature = new Feature( - new ModElement(workspace, modElementName + "Feature", ModElementType.FEATURE)); - feature.generationStep = "UNDERGROUND_ORES"; - - JsonArray spawnWorldTypes = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject() - .get("spawnWorldTypes").getAsJsonArray(); - if (definition.has("restrictionBiomes") && !definition.getAsJsonArray("restrictionBiomes") - .isEmpty()) { // Copy the restriction biomes if there are any - definition.getAsJsonArray("restrictionBiomes").iterator().forEachRemaining( - e -> feature.restrictionBiomes.add( - new BiomeEntry(workspace, e.getAsJsonObject().get("value").getAsString()))); - } else if (spawnWorldTypes.size() - == 1) { // If there are no restriction biomes, consider restiction dimensions - String spawnWorldType = spawnWorldTypes.get(0).getAsString(); - if (spawnWorldType.equals("Surface")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_overworld")); - } else if (spawnWorldType.equals("Nether")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_nether")); - } else if (spawnWorldType.equals("End")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_end")); - } else if (spawnWorldType.startsWith("CUSTOM:")) { - ModElement modElement = workspace.getModElementByName( - spawnWorldType.replaceFirst("CUSTOM:", "")); + JsonObject definition = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); + + // Check if we need to convert the element + if (definition.has("spawnWorldTypes") && !definition.getAsJsonArray("spawnWorldTypes").isEmpty() + && definition.has("generateCondition")) { + Feature feature = new Feature(new ModElement(workspace, + ConverterUtils.findSuitableModElementName(workspace, modElementName + "Feature"), + ModElementType.FEATURE)); + feature.generationStep = "UNDERGROUND_ORES"; + + JsonArray spawnWorldTypes = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject() + .get("spawnWorldTypes").getAsJsonArray(); + if (definition.has("restrictionBiomes") && !definition.getAsJsonArray("restrictionBiomes") + .isEmpty()) { // Copy the restriction biomes if there are any + definition.getAsJsonArray("restrictionBiomes").iterator().forEachRemaining( + e -> feature.restrictionBiomes.add( + new BiomeEntry(workspace, e.getAsJsonObject().get("value").getAsString()))); + } else if (spawnWorldTypes.size() + == 1) { // If there are no restriction biomes, consider restiction dimensions + String spawnWorldType = spawnWorldTypes.get(0).getAsString(); + if (spawnWorldType.equals("Surface")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_overworld")); + } else if (spawnWorldType.equals("Nether")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_nether")); + } else if (spawnWorldType.equals("End")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_end")); + } else if (spawnWorldType.startsWith("CUSTOM:")) { + ModElement modElement = workspace.getModElementByName( + spawnWorldType.replaceFirst("CUSTOM:", "")); + if (modElement != null) { GeneratableElement generatableElement = modElement.getGeneratableElement(); if (generatableElement instanceof Dimension dimension) { feature.restrictionBiomes.addAll(dimension.biomesInDimension); } } } - - // Copy the generation condition - feature.generateCondition = new Procedure( - definition.getAsJsonObject("generateCondition").get("name").getAsString()); - - // Generate the feature XML - String placementType = block.generationShape.equals("UNIFORM") ? "uniform" : "triangular"; - - String oreXML = getOreXML(workspace, modElementName, block.frequencyOnChunk, block.blocksToReplace); - String placementXML = """ - - %d - - - - %d - %d - - - """.formatted(block.frequencyPerChunks, - placementType, block.minGenerateHeight, block.maxGenerateHeight); - feature.featurexml = """ - - %s - %s - """.formatted(oreXML, placementXML); - - feature.getModElement() - .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); - workspace.getModElementManager().storeModElementPicture(feature); - workspace.addModElement(feature.getModElement()); - workspace.getGenerator().generateElement(feature); - workspace.getModElementManager().storeModElement(feature); - - // Clear the restriction dimensions of the block, so that it doesn't generate anymore - definition.remove("spawnWorldTypes"); - definition.add("spawnWorldTypes", new JsonArray()); } + + // Copy the generation condition + feature.generateCondition = new Procedure( + definition.getAsJsonObject("generateCondition").get("name").getAsString()); + + // Generate the feature XML + String placementType = block.generationShape.equals("UNIFORM") ? "uniform" : "triangular"; + + String oreXML = getOreXML(workspace, modElementName, block.frequencyOnChunk, block.blocksToReplace); + String placementXML = """ + + %d + + + + %d + %d + + + """.formatted(block.frequencyPerChunks, + placementType, block.minGenerateHeight, block.maxGenerateHeight); + feature.featurexml = """ + + %s + %s + """.formatted(oreXML, placementXML); + + feature.getModElement() + .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); + workspace.getModElementManager().storeModElementPicture(feature); + workspace.addModElement(feature.getModElement()); + workspace.getGenerator().generateElement(feature); + workspace.getModElementManager().storeModElement(feature); + + // Clear the restriction dimensions of the block, so that it doesn't generate anymore + definition.remove("spawnWorldTypes"); + definition.add("spawnWorldTypes", new JsonArray()); } } catch (Exception e) { LOG.warn("Could not remove generation condition from block: " + input.getModElement().getName()); diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/EntityGlowLayerConverter.java b/src/main/java/net/mcreator/element/converter/v2023_4/EntityGlowLayerConverter.java new file mode 100644 index 00000000000..53a3b92361e --- /dev/null +++ b/src/main/java/net/mcreator/element/converter/v2023_4/EntityGlowLayerConverter.java @@ -0,0 +1,68 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.element.converter.v2023_4; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.mcreator.element.GeneratableElement; +import net.mcreator.element.converter.IConverter; +import net.mcreator.element.types.LivingEntity; +import net.mcreator.workspace.Workspace; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.ArrayList; + +public class EntityGlowLayerConverter implements IConverter { + + private static final Logger LOG = LogManager.getLogger(EntityGlowLayerConverter.class); + + @Override + public GeneratableElement convert(Workspace workspace, GeneratableElement input, JsonElement jsonElementInput) { + LivingEntity entity = (LivingEntity) input; + + try { + JsonObject jsonObject = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject(); + if (jsonObject.get("mobModelGlowTexture") != null) { + String glowTexture = jsonObject.get("mobModelGlowTexture").getAsString(); + if (!glowTexture.isEmpty()) { + LivingEntity.ModelLayerEntry glowLayer = new LivingEntity.ModelLayerEntry(); + glowLayer.setWorkspace(workspace); + glowLayer.model = "Default"; + glowLayer.texture = glowTexture; + glowLayer.glow = true; + glowLayer.condition = null; + + entity.modelLayers = new ArrayList<>(); + entity.modelLayers.add(glowLayer); + } + } + } catch (Exception e) { + LOG.warn("Failed to convert entity glow texture", e); + } + + return entity; + } + + @Override public int getVersionConvertingTo() { + return 57; + } + +} diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/FeatureDimensionRestrictionConverter.java b/src/main/java/net/mcreator/element/converter/v2023_4/FeatureDimensionRestrictionConverter.java index 0f557f7c887..c2c0400107f 100644 --- a/src/main/java/net/mcreator/element/converter/v2023_4/FeatureDimensionRestrictionConverter.java +++ b/src/main/java/net/mcreator/element/converter/v2023_4/FeatureDimensionRestrictionConverter.java @@ -62,9 +62,11 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, } else if (restrictionDimension.startsWith("CUSTOM:")) { ModElement modElement = workspace.getModElementByName( restrictionDimension.replaceFirst("CUSTOM:", "")); - GeneratableElement generatableElement = modElement.getGeneratableElement(); - if (generatableElement instanceof Dimension dimension) { - restrictionBiomes.addAll(dimension.biomesInDimension); + if (modElement != null) { + GeneratableElement generatableElement = modElement.getGeneratableElement(); + if (generatableElement instanceof Dimension dimension) { + restrictionBiomes.addAll(dimension.biomesInDimension); + } } } } diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/PlantGenerationConditionRemover.java b/src/main/java/net/mcreator/element/converter/v2023_4/PlantGenerationConditionRemover.java index 561a834f07e..11cb720e272 100644 --- a/src/main/java/net/mcreator/element/converter/v2023_4/PlantGenerationConditionRemover.java +++ b/src/main/java/net/mcreator/element/converter/v2023_4/PlantGenerationConditionRemover.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; +import net.mcreator.element.converter.ConverterUtils; import net.mcreator.element.converter.IConverter; import net.mcreator.element.parts.BiomeEntry; import net.mcreator.element.parts.procedure.Procedure; @@ -44,75 +45,76 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, Plant plant = (Plant) input; try { String modElementName = input.getModElement().getName(); - if (workspace.getModElementByName(modElementName + "Feature") == null) { - JsonObject definition = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); - - // Check if we need to convert the element - if (definition.has("spawnWorldTypes") && !definition.getAsJsonArray("spawnWorldTypes").isEmpty() - && definition.has("generateCondition")) { - Feature feature = new Feature( - new ModElement(workspace, modElementName + "Feature", ModElementType.FEATURE)); - feature.generationStep = "VEGETAL_DECORATION"; - - JsonArray spawnWorldTypes = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject() - .get("spawnWorldTypes").getAsJsonArray(); - if (definition.has("restrictionBiomes") && !definition.getAsJsonArray("restrictionBiomes") - .isEmpty()) { // Copy the restriction biomes if there are any - definition.getAsJsonArray("restrictionBiomes").iterator().forEachRemaining( - e -> feature.restrictionBiomes.add( - new BiomeEntry(workspace, e.getAsJsonObject().get("value").getAsString()))); - } else if (spawnWorldTypes.size() - == 1) { // If there are no restriction biomes, consider restiction dimensions - String spawnWorldType = spawnWorldTypes.get(0).getAsString(); - if (spawnWorldType.equals("Surface")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_overworld")); - } else if (spawnWorldType.equals("Nether")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_nether")); - } else if (spawnWorldType.equals("End")) { - feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_end")); - } else if (spawnWorldType.startsWith("CUSTOM:")) { - ModElement modElement = workspace.getModElementByName( - spawnWorldType.replaceFirst("CUSTOM:", "")); - GeneratableElement generatableElement = modElement.getGeneratableElement(); - if (generatableElement instanceof Dimension dimension) { - feature.restrictionBiomes.addAll(dimension.biomesInDimension); - } + JsonObject definition = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); + + // Check if we need to convert the element + if (definition.has("spawnWorldTypes") && !definition.getAsJsonArray("spawnWorldTypes").isEmpty() + && definition.has("generateCondition")) { + Feature feature = new Feature(new ModElement(workspace, + ConverterUtils.findSuitableModElementName(workspace, modElementName + "Feature"), + ModElementType.FEATURE)); + feature.generationStep = "VEGETAL_DECORATION"; + + JsonArray spawnWorldTypes = jsonElementInput.getAsJsonObject().get("definition").getAsJsonObject() + .get("spawnWorldTypes").getAsJsonArray(); + if (definition.has("restrictionBiomes") && !definition.getAsJsonArray("restrictionBiomes") + .isEmpty()) { // Copy the restriction biomes if there are any + definition.getAsJsonArray("restrictionBiomes").iterator().forEachRemaining( + e -> feature.restrictionBiomes.add( + new BiomeEntry(workspace, e.getAsJsonObject().get("value").getAsString()))); + } else if (spawnWorldTypes.size() + == 1) { // If there are no restriction biomes, consider restiction dimensions + String spawnWorldType = spawnWorldTypes.get(0).getAsString(); + if (spawnWorldType.equals("Surface")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_overworld")); + } else if (spawnWorldType.equals("Nether")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_nether")); + } else if (spawnWorldType.equals("End")) { + feature.restrictionBiomes.add(new BiomeEntry(workspace, "#is_end")); + } else if (spawnWorldType.startsWith("CUSTOM:")) { + ModElement modElement = workspace.getModElementByName( + spawnWorldType.replaceFirst("CUSTOM:", "")); + GeneratableElement generatableElement = modElement.getGeneratableElement(); + if (generatableElement instanceof Dimension dimension) { + feature.restrictionBiomes.addAll(dimension.biomesInDimension); } } - - // Copy the generation condition - feature.generateCondition = new Procedure( - definition.getAsJsonObject("generateCondition").get("name").getAsString()); - - // Plant parameters that affect generation - String plantType = plant.plantType; - String genType = plant.generationType; - boolean genAtAnyHeight = plant.generateAtAnyHeight; - boolean isRarer = plantType.equals("growapable") || ( - (plantType.equals("normal") || plantType.equals("double")) && genType.equals("Flower")); - boolean onMotionBlocking = plantType.equals("growapable") || ( - (plantType.equals("normal") || plantType.equals("double")) && genType.equals("Grass")); - - String patchXML = getPatchXML(plantType, plant.patchSize, modElementName); - String placementXML = getPlacementXML(plant.frequencyOnChunks, isRarer, genAtAnyHeight, - onMotionBlocking); - feature.featurexml = """ - - %s - %s - """.formatted(patchXML, placementXML); - - feature.getModElement() - .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); - workspace.getModElementManager().storeModElementPicture(feature); - workspace.addModElement(feature.getModElement()); - workspace.getGenerator().generateElement(feature); - workspace.getModElementManager().storeModElement(feature); - - // Clear the restriction dimensions of the plant, so that it doesn't generate anymore - definition.remove("spawnWorldTypes"); - definition.add("spawnWorldTypes", new JsonArray()); } + + // Copy the generation condition + feature.generateCondition = new Procedure( + definition.getAsJsonObject("generateCondition").get("name").getAsString()); + + // Plant parameters that affect generation + String plantType = plant.plantType; + String genType = plant.generationType; + boolean genAtAnyHeight = plant.generateAtAnyHeight; + boolean isRarer = + plantType.equals("growapable") || ((plantType.equals("normal") || plantType.equals("double")) + && genType.equals("Flower")); + boolean onMotionBlocking = + plantType.equals("growapable") || ((plantType.equals("normal") || plantType.equals("double")) + && genType.equals("Grass")); + + String patchXML = getPatchXML(plantType, plant.patchSize, modElementName); + String placementXML = getPlacementXML(plant.frequencyOnChunks, isRarer, genAtAnyHeight, + onMotionBlocking); + feature.featurexml = """ + + %s + %s + """.formatted(patchXML, placementXML); + + feature.getModElement() + .setParentFolder(FolderElement.dummyFromPath(input.getModElement().getFolderPath())); + workspace.getModElementManager().storeModElementPicture(feature); + workspace.addModElement(feature.getModElement()); + workspace.getGenerator().generateElement(feature); + workspace.getModElementManager().storeModElement(feature); + + // Clear the restriction dimensions of the plant, so that it doesn't generate anymore + definition.remove("spawnWorldTypes"); + definition.add("spawnWorldTypes", new JsonArray()); } } catch (Exception e) { LOG.warn("Could not remove generation condition from plant: " + input.getModElement().getName()); diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/ProcedureArrowProjectileFixer.java b/src/main/java/net/mcreator/element/converter/v2023_4/ProcedureArrowProjectileFixer.java index 1e40c6bd091..ebb78d8f397 100644 --- a/src/main/java/net/mcreator/element/converter/v2023_4/ProcedureArrowProjectileFixer.java +++ b/src/main/java/net/mcreator/element/converter/v2023_4/ProcedureArrowProjectileFixer.java @@ -50,8 +50,13 @@ public class ProcedureArrowProjectileFixer extends ProcedureConverter { String type = element.getAttribute("type"); if (type.equals("projectiles_arrow")) { Element field = XMLUtil.getFirstChildrenWithName(element, "field"); - if (field != null) - field.setTextContent(field.getTextContent() + "Projectile"); + if (field != null) { + String textContent = field.getTextContent(); + if (textContent.isBlank() || textContent.equals("Arrow") || textContent.equals("SpectralArrow")) + continue; + + field.setTextContent(textContent + "Projectile"); + } } } diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/RangedItemToProjectileAndItemConverter.java b/src/main/java/net/mcreator/element/converter/v2023_4/RangedItemToProjectileAndItemConverter.java index b209ad94562..9bb9de823f1 100644 --- a/src/main/java/net/mcreator/element/converter/v2023_4/RangedItemToProjectileAndItemConverter.java +++ b/src/main/java/net/mcreator/element/converter/v2023_4/RangedItemToProjectileAndItemConverter.java @@ -23,6 +23,7 @@ import com.google.gson.JsonObject; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; +import net.mcreator.element.converter.ConverterUtils; import net.mcreator.element.converter.IConverter; import net.mcreator.element.parts.MItemBlock; import net.mcreator.element.parts.ProjectileEntry; @@ -54,11 +55,12 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, try { JsonObject rangedItem = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); - Projectile projectile = new Projectile( - new ModElement(workspace, input.getModElement().getName() + "Projectile", - ModElementType.PROJECTILE)); + Projectile projectile = new Projectile(new ModElement(workspace, + ConverterUtils.findSuitableModElementName(workspace, + input.getModElement().getName() + "Projectile"), ModElementType.PROJECTILE)); - if (rangedItem.get("bulletItemTexture") != null) + if (rangedItem.get("bulletItemTexture") != null && !rangedItem.get("bulletItemTexture").getAsJsonObject() + .get("value").getAsString().isEmpty()) projectile.projectileItem = new MItemBlock(workspace, rangedItem.get("bulletItemTexture").getAsJsonObject().get("value").getAsString()); else if (rangedItem.get("ammoItem") != null && !rangedItem.get("ammoItem").getAsJsonObject().get("value") diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/StructureIgnoredBlocksConverter.java b/src/main/java/net/mcreator/element/converter/v2023_4/StructureIgnoredBlocksConverter.java new file mode 100644 index 00000000000..aae354b3f23 --- /dev/null +++ b/src/main/java/net/mcreator/element/converter/v2023_4/StructureIgnoredBlocksConverter.java @@ -0,0 +1,58 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.element.converter.v2023_4; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.mcreator.element.GeneratableElement; +import net.mcreator.element.converter.IConverter; +import net.mcreator.element.parts.MItemBlock; +import net.mcreator.element.types.Structure; +import net.mcreator.workspace.Workspace; + +import java.util.ArrayList; + +public class StructureIgnoredBlocksConverter implements IConverter { + + @Override + public GeneratableElement convert(Workspace workspace, GeneratableElement input, JsonElement jsonElementInput) { + Structure structure = (Structure) input; + structure.ignoredBlocks = new ArrayList<>(); + + JsonObject definition = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); + String ignoreBlocks = definition.has("ignoreBlocks") ? + definition.get("ignoreBlocks").getAsString() : + "STRUCTURE_BLOCK"; + switch (ignoreBlocks) { + case "STRUCTURE_BLOCK" -> structure.ignoredBlocks.add(new MItemBlock(workspace, "Blocks.STRUCTURE_BLOCK")); + case "AIR_AND_STRUCTURE_BLOCK" -> { + structure.ignoredBlocks.add(new MItemBlock(workspace, "Blocks.AIR")); + structure.ignoredBlocks.add(new MItemBlock(workspace, "Blocks.STRUCTURE_BLOCK")); + } + case "AIR" -> structure.ignoredBlocks.add(new MItemBlock(workspace, "Blocks.AIR")); + } + + return structure; + } + + @Override public int getVersionConvertingTo() { + return 56; + } +} diff --git a/src/main/java/net/mcreator/element/converter/v2023_4/StructureToFeatureConverter.java b/src/main/java/net/mcreator/element/converter/v2023_4/StructureToFeatureConverter.java index 856a3bb064e..ca75ffe64ed 100644 --- a/src/main/java/net/mcreator/element/converter/v2023_4/StructureToFeatureConverter.java +++ b/src/main/java/net/mcreator/element/converter/v2023_4/StructureToFeatureConverter.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; +import net.mcreator.element.converter.ConverterUtils; import net.mcreator.element.converter.IConverter; import net.mcreator.element.parts.BiomeEntry; import net.mcreator.element.parts.procedure.Procedure; @@ -42,14 +43,15 @@ public class StructureToFeatureConverter implements IConverter { @Override public GeneratableElement convert(Workspace workspace, GeneratableElement input, JsonElement jsonElementInput) { - // Notes: this not convert onStructureGenerated, onStructureGenerated procedure needs to be manually added to the condition procedure + // Note: onStructureGenerated procedure needs to be manually added to the condition procedure try { String modElementName = input.getModElement().getName(); JsonObject definition = jsonElementInput.getAsJsonObject().getAsJsonObject("definition"); - Feature feature = new Feature( - new ModElement(workspace, modElementName + "Feature", ModElementType.FEATURE)); + Feature feature = new Feature(new ModElement(workspace, + ConverterUtils.findSuitableModElementName(workspace, modElementName + "Feature"), + ModElementType.FEATURE)); if (definition.has("restrictionBiomes") && !definition.getAsJsonArray("restrictionBiomes") .isEmpty()) { // Copy the restriction biomes if there are any @@ -69,9 +71,11 @@ public GeneratableElement convert(Workspace workspace, GeneratableElement input, } else if (spawnWorldType.startsWith("CUSTOM:")) { ModElement modElement = workspace.getModElementByName( spawnWorldType.replaceFirst("CUSTOM:", "")); - GeneratableElement generatableElement = modElement.getGeneratableElement(); - if (generatableElement instanceof Dimension dimension) { - feature.restrictionBiomes.addAll(dimension.biomesInDimension); + if (modElement != null) { + GeneratableElement generatableElement = modElement.getGeneratableElement(); + if (generatableElement instanceof Dimension dimension) { + feature.restrictionBiomes.addAll(dimension.biomesInDimension); + } } } } @@ -173,10 +177,15 @@ private static String getPlacementXML(String surfaceDetectionTypeRaw, int spawnP StringBuilder xml = new StringBuilder(); int blocksToClose = 0; + if (spawnProbability <= 0) + spawnProbability = 1; + + int placementRarity = (int) Math.max(1, Math.round(1000000 / (double) spawnProbability)); + xml.append(""" %d - """.formatted((int) Math.round(1000000 / (double) spawnProbability))); + """.formatted(placementRarity)); blocksToClose++; if (minCountPerChunk != 1 || maxCountPerChunk != 1) { diff --git a/src/main/java/net/mcreator/element/parts/AchievementEntry.java b/src/main/java/net/mcreator/element/parts/AchievementEntry.java index 5d4e028077b..e2b8fa7741c 100644 --- a/src/main/java/net/mcreator/element/parts/AchievementEntry.java +++ b/src/main/java/net/mcreator/element/parts/AchievementEntry.java @@ -32,9 +32,7 @@ private AchievementEntry() { } public AchievementEntry(Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "achievements"), name); } public AchievementEntry(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/BiomeEntry.java b/src/main/java/net/mcreator/element/parts/BiomeEntry.java index cf4b6c47af6..4570f2791c3 100644 --- a/src/main/java/net/mcreator/element/parts/BiomeEntry.java +++ b/src/main/java/net/mcreator/element/parts/BiomeEntry.java @@ -32,9 +32,7 @@ private BiomeEntry() { } public BiomeEntry(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "biomes"), name); } public BiomeEntry(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/DamageTypeEntry.java b/src/main/java/net/mcreator/element/parts/DamageTypeEntry.java new file mode 100644 index 00000000000..0d7f9078e46 --- /dev/null +++ b/src/main/java/net/mcreator/element/parts/DamageTypeEntry.java @@ -0,0 +1,43 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.element.parts; + +import net.mcreator.generator.mapping.MappableElement; +import net.mcreator.generator.mapping.NameMapper; +import net.mcreator.minecraft.DataListEntry; +import net.mcreator.workspace.Workspace; + +import javax.annotation.Nonnull; + +public class DamageTypeEntry extends MappableElement { + + private DamageTypeEntry() { + super(new NameMapper(null, "damagesources")); + } + + public DamageTypeEntry(@Nonnull Workspace owner, String name) { + super(new NameMapper(owner, "damagesources"), name); + } + + public DamageTypeEntry(@Nonnull Workspace owner, DataListEntry name) { + this(owner, name.getName()); + } + +} diff --git a/src/main/java/net/mcreator/element/parts/EffectEntry.java b/src/main/java/net/mcreator/element/parts/EffectEntry.java index bcb63de5524..40a2388bb03 100644 --- a/src/main/java/net/mcreator/element/parts/EffectEntry.java +++ b/src/main/java/net/mcreator/element/parts/EffectEntry.java @@ -33,9 +33,7 @@ private EffectEntry() { } public EffectEntry(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "effects"), name); } public EffectEntry(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/Enchantment.java b/src/main/java/net/mcreator/element/parts/Enchantment.java index 3c5adbdc982..c6c96ed9879 100644 --- a/src/main/java/net/mcreator/element/parts/Enchantment.java +++ b/src/main/java/net/mcreator/element/parts/Enchantment.java @@ -32,9 +32,7 @@ private Enchantment() { } public Enchantment(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "enchantments"), name); } public Enchantment(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/EntityEntry.java b/src/main/java/net/mcreator/element/parts/EntityEntry.java index 66a9902908e..3c508aa42ac 100644 --- a/src/main/java/net/mcreator/element/parts/EntityEntry.java +++ b/src/main/java/net/mcreator/element/parts/EntityEntry.java @@ -32,9 +32,7 @@ private EntityEntry() { } public EntityEntry(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "entities"), name); } public EntityEntry(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/Fluid.java b/src/main/java/net/mcreator/element/parts/Fluid.java index d896a178c39..38a19aaf41d 100644 --- a/src/main/java/net/mcreator/element/parts/Fluid.java +++ b/src/main/java/net/mcreator/element/parts/Fluid.java @@ -32,9 +32,7 @@ private Fluid() { } public Fluid(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "fluids"), name); } public Fluid(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/IWorkspaceDependent.java b/src/main/java/net/mcreator/element/parts/IWorkspaceDependent.java index 7199c6457d5..70ebb84a93f 100644 --- a/src/main/java/net/mcreator/element/parts/IWorkspaceDependent.java +++ b/src/main/java/net/mcreator/element/parts/IWorkspaceDependent.java @@ -19,9 +19,18 @@ package net.mcreator.element.parts; +import net.mcreator.plugin.PluginLoader; +import net.mcreator.ui.MCreator; import net.mcreator.workspace.Workspace; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.annotation.Nullable; +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Map; +import java.util.function.Consumer; /** * Mod element parameters represented by instances of classes implementing this interface gather some used data @@ -30,6 +39,47 @@ */ public interface IWorkspaceDependent { + Logger LOG = LogManager.getLogger(IWorkspaceDependent.class); + void setWorkspace(@Nullable Workspace workspace); + @Nullable Workspace getWorkspace(); + + static void processWorkspaceDependentObjects(Object object, Consumer processor) { + if (object == null) + return; + + // Pass workspace if IWorkspaceDependent + if (object instanceof IWorkspaceDependent iws) + processor.accept(iws); + + // Then check if we can pass workspace to any of the children + if (object instanceof Iterable list) { + for (Object element : list) + processWorkspaceDependentObjects(element, processor); + } else if (object instanceof Map map) { + for (Object element : map.keySet()) + processWorkspaceDependentObjects(element, processor); + for (Object element : map.values()) + processWorkspaceDependentObjects(element, processor); + } else if (object.getClass().isArray()) { + int length = Array.getLength(object); + for (int i = 0; i < length; i++) + processWorkspaceDependentObjects(Array.get(object, i), processor); + } else if (object.getClass().getModule() == MCreator.class.getModule() + || PluginLoader.INSTANCE.getPluginModules().contains(object.getClass().getModule())) { + for (Field field : object.getClass().getDeclaredFields()) { + field.setAccessible(true); + if (!Modifier.isStatic(field.getModifiers()) && !Modifier.isTransient(field.getModifiers())) { + try { + processWorkspaceDependentObjects(field.get(object), processor); + } catch (Exception e) { + LOG.warn("Failed to pass workspace to field " + field.getName() + " of object " + + object.getClass().getSimpleName()); + } + } + } + } + } + } diff --git a/src/main/java/net/mcreator/element/parts/MItemBlock.java b/src/main/java/net/mcreator/element/parts/MItemBlock.java index 43d78507318..817946690e3 100644 --- a/src/main/java/net/mcreator/element/parts/MItemBlock.java +++ b/src/main/java/net/mcreator/element/parts/MItemBlock.java @@ -31,13 +31,7 @@ private MItemBlock() { } public MItemBlock(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); - } - - public boolean isEmpty() { - return value == null || value.isEmpty(); + super(new NameMapper(owner, "blocksitems"), name); } } diff --git a/src/main/java/net/mcreator/element/parts/Material.java b/src/main/java/net/mcreator/element/parts/Material.java index f5037590e45..8e4f15318fb 100644 --- a/src/main/java/net/mcreator/element/parts/Material.java +++ b/src/main/java/net/mcreator/element/parts/Material.java @@ -32,9 +32,7 @@ private Material() { } public Material(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "materials"), name); } public Material(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/Particle.java b/src/main/java/net/mcreator/element/parts/Particle.java index ee804d39b84..e951ba0f9af 100644 --- a/src/main/java/net/mcreator/element/parts/Particle.java +++ b/src/main/java/net/mcreator/element/parts/Particle.java @@ -32,9 +32,7 @@ private Particle() { } public Particle(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "particles"), name); } public Particle(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/ProfessionEntry.java b/src/main/java/net/mcreator/element/parts/ProfessionEntry.java index c05368921bc..3e7d8bcc2b4 100644 --- a/src/main/java/net/mcreator/element/parts/ProfessionEntry.java +++ b/src/main/java/net/mcreator/element/parts/ProfessionEntry.java @@ -33,9 +33,7 @@ private ProfessionEntry() { } public ProfessionEntry(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "villagerprofessions"), name); } public ProfessionEntry(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/ProjectileEntry.java b/src/main/java/net/mcreator/element/parts/ProjectileEntry.java index 96799cf3440..148e8cfe082 100644 --- a/src/main/java/net/mcreator/element/parts/ProjectileEntry.java +++ b/src/main/java/net/mcreator/element/parts/ProjectileEntry.java @@ -33,9 +33,7 @@ private ProjectileEntry() { } public ProjectileEntry(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "projectiles"), name); } public ProjectileEntry(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/Sound.java b/src/main/java/net/mcreator/element/parts/Sound.java index ced9cae8acd..6e26c4b2c46 100644 --- a/src/main/java/net/mcreator/element/parts/Sound.java +++ b/src/main/java/net/mcreator/element/parts/Sound.java @@ -29,13 +29,11 @@ private Sound() { } public Sound(Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "sounds"), name); } @Override public String getMappedValue() { - return super.getMappedValue().replace("CUSTOM:", mapper.workspace.getWorkspaceSettings().getModID() + ":"); + return super.getMappedValue().replace("CUSTOM:", mapper.getWorkspace().getWorkspaceSettings().getModID() + ":"); } } diff --git a/src/main/java/net/mcreator/element/parts/StepSound.java b/src/main/java/net/mcreator/element/parts/StepSound.java index 7a1b25dd59d..3b68492bd8e 100644 --- a/src/main/java/net/mcreator/element/parts/StepSound.java +++ b/src/main/java/net/mcreator/element/parts/StepSound.java @@ -32,9 +32,7 @@ private StepSound() { } public StepSound(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "stepsounds"), name); } public StepSound(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/TabEntry.java b/src/main/java/net/mcreator/element/parts/TabEntry.java index 2cb93572d69..72df51eb5ac 100644 --- a/src/main/java/net/mcreator/element/parts/TabEntry.java +++ b/src/main/java/net/mcreator/element/parts/TabEntry.java @@ -32,9 +32,7 @@ private TabEntry() { } public TabEntry(@Nonnull Workspace owner, String name) { - this(); - mapper.setWorkspace(owner); - setValue(name); + super(new NameMapper(owner, "tabs"), name); } public TabEntry(@Nonnull Workspace owner, DataListEntry name) { diff --git a/src/main/java/net/mcreator/element/parts/gui/Image.java b/src/main/java/net/mcreator/element/parts/gui/Image.java index 781be291a7f..f601009e799 100644 --- a/src/main/java/net/mcreator/element/parts/gui/Image.java +++ b/src/main/java/net/mcreator/element/parts/gui/Image.java @@ -23,13 +23,14 @@ import net.mcreator.ui.wysiwyg.WYSIWYGEditor; import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.workspace.Workspace; +import net.mcreator.workspace.references.TextureReference; import javax.swing.*; import java.awt.*; public class Image extends GUIComponent { - public String image; + @TextureReference(TextureType.SCREEN) public String image; public boolean use1Xscale; public Procedure displayCondition; diff --git a/src/main/java/net/mcreator/element/parts/gui/ImageButton.java b/src/main/java/net/mcreator/element/parts/gui/ImageButton.java index 1c08e0c9c4d..0191e70e218 100644 --- a/src/main/java/net/mcreator/element/parts/gui/ImageButton.java +++ b/src/main/java/net/mcreator/element/parts/gui/ImageButton.java @@ -25,6 +25,7 @@ import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.Workspace; +import net.mcreator.workspace.references.TextureReference; import javax.swing.*; import java.awt.Image; @@ -34,7 +35,7 @@ public class ImageButton extends GUIComponent { public String name; - public String image, hoveredImage; + @TextureReference(TextureType.SCREEN) public String image, hoveredImage; public Procedure onClick, displayCondition; diff --git a/src/main/java/net/mcreator/element/parts/procedure/Procedure.java b/src/main/java/net/mcreator/element/parts/procedure/Procedure.java index 22436e523d6..30423b4eaf4 100644 --- a/src/main/java/net/mcreator/element/parts/procedure/Procedure.java +++ b/src/main/java/net/mcreator/element/parts/procedure/Procedure.java @@ -27,7 +27,6 @@ import org.apache.logging.log4j.Logger; import javax.annotation.Nullable; -import java.lang.reflect.Field; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -82,27 +81,4 @@ public String getReturnValueType(Workspace workspace) { return "none"; } - public static boolean isElementUsingProcedure(Object element, String procedureName) { - boolean isCallingThisProcedure = false; - - for (Field field : element.getClass().getDeclaredFields()) { - field.setAccessible(true); - try { - Object value = field.get(element); - if (value instanceof Procedure) { - if (((Procedure) value).name == null) - continue; - - if (((Procedure) value).name.equals(procedureName)) { - isCallingThisProcedure = true; - break; - } - } - } catch (IllegalAccessException ignored) { - } - } - - return isCallingThisProcedure; - } - } diff --git a/src/main/java/net/mcreator/element/types/Achievement.java b/src/main/java/net/mcreator/element/types/Achievement.java index d5845e303af..f49f6aa82af 100644 --- a/src/main/java/net/mcreator/element/types/Achievement.java +++ b/src/main/java/net/mcreator/element/types/Achievement.java @@ -29,10 +29,14 @@ import net.mcreator.generator.template.IAdditionalTemplateDataProvider; import net.mcreator.minecraft.MinecraftImageGenerator; import net.mcreator.ui.blockly.BlocklyEditorType; +import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.TextureReference; import javax.annotation.Nullable; import java.awt.image.BufferedImage; +import java.util.ArrayList; import java.util.List; @SuppressWarnings("unused") public class Achievement extends GeneratableElement { @@ -42,7 +46,7 @@ public MItemBlock achievementIcon; - public String background; + @TextureReference(value = TextureType.SCREEN, defaultValues = "Default") public String background; public boolean disableDisplay; @@ -50,9 +54,9 @@ public boolean announceToChat; public boolean hideIfNotCompleted; - public List rewardLoot; - public List rewardRecipes; - public String rewardFunction; + @ModElementReference public List rewardLoot; + @ModElementReference public List rewardRecipes; + @ModElementReference(defaultValues = "No function") public String rewardFunction; public int rewardXP; public String achievementType; @@ -60,8 +64,15 @@ @BlocklyXML("jsontriggers") public String triggerxml; + private Achievement() { + this(null); + } + public Achievement(ModElement element) { super(element); + + rewardLoot = new ArrayList<>(); + rewardRecipes = new ArrayList<>(); } public boolean hasRewards() { diff --git a/src/main/java/net/mcreator/element/types/Armor.java b/src/main/java/net/mcreator/element/types/Armor.java index 01598096d7e..e7affbec6a3 100644 --- a/src/main/java/net/mcreator/element/types/Armor.java +++ b/src/main/java/net/mcreator/element/types/Armor.java @@ -33,6 +33,8 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.TextureReference; import net.mcreator.workspace.resources.Model; import net.mcreator.workspace.resources.TexturedModel; @@ -44,13 +46,13 @@ @SuppressWarnings("unused") public class Armor extends GeneratableElement implements IItem, ITabContainedElement { public boolean enableHelmet; - public String textureHelmet; + @TextureReference(TextureType.ITEM) public String textureHelmet; public boolean enableBody; - public String textureBody; + @TextureReference(TextureType.ITEM) public String textureBody; public boolean enableLeggings; - public String textureLeggings; + @TextureReference(TextureType.ITEM) public String textureLeggings; public boolean enableBoots; - public String textureBoots; + @TextureReference(TextureType.ITEM) public String textureBoots; public Procedure onHelmetTick; public Procedure onBodyTick; @@ -58,7 +60,7 @@ public Procedure onBootsTick; public TabEntry creativeTab; - public String armorTextureFile; + @TextureReference(value = TextureType.ARMOR, files = { "%s_layer_1", "%s_layer_2" }) public String armorTextureFile; public String helmetName; public String bodyName; @@ -72,23 +74,23 @@ public String helmetModelName; public String helmetModelPart; - public String helmetModelTexture; + @TextureReference(value = TextureType.ENTITY, defaultValues = "From armor") public String helmetModelTexture; public String bodyModelName; public String bodyModelPart; public String armsModelPartL; public String armsModelPartR; - public String bodyModelTexture; + @TextureReference(value = TextureType.ENTITY, defaultValues = "From armor") public String bodyModelTexture; public String leggingsModelName; public String leggingsModelPartL; public String leggingsModelPartR; - public String leggingsModelTexture; + @TextureReference(value = TextureType.ENTITY, defaultValues = "From armor") public String leggingsModelTexture; public String bootsModelName; public String bootsModelPartL; public String bootsModelPartR; - public String bootsModelTexture; + @TextureReference(value = TextureType.ENTITY, defaultValues = "From armor") public String bootsModelTexture; public int helmetItemRenderType; public String helmetItemCustomModelName; @@ -118,7 +120,7 @@ public double toughness; public double knockbackResistance; public Sound equipSound; - public List repairItems; + @ModElementReference public List repairItems; private Armor() { this(null); diff --git a/src/main/java/net/mcreator/element/types/Biome.java b/src/main/java/net/mcreator/element/types/Biome.java index 9aee125618b..b36c7ec6d12 100644 --- a/src/main/java/net/mcreator/element/types/Biome.java +++ b/src/main/java/net/mcreator/element/types/Biome.java @@ -25,6 +25,7 @@ import net.mcreator.element.parts.Sound; import net.mcreator.minecraft.MinecraftImageGenerator; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; import java.awt.*; import java.awt.image.BufferedImage; @@ -104,7 +105,7 @@ public boolean spawnEndCity; public String spawnRuinedPortal; - public List spawnEntries; + @ModElementReference public List spawnEntries; private Biome() { this(null); diff --git a/src/main/java/net/mcreator/element/types/Block.java b/src/main/java/net/mcreator/element/types/Block.java index aa854af7468..637904e2bcc 100644 --- a/src/main/java/net/mcreator/element/types/Block.java +++ b/src/main/java/net/mcreator/element/types/Block.java @@ -35,6 +35,8 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.TextureReference; import net.mcreator.workspace.resources.Model; import net.mcreator.workspace.resources.TexturedModel; @@ -49,12 +51,12 @@ @SuppressWarnings({ "unused", "NotNullFieldNotInitialized" }) public class Block extends GeneratableElement implements IBlock, IItemWithModel, ITabContainedElement, IBlockWithBoundingBox { - public String texture; - public String textureTop; - public String textureLeft; - public String textureFront; - public String textureRight; - public String textureBack; + @TextureReference(TextureType.BLOCK) public String texture; + @TextureReference(TextureType.BLOCK) public String textureTop; + @TextureReference(TextureType.BLOCK) public String textureLeft; + @TextureReference(TextureType.BLOCK) public String textureFront; + @TextureReference(TextureType.BLOCK) public String textureRight; + @TextureReference(TextureType.BLOCK) public String textureBack; public int renderType; @Nonnull public String customModelName; public int rotationMode; @@ -62,8 +64,8 @@ public boolean emissiveRendering; public boolean displayFluidOverlay; - public String itemTexture; - public String particleTexture; + @TextureReference(TextureType.ITEM) public String itemTexture; + @TextureReference(TextureType.BLOCK) public String particleTexture; public String blockBase; @@ -140,7 +142,7 @@ public Procedure onBonemealSuccess; public boolean hasInventory; - public String guiBoundTo; + @ModElementReference(defaultValues = "") public String guiBoundTo; public boolean openGUIOnRightClick; public int inventorySize; public int inventoryStackSize; @@ -157,7 +159,7 @@ public boolean isFluidTank; public int fluidCapacity; - public List fluidRestrictions; + @ModElementReference public List fluidRestrictions; public Procedure onRightClicked; public Procedure onBlockAdded; @@ -175,8 +177,8 @@ public Procedure onHitByProjectile; public boolean generateFeature; - public List restrictionBiomes; - public List blocksToReplace; + @ModElementReference public List restrictionBiomes; + @ModElementReference public List blocksToReplace; public String generationShape; public int frequencyPerChunks; public int frequencyOnChunk; @@ -224,7 +226,7 @@ public boolean isBlockTinted() { return !"No tint".equals(tintType); } - public boolean isDoubleBlock() { + @Override public boolean isDoubleBlock() { return "Door".equals(blockBase); } diff --git a/src/main/java/net/mcreator/element/types/DamageType.java b/src/main/java/net/mcreator/element/types/DamageType.java new file mode 100644 index 00000000000..f2f4190bb5b --- /dev/null +++ b/src/main/java/net/mcreator/element/types/DamageType.java @@ -0,0 +1,39 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.element.types; + +import net.mcreator.element.GeneratableElement; +import net.mcreator.workspace.elements.ModElement; + +public class DamageType extends GeneratableElement { + + public double exhaustion; + public String scaling; + public String effects; + + public String normalDeathMessage; + public String itemDeathMessage; + public String playerDeathMessage; + + public DamageType(ModElement element) { + super(element); + } + +} diff --git a/src/main/java/net/mcreator/element/types/Dimension.java b/src/main/java/net/mcreator/element/types/Dimension.java index 02ffdd254df..55965e48e0c 100644 --- a/src/main/java/net/mcreator/element/types/Dimension.java +++ b/src/main/java/net/mcreator/element/types/Dimension.java @@ -33,6 +33,8 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.TextureReference; import javax.swing.*; import java.awt.*; @@ -45,7 +47,7 @@ @SuppressWarnings("unused") public class Dimension extends GeneratableElement implements ICommonType, ITabContainedElement, IMCItemProvider, IPOIProvider { - public List biomesInDimension; + @ModElementReference public List biomesInDimension; public String worldGenType; @@ -73,8 +75,8 @@ public String igniterName; public StringListProcedure specialInformation; public TabEntry igniterTab; - public String texture; - public String portalTexture; + @TextureReference(TextureType.ITEM) public String texture; + @TextureReference(TextureType.BLOCK) public String portalTexture; public boolean enablePortal; public Procedure portalMakeCondition; public Procedure portalUseCondition; diff --git a/src/main/java/net/mcreator/element/types/Enchantment.java b/src/main/java/net/mcreator/element/types/Enchantment.java index 64962fed5ba..d02944dad4d 100644 --- a/src/main/java/net/mcreator/element/types/Enchantment.java +++ b/src/main/java/net/mcreator/element/types/Enchantment.java @@ -21,6 +21,7 @@ import net.mcreator.element.GeneratableElement; import net.mcreator.element.parts.MItemBlock; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; import java.util.List; @@ -35,10 +36,10 @@ public int damageModifier; - public List compatibleEnchantments; + @ModElementReference public List compatibleEnchantments; public boolean excludeEnchantments; - public List compatibleItems; + @ModElementReference public List compatibleItems; public boolean excludeItems; public boolean isTreasureEnchantment; diff --git a/src/main/java/net/mcreator/element/types/Feature.java b/src/main/java/net/mcreator/element/types/Feature.java index 158e8de83e9..7ce32915ef9 100644 --- a/src/main/java/net/mcreator/element/types/Feature.java +++ b/src/main/java/net/mcreator/element/types/Feature.java @@ -34,6 +34,7 @@ import net.mcreator.generator.template.IAdditionalTemplateDataProvider; import net.mcreator.ui.blockly.BlocklyEditorType; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; import javax.annotation.Nullable; import java.util.ArrayList; @@ -46,7 +47,7 @@ public static final String XML_BASE = ""; public String generationStep; - public List restrictionBiomes; + @ModElementReference public List restrictionBiomes; public Procedure generateCondition; @BlocklyXML("features") public String featurexml; diff --git a/src/main/java/net/mcreator/element/types/Fluid.java b/src/main/java/net/mcreator/element/types/Fluid.java index 3964f467a0d..de09340250c 100644 --- a/src/main/java/net/mcreator/element/types/Fluid.java +++ b/src/main/java/net/mcreator/element/types/Fluid.java @@ -33,6 +33,7 @@ import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.TextureReference; import javax.annotation.Nonnull; import javax.swing.*; @@ -47,8 +48,8 @@ public String name; public String bucketName; - public String textureStill; - public String textureFlowing; + @TextureReference(TextureType.BLOCK) public String textureStill; + @TextureReference(TextureType.BLOCK) public String textureFlowing; public String tintType; @@ -67,7 +68,7 @@ @Nonnull public String type; public boolean generateBucket; - public String textureBucket; + @TextureReference(TextureType.ITEM) public String textureBucket; public TabEntry creativeTab; public Sound emptySound; public String rarity; diff --git a/src/main/java/net/mcreator/element/types/GUI.java b/src/main/java/net/mcreator/element/types/GUI.java index 5a1d7e74875..dd8e1a0dca4 100644 --- a/src/main/java/net/mcreator/element/types/GUI.java +++ b/src/main/java/net/mcreator/element/types/GUI.java @@ -32,6 +32,8 @@ import net.mcreator.ui.wysiwyg.WYSIWYG; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.TextureReference; import javax.swing.*; import java.awt.*; @@ -49,7 +51,7 @@ public boolean renderBgLayer; public boolean doesPauseGame; - public List components; + @ModElementReference @TextureReference(TextureType.SCREEN) public List components; public Procedure onOpen; public Procedure onTick; diff --git a/src/main/java/net/mcreator/element/types/Item.java b/src/main/java/net/mcreator/element/types/Item.java index f2736cf95e6..6513e7bcab5 100644 --- a/src/main/java/net/mcreator/element/types/Item.java +++ b/src/main/java/net/mcreator/element/types/Item.java @@ -38,6 +38,9 @@ import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.ResourceReference; +import net.mcreator.workspace.references.TextureReference; import net.mcreator.workspace.resources.Model; import net.mcreator.workspace.resources.TexturedModel; @@ -50,11 +53,11 @@ implements IItem, IItemWithModel, ITabContainedElement, IItemWithTexture { public int renderType; - public String texture; + @TextureReference(TextureType.ITEM) public String texture; @Nonnull public String customModelName; - public Map customProperties; - public List states; + @ModElementReference public Map customProperties; + @TextureReference(TextureType.ITEM) @ResourceReference("model") public List states; public String name; public String rarity; @@ -77,7 +80,7 @@ public StringListProcedure specialInformation; public LogicProcedure glowCondition; - @Nullable public String guiBoundTo; + @Nullable @ModElementReference(defaultValues = "") public String guiBoundTo; public int inventorySize; public int inventoryStackSize; @@ -218,7 +221,7 @@ public List getModels() { public static class StateEntry implements IWorkspaceDependent { public int renderType; - public String texture; + @TextureReference(TextureType.ITEM) public String texture; public String customModelName; public StateMap stateMap; @@ -229,6 +232,10 @@ public static class StateEntry implements IWorkspaceDependent { this.workspace = workspace; } + @Nullable @Override public Workspace getWorkspace() { + return workspace; + } + public Model getItemModel() { return Model.getModelByParams(workspace, customModelName, decodeModelType(renderType)); } diff --git a/src/main/java/net/mcreator/element/types/LivingEntity.java b/src/main/java/net/mcreator/element/types/LivingEntity.java index 1126bde87ac..86b2e4455a7 100644 --- a/src/main/java/net/mcreator/element/types/LivingEntity.java +++ b/src/main/java/net/mcreator/element/types/LivingEntity.java @@ -24,11 +24,9 @@ import net.mcreator.element.BaseType; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; -import net.mcreator.element.parts.BiomeEntry; -import net.mcreator.element.parts.MItemBlock; -import net.mcreator.element.parts.Sound; -import net.mcreator.element.parts.TabEntry; +import net.mcreator.element.parts.*; import net.mcreator.element.parts.procedure.LogicProcedure; +import net.mcreator.element.parts.procedure.NumberProcedure; import net.mcreator.element.parts.procedure.Procedure; import net.mcreator.element.types.interfaces.ICommonType; import net.mcreator.element.types.interfaces.IEntityWithModel; @@ -40,9 +38,14 @@ import net.mcreator.minecraft.MCItem; import net.mcreator.minecraft.MinecraftImageGenerator; import net.mcreator.ui.blockly.BlocklyEditorType; +import net.mcreator.ui.minecraft.states.PropertyDataWithValue; import net.mcreator.ui.modgui.LivingEntityGUI; +import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.ResourceReference; +import net.mcreator.workspace.references.TextureReference; import net.mcreator.workspace.resources.Model; import javax.annotation.Nonnull; @@ -60,11 +63,15 @@ public String mobLabel; @Nonnull public String mobModelName; - public String mobModelTexture; - public String mobModelGlowTexture; + @TextureReference(TextureType.ENTITY) public String mobModelTexture; public LogicProcedure transparentModelCondition; public LogicProcedure isShakingCondition; public LogicProcedure solidBoundingBox; + public NumberProcedure visualScale; + public NumberProcedure boundingBoxScale; + + @ModElementReference @TextureReference(TextureType.ENTITY) @ResourceReference("model") + public List modelLayers; public double modelWidth, modelHeight, modelShadowSize; public double mountedYOffset; @@ -102,7 +109,7 @@ public LogicProcedure pushedByFluids; public boolean flyingMob; - public String guiBoundTo; + @ModElementReference(defaultValues = "") public String guiBoundTo; public int inventorySize; public int inventoryStackSize; @@ -133,6 +140,8 @@ public Sound deathSound; public Sound stepSound; + public List> entityDataEntries; + public Procedure onStruckByLightning; public Procedure whenMobFalls; public Procedure whenMobDies; @@ -149,11 +158,11 @@ public boolean breedable; public boolean tameable; - public List breedTriggerItems; + @ModElementReference public List breedTriggerItems; public boolean ranged; public MItemBlock rangedAttackItem; - public String rangedItemType; + @ModElementReference(defaultValues = "Default item") public String rangedItemType; public int rangedAttackInterval; public double rangedAttackRadius; @@ -164,7 +173,7 @@ public String mobSpawningType; public int minNumberOfMobsPerGroup; public int maxNumberOfMobsPerGroup; - public List restrictionBiomes; + @ModElementReference public List restrictionBiomes; public boolean spawnInDungeons; private LivingEntity() { @@ -185,6 +194,9 @@ public LivingEntity(ModElement element) { this.inventorySize = 9; this.inventoryStackSize = 64; + + this.entityDataEntries = new ArrayList<>(); + this.modelLayers = new ArrayList<>(); } @Override public Model getEntityModel() { @@ -261,4 +273,28 @@ public boolean hasCustomProjectile() { return null; } + + public static class ModelLayerEntry implements IWorkspaceDependent { + + public String model; + @TextureReference(TextureType.ENTITY) public String texture; + public boolean glow; + public Procedure condition; + + @Nullable transient Workspace workspace; + + // This method is primarily here for the usages system to detect the model usage + public Model getLayerModel() { + return model.equals("Default") ? null : Model.getModelByParams(workspace, model, Model.Type.JAVA); + } + + @Override public void setWorkspace(@Nullable Workspace workspace) { + this.workspace = workspace; + } + + @Override public @Nullable Workspace getWorkspace() { + return workspace; + } + } + } diff --git a/src/main/java/net/mcreator/element/types/LootTable.java b/src/main/java/net/mcreator/element/types/LootTable.java index 95725067124..a659f656eb8 100644 --- a/src/main/java/net/mcreator/element/types/LootTable.java +++ b/src/main/java/net/mcreator/element/types/LootTable.java @@ -21,6 +21,7 @@ import net.mcreator.element.NamespacedGeneratableElement; import net.mcreator.element.parts.MItemBlock; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; import javax.annotation.Nonnull; import java.util.List; @@ -30,7 +31,7 @@ @Nonnull public String type; - public List pools; + @ModElementReference public List pools; public LootTable(ModElement element) { super(element); @@ -41,7 +42,7 @@ public static class Pool { public int minbonusrolls, maxbonusrolls; public boolean hasbonusrolls; - public List entries; + @ModElementReference public List entries; public static class Entry { diff --git a/src/main/java/net/mcreator/element/types/MusicDisc.java b/src/main/java/net/mcreator/element/types/MusicDisc.java index 9cac7573f48..b8df3b2d2f0 100644 --- a/src/main/java/net/mcreator/element/types/MusicDisc.java +++ b/src/main/java/net/mcreator/element/types/MusicDisc.java @@ -25,19 +25,22 @@ import net.mcreator.element.parts.procedure.Procedure; import net.mcreator.element.parts.procedure.StringListProcedure; import net.mcreator.element.types.interfaces.IItem; +import net.mcreator.element.types.interfaces.IItemWithTexture; import net.mcreator.element.types.interfaces.ITabContainedElement; import net.mcreator.minecraft.MCItem; import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.TextureReference; import java.awt.image.BufferedImage; import java.util.List; -public class MusicDisc extends GeneratableElement implements IItem, ITabContainedElement { +public class MusicDisc extends GeneratableElement implements IItem, IItemWithTexture, ITabContainedElement { public String name; - public String texture; + public String rarity; + @TextureReference(TextureType.ITEM) public String texture; public String description; public TabEntry creativeTab; public StringListProcedure specialInformation; @@ -55,8 +58,18 @@ public class MusicDisc extends GeneratableElement implements IItem, ITabContaine public Procedure onItemInUseTick; public Procedure onEntitySwing; + private MusicDisc() { + this(null); + } + public MusicDisc(ModElement element) { super(element); + + this.rarity = "RARE"; + } + + @Override public String getTexture() { + return texture; } @Override public BufferedImage generateModElementPicture() { diff --git a/src/main/java/net/mcreator/element/types/Overlay.java b/src/main/java/net/mcreator/element/types/Overlay.java index eb346ee13f8..96392bfa24d 100644 --- a/src/main/java/net/mcreator/element/types/Overlay.java +++ b/src/main/java/net/mcreator/element/types/Overlay.java @@ -26,6 +26,8 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.TextureReference; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -38,9 +40,9 @@ private static final Logger LOG = LogManager.getLogger(Overlay.class); public String priority; - public List components; + @ModElementReference @TextureReference(TextureType.SCREEN) public List components; - public String baseTexture; + @TextureReference(TextureType.SCREEN) public String baseTexture; public String overlayTarget; public Procedure displayCondition; diff --git a/src/main/java/net/mcreator/element/types/Painting.java b/src/main/java/net/mcreator/element/types/Painting.java index e7b9880cdde..5eddc9ea765 100644 --- a/src/main/java/net/mcreator/element/types/Painting.java +++ b/src/main/java/net/mcreator/element/types/Painting.java @@ -24,13 +24,14 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.TextureReference; import java.awt.image.BufferedImage; import java.io.File; public class Painting extends GeneratableElement { - public String texture; + @TextureReference(TextureType.OTHER) public String texture; public int width; public int height; public String title; diff --git a/src/main/java/net/mcreator/element/types/Particle.java b/src/main/java/net/mcreator/element/types/Particle.java index 960f0ab678f..63ac2214790 100644 --- a/src/main/java/net/mcreator/element/types/Particle.java +++ b/src/main/java/net/mcreator/element/types/Particle.java @@ -28,6 +28,7 @@ import net.mcreator.util.image.InvalidTileSizeException; import net.mcreator.util.image.TiledImageUtils; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.TextureReference; import javax.imageio.ImageIO; import javax.swing.*; @@ -37,7 +38,7 @@ public class Particle extends GeneratableElement { - public String texture; + @TextureReference(TextureType.PARTICLE) public String texture; public boolean animate; public int frameDuration; diff --git a/src/main/java/net/mcreator/element/types/Plant.java b/src/main/java/net/mcreator/element/types/Plant.java index 6e2078071c9..da58250a665 100644 --- a/src/main/java/net/mcreator/element/types/Plant.java +++ b/src/main/java/net/mcreator/element/types/Plant.java @@ -33,6 +33,8 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.TextureReference; import net.mcreator.workspace.resources.Model; import net.mcreator.workspace.resources.TexturedModel; @@ -45,19 +47,19 @@ implements IBlock, IItemWithModel, ITabContainedElement, IBlockWithBoundingBox { public int renderType; - public String texture; - public String textureBottom; + @TextureReference(TextureType.BLOCK) public String texture; + @TextureReference(TextureType.BLOCK) public String textureBottom; @Nonnull public String customModelName; - public String itemTexture; - public String particleTexture; + @TextureReference(TextureType.ITEM) public String itemTexture; + @TextureReference(TextureType.BLOCK) public String particleTexture; public String tintType; public boolean isItemTinted; public String plantType; - public String suspiciousStewEffect; + @ModElementReference public String suspiciousStewEffect; public int suspiciousStewDuration; public String growapableSpawnType; @@ -103,7 +105,7 @@ public double jumpFactor; public double speedFactor; - public List canBePlacedOn; + @ModElementReference public List canBePlacedOn; public Procedure placingCondition; public boolean isBonemealable; @@ -113,7 +115,7 @@ public int frequencyOnChunks; public boolean generateFeature; - public List restrictionBiomes; + @ModElementReference public List restrictionBiomes; public String generationType; public int patchSize; public boolean generateAtAnyHeight; @@ -189,7 +191,7 @@ public boolean isBlockTinted() { return !"No tint".equals(tintType); } - public boolean isDoubleBlock() { + @Override public boolean isDoubleBlock() { return "double".equals(plantType); } diff --git a/src/main/java/net/mcreator/element/types/Potion.java b/src/main/java/net/mcreator/element/types/Potion.java index a487c74d54b..dbe1fd89f8a 100644 --- a/src/main/java/net/mcreator/element/types/Potion.java +++ b/src/main/java/net/mcreator/element/types/Potion.java @@ -25,6 +25,7 @@ import net.mcreator.minecraft.MinecraftImageGenerator; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; import java.awt.*; import java.awt.image.BufferedImage; @@ -37,7 +38,7 @@ public class Potion extends GeneratableElement { public String splashName; public String lingeringName; public String arrowName; - public List effects; + @ModElementReference public List effects; public Potion(ModElement element) { super(element); diff --git a/src/main/java/net/mcreator/element/types/PotionEffect.java b/src/main/java/net/mcreator/element/types/PotionEffect.java index ba93fb9f461..fe001d1ac3c 100644 --- a/src/main/java/net/mcreator/element/types/PotionEffect.java +++ b/src/main/java/net/mcreator/element/types/PotionEffect.java @@ -25,6 +25,7 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.TextureReference; import javax.swing.*; import java.awt.*; @@ -34,7 +35,7 @@ @SuppressWarnings("unused") public class PotionEffect extends GeneratableElement { public String effectName; - public String icon; + @TextureReference(TextureType.EFFECT) public String icon; public Color color; public boolean isInstant; public boolean isBad; diff --git a/src/main/java/net/mcreator/element/types/Projectile.java b/src/main/java/net/mcreator/element/types/Projectile.java index 91e0b5a9142..e675745dfe5 100644 --- a/src/main/java/net/mcreator/element/types/Projectile.java +++ b/src/main/java/net/mcreator/element/types/Projectile.java @@ -27,8 +27,10 @@ import net.mcreator.element.types.interfaces.ICommonType; import net.mcreator.element.types.interfaces.IEntityWithModel; import net.mcreator.minecraft.MCItem; +import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.TextureReference; import net.mcreator.workspace.resources.Model; import java.awt.image.BufferedImage; @@ -45,7 +47,7 @@ public class Projectile extends GeneratableElement implements IEntityWithModel, public double damage; public int knockback; public String entityModel; - public String customModelTexture; + @TextureReference(TextureType.ENTITY) public String customModelTexture; public Procedure onHitsBlock; public Procedure onHitsPlayer; diff --git a/src/main/java/net/mcreator/element/types/Recipe.java b/src/main/java/net/mcreator/element/types/Recipe.java index bf3466e45bf..61a215fe3f3 100644 --- a/src/main/java/net/mcreator/element/types/Recipe.java +++ b/src/main/java/net/mcreator/element/types/Recipe.java @@ -23,10 +23,13 @@ import net.mcreator.minecraft.MinecraftImageGenerator; import net.mcreator.minecraft.RegistryNameFixer; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; import javax.annotation.Nonnull; import java.awt.image.BufferedImage; import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; @SuppressWarnings({ "unused", "NotNullFieldNotInitialized" }) public class Recipe extends NamespacedGeneratableElement { @@ -43,7 +46,7 @@ // Crafting recipe public String craftingBookCategory; public boolean recipeShapeless; - public MItemBlock[] recipeSlots; + @ModElementReference public MItemBlock[] recipeSlots; public MItemBlock recipeReturnStack; // Smelting recipe @@ -69,6 +72,7 @@ // Smithing recipe public MItemBlock smithingInputStack; public MItemBlock smithingInputAdditionStack; + public MItemBlock smithingInputTemplateStack; public MItemBlock smithingReturnStack; // Brewing recipe @@ -83,8 +87,6 @@ private Recipe() { public Recipe(ModElement element) { super(element); - this.optimisedRecipe = new OptimisedRecipe(this); - this.recipeRetstackSize = 1; this.namespace = "mod"; @@ -127,7 +129,7 @@ public Recipe(ModElement element) { } else if ("Smithing".equals(recipeType) && !smithingInputStack.isEmpty() && !smithingInputAdditionStack.isEmpty() && !smithingReturnStack.isEmpty()) { mod = MinecraftImageGenerator.Preview.generateSmithingPreviewPicture(getModElement().getWorkspace(), - smithingInputStack, smithingInputAdditionStack, smithingReturnStack); + smithingInputTemplateStack, smithingInputStack, smithingInputAdditionStack, smithingReturnStack); } else if ("Brewing".equals(recipeType) && !brewingInputStack.isEmpty() && !brewingIngredientStack.isEmpty() && !brewingReturnStack.isEmpty()) { mod = MinecraftImageGenerator.Preview.generateBrewingPreviewPicture(getModElement().getWorkspace(), @@ -136,44 +138,48 @@ public Recipe(ModElement element) { return mod; } - private final transient OptimisedRecipe optimisedRecipe; - public MItemBlock[][] getOptimisedRecipe() { - return optimisedRecipe.getOptimisedRecipe(); - } - - private record OptimisedRecipe(Recipe recipe) { - - MItemBlock[][] getOptimisedRecipe() { - MItemBlock[][] mtx = { { recipe.recipeSlots[0], recipe.recipeSlots[1], recipe.recipeSlots[2] }, - { recipe.recipeSlots[3], recipe.recipeSlots[4], recipe.recipeSlots[5] }, - { recipe.recipeSlots[6], recipe.recipeSlots[7], recipe.recipeSlots[8] } }; - int cmin = mtx[0].length; - int rmin = mtx.length; - int cmax = -1; - int rmax = -1; - for (int r = 0; r < mtx.length; r++) - for (int c = 0; c < mtx[0].length; c++) - if (!mtx[r][c].isEmpty()) { - if (cmin > c) - cmin = c; - if (cmax < c) - cmax = c; - if (rmin > r) - rmin = r; - if (rmax < r) - rmax = r; - } - return trim(mtx, rmin, rmax, cmin, cmax); + MItemBlock[][] mtx = { { recipeSlots[0], recipeSlots[1], recipeSlots[2] }, + { recipeSlots[3], recipeSlots[4], recipeSlots[5] }, + { recipeSlots[6], recipeSlots[7], recipeSlots[8] } }; + + // determine recipe matrix edges + int cmin = mtx[0].length; + int rmin = mtx.length; + int cmax = -1; + int rmax = -1; + for (int r = 0; r < mtx.length; r++) { + for (int c = 0; c < mtx[0].length; c++) { + if (!mtx[r][c].isEmpty()) { + if (cmin > c) + cmin = c; + if (cmax < c) + cmax = c; + if (rmin > r) + rmin = r; + if (rmax < r) + rmax = r; + } + } } - private MItemBlock[][] trim(MItemBlock[][] mtx, int rmin, int rmax, int cmin, int cmax) { - MItemBlock[][] result = new MItemBlock[rmax - rmin + 1][]; - for (int r = rmin, i = 0; r <= rmax; r++, i++) - result[i] = Arrays.copyOfRange(mtx[r], cmin, cmax + 1); - return result; - } + // trim array size to the smallest possible + MItemBlock[][] result = new MItemBlock[rmax - rmin + 1][]; + for (int r = rmin, i = 0; r <= rmax; r++, i++) + result[i] = Arrays.copyOfRange(mtx[r], cmin, cmax + 1); + return result; + } + public Map getPatternKeys() { + Map keys = new LinkedHashMap<>(); + int idx = 0; + for (MItemBlock slot : recipeSlots) { + if (!slot.isEmpty() && !keys.containsKey(slot)) { + keys.put(slot, Character.toString((char) ('a' + idx))); + idx++; + } + } + return keys; } } diff --git a/src/main/java/net/mcreator/element/types/Structure.java b/src/main/java/net/mcreator/element/types/Structure.java index dda4c0b7bec..78a8330ab64 100644 --- a/src/main/java/net/mcreator/element/types/Structure.java +++ b/src/main/java/net/mcreator/element/types/Structure.java @@ -20,20 +20,23 @@ import net.mcreator.element.GeneratableElement; import net.mcreator.element.parts.BiomeEntry; +import net.mcreator.element.parts.MItemBlock; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.ResourceReference; import java.util.List; @SuppressWarnings("unused") public class Structure extends GeneratableElement { - public String structure; + @ResourceReference("structure") public String structure; public String projection; - public String ignoreBlocks; + @ModElementReference public List ignoredBlocks; public int spacing; public int separation; - public List restrictionBiomes; + @ModElementReference public List restrictionBiomes; public String surfaceDetectionType; public String terrainAdaptation; public String generationStep; diff --git a/src/main/java/net/mcreator/element/types/Tag.java b/src/main/java/net/mcreator/element/types/Tag.java index c0b8e238188..2856fea731e 100644 --- a/src/main/java/net/mcreator/element/types/Tag.java +++ b/src/main/java/net/mcreator/element/types/Tag.java @@ -1,6 +1,7 @@ /* * MCreator (https://mcreator.net/) - * Copyright (C) 2020 Pylo and contributors + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,38 +21,47 @@ import net.mcreator.element.NamespacedGeneratableElement; import net.mcreator.element.parts.BiomeEntry; +import net.mcreator.element.parts.DamageTypeEntry; import net.mcreator.element.parts.EntityEntry; import net.mcreator.element.parts.MItemBlock; import net.mcreator.minecraft.MinecraftImageGenerator; +import net.mcreator.minecraft.TagType; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; import javax.annotation.Nonnull; import java.awt.image.BufferedImage; +import java.util.ArrayList; import java.util.List; -import java.util.Locale; @SuppressWarnings({ "unused", "NotNullFieldNotInitialized" }) public class Tag extends NamespacedGeneratableElement { @Nonnull public String type; - public List items; - public List blocks; - public List functions; - public List entities; - public List biomes; + @ModElementReference public List items; + @ModElementReference public List blocks; + @ModElementReference public List functions; + @ModElementReference public List entities; + @ModElementReference public List biomes; + @ModElementReference public List damageTypes; + + private Tag() { + this(null); + } public Tag(ModElement element) { super(element); + + items = new ArrayList<>(); + blocks = new ArrayList<>(); + functions = new ArrayList<>(); + entities = new ArrayList<>(); + biomes = new ArrayList<>(); + damageTypes = new ArrayList<>(); } public String tagType() { - if (type.equals("Entities")) - return "entity_types"; - - if (type.equals("Biomes")) - return "worldgen/biome"; - - return type.toLowerCase(Locale.ENGLISH); + return TagType.fromLegacyName(type).getFolder(); } @Override public BufferedImage generateModElementPicture() { diff --git a/src/main/java/net/mcreator/element/types/Tool.java b/src/main/java/net/mcreator/element/types/Tool.java index c2002d8da4b..ee859e2c0d5 100644 --- a/src/main/java/net/mcreator/element/types/Tool.java +++ b/src/main/java/net/mcreator/element/types/Tool.java @@ -34,6 +34,8 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; +import net.mcreator.workspace.references.TextureReference; import net.mcreator.workspace.resources.Model; import net.mcreator.workspace.resources.TexturedModel; @@ -51,7 +53,7 @@ public int renderType; public int blockingRenderType; - public String texture; + @TextureReference(TextureType.ITEM) public String texture; @Nonnull public String customModelName; @Nonnull public String blockingModelName; @@ -64,9 +66,9 @@ public int enchantability; public double damageVsEntity; public int usageCount; - public List blocksAffected; + @ModElementReference public List blocksAffected; public LogicProcedure glowCondition; - public List repairItems; + @ModElementReference public List repairItems; public boolean immuneToFire; public boolean stayInGridWhenCrafting; diff --git a/src/main/java/net/mcreator/element/types/VillagerProfession.java b/src/main/java/net/mcreator/element/types/VillagerProfession.java index 51b3c6a316b..093ac1d1e80 100644 --- a/src/main/java/net/mcreator/element/types/VillagerProfession.java +++ b/src/main/java/net/mcreator/element/types/VillagerProfession.java @@ -27,6 +27,7 @@ import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.TextureReference; import java.io.File; import java.util.List; @@ -37,8 +38,8 @@ public class VillagerProfession extends GeneratableElement implements IPOIProvid public MItemBlock pointOfInterest; public Sound actionSound; public String hat; - public String professionTextureFile; - public String zombifiedProfessionTextureFile; + @TextureReference(TextureType.ENTITY) public String professionTextureFile; + @TextureReference(TextureType.ENTITY) public String zombifiedProfessionTextureFile; public VillagerProfession(ModElement element) { super(element); diff --git a/src/main/java/net/mcreator/element/types/VillagerTrade.java b/src/main/java/net/mcreator/element/types/VillagerTrade.java index 590ba29f1b0..3cdeecd827a 100644 --- a/src/main/java/net/mcreator/element/types/VillagerTrade.java +++ b/src/main/java/net/mcreator/element/types/VillagerTrade.java @@ -23,13 +23,14 @@ import net.mcreator.element.parts.MItemBlock; import net.mcreator.element.parts.ProfessionEntry; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ModElementReference; import java.util.ArrayList; import java.util.List; @SuppressWarnings("unused") public class VillagerTrade extends GeneratableElement { - public List tradeEntries; + @ModElementReference public List tradeEntries; private VillagerTrade() { this(null); @@ -43,7 +44,7 @@ public VillagerTrade(ModElement element) { public static class CustomTradeEntry { public ProfessionEntry villagerProfession; - public List entries; + @ModElementReference public List entries; public static class Entry { diff --git a/src/main/java/net/mcreator/element/types/interfaces/IBlock.java b/src/main/java/net/mcreator/element/types/interfaces/IBlock.java index 945d8e11620..1982491cafe 100644 --- a/src/main/java/net/mcreator/element/types/interfaces/IBlock.java +++ b/src/main/java/net/mcreator/element/types/interfaces/IBlock.java @@ -32,4 +32,8 @@ public interface IBlock extends IItem { String getRenderType(); + default boolean isDoubleBlock() { + return false; + } + } diff --git a/src/main/java/net/mcreator/generator/GeneratorWrapper.java b/src/main/java/net/mcreator/generator/GeneratorWrapper.java index 4dcaa5b58e0..1c4df3f6e6d 100644 --- a/src/main/java/net/mcreator/generator/GeneratorWrapper.java +++ b/src/main/java/net/mcreator/generator/GeneratorWrapper.java @@ -24,7 +24,6 @@ import net.mcreator.generator.mapping.NameMapper; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; -import net.mcreator.workspace.elements.VariableElement; import org.apache.commons.lang3.StringUtils; import java.util.*; @@ -58,10 +57,6 @@ public String map(String rawName, String mappingMap, int mappingTable) { return new NameMapper(generator.getWorkspace(), mappingMap).getMapping(rawName, mappingTable); } - public VariableElement getVariableElementByName(String elementName) { - return generator.getWorkspace().getVariableElementByName(elementName); - } - public Collection sortByMappings(Collection input, String mappingTable) { List mappingkeys = new ArrayList<>(generator.getMappings().getMapping(mappingTable).keySet()); return new LinkedHashSet<>(input.stream().sorted(Comparator.comparingInt(mappingkeys::indexOf)).toList()); @@ -122,9 +117,9 @@ public String getResourceLocationForModElement(String modElement) { public String getResourceLocationForModElement(ModElement element) { // check if we are dealing with namespaced element if (NamespacedGeneratableElement.class.isAssignableFrom(element.getType().getModElementStorageClass())) { - GeneratableElement namespacedgeneratableemenet = element.getGeneratableElement(); - if (namespacedgeneratableemenet instanceof NamespacedGeneratableElement) { - return ((NamespacedGeneratableElement) namespacedgeneratableemenet).getResourceLocation(); + GeneratableElement generatableElement = element.getGeneratableElement(); + if (generatableElement instanceof NamespacedGeneratableElement namespacedGeneratableElement) { + return namespacedGeneratableElement.getResourceLocation(); } } diff --git a/src/main/java/net/mcreator/generator/mapping/MappableElement.java b/src/main/java/net/mcreator/generator/mapping/MappableElement.java index c5ea9578cd6..6963e991b59 100644 --- a/src/main/java/net/mcreator/generator/mapping/MappableElement.java +++ b/src/main/java/net/mcreator/generator/mapping/MappableElement.java @@ -33,32 +33,42 @@ public abstract class MappableElement implements IWorkspaceDependent { private static final Logger LOG = LogManager.getLogger("Mappable Element"); - protected String value; + private final String value; - protected transient NameMapper mapper; + protected transient final NameMapper mapper; public MappableElement(NameMapper mapper) { this.mapper = mapper; + this.value = null; + } + + public MappableElement(NameMapper mapper, String value) { + this.mapper = mapper; + this.value = value; } @Override public String toString() { return getMappedValue(); } + public boolean isEmpty() { + return value == null || value.isEmpty(); + } + public String getMappedValue() { + return getMappedValue(0); + } + + public String getMappedValue(int mappingTable) { try { - return mapper.getMapping(value); + return mapper.getMapping(value, mappingTable); } catch (Exception e) { LOG.fatal("Failed to map value to the mappable element. Value: " + value + ", mapper: " - + mapper.mappingSource, e); + + mapper.getMappingSource(), e); return value; } } - public void setValue(String value) { - this.value = value; - } - public String getUnmappedValue() { return value; } @@ -70,7 +80,7 @@ public boolean canProperlyMap() { } public Optional getDataListEntry() { - Map dataListEntryMap = DataListLoader.loadDataMap(mapper.mappingSource); + Map dataListEntryMap = DataListLoader.loadDataMap(mapper.getMappingSource()); if (dataListEntryMap != null) { if (dataListEntryMap.containsKey(getUnmappedValue())) { return Optional.of(dataListEntryMap.get(getUnmappedValue())); @@ -84,30 +94,16 @@ public Optional getDataListEntry() { mapper.setWorkspace(workspace); } - @Override public int hashCode() { - return value.hashCode(); + @Nullable @Override public Workspace getWorkspace() { + return mapper.getWorkspace(); } - @Override public boolean equals(Object element) { - return element instanceof MappableElement && value.equals(((MappableElement) element).value); + @Override public int hashCode() { + return value == null ? 0 : value.hashCode(); } - public static class Unique extends MappableElement { - - public Unique(MappableElement original) { - super(original.mapper); - this.value = original.value; - } - - @Override public int hashCode() { - return getMappedValue().hashCode(); - } - - @Override public boolean equals(Object element) { - return element instanceof MappableElement && getMappedValue().equals( - ((MappableElement) element).getMappedValue()); - } - + @Override public boolean equals(Object element) { + return element instanceof MappableElement && (value != null && value.equals(((MappableElement) element).value)); } } diff --git a/src/main/java/net/mcreator/generator/mapping/NameMapper.java b/src/main/java/net/mcreator/generator/mapping/NameMapper.java index 19760e3f083..24acea0af62 100644 --- a/src/main/java/net/mcreator/generator/mapping/NameMapper.java +++ b/src/main/java/net/mcreator/generator/mapping/NameMapper.java @@ -35,8 +35,8 @@ public class NameMapper { public static final String UNKNOWN_ELEMENT = "deleted_mod_element"; - String mappingSource; - public Workspace workspace; + private final String mappingSource; + private Workspace workspace; public NameMapper(Workspace workspace, String mappingSource) { this.mappingSource = mappingSource; @@ -47,6 +47,14 @@ public void setWorkspace(Workspace workspace) { this.workspace = workspace; } + public Workspace getWorkspace() { + return workspace; + } + + public String getMappingSource() { + return mappingSource; + } + public String getMapping(String origName) { return this.getMapping(origName, 0); } diff --git a/src/main/java/net/mcreator/generator/mapping/NonMappableElement.java b/src/main/java/net/mcreator/generator/mapping/NonMappableElement.java new file mode 100644 index 00000000000..4a431e8e493 --- /dev/null +++ b/src/main/java/net/mcreator/generator/mapping/NonMappableElement.java @@ -0,0 +1,59 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.generator.mapping; + +import net.mcreator.minecraft.DataListEntry; +import net.mcreator.workspace.Workspace; + +import javax.annotation.Nullable; +import java.util.Optional; + +/** + * In some cases, one may need to pass a string where a MappableElement is expected. This class is used for such cases. + */ +public class NonMappableElement extends MappableElement { + + @Nullable private Workspace workspace = null; + + public NonMappableElement(String value) { + super(null, value); + } + + @Override public String getMappedValue() { + return getUnmappedValue(); + } + + @Override public boolean canProperlyMap() { + return true; + } + + @Override public Optional getDataListEntry() { + return Optional.empty(); + } + + @Override public void setWorkspace(@Nullable Workspace workspace) { + this.workspace = workspace; + } + + @Nullable @Override public Workspace getWorkspace() { + return this.workspace; + } + +} diff --git a/src/main/java/net/mcreator/generator/mapping/UniquelyMappedElement.java b/src/main/java/net/mcreator/generator/mapping/UniquelyMappedElement.java new file mode 100644 index 00000000000..9e4730bd359 --- /dev/null +++ b/src/main/java/net/mcreator/generator/mapping/UniquelyMappedElement.java @@ -0,0 +1,41 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.generator.mapping; + +/** + * Used to make sure that the element is unique after mapping by overriding {@link #hashCode()} and {@link #equals(Object)} methods + * that compare the mapped values instead of the unmapped ones as done by the default implementation of MappableElement. + */ +public class UniquelyMappedElement extends MappableElement { + + public UniquelyMappedElement(MappableElement original) { + super(original.mapper, original.getUnmappedValue()); + } + + @Override public int hashCode() { + return getMappedValue().hashCode(); + } + + @Override public boolean equals(Object element) { + return element instanceof MappableElement && getMappedValue().equals( + ((MappableElement) element).getMappedValue()); + } + +} diff --git a/src/main/java/net/mcreator/generator/setup/WorkspaceGeneratorSetup.java b/src/main/java/net/mcreator/generator/setup/WorkspaceGeneratorSetup.java index be26ed34e85..afef5525904 100644 --- a/src/main/java/net/mcreator/generator/setup/WorkspaceGeneratorSetup.java +++ b/src/main/java/net/mcreator/generator/setup/WorkspaceGeneratorSetup.java @@ -139,7 +139,7 @@ public static void setupWorkspaceBase(Workspace workspace) { Template freemarkerTemplate = InlineTemplatesHandler.getTemplate(contents); StringWriter stringWriter = new StringWriter(); freemarkerTemplate.process(dataModel, stringWriter, - InlineTemplatesHandler.getConfiguration().getBeansWrapper()); + InlineTemplatesHandler.getConfiguration().getObjectWrapper()); FileIO.writeStringToFile(stringWriter.getBuffer().toString(), outFile); } else { FileUtils.copyInputStreamToFile(stream, outFile); diff --git a/src/main/java/net/mcreator/generator/template/TemplateExpressionParser.java b/src/main/java/net/mcreator/generator/template/TemplateExpressionParser.java index 421e2d1b5cc..73ad0e2d8a8 100644 --- a/src/main/java/net/mcreator/generator/template/TemplateExpressionParser.java +++ b/src/main/java/net/mcreator/generator/template/TemplateExpressionParser.java @@ -124,7 +124,8 @@ public static Object processFTLExpression(Generator generator, String expression Template t = InlineTemplatesHandler.getTemplate("${_retVal.set(" + expression + ")}"); t.process(dataModel, NullWriter.INSTANCE, - generator.getGeneratorConfiguration().getTemplateGenConfigFromName("templates").getBeansWrapper()); + generator.getGeneratorConfiguration().getTemplateGenConfigFromName("templates").getConfiguration() + .getObjectWrapper()); return retVal.get(); } catch (Exception e) { diff --git a/src/main/java/net/mcreator/generator/template/TemplateGenerator.java b/src/main/java/net/mcreator/generator/template/TemplateGenerator.java index 402149965d7..0a53d3107d1 100644 --- a/src/main/java/net/mcreator/generator/template/TemplateGenerator.java +++ b/src/main/java/net/mcreator/generator/template/TemplateGenerator.java @@ -125,7 +125,8 @@ private String generateTemplate(String templateName, Map dataMod try { Template freemarkerTemplate = templateGeneratorConfiguration.getConfiguration().getTemplate(templateName); StringWriter stringWriter = new StringWriter(); - freemarkerTemplate.process(dataModel, stringWriter, templateGeneratorConfiguration.getBeansWrapper()); + freemarkerTemplate.process(dataModel, stringWriter, + templateGeneratorConfiguration.getConfiguration().getObjectWrapper()); return stringWriter.getBuffer().toString(); } catch (IOException | TemplateException e) { LOG.error("Failed to generate template: " + templateName, e); @@ -144,7 +145,8 @@ private String generateTemplateFromString(String template, Map d } StringWriter stringWriter = new StringWriter(); - freemarkerTemplate.process(dataModel, stringWriter, templateGeneratorConfiguration.getBeansWrapper()); + freemarkerTemplate.process(dataModel, stringWriter, + templateGeneratorConfiguration.getConfiguration().getObjectWrapper()); return stringWriter.getBuffer().toString(); } catch (IOException | TemplateException e) { LOG.error("Failed to generate template from string", e); diff --git a/src/main/java/net/mcreator/generator/template/TemplateGeneratorConfiguration.java b/src/main/java/net/mcreator/generator/template/TemplateGeneratorConfiguration.java index 43a4a6c27d8..60029223308 100644 --- a/src/main/java/net/mcreator/generator/template/TemplateGeneratorConfiguration.java +++ b/src/main/java/net/mcreator/generator/template/TemplateGeneratorConfiguration.java @@ -23,6 +23,7 @@ import freemarker.cache.TemplateLoader; import freemarker.ext.beans.BeansWrapper; import freemarker.template.Configuration; +import freemarker.template.ObjectWrapper; import net.mcreator.generator.GeneratorConfiguration; import net.mcreator.generator.template.base.DefaultFreemarkerConfiguration; import net.mcreator.plugin.PluginLoader; @@ -55,11 +56,8 @@ public TemplateGeneratorConfiguration(GeneratorConfiguration generatorConfigurat configuration.setTemplateLoader(new MultiTemplateLoader(templateLoaderList.toArray(new TemplateLoader[0]))); } - public Configuration getConfiguration() { + public DefaultFreemarkerConfiguration getConfiguration() { return configuration; } - public BeansWrapper getBeansWrapper() { - return configuration.getBeansWrapper(); - } } diff --git a/src/main/java/net/mcreator/generator/template/base/DefaultFreemarkerConfiguration.java b/src/main/java/net/mcreator/generator/template/base/DefaultFreemarkerConfiguration.java index 0c75aacc362..d7304e559e8 100644 --- a/src/main/java/net/mcreator/generator/template/base/DefaultFreemarkerConfiguration.java +++ b/src/main/java/net/mcreator/generator/template/base/DefaultFreemarkerConfiguration.java @@ -20,7 +20,6 @@ import freemarker.cache.SoftCacheStorage; import freemarker.core.JSONCFormat; -import freemarker.ext.beans.BeansWrapper; import freemarker.ext.beans.BeansWrapperBuilder; import freemarker.template.Configuration; import freemarker.template.TemplateExceptionHandler; @@ -30,8 +29,6 @@ public class DefaultFreemarkerConfiguration extends Configuration { - private final BeansWrapper beansWrapper; - private static final Version FTL_CONFIGURATION_VERSION = Configuration.VERSION_2_3_32; public DefaultFreemarkerConfiguration() { @@ -49,11 +46,7 @@ public DefaultFreemarkerConfiguration() { BeansWrapperBuilder wrapperBuilder = new BeansWrapperBuilder(FTL_CONFIGURATION_VERSION); wrapperBuilder.setExposeFields(true); - this.beansWrapper = wrapperBuilder.build(); - } - - public BeansWrapper getBeansWrapper() { - return beansWrapper; + setObjectWrapper(wrapperBuilder.build()); } } diff --git a/src/main/java/net/mcreator/gradle/GradleUtils.java b/src/main/java/net/mcreator/gradle/GradleUtils.java index 998ec33835e..922af5461e2 100644 --- a/src/main/java/net/mcreator/gradle/GradleUtils.java +++ b/src/main/java/net/mcreator/gradle/GradleUtils.java @@ -19,8 +19,8 @@ package net.mcreator.gradle; import net.mcreator.io.FileIO; -import net.mcreator.minecraft.api.ModAPIImplementation; -import net.mcreator.minecraft.api.ModAPIManager; +import net.mcreator.plugin.modapis.ModAPIImplementation; +import net.mcreator.plugin.modapis.ModAPIManager; import net.mcreator.preferences.PreferencesManager; import net.mcreator.workspace.Workspace; import org.apache.commons.io.FilenameUtils; diff --git a/src/main/java/net/mcreator/io/LoggingSystem.java b/src/main/java/net/mcreator/io/LoggingSystem.java new file mode 100644 index 00000000000..eb3f73edbef --- /dev/null +++ b/src/main/java/net/mcreator/io/LoggingSystem.java @@ -0,0 +1,47 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.io; + +import net.mcreator.util.DefaultExceptionHandler; +import net.mcreator.util.LoggingOutputStream; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; + +import java.io.PrintStream; +import java.lang.management.ManagementFactory; + +public class LoggingSystem { + + public static void init() { + System.setProperty("log_directory", UserFolderManager.getFileFromUserFolder("").getAbsolutePath()); + + if (OS.getOS() == OS.WINDOWS && ManagementFactory.getRuntimeMXBean().getInputArguments().stream() + .noneMatch(arg -> arg.contains("idea_rt.jar"))) { + System.setProperty("log_disable_ansi", "true"); + } else { + System.setProperty("log_disable_ansi", "false"); + } + + System.setErr(new PrintStream(new LoggingOutputStream(LogManager.getLogger("STDERR"), Level.ERROR), true)); + System.setOut(new PrintStream(new LoggingOutputStream(LogManager.getLogger("STDOUT"), Level.INFO), true)); + Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler()); + } + +} diff --git a/src/main/java/net/mcreator/minecraft/ElementUtil.java b/src/main/java/net/mcreator/minecraft/ElementUtil.java index c7a926159da..b174e58bb06 100644 --- a/src/main/java/net/mcreator/minecraft/ElementUtil.java +++ b/src/main/java/net/mcreator/minecraft/ElementUtil.java @@ -22,7 +22,9 @@ import net.mcreator.element.BaseType; import net.mcreator.element.ModElementType; import net.mcreator.element.parts.MItemBlock; +import net.mcreator.element.types.LivingEntity; import net.mcreator.element.types.interfaces.IPOIProvider; +import net.mcreator.ui.minecraft.states.PropertyData; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; import net.mcreator.workspace.elements.SoundElement; @@ -185,7 +187,7 @@ public static List loadAllTabs(Workspace workspace) { } public static List loadAllBiomes(Workspace workspace) { - List biomes = getCustomElementsOfType(workspace, BaseType.BIOME); + List biomes = getCustomElementsOfType(workspace, ModElementType.BIOME); biomes.addAll(DataListLoader.loadDataList("biomes")); Collections.sort(biomes); return biomes; @@ -208,7 +210,8 @@ public static List loadEnchantmentTypes() { } public static List loadAllEntities(Workspace workspace) { - List retval = getCustomElementsOfType(workspace, BaseType.ENTITY); + List retval = getCustomElements(workspace, + mu -> mu.getBaseTypesProvided().contains(BaseType.ENTITY)); retval.addAll(DataListLoader.loadDataList("entities")); Collections.sort(retval); return retval; @@ -222,12 +225,33 @@ public static List loadAllEntities(Workspace workspace) { * @return All entities that can be spawned */ public static List loadAllSpawnableEntities(Workspace workspace) { - List retval = getCustomElementsOfType(workspace, BaseType.ENTITY); + List retval = getCustomElements(workspace, + mu -> mu.getBaseTypesProvided().contains(BaseType.ENTITY)); retval.addAll(DataListLoader.loadDataList("entities").stream().filter(typeMatches("spawnable")).toList()); Collections.sort(retval); return retval; } + public static List loadCustomEntities(Workspace workspace) { + List retval = getCustomElements(workspace, + mu -> mu.getBaseTypesProvided().contains(BaseType.ENTITY)); + Collections.sort(retval); + return retval; + } + + public static List loadEntityDataListFromCustomEntity(Workspace workspace, String entityName, + Class> type) { + if (entityName != null) { + LivingEntity entity = (LivingEntity) workspace.getModElementByName(entityName.replace("CUSTOM:", "")) + .getGeneratableElement(); + if (entity != null) { + return entity.entityDataEntries.stream().filter(e -> e.property().getClass().equals(type)) + .map(e -> e.property().getName()).toList(); + } + } + return new ArrayList<>(); + } + public static List loadAllParticles(Workspace workspace) { return loadDataListAndElements(workspace, "particles", false, null, "particle"); } @@ -341,14 +365,12 @@ public static String[] loadDirections() { return new String[] { "DOWN", "UP", "NORTH", "SOUTH", "WEST", "EAST" }; } - public static ArrayList loadBasicGUI(Workspace workspace) { + public static ArrayList loadBasicGUIs(Workspace workspace) { ArrayList blocks = new ArrayList<>(); - for (ModElement mu : workspace.getModElements()) { - if (mu.getType().getBaseType() == BaseType.GUI) + if (mu.getType() == ModElementType.GUI) blocks.add(mu.getName()); } - return blocks; } @@ -366,10 +388,6 @@ private static List getCustomElementsOfType(@Nonnull Workspace wo return getCustomElements(workspace, modelement -> modelement.getType() == type); } - private static List getCustomElementsOfType(@Nonnull Workspace workspace, BaseType type) { - return getCustomElements(workspace, mu -> mu.getType().getBaseType() == type); - } - /** *

          Returns an array with the names of procedures that return the given variable type

          * diff --git a/src/main/java/net/mcreator/minecraft/MinecraftImageGenerator.java b/src/main/java/net/mcreator/minecraft/MinecraftImageGenerator.java index 65c84a6fda0..87b3d498e56 100644 --- a/src/main/java/net/mcreator/minecraft/MinecraftImageGenerator.java +++ b/src/main/java/net/mcreator/minecraft/MinecraftImageGenerator.java @@ -1,6 +1,7 @@ /* * MCreator (https://mcreator.net/) - * Copyright (C) 2020 Pylo and contributors + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -235,11 +236,8 @@ public static Image generateArmorPreviewFrame2() { return image; } - private static void drawTwoSlotRecipe(Graphics2D graphics2D, Workspace workspace, MItemBlock input, - MItemBlock result) { - int slotOffsetY = 9; - int oSlotOffsetY = 9; - + private static void drawTwoSlotRecipe(Graphics2D graphics2D, int slotOffsetY, int oSlotOffsetY, + Workspace workspace, MItemBlock input, MItemBlock result) { //box 1 graphics2D.drawLine(1, slotOffsetY, 8, slotOffsetY); graphics2D.drawLine(1, 9 + slotOffsetY, 8, 9 + slotOffsetY); @@ -310,7 +308,7 @@ public static BufferedImage generateBlastingPreviewPicture(Workspace workspace, graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics2D.setColor(new Color(190, 190, 190, 65)); - drawTwoSlotRecipe(graphics2D, workspace, input, result); + drawTwoSlotRecipe(graphics2D, 9, 9, workspace, input, result); //explosion graphics2D.drawPolygon(getStarPolygon(14, 13, 4, 2, 6, 0.5235987755982988)); @@ -323,29 +321,54 @@ public static BufferedImage generateBlastingPreviewPicture(Workspace workspace, /** *

          This method generates smithing recipe images.

          * + * @param template Template of the recipe. * @param input Input of the recipe. - * @param addition Addition of the recipe + * @param addition Addition of the recipe. * @param result Result of the recipe. * @return Returns the generated image. */ - public static BufferedImage generateSmithingPreviewPicture(Workspace workspace, MItemBlock input, - MItemBlock addition, MItemBlock result) { + public static BufferedImage generateSmithingPreviewPicture(Workspace workspace, MItemBlock template, + MItemBlock input, MItemBlock addition, MItemBlock result) { BufferedImage icon = new BufferedImage(28, 28, BufferedImage.TYPE_INT_ARGB); + int offsetY = 9; Graphics2D graphics2D = icon.createGraphics(); graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics2D.setColor(new Color(190, 190, 190, 65)); - drawTwoSlotRecipe(graphics2D, workspace, input, addition); + if (template != null && !template.isEmpty()) { + offsetY += 9; + + //box 3 + graphics2D.drawLine(10, 0, 17, 0); + graphics2D.drawLine(10, 9, 17, 9); + graphics2D.drawLine(9, 0, 9, 9); + graphics2D.drawLine(18, 0, 18, 9); + + //template + graphics2D.drawImage(ImageUtils.resizeAA(ImageUtils.autoCropTile(ImageUtils.toBufferedImage( + MCItem.getBlockIconBasedOnName(workspace, template.getUnmappedValue()).getImage())), 8), 10, 1, + null); + + //arrow + graphics2D.drawLine(13, 11, 13, 14); + graphics2D.drawLine(14, 11, 14, 14); + + graphics2D.drawLine(11, 15, 16, 15); + graphics2D.drawLine(12, 16, 15, 16); + graphics2D.drawLine(13, 17, 14, 17); + } + + drawTwoSlotRecipe(graphics2D, offsetY, offsetY, workspace, input, addition); //plus - graphics2D.drawLine(11, 13, 12, 13); - graphics2D.drawLine(11, 14, 12, 14); + graphics2D.drawLine(11, offsetY + 4, 12, offsetY + 4); + graphics2D.drawLine(11, offsetY + 5, 12, offsetY + 5); - graphics2D.drawLine(15, 13, 16, 13); - graphics2D.drawLine(15, 14, 16, 14); + graphics2D.drawLine(15, offsetY + 4, 16, offsetY + 4); + graphics2D.drawLine(15, offsetY + 5, 16, offsetY + 5); - graphics2D.drawLine(13, 11, 13, 16); - graphics2D.drawLine(14, 11, 14, 16); + graphics2D.drawLine(13, offsetY + 2, 13, offsetY + 7); + graphics2D.drawLine(14, offsetY + 2, 14, offsetY + 7); graphics2D.dispose(); return icon; @@ -413,7 +436,7 @@ public static BufferedImage generateSmokingPreviewPicture(Workspace workspace, M graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics2D.setColor(new Color(190, 190, 190, 65)); - drawTwoSlotRecipe(graphics2D, workspace, input, result); + drawTwoSlotRecipe(graphics2D, 9, 9, workspace, input, result); //smoke graphics2D.drawLine(11, 11, 11, 16); @@ -439,7 +462,7 @@ public static BufferedImage generateStoneCuttingPreviewPicture(Workspace workspa graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics2D.setColor(new Color(190, 190, 190, 65)); - drawTwoSlotRecipe(graphics2D, workspace, input, result); + drawTwoSlotRecipe(graphics2D, 9, 9, workspace, input, result); //saw graphics2D.drawOval(11, 11, 5, 5); @@ -463,7 +486,7 @@ public static BufferedImage generateCampfirePreviewPicture(Workspace workspace, graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics2D.setColor(new Color(190, 190, 190, 65)); - drawTwoSlotRecipe(graphics2D, workspace, input, result); + drawTwoSlotRecipe(graphics2D, 9, 9, workspace, input, result); //campfire graphics2D.drawLine(12, 11, 12, 16); @@ -498,7 +521,7 @@ public static BufferedImage generateRecipePreviewPicture(Workspace workspace, MI graphics2D.setColor(new Color(190, 190, 190, 65)); if (recipe.length == 1) { - drawTwoSlotRecipe(graphics2D, workspace, recipe[0], result); + drawTwoSlotRecipe(graphics2D, 9, 9, workspace, recipe[0], result); //arrow graphics2D.drawLine(11, 14, 16, 14); @@ -1332,6 +1355,10 @@ public static BufferedImage generateProcedurePreviewPicture(String procedurexml, blockColor = Dependency.getColor("world"); } + // If no colors can be determined, use default mod element icon instead + if (startColor == null && returnColor == null && blockColor == null) + return null; + if (startColor != null) graphics2D.drawImage( ImageUtils.colorize(UIRES.get("mod_preview_bases.procedure_base"), startColor, false) @@ -1429,24 +1456,9 @@ public static BufferedImage generateParticlePreviewPicture(File texture, boolean * @return Returns generated image of the appropriate colour. */ public static BufferedImage generateTagPreviewPicture(String type) { - return switch (type) { - case "Items" -> ImageUtils.toBufferedImage( - ImageUtils.colorize(UIRES.get("mod_preview_bases.tag"), Dependency.getColor("itemstack"), false) - .getImage()); - case "Blocks" -> ImageUtils.toBufferedImage( - ImageUtils.colorize(UIRES.get("mod_preview_bases.tag"), Dependency.getColor("blockstate"), - false).getImage()); - case "Entities" -> ImageUtils.toBufferedImage( - ImageUtils.colorize(UIRES.get("mod_preview_bases.tag"), Dependency.getColor("entity"), false) - .getImage()); - case "Functions" -> ImageUtils.toBufferedImage( - ImageUtils.colorize(UIRES.get("mod_preview_bases.tag"), Dependency.getColor("string"), false) - .getImage()); - case "Biomes" -> ImageUtils.toBufferedImage( - ImageUtils.colorize(UIRES.get("mod_preview_bases.tag"), Dependency.getColor("world"), false) - .getImage()); - default -> null; - }; + return ImageUtils.toBufferedImage( + ImageUtils.colorize(UIRES.get("mod_preview_bases.tag"), TagType.fromLegacyName(type).getColor(), + false).getImage()); } /** diff --git a/src/main/java/net/mcreator/minecraft/TagType.java b/src/main/java/net/mcreator/minecraft/TagType.java new file mode 100644 index 00000000000..241f2283821 --- /dev/null +++ b/src/main/java/net/mcreator/minecraft/TagType.java @@ -0,0 +1,71 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.minecraft; + +import net.mcreator.blockly.data.Dependency; +import net.mcreator.ui.init.L10N; + +import java.awt.*; +import java.util.Locale; + +public enum TagType { + + //@formatter:off + ITEMS("items", Dependency.getColor("itemstack")), + BLOCKS("blocks", Dependency.getColor("blockstate")), + ENTITIES("entity_types", Dependency.getColor("entity")), + FUNCTIONS("functions", Dependency.getColor("string")), + BIOMES("worldgen/biome", Dependency.getColor("world")), + DAMAGE_TYPES("damage_type", Dependency.getColor("damagesource")); + //@formatter:on + + private final String folder; + private final Color color; + + TagType(String folder, Color color) { + this.folder = folder; + this.color = color; + } + + public String getFolder() { + return folder; + } + + public Color getColor() { + return color; + } + + @Override public String toString() { + return L10N.t("tag.type." + name().toLowerCase(Locale.ENGLISH)); + } + + public static TagType fromLegacyName(String readableName) { + return switch (readableName) { + case "Items" -> ITEMS; + case "Blocks" -> BLOCKS; + case "Entities" -> ENTITIES; + case "Functions" -> FUNCTIONS; + case "Biomes" -> BIOMES; + case "Damage types" -> DAMAGE_TYPES; + default -> null; + }; + } + +} diff --git a/src/main/java/net/mcreator/plugin/PluginLoader.java b/src/main/java/net/mcreator/plugin/PluginLoader.java index dc26f02e8bd..65b2ad482f3 100644 --- a/src/main/java/net/mcreator/plugin/PluginLoader.java +++ b/src/main/java/net/mcreator/plugin/PluginLoader.java @@ -36,6 +36,7 @@ import org.reflections.util.ConfigurationBuilder; import javax.annotation.Nullable; +import java.beans.Introspector; import java.io.File; import java.lang.reflect.Constructor; import java.net.URL; @@ -71,6 +72,8 @@ public static void initInstance() { private final Reflections reflections; + private final Set pluginsModules; + /** *

          The core of the detection and loading

          */ @@ -81,6 +84,7 @@ public PluginLoader() { this.failedPlugins = new HashSet<>(); this.javaPlugins = new HashSet<>(); this.pluginUpdates = new HashSet<>(); + this.pluginsModules = new HashSet<>(); UserFolderManager.getFileFromUserFolder("plugins").mkdirs(); @@ -118,6 +122,15 @@ public PluginLoader() { try { return super.findClass(name); } catch (Exception e) { + for (StackTraceElement element : e.getStackTrace()) { + if (element.getClassName().equals(Introspector.class.getName())) { + // If class not found was triggered due to Introspector looking for + // XXXBeanInfo class or XXXCustomizer class, we can ignore this and + // not log error or mark plugin as failed by setting loaded_failure + throw e; + } + } + plugin.loaded_failure = "internal error: " + e.getClass().getSimpleName() + ": " + e.getMessage(); LOG.error("Failed to load class " + name + " for plugin " + plugin.getID(), e); @@ -128,6 +141,8 @@ public PluginLoader() { javaPluginCL.addURL(plugin.toURL()); + pluginsModules.add(javaPluginCL.getUnnamedModule()); + Class clazz = javaPluginCL.loadClass(plugin.getJavaPlugin()); Constructor ctor = clazz.getConstructor(Plugin.class); JavaPlugin javaPlugin = (JavaPlugin) ctor.newInstance(plugin); @@ -200,6 +215,13 @@ public Collection getPluginUpdates() { return Collections.unmodifiableCollection(pluginUpdates); } + /** + * @return

          A list of all plugin modules.

          + */ + public Collection getPluginModules() { + return Collections.unmodifiableCollection(pluginsModules); + } + synchronized private List listPluginsFromFolder(File folder, boolean builtin) { LOG.debug("Searching for plugins in: " + folder); diff --git a/src/main/java/net/mcreator/minecraft/api/ModAPI.java b/src/main/java/net/mcreator/plugin/modapis/ModAPI.java similarity index 93% rename from src/main/java/net/mcreator/minecraft/api/ModAPI.java rename to src/main/java/net/mcreator/plugin/modapis/ModAPI.java index c10391f4ed0..ff67c2f5105 100644 --- a/src/main/java/net/mcreator/minecraft/api/ModAPI.java +++ b/src/main/java/net/mcreator/plugin/modapis/ModAPI.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.mcreator.minecraft.api; +package net.mcreator.plugin.modapis; import java.util.Map; diff --git a/src/main/java/net/mcreator/minecraft/api/ModAPIImplementation.java b/src/main/java/net/mcreator/plugin/modapis/ModAPIImplementation.java similarity index 93% rename from src/main/java/net/mcreator/minecraft/api/ModAPIImplementation.java rename to src/main/java/net/mcreator/plugin/modapis/ModAPIImplementation.java index 9c855086a15..c02d4555a08 100644 --- a/src/main/java/net/mcreator/minecraft/api/ModAPIImplementation.java +++ b/src/main/java/net/mcreator/plugin/modapis/ModAPIImplementation.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.mcreator.minecraft.api; +package net.mcreator.plugin.modapis; import javax.annotation.Nullable; import java.util.List; diff --git a/src/main/java/net/mcreator/minecraft/api/ModAPIManager.java b/src/main/java/net/mcreator/plugin/modapis/ModAPIManager.java similarity index 96% rename from src/main/java/net/mcreator/minecraft/api/ModAPIManager.java rename to src/main/java/net/mcreator/plugin/modapis/ModAPIManager.java index 8ca5dc6a35f..894f7600cf1 100644 --- a/src/main/java/net/mcreator/minecraft/api/ModAPIManager.java +++ b/src/main/java/net/mcreator/plugin/modapis/ModAPIManager.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package net.mcreator.minecraft.api; +package net.mcreator.plugin.modapis; import net.mcreator.io.FileIO; import net.mcreator.plugin.PluginLoader; diff --git a/src/main/java/net/mcreator/preferences/data/UISection.java b/src/main/java/net/mcreator/preferences/data/UISection.java index 1988b6c2fcd..3f0a1a6c14e 100644 --- a/src/main/java/net/mcreator/preferences/data/UISection.java +++ b/src/main/java/net/mcreator/preferences/data/UISection.java @@ -27,7 +27,7 @@ import net.mcreator.preferences.entries.LocaleEntry; import net.mcreator.preferences.entries.StringEntry; import net.mcreator.ui.init.L10N; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.ColorScheme; import java.util.Locale; @@ -50,7 +50,7 @@ public UISection(String preferencesIdentifier) { super(preferencesIdentifier); language = addEntry(new LocaleEntry("language", L10N.DEFAULT_LOCALE)); - interfaceAccentColor = addEntry(new ColorEntry("interfaceAccentColor", MCreatorTheme.MAIN_TINT_DEFAULT)); + interfaceAccentColor = addEntry(new ColorEntry("interfaceAccentColor", ColorScheme.MAIN_TINT_DEFAULT)); backgroundSource = addEntry( new StringEntry("backgroundSource", "All", "All", "Current theme", "Custom", "None")); aaText = addEntry(new BooleanEntry("aaText", true)); diff --git a/src/main/java/net/mcreator/preferences/entries/ColorEntry.java b/src/main/java/net/mcreator/preferences/entries/ColorEntry.java index e9cfed97795..59008b185a9 100644 --- a/src/main/java/net/mcreator/preferences/entries/ColorEntry.java +++ b/src/main/java/net/mcreator/preferences/entries/ColorEntry.java @@ -46,7 +46,7 @@ public ColorEntry(String id, Color value, boolean allowNullColor, boolean allowT @Override public JComponent getComponent(Window parent, Consumer fct) { JColor box = new JColor(parent, allowNullColor, allowTransparency); box.setColor(value); - box.setColorSelectedListener(fct::accept); + box.addColorSelectedListener(fct::accept); return box; } diff --git a/src/main/java/net/mcreator/preferences/entries/LocaleEntry.java b/src/main/java/net/mcreator/preferences/entries/LocaleEntry.java index b8372e545f4..b44226f6b29 100644 --- a/src/main/java/net/mcreator/preferences/entries/LocaleEntry.java +++ b/src/main/java/net/mcreator/preferences/entries/LocaleEntry.java @@ -24,6 +24,7 @@ import net.mcreator.preferences.PreferencesManager; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; import javax.imageio.ImageIO; @@ -81,7 +82,7 @@ private static class LocaleListRenderer extends JLabel implements ListCellRender public Component getListCellRendererComponent(JList list, Locale value, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(isSelected); - setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + setBackground(Theme.current().getInterfaceAccentColor()); setForeground(Color.white); setBorder(new EmptyBorder(0, 1, 0, 0)); diff --git a/src/main/java/net/mcreator/themes/Theme.java b/src/main/java/net/mcreator/themes/Theme.java deleted file mode 100644 index 121915df088..00000000000 --- a/src/main/java/net/mcreator/themes/Theme.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * MCreator (https://mcreator.net/) - * Copyright (C) 2012-2020, Pylo - * Copyright (C) 2020-2021, Pylo, opensource contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.mcreator.themes; - -import net.mcreator.ui.init.L10N; - -import javax.annotation.Nullable; -import javax.swing.*; - -/** - *

          A Theme can change images MCreator will use and redefine the colors and the style - * of {@link net.mcreator.ui.blockly.BlocklyPanel} and {@link net.mcreator.ui.ide.RSyntaxTextAreaStyler} by creating a new {@link net.mcreator.themes.ColorScheme}

          . - */ -@SuppressWarnings("unused") public class Theme { - - private String id; - private String name; - - @Nullable private String description; - @Nullable private String version; - @Nullable private String credits; - @Nullable private String defaultFont; - private boolean useDefaultFontForSecondary; - private int fontSize; - - @Nullable private ColorScheme colorScheme; - - private ImageIcon icon; - - /** - * The ID is the theme's registry name. It is used to differentiate each theme in the code. - * This ID is also the main folder's name of the theme. - * - * @return

          The theme's ID

          - */ - public String getID() { - return id; - } - - /** - * This method sets the id of this theme using the name of its main folder. - * - * @param id

          The theme's ID

          - */ - public void setID(String id) { - this.id = id; - } - - /** - * @return

          Its displayed name

          - */ - public String getName() { - return name; - } - - /** - * @return

          A description displayed in the {@link net.mcreator.ui.dialogs.preferences.ThemesPanel} if provided.

          - */ - public String getDescription() { - // Description inside the JSON file - if (description != null) - return description; - // Localized description - else if (!L10N.t("theme." + id + ".description").equals("theme." + id + ".description")) - return L10N.t("theme." + id + ".description"); - // No description - else - return ""; - } - - /** - * @return

          A String with optional credits to give to someone.

          - */ - @Nullable public String getCredits() { - return credits; - } - - /** - * @return

          The theme's version if provided

          - */ - @Nullable public String getVersion() { - return version; - } - - /** - *

          The main font size changes the size of the text for the main font. Usually, this parameter should not be changed except if the font is too big or too small with the default value.

          - * - * @return

          The main font size

          - */ - public int getFontSize() { - if (fontSize != 0) - return fontSize; - else - return 12; - } - - /** - * @return The default font to use with some languages. - */ - public String getDefaultFont() { - if (defaultFont != null) - return defaultFont; - else - return "Sans-Serif"; - } - - /** - * @return

          Use the default font as the main font

          - */ - public boolean useDefaultFontForSecondary() { - return useDefaultFontForSecondary; - } - - /** - *

          This methods gets the {@link net.mcreator.themes.ColorScheme} to use with the theme

          - * - * @return Returns the {@link net.mcreator.themes.ColorScheme} of the Theme if one is defined. If the Theme does not create a new {@link net.mcreator.themes.ColorScheme}, the Dark's theme {@link net.mcreator.themes.ColorScheme} will be used. - */ - public ColorScheme getColorScheme() { - if (colorScheme != null) - return colorScheme; - else - return ThemeLoader.getTheme("default_dark").getColorScheme(); - } - - /** - * This icon is only with {@link net.mcreator.ui.dialogs.preferences.ThemesPanel}. - * - * @return

          An {@link ImageIcon} representing the plugin.

          - */ - public ImageIcon getIcon() { - return icon; - } - - /** - *

          To be detected, the name of the image file needs to be "icon.png" located into the main folder.

          - * - * @param icon

          An {@link ImageIcon} to display in {@link net.mcreator.ui.dialogs.preferences.ThemesPanel}

          - */ - public void setIcon(ImageIcon icon) { - this.icon = icon; - } - - @Override public String toString() { - return getID() + ": " + getName(); - } -} diff --git a/src/main/java/net/mcreator/ui/MCreator.java b/src/main/java/net/mcreator/ui/MCreator.java index 6a040f51807..a22536e8a17 100644 --- a/src/main/java/net/mcreator/ui/MCreator.java +++ b/src/main/java/net/mcreator/ui/MCreator.java @@ -31,13 +31,16 @@ import net.mcreator.ui.action.ActionRegistry; import net.mcreator.ui.action.impl.workspace.RegenerateCodeAction; import net.mcreator.ui.browser.WorkspaceFileBrowser; +import net.mcreator.ui.component.BlockingGlassPane; import net.mcreator.ui.component.ImagePanel; +import net.mcreator.ui.component.JEmptyBox; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.dialogs.workspace.WorkspaceGeneratorSetupDialog; import net.mcreator.ui.gradle.GradleConsole; import net.mcreator.ui.init.BackgroundLoader; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.notifications.INotificationConsumer; import net.mcreator.ui.notifications.NotificationsRenderer; import net.mcreator.ui.workspace.WorkspacePanel; @@ -157,7 +160,7 @@ else if (screenSize.getWidth() > 1290 && screenSize.getHeight() > 795) mcreatorTabs.addTabShownListener(tab -> { if (tab.equals(workspaceTab)) - mv.updateMods(); + mv.reloadElementsInCurrentTab(); menuBar.refreshMenuBar(); @@ -200,7 +203,7 @@ else if (screenSize.getWidth() > 1290 && screenSize.getHeight() > 795) ((ImagePanel) mpan).setKeepRatio(true); } else { mpan = new JPanel(); - mpan.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + mpan.setBackground(Theme.current().getSecondAltBackgroundColor()); } mpan.setLayout(new BorderLayout()); @@ -209,8 +212,8 @@ else if (screenSize.getWidth() > 1290 && screenSize.getHeight() > 795) mv = new WorkspacePanel(this); JPanel pon = new JPanel(new BorderLayout(0, 0)); - pon.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - pon.setBorder(BorderFactory.createMatteBorder(0, 1, 0, 0, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"))); + pon.setBackground(Theme.current().getBackgroundColor()); + pon.setBorder(BorderFactory.createMatteBorder(0, 1, 0, 0, Theme.current().getSecondAltBackgroundColor())); workspaceTab = new MCreatorTabs.Tab(L10N.t("tab.workspace"), PanelUtils.maxMargin(mv, 5, true, true, true, true), "Workspace", true, false); @@ -253,14 +256,16 @@ else if (screenSize.getWidth() > 1290 && screenSize.getHeight() > 795) workspace.getFileManager().setDataSavedListener(() -> statusBar.setPersistentMessage( L10N.t("workspace.statusbar.autosave_message", new SimpleDateFormat("HH:mm").format(new Date())))); - splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, workspaceFileBrowser, - PanelUtils.northAndCenterElement(pon, mpan)); - splitPane.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + JComponent rightPanel = PanelUtils.northAndCenterElement(pon, mpan); + + splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, workspaceFileBrowser, rightPanel); + splitPane.setBackground(Theme.current().getAltBackgroundColor()); splitPane.setOneTouchExpandable(true); splitPane.setDividerLocation(280); splitPane.setDividerLocation(PreferencesManager.PREFERENCES.hidden.projectTreeSplitPos.get()); + rightPanel.setMinimumSize(new Dimension(0, 0)); workspaceFileBrowser.setMinimumSize(new Dimension(0, 0)); this.notificationsRenderer = new NotificationsRenderer(splitPane); @@ -272,9 +277,9 @@ else if (screenSize.getWidth() > 1290 && screenSize.getHeight() > 795) MCREvent.event(new MCreatorLoadedEvent(this)); } - @Override public void setVisible(boolean b) { - super.setVisible(b); - if (b) { + @Override public void setVisible(boolean makeVisible) { + super.setVisible(makeVisible); + if (makeVisible) { setCursor(new Cursor(Cursor.WAIT_CURSOR)); if (MCreatorVersionNumber.isBuildNumberDevelopment(workspace.getMCreatorVersion())) { @@ -282,8 +287,6 @@ else if (screenSize.getWidth() > 1290 && screenSize.getHeight() > 795) Launcher.version.versionlong); // if we open dev version, store new version number in it } - new Thread(this.workspaceFileBrowser::reloadTree, "File browser preloader").start(); - // backup if new version and backups are enabled if (workspace.getMCreatorVersion() < Launcher.version.versionlong && PreferencesManager.PREFERENCES.backups.backupOnVersionSwitch.get()) { @@ -308,13 +311,23 @@ else if (screenSize.getWidth() > 1290 && screenSize.getHeight() > 795) RegenerateCodeAction.regenerateCode(this, true, true); } - // reinit (preload) MCItems so workspace is more snappy when loaded + // it is not safe to do user operations on workspace while it is being preloaded, so we lock the UI + setGlassPane(getPreloaderPane()); + getGlassPane().setVisible(true); + + // Preload workspace file browser + new Thread(this.workspaceFileBrowser::reloadTree, "File browser preloader").start(); + + // reinit (preload) MCItems (also loads GEs and performs conversions if needed) new Thread(() -> { workspace.getModElements().forEach(ModElement::getMCItems); - LOG.debug("MCItems preload for mod elements completed"); - }, "ME preloader").start(); - setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + SwingUtilities.invokeLater(() -> { + getGlassPane().setVisible(false); + setGlassPane(new JEmptyBox()); + setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + }); + }, "ME preloader").start(); } } @@ -429,6 +442,17 @@ public boolean closeThisMCreator(boolean returnToProjectSelector) { return Long.valueOf(windowUID).hashCode(); } + private JComponent getPreloaderPane() { + JPanel wrap = new BlockingGlassPane(); + JLabel loading = L10N.label("workspace.loading"); + loading.setIconTextGap(5); + loading.setFont(loading.getFont().deriveFont(16f)); + loading.setForeground(Theme.current().getAltForegroundColor()); + loading.setIcon(UIRES.get("16px.loading.gif")); + wrap.add(PanelUtils.totalCenterInPanel(loading)); + return wrap; + } + public ActionRegistry getActionRegistry() { return actionRegistry; } diff --git a/src/main/java/net/mcreator/ui/MCreatorApplication.java b/src/main/java/net/mcreator/ui/MCreatorApplication.java index 2355c42e293..8eb53cf19e7 100644 --- a/src/main/java/net/mcreator/ui/MCreatorApplication.java +++ b/src/main/java/net/mcreator/ui/MCreatorApplication.java @@ -31,20 +31,22 @@ import net.mcreator.io.net.api.D8WebAPI; import net.mcreator.io.net.api.IWebAPI; import net.mcreator.minecraft.DataListLoader; -import net.mcreator.minecraft.api.ModAPIManager; import net.mcreator.plugin.MCREvent; import net.mcreator.plugin.PluginLoader; import net.mcreator.plugin.events.ApplicationLoadedEvent; import net.mcreator.plugin.events.PreGeneratorsLoadingEvent; +import net.mcreator.plugin.modapis.ModAPIManager; import net.mcreator.preferences.PreferencesManager; -import net.mcreator.themes.ThemeLoader; import net.mcreator.ui.action.impl.AboutAction; import net.mcreator.ui.component.util.DiscordClient; import net.mcreator.ui.component.util.ThreadUtil; import net.mcreator.ui.dialogs.preferences.PreferencesDialog; import net.mcreator.ui.help.HelpLoader; import net.mcreator.ui.init.*; -import net.mcreator.ui.laf.MCreatorLookAndFeel; +import net.mcreator.ui.laf.LafUtil; +import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.laf.themes.ThemeLoader; import net.mcreator.ui.notifications.StartupNotifications; import net.mcreator.ui.workspace.selector.RecentWorkspaceEntry; import net.mcreator.ui.workspace.selector.WorkspaceSelector; @@ -58,6 +60,7 @@ import org.apache.logging.log4j.Logger; import javax.swing.*; +import javax.swing.plaf.metal.MetalLookAndFeel; import java.awt.*; import java.io.File; import java.io.IOException; @@ -102,17 +105,20 @@ private MCreatorApplication(List launchArguments) { // We load UI themes now as theme plugins are loaded at this point ThemeLoader.initUIThemes(); - - splashScreen.setProgress(15, "Loading UI core"); - - UIRES.preloadImages(); + MetalLookAndFeel.setCurrentTheme(new MCreatorTheme(Theme.current())); try { - UIManager.setLookAndFeel(new MCreatorLookAndFeel()); + UIManager.setLookAndFeel(new MetalLookAndFeel()); + LafUtil.applyDefaultHTMLStyles(); + LafUtil.fixMacOSActions(); } catch (UnsupportedLookAndFeelException e) { LOG.error("Failed to set look and feel: " + e.getMessage()); } + splashScreen.setProgress(15, "Loading UI core"); + + UIRES.preloadImages(); + SoundUtils.initSoundSystem(); taskbarIntegration = new TaskbarIntegration(); diff --git a/src/main/java/net/mcreator/ui/MCreatorTabs.java b/src/main/java/net/mcreator/ui/MCreatorTabs.java index 418aa91a0b6..8d6e20328ee 100644 --- a/src/main/java/net/mcreator/ui/MCreatorTabs.java +++ b/src/main/java/net/mcreator/ui/MCreatorTabs.java @@ -25,6 +25,7 @@ import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.views.ViewBase; import net.mcreator.util.ListUtils; import net.mcreator.util.StringUtils; @@ -81,9 +82,9 @@ public class MCreatorTabs { moreTabs = new JLabel(UIRES.get("more")); moreTabs.setPreferredSize(new Dimension(40, 39)); moreTabs.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 0, 1, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 0, 1, Theme.current().getSecondAltBackgroundColor()), BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 5, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 5, 0, Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(0, 10, 0, 10)))); moreTabs.setCursor(new Cursor(Cursor.HAND_CURSOR)); moreTabs.addMouseListener(new MouseAdapter() { @@ -94,8 +95,7 @@ public class MCreatorTabs { filler = new JPanel(); filler.setOpaque(false); - filler.setBorder( - BorderFactory.createMatteBorder(0, 0, 5, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + filler.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Theme.current().getAltBackgroundColor())); } void reloadTabStrip() { @@ -107,8 +107,7 @@ void reloadTabStrip() { } moreTabsMenu = new JScrollablePopupMenu(); - moreTabsMenu.setBorder( - BorderFactory.createMatteBorder(0, 5, 0, 0, (Color) UIManager.get("MCreatorLAF.MAIN_TINT"))); + moreTabsMenu.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 0, Theme.current().getInterfaceAccentColor())); moreTabsMenu.setMaximumVisibleRows(11); int maxWidth = tabsStrip.getWidth(); @@ -212,7 +211,7 @@ public Tab showTabOrGetExisting(Object identifier, boolean notify) { for (Tab tab : tabs) { if (tab.identifier.equals(identifier)) { cardLayout.show(container, identifier.toString()); - tab.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + tab.setBackground(Theme.current().getAltBackgroundColor()); tab.selected = true; this.current = tab; if (notify) { @@ -222,7 +221,7 @@ public Tab showTabOrGetExisting(Object identifier, boolean notify) { } existing = tab; } else { - tab.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + tab.setBackground(Theme.current().getBackgroundColor()); tab.selected = false; } tab.updateBorder(); @@ -293,8 +292,8 @@ public static class Tab extends JPanel { private TabClosingListener tabClosingListener; private TabShownListener tabShownListener; - private Color inactiveColor = (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"); - private Color activeColor = (Color) UIManager.get("MCreatorLAF.MAIN_TINT"); + private Color inactiveColor = Theme.current().getAltBackgroundColor(); + private Color activeColor = Theme.current().getInterfaceAccentColor(); private boolean selected = false; @@ -340,7 +339,7 @@ private Tab(String name, ImageIcon icon, JPanel content, Object identifier, bool blo.setVerticalAlignment(SwingConstants.CENTER); blo.setCursor(new Cursor(Cursor.HAND_CURSOR)); blo.setBackground(new Color(80, 80, 80)); - blo.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + blo.setForeground(Theme.current().getForegroundColor()); setText(name); @@ -373,7 +372,7 @@ private Tab(String name, ImageIcon icon, JPanel content, Object identifier, bool } updateSize(); updateBorder(); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); } public void updateSize() { @@ -419,12 +418,12 @@ void updateBorder() { if (selected) setBorder(BorderFactory.createCompoundBorder( BorderFactory.createMatteBorder(0, 0, 0, hasRightBorder ? 1 : 0, - (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")), + Theme.current().getSecondAltBackgroundColor()), BorderFactory.createMatteBorder(0, 0, 5, 0, activeColor))); else setBorder(BorderFactory.createCompoundBorder( BorderFactory.createMatteBorder(0, 0, 0, hasRightBorder ? 1 : 0, - (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")), + Theme.current().getSecondAltBackgroundColor()), BorderFactory.createMatteBorder(0, 0, 5, 0, inactiveColor))); } diff --git a/src/main/java/net/mcreator/ui/MainMenuBar.java b/src/main/java/net/mcreator/ui/MainMenuBar.java index 9113a639df2..a2291d58d99 100644 --- a/src/main/java/net/mcreator/ui/MainMenuBar.java +++ b/src/main/java/net/mcreator/ui/MainMenuBar.java @@ -24,6 +24,7 @@ import net.mcreator.ui.ide.CodeEditorView; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.views.editor.image.ImageMakerView; import net.mcreator.ui.workspace.selector.RecentWorkspaceEntry; import net.mcreator.util.DesktopUtils; @@ -49,12 +50,12 @@ public MainMenuBar(MCreator mcreator) { boolean macOSscreenMenuBar = OS.getOS() == OS.MAC && "true".equals(System.getProperty("apple.laf.useScreenMenuBar")); - setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"))); + setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getSecondAltBackgroundColor())); if (!macOSscreenMenuBar) { JMenu logo = new JMenu(" MCreator"); logo.setMnemonic('M'); - logo.setIcon(new ImageIcon(ImageUtils.resizeAA(UIRES.getAppIcon().getImage(), 14, 14))); + logo.setIcon(new ImageIcon(ImageUtils.resize(UIRES.getAppIcon().getImage(), 16, 16))); logo.add(mcreator.actionRegistry.mcreatorWebsite); logo.add(mcreator.actionRegistry.mcreatorCommunity); SocialButtons socialButtons = new SocialButtons(); @@ -119,6 +120,12 @@ public MainMenuBar(MCreator mcreator) { imageEditor.add(mcreator.actionRegistry.imageEditorUndo); imageEditor.add(mcreator.actionRegistry.imageEditorRedo); imageEditor.addSeparator(); + imageEditor.add(mcreator.actionRegistry.imageEditorCopy); + imageEditor.add(mcreator.actionRegistry.imageEditorCopyAll); + imageEditor.add(mcreator.actionRegistry.imageEditorCut); + imageEditor.add(mcreator.actionRegistry.imageEditorPaste); + imageEditor.add(mcreator.actionRegistry.imageEditorDelete); + imageEditor.addSeparator(); imageEditor.add(mcreator.actionRegistry.imageEditorSave); imageEditor.add(mcreator.actionRegistry.imageEditorSaveAs); imageEditor.addSeparator(); @@ -135,6 +142,8 @@ public MainMenuBar(MCreator mcreator) { imageEditor.add(mcreator.actionRegistry.imageEditorHSVNoise); imageEditor.addSeparator(); imageEditor.add(mcreator.actionRegistry.imageEditorMoveLayer); + imageEditor.add(mcreator.actionRegistry.imageEditorSelectLayer); + imageEditor.add(mcreator.actionRegistry.imageEditorClearSelection); imageEditor.add(mcreator.actionRegistry.imageEditorResizeLayer); imageEditor.add(mcreator.actionRegistry.imageEditorResizeCanvas); add(imageEditor); diff --git a/src/main/java/net/mcreator/ui/MainToolBar.java b/src/main/java/net/mcreator/ui/MainToolBar.java index 091ce1cbc46..f70c9b25c05 100644 --- a/src/main/java/net/mcreator/ui/MainToolBar.java +++ b/src/main/java/net/mcreator/ui/MainToolBar.java @@ -19,6 +19,7 @@ package net.mcreator.ui; import net.mcreator.ui.component.JEmptyBox; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -31,7 +32,7 @@ public class MainToolBar extends JToolBar { private final JToolBar pluginToolbarRight = new JToolBar(); MainToolBar(MCreator mcreator) { - setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"))); + setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getSecondAltBackgroundColor())); setFloatable(false); pluginToolbarLeft.setBorder(BorderFactory.createEmptyBorder()); @@ -129,12 +130,12 @@ private static JButton decorateToolbarButton(JButton button) { button.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent mouseEvent) { super.mouseEntered(mouseEvent); - button.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + button.setBackground(Theme.current().getAltBackgroundColor()); } @Override public void mouseExited(MouseEvent mouseEvent) { super.mouseExited(mouseEvent); - button.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + button.setBackground(Theme.current().getBackgroundColor()); } }); return button; diff --git a/src/main/java/net/mcreator/ui/SplashScreen.java b/src/main/java/net/mcreator/ui/SplashScreen.java index 7d43ffb6da1..ae87df2f70d 100644 --- a/src/main/java/net/mcreator/ui/SplashScreen.java +++ b/src/main/java/net/mcreator/ui/SplashScreen.java @@ -78,7 +78,6 @@ public SplashScreen() { imagePanel.add(snapshot); } - initloadprogress.setEmptyColor(null); initloadprogress.setOpaque(false); initloadprogress.setForeground(Color.white); initloadprogress.setMaximalValue(100); diff --git a/src/main/java/net/mcreator/ui/StatusBar.java b/src/main/java/net/mcreator/ui/StatusBar.java index 9ace78a19d6..03351768464 100644 --- a/src/main/java/net/mcreator/ui/StatusBar.java +++ b/src/main/java/net/mcreator/ui/StatusBar.java @@ -24,6 +24,7 @@ import net.mcreator.ui.gradle.GradleConsole; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.DesktopUtils; import net.mcreator.util.StringUtils; @@ -85,7 +86,7 @@ public StatusBar(MCreator mcreator) { left.add(preferences); left.add(new JEmptyBox(10, 10)); - messages.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + messages.setForeground(Theme.current().getAltForegroundColor()); left.add(messages); add("West", left); @@ -93,7 +94,7 @@ public StatusBar(MCreator mcreator) { JPanel right = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 1)); right.setOpaque(false); - gradleMessages.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + gradleMessages.setForeground(Theme.current().getAltForegroundColor()); right.add(gradleMessages); ComponentUtils.deriveFont(gradleMessages, 12); @@ -107,10 +108,9 @@ public StatusBar(MCreator mcreator) { add("East", right); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); setPreferredSize(new Dimension(22, 22)); - setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, - ((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker())); + setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, (Theme.current().getAltBackgroundColor()).darker())); addToolTipReader(); } @@ -162,7 +162,7 @@ private class GradleIndicator extends JComponent { super.paintComponent(g); switch (mcreator.getGradleConsole().getStatus()) { case GradleConsole.READY: - g.setColor((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + g.setColor(Theme.current().getAltForegroundColor()); break; case GradleConsole.RUNNING: g.setColor(new Color(158, 247, 89)); diff --git a/src/main/java/net/mcreator/ui/action/AcceleratorDialog.java b/src/main/java/net/mcreator/ui/action/AcceleratorDialog.java index 35301029bcb..5a0de3a5742 100644 --- a/src/main/java/net/mcreator/ui/action/AcceleratorDialog.java +++ b/src/main/java/net/mcreator/ui/action/AcceleratorDialog.java @@ -20,6 +20,7 @@ import net.mcreator.io.OS; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; @@ -39,11 +40,11 @@ static void showAcceleratorMapDialog(Window parent, AcceleratorMap acceleratorMa return false; } }); - map.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - map.setSelectionBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - map.setSelectionForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + map.setBackground(Theme.current().getBackgroundColor()); + map.setSelectionBackground(Theme.current().getForegroundColor()); + map.setSelectionForeground(Theme.current().getBackgroundColor()); map.setBorder(BorderFactory.createEmptyBorder()); - map.setGridColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + map.setGridColor(Theme.current().getAltBackgroundColor()); map.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); if (OS.getOS() == OS.MAC) { diff --git a/src/main/java/net/mcreator/ui/action/AcceleratorMap.java b/src/main/java/net/mcreator/ui/action/AcceleratorMap.java index 30d014c31d8..a141d6f62b6 100644 --- a/src/main/java/net/mcreator/ui/action/AcceleratorMap.java +++ b/src/main/java/net/mcreator/ui/action/AcceleratorMap.java @@ -89,6 +89,15 @@ public AcceleratorMap(ActionRegistry actionRegistry) { KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); actionKeyStrokeMap.put(actionRegistry.imageEditorRedo, KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + actionKeyStrokeMap.put(actionRegistry.imageEditorCopy, + KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + actionKeyStrokeMap.put(actionRegistry.imageEditorCopyAll, KeyStroke.getKeyStroke(KeyEvent.VK_X, + KeyEvent.SHIFT_DOWN_MASK | Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + actionKeyStrokeMap.put(actionRegistry.imageEditorCut, + KeyStroke.getKeyStroke(KeyEvent.VK_X, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + actionKeyStrokeMap.put(actionRegistry.imageEditorPaste, + KeyStroke.getKeyStroke(KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + actionKeyStrokeMap.put(actionRegistry.imageEditorDelete, KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); actionKeyStrokeMap.put(actionRegistry.imageEditorSave, KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); actionKeyStrokeMap.put(actionRegistry.imageEditorSaveAs, KeyStroke.getKeyStroke(KeyEvent.VK_S, @@ -108,8 +117,8 @@ public AcceleratorMap(ActionRegistry actionRegistry) { KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); actionKeyStrokeMap.put(actionRegistry.imageEditorFloodFill, KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); - actionKeyStrokeMap.put(actionRegistry.imageEditorColorPicker, KeyStroke.getKeyStroke(KeyEvent.VK_C, - KeyEvent.SHIFT_DOWN_MASK | Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + actionKeyStrokeMap.put(actionRegistry.imageEditorColorPicker, + KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.SHIFT_DOWN_MASK)); actionKeyStrokeMap.put(actionRegistry.imageEditorColorize, KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); actionKeyStrokeMap.put(actionRegistry.imageEditorDesaturate, KeyStroke.getKeyStroke(KeyEvent.VK_D, @@ -118,6 +127,9 @@ public AcceleratorMap(ActionRegistry actionRegistry) { KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); actionKeyStrokeMap.put(actionRegistry.imageEditorMoveLayer, KeyStroke.getKeyStroke(KeyEvent.VK_M, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + actionKeyStrokeMap.put(actionRegistry.imageEditorSelectLayer, KeyStroke.getKeyStroke(KeyEvent.VK_A, + KeyEvent.ALT_DOWN_MASK | Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + actionKeyStrokeMap.put(actionRegistry.imageEditorClearSelection, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)); actionKeyStrokeMap.put(actionRegistry.imageEditorResizeLayer, KeyStroke.getKeyStroke(KeyEvent.VK_R, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); } diff --git a/src/main/java/net/mcreator/ui/action/ActionRegistry.java b/src/main/java/net/mcreator/ui/action/ActionRegistry.java index 76c2f74c0b1..e147ab312bb 100644 --- a/src/main/java/net/mcreator/ui/action/ActionRegistry.java +++ b/src/main/java/net/mcreator/ui/action/ActionRegistry.java @@ -34,10 +34,7 @@ import net.mcreator.ui.init.UIRES; import net.mcreator.ui.views.AnimationMakerView; import net.mcreator.ui.views.ArmorImageMakerView; -import net.mcreator.ui.views.editor.image.action.ImageEditorRedoAction; -import net.mcreator.ui.views.editor.image.action.ImageEditorSaveAction; -import net.mcreator.ui.views.editor.image.action.ImageEditorSaveAsAction; -import net.mcreator.ui.views.editor.image.action.ImageEditorUndoAction; +import net.mcreator.ui.views.editor.image.action.*; import net.mcreator.ui.views.editor.image.tool.action.*; import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.DesktopUtils; @@ -163,6 +160,11 @@ public class ActionRegistry { public final BasicAction imageEditorRedo; public final BasicAction imageEditorSave; public final BasicAction imageEditorSaveAs; + public final ImageEditorCopyAction imageEditorCopy; + public final ImageEditorCopyAllAction imageEditorCopyAll; + public final ImageEditorCutAction imageEditorCut; + public final ImageEditorPasteAction imageEditorPaste; + public final ImageEditorDeleteAction imageEditorDelete; public final BasicAction imageEditorPencil; public final BasicAction imageEditorLine; public final BasicAction imageEditorShape; @@ -174,6 +176,8 @@ public class ActionRegistry { public final BasicAction imageEditorDesaturate; public final BasicAction imageEditorHSVNoise; public final BasicAction imageEditorMoveLayer; + public final BasicAction imageEditorSelectLayer; + public final ImageEditorClearSelectionAction imageEditorClearSelection; public final BasicAction imageEditorResizeLayer; public final BasicAction imageEditorResizeCanvas; @@ -308,6 +312,11 @@ public ActionRegistry(MCreator mcreator) { //Image Editor actions this.imageEditorUndo = new ImageEditorUndoAction(this); this.imageEditorRedo = new ImageEditorRedoAction(this); + this.imageEditorCopy = new ImageEditorCopyAction(this); + this.imageEditorCopyAll = new ImageEditorCopyAllAction(this); + this.imageEditorCut = new ImageEditorCutAction(this); + this.imageEditorPaste = new ImageEditorPasteAction(this); + this.imageEditorDelete = new ImageEditorDeleteAction(this); this.imageEditorSave = new ImageEditorSaveAction(this); this.imageEditorSaveAs = new ImageEditorSaveAsAction(this); this.imageEditorPencil = new PencilToolAction(this); @@ -321,6 +330,8 @@ public ActionRegistry(MCreator mcreator) { this.imageEditorDesaturate = new DesaturateToolAction(this); this.imageEditorHSVNoise = new HSVNoiseToolAction(this); this.imageEditorMoveLayer = new MoveToolAction(this); + this.imageEditorSelectLayer = new SelectionToolAction(this); + this.imageEditorClearSelection = new ImageEditorClearSelectionAction(this); this.imageEditorResizeLayer = new ResizeToolAction(this); this.imageEditorResizeCanvas = new ResizeCanvasToolAction(this); diff --git a/src/main/java/net/mcreator/ui/action/impl/AboutAction.java b/src/main/java/net/mcreator/ui/action/impl/AboutAction.java index 7020e4d7bab..9362d773cf2 100644 --- a/src/main/java/net/mcreator/ui/action/impl/AboutAction.java +++ b/src/main/java/net/mcreator/ui/action/impl/AboutAction.java @@ -28,7 +28,7 @@ import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.DesktopUtils; import net.mcreator.util.image.ImageUtils; @@ -88,7 +88,7 @@ public static void showLicenseWindow(Window parent) { JScrollPane gradlesp = new JScrollPane(licenseText); licenseText.setEditable(false); licenseText.setLineWrap(true); - licenseText.setFont(MCreatorTheme.console_font); + licenseText.setFont(Theme.current().getConsoleFont()); ComponentUtils.deriveFont(licenseText, 12); licenseText.setWrapStyleWord(true); licenseText.setText(FileIO.readFileToString(new File("./LICENSE.txt"))); diff --git a/src/main/java/net/mcreator/ui/action/impl/gradle/ClearAllGradleCachesAction.java b/src/main/java/net/mcreator/ui/action/impl/gradle/ClearAllGradleCachesAction.java index ca0a8784766..90197134970 100644 --- a/src/main/java/net/mcreator/ui/action/impl/gradle/ClearAllGradleCachesAction.java +++ b/src/main/java/net/mcreator/ui/action/impl/gradle/ClearAllGradleCachesAction.java @@ -53,19 +53,18 @@ public static void clearAllGradleCaches(MCreator mcreator, boolean entireGradleF new Thread(() -> { ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("dialog.cache_cleanup.progress.stopping_daemons")); - progressDialog.addProgress(p1); + progressDialog.addProgressUnit(p1); try { GradleDaemonUtils.stopAllDaemons(mcreator.getWorkspace()); - p1.ok(); + p1.markStateOk(); } catch (IOException | InterruptedException e) { - p1.warn(); + p1.markStateWarning(); } - progressDialog.refreshDisplay(); ProgressDialog.ProgressUnit p2 = new ProgressDialog.ProgressUnit( L10N.t("dialog.cache_cleanup.progress.clearing_gradle_caches_folder")); - progressDialog.addProgress(p2); + progressDialog.addProgressUnit(p2); try { Thread.sleep(2000); // make sure all files are released @@ -77,12 +76,11 @@ public static void clearAllGradleCaches(MCreator mcreator, boolean entireGradleF else FileIO.deleteDir(new File(UserFolderManager.getGradleHome(), "caches")); - p2.ok(); - progressDialog.refreshDisplay(); + p2.markStateOk(); ProgressDialog.ProgressUnit p3 = new ProgressDialog.ProgressUnit( L10N.t("dialog.cache_cleanup.progress.build_task")); - progressDialog.addProgress(p3); + progressDialog.addProgressUnit(p3); mcreator.getGradleConsole().markRunning(); // so console gets locked while we generate code already try { @@ -103,15 +101,15 @@ public static void clearAllGradleCaches(MCreator mcreator, boolean entireGradleF new Thread(() -> { ProgressDialog.ProgressUnit p33a = new ProgressDialog.ProgressUnit( L10N.t("dialog.setup_workspace.progress.reloading_gradle_project")); - progressDialogSecondStage.addProgress(p33a); + progressDialogSecondStage.addProgressUnit(p33a); try { mcreator.getGenerator().reloadGradleCaches(); - p33a.ok(); - progressDialogSecondStage.hideAll(); + p33a.markStateOk(); + progressDialogSecondStage.hideDialog(); } catch (Exception e) { - p33a.err(); - progressDialogSecondStage.hideAll(); + p33a.markStateError(); + progressDialogSecondStage.hideDialog(); } if (regenerateCodeFlag) { @@ -125,10 +123,9 @@ public static void clearAllGradleCaches(MCreator mcreator, boolean entireGradleF mcreator.getGradleConsole().markReady(); } - p3.ok(); - progressDialog.refreshDisplay(); + p3.markStateOk(); - progressDialog.hideAll(); + progressDialog.hideDialog(); }, "ClearAllGradleCaches").start(); progressDialog.setVisible(true); } diff --git a/src/main/java/net/mcreator/ui/action/impl/gradle/ReloadGradleProjectAction.java b/src/main/java/net/mcreator/ui/action/impl/gradle/ReloadGradleProjectAction.java index 01963678000..3266ce7ad76 100644 --- a/src/main/java/net/mcreator/ui/action/impl/gradle/ReloadGradleProjectAction.java +++ b/src/main/java/net/mcreator/ui/action/impl/gradle/ReloadGradleProjectAction.java @@ -31,23 +31,23 @@ public ReloadGradleProjectAction(ActionRegistry actionRegistry) { new Thread(() -> { ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("dialog.setup_workspace.progress.reloading_gradle_dependencies")); - progressDialog.addProgress(p1); + progressDialog.addProgressUnit(p1); actionRegistry.getMCreator().getGradleConsole().exec("dependencies", finished -> { - p1.ok(); + p1.markStateOk(); ProgressDialog.ProgressUnit p3 = new ProgressDialog.ProgressUnit( L10N.t("dialog.setup_workspace.progress.reloading_gradle_project")); - progressDialog.addProgress(p3); + progressDialog.addProgressUnit(p3); new Thread(() -> { try { actionRegistry.getMCreator().getGenerator().reloadGradleCaches(); - p3.ok(); - progressDialog.hideAll(); + p3.markStateOk(); + progressDialog.hideDialog(); } catch (Exception e) { - p3.err(); - progressDialog.hideAll(); + p3.markStateError(); + progressDialog.hideDialog(); } }, "GradleProjectCacheReload").start(); }); diff --git a/src/main/java/net/mcreator/ui/action/impl/workspace/RegenerateCodeAction.java b/src/main/java/net/mcreator/ui/action/impl/workspace/RegenerateCodeAction.java index 91bf33d88a3..01baac5d7b7 100644 --- a/src/main/java/net/mcreator/ui/action/impl/workspace/RegenerateCodeAction.java +++ b/src/main/java/net/mcreator/ui/action/impl/workspace/RegenerateCodeAction.java @@ -25,7 +25,7 @@ import net.mcreator.gradle.GradleTaskFinishedListener; import net.mcreator.io.FileIO; import net.mcreator.io.writer.ClassWriter; -import net.mcreator.minecraft.api.ModAPIManager; +import net.mcreator.plugin.modapis.ModAPIManager; import net.mcreator.ui.MCreator; import net.mcreator.ui.action.ActionRegistry; import net.mcreator.ui.action.impl.gradle.GradleAction; @@ -65,7 +65,7 @@ public static void regenerateCode(MCreator mcreator, boolean warnLockedCode, boo Thread thread = new Thread(() -> { ProgressDialog.ProgressUnit p0 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.regenerate_and_build.progress.removing_autogenerated_code")); - dial.addProgress(p0); + dial.addProgressUnit(p0); List toBePreserved = new ArrayList<>(); @@ -106,27 +106,24 @@ public static void regenerateCode(MCreator mcreator, boolean warnLockedCode, boo a.delete(); } - p0.ok(); - dial.refreshDisplay(); + p0.markStateOk(); ProgressDialog.ProgressUnit p10 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.regenerate_and_build.progress.loading_mod_elements")); - dial.addProgress(p10); + dial.addProgressUnit(p10); List modElementsOld = new ArrayList<>(mcreator.getWorkspace().getModElements()); int modstoload = modElementsOld.size(); int i = 0; for (ModElement mod : modElementsOld) { mod.getGeneratableElement(); p10.setPercent((int) (((float) i / (float) modstoload) * 100.0f)); - dial.refreshDisplay(); i++; } - p10.ok(); - dial.refreshDisplay(); + p10.markStateOk(); ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.regenerate_and_build.progress.regenerating_code")); - dial.addProgress(p1); + dial.addProgressUnit(p1); Set skippedElements = new HashSet<>(0); boolean skipAll = !warnMissingDefinitions; // if warnMissingDefinitions is false, we skip all by default without warnings @@ -190,7 +187,6 @@ public static void regenerateCode(MCreator mcreator, boolean warnLockedCode, boo } p1.setPercent((int) (((float) i / (float) modstoload) * 100.0f)); - dial.refreshDisplay(); i++; } @@ -217,39 +213,36 @@ public static void regenerateCode(MCreator mcreator, boolean warnLockedCode, boo L10N.t("dialog.workspace.regenerate_and_build.warning.elements_with_locked_code.title"), JOptionPane.WARNING_MESSAGE); - p1.ok(); - dial.refreshDisplay(); + p1.markStateOk(); ProgressDialog.ProgressUnit p2 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.regenerate_and_build.progress.regenerating_workspace_and_resources")); - dial.addProgress(p2); + dial.addProgressUnit(p2); mcreator.getGenerator().runResourceSetupTasks(); // generate base files without organizing imports as we first need all files generated so we can properly organize imports mcreator.getGenerator().generateBase(false); - mcreator.mv.updateMods(); + mcreator.mv.reloadElementsInCurrentTab(); // remove custom API libraries so they get re-downloaded ModAPIManager.deleteAPIs(mcreator.getWorkspace(), mcreator.getWorkspaceSettings()); - p2.ok(); - dial.refreshDisplay(); + p2.markStateOk(); ProgressDialog.ProgressUnit p22 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.regenerate_and_build.progress.reformating_code")); - dial.addProgress(p22); + dial.addProgressUnit(p22); int ftfCount = filesToReformat.size(); // after all files are generated, we can perform global import organization and code reformat ClassWriter.formatAndOrganiseImportsForFiles(mcreator.getWorkspace(), filesToReformat, idx -> p22.setPercent((int) (((float) idx / (float) ftfCount) * 100.0f))); - p22.ok(); - dial.refreshDisplay(); + p22.markStateOk(); ProgressDialog.ProgressUnit p23 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.regenerate_and_build.progress.clean_up_workspace")); - dial.addProgress(p23); + dial.addProgressUnit(p23); FileIO.removeEmptyDirs(mcreator.getGenerator().getSourceRoot()); FileIO.removeEmptyDirs(mcreator.getGenerator().getResourceRoot()); @@ -257,12 +250,11 @@ public static void regenerateCode(MCreator mcreator, boolean warnLockedCode, boo // delete old license file if present new File(mcreator.getGenerator().getResourceRoot(), "MCreator-README.txt").delete(); - p23.ok(); - dial.refreshDisplay(); + p23.markStateOk(); ProgressDialog.ProgressUnit p3 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.regenerate_and_build.progress.rebuilding_workspace")); - dial.addProgress(p3); + dial.addProgressUnit(p3); mcreator.getGradleConsole().markRunning(); // so console gets locked while we generate code already try { @@ -276,10 +268,9 @@ public static void regenerateCode(MCreator mcreator, boolean warnLockedCode, boo // Make sure to store any potential changes to the workspace mcreator.getWorkspace().markDirty(); - p3.ok(); - dial.refreshDisplay(); + p3.markStateOk(); - dial.hideAll(); + dial.hideDialog(); }, "RegenerateCode"); thread.start(); dial.setVisible(true); diff --git a/src/main/java/net/mcreator/ui/action/impl/workspace/WorkspaceSettingsAction.java b/src/main/java/net/mcreator/ui/action/impl/workspace/WorkspaceSettingsAction.java index 23cdd03de9f..7f98f3e3c14 100644 --- a/src/main/java/net/mcreator/ui/action/impl/workspace/WorkspaceSettingsAction.java +++ b/src/main/java/net/mcreator/ui/action/impl/workspace/WorkspaceSettingsAction.java @@ -25,9 +25,9 @@ import net.mcreator.generator.setup.WorkspaceGeneratorSetup; import net.mcreator.io.FileIO; import net.mcreator.minecraft.StructureUtils; -import net.mcreator.minecraft.api.ModAPIManager; import net.mcreator.plugin.MCREvent; import net.mcreator.plugin.events.workspace.WorkspaceRefactoringEvent; +import net.mcreator.plugin.modapis.ModAPIManager; import net.mcreator.ui.MCreator; import net.mcreator.ui.action.ActionRegistry; import net.mcreator.ui.action.impl.gradle.GradleAction; @@ -53,12 +53,13 @@ public WorkspaceSettingsAction(ActionRegistry actionRegistry) { super(actionRegistry, L10N.t("action.workspace.settings"), e -> { WorkspaceSettingsChange change = WorkspaceDialogs.workspaceSettings(actionRegistry.getMCreator(), actionRegistry.getMCreator().getWorkspace()); + if (change != null) { + actionRegistry.getMCreator().getWorkspace().setWorkspaceSettings(change.workspaceSettings); - actionRegistry.getMCreator().getWorkspace().setWorkspaceSettings(change.workspaceSettings); + refactorWorkspace(actionRegistry.getMCreator(), change); - refactorWorkspace(actionRegistry.getMCreator(), change); - - actionRegistry.getMCreator().mv.updateMods(); + actionRegistry.getMCreator().mv.reloadElementsInCurrentTab(); + } }); } @@ -149,22 +150,21 @@ public static void refactorWorkspace(MCreator mcreator, WorkspaceSettingsChange Thread t = new Thread(() -> { ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.settings.workspace_switch.progress.preparing")); - dial.addProgress(p1); + dial.addProgressUnit(p1); WorkspaceGeneratorSetup.cleanupGeneratorForSwitchTo(mcreator.getWorkspace(), Generator.GENERATOR_CACHE.get(change.workspaceSettings.getCurrentGenerator())); - p1.ok(); - dial.refreshDisplay(); + p1.markStateOk(); ProgressDialog.ProgressUnit p2 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.settings.workspace_switch.progress.switching_version")); - dial.addProgress(p2); + dial.addProgressUnit(p2); mcreator.getWorkspace().switchGenerator(change.workspaceSettings.getCurrentGenerator()); - p2.ok(); - dial.hideAll(); + p2.markStateOk(); + dial.hideDialog(); WorkspaceGeneratorSetupDialog.runSetup(mcreator, false); diff --git a/src/main/java/net/mcreator/ui/blockly/BlocklyEditorToolbar.java b/src/main/java/net/mcreator/ui/blockly/BlocklyEditorToolbar.java index 4cd99aaa662..545a883bc0a 100644 --- a/src/main/java/net/mcreator/ui/blockly/BlocklyEditorToolbar.java +++ b/src/main/java/net/mcreator/ui/blockly/BlocklyEditorToolbar.java @@ -34,6 +34,7 @@ import net.mcreator.ui.dialogs.file.FileDialogs; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.modgui.ProcedureGUI; import net.mcreator.workspace.elements.VariableElement; import org.apache.logging.log4j.LogManager; @@ -211,7 +212,7 @@ public BlocklyEditorToolbar(MCreator mcreator, BlocklyEditorType blocklyEditorTy } }); ComponentUtils.normalizeButton4(export); - export.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + export.setForeground(Theme.current().getAltForegroundColor()); JButton import_ = L10N.button("blockly.templates." + blocklyEditorType.registryName() + ".import"); import_.setIcon(UIRES.get("18px.import")); @@ -246,7 +247,7 @@ public BlocklyEditorToolbar(MCreator mcreator, BlocklyEditorType blocklyEditorTy } }); ComponentUtils.normalizeButton4(import_); - import_.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + import_.setForeground(Theme.current().getAltForegroundColor()); } public void setTemplateLibButtonWidth(int w) { diff --git a/src/main/java/net/mcreator/ui/blockly/BlocklyJavascriptBridge.java b/src/main/java/net/mcreator/ui/blockly/BlocklyJavascriptBridge.java index 1e629ea54fa..9a5650aecfb 100644 --- a/src/main/java/net/mcreator/ui/blockly/BlocklyJavascriptBridge.java +++ b/src/main/java/net/mcreator/ui/blockly/BlocklyJavascriptBridge.java @@ -20,10 +20,10 @@ package net.mcreator.ui.blockly; import com.google.gson.Gson; +import javafx.application.Platform; import net.mcreator.blockly.data.ExternalTrigger; import net.mcreator.blockly.java.BlocklyVariables; import net.mcreator.element.ModElementType; -import net.mcreator.io.OS; import net.mcreator.minecraft.*; import net.mcreator.ui.MCreator; import net.mcreator.ui.dialogs.AIConditionEditor; @@ -31,6 +31,7 @@ import net.mcreator.ui.dialogs.MCItemSelectorDialog; import net.mcreator.ui.dialogs.StringSelectorDialog; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.minecraft.states.PropertyData; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; @@ -47,8 +48,6 @@ import javax.swing.*; import java.io.ByteArrayOutputStream; import java.util.*; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.FutureTask; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -61,6 +60,8 @@ public class BlocklyJavascriptBridge { private final Supplier blocklyEvent; private final MCreator mcreator; + private final Object NESTED_LOOP_KEY = new Object(); + BlocklyJavascriptBridge(@Nonnull MCreator mcreator, @Nonnull Supplier blocklyEvent) { this.blocklyEvent = blocklyEvent; this.mcreator = mcreator; @@ -93,35 +94,71 @@ public class BlocklyJavascriptBridge { } @SuppressWarnings("unused") public void openMCItemSelector(String type, JSObject callback) { - MCItem.ListProvider blocks; - if ("allblocks".equals(type)) { - blocks = ElementUtil::loadBlocks; - } else { - blocks = ElementUtil::loadBlocksAndItems; - } + SwingUtilities.invokeLater(() -> { + MCItem selected = MCItemSelectorDialog.openSelectorDialog(mcreator, + "allblocks".equals(type) ? ElementUtil::loadBlocks : ElementUtil::loadBlocksAndItems); + Platform.runLater( + () -> Platform.exitNestedEventLoop(NESTED_LOOP_KEY, selected != null ? selected.getName() : null)); + }); + + String retval = (String) Platform.enterNestedEventLoop(NESTED_LOOP_KEY); + callback.call("callback", retval); + } - String retval = null; - - if (SwingUtilities.isEventDispatchThread() - || OS.getOS() == OS.MAC) { // on macOS, EventDispatchThread is shared between JFX and SWING - MCItem selected = MCItemSelectorDialog.openSelectorDialog(mcreator, blocks); - if (selected != null) - retval = selected.getName(); - } else { - FutureTask query = new FutureTask<>( - () -> MCItemSelectorDialog.openSelectorDialog(mcreator, blocks)); - try { - SwingUtilities.invokeLater(query); - MCItem selected = query.get(); - if (selected != null) - retval = selected.getName(); - } catch (InterruptedException | ExecutionException ignored) { - } - } + @SuppressWarnings("unused") public void openAIConditionEditor(String data, JSObject callback) { + SwingUtilities.invokeLater(() -> { + List retval = AIConditionEditor.open(mcreator, data.split(",")); + Platform.runLater(() -> Platform.exitNestedEventLoop(NESTED_LOOP_KEY, StringUtils.join(retval, ','))); + }); + String retval = (String) Platform.enterNestedEventLoop(NESTED_LOOP_KEY); callback.call("callback", retval); } + /** + * Opens a data list selector window for the searchable Blockly selectors + * + * @param entryProvider The function that provides the entries from a given workspace + * @param type The type of the data list, used for the selector title and message + * @return A {"value", "readable name"} pair, or the default entry if no entry was selected + */ + private String[] openDataListEntrySelector(Function> entryProvider, String type) { + SwingUtilities.invokeLater(() -> { + String[] retval = new String[] { "", L10N.t("blockly.extension.data_list_selector.no_entry") }; + DataListEntry selected = DataListSelectorDialog.openSelectorDialog(mcreator, entryProvider, + L10N.t("dialog.selector.title"), L10N.t("dialog.selector." + type + ".message")); + if (selected != null) { + retval[0] = selected.getName(); + retval[1] = selected.getReadableName(); + } + Platform.runLater(() -> Platform.exitNestedEventLoop(NESTED_LOOP_KEY, retval)); + }); + + return (String[]) Platform.enterNestedEventLoop(NESTED_LOOP_KEY); + } + + /** + * Opens a string selector window for the searchable Blockly selectors + * + * @param entryProvider The function that provides the strings from a given workspace + * @param type The type of the data list, used for the selector title and message + * @return A {"value", "value"} pair (strings don't have readable names!), or the default entry if no string was selected + */ + private String[] openStringEntrySelector(Function entryProvider, String type) { + SwingUtilities.invokeLater(() -> { + String[] retval = new String[] { "", L10N.t("blockly.extension.data_list_selector.no_entry") }; + String selected = StringSelectorDialog.openSelectorDialog(mcreator, entryProvider, + L10N.t("dialog.selector.title"), L10N.t("dialog.selector." + type + ".message")); + if (selected != null) { + retval[0] = selected; + retval[1] = selected; + Platform.runLater(() -> Platform.exitNestedEventLoop(NESTED_LOOP_KEY, retval)); + } + }); + + return (String[]) Platform.enterNestedEventLoop(NESTED_LOOP_KEY); + } + /** * Common method to open an entry selector of either data list entries or strings * @@ -139,7 +176,17 @@ public class BlocklyJavascriptBridge { case "spawnableEntity" -> openDataListEntrySelector( w -> ElementUtil.loadAllSpawnableEntities(w).stream().filter(e -> e.isSupportedInWorkspace(w)) .toList(), "entity"); - case "gui" -> openStringEntrySelector(w -> ElementUtil.loadBasicGUI(w).toArray(String[]::new), "gui"); + case "customEntity" -> openDataListEntrySelector(ElementUtil::loadCustomEntities, "entity"); + case "entitydata_logic" -> openStringEntrySelector( + w -> ElementUtil.loadEntityDataListFromCustomEntity(w, customEntryProviders, + PropertyData.LogicType.class).toArray(String[]::new), "entity_data"); + case "entitydata_integer" -> openStringEntrySelector( + w -> ElementUtil.loadEntityDataListFromCustomEntity(w, customEntryProviders, + PropertyData.IntegerType.class).toArray(String[]::new), "entity_data"); + case "entitydata_string" -> openStringEntrySelector( + w -> ElementUtil.loadEntityDataListFromCustomEntity(w, customEntryProviders, + PropertyData.StringType.class).toArray(String[]::new), "entity_data"); + case "gui" -> openStringEntrySelector(w -> ElementUtil.loadBasicGUIs(w).toArray(String[]::new), "gui"); case "biome" -> openDataListEntrySelector( w -> ElementUtil.loadAllBiomes(w).stream().filter(e -> e.isSupportedInWorkspace(w)).toList(), "biome"); @@ -185,94 +232,6 @@ yield openDataListEntrySelector(w -> ElementUtil.loadDataListAndElements(w, type callback.call("callback", retval[0], retval[1]); } - /** - * Opens a data list selector window for the searchable Blockly selectors - * - * @param entryProvider The function that provides the entries from a given workspace - * @param type The type of the data list, used for the selector title and message - * @return A {"value", "readable name"} pair, or the default entry if no entry was selected - */ - private String[] openDataListEntrySelector(Function> entryProvider, String type) { - String[] retval = new String[] { "", L10N.t("blockly.extension.data_list_selector.no_entry") }; - String title = L10N.t("dialog.selector.title"), message = L10N.t("dialog.selector." + type + ".message"); - - if (SwingUtilities.isEventDispatchThread() - || OS.getOS() == OS.MAC) { // on macOS, EventDispatchThread is shared between JFX and SWING - DataListEntry selected = DataListSelectorDialog.openSelectorDialog(mcreator, entryProvider, title, message); - if (selected != null) { - retval[0] = selected.getName(); - retval[1] = selected.getReadableName(); - } - } else { - FutureTask query = new FutureTask<>( - () -> DataListSelectorDialog.openSelectorDialog(mcreator, entryProvider, title, message)); - try { - SwingUtilities.invokeLater(query); - DataListEntry selected = query.get(); - if (selected != null) { - retval[0] = selected.getName(); - retval[1] = selected.getReadableName(); - } - } catch (InterruptedException | ExecutionException ignored) { - } - } - - return retval; - } - - /** - * Opens a string selector window for the searchable Blockly selectors - * - * @param entryProvider The function that provides the strings from a given workspace - * @param type The type of the data list, used for the selector title and message - * @return A {"value", "value"} pair (strings don't have readable names!), or the default entry if no string was selected - */ - private String[] openStringEntrySelector(Function entryProvider, String type) { - String[] retval = new String[] { "", L10N.t("blockly.extension.data_list_selector.no_entry") }; - String title = L10N.t("dialog.selector.title"), message = L10N.t("dialog.selector." + type + ".message"); - - if (SwingUtilities.isEventDispatchThread() - || OS.getOS() == OS.MAC) { // on macOS, EventDispatchThread is shared between JFX and SWING - String selected = StringSelectorDialog.openSelectorDialog(mcreator, entryProvider, title, message); - if (selected != null) { - retval[0] = selected; - retval[1] = selected; - } - } else { - FutureTask query = new FutureTask<>( - () -> StringSelectorDialog.openSelectorDialog(mcreator, entryProvider, title, message)); - try { - SwingUtilities.invokeLater(query); - String selected = query.get(); - if (selected != null) { - retval[0] = selected; - retval[1] = selected; - } - } catch (InterruptedException | ExecutionException ignored) { - } - } - - return retval; - } - - @SuppressWarnings("unused") public void openAIConditionEditor(String data, JSObject callback) { - List retval = null; - - if (SwingUtilities.isEventDispatchThread() - || OS.getOS() == OS.MAC) { // on macOS, EventDispatchThread is shared between JFX and SWING - retval = AIConditionEditor.open(mcreator, data.split(",")); - } else { - FutureTask> query = new FutureTask<>(() -> AIConditionEditor.open(mcreator, data.split(","))); - try { - SwingUtilities.invokeLater(query); - retval = query.get(); - } catch (InterruptedException | ExecutionException ignored) { - } - } - - callback.call("callback", StringUtils.join(retval, ',')); - } - private final Map ext_triggers = new LinkedHashMap<>() {{ put("no_ext_trigger", L10N.t("trigger.no_ext_trigger")); }}; @@ -307,7 +266,7 @@ public void addExternalTrigger(ExternalTrigger external_trigger) { return ElementUtil.loadAllSpawnableEntities(workspace).stream().map(DataListEntry::getName) .toArray(String[]::new); case "gui": - retval = ElementUtil.loadBasicGUI(workspace); + retval = ElementUtil.loadBasicGUIs(workspace); break; case "achievement": return ElementUtil.loadAllAchievements(workspace).stream().map(DataListEntry::getName) diff --git a/src/main/java/net/mcreator/ui/blockly/BlocklyPanel.java b/src/main/java/net/mcreator/ui/blockly/BlocklyPanel.java index 162fcc69ba3..61f8969a4d0 100644 --- a/src/main/java/net/mcreator/ui/blockly/BlocklyPanel.java +++ b/src/main/java/net/mcreator/ui/blockly/BlocklyPanel.java @@ -30,11 +30,11 @@ import net.mcreator.io.OS; import net.mcreator.plugin.PluginLoader; import net.mcreator.preferences.PreferencesManager; -import net.mcreator.themes.ThemeLoader; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.util.ThreadUtil; import net.mcreator.ui.init.BlocklyJavaScriptsLoader; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.workspace.elements.VariableElement; import net.mcreator.workspace.elements.VariableType; import net.mcreator.workspace.elements.VariableTypeLoader; @@ -46,7 +46,8 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @@ -73,6 +74,8 @@ public class BlocklyPanel extends JFXPanel { private static final String MINIMAL_XML = ""; + private final List changeListeners = new ArrayList<>(); + public BlocklyPanel(MCreator mcreator, @Nonnull BlocklyEditorType type) { this.mcreator = mcreator; this.type = type; @@ -82,6 +85,10 @@ public BlocklyPanel(MCreator mcreator, @Nonnull BlocklyEditorType type) { if (newXml.length() > MINIMAL_XML.length()) { this.currentXML = newXml; + + ThreadUtil.runOnSwingThread(() -> changeListeners.forEach( + listener -> listener.stateChanged(new ChangeEvent(BlocklyPanel.this)))); + return true; } @@ -91,7 +98,7 @@ public BlocklyPanel(MCreator mcreator, @Nonnull BlocklyEditorType type) { ThreadUtil.runOnFxThread(() -> { WebView browser = new WebView(); Scene scene = new Scene(browser); - java.awt.Color bg = (java.awt.Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"); + java.awt.Color bg = Theme.current().getSecondAltBackgroundColor(); scene.setFill(Color.rgb(bg.getRed(), bg.getGreen(), bg.getBlue())); setScene(scene); @@ -107,9 +114,9 @@ public BlocklyPanel(MCreator mcreator, @Nonnull BlocklyEditorType type) { String css = FileIO.readResourceToString("/blockly/css/mcreator_blockly.css"); if (PluginLoader.INSTANCE.getResourceAsStream( - "themes/" + ThemeLoader.CURRENT_THEME.getID() + "/styles/blockly.css") != null) { + "themes/" + Theme.current().getID() + "/styles/blockly.css") != null) { css += FileIO.readResourceToString(PluginLoader.INSTANCE, - "/themes/" + ThemeLoader.CURRENT_THEME.getID() + "/styles/blockly.css"); + "/themes/" + Theme.current().getID() + "/styles/blockly.css"); } else { css += FileIO.readResourceToString(PluginLoader.INSTANCE, "/themes/default_dark/styles/blockly.css"); @@ -195,6 +202,10 @@ public void addTaskToRunAfterLoaded(Runnable runnable) { runnable.run(); } + public void addChangeListener(ChangeListener listener) { + changeListeners.add(listener); + } + public String getXML() { return this.currentXML; } diff --git a/src/main/java/net/mcreator/ui/blockly/CompileNotesPanel.java b/src/main/java/net/mcreator/ui/blockly/CompileNotesPanel.java index 8033ebe9681..323373efb6d 100644 --- a/src/main/java/net/mcreator/ui/blockly/CompileNotesPanel.java +++ b/src/main/java/net/mcreator/ui/blockly/CompileNotesPanel.java @@ -23,6 +23,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.SlickDarkScrollBarUI; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -49,15 +50,13 @@ public CompileNotesPanel() { scrollPaneCompileNotes.getViewport().setOpaque(false); scrollPaneCompileNotes.getVerticalScrollBar().setUnitIncrement(11); scrollPaneCompileNotes.getVerticalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), - scrollPaneCompileNotes.getVerticalScrollBar())); + .setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPaneCompileNotes.getVerticalScrollBar())); scrollPaneCompileNotes.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); scrollPaneCompileNotes.getHorizontalScrollBar().setUnitIncrement(11); scrollPaneCompileNotes.getHorizontalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), - scrollPaneCompileNotes.getHorizontalScrollBar())); + .setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPaneCompileNotes.getHorizontalScrollBar())); scrollPaneCompileNotes.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 8)); scrollPaneCompileNotes.setBorder(null); add("Center", scrollPaneCompileNotes); @@ -95,7 +94,7 @@ static class CompileNotesListRenderer extends JLabel implements ListCellRenderer public Component getListCellRendererComponent(JList list, BlocklyCompileNote value, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(isSelected); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); setForeground(Color.white); ComponentUtils.deriveFont(this, 12); if (value.type() == BlocklyCompileNote.Type.ERROR) { diff --git a/src/main/java/net/mcreator/ui/browser/WorkspaceFileBrowser.java b/src/main/java/net/mcreator/ui/browser/WorkspaceFileBrowser.java index ed369c053be..f74bb2a4774 100644 --- a/src/main/java/net/mcreator/ui/browser/WorkspaceFileBrowser.java +++ b/src/main/java/net/mcreator/ui/browser/WorkspaceFileBrowser.java @@ -37,6 +37,7 @@ import net.mcreator.ui.laf.FileIcons; import net.mcreator.ui.laf.SlickDarkScrollBarUI; import net.mcreator.ui.laf.SlickTreeUI; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.DesktopUtils; import net.mcreator.util.FilenameUtilsPatched; import org.fife.rsta.ac.java.buildpath.LibraryInfo; @@ -73,7 +74,7 @@ public class WorkspaceFileBrowser extends JPanel { g.setColor(getBackground()); g.fillRect(0, 0, getWidth(), getHeight()); if (getSelectionCount() > 0) { - g.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + g.setColor(Theme.current().getInterfaceAccentColor()); for (int i : Objects.requireNonNull(getSelectionRows())) { Rectangle r = getRowBounds(i); g.fillRect(0, r.y, getWidth(), r.height); @@ -114,7 +115,7 @@ public WorkspaceFileBrowser(MCreator mcreator) { tree.setShowsRootHandles(true); JScrollPane jsp = new JScrollPane(tree); - jsp.setBorder(BorderFactory.createMatteBorder(5, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"))); + jsp.setBorder(BorderFactory.createMatteBorder(5, 0, 0, 0, Theme.current().getBackgroundColor())); SlickTreeUI treeUI = new SlickTreeUI(); tree.setUI(treeUI); @@ -122,26 +123,26 @@ public WorkspaceFileBrowser(MCreator mcreator) { treeUI.setRightChildIndent(11); treeUI.setLeftChildIndent(3); - jsp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"), jsp.getVerticalScrollBar())); + jsp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getSecondAltBackgroundColor(), jsp.getVerticalScrollBar())); jsp.getVerticalScrollBar().setPreferredSize(new Dimension(7, 0)); jsp.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 7)); JPanel cornerDummy1 = new JPanel(); - cornerDummy1.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + cornerDummy1.setBackground(Theme.current().getBackgroundColor()); jsp.setCorner(JScrollPane.LOWER_RIGHT_CORNER, cornerDummy1); JPanel cornerDummy2 = new JPanel(); - cornerDummy2.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + cornerDummy2.setBackground(Theme.current().getBackgroundColor()); jsp.setCorner(JScrollPane.LOWER_LEFT_CORNER, cornerDummy2); - setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + setBackground(Theme.current().getSecondAltBackgroundColor()); - jsp.setBorder(BorderFactory.createMatteBorder(5, 5, 0, 0, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"))); + jsp.setBorder(BorderFactory.createMatteBorder(5, 5, 0, 0, Theme.current().getBackgroundColor())); jtf1.setMaximumSize(jtf1.getPreferredSize()); - jtf1.setBorder(BorderFactory.createLineBorder(((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")).brighter())); - jtf1.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + jtf1.setBorder(BorderFactory.createLineBorder((Theme.current().getBackgroundColor()).brighter())); + jtf1.setBackground(Theme.current().getBackgroundColor()); jtf1.setForeground(new Color(0xCBCBCB)); jtf1.setOpaque(true); ComponentUtils.deriveFont(jtf1, 12); @@ -167,25 +168,25 @@ public WorkspaceFileBrowser(MCreator mcreator) { }); JPanel bar = new JPanel(new BorderLayout()); - bar.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + bar.setBackground(Theme.current().getBackgroundColor()); bar.add(jtf1); - bar.setBorder(BorderFactory.createMatteBorder(3, 5, 3, 0, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"))); + bar.setBorder(BorderFactory.createMatteBorder(3, 5, 3, 0, Theme.current().getBackgroundColor())); JPanel topBar = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); - topBar.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + topBar.setBackground(Theme.current().getAltBackgroundColor()); topBar.add( ComponentUtils.setForeground(ComponentUtils.deriveFont(L10N.label("workspace_file_browser.title"), 10f), - (Color) UIManager.get("MCreatorLAF.GRAY_COLOR"))); + Theme.current().getAltForegroundColor())); topBar.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 0, 1, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 0, 1, Theme.current().getBackgroundColor()), BorderFactory.createEmptyBorder(2, 5, 2, 0))); JLabel sil = new JLabel(UIRES.get("16px.search")); sil.setPreferredSize(new Dimension(sil.getIcon().getIconWidth(), sil.getIcon().getIconHeight())); JComponent search = PanelUtils.westAndCenterElement(sil, bar); - search.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + search.setBackground(Theme.current().getBackgroundColor()); search.setOpaque(true); search.setBorder(BorderFactory.createEmptyBorder(3, 4, 0, 3)); @@ -522,11 +523,11 @@ else if (fileNode.data.startsWith("Java ")) } if (sel) { - a.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - a.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + a.setForeground(Theme.current().getBackgroundColor()); + a.setBackground(Theme.current().getInterfaceAccentColor()); } else { - a.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - a.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + a.setBackground(Theme.current().getBackgroundColor()); + a.setForeground(Theme.current().getForegroundColor()); } return a; } diff --git a/src/main/java/net/mcreator/ui/component/BlockingGlassPane.java b/src/main/java/net/mcreator/ui/component/BlockingGlassPane.java new file mode 100644 index 00000000000..1f6575207c9 --- /dev/null +++ b/src/main/java/net/mcreator/ui/component/BlockingGlassPane.java @@ -0,0 +1,62 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.component; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseMotionAdapter; + +public class BlockingGlassPane extends JPanel { + + public BlockingGlassPane() { + super(new BorderLayout()); + setOpaque(false); + + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + setFocusTraversalKeysEnabled(false); + + addMouseListener(new MouseAdapter() {}); + addMouseMotionListener(new MouseMotionAdapter() {}); + + addMouseWheelListener(e -> { + }); + + addKeyListener(new KeyAdapter() { + @Override public void keyPressed(KeyEvent e) { + e.consume(); + } + + @Override public void keyReleased(KeyEvent e) { + e.consume(); + } + }); + } + + @Override protected void paintComponent(Graphics g) { + super.paintComponent(g); + g.setColor(new Color(0, 0, 0, 150)); + g.fillRect(0, 0, getWidth(), getHeight()); + } + +} diff --git a/src/main/java/net/mcreator/ui/component/ConsolePane.java b/src/main/java/net/mcreator/ui/component/ConsolePane.java index 531e31fb0f5..4a5c060768d 100644 --- a/src/main/java/net/mcreator/ui/component/ConsolePane.java +++ b/src/main/java/net/mcreator/ui/component/ConsolePane.java @@ -18,7 +18,7 @@ package net.mcreator.ui.component; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -46,11 +46,11 @@ public ConsolePane() { setEditable(false); putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); - setFont(MCreatorTheme.console_font); + setFont(Theme.current().getConsoleFont()); - setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); - setSelectedTextColor((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); - setSelectionColor((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setBackground(Theme.current().getSecondAltBackgroundColor()); + setSelectedTextColor(Theme.current().getSecondAltBackgroundColor()); + setSelectionColor(Theme.current().getForegroundColor()); setCursor(new Cursor(Cursor.TEXT_CURSOR)); setBorder(null); diff --git a/src/main/java/net/mcreator/workspace/TooNewWorkspaceVerisonException.java b/src/main/java/net/mcreator/ui/component/ITechnicalComponent.java similarity index 74% rename from src/main/java/net/mcreator/workspace/TooNewWorkspaceVerisonException.java rename to src/main/java/net/mcreator/ui/component/ITechnicalComponent.java index 7aafae43035..366d13c530e 100644 --- a/src/main/java/net/mcreator/workspace/TooNewWorkspaceVerisonException.java +++ b/src/main/java/net/mcreator/ui/component/ITechnicalComponent.java @@ -1,6 +1,7 @@ /* * MCreator (https://mcreator.net/) - * Copyright (C) 2020 Pylo and contributors + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,11 +17,6 @@ * along with this program. If not, see . */ -package net.mcreator.workspace; +package net.mcreator.ui.component; -public class TooNewWorkspaceVerisonException extends Exception { - - public TooNewWorkspaceVerisonException(String s) { - super(s); - } -} +public interface ITechnicalComponent {} diff --git a/src/main/java/net/mcreator/ui/component/ImagePanel.java b/src/main/java/net/mcreator/ui/component/ImagePanel.java index e5acdef7c7e..8140ee43e90 100644 --- a/src/main/java/net/mcreator/ui/component/ImagePanel.java +++ b/src/main/java/net/mcreator/ui/component/ImagePanel.java @@ -18,6 +18,7 @@ package net.mcreator.ui.component; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; import javax.swing.*; @@ -31,7 +32,7 @@ public class ImagePanel extends JPanel { private boolean original = false; private boolean fitToWidth = false; - private final Color defaultColor = (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"); + private final Color defaultColor = Theme.current().getBackgroundColor(); private int offsetY = 0; diff --git a/src/main/java/net/mcreator/ui/component/JColor.java b/src/main/java/net/mcreator/ui/component/JColor.java index 91d82e0bc0e..97e2aae3bb1 100644 --- a/src/main/java/net/mcreator/ui/component/JColor.java +++ b/src/main/java/net/mcreator/ui/component/JColor.java @@ -20,12 +20,17 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import javax.swing.colorchooser.AbstractColorChooserPanel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.List; public class JColor extends JPanel { @@ -33,95 +38,115 @@ public class JColor extends JPanel { private Color currentColor = Color.white; - private final JTextField fl1 = new JTextField(10); - private ActionListener al = null; - private final JButton bt1 = new JButton("..."); + private final JTextField colorText; + private final List listeners = new ArrayList<>(); - private final boolean allowNullColor; - private final boolean allowTransparency; + private final TechnicalButton edit = new TechnicalButton(UIRES.get("18px.edit")); + private final TechnicalButton remove = new TechnicalButton(UIRES.get("18px.remove")); private JDialog dialog = null; + private final boolean allowNullColor; + private final boolean allowTransparency; + public JColor(Window window, boolean allowNullColor, boolean allowTransparency) { - setLayout(new BorderLayout(2, 0)); - fl1.setText("255,255,255"); - fl1.setBackground(Color.white); - bt1.setOpaque(false); + setLayout(new BorderLayout(0, 0)); + setBackground(Theme.current().getBackgroundColor()); + setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, getBackground())); + + this.allowNullColor = allowNullColor; + this.allowTransparency = allowTransparency; + + colorText = new JTextField(9); + colorText.setEditable(false); + colorText.setPreferredSize(new Dimension(0, 38)); + colorText.setBorder( + BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, getBackground()), + BorderFactory.createMatteBorder(1, 1, 1, 0, getBackground()))); + colorText.setHorizontalAlignment(JTextField.CENTER); + colorText.addMouseListener(new MouseAdapter() { + @Override public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2) + edit.doClick(); + } + }); - fl1.setBorder(BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.GRAY_COLOR"))); - fl1.setHorizontalAlignment(JTextField.CENTER); + edit.setOpaque(false); + edit.setMargin(new Insets(0, 0, 0, 0)); + edit.setBorder(BorderFactory.createEmptyBorder()); + edit.setContentAreaFilled(false); - add("Center", fl1); + remove.setOpaque(false); + remove.setMargin(new Insets(0, 0, 0, 0)); + remove.setBorder(BorderFactory.createEmptyBorder()); + remove.setContentAreaFilled(false); - fl1.setEditable(false); - bt1.addActionListener(aea4 -> { + edit.addActionListener(e -> { colorChooser.setColor(getColor()); - dialog = JColorChooser.createDialog(window, "Select color: ", true, colorChooser, e -> { - Color c = colorChooser.getColor(); - if (c != null) - setColor(c); + dialog = JColorChooser.createDialog(window, "Select color: ", true, colorChooser, e2 -> { + Color color = colorChooser.getColor(); + if (color != null) + setColor(color); dialog.setVisible(false); - }, e -> dialog.setVisible(false)); + }, e2 -> dialog.setVisible(false)); dialog.setVisible(true); }); + remove.addActionListener(e -> setColor(null)); - this.allowNullColor = allowNullColor; - this.allowTransparency = allowTransparency; + JPanel controls = PanelUtils.totalCenterInPanel( + allowNullColor ? PanelUtils.gridElements(1, 2, 2, 0, edit, remove) : edit); + controls.setOpaque(true); + controls.setBackground(getBackground()); + + for (AbstractColorChooserPanel panel : colorChooser.getChooserPanels()) + panel.setColorTransparencySelectionEnabled(allowTransparency); + + add("Center", colorText); + add("East", controls); if (allowNullColor) { setColor(null); - JButton bt2 = new JButton(UIRES.get("16px.delete.gif")); - bt2.setMargin(new Insets(0, 0, 0, 0)); - bt2.setOpaque(false); - bt2.addActionListener(e -> setColor(null)); - add("East", PanelUtils.gridElements(1, 2, 2, 0, bt1, bt2)); } else { - add("East", bt1); + setColor(Color.white); } - - for (AbstractColorChooserPanel panel : colorChooser.getChooserPanels()) - panel.setColorTransparencySelectionEnabled(allowTransparency); - - setOpaque(false); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); - fl1.setEnabled(enabled); - bt1.setEnabled(enabled); + colorText.setEnabled(enabled); + edit.setEnabled(enabled); + remove.setEnabled(enabled); } - public void setColorSelectedListener(ActionListener a) { - this.al = a; + public void addColorSelectedListener(ActionListener a) { + listeners.add(a); } - public void setColor(Color c) { - if (c == null && !allowNullColor) - c = Color.white; + public void setColor(Color color) { + if (color == null && !allowNullColor) + color = Color.white; - currentColor = allowTransparency || c == null ? c : new Color(c.getRGB(), false); + currentColor = allowTransparency || color == null ? color : new Color(color.getRGB(), false); if (currentColor == null) { - fl1.setOpaque(false); - fl1.setText("DEFAULT"); - fl1.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + colorText.setOpaque(false); + colorText.setText("DEFAULT"); + colorText.setForeground(Theme.current().getForegroundColor()); } else { - String color = c.getRed() + "," + c.getGreen() + "," + c.getBlue(); - fl1.setText(color); - fl1.setOpaque(true); - fl1.setBackground(c); - fl1.setForeground(getColorLuminance(c) > 128 ? Color.black : Color.white); + colorText.setText(String.format("#%06X", 0xFFFFFF & color.getRGB())); + colorText.setOpaque(true); + colorText.setBackground(color); + colorText.setForeground(getColorLuminance(color) > 128 ? Color.black : Color.white); } - if (al != null) - al.actionPerformed(new ActionEvent("", 0, "")); + listeners.forEach(l -> l.actionPerformed(new ActionEvent("", 0, ""))); } public Color getColor() { return currentColor; } - public static double getColorLuminance(Color color) { + private static double getColorLuminance(Color color) { int r = color.getRed(); int g = color.getGreen(); int b = color.getBlue(); diff --git a/src/main/java/net/mcreator/ui/component/JItemListField.java b/src/main/java/net/mcreator/ui/component/JItemListField.java index 265e1e6e78a..445a5223d43 100644 --- a/src/main/java/net/mcreator/ui/component/JItemListField.java +++ b/src/main/java/net/mcreator/ui/component/JItemListField.java @@ -26,6 +26,7 @@ import net.mcreator.ui.init.BlockItemIcons; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.IValidable; import net.mcreator.ui.validation.Validator; import net.mcreator.util.FilenameUtilsPatched; @@ -46,10 +47,10 @@ public abstract class JItemListField extends JPanel implements IValidable { - private final JButton bt = new JButton(UIRES.get("18px.add")); - private final JButton bt2 = new JButton(UIRES.get("18px.remove")); - private final JButton bt3 = new JButton(UIRES.get("18px.removeall")); - private final JButton bt4 = new JButton(UIRES.get("18px.addtag")); + private final TechnicalButton add = new TechnicalButton(UIRES.get("18px.add")); + private final TechnicalButton remove = new TechnicalButton(UIRES.get("18px.remove")); + private final TechnicalButton removeall = new TechnicalButton(UIRES.get("18px.removeall")); + private final TechnicalButton addtag = new TechnicalButton(UIRES.get("18px.addtag")); private final JToggleButton include = L10N.togglebutton("elementgui.common.include"); private final JToggleButton exclude = L10N.togglebutton("elementgui.common.exclude"); @@ -82,27 +83,27 @@ protected JItemListField(MCreator mcreator, boolean excludeButton, boolean allow elementsList.setLayoutOrientation(JList.HORIZONTAL_WRAP); elementsList.setCellRenderer(new CustomListCellRenderer()); - bt.setOpaque(false); - bt.setMargin(new Insets(0, 0, 0, 0)); - bt.setBorder(BorderFactory.createEmptyBorder()); - bt.setContentAreaFilled(false); + add.setOpaque(false); + add.setMargin(new Insets(0, 0, 0, 0)); + add.setBorder(BorderFactory.createEmptyBorder()); + add.setContentAreaFilled(false); - bt2.setOpaque(false); - bt2.setMargin(new Insets(0, 0, 0, 0)); - bt2.setBorder(BorderFactory.createEmptyBorder()); - bt2.setContentAreaFilled(false); + remove.setOpaque(false); + remove.setMargin(new Insets(0, 0, 0, 0)); + remove.setBorder(BorderFactory.createEmptyBorder()); + remove.setContentAreaFilled(false); - bt3.setOpaque(false); - bt3.setMargin(new Insets(0, 0, 0, 0)); - bt3.setBorder(BorderFactory.createEmptyBorder()); - bt3.setContentAreaFilled(false); + removeall.setOpaque(false); + removeall.setMargin(new Insets(0, 0, 0, 0)); + removeall.setBorder(BorderFactory.createEmptyBorder()); + removeall.setContentAreaFilled(false); - bt4.setOpaque(false); - bt4.setMargin(new Insets(0, 0, 0, 0)); - bt4.setBorder(BorderFactory.createEmptyBorder()); - bt4.setContentAreaFilled(false); + addtag.setOpaque(false); + addtag.setMargin(new Insets(0, 0, 0, 0)); + addtag.setBorder(BorderFactory.createEmptyBorder()); + addtag.setContentAreaFilled(false); - bt.addActionListener(e -> { + add.addActionListener(e -> { List list = getElementsToAdd(); for (T el : list) if (!elementsListModel.contains(el)) @@ -112,7 +113,7 @@ protected JItemListField(MCreator mcreator, boolean excludeButton, boolean allow this.listeners.forEach(l -> l.stateChanged(new ChangeEvent(e.getSource()))); }); - bt2.addActionListener(e -> { + remove.addActionListener(e -> { List elements = elementsList.getSelectedValuesList(); for (var element : elements) { if (element != null) { @@ -122,21 +123,22 @@ protected JItemListField(MCreator mcreator, boolean excludeButton, boolean allow } }); - bt3.addActionListener(e -> { + removeall.addActionListener(e -> { elementsListModel.removeAllElements(); this.listeners.forEach(l -> l.stateChanged(new ChangeEvent(e.getSource()))); }); - bt4.addActionListener(e -> { + addtag.addActionListener(e -> { List list = getTagsToAdd(); for (T el : list) if (!elementsListModel.contains(el)) elementsListModel.addElement(el); - - if (!list.isEmpty()) - this.listeners.forEach(l -> l.stateChanged(new ChangeEvent(e.getSource()))); + this.listeners.forEach(l -> l.stateChanged(new ChangeEvent(e.getSource()))); }); + include.addActionListener(e -> this.listeners.forEach(l -> l.stateChanged(new ChangeEvent(e.getSource())))); + exclude.addActionListener(e -> this.listeners.forEach(l -> l.stateChanged(new ChangeEvent(e.getSource())))); + JScrollPane pane = new JScrollPane(PanelUtils.totalCenterInPanel(elementsList)); pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); @@ -166,16 +168,16 @@ protected JItemListField(MCreator mcreator, boolean excludeButton, boolean allow JPanel buttonsPanel = new JPanel(); buttonsPanel.setOpaque(false); - buttonsPanel.add(bt); + buttonsPanel.add(add); if (allowTags) - buttonsPanel.add(bt4); - buttonsPanel.add(bt2); - buttonsPanel.add(bt3); + buttonsPanel.add(addtag); + buttonsPanel.add(remove); + buttonsPanel.add(removeall); JComponent buttons = PanelUtils.totalCenterInPanel(buttonsPanel); - buttons.setBorder(BorderFactory.createMatteBorder(0, 1, 0, 0, (Color) UIManager.get("MCreatorLAF.MAIN_TINT"))); + buttons.setBorder(BorderFactory.createMatteBorder(0, 1, 0, 0, Theme.current().getInterfaceAccentColor())); buttons.setOpaque(true); - buttons.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + buttons.setBackground(Theme.current().getSecondAltBackgroundColor()); if (excludeButton) { include.setSelected(true); @@ -187,8 +189,7 @@ protected JItemListField(MCreator mcreator, boolean excludeButton, boolean allow exclude.setMargin(new Insets(0, 1, 0, 1)); JComponent incexc = PanelUtils.totalCenterInPanel(PanelUtils.join(include, exclude)); - incexc.setBorder( - BorderFactory.createMatteBorder(0, 0, 0, 1, (Color) UIManager.get("MCreatorLAF.MAIN_TINT"))); + incexc.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Theme.current().getInterfaceAccentColor())); add(incexc, BorderLayout.WEST); } @@ -204,10 +205,10 @@ protected List getTagsToAdd() { } @Override public void setEnabled(boolean enabled) { - bt.setEnabled(enabled); - bt2.setEnabled(enabled); - bt3.setEnabled(enabled); - bt4.setEnabled(enabled); + add.setEnabled(enabled); + remove.setEnabled(enabled); + removeall.setEnabled(enabled); + addtag.setEnabled(enabled); include.setEnabled(enabled); exclude.setEnabled(enabled); } @@ -293,14 +294,11 @@ class CustomListCellRenderer extends JLabel implements ListCellRenderer { public Component getListCellRendererComponent(JList list, T value, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(true); - setBackground(isSelected ? - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR") : - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - setForeground(isSelected ? - (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT") : - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setBackground(isSelected ? Theme.current().getForegroundColor() : Theme.current().getAltBackgroundColor()); + setForeground( + isSelected ? Theme.current().getSecondAltBackgroundColor() : Theme.current().getForegroundColor()); setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 5, 0, 5, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")), + BorderFactory.createMatteBorder(0, 5, 0, 5, Theme.current().getBackgroundColor()), BorderFactory.createEmptyBorder(2, 5, 2, 5))); setHorizontalAlignment(SwingConstants.CENTER); setVerticalAlignment(SwingConstants.CENTER); diff --git a/src/main/java/net/mcreator/ui/component/JScrollablePopupMenu.java b/src/main/java/net/mcreator/ui/component/JScrollablePopupMenu.java index ba9d09ad530..dae038a6d3f 100644 --- a/src/main/java/net/mcreator/ui/component/JScrollablePopupMenu.java +++ b/src/main/java/net/mcreator/ui/component/JScrollablePopupMenu.java @@ -20,6 +20,7 @@ import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.SlickDarkScrollBarUI; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -50,8 +51,8 @@ public JScrollablePopupMenu() { protected JScrollBar getScrollBar() { if (popupScrollBar == null) { popupScrollBar = new JScrollBar(JScrollBar.VERTICAL); - popupScrollBar.setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.MAIN_TINT"), popupScrollBar)); + popupScrollBar.setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getInterfaceAccentColor(), popupScrollBar)); popupScrollBar.setPreferredSize(new Dimension(5, 0)); popupScrollBar.addAdjustmentListener(e -> { doLayout(); diff --git a/src/main/java/net/mcreator/ui/component/JSelectableList.java b/src/main/java/net/mcreator/ui/component/JSelectableList.java index d07f34cf0fd..6b6fad0ea4a 100644 --- a/src/main/java/net/mcreator/ui/component/JSelectableList.java +++ b/src/main/java/net/mcreator/ui/component/JSelectableList.java @@ -18,6 +18,8 @@ package net.mcreator.ui.component; +import net.mcreator.ui.laf.themes.Theme; + import javax.annotation.Nullable; import javax.swing.*; import java.awt.*; @@ -78,7 +80,7 @@ Path2D getRubberBand() { if (rubberBand.getBounds().getWidth() > 0 && rubberBand.getBounds().getHeight() > 0) { Graphics2D g2 = (Graphics2D) g; Stroke defaultStroke = g2.getStroke(); - g2.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + g2.setColor(Theme.current().getInterfaceAccentColor()); g2.setStroke(dashed); g2.draw(rubberBand); g2.setColor(new Color(g2.getColor().getRed(), g2.getColor().getGreen(), g2.getColor().getBlue(), 50)); diff --git a/src/main/java/net/mcreator/ui/component/JSelectableListMouseListenerWithDND.java b/src/main/java/net/mcreator/ui/component/JSelectableListMouseListenerWithDND.java index a954e2a2553..61d27a3a2a5 100644 --- a/src/main/java/net/mcreator/ui/component/JSelectableListMouseListenerWithDND.java +++ b/src/main/java/net/mcreator/ui/component/JSelectableListMouseListenerWithDND.java @@ -19,6 +19,7 @@ package net.mcreator.ui.component; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.breadcrumb.FolderElementCrumb; import net.mcreator.workspace.elements.FolderElement; import net.mcreator.workspace.elements.ModElement; @@ -71,7 +72,7 @@ public void stopDNDAction() { JComponent co = getAdditionalTargetFor(e); if (co instanceof FolderElementCrumb) { // highlight crumbs co.setOpaque(true); - co.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + co.setBackground(Theme.current().getAltBackgroundColor()); } if (finalDNDselection == null) { diff --git a/src/main/java/net/mcreator/ui/component/JStringListField.java b/src/main/java/net/mcreator/ui/component/JStringListField.java index 0afb7b2d55c..ebc2caad18a 100644 --- a/src/main/java/net/mcreator/ui/component/JStringListField.java +++ b/src/main/java/net/mcreator/ui/component/JStringListField.java @@ -22,14 +22,18 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.dialogs.ListEditorDialog; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; import javax.annotation.Nullable; import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseWheelEvent; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -45,6 +49,8 @@ public class JStringListField extends JPanel { private final TechnicalButton edit = new TechnicalButton(UIRES.get("18px.edit")); private final TechnicalButton clear = new TechnicalButton(UIRES.get("18px.removeall")); + private final List changeListeners = new ArrayList<>(); + private boolean uniqueEntries = false; /** @@ -98,12 +104,15 @@ public JStringListField(Window parent, @Nullable Function clear.setMargin(new Insets(0, 0, 0, 0)); clear.setBorder(BorderFactory.createEmptyBorder()); clear.setContentAreaFilled(false); - clear.addActionListener(e -> entriesModel.clear()); + clear.addActionListener(e -> { + entriesModel.clear(); + changeListeners.forEach(l -> l.stateChanged(new ChangeEvent(this))); + }); JPanel controls = PanelUtils.totalCenterInPanel(PanelUtils.join(edit, clear)); - controls.setBorder(BorderFactory.createMatteBorder(0, 1, 0, 0, (Color) UIManager.get("MCreatorLAF.MAIN_TINT"))); + controls.setBorder(BorderFactory.createMatteBorder(0, 1, 0, 0, Theme.current().getInterfaceAccentColor())); controls.setOpaque(true); - controls.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + controls.setBackground(Theme.current().getSecondAltBackgroundColor()); add("Center", pane); add("East", controls); @@ -115,6 +124,13 @@ public JStringListField(Window parent, @Nullable Function clear.setEnabled(b); } + /** + * @param listener Listener object to be registered for listening to value changes of this component. + */ + public void addChangeListener(ChangeListener listener) { + changeListeners.add(listener); + } + /** * @param uniqueEntries Whether duplicate string entries in the list are forbidden. * @return This field instance. @@ -137,6 +153,7 @@ public List getTextList() { public void setTextList(Collection newTextList) { entriesModel.clear(); entriesModel.addAll(newTextList); + changeListeners.forEach(l -> l.stateChanged(new ChangeEvent(this))); } private static class CustomListCellRenderer extends JLabel implements ListCellRenderer { @@ -145,14 +162,11 @@ private static class CustomListCellRenderer extends JLabel implements ListCellRe public Component getListCellRendererComponent(JList list, String value, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(true); - setBackground(isSelected ? - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR") : - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - setForeground(isSelected ? - (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT") : - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setBackground(isSelected ? Theme.current().getForegroundColor() : Theme.current().getAltBackgroundColor()); + setForeground( + isSelected ? Theme.current().getSecondAltBackgroundColor() : Theme.current().getForegroundColor()); setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 5, 0, 5, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")), + BorderFactory.createMatteBorder(0, 5, 0, 5, Theme.current().getBackgroundColor()), BorderFactory.createEmptyBorder(2, 5, 2, 5))); setHorizontalAlignment(JLabel.CENTER); setVerticalAlignment(JLabel.CENTER); diff --git a/src/main/java/net/mcreator/ui/component/ProgressBar.java b/src/main/java/net/mcreator/ui/component/ProgressBar.java index 8e913bb839a..793a0783d80 100644 --- a/src/main/java/net/mcreator/ui/component/ProgressBar.java +++ b/src/main/java/net/mcreator/ui/component/ProgressBar.java @@ -27,18 +27,10 @@ public class ProgressBar extends JPanel { private int curr = -1; private int wid = -1; - private Color emptyColor = new Color(80, 80, 80); - private Color barColor = (Color) UIManager.get("MCreatorLAF.MAIN_TINT"); - @Override public void paint(Graphics g) { - if (emptyColor != null) { - g.setColor(emptyColor); - g.fillRect(0, 0, getWidth(), getHeight()); - } else { - super.paint(g); - } + super.paint(g); - g.setColor(barColor); + g.setColor(Color.white); if (curr >= 0 && wid == -1 && max != 0) g.fillRect(0, 0, (int) (((double) getWidth() / ((double) max)) * (double) curr), getHeight()); else if (max != 0 && curr >= 0) @@ -61,11 +53,4 @@ public void init() { repaint(); } - public void setEmptyColor(Color emptyColor) { - this.emptyColor = emptyColor; - } - - public void setBarColor(Color barColor) { - this.barColor = barColor; - } } diff --git a/src/main/java/net/mcreator/ui/component/SearchableComboBox.java b/src/main/java/net/mcreator/ui/component/SearchableComboBox.java index 6c1bb26e656..0efd352d2bc 100644 --- a/src/main/java/net/mcreator/ui/component/SearchableComboBox.java +++ b/src/main/java/net/mcreator/ui/component/SearchableComboBox.java @@ -18,9 +18,12 @@ package net.mcreator.ui.component; +import net.mcreator.ui.init.UIRES; import net.mcreator.ui.validation.component.VComboBox; import javax.swing.*; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; import java.awt.*; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; @@ -37,31 +40,61 @@ public class SearchableComboBox extends VComboBox implements KeyListener, private List entries = new ArrayList<>(); + private boolean dropDownVisible = false; + public SearchableComboBox(T[] data) { super(data); - addKeyListener(this); - addFocusListener(this); entries.addAll(Arrays.asList(data)); + init(); } public SearchableComboBox() { + init(); + } + + private void init() { addKeyListener(this); addFocusListener(this); + addPopupMenuListener(new PopupMenuListener() { + @Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + dropDownVisible = true; + clearSearch(); + } + + @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { + dropDownVisible = false; + clearSearch(); + } + + @Override public void popupMenuCanceled(PopupMenuEvent e) { + dropDownVisible = false; + clearSearch(); + } + }); } - @Override protected void paintComponent(Graphics g) { - super.paintComponent(g); - if (searchTerm != null && !searchTerm.isEmpty()) { + @Override public void paint(Graphics g) { + super.paint(g); + + if (canSearch()) { + g.drawImage(UIRES.get("searchsmall").getImage(), getWidth() - 12 - 22, getHeight() / 2 - 12 / 2, null); + } + + if (!searchTerm.isEmpty()) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setFont(g.getFont().deriveFont(12.0f)); - g2.setColor(new Color(40, 40, 40, 200)); - g2.fillRect(0, 0, g.getFontMetrics().stringWidth(searchTerm) + 2, 15); + g2.setColor(new Color(50, 50, 50, 230)); + g2.fillRect(0, 0, g.getFontMetrics().stringWidth(searchTerm) + 3, 17); g2.setColor(Color.white); g2.drawString(searchTerm, 1, 12); } } + private boolean canSearch() { + return dropDownVisible && entries.size() > 10; + } + @Override public void addItem(T item) { super.addItem(item); entries.add(item); @@ -78,59 +111,63 @@ private void comboFilter() { super.removeAllItems(); entries.forEach(super::addItem); - if (searchTerm == null || searchTerm.isEmpty()) { + if (searchTerm.isEmpty() || !canSearch()) { super.setSelectedItem(selected); - return; - } - - List entriesFiltered = new ArrayList<>(); - ComboBoxModel model = getModel(); - int size = model.getSize(); - for (int i = 0; i < size; i++) { - T element = model.getElementAt(i); - if (element.toString().toLowerCase(Locale.ENGLISH).contains(searchTerm.toLowerCase(Locale.ENGLISH))) { - entriesFiltered.add(element); + } else { + List entriesFiltered = new ArrayList<>(); + ComboBoxModel model = getModel(); + int size = model.getSize(); + for (int i = 0; i < size; i++) { + T element = model.getElementAt(i); + if (element.toString().toLowerCase(Locale.ENGLISH).contains(searchTerm.toLowerCase(Locale.ENGLISH))) { + entriesFiltered.add(element); + } } - } - if (!entriesFiltered.isEmpty()) { - super.removeAllItems(); - entriesFiltered.forEach(super::addItem); + if (!entriesFiltered.isEmpty()) { + super.removeAllItems(); + entriesFiltered.forEach(super::addItem); + } } } - @Override public void focusGained(FocusEvent e) { + private void clearSearch() { searchTerm = ""; comboFilter(); } + @Override public void focusGained(FocusEvent e) { + clearSearch(); + } + @Override public void focusLost(FocusEvent e) { - searchTerm = ""; - comboFilter(); + clearSearch(); } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { - if (Character.isLetterOrDigit(e.getKeyChar()) || e.getKeyChar() == '_' || e.getKeyChar() == '-' - || e.getKeyChar() == ':' || e.getKeyChar() == ' ') { - searchTerm += e.getKeyChar(); - comboFilter(); - } else if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) { - if (!searchTerm.isEmpty()) { - searchTerm = searchTerm.substring(0, searchTerm.length() - 1); + if (canSearch()) { + if (Character.isLetterOrDigit(e.getKeyChar()) || e.getKeyChar() == '_' || e.getKeyChar() == '-' + || e.getKeyChar() == ':' || e.getKeyChar() == ' ') { + searchTerm += e.getKeyChar(); comboFilter(); - } else { + } else if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) { + if (!searchTerm.isEmpty()) { + searchTerm = searchTerm.substring(0, searchTerm.length() - 1); + comboFilter(); + } else { + searchTerm = ""; + comboFilter(); + } + } else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { searchTerm = ""; comboFilter(); + } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { + searchTerm = ""; + repaint(); } - } else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { - searchTerm = ""; - comboFilter(); - } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { - searchTerm = ""; - repaint(); } } diff --git a/src/main/java/net/mcreator/ui/component/TechnicalButton.java b/src/main/java/net/mcreator/ui/component/TechnicalButton.java index 43f4ac335cc..331547993c5 100644 --- a/src/main/java/net/mcreator/ui/component/TechnicalButton.java +++ b/src/main/java/net/mcreator/ui/component/TechnicalButton.java @@ -29,7 +29,7 @@ * add fresh entries to a {@link JEntriesList JEntriesList} or import missing resources) * and should not trigger {@link net.mcreator.ui.modgui.ModElementChangedListener ModElementChangedListeners}. */ -public class TechnicalButton extends JButton { +public class TechnicalButton extends JButton implements ITechnicalComponent { public TechnicalButton(Icon icon) { super(icon); @@ -39,7 +39,4 @@ public TechnicalButton(String text) { super(text); } - @Override public String getName() { - return "TechnicalComponent"; - } } diff --git a/src/main/java/net/mcreator/ui/component/UnsupportedComponent.java b/src/main/java/net/mcreator/ui/component/UnsupportedComponent.java index ab51ad17ecf..cb5ac48f66b 100644 --- a/src/main/java/net/mcreator/ui/component/UnsupportedComponent.java +++ b/src/main/java/net/mcreator/ui/component/UnsupportedComponent.java @@ -20,6 +20,7 @@ package net.mcreator.ui.component; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -34,10 +35,21 @@ public class UnsupportedComponent extends JPanel { */ public static void markUnsupported(Component comp) { Container parent = comp.getParent(); - if (parent != null) { + if (parent != null && !(parent instanceof UnsupportedComponent)) { + LayoutManager parentLayout = parent.getLayout(); int index = Arrays.asList(parent.getComponents()).indexOf(comp); - parent.remove(index); - parent.add(new UnsupportedComponent(comp), index); + if (parentLayout instanceof BorderLayout borderLayout) { + Object constraints = borderLayout.getConstraints(comp); + parent.remove(index); + parent.add(new UnsupportedComponent(comp), constraints, index); + } else if (parentLayout instanceof GridBagLayout gridBagLayout) { + Object constraints = gridBagLayout.getConstraints(comp); + parent.remove(index); + parent.add(new UnsupportedComponent(comp), constraints, index); + } else { + parent.remove(index); + parent.add(new UnsupportedComponent(comp), index); + } } } @@ -48,13 +60,18 @@ public static void markUnsupported(Component comp) { * * @param origin The component to be marked. */ - public UnsupportedComponent(Component origin) { + UnsupportedComponent(Component origin) { setLayout(new GridLayout()); setOpaque(false); + setBounds(origin.getBounds()); + // disable origin component and prevent any mouse clicks/key presses from being handled by it origin.setEnabled(false); + Arrays.stream(origin.getMouseListeners()).forEach(origin::removeMouseListener); + Arrays.stream(origin.getMouseMotionListeners()).forEach(origin::removeMouseMotionListener); + Arrays.stream(origin.getMouseWheelListeners()).forEach(origin::removeMouseWheelListener); Arrays.stream(origin.getKeyListeners()).forEach(origin::removeKeyListener); add(origin); @@ -72,10 +89,11 @@ public UnsupportedComponent(Component origin) { if (getWidth() > 100) { g.setFont(g.getFont().deriveFont(12f)); g.drawImage(warning, x - g.getFontMetrics().stringWidth("Not supported") / 2, y, null); - g.setColor((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + g.setColor(Theme.current().getForegroundColor()); g.drawString("Not supported", x - g.getFontMetrics().stringWidth("Not supported") / 2 + 18 + 4, y + 13); } else { g.drawImage(warning, x, y, null); } } + } diff --git a/src/main/java/net/mcreator/ui/component/entries/JSimpleListEntry.java b/src/main/java/net/mcreator/ui/component/entries/JSimpleListEntry.java index 70fc2a37c34..53288057df1 100644 --- a/src/main/java/net/mcreator/ui/component/entries/JSimpleListEntry.java +++ b/src/main/java/net/mcreator/ui/component/entries/JSimpleListEntry.java @@ -22,6 +22,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -38,7 +39,7 @@ public abstract class JSimpleListEntry extends JPanel { public JSimpleListEntry(JPanel parent, List> entryList) { this.parent = parent; - setBackground(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker()); + setBackground((Theme.current().getAltBackgroundColor()).darker()); setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); JComponent container = PanelUtils.expandHorizontally(this); diff --git a/src/main/java/net/mcreator/ui/component/entries/JSingleEntriesList.java b/src/main/java/net/mcreator/ui/component/entries/JSingleEntriesList.java index f147caa39a5..8ce67a864b3 100644 --- a/src/main/java/net/mcreator/ui/component/entries/JSingleEntriesList.java +++ b/src/main/java/net/mcreator/ui/component/entries/JSingleEntriesList.java @@ -22,6 +22,7 @@ import net.mcreator.ui.MCreator; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.IHelpContext; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -39,7 +40,7 @@ public JSingleEntriesList(MCreator mcreator, IHelpContext gui) { super(mcreator, new BorderLayout(), gui); setOpaque(false); - topbar.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + topbar.setBackground(Theme.current().getAltBackgroundColor()); topbar.add(add); add("North", topbar); @@ -49,7 +50,7 @@ public JSingleEntriesList(MCreator mcreator, IHelpContext gui) { JScrollPane scrollPane = new JScrollPane(PanelUtils.pullElementUp(entries)) { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g2d.setColor(Theme.current().getAltBackgroundColor()); g2d.setComposite(AlphaComposite.SrcOver.derive(0.45f)); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); diff --git a/src/main/java/net/mcreator/ui/component/util/ComponentUtils.java b/src/main/java/net/mcreator/ui/component/util/ComponentUtils.java index a24d79c3573..01ad3c1193e 100644 --- a/src/main/java/net/mcreator/ui/component/util/ComponentUtils.java +++ b/src/main/java/net/mcreator/ui/component/util/ComponentUtils.java @@ -19,6 +19,7 @@ package net.mcreator.ui.component.util; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.DesktopUtils; import javax.swing.*; @@ -43,38 +44,36 @@ public static JComponent deriveFont(JComponent component, float param) { public static void normalizeButton2(JButton button) { button.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(new Color(30, 30, 30), 1), BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getBackgroundColor(), 1), BorderFactory.createLineBorder(new Color(30, 30, 30), 4)))); - button.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + button.setBackground(Theme.current().getAltBackgroundColor()); } public static void normalizeButton2(JToggleButton button) { Border off = BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(new Color(30, 30, 30), 1), BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getBackgroundColor(), 1), BorderFactory.createLineBorder(new Color(30, 30, 30), 4))); Border on = BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(new Color(30, 30, 30), 1), BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), 1), - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), 4))); + BorderFactory.createLineBorder(Theme.current().getBackgroundColor(), 1), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor(), 4))); button.setBorder(button.isSelected() ? on : off); - button.setBackground( - button.isSelected() ? (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT") : new Color(30, 30, 30)); + button.setBackground(button.isSelected() ? Theme.current().getAltBackgroundColor() : new Color(30, 30, 30)); button.addChangeListener(e -> { button.setBorder(button.isSelected() ? on : off); - button.setBackground( - button.isSelected() ? (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT") : new Color(30, 30, 30)); + button.setBackground(button.isSelected() ? Theme.current().getAltBackgroundColor() : new Color(30, 30, 30)); }); } public static void normalizeButton4(AbstractButton button) { button.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(new Color(0, 0, 0, 0), 1), BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor(), 1), BorderFactory.createMatteBorder(1, 3, 1, 3, new Color(0, 0, 0, 0))))); button.setBackground(new Color(0, 0, 0, 0)); button.setOpaque(false); - button.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + button.setForeground(Theme.current().getForegroundColor()); deriveFont(button, 11); } @@ -115,7 +114,7 @@ public static JPanel squareAndBorder(Component gor, Color color, String text) { } public static JPanel squareAndBorder(Component gor, String text) { - return squareAndBorder(gor, (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), text); + return squareAndBorder(gor, Theme.current().getForegroundColor(), text); } } diff --git a/src/main/java/net/mcreator/ui/component/zoompane/JZoomPane.java b/src/main/java/net/mcreator/ui/component/zoompane/JZoomPane.java index 6fea6d2342b..516adb5ff62 100644 --- a/src/main/java/net/mcreator/ui/component/zoompane/JZoomPane.java +++ b/src/main/java/net/mcreator/ui/component/zoompane/JZoomPane.java @@ -20,6 +20,7 @@ import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -42,8 +43,8 @@ public JZoomPane(JComponent zoomable) { if (zoomable instanceof IZoomable) ((IZoomable) zoomable).setZoomPane(this); - popup.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - popup.setBorder(BorderFactory.createMatteBorder(0, 3, 0, 0, (Color) UIManager.get("MCreatorLAF.MAIN_TINT"))); + popup.setBackground(Theme.current().getAltBackgroundColor()); + popup.setBorder(BorderFactory.createMatteBorder(0, 3, 0, 0, Theme.current().getInterfaceAccentColor())); JMenuItem recenter = new JMenuItem("Center view"); popup.add(recenter); JMenuItem fit = new JMenuItem("Zoom to fit"); @@ -84,8 +85,8 @@ public JZoomPane(JComponent zoomable) { horizontalScrollBar.setOpaque(false); verticalScrollBar.setOpaque(false); - quickActions.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - quickActions.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + quickActions.setBackground(Theme.current().getAltBackgroundColor()); + quickActions.setForeground(Theme.current().getForegroundColor()); quickActions.setMargin(new Insets(0, 0, 0, 0)); ComponentUtils.deriveFont(quickActions, 8); diff --git a/src/main/java/net/mcreator/ui/component/zoompane/ZoomedMouseEvent.java b/src/main/java/net/mcreator/ui/component/zoompane/ZoomedMouseEvent.java index 55f01e5d0dd..35e5c6f2a1f 100644 --- a/src/main/java/net/mcreator/ui/component/zoompane/ZoomedMouseEvent.java +++ b/src/main/java/net/mcreator/ui/component/zoompane/ZoomedMouseEvent.java @@ -27,9 +27,8 @@ public class ZoomedMouseEvent extends MouseEvent { private final Point2D viewPosition; private final double zoom; - @SuppressWarnings("deprecation") public ZoomedMouseEvent(MouseEvent event, JZoomport zoomport) - throws NullPointerException { - super(zoomport.getToZoom(), event.getID(), event.getWhen(), event.getModifiers(), (int) Math.floor( + public ZoomedMouseEvent(MouseEvent event, JZoomport zoomport) throws NullPointerException { + super(zoomport.getToZoom(), event.getID(), event.getWhen(), event.getModifiersEx(), (int) Math.floor( (event.getX() - zoomport.getCanvasX() + zoomport.getViewPositionX()) / zoomport.getZoom()), (int) Math.floor( (event.getY() - zoomport.getCanvasY() + zoomport.getViewPositionY()) / zoomport.getZoom()), @@ -63,6 +62,24 @@ public double getRawY() { } } + /** + * Returns precise X coordinate of the mouse event. If floored, this should be the same as getX(). + * + * @return precise X coordinate of the mouse event + */ + public double getPreciseX() { + return getRawX() / zoom; + } + + /** + * Returns precise Y coordinate of the mouse event. If floored, this should be the same as getY(). + * + * @return precise Y coordinate of the mouse event + */ + public double getPreciseY() { + return getRawY() / zoom; + } + public Double getRawXN() { try { if (mousePosition != null) diff --git a/src/main/java/net/mcreator/ui/dialogs/AddTagDialog.java b/src/main/java/net/mcreator/ui/dialogs/AddTagDialog.java index 0d762295e06..3723537f57c 100644 --- a/src/main/java/net/mcreator/ui/dialogs/AddTagDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/AddTagDialog.java @@ -19,10 +19,10 @@ package net.mcreator.ui.dialogs; -import net.mcreator.blockly.data.Dependency; import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; import net.mcreator.element.types.Tag; +import net.mcreator.minecraft.TagType; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; @@ -32,32 +32,24 @@ import net.mcreator.ui.validation.validators.ResourceLocationValidator; import net.mcreator.workspace.elements.ModElement; -import javax.annotation.Nonnull; import javax.swing.*; import java.awt.*; import java.util.Locale; public class AddTagDialog { - public static String openAddTagDialog(Window parent, MCreator mcreator, @Nonnull String tagType, - String... suggestions) { + public static String openAddTagDialog(Window parent, MCreator mcreator, TagType tagType, String... suggestions) { JPanel wrap = new JPanel(new GridLayout()); VComboBox tagName = new VComboBox<>(); - switch (tagType) { - case "Items" -> wrap.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 0, Dependency.getColor("itemstack"))); - case "Blocks" -> wrap.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 0, Dependency.getColor("blockstate"))); - case "Entities" -> wrap.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 0, Dependency.getColor("entity"))); - case "Biomes" -> wrap.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 0, Dependency.getColor("world"))); - } - + wrap.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 0, tagType.getColor())); tagName.setValidator(new ResourceLocationValidator<>(L10N.t("modelement.tag"), tagName, true)); for (ModElement modElement : mcreator.getWorkspace().getModElements()) { if (modElement.getType() == ModElementType.TAG) { GeneratableElement ge = modElement.getGeneratableElement(); if (ge instanceof Tag tag) { - if (tag.type.equals(tagType)) + if (TagType.fromLegacyName(tag.type).equals(tagType)) tagName.addItem(tag.getResourceLocation()); } } @@ -74,8 +66,8 @@ public static String openAddTagDialog(Window parent, MCreator mcreator, @Nonnull wrap.add(tagName); int result = JOptionPane.showConfirmDialog(parent, PanelUtils.northAndCenterElement( - L10N.label("dialog.item_selector.enter_tag_name." + tagType.toLowerCase(Locale.ENGLISH)), wrap, 5, 5), - L10N.t("dialog.item_selector.use_tag"), JOptionPane.OK_CANCEL_OPTION); + L10N.label("dialog.item_selector.enter_tag_name." + tagType.name().toLowerCase(Locale.ENGLISH)), wrap, + 5, 5), L10N.t("dialog.item_selector.use_tag"), JOptionPane.OK_CANCEL_OPTION); if (result == JOptionPane.OK_OPTION) { if (tagName.getValidationStatus().getValidationResultType() != Validator.ValidationResultType.ERROR) { return tagName.getSelectedItem(); diff --git a/src/main/java/net/mcreator/ui/dialogs/CodeErrorDialog.java b/src/main/java/net/mcreator/ui/dialogs/CodeErrorDialog.java index 4aa9555bdc2..d3b1aabc044 100644 --- a/src/main/java/net/mcreator/ui/dialogs/CodeErrorDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/CodeErrorDialog.java @@ -24,6 +24,8 @@ import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.action.impl.workspace.RegenerateCodeAction; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.renderer.elementlist.special.CompactModElementListCellRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.DesktopUtils; import net.mcreator.workspace.elements.ModElement; import org.apache.logging.log4j.LogManager; @@ -38,7 +40,7 @@ public class CodeErrorDialog { - private static final Logger LOG = LogManager.getLogger("Code Error Parser"); + private static final Logger LOG = LogManager.getLogger(CodeErrorDialog.class); /** * @param mcreator MCreator instance @@ -59,7 +61,6 @@ public static boolean showCodeErrorDialog(MCreator mcreator, String stderroutput Set problematicMods = new HashSet<>(); boolean moddefinitionfileerrors = false; - for (File problematicFile : problematicFiles) { ModElement modElementWithError = mcreator.getGenerator().getModElementThisFileBelongsTo(problematicFile); if (modElementWithError != null) { @@ -72,9 +73,6 @@ public static boolean showCodeErrorDialog(MCreator mcreator, String stderroutput } else { LOG.warn("[ForgeGradleUtil] Error from non MCreator generated class!"); } - - if (problematicMods.size() > 10) - break; } mcreator.setCursor(Cursor.getDefaultCursor()); @@ -100,19 +98,25 @@ public static boolean showCodeErrorDialog(MCreator mcreator, String stderroutput } JList problematicModsList = new JList<>(problematicMods.toArray(new ModElement[0])); + problematicModsList.setLayoutOrientation(JList.HORIZONTAL_WRAP); + problematicModsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + problematicModsList.setFixedCellHeight(40); + problematicModsList.setFixedCellWidth(200); + problematicModsList.setVisibleRowCount(-1); + problematicModsList.setCellRenderer(new CompactModElementListCellRenderer()); + JScrollPane sp = new JScrollPane(problematicModsList); sp.setPreferredSize(new Dimension(150, 140)); + sp.setBackground(Theme.current().getSecondAltBackgroundColor()); + problematicModsList.setBackground(Theme.current().getSecondAltBackgroundColor()); - sp.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); - problematicModsList.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); - - JPanel list = new JPanel(new BorderLayout()); - list.add("North", L10N.label("dialog.code_error.compilation_list")); - list.add("Center", sp); + JPanel wrapper = new JPanel(new BorderLayout()); + wrapper.add("North", L10N.label("dialog.code_error.compilation_list")); + wrapper.add("Center", sp); Object[] options = { L10N.t("dialog.code_error.show_in_workspace"), L10N.t("dialog.code_error.show_build_log"), L10N.t("gradle.errors.do_nothing"), L10N.t("action.support") }; - int n = JOptionPane.showOptionDialog(mcreator, list, L10N.t("dialog.code_error.title"), + int n = JOptionPane.showOptionDialog(mcreator, wrapper, L10N.t("dialog.code_error.title"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); if (n == 0) { mcreator.mcreatorTabs.showTab(mcreator.workspaceTab); diff --git a/src/main/java/net/mcreator/ui/dialogs/DataListSelectorDialog.java b/src/main/java/net/mcreator/ui/dialogs/DataListSelectorDialog.java index 6cad8e707b1..7c6b5d37ff9 100644 --- a/src/main/java/net/mcreator/ui/dialogs/DataListSelectorDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/DataListSelectorDialog.java @@ -62,16 +62,17 @@ public static List openMultiSelectorDialog(MCreator mcreator, return dataListSelector.list.getSelectedValuesList(); } - private class DataListCellRenderer extends DefaultListCellRenderer { + private static class DataListCellRenderer extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { var label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); DataListEntry entry = (DataListEntry) value; label.setText(entry.getReadableName()); - if (entry.getName().contains("CUSTOM:")) { + if (value instanceof DataListEntry.Custom custom) { setIcon(new ImageIcon(ImageUtils.resizeAA( - MCItem.getBlockIconBasedOnName(mcreator.getWorkspace(), entry.getName()).getImage(), 18))); + MCItem.getBlockIconBasedOnName(custom.getModElement().getWorkspace(), custom.getName()) + .getImage(), 18))); } else if (entry.getTexture() != null) { setIcon(new ImageIcon( ImageUtils.resizeAA(BlockItemIcons.getIconForItem(entry.getTexture()).getImage(), 18))); @@ -79,4 +80,5 @@ public Component getListCellRendererComponent(JList list, Object value, int i return label; } } + } \ No newline at end of file diff --git a/src/main/java/net/mcreator/ui/dialogs/ElementOrderEditor.java b/src/main/java/net/mcreator/ui/dialogs/ElementOrderEditor.java index a27705ef8eb..1ad3b7a58e9 100644 --- a/src/main/java/net/mcreator/ui/dialogs/ElementOrderEditor.java +++ b/src/main/java/net/mcreator/ui/dialogs/ElementOrderEditor.java @@ -25,6 +25,7 @@ import net.mcreator.ui.component.ReordarableListTransferHandler; import net.mcreator.ui.init.L10N; import net.mcreator.ui.laf.renderer.elementlist.SmallIconModListRender; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.workspace.elements.ModElement; import javax.swing.*; @@ -76,7 +77,7 @@ public static void openElementOrderEditor(MCreator mcreator) { list.setTransferHandler(new ReordarableListTransferHandler()); list.setDropMode(DropMode.INSERT); list.setDragEnabled(true); - list.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + list.setBackground(Theme.current().getAltBackgroundColor()); list.setCellRenderer(new SmallIconModListRender(false)); tabs.addTab(element.getCreativeTab().getUnmappedValue(), new JScrollPane(list)); diff --git a/src/main/java/net/mcreator/ui/dialogs/MCItemSelectorDialog.java b/src/main/java/net/mcreator/ui/dialogs/MCItemSelectorDialog.java index 0ef7f9c1cf6..4777ed840dd 100644 --- a/src/main/java/net/mcreator/ui/dialogs/MCItemSelectorDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/MCItemSelectorDialog.java @@ -19,10 +19,12 @@ package net.mcreator.ui.dialogs; import net.mcreator.minecraft.MCItem; +import net.mcreator.minecraft.TagType; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; import javax.swing.*; @@ -52,7 +54,7 @@ public MCItemSelectorDialog(MCreator mcreator, MCItem.ListProvider supplier, boo list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); jtf.setEnabled(false); - jtf.setBorder(BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + jtf.setBorder(BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor())); list.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent evt) { @@ -80,11 +82,11 @@ public MCItemSelectorDialog(MCreator mcreator, MCItem.ListProvider supplier, boo JButton useTags = L10N.button("dialog.item_selector.use_tag"); buttons.add(useTags); useTags.addActionListener(e -> { - String tagType = "Blocks"; + TagType tagType = TagType.BLOCKS; List items = supplier.provide(mcreator.getWorkspace()); for (MCItem item : items) { if (item.getType().equals("item")) { - tagType = "Items"; + tagType = TagType.ITEMS; break; } } @@ -187,7 +189,7 @@ public Component getListCellRendererComponent(JList list, MCIt if (isSelected) { setOpaque(true); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setBackground(Theme.current().getForegroundColor()); } else { setOpaque(false); } diff --git a/src/main/java/net/mcreator/ui/dialogs/MCreatorDialog.java b/src/main/java/net/mcreator/ui/dialogs/MCreatorDialog.java index 84a9c55a16f..7df76f1d8ab 100644 --- a/src/main/java/net/mcreator/ui/dialogs/MCreatorDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/MCreatorDialog.java @@ -19,6 +19,7 @@ package net.mcreator.ui.dialogs; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -73,7 +74,7 @@ public MCreatorDialog(Window w, String title, boolean modal) { } }); - super.getContentPane().setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + super.getContentPane().setBackground(Theme.current().getBackgroundColor()); } @Override public void setSize(int i, int i1) { diff --git a/src/main/java/net/mcreator/ui/dialogs/ModElementIDsDialog.java b/src/main/java/net/mcreator/ui/dialogs/ModElementIDsDialog.java index 1e05f205447..773f79201c8 100644 --- a/src/main/java/net/mcreator/ui/dialogs/ModElementIDsDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/ModElementIDsDialog.java @@ -23,6 +23,7 @@ import net.mcreator.ui.component.JEmptyBox; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.validators.RegistryNameValidator; @@ -47,9 +48,9 @@ public static ModElement openModElementIDDialog(MCreator mcreator, ModElement mo VTextField registryName = new VTextField(); JComponent reghol = PanelUtils.join(L10N.label("dialog.modelement_id.registry_name"), registryName); reghol.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("dialog.modelement_id.registry_name_info"), 0, 0, reghol.getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); panel.add(PanelUtils.centerInPanel(L10N.label("dialog.modelement_id.use_caution_warn"))); diff --git a/src/main/java/net/mcreator/ui/dialogs/NewModElementDialog.java b/src/main/java/net/mcreator/ui/dialogs/NewModElementDialog.java index ea665aa4454..74fe5a2e148 100644 --- a/src/main/java/net/mcreator/ui/dialogs/NewModElementDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/NewModElementDialog.java @@ -23,6 +23,7 @@ import net.mcreator.minecraft.RegistryNameFixer; import net.mcreator.ui.MCreator; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.modgui.ModElementGUI; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; @@ -32,14 +33,13 @@ import net.mcreator.workspace.elements.ModElement; import javax.swing.*; -import java.awt.*; public class NewModElementDialog { public static void showNameDialog(MCreator mcreator, ModElementType type) { JLabel regName = L10N.label("dialog.new_modelement.registry_name", L10N.t("dialog.new_modelement.registry_name.empty")); - regName.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + regName.setForeground(Theme.current().getAltForegroundColor()); regName.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); String modName = VOptionPane.showInputDialog(mcreator, @@ -56,7 +56,7 @@ public static void showNameDialog(MCreator mcreator, ModElementType type) { L10N.t("common.mod_element_name")).validate(); } }, L10N.t("dialog.new_modelement.create_new", type.getReadableName()), - UIManager.getString("OptionPane.cancelButtonText"), null, regName); + UIManager.getString("OptionPane.cancelButtonText"), null, null, regName); if (modName != null && !modName.isEmpty()) { modName = JavaConventions.convertToValidClassName(modName); diff --git a/src/main/java/net/mcreator/ui/dialogs/ProgressDialog.java b/src/main/java/net/mcreator/ui/dialogs/ProgressDialog.java index fcd92bcb0a5..dd824b7d77e 100644 --- a/src/main/java/net/mcreator/ui/dialogs/ProgressDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/ProgressDialog.java @@ -21,7 +21,9 @@ import net.mcreator.ui.MCreator; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; +import net.mcreator.ui.component.util.ThreadUtil; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.annotation.Nullable; import javax.swing.*; @@ -29,8 +31,9 @@ public class ProgressDialog extends MCreatorDialog { - private final DefaultListModel lModel = new DefaultListModel<>(); - private final JList progress = new JList<>(lModel); + private final JLabel titleLabel; + private final DefaultListModel listModel = new DefaultListModel<>(); + private final JList progressUnits = new JList<>(listModel); @Nullable private MCreator mcreator = null; @@ -39,36 +42,36 @@ public ProgressDialog(Window w, String title) { setLayout(new BorderLayout(0, 0)); - if (w instanceof MCreator) - mcreator = (MCreator) w; + if (w instanceof MCreator mcreatorInst) + this.mcreator = mcreatorInst; - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); setClosable(false); setUndecorated(true); setCursor(new Cursor(Cursor.WAIT_CURSOR)); - JLabel titleLabel = new JLabel(title); - titleLabel.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + titleLabel = new JLabel(title); + titleLabel.setBackground(Theme.current().getAltBackgroundColor()); titleLabel.setOpaque(true); titleLabel.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(8, 5, 0, 0, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")), - BorderFactory.createMatteBorder(0, 4, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")))); + BorderFactory.createMatteBorder(8, 5, 0, 0, Theme.current().getBackgroundColor()), + BorderFactory.createMatteBorder(0, 4, 0, 0, Theme.current().getAltBackgroundColor()))); ComponentUtils.deriveFont(titleLabel, 13); add("North", titleLabel); - progress.setCellRenderer(new Render()); - progress.setOpaque(false); - progress.setBorder(null); + progressUnits.setCellRenderer(new Render()); + progressUnits.setOpaque(false); + progressUnits.setBorder(null); - JScrollPane panes = new JScrollPane(progress); + JScrollPane panes = new JScrollPane(progressUnits); panes.getViewport().setOpaque(false); panes.setPreferredSize(new Dimension(600, 280)); - panes.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - panes.setBorder(BorderFactory.createMatteBorder(4, 8, 4, 4, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"))); + panes.setBackground(Theme.current().getBackgroundColor()); + panes.setBorder(BorderFactory.createMatteBorder(4, 8, 4, 4, Theme.current().getBackgroundColor())); ((JComponent) getContentPane()).setBorder( - BorderFactory.createMatteBorder(0, 5, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + BorderFactory.createMatteBorder(0, 5, 0, 0, Theme.current().getAltBackgroundColor())); add("Center", panes); @@ -76,8 +79,15 @@ public ProgressDialog(Window w, String title) { setLocationRelativeTo(w); } - public void hideAll() { - SwingUtilities.invokeLater(() -> setVisible(false)); + public void hideDialog() { + ThreadUtil.runOnSwingThread(() -> setVisible(false)); + } + + @Override public void setTitle(String title) { + super.setTitle(title); + // setTitle can be called before the titleLabel is initialized + if (titleLabel != null) + titleLabel.setText(title); } @Override public void setVisible(boolean visible) { @@ -87,25 +97,84 @@ public void hideAll() { mcreator.getApplication().getTaskbarIntegration().clearState(mcreator); } - public void addProgress(final ProgressUnit unit1a) { - SwingUtilities.invokeLater(() -> { + public void addProgressUnit(final ProgressUnit progressUnit) { + ThreadUtil.runOnSwingThread(() -> { if (mcreator != null) { mcreator.getApplication().getTaskbarIntegration().clearState(mcreator); mcreator.getApplication().getTaskbarIntegration().setIntermediateProgress(mcreator); } - unit1a.mcreator = this.mcreator; + progressUnit.progressDialog = this; - lModel.addElement(unit1a); - progress.updateUI(); + listModel.addElement(progressUnit); }); } - public void refreshDisplay() { - SwingUtilities.invokeLater(progress::updateUI); + public static class ProgressUnit { + + private final String name; + + private Status status; + private int percent; + + @Nullable private ProgressDialog progressDialog; + + public ProgressUnit(String name) { + this.name = name; + status = Status.LOADING; + } + + public void markStateOk() { + status = Status.COMPLETE; + + if (progressDialog != null) { + ThreadUtil.runOnSwingThread(() -> progressDialog.progressUnits.repaint()); + } + } + + public void markStateError() { + status = Status.ERROR; + + if (progressDialog != null) { + ThreadUtil.runOnSwingThread(() -> progressDialog.progressUnits.repaint()); + + if (progressDialog.mcreator != null) + progressDialog.mcreator.getApplication().getTaskbarIntegration() + .setErrorIndicator(progressDialog.mcreator); + } + } + + public void markStateWarning() { + status = Status.WARNING; + + if (progressDialog != null) { + ThreadUtil.runOnSwingThread(() -> progressDialog.progressUnits.repaint()); + + if (progressDialog.mcreator != null) + progressDialog.mcreator.getApplication().getTaskbarIntegration() + .setWarningIndicator(progressDialog.mcreator); + } + } + + public void setPercent(int percent) { + this.percent = percent; + + if (progressDialog != null) { + ThreadUtil.runOnSwingThread(() -> progressDialog.progressUnits.repaint()); + + if (progressDialog.mcreator != null) + progressDialog.mcreator.getApplication().getTaskbarIntegration() + .setProgressState(progressDialog.mcreator, percent); + } + } + + enum Status { + LOADING, COMPLETE, ERROR, WARNING + } + } - static class Render extends JPanel implements ListCellRenderer { + private static class Render extends JPanel implements ListCellRenderer { private final ImageIcon complete = UIRES.get("18px.ok"); private final ImageIcon remove = UIRES.get("18px.remove"); @@ -116,7 +185,7 @@ public Component getListCellRendererComponent(JList list boolean isSelected, boolean cellHasFocus) { removeAll(); setLayout(new BorderLayout()); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); JLabel status = new JLabel(); status.setForeground(Color.white); ComponentUtils.deriveFont(status, 12); @@ -148,13 +217,10 @@ public Component getListCellRendererComponent(JList list status2.repaint(); stap.add("East", PanelUtils.centerInPanel(status2)); - JProgressBar bar = new JProgressBar(); - bar.setIndeterminate(ma.inf); - bar.setMaximum(100); - bar.setBorder(BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1)); + JProgressBar bar = new JProgressBar(0, 100); + bar.setBorder(BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1)); bar.setOpaque(false); - if (!ma.inf) - bar.setValue(ma.percent); + bar.setValue(ma.percent); if (bar.getValue() > 0) stap.add("West", PanelUtils.centerInPanel(bar)); } else if (ma.status == ProgressUnit.Status.COMPLETE) { @@ -171,53 +237,4 @@ public Component getListCellRendererComponent(JList list } } - public static class ProgressUnit { - Status status; - String name; - long time; - private final long pv; - private int percent; - boolean inf = false; - - @Nullable private MCreator mcreator; - - public ProgressUnit(String name) { - this.name = name; - status = Status.LOADING; - pv = System.currentTimeMillis(); - } - - public void ok() { - status = Status.COMPLETE; - time = System.currentTimeMillis() - pv; - } - - public void err() { - status = Status.ERROR; - time = System.currentTimeMillis() - pv; - - if (mcreator != null) - mcreator.getApplication().getTaskbarIntegration().setErrorIndicator(mcreator); - } - - public void warn() { - status = Status.WARNING; - time = System.currentTimeMillis() - pv; - - if (mcreator != null) - mcreator.getApplication().getTaskbarIntegration().setWarningIndicator(mcreator); - } - - public void setPercent(int percent) { - this.percent = percent; - - if (mcreator != null) - mcreator.getApplication().getTaskbarIntegration().setProgressState(mcreator, percent); - } - - enum Status { - LOADING, COMPLETE, ERROR, WARNING - } - - } } diff --git a/src/main/java/net/mcreator/ui/dialogs/SearchUsagesDialog.java b/src/main/java/net/mcreator/ui/dialogs/SearchUsagesDialog.java new file mode 100644 index 00000000000..5df8d21304b --- /dev/null +++ b/src/main/java/net/mcreator/ui/dialogs/SearchUsagesDialog.java @@ -0,0 +1,180 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.dialogs; + +import net.mcreator.ui.MCreator; +import net.mcreator.ui.component.util.PanelUtils; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.renderer.elementlist.special.CompactModElementListCellRenderer; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.modgui.ModElementGUI; +import net.mcreator.workspace.elements.ModElement; + +import javax.annotation.Nullable; +import javax.swing.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Collection; +import java.util.Comparator; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Opens a dialog that shows usages of the elements selected by the user before all across the current workspace. + */ +public class SearchUsagesDialog { + + /** + * @param mcreator Workspace window calling this method. + * @param queryType Localized string representing type of elements used by mod elements in the given list. + * @param references List of referencing/dependent mod elements. + */ + public static void showUsagesDialog(MCreator mcreator, String queryType, Collection references) { + showDialog(mcreator, queryType, references, false, null); + } + + /** + * @param mcreator Workspace window calling this method. + * @param queryType Localized string representing type of elements used by mod elements in the given list. + * @param references List of referencing/dependent mod elements. + * @return Whether the user confirmed deletion of selected elements. + */ + public static boolean showDeleteDialog(MCreator mcreator, String queryType, Collection references) { + return showDialog(mcreator, queryType, references, true, null); + } + + /** + * @param mcreator Workspace window calling this method. + * @param queryType Localized string representing type of elements used by mod elements in the given list. + * @param references List of referencing/dependent mod elements. + * @param messageSuffix Additional information to be displayed by deletion dialog. + * @return Whether the user confirmed deletion of selected elements. + */ + public static boolean showDeleteDialog(MCreator mcreator, String queryType, Collection references, + @Nullable String messageSuffix) { + return showDialog(mcreator, queryType, references, true, messageSuffix); + } + + /** + * @param mcreator Workspace window calling this method. + * @param queryType Localized string representing type of elements used by mod elements in the given list. + * @param references List of referencing/dependent mod elements. + * @param deletionRequested Whether user wants to delete selected elements or just view their usages. + * @param messageSuffix Additional information to be displayed by deletion dialog. + * @return Whether elements deletion was requested and the user confirmed deletion. + */ + public static boolean showDialog(MCreator mcreator, String queryType, Collection references, + boolean deletionRequested, @Nullable String messageSuffix) { + if (references.isEmpty()) { // skip custom dialog if there are no references to show + if (deletionRequested) { + String msg = L10N.t("dialog.search_usages.deletion_safe.confirm_msg", queryType); + int n = JOptionPane.showConfirmDialog(mcreator, + messageSuffix != null ? msg + "

          " + messageSuffix : msg, + L10N.t("common.confirmation"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + return n == JOptionPane.YES_OPTION; + } else { + JOptionPane.showOptionDialog(mcreator, L10N.t("dialog.search_usages.list.empty", queryType), + L10N.t("dialog.search_usages.title"), JOptionPane.DEFAULT_OPTION, + JOptionPane.INFORMATION_MESSAGE, null, new Object[] { L10N.t("common.close") }, + L10N.t("common.close")); + return false; + } + } + + AtomicBoolean retVal = new AtomicBoolean(false); + MCreatorDialog dialog = new MCreatorDialog(mcreator, L10N.t("dialog.search_usages.title"), true); + + JList refList = new JList<>( + references.stream().sorted(Comparator.comparing(ModElement::getName)).toArray(ModElement[]::new)); + refList.setLayoutOrientation(JList.HORIZONTAL_WRAP); + refList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + refList.setSelectedIndex(0); + refList.setFixedCellHeight(40); + refList.setFixedCellWidth(200); + refList.setVisibleRowCount(-1); + refList.setBackground(Theme.current().getSecondAltBackgroundColor()); + refList.setCellRenderer(new CompactModElementListCellRenderer()); + refList.addMouseListener(new MouseAdapter() { + @Override public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2) + edit(mcreator, refList.getModel().getElementAt(refList.locationToIndex(e.getPoint())), dialog); + } + }); + + JScrollPane sp = new JScrollPane(refList); + sp.setBackground(Theme.current().getSecondAltBackgroundColor()); + sp.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + JButton edit = L10N.button("dialog.search_usages.open_selected"); + JButton close = deletionRequested ? + new JButton(UIManager.getString("OptionPane.cancelButtonText")) : + L10N.button("common.close"); + + edit.addActionListener(e -> { + if (!refList.isSelectionEmpty()) + edit(mcreator, refList.getSelectedValue(), dialog); + }); + close.addActionListener(e -> dialog.setVisible(false)); + + if (deletionRequested) { // if deletion is pending, focus the close button + dialog.getRootPane().setDefaultButton(close); + } + + JLabel msgLabel = new JLabel(); + msgLabel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + dialog.add("North", msgLabel); + + dialog.add("Center", sp); + + if (deletionRequested) { + String msg = L10N.t("dialog.search_usages.deletion.confirm_msg", queryType); + if (messageSuffix != null) + msg += "

          " + messageSuffix; + msgLabel.setText(msg); + + JButton delete = L10N.button("dialog.search_usages.deletion.confirm"); + delete.addActionListener(e -> { + retVal.set(true); + dialog.setVisible(false); + }); + dialog.add("South", PanelUtils.join(edit, delete, close)); + } else { + msgLabel.setText(L10N.t("dialog.search_usages.list", queryType)); + + dialog.add("South", PanelUtils.join(edit, close)); + } + + dialog.setSize(640, 350); + dialog.setLocationRelativeTo(mcreator); + dialog.setVisible(true); + + return retVal.get(); + } + + private static void edit(MCreator mcreator, ModElement modElement, MCreatorDialog dialog) { + if (modElement.getGeneratableElement() != null && !modElement.isCodeLocked()) { + ModElementGUI gui = modElement.getType().getModElementGUI(mcreator, modElement, true); + if (gui != null) { + gui.showView(); + dialog.setVisible(false); + } + } + } + +} diff --git a/src/main/java/net/mcreator/ui/dialogs/StateEditorDialog.java b/src/main/java/net/mcreator/ui/dialogs/StateEditorDialog.java index 333c1296081..5f287d41b75 100644 --- a/src/main/java/net/mcreator/ui/dialogs/StateEditorDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/StateEditorDialog.java @@ -24,6 +24,7 @@ import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.states.JStateLabel; import net.mcreator.ui.minecraft.states.PropertyData; import net.mcreator.ui.minecraft.states.StateMap; @@ -105,7 +106,7 @@ private StatePart(String property, String matchSymbol, JComponent component) { entryComponent = component; JPanel settings = new JPanel(); - settings.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + settings.setBackground(Theme.current().getAltBackgroundColor()); settings.add(new JLabel(property.replace("CUSTOM:", ""))); settings.add(new JLabel(matchSymbol)); settings.add(entryComponent); @@ -115,8 +116,8 @@ private StatePart(String property, String matchSymbol, JComponent component) { useEntry.addChangeListener(e -> { entryComponent.setEnabled(useEntry.isSelected()); settings.setBackground(useEntry.isSelected() ? - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT") : - (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + Theme.current().getAltBackgroundColor() : + Theme.current().getSecondAltBackgroundColor()); }); add(useEntry); diff --git a/src/main/java/net/mcreator/ui/dialogs/UpdateNotifyDialog.java b/src/main/java/net/mcreator/ui/dialogs/UpdateNotifyDialog.java index ff2c2f7ec19..56aecd25a17 100644 --- a/src/main/java/net/mcreator/ui/dialogs/UpdateNotifyDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/UpdateNotifyDialog.java @@ -26,7 +26,7 @@ import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.DesktopUtils; import net.mcreator.util.MCreatorVersionNumber; import org.apache.logging.log4j.LogManager; @@ -55,7 +55,7 @@ public static void showUpdateDialogIfUpdateExists(Window parent, boolean notifyF ComponentUtils.deriveFont(upde, 13); pan.add("North", upde); JTextPane ar = new JTextPane(); - ar.setFont(MCreatorTheme.console_font); + ar.setFont(Theme.current().getConsoleFont()); ar.setEnabled(false); ar.setMargin(new Insets(5, 10, 5, 5)); DefaultCaret caret = (DefaultCaret) ar.getCaret(); @@ -65,7 +65,7 @@ public static void showUpdateDialogIfUpdateExists(Window parent, boolean notifyF pan.add(new JLabel(" ")); pan.add("Center", PanelUtils.maxMargin(pane, 15, true, false, false, false)); pan.setPreferredSize(new Dimension(585, 290)); - ar.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + ar.setBackground(Theme.current().getSecondAltBackgroundColor()); ar.setText(fullChangelog(updateInfo)); @@ -97,7 +97,7 @@ public static void showUpdateDialogIfUpdateExists(Window parent, boolean notifyF ComponentUtils.deriveFont(upde, 13); pan.add("North", upde); JTextPane ar = new JTextPane(); - ar.setFont(MCreatorTheme.console_font); + ar.setFont(Theme.current().getConsoleFont()); ar.setEnabled(false); ar.setMargin(new Insets(5, 10, 5, 5)); DefaultCaret caret = (DefaultCaret) ar.getCaret(); @@ -107,7 +107,7 @@ public static void showUpdateDialogIfUpdateExists(Window parent, boolean notifyF pan.add(new JLabel(" ")); pan.add("Center", PanelUtils.maxMargin(pane, 15, true, false, false, false)); pan.setPreferredSize(new Dimension(585, 290)); - ar.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + ar.setBackground(Theme.current().getSecondAltBackgroundColor()); ar.setText(releaseChangelog(updateInfo.getReleases().get(Launcher.version.major).getBuilds(), Launcher.version.buildlong)); diff --git a/src/main/java/net/mcreator/ui/dialogs/file/FileDialogs.java b/src/main/java/net/mcreator/ui/dialogs/file/FileDialogs.java index c25ade5fc3b..5bc8707896d 100644 --- a/src/main/java/net/mcreator/ui/dialogs/file/FileDialogs.java +++ b/src/main/java/net/mcreator/ui/dialogs/file/FileDialogs.java @@ -38,8 +38,6 @@ public class FileDialogs { protected static File prevDir = new File(System.getProperty("user.home")); - public static boolean DISABLE_NATIVE_DIALOGS = false; - public static File getOpenDialog(Window f, String[] exp) { return getBasicFileChooserDialog(f, FileChooserType.OPEN, null, exp); } @@ -142,8 +140,7 @@ private static FileChooser.ExtensionFilter[] getFileFiltersForStringArray(String } private static boolean useNativeFileChooser() { - return PreferencesManager.PREFERENCES.ui.useNativeFileChooser.get() && OS.getOS() == OS.WINDOWS - && !DISABLE_NATIVE_DIALOGS; + return PreferencesManager.PREFERENCES.ui.useNativeFileChooser.get() && OS.getOS() == OS.WINDOWS; } } diff --git a/src/main/java/net/mcreator/ui/dialogs/imageeditor/DesaturateDialog.java b/src/main/java/net/mcreator/ui/dialogs/imageeditor/DesaturateDialog.java index c002101e45c..5863d4138be 100644 --- a/src/main/java/net/mcreator/ui/dialogs/imageeditor/DesaturateDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/imageeditor/DesaturateDialog.java @@ -23,6 +23,7 @@ import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.Selection; import net.mcreator.ui.views.editor.image.layer.Layer; import net.mcreator.ui.views.editor.image.tool.component.JSlidingSpinner; import net.mcreator.ui.views.editor.image.versioning.VersionManager; @@ -46,8 +47,6 @@ public DesaturateDialog(MCreator window, Canvas canvas, Layer layer, VersionMana JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); JButton ok = L10N.button("dialog.imageeditor.desaturate_action"); - ok.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - ok.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); getRootPane().setDefaultButton(ok); GridBagConstraints layoutConstraints = new GridBagConstraints(); @@ -56,12 +55,26 @@ public DesaturateDialog(MCreator window, Canvas canvas, Layer layer, VersionMana ok.addActionListener(e -> { BufferedImage bim = ImageUtils.deepCopy(layer.getRaster()); + + Selection selection = canvas.getSelection(); + Shape validArea = selection.getLayerMask(layer); + Graphics2D g2d = layer.createGraphics(); + + Shape previousShape = g2d.getClip(); + + if (validArea != null) + g2d.setClip(validArea); + g2d.setBackground(new Color(0, 0, 0, 0)); g2d.clearRect(0, 0, getWidth(), getHeight()); g2d.drawImage(ImageUtils.toBufferedImage( ImageUtils.changeSaturation(new ImageIcon(bim), (float) spinner.getValue() / 100).getImage()), null, 0, 0); + + if (validArea != null) + g2d.setClip(previousShape); + g2d.dispose(); layer.mergeOverlay(); versionManager.addRevision(new Modification(canvas, layer)); diff --git a/src/main/java/net/mcreator/ui/dialogs/imageeditor/FromTemplateDialog.java b/src/main/java/net/mcreator/ui/dialogs/imageeditor/FromTemplateDialog.java index 2b131a65a33..3b90c5d121b 100644 --- a/src/main/java/net/mcreator/ui/dialogs/imageeditor/FromTemplateDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/imageeditor/FromTemplateDialog.java @@ -27,6 +27,7 @@ import net.mcreator.ui.init.ImageMakerTexturesCache; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.views.editor.image.canvas.Canvas; import net.mcreator.ui.views.editor.image.layer.Layer; import net.mcreator.ui.views.editor.image.versioning.VersionManager; @@ -57,7 +58,7 @@ public class FromTemplateDialog extends MCreatorDialog { "Dye" }; private static final Color[] presetColors = new Color[] { Color.red, Color.green, Color.blue, - (Color) UIManager.get("MCreatorLAF.MAIN_TINT"), Color.magenta, Color.cyan, new Color(244, 67, 54), + Theme.current().getInterfaceAccentColor(), Color.magenta, Color.cyan, new Color(244, 67, 54), new Color(233, 30, 99), new Color(255, 235, 59), new Color(205, 220, 57), new Color(255, 87, 34), new Color(158, 158, 158), new Color(255, 152, 0), new Color(0, 188, 212), new Color(139, 195, 74) }; @@ -198,9 +199,9 @@ public FromTemplateDialog(MCreator window, Canvas canvas, VersionManager version pas.add(PanelUtils.join(FlowLayout.LEFT, L10N.label("dialog.imageeditor.template_layer_four"), cbs4, bt4, col4, type3, L10N.label("dialog.imageeditor.template_rotation"), ang3)); - col1.setColorSelectedListener(event -> refreshIcon()); - col2.setColorSelectedListener(event -> refreshIcon()); - col4.setColorSelectedListener(event -> refreshIcon()); + col1.addColorSelectedListener(event -> refreshIcon()); + col2.addColorSelectedListener(event -> refreshIcon()); + col4.addColorSelectedListener(event -> refreshIcon()); cbs.addActionListener(event -> refreshIcon()); cbs2.addActionListener(event -> refreshIcon()); cbs3.addActionListener(event -> refreshIcon()); @@ -217,8 +218,8 @@ public FromTemplateDialog(MCreator window, Canvas canvas, VersionManager version JButton randomize = L10N.button("dialog.imageeditor.template_randomize"); randomize.setMargin(new Insets(1, 40, 1, 40)); - randomize.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - randomize.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + randomize.setBackground(Theme.current().getAltBackgroundColor()); + randomize.setForeground(Theme.current().getForegroundColor()); randomize.setFocusPainted(false); templates.add(new JLabel("")); @@ -257,8 +258,6 @@ public FromTemplateDialog(MCreator window, Canvas canvas, VersionManager version JButton merge = L10N.button("dialog.imageeditor.template_create_and_merge"); JButton ok = L10N.button("action.common.create"); - ok.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - ok.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); getRootPane().setDefaultButton(ok); cancel.addActionListener(e -> setVisible(false)); diff --git a/src/main/java/net/mcreator/ui/dialogs/imageeditor/HSVNoiseDialog.java b/src/main/java/net/mcreator/ui/dialogs/imageeditor/HSVNoiseDialog.java index 0a538612f63..7983659aab8 100644 --- a/src/main/java/net/mcreator/ui/dialogs/imageeditor/HSVNoiseDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/imageeditor/HSVNoiseDialog.java @@ -23,6 +23,7 @@ import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.Selection; import net.mcreator.ui.views.editor.image.layer.Layer; import net.mcreator.ui.views.editor.image.tool.component.JSlidingSpinner; import net.mcreator.ui.views.editor.image.versioning.VersionManager; @@ -59,8 +60,6 @@ public HSVNoiseDialog(MCreator window, Canvas canvas, Layer layer, VersionManage JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); JButton ok = L10N.button("action.common.apply"); - ok.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - ok.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); getRootPane().setDefaultButton(ok); GridBagConstraints layoutConstraints = new GridBagConstraints(); @@ -69,11 +68,25 @@ public HSVNoiseDialog(MCreator window, Canvas canvas, Layer layer, VersionManage ok.addActionListener(e -> { BufferedImage bim = ImageUtils.deepCopy(layer.getRaster()); + + Selection selection = canvas.getSelection(); + Shape validArea = selection.getLayerMask(layer); + Graphics2D g2d = layer.createGraphics(); + + Shape previousShape = g2d.getClip(); + + if (validArea != null) + g2d.setClip(validArea); + g2d.setBackground(new Color(0, 0, 0, 0)); g2d.clearRect(0, 0, getWidth(), getHeight()); g2d.drawImage(ImageUtils.noiseHSV(bim, (float) (hue.getValue() / 255.0), (float) (sat.getValue() / 255.0), (float) (val.getValue() / 255.0), generateSum(textField.getText())), 0, 0, null); + + if (validArea != null) + g2d.setClip(previousShape); + g2d.dispose(); layer.mergeOverlay(); versionManager.addRevision(new Modification(canvas, layer)); diff --git a/src/main/java/net/mcreator/ui/dialogs/imageeditor/NewImageDialog.java b/src/main/java/net/mcreator/ui/dialogs/imageeditor/NewImageDialog.java index 85be1d3cfa2..00198d55d31 100644 --- a/src/main/java/net/mcreator/ui/dialogs/imageeditor/NewImageDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/imageeditor/NewImageDialog.java @@ -85,8 +85,6 @@ public NewImageDialog(MCreator window, ImageMakerView imageMakerView) { JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); JButton ok = L10N.button("action.common.create"); - ok.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - ok.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); getRootPane().setDefaultButton(ok); GridBagConstraints layoutConstraints = new GridBagConstraints(); diff --git a/src/main/java/net/mcreator/ui/dialogs/imageeditor/NewLayerDialog.java b/src/main/java/net/mcreator/ui/dialogs/imageeditor/NewLayerDialog.java index a5c92fa6132..20b155b4d45 100644 --- a/src/main/java/net/mcreator/ui/dialogs/imageeditor/NewLayerDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/imageeditor/NewLayerDialog.java @@ -83,8 +83,6 @@ public NewLayerDialog(MCreator window, Canvas canvas) { JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); JButton ok = L10N.button("action.common.create"); - ok.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - ok.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); getRootPane().setDefaultButton(ok); GridBagConstraints layoutConstraints = new GridBagConstraints(); @@ -115,15 +113,15 @@ public NewLayerDialog(MCreator window, Canvas canvas) { ok.addActionListener(e -> { switch (layerType.getSelectedIndex()) { case 0: - canvas.add(new Layer((int) width.getValue(), (int) height.getValue(), (int) offsetX.getValue(), + canvas.addOnTop(new Layer((int) width.getValue(), (int) height.getValue(), (int) offsetX.getValue(), (int) offsetY.getValue(), layerName.getText())); break; case 1: - canvas.add(new Layer((int) width.getValue(), (int) height.getValue(), (int) offsetX.getValue(), + canvas.addOnTop(new Layer((int) width.getValue(), (int) height.getValue(), (int) offsetX.getValue(), (int) offsetY.getValue(), layerName.getText(), colorChoser.getColor())); break; case 2: - canvas.add(new Layer((int) width.getValue(), (int) height.getValue(), (int) offsetX.getValue(), + canvas.addOnTop(new Layer((int) width.getValue(), (int) height.getValue(), (int) offsetX.getValue(), (int) offsetY.getValue(), layerName.getText(), ImageMakerTexturesCache.CACHE.get(selection).getImage())); break; diff --git a/src/main/java/net/mcreator/ui/dialogs/imageeditor/RecolorDialog.java b/src/main/java/net/mcreator/ui/dialogs/imageeditor/RecolorDialog.java index 9fea5fe993f..45da0384674 100644 --- a/src/main/java/net/mcreator/ui/dialogs/imageeditor/RecolorDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/imageeditor/RecolorDialog.java @@ -24,6 +24,7 @@ import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.Selection; import net.mcreator.ui.views.editor.image.layer.Layer; import net.mcreator.ui.views.editor.image.tool.component.ColorSelector; import net.mcreator.ui.views.editor.image.versioning.VersionManager; @@ -55,8 +56,6 @@ public RecolorDialog(MCreator window, Canvas canvas, Layer layer, ColorSelector JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); JButton ok = L10N.button("dialog.imageeditor.recolor_action"); - ok.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - ok.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); getRootPane().setDefaultButton(ok); GridBagConstraints layoutConstraints = new GridBagConstraints(); @@ -65,12 +64,26 @@ public RecolorDialog(MCreator window, Canvas canvas, Layer layer, ColorSelector ok.addActionListener(e -> { BufferedImage bim = ImageUtils.deepCopy(layer.getRaster()); + + Selection selection = canvas.getSelection(); + Shape validArea = selection.getLayerMask(layer); + Graphics2D g2d = layer.createGraphics(); + + Shape previousShape = g2d.getClip(); + + if (validArea != null) + g2d.setClip(validArea); + g2d.setBackground(new Color(0, 0, 0, 0)); g2d.clearRect(0, 0, getWidth(), getHeight()); g2d.drawImage(ImageUtils.toBufferedImage( ImageUtils.colorize(new ImageIcon(bim), colorChooser.getColor(), !lock.isSelected()).getImage()), null, 0, 0); + + if (validArea != null) + g2d.setClip(previousShape); + g2d.dispose(); layer.mergeOverlay(); versionManager.addRevision(new Modification(canvas, layer)); diff --git a/src/main/java/net/mcreator/ui/dialogs/imageeditor/ResizeCanvasDialog.java b/src/main/java/net/mcreator/ui/dialogs/imageeditor/ResizeCanvasDialog.java index 731c10d871b..18dce4eb9ec 100644 --- a/src/main/java/net/mcreator/ui/dialogs/imageeditor/ResizeCanvasDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/imageeditor/ResizeCanvasDialog.java @@ -42,8 +42,6 @@ public ResizeCanvasDialog(MCreator window, Canvas canvas) { JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); JButton ok = L10N.button("action.common.resize"); - ok.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - ok.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); getRootPane().setDefaultButton(ok); GridBagConstraints layoutConstraints = new GridBagConstraints(); diff --git a/src/main/java/net/mcreator/ui/dialogs/imageeditor/ResizeDialog.java b/src/main/java/net/mcreator/ui/dialogs/imageeditor/ResizeDialog.java index 6a6e2e84ad8..75afe11bfa6 100644 --- a/src/main/java/net/mcreator/ui/dialogs/imageeditor/ResizeDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/imageeditor/ResizeDialog.java @@ -49,8 +49,6 @@ public ResizeDialog(MCreator window, Canvas canvas, Layer layer, VersionManager JButton ok = L10N.button("action.common.resize"); JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); - ok.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - ok.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); getRootPane().setDefaultButton(ok); GridBagConstraints layoutConstraints = new GridBagConstraints(); diff --git a/src/main/java/net/mcreator/ui/dialogs/preferences/PluginsPanel.java b/src/main/java/net/mcreator/ui/dialogs/preferences/PluginsPanel.java index e1aa2eca28b..ef9b60d0eee 100644 --- a/src/main/java/net/mcreator/ui/dialogs/preferences/PluginsPanel.java +++ b/src/main/java/net/mcreator/ui/dialogs/preferences/PluginsPanel.java @@ -30,6 +30,7 @@ import net.mcreator.ui.dialogs.file.FileDialogs; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.DesktopUtils; import javax.swing.*; @@ -110,14 +111,14 @@ static class PluginsListCellRenderer extends JLabel implements ListCellRenderer< @Override public Component getListCellRendererComponent(JList list, Plugin value, int index, boolean isSelected, boolean cellHasFocus) { - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setBackground(Theme.current().getForegroundColor()); setOpaque(false); if (value.isBuiltin()) { - setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + setForeground(Theme.current().getAltForegroundColor()); } else { - setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setForeground(Theme.current().getForegroundColor()); } ComponentUtils.deriveFont(this, 12); diff --git a/src/main/java/net/mcreator/ui/dialogs/preferences/PreferencesDialog.java b/src/main/java/net/mcreator/ui/dialogs/preferences/PreferencesDialog.java index 2111bb766f5..21c5c0480e2 100644 --- a/src/main/java/net/mcreator/ui/dialogs/preferences/PreferencesDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/preferences/PreferencesDialog.java @@ -28,6 +28,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import javax.annotation.Nullable; import javax.swing.*; @@ -64,8 +65,16 @@ public PreferencesDialog(Window parent, @Nullable String selectedTab) { setTitle(L10N.t("dialog.preferences.title_mcreator")); sections.setBackground(getBackground()); - sections.setFixedCellHeight(26); - sections.setBorder(new EmptyBorder(5, 10, 5, 0)); + sections.setCellRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel retval = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, + cellHasFocus); + retval.setBorder(new EmptyBorder(4, 10, 4, 10)); + return retval; + } + }); preferences.setLayout(preferencesLayout); @@ -80,7 +89,7 @@ public PreferencesDialog(Window parent, @Nullable String selectedTab) { } @Override public void paint(Graphics g) { - g.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g.setColor(Theme.current().getAltBackgroundColor()); g.fillRect(0, 0, getSize().width, getSize().height); super.paint(g); } @@ -88,12 +97,12 @@ public PreferencesDialog(Window parent, @Nullable String selectedTab) { } }); spne.setContinuousLayout(true); - spne.setDividerLocation(0.3); + spne.setDividerLocation(150); spne.setDividerSize(2); - spne.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + spne.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Theme.current().getAltBackgroundColor())); add("Center", spne); - sections.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + sections.setBackground(Theme.current().getBackgroundColor()); ComponentUtils.deriveFont(sections, 13); JButton ok = L10N.button("dialog.preferences.save"); diff --git a/src/main/java/net/mcreator/ui/dialogs/preferences/ThemesPanel.java b/src/main/java/net/mcreator/ui/dialogs/preferences/ThemesPanel.java index dcba7a58950..abafa1f6b83 100644 --- a/src/main/java/net/mcreator/ui/dialogs/preferences/ThemesPanel.java +++ b/src/main/java/net/mcreator/ui/dialogs/preferences/ThemesPanel.java @@ -20,11 +20,11 @@ package net.mcreator.ui.dialogs.preferences; import net.mcreator.preferences.PreferencesManager; -import net.mcreator.themes.Theme; -import net.mcreator.themes.ThemeLoader; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.laf.themes.ThemeLoader; import javax.swing.*; import java.awt.*; @@ -80,7 +80,7 @@ static class ThemesListCellRenderer extends JLabel implements ListCellRenderer list, Theme value, int index, boolean isSelected, boolean cellHasFocus) { - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setBackground(Theme.current().getForegroundColor()); setOpaque(false); diff --git a/src/main/java/net/mcreator/ui/dialogs/tools/ArmorPackMakerTool.java b/src/main/java/net/mcreator/ui/dialogs/tools/ArmorPackMakerTool.java index 597ad3baa84..409d2e1d790 100644 --- a/src/main/java/net/mcreator/ui/dialogs/tools/ArmorPackMakerTool.java +++ b/src/main/java/net/mcreator/ui/dialogs/tools/ArmorPackMakerTool.java @@ -34,6 +34,7 @@ import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.MCItemHolder; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; @@ -61,14 +62,14 @@ private static void open(MCreator mcreator) { dialog.add("North", PanelUtils.centerInPanel(L10N.label("dialog.tools.armor_pack_info"))); - JPanel props = new JPanel(new GridLayout(4, 2, 5, 5)); + JPanel props = new JPanel(new GridLayout(4, 2, 5, 2)); VTextField name = new VTextField(25); JColor color = new JColor(mcreator, false, false); JSpinner power = new JSpinner(new SpinnerNumberModel(1, 0.1, 10, 0.1)); MCItemHolder base = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); - color.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + color.setColor(Theme.current().getInterfaceAccentColor()); name.enableRealtimeValidation(); props.add(L10N.label("dialog.tools.armor_pack_base_item")); @@ -103,9 +104,9 @@ private static void open(MCreator mcreator) { dialog.add("Center", PanelUtils.centerInPanel(props)); JButton ok = L10N.button("dialog.tools.armor_pack_create"); - JButton canecel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); - canecel.addActionListener(e -> dialog.setVisible(false)); - dialog.add("South", PanelUtils.join(ok, canecel)); + JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); + cancel.addActionListener(e -> dialog.setVisible(false)); + dialog.add("South", PanelUtils.join(ok, cancel)); ok.addActionListener(e -> { if (name.getValidationStatus().getValidationResultType() != Validator.ValidationResultType.ERROR @@ -113,14 +114,14 @@ private static void open(MCreator mcreator) { dialog.setCursor(new Cursor(Cursor.WAIT_CURSOR)); addArmorPackToWorkspace(mcreator, mcreator.getWorkspace(), name.getText(), base.getBlock(), color.getColor(), (Double) power.getValue()); - mcreator.mv.updateMods(); + mcreator.mv.reloadElementsInCurrentTab(); dialog.setCursor(Cursor.getDefaultCursor()); dialog.setVisible(false); } }); dialog.getRootPane().setDefaultButton(ok); - dialog.setSize(600, 280); + dialog.setSize(600, 290); dialog.setLocationRelativeTo(mcreator); dialog.setVisible(true); } @@ -132,9 +133,7 @@ static void addArmorPackToWorkspace(MCreator mcreator, Workspace workspace, Stri return; // select folder the mod pack should be in - FolderElement folder = null; - if (!mcreator.mv.currentFolder.equals(mcreator.getWorkspace().getFoldersRoot())) - folder = mcreator.mv.currentFolder; + FolderElement folder = mcreator.mv.currentFolder; // generate armor textures ArmorImageMakerView.generateArmorImages(workspace, name.toLowerCase(Locale.ENGLISH), "Standard", color, true); diff --git a/src/main/java/net/mcreator/ui/dialogs/tools/InjectTagsTool.java b/src/main/java/net/mcreator/ui/dialogs/tools/InjectTagsTool.java index ad7c8e6be96..21e56a2f0f3 100644 --- a/src/main/java/net/mcreator/ui/dialogs/tools/InjectTagsTool.java +++ b/src/main/java/net/mcreator/ui/dialogs/tools/InjectTagsTool.java @@ -59,9 +59,9 @@ private static void open(MCreator mcreator) { dialog.add("Center", scrollPane); JButton ok = L10N.button("dialog.tools.inject_tags.confirm"); - JButton canecel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); - canecel.addActionListener(e -> dialog.setVisible(false)); - dialog.add("South", PanelUtils.join(ok, canecel)); + JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); + cancel.addActionListener(e -> dialog.setVisible(false)); + dialog.add("South", PanelUtils.join(ok, cancel)); List> callables = new ArrayList<>(); @@ -108,10 +108,22 @@ private static void open(MCreator mcreator) { callables.add(addTag(mcreator, props, "tick", "minecraft", "Functions", false)); callables.add(addTag(mcreator, props, "load", "minecraft", "Functions", false)); + callables.add(addTag(mcreator, props, "is_drowning", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "is_explosion", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "is_fall", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "is_fire", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "is_freezing", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "is_projectile", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "bypasses_armor", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "bypasses_cooldown", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "bypasses_effects", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "bypasses_enchantments", "minecraft", "Damage types", false)); + callables.add(addTag(mcreator, props, "bypasses_shield", "minecraft", "Damage types", false)); + ok.addActionListener(e -> { dialog.setCursor(new Cursor(Cursor.WAIT_CURSOR)); callables.forEach(c -> c.accept(false)); - mcreator.mv.updateMods(); + mcreator.mv.reloadElementsInCurrentTab(); dialog.setCursor(Cursor.getDefaultCursor()); dialog.setVisible(false); }); @@ -124,13 +136,13 @@ private static void open(MCreator mcreator) { private static Consumer addTag(MCreator mcreator, JPanel panel, String name, String namespace, String type, boolean checked) { - boolean existing = mcreator.getWorkspace().getModElementByName(getNameForTag(name, type)) != null; + boolean existing = mcreator.getWorkspace().containsModElement(getNameForTag(name, type)); JCheckBox box = new JCheckBox( "" + namespace + ":" + name + (existing ? (" -> " + getNameForTag(name, type)) : "") + "
          " + L10N.t( - "dialog.tools.inject_tags.tag." + type.toLowerCase(Locale.ENGLISH) + "." + namespace + "." - + name)); + "dialog.tools.inject_tags.tag." + type.toLowerCase(Locale.ENGLISH).replace(' ', '_') + "." + + namespace + "." + name)); box.setSelected(checked); JLabel icon = new JLabel(); @@ -144,6 +156,8 @@ private static Consumer addTag(MCreator mcreator, JPanel panel, String icon.setIcon(new ImageIcon(ImageUtils.resizeAA(ModElementType.LIVINGENTITY.getIcon().getImage(), 32))); case "Biomes" -> icon.setIcon(new ImageIcon(ImageUtils.resizeAA(ModElementType.BIOME.getIcon().getImage(), 32))); + case "Damage types" -> + icon.setIcon(new ImageIcon(ImageUtils.resizeAA(ModElementType.DAMAGETYPE.getIcon().getImage(), 32))); } panel.add(PanelUtils.centerAndEastElement(box, icon)); @@ -161,14 +175,15 @@ private static String getNameForTag(String name, String type) { if (name.endsWith("s")) name = name.substring(0, name.length() - 1); - return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name.replace("_blocks", "")) + type; + return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name.replace("_blocks", "")) + + ("Damage types".equals(type) ? "DamageTypes" : type); } private static void injectTagToWorkspace(MCreator mcreator, String name, String namespace, String type) { String modElementName = getNameForTag(name, type); Workspace workspace = mcreator.getWorkspace(); - if (workspace.getModElementByName(modElementName) == null) { + if (!workspace.containsModElement(modElementName)) { Tag tag = new Tag(new ModElement(workspace, modElementName, ModElementType.TAG)); tag.name = name; tag.namespace = namespace; @@ -179,6 +194,7 @@ private static void injectTagToWorkspace(MCreator mcreator, String name, String tag.functions = Collections.emptyList(); tag.entities = Collections.emptyList(); tag.biomes = Collections.emptyList(); + tag.damageTypes = Collections.emptyList(); workspace.getModElementManager().storeModElementPicture(tag); workspace.addModElement(tag.getModElement()); diff --git a/src/main/java/net/mcreator/ui/dialogs/tools/MaterialPackMakerTool.java b/src/main/java/net/mcreator/ui/dialogs/tools/MaterialPackMakerTool.java index fe4d93da748..e30d6c2ab3e 100644 --- a/src/main/java/net/mcreator/ui/dialogs/tools/MaterialPackMakerTool.java +++ b/src/main/java/net/mcreator/ui/dialogs/tools/MaterialPackMakerTool.java @@ -30,6 +30,7 @@ import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.validators.ModElementNameValidator; @@ -49,14 +50,14 @@ private static void open(MCreator mcreator) { dialog.add("North", PanelUtils.centerInPanel(L10N.label("dialog.tools.material_pack_info"))); - JPanel props = new JPanel(new GridLayout(4, 2, 5, 5)); + JPanel props = new JPanel(new GridLayout(4, 2, 5, 2)); VTextField name = new VTextField(25); JColor color = new JColor(mcreator, false, false); JSpinner power = new JSpinner(new SpinnerNumberModel(1, 0.1, 10, 0.1)); JComboBox type = new JComboBox<>(new String[] { "Gem based", "Dust based", "Ingot based" }); - color.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + color.setColor(Theme.current().getInterfaceAccentColor()); name.enableRealtimeValidation(); props.add(L10N.label("dialog.tools.material_pack_name")); @@ -76,9 +77,9 @@ private static void open(MCreator mcreator) { dialog.add("Center", PanelUtils.centerInPanel(props)); JButton ok = L10N.button("dialog.tools.material_pack_create"); - JButton canecel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); - canecel.addActionListener(e -> dialog.setVisible(false)); - dialog.add("South", PanelUtils.join(ok, canecel)); + JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); + cancel.addActionListener(e -> dialog.setVisible(false)); + dialog.add("South", PanelUtils.join(ok, cancel)); ok.addActionListener(e -> { if (name.getValidationStatus().getValidationResultType() != Validator.ValidationResultType.ERROR) { @@ -86,14 +87,14 @@ private static void open(MCreator mcreator) { addMaterialPackToWorkspace(mcreator, mcreator.getWorkspace(), name.getText(), (String) Objects.requireNonNull(type.getSelectedItem()), color.getColor(), (Double) power.getValue()); - mcreator.mv.updateMods(); + mcreator.mv.reloadElementsInCurrentTab(); dialog.setCursor(Cursor.getDefaultCursor()); dialog.setVisible(false); } }); dialog.getRootPane().setDefaultButton(ok); - dialog.setSize(600, 280); + dialog.setSize(600, 300); dialog.setLocationRelativeTo(mcreator); dialog.setVisible(true); } diff --git a/src/main/java/net/mcreator/ui/dialogs/tools/OrePackMakerTool.java b/src/main/java/net/mcreator/ui/dialogs/tools/OrePackMakerTool.java index 3e55a72c333..1cfc9d4b64b 100644 --- a/src/main/java/net/mcreator/ui/dialogs/tools/OrePackMakerTool.java +++ b/src/main/java/net/mcreator/ui/dialogs/tools/OrePackMakerTool.java @@ -37,6 +37,7 @@ import net.mcreator.ui.init.ImageMakerTexturesCache; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.validators.ModElementNameValidator; @@ -65,14 +66,14 @@ private static void open(MCreator mcreator) { dialog.add("North", PanelUtils.centerInPanel(L10N.label("dialog.tools.ore_pack_info"))); - JPanel props = new JPanel(new GridLayout(4, 2, 5, 5)); + JPanel props = new JPanel(new GridLayout(4, 2, 5, 2)); VTextField name = new VTextField(25); JColor color = new JColor(mcreator, false, false); JSpinner power = new JSpinner(new SpinnerNumberModel(1, 0.1, 10, 0.1)); JComboBox type = new JComboBox<>(new String[] { "Gem based", "Dust based", "Ingot based" }); - color.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + color.setColor(Theme.current().getInterfaceAccentColor()); name.enableRealtimeValidation(); props.add(L10N.label("dialog.tools.ore_pack_name")); @@ -92,9 +93,9 @@ private static void open(MCreator mcreator) { dialog.add("Center", PanelUtils.centerInPanel(props)); JButton ok = L10N.button("dialog.tools.ore_pack_create"); - JButton canecel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); - canecel.addActionListener(e -> dialog.setVisible(false)); - dialog.add("South", PanelUtils.join(ok, canecel)); + JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); + cancel.addActionListener(e -> dialog.setVisible(false)); + dialog.add("South", PanelUtils.join(ok, cancel)); ok.addActionListener(e -> { if (name.getValidationStatus().getValidationResultType() != Validator.ValidationResultType.ERROR) { @@ -102,14 +103,14 @@ private static void open(MCreator mcreator) { addOrePackToWorkspace(mcreator, mcreator.getWorkspace(), name.getText(), (String) Objects.requireNonNull(type.getSelectedItem()), color.getColor(), (Double) power.getValue()); - mcreator.mv.updateMods(); + mcreator.mv.reloadElementsInCurrentTab(); dialog.setCursor(Cursor.getDefaultCursor()); dialog.setVisible(false); } }); dialog.getRootPane().setDefaultButton(ok); - dialog.setSize(600, 260); + dialog.setSize(600, 280); dialog.setLocationRelativeTo(mcreator); dialog.setVisible(true); } @@ -130,9 +131,7 @@ static MItemBlock addOrePackToWorkspace(MCreator mcreator, Workspace workspace, return null; // select folder the mod pack should be in - FolderElement folder = null; - if (!mcreator.mv.currentFolder.equals(mcreator.getWorkspace().getFoldersRoot())) - folder = mcreator.mv.currentFolder; + FolderElement folder = mcreator.mv.currentFolder; // first we generate ore texture ImageIcon ore = ImageUtils.drawOver( diff --git a/src/main/java/net/mcreator/ui/dialogs/tools/PackMakerToolUtils.java b/src/main/java/net/mcreator/ui/dialogs/tools/PackMakerToolUtils.java index 8d60c60f297..e74d3d44b3d 100644 --- a/src/main/java/net/mcreator/ui/dialogs/tools/PackMakerToolUtils.java +++ b/src/main/java/net/mcreator/ui/dialogs/tools/PackMakerToolUtils.java @@ -17,25 +17,6 @@ * along with this program. If not, see . */ -/* - * MCreator (https://mcreator.net/) - * Copyright (C) 2012-2020, Pylo - * Copyright (C) 2020-2023, Pylo, opensource contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package net.mcreator.ui.dialogs.tools; import net.mcreator.element.GeneratableElement; @@ -46,7 +27,7 @@ public class PackMakerToolUtils { public static boolean checkIfNamesAvailable(Workspace workspace, String... names) { for (String name : names) { - if (workspace.getModElementByName(name) != null) { + if (workspace.containsModElement(name)) { return false; } } @@ -56,7 +37,7 @@ public static boolean checkIfNamesAvailable(Workspace workspace, String... names public static void addGeneratableElementToWorkspace(Workspace workspace, FolderElement folder, GeneratableElement generatableElement) { - if (workspace.getModElementByName(generatableElement.getModElement().getName()) == null) { + if (!workspace.containsModElement(generatableElement.getModElement().getName())) { generatableElement.getModElement().setParentFolder(folder); workspace.getModElementManager().storeModElementPicture(generatableElement); workspace.getWorkspace().addModElement(generatableElement.getModElement()); diff --git a/src/main/java/net/mcreator/ui/dialogs/tools/ToolPackMakerTool.java b/src/main/java/net/mcreator/ui/dialogs/tools/ToolPackMakerTool.java index 4a09b76f61f..cfd1b957579 100644 --- a/src/main/java/net/mcreator/ui/dialogs/tools/ToolPackMakerTool.java +++ b/src/main/java/net/mcreator/ui/dialogs/tools/ToolPackMakerTool.java @@ -38,6 +38,7 @@ import net.mcreator.ui.init.ImageMakerTexturesCache; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.MCItemHolder; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; @@ -65,14 +66,14 @@ private static void open(MCreator mcreator) { dialog.add("North", PanelUtils.centerInPanel(L10N.label("dialog.tools.tool_pack_info"))); - JPanel props = new JPanel(new GridLayout(4, 2, 5, 5)); + JPanel props = new JPanel(new GridLayout(4, 2, 5, 2)); VTextField name = new VTextField(25); JColor color = new JColor(mcreator, false, false); JSpinner power = new JSpinner(new SpinnerNumberModel(1, 0.1, 10, 0.1)); MCItemHolder base = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); - color.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + color.setColor(Theme.current().getInterfaceAccentColor()); name.enableRealtimeValidation(); props.add(L10N.label("dialog.tools.tool_pack_base_item")); @@ -108,9 +109,9 @@ private static void open(MCreator mcreator) { dialog.add("Center", PanelUtils.centerInPanel(props)); JButton ok = L10N.button("dialog.tools.tool_pack_create"); - JButton canecel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); - canecel.addActionListener(e -> dialog.setVisible(false)); - dialog.add("South", PanelUtils.join(ok, canecel)); + JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); + cancel.addActionListener(e -> dialog.setVisible(false)); + dialog.add("South", PanelUtils.join(ok, cancel)); ok.addActionListener(e -> { if (name.getValidationStatus().getValidationResultType() != Validator.ValidationResultType.ERROR @@ -118,14 +119,14 @@ private static void open(MCreator mcreator) { dialog.setCursor(new Cursor(Cursor.WAIT_CURSOR)); addToolPackToWorkspace(mcreator, mcreator.getWorkspace(), name.getText(), base.getBlock(), color.getColor(), (Double) power.getValue()); - mcreator.mv.updateMods(); + mcreator.mv.reloadElementsInCurrentTab(); dialog.setCursor(Cursor.getDefaultCursor()); dialog.setVisible(false); } }); dialog.getRootPane().setDefaultButton(ok); - dialog.setSize(600, 280); + dialog.setSize(600, 290); dialog.setLocationRelativeTo(mcreator); dialog.setVisible(true); } @@ -138,9 +139,7 @@ static void addToolPackToWorkspace(MCreator mcreator, Workspace workspace, Strin return; // select folder the mod pack should be in - FolderElement folder = null; - if (!mcreator.mv.currentFolder.equals(mcreator.getWorkspace().getFoldersRoot())) - folder = mcreator.mv.currentFolder; + FolderElement folder = mcreator.mv.currentFolder; // first we generate pickaxe texture ImageIcon pickaxe = ImageUtils.drawOver(ImageMakerTexturesCache.CACHE.get( diff --git a/src/main/java/net/mcreator/ui/dialogs/tools/WoodPackMakerTool.java b/src/main/java/net/mcreator/ui/dialogs/tools/WoodPackMakerTool.java index 1e049da79ed..a19066c792e 100644 --- a/src/main/java/net/mcreator/ui/dialogs/tools/WoodPackMakerTool.java +++ b/src/main/java/net/mcreator/ui/dialogs/tools/WoodPackMakerTool.java @@ -25,7 +25,6 @@ import net.mcreator.element.parts.TabEntry; import net.mcreator.element.types.Block; import net.mcreator.element.types.Recipe; -import net.mcreator.element.types.Tag; import net.mcreator.generator.GeneratorConfiguration; import net.mcreator.generator.GeneratorStats; import net.mcreator.io.FileIO; @@ -52,7 +51,6 @@ import javax.swing.*; import java.awt.*; -import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; @@ -66,7 +64,7 @@ private static void open(MCreator mcreator) { dialog.add("North", PanelUtils.centerInPanel(L10N.label("dialog.tools.wood_pack_info"))); - JPanel props = new JPanel(new GridLayout(4, 2, 5, 5)); + JPanel props = new JPanel(new GridLayout(4, 2, 5, 2)); VTextField name = new VTextField(25); JColor color = new JColor(mcreator, false, false); @@ -88,23 +86,23 @@ private static void open(MCreator mcreator) { dialog.add("Center", PanelUtils.centerInPanel(props)); JButton ok = L10N.button("dialog.tools.wood_pack_create"); - JButton canecel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); - canecel.addActionListener(e -> dialog.setVisible(false)); - dialog.add("South", PanelUtils.join(ok, canecel)); + JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); + cancel.addActionListener(e -> dialog.setVisible(false)); + dialog.add("South", PanelUtils.join(ok, cancel)); ok.addActionListener(e -> { if (name.getValidationStatus().getValidationResultType() != Validator.ValidationResultType.ERROR) { dialog.setCursor(new Cursor(Cursor.WAIT_CURSOR)); addWoodPackToWorkspace(mcreator, mcreator.getWorkspace(), name.getText(), color.getColor(), (Double) power.getValue()); - mcreator.mv.updateMods(); + mcreator.mv.reloadElementsInCurrentTab(); dialog.setCursor(Cursor.getDefaultCursor()); dialog.setVisible(false); } }); dialog.getRootPane().setDefaultButton(ok); - dialog.setSize(600, 250); + dialog.setSize(600, 260); dialog.setLocationRelativeTo(mcreator); dialog.setVisible(true); } @@ -113,15 +111,13 @@ private static void addWoodPackToWorkspace(MCreator mcreator, Workspace workspac double factor) { if (!PackMakerToolUtils.checkIfNamesAvailable(workspace, name + "Wood", name + "Log", name + "Planks", name + "Leaves", name + "Stairs", name + "Slab", name + "Fence", name + "FenceGate", - name + "PressurePlate", name + "Button", name + "ItemsTag", name + "WoodRecipe", name + "PlanksRecipe", - name + "StairsRecipe", name + "SlabRecipe", name + "FenceRecipe", name + "FenceGateRecipe", - name + "PressurePlateRecipe", name + "ButtonRecipe", name + "StickRecipe")) + name + "PressurePlate", name + "Button", name + "WoodRecipe", name + "PlanksLogRecipe", + name + "PlanksWoodRecipe", name + "StairsRecipe", name + "SlabRecipe", name + "FenceRecipe", + name + "FenceGateRecipe", name + "PressurePlateRecipe", name + "ButtonRecipe", name + "StickRecipe")) return; // select folder the mod pack should be in - FolderElement folder = null; - if (!mcreator.mv.currentFolder.equals(mcreator.getWorkspace().getFoldersRoot())) - folder = mcreator.mv.currentFolder; + FolderElement folder = mcreator.mv.currentFolder; // first we generate wood texture ImageIcon wood = ImageUtils.colorize(ImageMakerTexturesCache.CACHE.get(new ResourcePointer( @@ -331,18 +327,6 @@ private static void addWoodPackToWorkspace(MCreator mcreator, Workspace workspac buttonBlock.creativeTab = new TabEntry(workspace, "BUILDING_BLOCKS"); PackMakerToolUtils.addGeneratableElementToWorkspace(workspace, folder, buttonBlock); - //Tag - Items - //Mainly used for recipes and loot tables - Tag woodItemTag = (Tag) ModElementType.TAG.getModElementGUI(mcreator, - new ModElement(workspace, name + "ItemsTag", ModElementType.TAG), false).getElementFromGUI(); - woodItemTag.namespace = "forge"; - woodItemTag.name = RegistryNameFixer.fix(name) + "_log"; - woodItemTag.type = "Items"; - woodItemTag.items = new ArrayList<>(); - woodItemTag.items.add(new MItemBlock(workspace, "CUSTOM:" + woodBlock.getModElement().getName())); - woodItemTag.items.add(new MItemBlock(workspace, "CUSTOM:" + logBlock.getModElement().getName())); - PackMakerToolUtils.addGeneratableElementToWorkspace(workspace, folder, woodItemTag); - //Recipes Recipe woodRecipe = (Recipe) ModElementType.RECIPE.getModElementGUI(mcreator, new ModElement(workspace, name + "WoodRecipe", ModElementType.RECIPE), false).getElementFromGUI(); @@ -356,16 +340,25 @@ private static void addWoodPackToWorkspace(MCreator mcreator, Workspace workspac woodRecipe.recipeRetstackSize = 3; PackMakerToolUtils.addGeneratableElementToWorkspace(workspace, folder, woodRecipe); - Recipe planksRecipe = (Recipe) ModElementType.RECIPE.getModElementGUI(mcreator, - new ModElement(workspace, name + "PlanksRecipe", ModElementType.RECIPE), false).getElementFromGUI(); - planksRecipe.craftingBookCategory = "BUILDING"; - planksRecipe.group = "planks"; - planksRecipe.recipeSlots[4] = new MItemBlock(workspace, - "TAG:" + woodItemTag.namespace + ":" + woodItemTag.name); - planksRecipe.recipeReturnStack = new MItemBlock(workspace, "CUSTOM:" + name + "Planks"); - planksRecipe.recipeShapeless = true; - planksRecipe.recipeRetstackSize = 4; - PackMakerToolUtils.addGeneratableElementToWorkspace(workspace, folder, planksRecipe); + Recipe planksLogRecipe = (Recipe) ModElementType.RECIPE.getModElementGUI(mcreator, + new ModElement(workspace, name + "PlanksLogRecipe", ModElementType.RECIPE), false).getElementFromGUI(); + planksLogRecipe.craftingBookCategory = "BUILDING"; + planksLogRecipe.group = "planks"; + planksLogRecipe.recipeSlots[4] = new MItemBlock(workspace, "CUSTOM:" + logBlock.getModElement().getName()); + planksLogRecipe.recipeReturnStack = new MItemBlock(workspace, "CUSTOM:" + name + "Planks"); + planksLogRecipe.recipeShapeless = true; + planksLogRecipe.recipeRetstackSize = 4; + PackMakerToolUtils.addGeneratableElementToWorkspace(workspace, folder, planksLogRecipe); + + Recipe planksWoodRecipe = (Recipe) ModElementType.RECIPE.getModElementGUI(mcreator, + new ModElement(workspace, name + "PlanksWoodRecipe", ModElementType.RECIPE), false).getElementFromGUI(); + planksWoodRecipe.craftingBookCategory = "BUILDING"; + planksWoodRecipe.group = "planks"; + planksWoodRecipe.recipeSlots[4] = new MItemBlock(workspace, "CUSTOM:" + woodBlock.getModElement().getName()); + planksWoodRecipe.recipeReturnStack = new MItemBlock(workspace, "CUSTOM:" + name + "Planks"); + planksWoodRecipe.recipeShapeless = true; + planksWoodRecipe.recipeRetstackSize = 4; + PackMakerToolUtils.addGeneratableElementToWorkspace(workspace, folder, planksWoodRecipe); Recipe stairsRecipe = (Recipe) ModElementType.RECIPE.getModElementGUI(mcreator, new ModElement(workspace, name + "StairsRecipe", ModElementType.RECIPE), false).getElementFromGUI(); @@ -460,8 +453,6 @@ public static BasicAction getAction(ActionRegistry actionRegistry) { return gc.getGeneratorStats().getModElementTypeCoverageInfo().get(ModElementType.RECIPE) != GeneratorStats.CoverageStatus.NONE && gc.getGeneratorStats().getModElementTypeCoverageInfo().get(ModElementType.BLOCK) - != GeneratorStats.CoverageStatus.NONE - && gc.getGeneratorStats().getModElementTypeCoverageInfo().get(ModElementType.TAG) != GeneratorStats.CoverageStatus.NONE; } }.setIcon(UIRES.get("16px.woodpack")); diff --git a/src/main/java/net/mcreator/ui/dialogs/workspace/GeneratorSelector.java b/src/main/java/net/mcreator/ui/dialogs/workspace/GeneratorSelector.java index 1c2eef0ad9b..d98a63273aa 100644 --- a/src/main/java/net/mcreator/ui/dialogs/workspace/GeneratorSelector.java +++ b/src/main/java/net/mcreator/ui/dialogs/workspace/GeneratorSelector.java @@ -30,6 +30,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.annotation.Nullable; import javax.swing.*; @@ -232,11 +233,11 @@ private static void addStatsBar(String label, String registry, JPanel supportedE bar.setUI(new BasicProgressBarUI() { @Override protected Color getSelectionBackground() { - return (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"); + return Theme.current().getForegroundColor(); } @Override protected Color getSelectionForeground() { - return (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"); + return Theme.current().getSecondAltBackgroundColor(); } }); @@ -249,7 +250,7 @@ private static void addStatsBar(String label, String registry, JPanel supportedE else if (bar.getValue() < 100) bar.setForeground(new Color(0xF5F984)); else - bar.setForeground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + bar.setForeground(Theme.current().getInterfaceAccentColor()); supportedElements.add(new JLabel(label + ": ")); supportedElements.add(bar); diff --git a/src/main/java/net/mcreator/ui/dialogs/workspace/NewWorkspaceDialog.java b/src/main/java/net/mcreator/ui/dialogs/workspace/NewWorkspaceDialog.java index ff7f2e2affb..9313633a40e 100644 --- a/src/main/java/net/mcreator/ui/dialogs/workspace/NewWorkspaceDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/workspace/NewWorkspaceDialog.java @@ -29,6 +29,7 @@ import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.workspace.selector.WorkspaceSelector; import net.mcreator.util.DesktopUtils; @@ -116,8 +117,7 @@ public NewWorkspaceDialog(Window w) { workspacePanels.add("addon", PanelUtils.pullElementUp(addonWorkspacePanel)); JComponent center = PanelUtils.centerInPanel(workspacePanels); - center.setBorder( - BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + center.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Theme.current().getAltBackgroundColor())); add("Center", center); @@ -135,7 +135,7 @@ public NewWorkspaceDialog(Window w) { JToggleButton forge = new JToggleButton(L10N.t("dialog.new_workspace.forge.toggle"), UIRES.get("16px.forge")); forge.setHorizontalAlignment(SwingConstants.LEFT); forge.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(8, 8, 8, 30))); buttonGroup.add(forge); forge.addActionListener(e -> { @@ -147,7 +147,7 @@ public NewWorkspaceDialog(Window w) { UIRES.get("16px.neoforge")); neoforge.setHorizontalAlignment(SwingConstants.LEFT); neoforge.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(8, 8, 8, 30))); buttonGroup.add(neoforge); neoforge.addActionListener(e -> { @@ -159,7 +159,7 @@ public NewWorkspaceDialog(Window w) { UIRES.get("16px.fabric")); fabric.setHorizontalAlignment(SwingConstants.LEFT); fabric.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(8, 8, 8, 30))); buttonGroup.add(fabric); fabric.addActionListener(e -> { @@ -170,7 +170,7 @@ public NewWorkspaceDialog(Window w) { JToggleButton quilt = new JToggleButton(L10N.t("dialog.new_workspace.quilt.toggle"), UIRES.get("16px.quilt")); quilt.setHorizontalAlignment(SwingConstants.LEFT); quilt.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(8, 8, 8, 30))); buttonGroup.add(quilt); quilt.addActionListener(e -> { @@ -182,7 +182,7 @@ public NewWorkspaceDialog(Window w) { UIRES.get("16px.spigot")); spigot.setHorizontalAlignment(SwingConstants.LEFT); spigot.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(8, 8, 8, 30))); buttonGroup.add(spigot); spigot.addActionListener(e -> { @@ -194,7 +194,7 @@ public NewWorkspaceDialog(Window w) { UIRES.get("16px.datapack")); datapack.setHorizontalAlignment(SwingConstants.LEFT); datapack.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(8, 8, 8, 30))); buttonGroup.add(datapack); datapack.addActionListener(e -> { @@ -205,7 +205,7 @@ public NewWorkspaceDialog(Window w) { JToggleButton addon = new JToggleButton(L10N.t("dialog.new_workspace.addon.toggle"), UIRES.get("16px.bedrock")); addon.setHorizontalAlignment(SwingConstants.LEFT); addon.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(8, 8, 8, 30))); buttonGroup.add(addon); addon.addActionListener(e -> { @@ -215,7 +215,7 @@ public NewWorkspaceDialog(Window w) { JLabel wt = L10N.label("dialog.new_workspace.type"); ComponentUtils.deriveFont(wt, 10); - wt.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + wt.setForeground(Theme.current().getAltForegroundColor()); wt.setBorder(BorderFactory.createEmptyBorder(8, 8, 3, 30)); workspaceType.add(wt); @@ -263,8 +263,7 @@ public NewWorkspaceDialog(Window w) { } JComponent wrapPan = PanelUtils.northAndCenterElement(workspaceType, new JEmptyBox()); - wrapPan.setBorder( - BorderFactory.createMatteBorder(1, 0, 0, 1, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + wrapPan.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 1, Theme.current().getAltBackgroundColor())); add("West", wrapPan); getRootPane().setDefaultButton(ok); diff --git a/src/main/java/net/mcreator/ui/dialogs/workspace/WorkspaceDialogs.java b/src/main/java/net/mcreator/ui/dialogs/workspace/WorkspaceDialogs.java index 7913a139a80..228887b8ac3 100644 --- a/src/main/java/net/mcreator/ui/dialogs/workspace/WorkspaceDialogs.java +++ b/src/main/java/net/mcreator/ui/dialogs/workspace/WorkspaceDialogs.java @@ -22,8 +22,8 @@ import net.mcreator.generator.GeneratorConfiguration; import net.mcreator.generator.GeneratorFlavor; import net.mcreator.java.JavaConventions; -import net.mcreator.minecraft.api.ModAPIImplementation; -import net.mcreator.minecraft.api.ModAPIManager; +import net.mcreator.plugin.modapis.ModAPIImplementation; +import net.mcreator.plugin.modapis.ModAPIManager; import net.mcreator.ui.MCreator; import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.component.JEmptyBox; @@ -33,6 +33,7 @@ import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.ValidationGroup; import net.mcreator.ui.validation.Validator; @@ -64,10 +65,11 @@ import java.lang.module.ModuleDescriptor; import java.util.List; import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; public class WorkspaceDialogs { - public static WorkspaceSettingsChange workspaceSettings(MCreator mcreator, Workspace in) { + @Nullable public static WorkspaceSettingsChange workspaceSettings(MCreator mcreator, Workspace in) { MCreatorDialog workspaceDialog = new MCreatorDialog(mcreator, L10N.t("dialog.workspace_settings.title"), true); WorkspaceDialogPanel wdp = new WorkspaceDialogPanel(workspaceDialog, in); @@ -82,32 +84,51 @@ public static WorkspaceSettingsChange workspaceSettings(MCreator mcreator, Works else showErrorsMessage(mcreator, new AggregatedValidationResult(wdp.validationGroup)); }); - workspaceDialog.setClosable(false); + + AtomicBoolean canceled = new AtomicBoolean(false); + + JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); + buttons.add(cancel); + cancel.addActionListener(e -> { + canceled.set(true); + workspaceDialog.setVisible(false); + }); workspaceDialog.getRootPane().setDefaultButton(ok); workspaceDialog.pack(); workspaceDialog.setSize(workspaceDialog.getBounds().width, 620); workspaceDialog.setLocationRelativeTo(mcreator); + + workspaceDialog.addWindowListener(new java.awt.event.WindowAdapter() { + @Override public void windowClosing(java.awt.event.WindowEvent windowEvent) { + canceled.set(true); + } + }); + workspaceDialog.setVisible(true); - WorkspaceSettings oldsettings = in.getWorkspaceSettings(); - WorkspaceSettings newsettings = wdp.getWorkspaceSettings(in); - - WorkspaceSettingsChange change = new WorkspaceSettingsChange(newsettings, oldsettings); - - if (change.refactorNeeded()) { - String[] options = new String[] { L10N.t("dialog.workspace_settings.refactor.yes"), - L10N.t("dialog.workspace_settings.refactor.no") }; - int option = JOptionPane.showOptionDialog(null, change.generatorFlavorChanged ? - L10N.t("dialog.workspace_settings.refactor.text_flavor_switch") : - L10N.t("dialog.workspace_settings.refactor.text"), - L10N.t("dialog.workspace_settings.refactor.title"), JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE, null, options, options[0]); - if (option == 1) - return new WorkspaceSettingsChange(oldsettings, null); - } + if (canceled.get()) { + return null; // no workspace setting change + } else { + WorkspaceSettings oldsettings = in.getWorkspaceSettings(); + WorkspaceSettings newsettings = wdp.getWorkspaceSettings(in); + + WorkspaceSettingsChange change = new WorkspaceSettingsChange(newsettings, oldsettings); + + if (change.refactorNeeded()) { + String[] options = new String[] { L10N.t("dialog.workspace_settings.refactor.yes"), + L10N.t("dialog.workspace_settings.refactor.no") }; + int option = JOptionPane.showOptionDialog(null, change.generatorFlavorChanged ? + L10N.t("dialog.workspace_settings.refactor.text_flavor_switch") : + L10N.t("dialog.workspace_settings.refactor.text"), + L10N.t("dialog.workspace_settings.refactor.title"), JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, null, options, options[0]); + if (option == 1) + return null; // no workspace setting change + } - return change; // we are working with existing workspace + return change; // we are working with existing workspace + } } static class WorkspaceDialogPanel extends JPanel { @@ -342,8 +363,7 @@ public void replace(DocumentFilter.FilterBypass fb, int offset, int length, Stri }); generator.remove(this.getComponent(0)); generator.setEnabled(false); - generator.setBorder( - BorderFactory.createMatteBorder(1, 1, 1, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + generator.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Theme.current().getAltBackgroundColor())); JButton selectGenerator = new JButton(UIRES.get("18px.edit")); selectGenerator.setMargin(new Insets(4, 4, 4, 4)); @@ -523,7 +543,7 @@ public void replace(DocumentFilter.FilterBypass fb, int offset, int length, Stri JPanel dependencySettings = new JPanel(new GridLayout(3, 2, 7, 5)); dependencySettings.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - dependencySettings.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + dependencySettings.setBackground(Theme.current().getAltBackgroundColor()); dependencySettings.add(L10N.label("dialog.workspace_settings.required_mods")); dependencySettings.add(requiredMods); dependencySettings.add(L10N.label("dialog.workspace_settings.dependencies")); diff --git a/src/main/java/net/mcreator/ui/dialogs/workspace/WorkspaceGeneratorSetupDialog.java b/src/main/java/net/mcreator/ui/dialogs/workspace/WorkspaceGeneratorSetupDialog.java index d09235bbd8e..777511e976c 100644 --- a/src/main/java/net/mcreator/ui/dialogs/workspace/WorkspaceGeneratorSetupDialog.java +++ b/src/main/java/net/mcreator/ui/dialogs/workspace/WorkspaceGeneratorSetupDialog.java @@ -45,45 +45,42 @@ public static void runSetup(final MCreator m, boolean showWebsite) { Thread t = new Thread(() -> { ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("dialog.setup_workspace.step.gradle_files")); - dial.addProgress(p1); + dial.addProgressUnit(p1); // setup workspacebase files WorkspaceGeneratorSetup.setupWorkspaceBase(m.getWorkspace()); - p1.ok(); - dial.refreshDisplay(); + p1.markStateOk(); if (m.getGeneratorConfiguration().getGradleTaskFor("setup_task") != null) { m.getGradleConsole().setGradleSetupTaskRunningFlag(true); ProgressDialog.ProgressUnit p20 = new ProgressDialog.ProgressUnit( L10N.t("dialog.setup_workspace.step.gradle_daemons")); - dial.addProgress(p20); + dial.addProgressUnit(p20); try { GradleDaemonUtils.stopAllDaemons(m.getWorkspace()); - p20.ok(); + p20.markStateOk(); } catch (IOException | InterruptedException e) { LOG.warn("Failed to stop Gradle daemons", e); - p20.warn(); + p20.markStateWarning(); } - dial.refreshDisplay(); ProgressDialog.ProgressUnit p2 = new ProgressDialog.ProgressUnit( L10N.t("dialog.setup_workspace.step.gradle_project")); - dial.addProgress(p2); + dial.addProgressUnit(p2); m.mcreatorTabs.showTab(m.consoleTab); m.getGradleConsole().exec(m.getGeneratorConfiguration().getGradleTaskFor("setup_task"), taskResult -> { m.getGradleConsole().setGradleSetupTaskRunningFlag(false); if (taskResult.statusByMCreator() == GradleErrorCodes.STATUS_OK) { - p2.ok(); - dial.refreshDisplay(); + p2.markStateOk(); finalizeTheSetup(m, dial); } else { - p2.err(); + p2.markStateError(); showSetupFailedMessage(dial, m, null); } @@ -103,31 +100,31 @@ public static void runSetup(final MCreator m, boolean showWebsite) { private static void finalizeTheSetup(MCreator m, ProgressDialog dial) { ProgressDialog.ProgressUnit p3 = new ProgressDialog.ProgressUnit( L10N.t("dialog.setup_workspace.step.importing_gradle")); - dial.addProgress(p3); + dial.addProgressUnit(p3); new Thread(() -> { try { m.getGenerator().reloadGradleCaches(); - p3.ok(); + p3.markStateOk(); ProgressDialog.ProgressUnit p4 = new ProgressDialog.ProgressUnit( L10N.t("dialog.setup_workspace.step.generating_base")); - dial.addProgress(p4); + dial.addProgressUnit(p4); try { m.getGenerator().generateBase(); } catch (Exception e) { // We catch any potential exceptions here to make sure generator setup does not fail due to base generation failure LOG.error("Failed to generate base", e); } - p4.ok(); + p4.markStateOk(); WorkspaceGeneratorSetup.completeSetup(m.getGenerator()); - dial.hideAll(); + dial.hideDialog(); m.mcreatorTabs.showTab(m.workspaceTab); } catch (Exception e) { LOG.error(L10N.t("dialog.setup_workspace.step.failed_gradle_caches"), e); - p3.err(); + p3.markStateError(); showSetupFailedMessage(dial, m, L10N.t("dialog.setup_workspace.step.failed_build_caches") + e.getMessage()); } @@ -135,7 +132,7 @@ private static void finalizeTheSetup(MCreator m, ProgressDialog dial) { } private static void showSetupFailedMessage(ProgressDialog dial, MCreator m, String s) { - dial.hideAll(); + dial.hideDialog(); Object[] options = { L10N.t("dialog.setup_workspace.step.workspace_setup_rerun"), L10N.t("dialog.setup_workspace.step.workspace_setup_openpref"), diff --git a/src/main/java/net/mcreator/ui/gradle/ConsoleSearchBar.java b/src/main/java/net/mcreator/ui/gradle/ConsoleSearchBar.java index 6a4e6364bd7..2e7a13c3f19 100644 --- a/src/main/java/net/mcreator/ui/gradle/ConsoleSearchBar.java +++ b/src/main/java/net/mcreator/ui/gradle/ConsoleSearchBar.java @@ -20,6 +20,7 @@ import net.mcreator.ui.component.ConsolePane; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -44,7 +45,7 @@ public class ConsoleSearchBar extends JToolBar { ConsoleSearchBar() { setFloatable(false); - setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + setBackground(Theme.current().getSecondAltBackgroundColor()); add(jtf1); add(Box.createHorizontalStrut(10)); @@ -53,10 +54,10 @@ public class ConsoleSearchBar extends JToolBar { add(results); jtf1.setMaximumSize(jtf1.getPreferredSize()); - jtf1.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + jtf1.setBackground(Theme.current().getAltBackgroundColor()); jtf1.setOpaque(true); - results.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + results.setForeground(Theme.current().getAltForegroundColor()); } public void reinstall(ConsolePane consolePane) { @@ -176,7 +177,7 @@ private void removeHighlights(Highlighter hilite) { private static class SearchResultHighlightPainter extends DefaultHighlighter.DefaultHighlightPainter { SearchResultHighlightPainter() { - super((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + super(Theme.current().getInterfaceAccentColor()); } } diff --git a/src/main/java/net/mcreator/ui/gradle/GradleConsole.java b/src/main/java/net/mcreator/ui/gradle/GradleConsole.java index 3cba90e48b6..911bd211784 100644 --- a/src/main/java/net/mcreator/ui/gradle/GradleConsole.java +++ b/src/main/java/net/mcreator/ui/gradle/GradleConsole.java @@ -37,6 +37,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.SlickDarkScrollBarUI; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.HtmlUtils; import net.mcreator.util.math.TimeUtils; import org.apache.logging.log4j.LogManager; @@ -140,17 +141,16 @@ public GradleConsole(MCreator ref) { JScrollPane aae = new JScrollPane(pan, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - aae.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), aae.getVerticalScrollBar())); + aae.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getSecondAltBackgroundColor(), + Theme.current().getBackgroundColor(), aae.getVerticalScrollBar())); aae.getVerticalScrollBar().setPreferredSize(new Dimension(7, 0)); - aae.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), aae.getHorizontalScrollBar())); + aae.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getSecondAltBackgroundColor(), + Theme.current().getBackgroundColor(), aae.getHorizontalScrollBar())); aae.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 7)); - aae.setBorder(BorderFactory.createMatteBorder(0, 10, 0, 0, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"))); - aae.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + aae.setBorder(BorderFactory.createMatteBorder(0, 10, 0, 0, Theme.current().getSecondAltBackgroundColor())); + aae.setBackground(Theme.current().getSecondAltBackgroundColor()); - holder.setBorder( - BorderFactory.createMatteBorder(0, 5, 0, 0, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"))); + holder.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 0, Theme.current().getSecondAltBackgroundColor())); searchBar.setVisible(false); @@ -172,7 +172,7 @@ public GradleConsole(MCreator ref) { JToolBar options = new JToolBar(null, SwingConstants.VERTICAL); options.setFloatable(false); - options.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + options.setBackground(Theme.current().getSecondAltBackgroundColor()); searchen.setToolTipText(L10N.t("dialog.gradle_console.search")); searchen.setCursor(new Cursor(Cursor.HAND_CURSOR)); @@ -248,7 +248,7 @@ public GradleConsole(MCreator ref) { holder.add("West", options); - holder.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + holder.setBackground(Theme.current().getSecondAltBackgroundColor()); add("Center", holder); searchen.addChangeListener(e -> searchBar.setVisible(searchen.isSelected())); @@ -310,9 +310,17 @@ public void exec(String command, @Nullable GradleTaskFinishedListener taskSpecif .getDeviceInfo().getOsName() + ", JVM " + ref.getApplication().getDeviceInfo().getJvmVersion() + ", JAVA_HOME: " + (java_home != null ? java_home : "Default (not set)") + ", started on: " + new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss").format(Calendar.getInstance().getTime()); - append(deviceInfo, new Color(127, 120, 120)); - append(" "); + append(deviceInfo, new Color(120, 120, 120)); taskOut.append(deviceInfo); + + if (!ref.getWorkspaceSettings().getMCreatorDependencies().isEmpty()) { + String apiInfo = "Loaded APIs: " + ref.getWorkspaceSettings().getMCreatorDependencies().stream() + .map(e -> e.split(":")[0]).collect(Collectors.joining(", ")); + append(apiInfo, new Color(120, 120, 120)); + taskOut.append(apiInfo); + } + + append(" "); } // reset mod problems @@ -566,7 +574,7 @@ private void taskComplete(int mcreatorGradleStatus) { listener -> listener.taskFinished(new GradleTaskResult("", mcreatorGradleStatus))); // reload mods view to display errors - ref.mv.updateMods(); + ref.mv.reloadElementsInCurrentTab(); } }); } @@ -597,7 +605,7 @@ public void cancelTask() { } public void append(String text) { - append(text, (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + append(text, Theme.current().getForegroundColor()); } private Color textAccent = null; @@ -606,7 +614,7 @@ private void appendAutoColor(String text) { pan.beginTransaction(); if (!text.isEmpty()) { - Color c = (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"); + Color c = Theme.current().getForegroundColor(); if (!text.endsWith("\n")) text = text + "\n"; @@ -682,7 +690,7 @@ else if (textAccent == null && bracketText.contains("/FATAL]")) StyleConstants.setFontSize(keyWord, 6); StyleConstants.setForeground(keyWord, c2); - StyleConstants.setBackground(keyWord, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + StyleConstants.setBackground(keyWord, Theme.current().getSecondAltBackgroundColor()); if (bracketText.matches("\\[(\\w{2}\\.)+\\w+/\\w+]:")) { pan.insertString(bracketText.replaceAll("(\\w{2}\\.)", ""), keyWord); @@ -730,7 +738,7 @@ private void appendErrorWithCodeLine(String text) { SimpleAttributeSet keyWord = new SimpleAttributeSet(); StyleConstants.setFontSize(keyWord, 9); StyleConstants.setForeground(keyWord, new Color(0xF98771)); - StyleConstants.setBackground(keyWord, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + StyleConstants.setBackground(keyWord, Theme.current().getSecondAltBackgroundColor()); pan.insertLink(err.trim(), err.trim(), othr, keyWord); } scrollToBottom(); @@ -750,7 +758,7 @@ private void appendErrorWithCodeLine2(String text) { SimpleAttributeSet keyWord = new SimpleAttributeSet(); StyleConstants.setFontSize(keyWord, 9); StyleConstants.setForeground(keyWord, Color.white); - StyleConstants.setBackground(keyWord, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + StyleConstants.setBackground(keyWord, Theme.current().getSecondAltBackgroundColor()); pan.insertString(text.split("\\(")[0] + "(", keyWord); StyleConstants.setForeground(keyWord, new Color(0xE0F3A9)); pan.insertLink(packageName + "." + crashClassName + ":" + classLine, @@ -773,7 +781,7 @@ public void append(String text, Color c, boolean a) { StyleConstants.setFontSize(keyWord, 9); StyleConstants.setItalic(keyWord, a); StyleConstants.setForeground(keyWord, c); - StyleConstants.setBackground(keyWord, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + StyleConstants.setBackground(keyWord, Theme.current().getSecondAltBackgroundColor()); pan.insertString(text, keyWord); } scrollToBottom(); diff --git a/src/main/java/net/mcreator/ui/help/HelpLoader.java b/src/main/java/net/mcreator/ui/help/HelpLoader.java index 9191f699f00..29240aff53d 100644 --- a/src/main/java/net/mcreator/ui/help/HelpLoader.java +++ b/src/main/java/net/mcreator/ui/help/HelpLoader.java @@ -116,7 +116,7 @@ public static String loadHelpFor(IHelpContext helpContext) { Template freemarkerTemplate = InlineTemplatesHandler.getTemplate(helpText); StringWriter stringWriter = new StringWriter(); freemarkerTemplate.process(dataModel, stringWriter, - InlineTemplatesHandler.getConfiguration().getBeansWrapper()); + InlineTemplatesHandler.getConfiguration().getObjectWrapper()); helpString.append(renderer.render(parser.parse(stringWriter.getBuffer().toString()))); } catch (TemplateException | IOException e) { diff --git a/src/main/java/net/mcreator/ui/help/HelpUtils.java b/src/main/java/net/mcreator/ui/help/HelpUtils.java index 569be2fd9c4..3093037f134 100644 --- a/src/main/java/net/mcreator/ui/help/HelpUtils.java +++ b/src/main/java/net/mcreator/ui/help/HelpUtils.java @@ -23,6 +23,7 @@ import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.DesktopUtils; import javax.annotation.Nullable; @@ -94,8 +95,8 @@ public static JComponent helpButton(IHelpContext context) { scrollPane.setPreferredSize(new Dimension(335, 190)); balloonTip = new BalloonTip(lab, scrollPane, - new EdgedBalloonStyle((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.GRAY_COLOR")), BalloonTip.Orientation.LEFT_BELOW, + new EdgedBalloonStyle(Theme.current().getBackgroundColor(), + Theme.current().getAltForegroundColor()), BalloonTip.Orientation.LEFT_BELOW, BalloonTip.AttachLocation.ALIGNED, 10, 10, false); balloonTip.setFocusable(true); diff --git a/src/main/java/net/mcreator/ui/ide/AutocompleteStyle.java b/src/main/java/net/mcreator/ui/ide/AutocompleteStyle.java index 0638bb39768..375f27fe2d1 100644 --- a/src/main/java/net/mcreator/ui/ide/AutocompleteStyle.java +++ b/src/main/java/net/mcreator/ui/ide/AutocompleteStyle.java @@ -20,6 +20,7 @@ import net.mcreator.ui.laf.SlickDarkScrollBarUI; import net.mcreator.ui.laf.renderer.MinecraftCompletionCellRenderer; +import net.mcreator.ui.laf.themes.Theme; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.fife.ui.autocomplete.AutoCompletion; @@ -51,7 +52,7 @@ static void installStyle(AutoCompletion ac, RSyntaxTextArea te) { JList list = (JList) field2.get(autoCompletePopupWindowRaw); list.setForeground(new Color(0xD9D9D9)); list.setSelectionForeground(Color.white); - list.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + list.setBackground(Theme.current().getBackgroundColor()); JWindow autoCompletePopupWindow = (JWindow) field.get(ac); autoCompletePopupWindow.setOpacity(0.93f); @@ -61,21 +62,18 @@ static void installStyle(AutoCompletion ac, RSyntaxTextArea te) { if (com instanceof JComponent) ((JComponent) com).setBorder(null); if (com instanceof JScrollPane pane) { - pane.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - pane.setBorder(BorderFactory.createMatteBorder(0, 3, 0, 0, - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"))); - pane.getVerticalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), - pane.getVerticalScrollBar())); + pane.setBackground(Theme.current().getBackgroundColor()); + pane.setBorder( + BorderFactory.createMatteBorder(0, 3, 0, 0, Theme.current().getBackgroundColor())); + pane.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), pane.getVerticalScrollBar())); pane.getHorizontalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), - pane.getHorizontalScrollBar())); + .setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), pane.getHorizontalScrollBar())); pane.getVerticalScrollBar().setPreferredSize(new Dimension(7, 0)); pane.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 7)); JPanel dummyCorner = new JPanel(); - dummyCorner.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + dummyCorner.setBackground(Theme.current().getInterfaceAccentColor()); pane.setCorner(JScrollPane.LOWER_RIGHT_CORNER, dummyCorner); } } @@ -93,7 +91,7 @@ static void installStyle(AutoCompletion ac, RSyntaxTextArea te) { descWindow.setOpacity(0.85f); descWindow.setSize(390, 220); ((JPanel) descWindow.getContentPane()).setBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"))); + BorderFactory.createLineBorder(Theme.current().getSecondAltBackgroundColor())); } catch (ClassNotFoundException | SecurityException | IllegalArgumentException | IllegalAccessException | NoSuchFieldException e1) { diff --git a/src/main/java/net/mcreator/ui/ide/CodeEditorView.java b/src/main/java/net/mcreator/ui/ide/CodeEditorView.java index 459f2c1cbea..16a6bf74424 100644 --- a/src/main/java/net/mcreator/ui/ide/CodeEditorView.java +++ b/src/main/java/net/mcreator/ui/ide/CodeEditorView.java @@ -30,6 +30,7 @@ import net.mcreator.ui.component.JFileBreadCrumb; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.KeyStrokes; +import net.mcreator.ui.component.util.ThreadUtil; import net.mcreator.ui.ide.autocomplete.CustomJSCCache; import net.mcreator.ui.ide.autocomplete.StringCompletitionProvider; import net.mcreator.ui.ide.json.JsonTree; @@ -39,6 +40,7 @@ import net.mcreator.ui.laf.SlickDarkScrollBarUI; import net.mcreator.ui.laf.SlickTreeUI; import net.mcreator.ui.laf.renderer.AstTreeCellRendererCustom; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.views.ViewBase; import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.workspace.elements.ModElement; @@ -137,7 +139,7 @@ public CodeEditorView(MCreator fa, String code, String fileName, File fileWorkin this.codeCleanup = new CodeCleanup(); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); this.fileBreadCrumb = new JFileBreadCrumb(mcreator, fileWorkingOn, fa.getWorkspaceFolder()); @@ -175,43 +177,43 @@ public CodeEditorView(MCreator fa, String code, String fileName, File fileWorkin sp.setFoldIndicatorEnabled(true); - sp.getGutter().setFoldBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - sp.getGutter().setBorderColor((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - sp.getGutter().setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + sp.getGutter().setFoldBackground(Theme.current().getBackgroundColor()); + sp.getGutter().setBorderColor(Theme.current().getBackgroundColor()); + sp.getGutter().setBackground(Theme.current().getBackgroundColor()); sp.getGutter().setBookmarkingEnabled(true); sp.setIconRowHeaderEnabled(false); - sp.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + sp.setBackground(Theme.current().getBackgroundColor()); sp.setBorder(null); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); - sp.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getHorizontalScrollBar())); + sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), sp.getVerticalScrollBar())); + sp.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), sp.getHorizontalScrollBar())); sp.getVerticalScrollBar().setPreferredSize(new Dimension(7, 0)); sp.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 7)); JPanel cornerDummy1 = new JPanel(); - cornerDummy1.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + cornerDummy1.setBackground(Theme.current().getBackgroundColor()); sp.setCorner(JScrollPane.LOWER_RIGHT_CORNER, cornerDummy1); JPanel cornerDummy2 = new JPanel(); - cornerDummy2.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + cornerDummy2.setBackground(Theme.current().getBackgroundColor()); sp.setCorner(JScrollPane.LOWER_LEFT_CORNER, cornerDummy2); JPanel cornerDummy12 = new JPanel(); - cornerDummy12.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + cornerDummy12.setBackground(Theme.current().getBackgroundColor()); treeSP.setCorner(JScrollPane.LOWER_RIGHT_CORNER, cornerDummy12); JPanel cornerDummy22 = new JPanel(); - cornerDummy22.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + cornerDummy22.setBackground(Theme.current().getBackgroundColor()); treeSP.setCorner(JScrollPane.LOWER_LEFT_CORNER, cornerDummy22); - treeSP.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), treeSP.getVerticalScrollBar())); - treeSP.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), treeSP.getHorizontalScrollBar())); + treeSP.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), treeSP.getVerticalScrollBar())); + treeSP.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), treeSP.getHorizontalScrollBar())); treeSP.getVerticalScrollBar().setPreferredSize(new Dimension(7, 0)); treeSP.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 7)); @@ -244,13 +246,13 @@ public CodeEditorView(MCreator fa, String code, String fileName, File fileWorkin spne.setRightComponent(rightDummy); JPanel cp = new JPanel(new BorderLayout()); - cp.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + cp.setBackground(Theme.current().getBackgroundColor()); cp.add(sp); if (PreferencesManager.PREFERENCES.ide.errorInfoEnable.get()) { ErrorStrip errorStrip = new ErrorStrip(te); errorStrip.setFollowCaret(false); - errorStrip.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + errorStrip.setBackground(Theme.current().getBackgroundColor()); cp.add(errorStrip, BorderLayout.LINE_END); } @@ -264,7 +266,7 @@ public CodeEditorView(MCreator fa, String code, String fileName, File fileWorkin } @Override public void paint(Graphics g) { - g.setColor((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + g.setColor(Theme.current().getBackgroundColor()); g.fillRect(0, 0, getSize().width, getSize().height); super.paint(g); } @@ -420,28 +422,23 @@ private void setupCodeSupport(String fileName) { JavaParser parser = jls.getParser(te); te.addKeyListener(new KeyAdapter() { - final boolean smartAutocomplete = PreferencesManager.PREFERENCES.ide.autocompleteMode.get() - .equals("Smart"); - boolean completitionInAction = false; + private boolean completionInAction = false; @Override public void keyPressed(KeyEvent keyEvent) { super.keyPressed(keyEvent); if (keyEvent.getKeyCode() == KeyEvent.VK_CONTROL) { te.setCursor(new Cursor(Cursor.HAND_CURSOR)); jumpToMode = true; - } else if (smartAutocomplete && !completitionInAction && jls.isAutoActivationEnabled() - && Character.isLetterOrDigit(keyEvent.getKeyChar()) - && jcp.getAlreadyEnteredText(te).length() > 1) { - if (!completitionInAction) { + } else if (PreferencesManager.PREFERENCES.ide.autocompleteMode.get().equals("Smart") + && !completionInAction && jls.isAutoActivationEnabled() && Character.isLetterOrDigit( + keyEvent.getKeyChar()) && jcp.getAlreadyEnteredText(te).length() > 1) { + if (!completionInAction) { new Thread(() -> { if (ac != null) { - completitionInAction = true; - try { - SwingUtilities.invokeAndWait(() -> ac.doCompletion()); - } catch (InterruptedException | InvocationTargetException ignored) { - } - completitionInAction = false; + completionInAction = true; + ThreadUtil.runOnSwingThreadAndWait(() -> ac.doCompletion()); + completionInAction = false; } }, "AutoComplete").start(); } @@ -567,19 +564,11 @@ private void loadSourceTree() { if (tree != null) { tree.setCellRenderer(new AstTreeCellRendererCustom()); tree.listenTo(te); - tree.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + tree.setBackground(Theme.current().getBackgroundColor()); tree.setForeground(Color.white); tree.setRowHeight(18); tree.setUI(new SlickTreeUI()); treeSP.setViewportView(tree); - treeSP.addComponentListener(new ComponentAdapter() { - @Override public void componentResized(ComponentEvent componentEvent) { - super.componentResized(componentEvent); - tree.updateUI(); - tree.setCellRenderer(new AstTreeCellRendererCustom()); - tree.setUI(new SlickTreeUI()); - } - }); treeSP.revalidate(); spne.setRightComponent(treeSP); spne.setDividerLocation(0.8); @@ -699,16 +688,16 @@ private void savingMCreatorModElementWarning() { return true; }); if (readOnly) - fileTab.setActiveColor((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + fileTab.setActiveColor(Theme.current().getAltForegroundColor()); setChangeListener(changeEvent -> { if (!readOnly) { if (changed) { - fileTab.setActiveColor((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - fileTab.setInactiveColor((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + fileTab.setActiveColor(Theme.current().getForegroundColor()); + fileTab.setInactiveColor(Theme.current().getAltForegroundColor()); } else { - fileTab.setActiveColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - fileTab.setInactiveColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + fileTab.setActiveColor(Theme.current().getInterfaceAccentColor()); + fileTab.setInactiveColor(Theme.current().getAltBackgroundColor()); } } }); diff --git a/src/main/java/net/mcreator/ui/ide/RSyntaxTextAreaStyler.java b/src/main/java/net/mcreator/ui/ide/RSyntaxTextAreaStyler.java index 80855078a12..795f3d13f92 100644 --- a/src/main/java/net/mcreator/ui/ide/RSyntaxTextAreaStyler.java +++ b/src/main/java/net/mcreator/ui/ide/RSyntaxTextAreaStyler.java @@ -21,8 +21,6 @@ import net.mcreator.io.FileIO; import net.mcreator.plugin.PluginLoader; import net.mcreator.preferences.PreferencesManager; -import net.mcreator.themes.ThemeLoader; -import net.mcreator.ui.laf.MCreatorTheme; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; @@ -30,8 +28,6 @@ import org.fife.ui.rsyntaxtextarea.Theme; import org.fife.ui.rtextarea.RTextScrollPane; -import javax.swing.*; -import java.awt.*; import java.awt.event.InputEvent; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -47,17 +43,18 @@ public static void style(RSyntaxTextArea te, RTextScrollPane sp, int initialFont Theme theme; if (PluginLoader.INSTANCE.getResourceAsStream( - "themes/" + ThemeLoader.CURRENT_THEME.getID() + "/styles/code_editor.xml") != null) { + "themes/" + net.mcreator.ui.laf.themes.Theme.current().getID() + "/styles/code_editor.xml") + != null) { String themeXML = FileIO.readResourceToString(PluginLoader.INSTANCE, - "themes/" + ThemeLoader.CURRENT_THEME.getID() + "/styles/code_editor.xml"); - themeXML = themeXML.replace("${mainTint}", - Integer.toHexString(((Color) UIManager.get("MCreatorLAF.MAIN_TINT")).getRGB()).substring(2)); + "themes/" + net.mcreator.ui.laf.themes.Theme.current().getID() + "/styles/code_editor.xml"); + themeXML = themeXML.replace("${mainTint}", Integer.toHexString( + (net.mcreator.ui.laf.themes.Theme.current().getInterfaceAccentColor()).getRGB()).substring(2)); theme = Theme.load(new ByteArrayInputStream(themeXML.getBytes(StandardCharsets.UTF_8))); } else { String themeXML = FileIO.readResourceToString(PluginLoader.INSTANCE, "themes/default_dark/styles/code_editor.xml"); - themeXML = themeXML.replace("${mainTint}", - Integer.toHexString(((Color) UIManager.get("MCreatorLAF.MAIN_TINT")).getRGB()).substring(2)); + themeXML = themeXML.replace("${mainTint}", Integer.toHexString( + (net.mcreator.ui.laf.themes.Theme.current().getInterfaceAccentColor()).getRGB()).substring(2)); theme = Theme.load(new ByteArrayInputStream(themeXML.getBytes(StandardCharsets.UTF_8))); } @@ -67,8 +64,8 @@ public static void style(RSyntaxTextArea te, RTextScrollPane sp, int initialFont .toLowerCase(Locale.ENGLISH) + ".xml")); } - theme.matchedBracketBG = (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"); - theme.matchedBracketFG = (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"); + theme.matchedBracketBG = net.mcreator.ui.laf.themes.Theme.current().getAltBackgroundColor(); + theme.matchedBracketFG = net.mcreator.ui.laf.themes.Theme.current().getForegroundColor(); theme.apply(te); } catch (IOException ioe) { @@ -78,8 +75,9 @@ public static void style(RSyntaxTextArea te, RTextScrollPane sp, int initialFont SyntaxScheme ss = te.getSyntaxScheme(); for (int i = 0; i < ss.getStyleCount(); i++) if (ss.getStyle(i) != null) - ss.getStyle(i).font = MCreatorTheme.console_font.deriveFont((float) initialFontSize); - te.setFont(MCreatorTheme.console_font.deriveFont((float) initialFontSize)); + ss.getStyle(i).font = net.mcreator.ui.laf.themes.Theme.current().getConsoleFont() + .deriveFont((float) initialFontSize); + te.setFont(net.mcreator.ui.laf.themes.Theme.current().getConsoleFont().deriveFont((float) initialFontSize)); te.revalidate(); sp.addMouseWheelListener(mouseWheelEvent -> { diff --git a/src/main/java/net/mcreator/ui/ide/ReplaceBar.java b/src/main/java/net/mcreator/ui/ide/ReplaceBar.java index 7903c75d23c..08b5cc294d9 100644 --- a/src/main/java/net/mcreator/ui/ide/ReplaceBar.java +++ b/src/main/java/net/mcreator/ui/ide/ReplaceBar.java @@ -20,6 +20,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.SearchContext; import org.fife.ui.rtextarea.SearchEngine; @@ -48,16 +49,16 @@ public class ReplaceBar extends JPanel { this.ra = ra; final JLabel matches = new JLabel(); - matches.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + matches.setForeground(Theme.current().getAltForegroundColor()); JToolBar top = new JToolBar(); - top.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + top.setBackground(Theme.current().getBackgroundColor()); top.setBorder(null); top.setFloatable(false); JToolBar bottom = new JToolBar(); bottom.setBorder(null); - bottom.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + bottom.setBackground(Theme.current().getBackgroundColor()); bottom.setFloatable(false); jtf1.addKeyListener(new KeyAdapter() { @@ -75,7 +76,7 @@ public class ReplaceBar extends JPanel { matches.setText(marked.getMarkedCount() + " results"); if (marked.getMarkedCount() > 0) { - matches.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + matches.setForeground(Theme.current().getAltForegroundColor()); } else { matches.setForeground(new Color(239, 96, 96)); } @@ -127,7 +128,7 @@ public class ReplaceBar extends JPanel { bottom.add(Box.createHorizontalStrut(10)); bottom.add(replaceAll); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); top.add(jtf1); top.add(Box.createHorizontalStrut(10)); @@ -150,11 +151,11 @@ public class ReplaceBar extends JPanel { cb5.setForeground(new Color(0xE2E2E2)); jtf1.setMaximumSize(jtf1.getPreferredSize()); - jtf1.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + jtf1.setBackground(Theme.current().getAltBackgroundColor()); jtf1.setOpaque(true); jtf2.setMaximumSize(jtf1.getPreferredSize()); - jtf2.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + jtf2.setBackground(Theme.current().getAltBackgroundColor()); jtf2.setOpaque(true); JButton close = new JButton(UIRES.get("close_small")); diff --git a/src/main/java/net/mcreator/ui/ide/SearchBar.java b/src/main/java/net/mcreator/ui/ide/SearchBar.java index bd93e338008..f1ae6b5828a 100644 --- a/src/main/java/net/mcreator/ui/ide/SearchBar.java +++ b/src/main/java/net/mcreator/ui/ide/SearchBar.java @@ -19,6 +19,7 @@ package net.mcreator.ui.ide; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.SearchContext; import org.fife.ui.rtextarea.SearchEngine; @@ -43,7 +44,7 @@ public class SearchBar extends JToolBar { this.ra = ra; final JLabel matches = new JLabel(); - matches.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + matches.setForeground(Theme.current().getAltForegroundColor()); jtf1.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent keyEvent) { @@ -60,7 +61,7 @@ public class SearchBar extends JToolBar { matches.setText(marked.getMarkedCount() + " results"); if (marked.getMarkedCount() > 0) { - matches.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + matches.setForeground(Theme.current().getAltForegroundColor()); } else { matches.setForeground(new Color(239, 96, 96)); } @@ -74,7 +75,7 @@ public class SearchBar extends JToolBar { }); setFloatable(false); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); add(jtf1); add(Box.createHorizontalStrut(10)); @@ -88,7 +89,7 @@ public class SearchBar extends JToolBar { add(Box.createHorizontalGlue()); jtf1.setMaximumSize(jtf1.getPreferredSize()); - jtf1.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + jtf1.setBackground(Theme.current().getAltBackgroundColor()); jtf1.setOpaque(true); JButton close = new JButton(UIRES.get("close_small")); diff --git a/src/main/java/net/mcreator/ui/ide/autocomplete/JavaKeywordCompletition.java b/src/main/java/net/mcreator/ui/ide/autocomplete/JavaKeywordCompletition.java index 8a2c1c707ac..df66d726e9a 100644 --- a/src/main/java/net/mcreator/ui/ide/autocomplete/JavaKeywordCompletition.java +++ b/src/main/java/net/mcreator/ui/ide/autocomplete/JavaKeywordCompletition.java @@ -18,6 +18,7 @@ package net.mcreator.ui.ide.autocomplete; +import net.mcreator.ui.laf.themes.Theme; import org.fife.rsta.ac.java.JavaTemplateCompletion; import org.fife.ui.autocomplete.CompletionProvider; @@ -37,7 +38,7 @@ public JavaKeywordCompletition(CompletionProvider provider, String keyWord) { @Override public void rendererText(Graphics g, int x, int y, boolean selected) { Color orig = g.getColor(); - g.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + g.setColor(Theme.current().getInterfaceAccentColor()); g.drawString(getInputText(), x, y); if (getShortDescription() != null) { diff --git a/src/main/java/net/mcreator/ui/ide/json/JsonTree.java b/src/main/java/net/mcreator/ui/ide/json/JsonTree.java index 5b4f55ec694..a9ae335bf6a 100644 --- a/src/main/java/net/mcreator/ui/ide/json/JsonTree.java +++ b/src/main/java/net/mcreator/ui/ide/json/JsonTree.java @@ -87,11 +87,6 @@ private void addJsonElementToTree(JsonElement element, String prevKey, DefaultMu } } - @Override public void updateUI() { - super.updateUI(); - setCellRenderer(new AstTreeCellRendererCustom()); - } - @Override public void expandInitialNodes() { TreeUtils.expandAllNodes(this, 0, getRowCount()); } diff --git a/src/main/java/net/mcreator/ui/init/BackgroundLoader.java b/src/main/java/net/mcreator/ui/init/BackgroundLoader.java index cd3eb27a95c..d30634ccd35 100644 --- a/src/main/java/net/mcreator/ui/init/BackgroundLoader.java +++ b/src/main/java/net/mcreator/ui/init/BackgroundLoader.java @@ -21,7 +21,7 @@ import net.mcreator.io.UserFolderManager; import net.mcreator.plugin.PluginLoader; -import net.mcreator.themes.ThemeLoader; +import net.mcreator.ui.laf.themes.Theme; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -54,8 +54,8 @@ public static List loadUserBackgrounds() { } public static List loadThemeBackgrounds() { - Set bgFiles = PluginLoader.INSTANCE.getResources( - "themes." + ThemeLoader.CURRENT_THEME.getID() + ".backgrounds", Pattern.compile("^[^$].*\\.png")); + Set bgFiles = PluginLoader.INSTANCE.getResources("themes." + Theme.current().getID() + ".backgrounds", + Pattern.compile("^[^$].*\\.png")); List backgrounds = new ArrayList<>(); for (String name : bgFiles) { diff --git a/src/main/java/net/mcreator/ui/init/BlockItemIcons.java b/src/main/java/net/mcreator/ui/init/BlockItemIcons.java index 06040a45aad..ac94504acec 100644 --- a/src/main/java/net/mcreator/ui/init/BlockItemIcons.java +++ b/src/main/java/net/mcreator/ui/init/BlockItemIcons.java @@ -20,6 +20,7 @@ import net.mcreator.plugin.PluginLoader; import net.mcreator.util.FilenameUtilsPatched; +import net.mcreator.util.image.ImageUtils; import javax.annotation.Nullable; import javax.imageio.ImageIO; @@ -47,10 +48,16 @@ public static void init() { } public static ImageIcon getIconForItem(@Nullable String itemName) { - if (itemName != null && CACHE.get(itemName) != null) + if (itemName != null && CACHE.get(itemName) != null) { return CACHE.get(itemName); - else + } else if (itemName != null && itemName.matches("[0-9]+")) { + // If itemName is number, consider it color and store it in cache + ImageIcon result = ImageUtils.createColorSquare(new Color(Integer.parseInt(itemName)), 32, 32); + CACHE.put(itemName, result); + return result; + } else { return UIRES.get("missingblockicon"); + } } public static ImageIcon getIconFor(String itemName) { diff --git a/src/main/java/net/mcreator/ui/init/L10N.java b/src/main/java/net/mcreator/ui/init/L10N.java index 7a34cb6e08f..36e8a56f169 100644 --- a/src/main/java/net/mcreator/ui/init/L10N.java +++ b/src/main/java/net/mcreator/ui/init/L10N.java @@ -40,6 +40,8 @@ public class L10N { public static final Locale DEFAULT_LOCALE = new Locale("en", "US"); + public static final List SYSTEM_FONT_LANGUAGES = Arrays.asList("zh", "ja", "ko", "th", "hi", "he", "iw"); + private static ResourceBundle rb; private static ResourceBundle rb_en; diff --git a/src/main/java/net/mcreator/ui/init/TiledImageCache.java b/src/main/java/net/mcreator/ui/init/TiledImageCache.java index 80f6b50bff4..81b6818a63b 100644 --- a/src/main/java/net/mcreator/ui/init/TiledImageCache.java +++ b/src/main/java/net/mcreator/ui/init/TiledImageCache.java @@ -18,6 +18,7 @@ package net.mcreator.ui.init; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; import net.mcreator.util.image.InvalidTileSizeException; import net.mcreator.util.image.TiledImageUtils; @@ -25,7 +26,6 @@ import org.apache.logging.log4j.Logger; import javax.swing.*; -import java.awt.*; public class TiledImageCache { @@ -78,8 +78,8 @@ public static void loadAndTileImages() { modTabBlue = modTabTile.getIcon(3, 1); modTabPurple = modTabTile.getIcon(4, 1); - workspaceAdd = ImageUtils.colorize(workspaceIcons.getIcon(1, 1), - (Color) UIManager.get("MCreatorLAF.MAIN_TINT"), false); + workspaceAdd = ImageUtils.colorize(workspaceIcons.getIcon(1, 1), Theme.current().getInterfaceAccentColor(), + false); workspaceCode = workspaceIcons.getIcon(2, 1); workspaceDelete = workspaceIcons.getIcon(3, 1); workspaceDeleteAll = workspaceIcons.getIcon(4, 1); diff --git a/src/main/java/net/mcreator/ui/laf/CheckBoxIcon.java b/src/main/java/net/mcreator/ui/laf/CheckBoxIcon.java index 28cc940a645..dfde1a7cde8 100644 --- a/src/main/java/net/mcreator/ui/laf/CheckBoxIcon.java +++ b/src/main/java/net/mcreator/ui/laf/CheckBoxIcon.java @@ -18,6 +18,8 @@ package net.mcreator.ui.laf; +import net.mcreator.ui.laf.themes.Theme; + import javax.swing.*; import java.awt.*; @@ -33,20 +35,20 @@ private int getControlSize() { int controlSize = getControlSize(); if (model.isEnabled()) { if (model.isPressed() && model.isArmed()) { - g.setColor(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).brighter()); + g.setColor((Theme.current().getAltBackgroundColor()).brighter()); g.fillRect(x, y, controlSize - 1, controlSize - 1); } else if (model.isRollover()) { - g.setColor(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker()); + g.setColor((Theme.current().getAltBackgroundColor()).darker()); g.fillRect(x, y, controlSize - 1, controlSize - 1); } else { - g.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g.setColor(Theme.current().getAltBackgroundColor()); g.fillRect(x, y, controlSize - 1, controlSize - 1); } - g.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + g.setColor(Theme.current().getInterfaceAccentColor()); } else { - g.setColor((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + g.setColor(Theme.current().getBackgroundColor()); g.drawRect(x, y, controlSize - 1, controlSize - 1); } diff --git a/src/main/java/net/mcreator/ui/laf/DarkComboBoxUI.java b/src/main/java/net/mcreator/ui/laf/DarkComboBoxUI.java index d2a6d693dd5..534fbd89155 100644 --- a/src/main/java/net/mcreator/ui/laf/DarkComboBoxUI.java +++ b/src/main/java/net/mcreator/ui/laf/DarkComboBoxUI.java @@ -18,12 +18,13 @@ package net.mcreator.ui.laf; +import net.mcreator.ui.laf.themes.Theme; + import javax.swing.*; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicComboPopup; import javax.swing.plaf.basic.ComboPopup; import javax.swing.plaf.metal.MetalComboBoxUI; -import java.awt.*; public class DarkComboBoxUI extends MetalComboBoxUI { @@ -35,13 +36,12 @@ public static ComponentUI createUI(JComponent c) { BasicComboPopup comboPopup = new BasicComboPopup(comboBox) { @Override protected JScrollPane createScroller() { JScrollPane scroller = super.createScroller(); - scroller.getVerticalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), scroller.getVerticalScrollBar())); + scroller.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getAltBackgroundColor(), + Theme.current().getBackgroundColor(), scroller.getVerticalScrollBar())); return scroller; } }; - comboPopup.setBorder(BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + comboPopup.setBorder(BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor())); return comboPopup; } diff --git a/src/main/java/net/mcreator/ui/laf/DarkSliderUI.java b/src/main/java/net/mcreator/ui/laf/DarkSliderUI.java index 7d9cc9ca0ba..4c866073fa4 100644 --- a/src/main/java/net/mcreator/ui/laf/DarkSliderUI.java +++ b/src/main/java/net/mcreator/ui/laf/DarkSliderUI.java @@ -18,6 +18,8 @@ package net.mcreator.ui.laf; +import net.mcreator.ui.laf.themes.Theme; + import javax.swing.*; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicSliderUI; @@ -52,7 +54,7 @@ public static ComponentUI createUI(JComponent c) { } if (clip.intersects(thumbRect)) { Color savedColor = slider.getBackground(); - slider.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + slider.setBackground(Theme.current().getInterfaceAccentColor()); paintThumb(g); slider.setBackground(savedColor); } diff --git a/src/main/java/net/mcreator/ui/laf/DarkSpinnerUI.java b/src/main/java/net/mcreator/ui/laf/DarkSpinnerUI.java index 247d93dc01b..a2b70cf8c4d 100644 --- a/src/main/java/net/mcreator/ui/laf/DarkSpinnerUI.java +++ b/src/main/java/net/mcreator/ui/laf/DarkSpinnerUI.java @@ -18,6 +18,8 @@ package net.mcreator.ui.laf; +import net.mcreator.ui.laf.themes.Theme; + import javax.swing.*; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicArrowButton; @@ -45,12 +47,12 @@ public static ComponentUI createUI(JComponent c) { } private Component createArrowButton(int var1) { - BasicArrowButton var2 = new BasicArrowButton(var1, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - var2.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - var2.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - var2.setBorder(BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), 1)); + BasicArrowButton var2 = new BasicArrowButton(var1, Theme.current().getBackgroundColor(), + Theme.current().getBackgroundColor(), Theme.current().getForegroundColor(), + Theme.current().getBackgroundColor()); + var2.setBackground(Theme.current().getBackgroundColor()); + var2.setForeground(Theme.current().getForegroundColor()); + var2.setBorder(BorderFactory.createLineBorder(Theme.current().getBackgroundColor(), 1)); var2.setInheritsPopupMenu(true); return var2; } diff --git a/src/main/java/net/mcreator/ui/laf/DarkSplitPaneUI.java b/src/main/java/net/mcreator/ui/laf/DarkSplitPaneUI.java index 2aca5762003..8503180007b 100644 --- a/src/main/java/net/mcreator/ui/laf/DarkSplitPaneUI.java +++ b/src/main/java/net/mcreator/ui/laf/DarkSplitPaneUI.java @@ -18,11 +18,12 @@ package net.mcreator.ui.laf; +import net.mcreator.ui.laf.themes.Theme; + import javax.swing.*; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicSplitPaneDivider; import javax.swing.plaf.metal.MetalSplitPaneUI; -import java.awt.*; public class DarkSplitPaneUI extends MetalSplitPaneUI { @@ -32,7 +33,7 @@ public static ComponentUI createUI(JComponent var0) { @Override public BasicSplitPaneDivider createDefaultDivider() { BasicSplitPaneDivider divider = super.createDefaultDivider(); - divider.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + divider.setBackground(Theme.current().getAltBackgroundColor()); return divider; } diff --git a/src/main/java/net/mcreator/ui/laf/LafUtil.java b/src/main/java/net/mcreator/ui/laf/LafUtil.java new file mode 100644 index 00000000000..b1280f72b1c --- /dev/null +++ b/src/main/java/net/mcreator/ui/laf/LafUtil.java @@ -0,0 +1,96 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.laf; + +import net.mcreator.io.OS; +import net.mcreator.ui.laf.themes.Theme; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.swing.*; +import javax.swing.text.DefaultEditorKit; +import javax.swing.text.html.HTMLEditorKit; +import javax.swing.text.html.StyleSheet; +import java.awt.event.KeyEvent; +import java.lang.reflect.Field; + +public class LafUtil { + + private static final Logger LOG = LogManager.getLogger(LafUtil.class); + + public static void applyDefaultHTMLStyles() { + try { + final Field keyField = HTMLEditorKit.class.getDeclaredField("DEFAULT_STYLES_KEY"); + keyField.setAccessible(true); + final Object key = keyField.get(null); + + Object appContext = Class.forName("sun.awt.AppContext").getMethod("getAppContext").invoke(null); + + StyleSheet defaultStyles = (StyleSheet) appContext.getClass().getMethod("get", Object.class) + .invoke(appContext, key); + + if (defaultStyles != null) { + defaultStyles.addRule( + "a {color: #" + Integer.toHexString(Theme.current().getInterfaceAccentColor().getRGB()) + .substring(2) + ";}"); + + appContext.getClass().getMethod("put", Object.class, Object.class) + .invoke(appContext, key, defaultStyles); + } + } catch (Throwable throwable) { + LOG.warn("Failed to apply custom CSS style sheets", throwable); + } + } + + public static void fixMacOSActions() { + if (OS.getOS() == OS.MAC) { + applyMacOSActionsFor("TextField.focusInputMap"); + applyMacOSActionsFor("TextArea.focusInputMap"); + applyMacOSActionsFor("TextPane.focusInputMap"); + } + } + + private static void applyMacOSActionsFor(String key) { + InputMap im = (InputMap) UIManager.get(key); + + // Copy/paste/select actions + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.META_DOWN_MASK), DefaultEditorKit.copyAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.META_DOWN_MASK), DefaultEditorKit.pasteAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.META_DOWN_MASK), DefaultEditorKit.cutAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.META_DOWN_MASK), DefaultEditorKit.selectAllAction); + + // Navigation actions + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.META_DOWN_MASK), DefaultEditorKit.beginLineAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.META_DOWN_MASK), DefaultEditorKit.endLineAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.ALT_DOWN_MASK), DefaultEditorKit.previousWordAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.ALT_DOWN_MASK), DefaultEditorKit.nextWordAction); + + // Navigation selection actions + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.META_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK), + DefaultEditorKit.selectionBeginLineAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.META_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK), + DefaultEditorKit.selectionEndLineAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.ALT_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK), + DefaultEditorKit.selectionPreviousWordAction); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.ALT_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK), + DefaultEditorKit.selectionNextWordAction); + } + +} diff --git a/src/main/java/net/mcreator/ui/laf/MCreatorLookAndFeel.java b/src/main/java/net/mcreator/ui/laf/MCreatorLookAndFeel.java deleted file mode 100644 index 0a3a62d663e..00000000000 --- a/src/main/java/net/mcreator/ui/laf/MCreatorLookAndFeel.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * MCreator (https://mcreator.net/) - * Copyright (C) 2020 Pylo and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.mcreator.ui.laf; - -import net.mcreator.preferences.PreferencesManager; -import net.mcreator.themes.ThemeLoader; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import javax.swing.*; -import javax.swing.plaf.metal.MetalLookAndFeel; -import javax.swing.text.html.HTMLEditorKit; -import javax.swing.text.html.StyleSheet; -import java.lang.reflect.Field; - -public class MCreatorLookAndFeel extends MetalLookAndFeel { - - private static final Logger LOG = LogManager.getLogger("Look and Feel"); - - private final MCreatorTheme theme; - - public MCreatorLookAndFeel() { - setCurrentTheme( - theme = new MCreatorTheme(ThemeLoader.getTheme(PreferencesManager.PREFERENCES.hidden.uiTheme.get()))); - } - - @Override protected void initClassDefaults(UIDefaults table) { - super.initClassDefaults(table); - } - - @Override public UIDefaults getDefaults() { - try { - final Field keyField = HTMLEditorKit.class.getDeclaredField("DEFAULT_STYLES_KEY"); - keyField.setAccessible(true); - final Object key = keyField.get(null); - - Object appContext = Class.forName("sun.awt.AppContext").getMethod("getAppContext").invoke(null); - - StyleSheet defaultStyles = (StyleSheet) appContext.getClass().getMethod("get", Object.class) - .invoke(appContext, key); - - if (defaultStyles != null) { - defaultStyles.addRule( - "* {color: white;} font, b, i, strong, p, div, li, ul, ol {color: #" + Integer.toHexString( - theme.getColorScheme().getForegroundColor().getRGB()).substring(2) - + ";} body {color: white;} html {color: #" + Integer.toHexString( - theme.getColorScheme().getForegroundColor().getRGB()).substring(2) + ";} a {color: #" - + Integer.toHexString(theme.getMainTint().getRGB()).substring(2) + ";}"); - - appContext.getClass().getMethod("put", Object.class, Object.class) - .invoke(appContext, key, defaultStyles); - } - } catch (Throwable throwable) { - LOG.error("Failed to apply custom CSS style sheets. Interface will look broken!", throwable); - } - return super.getDefaults(); - } - - @Override public String getName() { - return "MCreator"; - } - - @Override public String getID() { - return "MCreator"; - } - - @Override public String getDescription() { - return "MCreator Look and Feel"; - } - - @Override public boolean isNativeLookAndFeel() { - return false; - } - - @Override public boolean isSupportedLookAndFeel() { - return true; - } - -} diff --git a/src/main/java/net/mcreator/ui/laf/MCreatorTheme.java b/src/main/java/net/mcreator/ui/laf/MCreatorTheme.java index 2900f70782f..13eda5bba32 100644 --- a/src/main/java/net/mcreator/ui/laf/MCreatorTheme.java +++ b/src/main/java/net/mcreator/ui/laf/MCreatorTheme.java @@ -18,23 +18,14 @@ package net.mcreator.ui.laf; -import net.mcreator.plugin.PluginLoader; -import net.mcreator.preferences.PreferencesManager; -import net.mcreator.themes.ColorScheme; -import net.mcreator.themes.Theme; -import net.mcreator.themes.ThemeLoader; -import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.FontUIResource; import javax.swing.plaf.metal.OceanTheme; import java.awt.*; -import java.io.IOException; -import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.Locale; @@ -42,109 +33,35 @@ public class MCreatorTheme extends OceanTheme { - private static final Logger LOG = LogManager.getLogger("Theme"); - - public static final List SYSTEM_FONT_LANGUAGES = Arrays.asList("zh", "ja", "ko", "th", "hi", "he", "iw"); - - public static final Color MAIN_TINT_DEFAULT = new Color(0x93c54b); - private Color MAIN_TINT; - private final ColorScheme colorScheme; - - public static Font secondary_font; - public static Font console_font; - - private static Font default_font; + private final Theme theme; public MCreatorTheme(Theme theme) { - this.colorScheme = theme.getColorScheme(); - - if (colorScheme.getInterfaceAccentColor() != null) { - try { - MAIN_TINT = Color.decode(colorScheme.getInterfaceAccentColor()); - } catch (NumberFormatException exception) { - LOG.warn(colorScheme.getInterfaceAccentColor() - + " in the current theme is not a valid hexadecimal number. The color defined by the user will be used.", - exception.getMessage()); - MAIN_TINT = PreferencesManager.PREFERENCES.ui.interfaceAccentColor.get(); - } - } else { - MAIN_TINT = PreferencesManager.PREFERENCES.ui.interfaceAccentColor.get(); - } - - try { - default_font = new Font(theme.getDefaultFont(), Font.PLAIN, theme.getFontSize()); - secondary_font = default_font; - - String lang = L10N.getLocale().getLanguage(); - if (!SYSTEM_FONT_LANGUAGES.contains(lang) && !theme.useDefaultFontForSecondary()) { - InputStream secondaryFontStream = PluginLoader.INSTANCE.getResourceAsStream( - "themes/" + theme.getID() + "/fonts/secondary_font.ttf"); - if (secondaryFontStream != null) { // Font loaded from a file in the theme - secondary_font = Font.createFont(Font.TRUETYPE_FONT, secondaryFontStream); - } else { // Default secondary front (from the default_dark theme) - secondary_font = Font.createFont(Font.TRUETYPE_FONT, - PluginLoader.INSTANCE.getResourceAsStream("themes/default_dark/fonts/secondary_font.ttf")); - LOG.info("Main font from default_dark will be used."); - } - } - - InputStream consoleFontStream = PluginLoader.INSTANCE.getResourceAsStream( - "themes/" + theme.getID() + "/fonts/console_font.ttf"); - if (consoleFontStream != null) { - console_font = Font.createFont(Font.TRUETYPE_FONT, consoleFontStream); - } else { - // Default main front (from the default_dark theme) - console_font = Font.createFont(Font.TRUETYPE_FONT, - PluginLoader.INSTANCE.getResourceAsStream("themes/default_dark/fonts/console_font.ttf")); - LOG.info("Console font from default_dark will be used."); - } - } catch (NullPointerException | FontFormatException | IOException e2) { - LOG.info("Failed to init MCreator Theme! Error " + e2.getMessage()); - } - } - - public Color getMainTint() { - return MAIN_TINT; - } - - public ColorScheme getColorScheme() { - return colorScheme; - } - - protected void initMCreatorThemeColors(UIDefaults table) { - table.put("MCreatorLAF.BLACK_ACCENT", colorScheme.getSecondAltBackgroundColor()); - table.put("MCreatorLAF.DARK_ACCENT", colorScheme.getBackgroundColor()); - table.put("MCreatorLAF.LIGHT_ACCENT", colorScheme.getAltBackgroundColor()); - table.put("MCreatorLAF.GRAY_COLOR", colorScheme.getAltForegroundColor()); - table.put("MCreatorLAF.BRIGHT_COLOR", colorScheme.getForegroundColor()); - table.put("MCreatorLAF.MAIN_TINT", MAIN_TINT); + this.theme = theme; } @Override public void addCustomEntriesToTable(UIDefaults table) { super.addCustomEntriesToTable(table); - initMCreatorThemeColors(table); - Set keySet = table.keySet(); for (Object key : keySet) { if (key == null) continue; if (key.toString().toLowerCase(Locale.ENGLISH).contains("font")) { - table.put(key, secondary_font.deriveFont((float) ThemeLoader.CURRENT_THEME.getFontSize())); + table.put(key, theme.getSecondaryFont().deriveFont((float) theme.getFontSize())); } else if (key.toString().toLowerCase(Locale.ENGLISH).contains("bordercolor")) { - table.put(key, MAIN_TINT); + table.put(key, theme.getInterfaceAccentColor()); } else if (key.toString().toLowerCase(Locale.ENGLISH).endsWith(".background")) { - table.put(key, colorScheme.getBackgroundColor()); + table.put(key, theme.getBackgroundColor()); } else if (key.toString().toLowerCase(Locale.ENGLISH).endsWith(".foreground")) { - table.put(key, colorScheme.getForegroundColor()); + table.put(key, theme.getForegroundColor()); } else if (key.toString().toLowerCase(Locale.ENGLISH).endsWith(".inactiveforeground")) { - table.put(key, colorScheme.getAltForegroundColor()); + table.put(key, theme.getAltForegroundColor()); } else if (key.toString().toLowerCase(Locale.ENGLISH).endsWith(".disabledbackground")) { - table.put(key, colorScheme.getBackgroundColor()); + table.put(key, theme.getBackgroundColor()); } else if (key.toString().toLowerCase(Locale.ENGLISH).endsWith(".disabledforeground")) { - table.put(key, colorScheme.getAltForegroundColor()); + table.put(key, theme.getAltForegroundColor()); } else if (key.toString().toLowerCase(Locale.ENGLISH).endsWith(".caretforeground")) { - table.put(key, colorScheme.getForegroundColor()); + table.put(key, theme.getForegroundColor()); } } @@ -152,27 +69,27 @@ protected void initMCreatorThemeColors(UIDefaults table) { table.put("Tree.rendererFillBackground", false); - table.put("TitledBorder.titleColor", colorScheme.getForegroundColor()); + table.put("TitledBorder.titleColor", theme.getForegroundColor()); - table.put("SplitPane.dividerFocusColor", colorScheme.getAltBackgroundColor()); - table.put("SplitPane.darkShadow", colorScheme.getAltBackgroundColor()); - table.put("SplitPane.shadow", colorScheme.getAltBackgroundColor()); - table.put("SplitPaneDivider.draggingColor", MAIN_TINT); + table.put("SplitPane.dividerFocusColor", theme.getAltBackgroundColor()); + table.put("SplitPane.darkShadow", theme.getAltBackgroundColor()); + table.put("SplitPane.shadow", theme.getAltBackgroundColor()); + table.put("SplitPaneDivider.draggingColor", theme.getInterfaceAccentColor()); - table.put("OptionPane.messageForeground", colorScheme.getForegroundColor()); + table.put("OptionPane.messageForeground", theme.getForegroundColor()); - table.put("Label.foreground", colorScheme.getForegroundColor()); - table.put("Label.disabledForeground", colorScheme.getForegroundColor()); - table.put("Label.inactiveforeground", colorScheme.getForegroundColor()); - table.put("Label.textForeground", colorScheme.getForegroundColor()); + table.put("Label.foreground", theme.getForegroundColor()); + table.put("Label.disabledForeground", theme.getForegroundColor()); + table.put("Label.inactiveforeground", theme.getForegroundColor()); + table.put("Label.textForeground", theme.getForegroundColor()); - table.put("Button.toolBarBorderBackground", colorScheme.getForegroundColor()); - table.put("Button.disabledToolBarBorderBackground", colorScheme.getAltBackgroundColor()); + table.put("Button.toolBarBorderBackground", theme.getForegroundColor()); + table.put("Button.disabledToolBarBorderBackground", theme.getAltBackgroundColor()); table.put("ToolBar.rolloverBorder", - BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(colorScheme.getBackgroundColor(), 1), + BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(theme.getBackgroundColor(), 1), BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder(colorScheme.getAltBackgroundColor(), 1), - BorderFactory.createLineBorder(colorScheme.getBackgroundColor(), 3)))); + BorderFactory.createLineBorder(theme.getAltBackgroundColor(), 1), + BorderFactory.createLineBorder(theme.getBackgroundColor(), 3)))); table.put("ScrollBarUI", SlickDarkScrollBarUI.class.getName()); table.put("SpinnerUI", DarkSpinnerUI.class.getName()); @@ -183,41 +100,40 @@ protected void initMCreatorThemeColors(UIDefaults table) { table.put("Menu.border", BorderFactory.createEmptyBorder(3, 4, 3, 4)); table.put("MenuItem.border", BorderFactory.createEmptyBorder(3, 4, 3, 4)); - table.put("PopupMenu.border", BorderFactory.createLineBorder(colorScheme.getAltBackgroundColor())); + table.put("PopupMenu.border", BorderFactory.createLineBorder(theme.getAltBackgroundColor())); - table.put("Separator.foreground", colorScheme.getAltBackgroundColor()); - table.put("Separator.background", colorScheme.getBackgroundColor()); + table.put("Separator.foreground", theme.getAltBackgroundColor()); + table.put("Separator.background", theme.getBackgroundColor()); - table.put("Menu.foreground", colorScheme.getForegroundColor()); - table.put("MenuItem.foreground", colorScheme.getForegroundColor()); + table.put("Menu.foreground", theme.getForegroundColor()); + table.put("MenuItem.foreground", theme.getForegroundColor()); - table.put("ComboBox.foreground", colorScheme.getForegroundColor()); - table.put("ComboBox.background", colorScheme.getAltBackgroundColor()); - table.put("ComboBox.disabledForeground", colorScheme.getAltForegroundColor()); + table.put("ComboBox.foreground", theme.getForegroundColor()); + table.put("ComboBox.background", theme.getAltBackgroundColor()); + table.put("ComboBox.disabledForeground", theme.getAltForegroundColor()); - table.put("Spinner.foreground", colorScheme.getForegroundColor()); - table.put("Spinner.background", colorScheme.getAltBackgroundColor()); + table.put("Spinner.foreground", theme.getForegroundColor()); + table.put("Spinner.background", theme.getAltBackgroundColor()); - table.put("FormattedTextField.foreground", colorScheme.getForegroundColor()); - table.put("FormattedTextField.inactiveForeground", colorScheme.getAltForegroundColor()); - table.put("FormattedTextField.background", colorScheme.getAltBackgroundColor()); + table.put("FormattedTextField.foreground", theme.getForegroundColor()); + table.put("FormattedTextField.inactiveForeground", theme.getAltForegroundColor()); + table.put("FormattedTextField.background", theme.getAltBackgroundColor()); table.put("FormattedTextField.border", BorderFactory.createEmptyBorder(2, 5, 2, 5)); - table.put("TextField.foreground", colorScheme.getForegroundColor()); - table.put("TextField.inactiveForeground", colorScheme.getAltForegroundColor()); - table.put("TextField.background", colorScheme.getAltBackgroundColor()); + table.put("TextField.foreground", theme.getForegroundColor()); + table.put("TextField.inactiveForeground", theme.getAltForegroundColor()); + table.put("TextField.background", theme.getAltBackgroundColor()); table.put("TextField.border", BorderFactory.createEmptyBorder(2, 5, 2, 5)); - table.put("PasswordField.foreground", colorScheme.getForegroundColor()); - table.put("PasswordField.inactiveForeground", colorScheme.getAltForegroundColor()); - table.put("PasswordField.background", colorScheme.getAltBackgroundColor()); + table.put("PasswordField.foreground", theme.getForegroundColor()); + table.put("PasswordField.inactiveForeground", theme.getAltForegroundColor()); + table.put("PasswordField.background", theme.getAltBackgroundColor()); table.put("PasswordField.border", BorderFactory.createEmptyBorder(2, 5, 2, 5)); table.put("ComboBox.border", null); - List buttonGradient = Arrays.asList(0f, 0f, new ColorUIResource(colorScheme.getForegroundColor()), - new ColorUIResource(colorScheme.getForegroundColor()), - new ColorUIResource(colorScheme.getForegroundColor())); + List buttonGradient = Arrays.asList(0f, 0f, new ColorUIResource(theme.getForegroundColor()), + new ColorUIResource(theme.getForegroundColor()), new ColorUIResource(theme.getForegroundColor())); table.put("Button.gradient", buttonGradient); table.put("Button.rollover", true); @@ -234,11 +150,10 @@ protected void initMCreatorThemeColors(UIDefaults table) { table.put("ToggleButton.gradient", buttonGradient); table.put("ToggleButton.rollover", true); - List sliderGradient = Arrays.asList(0f, 0f, new ColorUIResource(colorScheme.getBackgroundColor()), - new ColorUIResource(colorScheme.getBackgroundColor()), - new ColorUIResource(colorScheme.getBackgroundColor())); + List sliderGradient = Arrays.asList(0f, 0f, new ColorUIResource(theme.getBackgroundColor()), + new ColorUIResource(theme.getBackgroundColor()), new ColorUIResource(theme.getBackgroundColor())); - table.put("Slider.altTrackColor", new ColorUIResource(colorScheme.getBackgroundColor())); + table.put("Slider.altTrackColor", new ColorUIResource(theme.getBackgroundColor())); table.put("Slider.gradient", sliderGradient); table.put("Slider.focusGradient", sliderGradient); @@ -263,16 +178,16 @@ protected void initMCreatorThemeColors(UIDefaults table) { table.put("RadioButton.icon", new RadioButtonIcon()); table.put("RadioButtonMenuItem.icon", new RadioButtonIcon()); - table.put("TabbedPane.contentAreaColor", colorScheme.getBackgroundColor()); + table.put("TabbedPane.contentAreaColor", theme.getBackgroundColor()); table.put("TabbedPane.contentBorderInsets", new Insets(4, 2, 3, 3)); - table.put("TabbedPane.selected", colorScheme.getBackgroundColor()); - table.put("TabbedPane.tabAreaBackground", colorScheme.getAltBackgroundColor()); + table.put("TabbedPane.selected", theme.getBackgroundColor()); + table.put("TabbedPane.tabAreaBackground", theme.getAltBackgroundColor()); table.put("TabbedPane.tabAreaInsets", new Insets(2, 2, 0, 6)); - table.put("TabbedPane.unselectedBackground", colorScheme.getBackgroundColor()); + table.put("TabbedPane.unselectedBackground", theme.getBackgroundColor()); - table.put("ToolTip.border", BorderFactory.createLineBorder(colorScheme.getForegroundColor())); - table.put("ToolTip.foreground", colorScheme.getForegroundColor()); - table.put("ToolTip.background", colorScheme.getBackgroundColor()); + table.put("ToolTip.border", BorderFactory.createLineBorder(theme.getForegroundColor())); + table.put("ToolTip.foreground", theme.getForegroundColor()); + table.put("ToolTip.background", theme.getBackgroundColor()); table.put("ScrollBar.width", 7); @@ -298,7 +213,7 @@ protected void initMCreatorThemeColors(UIDefaults table) { table.put("OptionPane.questionIcon", UIRES.get("laf.question")); table.put("OptionPane.informationIcon", UIRES.get("laf.info")); - table.put("MenuItem.acceleratorForeground", colorScheme.getAltForegroundColor()); + table.put("MenuItem.acceleratorForeground", theme.getAltForegroundColor()); } @Override public String getName() { @@ -306,23 +221,23 @@ protected void initMCreatorThemeColors(UIDefaults table) { } @Override protected ColorUIResource getPrimary1() { - return new ColorUIResource(colorScheme.getBackgroundColor()); + return new ColorUIResource(theme.getBackgroundColor()); } @Override protected ColorUIResource getPrimary2() { - return new ColorUIResource(MAIN_TINT); + return new ColorUIResource(theme.getInterfaceAccentColor()); } @Override protected ColorUIResource getPrimary3() { - return new ColorUIResource(MAIN_TINT); + return new ColorUIResource(theme.getInterfaceAccentColor()); } @Override protected ColorUIResource getSecondary1() { - return new ColorUIResource(colorScheme.getAltBackgroundColor()); + return new ColorUIResource(theme.getAltBackgroundColor()); } @Override protected ColorUIResource getSecondary2() { - return new ColorUIResource(colorScheme.getAltBackgroundColor()); + return new ColorUIResource(theme.getAltBackgroundColor()); } @Override protected ColorUIResource getSecondary3() { @@ -330,39 +245,39 @@ protected void initMCreatorThemeColors(UIDefaults table) { } @Override public ColorUIResource getControl() { - return new ColorUIResource(colorScheme.getAltBackgroundColor()); + return new ColorUIResource(theme.getAltBackgroundColor()); } @Override public ColorUIResource getControlHighlight() { - return new ColorUIResource(colorScheme.getAltBackgroundColor()); + return new ColorUIResource(theme.getAltBackgroundColor()); } @Override public ColorUIResource getPrimaryControlHighlight() { - return new ColorUIResource(colorScheme.getAltForegroundColor()); + return new ColorUIResource(theme.getAltForegroundColor()); } @Override public FontUIResource getControlTextFont() { - return new FontUIResource(default_font); + return new FontUIResource(theme.getFont()); } @Override public FontUIResource getSystemTextFont() { - return new FontUIResource(default_font); + return new FontUIResource(theme.getFont()); } @Override public FontUIResource getUserTextFont() { - return new FontUIResource(default_font); + return new FontUIResource(theme.getFont()); } @Override public FontUIResource getMenuTextFont() { - return new FontUIResource(default_font); + return new FontUIResource(theme.getFont()); } @Override public FontUIResource getWindowTitleFont() { - return new FontUIResource(default_font); + return new FontUIResource(theme.getFont()); } @Override public FontUIResource getSubTextFont() { - return new FontUIResource(default_font); + return new FontUIResource(theme.getFont()); } } diff --git a/src/main/java/net/mcreator/ui/laf/RadioButtonIcon.java b/src/main/java/net/mcreator/ui/laf/RadioButtonIcon.java index 4646fc6375c..79f0550d28f 100644 --- a/src/main/java/net/mcreator/ui/laf/RadioButtonIcon.java +++ b/src/main/java/net/mcreator/ui/laf/RadioButtonIcon.java @@ -18,6 +18,8 @@ package net.mcreator.ui.laf; +import net.mcreator.ui.laf.themes.Theme; + import javax.swing.*; import java.awt.*; @@ -33,20 +35,20 @@ private int getControlSize() { int controlSize = getControlSize(); if (model.isEnabled()) { if (model.isPressed() && model.isArmed()) { - g.setColor(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).brighter()); + g.setColor((Theme.current().getAltBackgroundColor()).brighter()); g.fillOval(x, y, controlSize - 1, controlSize - 1); } else if (model.isRollover()) { - g.setColor(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker()); + g.setColor((Theme.current().getAltBackgroundColor()).darker()); g.fillOval(x, y, controlSize - 1, controlSize - 1); } else { - g.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g.setColor(Theme.current().getAltBackgroundColor()); g.fillOval(x, y, controlSize - 1, controlSize - 1); } - g.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + g.setColor(Theme.current().getInterfaceAccentColor()); } else { - g.setColor((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + g.setColor(Theme.current().getBackgroundColor()); g.fillOval(x, y, controlSize - 1, controlSize - 1); } diff --git a/src/main/java/net/mcreator/ui/laf/SlickDarkScrollBarUI.java b/src/main/java/net/mcreator/ui/laf/SlickDarkScrollBarUI.java index 572f49ac2d6..5a238e73d59 100644 --- a/src/main/java/net/mcreator/ui/laf/SlickDarkScrollBarUI.java +++ b/src/main/java/net/mcreator/ui/laf/SlickDarkScrollBarUI.java @@ -18,6 +18,8 @@ package net.mcreator.ui.laf; +import net.mcreator.ui.laf.themes.Theme; + import javax.swing.*; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicScrollBarUI; @@ -35,8 +37,8 @@ public class SlickDarkScrollBarUI extends BasicScrollBarUI { private final boolean hasButtons; public static ComponentUI createUI(JComponent var0) { - return new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), var0); + return new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), Theme.current().getAltBackgroundColor(), + var0); } public SlickDarkScrollBarUI(Color bg, Color fg, final JComponent bar) { @@ -72,6 +74,7 @@ public SlickDarkScrollBarUI(Color bg, Color fg, final JComponent bar, boolean ha @Override public void mouseDragged(MouseEvent mouseEvent) { super.mouseDragged(mouseEvent); drag = true; + bar.repaint(); } }); } diff --git a/src/main/java/net/mcreator/ui/laf/renderer/AstTreeCellRendererCustom.java b/src/main/java/net/mcreator/ui/laf/renderer/AstTreeCellRendererCustom.java index 00ca721a5c8..027aa50f64d 100644 --- a/src/main/java/net/mcreator/ui/laf/renderer/AstTreeCellRendererCustom.java +++ b/src/main/java/net/mcreator/ui/laf/renderer/AstTreeCellRendererCustom.java @@ -22,6 +22,7 @@ import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.ide.json.JsonTree; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -36,9 +37,9 @@ public class AstTreeCellRendererCustom extends DefaultTreeCellRenderer { private static final Logger LOG = LogManager.getLogger(AstTreeCellRendererCustom.class); public AstTreeCellRendererCustom() { - setBorderSelectionColor((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - setBackgroundSelectionColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + setBorderSelectionColor(Theme.current().getBackgroundColor()); + setBackground(Theme.current().getBackgroundColor()); + setBackgroundSelectionColor(Theme.current().getInterfaceAccentColor()); ComponentUtils.deriveFont(this, 11); } @@ -49,11 +50,11 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean setOpaque(true); if (!sel) { - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setBackground(Theme.current().getBackgroundColor()); + setForeground(Theme.current().getForegroundColor()); } else { - setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getInterfaceAccentColor()); + setForeground(Theme.current().getBackgroundColor()); } if (value instanceof JsonTree.JsonObjectNode) { diff --git a/src/main/java/net/mcreator/ui/laf/renderer/MinecraftCompletionCellRenderer.java b/src/main/java/net/mcreator/ui/laf/renderer/MinecraftCompletionCellRenderer.java index bd4d549b7ac..95f0102cf5c 100644 --- a/src/main/java/net/mcreator/ui/laf/renderer/MinecraftCompletionCellRenderer.java +++ b/src/main/java/net/mcreator/ui/laf/renderer/MinecraftCompletionCellRenderer.java @@ -19,7 +19,7 @@ package net.mcreator.ui.laf.renderer; import net.mcreator.ui.init.BlockItemIcons; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; import org.fife.rsta.ac.java.JavaCellRenderer; import org.fife.ui.autocomplete.Completion; @@ -55,12 +55,12 @@ public Component getListCellRendererComponent(JList list, Object value, int inde } } - setFont(MCreatorTheme.console_font.deriveFont(12.0f)); + setFont(Theme.current().getConsoleFont().deriveFont(12.0f)); if (selected) { setBackground(new Color(0, 58, 80)); } else { - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); } setOpaque(false); diff --git a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/DetailsIconModListRender.java b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/DetailsIconModListRender.java index e0a5eecd65a..e292980510b 100644 --- a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/DetailsIconModListRender.java +++ b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/DetailsIconModListRender.java @@ -21,9 +21,8 @@ import net.mcreator.minecraft.MCItem; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; -import net.mcreator.ui.init.TiledImageCache; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.IElement; import net.mcreator.workspace.elements.ModElement; @@ -34,115 +33,77 @@ public class DetailsIconModListRender extends JPanel implements ListCellRenderer { + private final JLabel label = new JLabel(); + private final JLabel label2 = new JLabel(); + private final JLabel label3 = new JLabel(); + private final JLabel label4 = new JLabel(); + private final JLabel label5 = new JLabel(); + private final JLabel icon = new JLabel(); + public DetailsIconModListRender() { setLayout(new BorderLayout(15, 0)); + setBorder(null); + setBackground(Theme.current().getForegroundColor()); + + label.setFont(Theme.current().getSecondaryFont().deriveFont(14.0f)); + label2.setFont(Theme.current().getSecondaryFont().deriveFont(14.0f)); + label3.setFont(Theme.current().getSecondaryFont().deriveFont(12.0f)); + label4.setFont(Theme.current().getSecondaryFont().deriveFont(12.0f)); + label5.setFont(Theme.current().getSecondaryFont().deriveFont(12.0f)); + icon.setBorder(BorderFactory.createEmptyBorder(0, 9, 0, 0)); + + add("Center", PanelUtils.gridElements(1, 6, label, label2, label3, label4, label5)); + add("West", icon); } @Override public Component getListCellRendererComponent(JList list, IElement element, int index, boolean isSelected, boolean cellHasFocus) { - removeAll(); - setBorder(null); - - JLabel label = new JLabel(); - JLabel label2 = new JLabel(); - JLabel label3 = new JLabel(); - JLabel label4 = new JLabel(); - JLabel label5 = new JLabel(); - - JLabel icon = new JLabel(); - if (element != null) { - if (isSelected) { - label.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label2.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label2.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label3.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label3.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label4.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label4.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label5.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label5.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - setOpaque(true); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - } else { - label.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label2.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label3.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label4.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label5.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - setOpaque(false); - } - - label.setFont(MCreatorTheme.secondary_font.deriveFont(14.0f)); - label2.setFont(MCreatorTheme.secondary_font.deriveFont(14.0f)); - label3.setFont(MCreatorTheme.secondary_font.deriveFont(12.0f)); - label4.setFont(MCreatorTheme.secondary_font.deriveFont(12.0f)); - label5.setFont(MCreatorTheme.secondary_font.deriveFont(12.0f)); - - ImageIcon dva = null; - - label.setText(element.getName()); - label.setText(StringUtils.abbreviate(label.getText(), 24)); - - if (element instanceof ModElement ma) { - label2.setText(ma.getRegistryName()); - label2.setText(StringUtils.abbreviate(label2.getText(), 24)); - label3.setText(ma.getType().getReadableName()); - label4.setText(ma.isCodeLocked() ? - L10N.t("workspace.elements.list.locked") : - L10N.t("workspace.elements.list.notlocked")); - label5.setText(ma.doesCompile() ? - L10N.t("workspace.elements.list.compiles") : - L10N.t("workspace.elements.list.compile_errors")); - - if (!ma.doesCompile()) { - dva = TiledImageCache.modTabRed; - } - - if (ma.isCodeLocked()) { - if (dva != null) { - dva = ImageUtils.drawOver(dva, TiledImageCache.modTabPurple); - } else { - dva = TiledImageCache.modTabPurple; - } - } - } else { - label2.setText("-"); - label3.setText(L10N.t("workspace.elements.list.folder")); - label4.setText("-"); - label5.setText("-"); - } + if (isSelected) { + setOpaque(true); + label.setForeground(Theme.current().getBackgroundColor()); + label2.setForeground(Theme.current().getBackgroundColor()); + label3.setForeground(Theme.current().getBackgroundColor()); + label4.setForeground(Theme.current().getBackgroundColor()); + label5.setForeground(Theme.current().getBackgroundColor()); + } else { + setOpaque(false); + label.setForeground(Theme.current().getForegroundColor()); + label2.setForeground(Theme.current().getForegroundColor()); + label3.setForeground(Theme.current().getForegroundColor()); + label4.setForeground(Theme.current().getForegroundColor()); + label5.setForeground(Theme.current().getForegroundColor()); + } - ImageIcon modIcon = element instanceof ModElement ? - ((ModElement) element).getElementIcon() : - UIRES.get("laf.directory.gif"); + label.setText(StringUtils.abbreviate(element.getName(), 24)); + if (element instanceof ModElement ma) { + label2.setText(StringUtils.abbreviate(ma.getRegistryName(), 24)); + label3.setText(ma.getType().getReadableName()); + label4.setText(ma.isCodeLocked() ? + L10N.t("workspace.elements.list.locked") : + L10N.t("workspace.elements.list.notlocked")); + label5.setText(ma.doesCompile() ? + L10N.t("workspace.elements.list.compiles") : + L10N.t("workspace.elements.list.compile_errors")); + } else { + label2.setText("-"); + label3.setText(L10N.t("workspace.elements.list.folder")); + label4.setText("-"); + label5.setText("-"); + } - if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 - && modIcon.getIconHeight() > 0 && modIcon != MCItem.DEFAULT_ICON) { - if (dva != null) { - ImageIcon iconbig = ImageUtils.drawOver(modIcon, dva); - icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 16))); - } else { - icon.setIcon(new ImageIcon(ImageUtils.resize(modIcon.getImage(), 16))); - } - } else if (element instanceof ModElement) { - if (dva != null) { - ImageIcon iconbig = ImageUtils.drawOver(((ModElement) element).getType().getIcon(), dva); - icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 16))); - } else { - icon.setIcon(new ImageIcon( - ImageUtils.resize(((ModElement) element).getType().getIcon().getImage(), 16))); - } - } + ImageIcon modIcon = element instanceof ModElement ? + ((ModElement) element).getElementIcon() : + UIRES.get("laf.directory.gif"); - setToolTipText(element.getName()); + if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 && modIcon.getIconHeight() > 0 + && modIcon != MCItem.DEFAULT_ICON) { + icon.setIcon(new ImageIcon(ImageUtils.resize(modIcon.getImage(), 16))); + } else if (element instanceof ModElement) { + icon.setIcon(new ImageIcon(ImageUtils.resize(((ModElement) element).getType().getIcon().getImage(), 16))); } + setToolTipText(element.getName()); - icon.setBorder(BorderFactory.createEmptyBorder(0, 9, 0, 0)); - - add("Center", PanelUtils.gridElements(1, 6, label, label2, label3, label4, label5)); - add("West", icon); return this; } diff --git a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/LargeIconModListRender.java b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/LargeIconModListRender.java index 9d21cfee717..bab65147029 100644 --- a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/LargeIconModListRender.java +++ b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/LargeIconModListRender.java @@ -22,7 +22,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.TiledImageCache; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.StringUtils; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.FolderElement; @@ -34,78 +34,72 @@ public class LargeIconModListRender extends JPanel implements ListCellRenderer { + private final JLabel label = new JLabel(); + private final JLabel icon = new JLabel(); + public LargeIconModListRender() { setLayout(new BorderLayout()); + setBorder(null); + setBackground(Theme.current().getForegroundColor()); + + label.setFont(Theme.current().getSecondaryFont().deriveFont(13.0f)); + + add("South", PanelUtils.centerInPanel(label)); + add("Center", PanelUtils.centerInPanel(icon)); } @Override public Component getListCellRendererComponent(JList list, IElement element, int index, boolean isSelected, boolean cellHasFocus) { - removeAll(); - setBorder(null); + if (isSelected) { + setOpaque(true); + label.setForeground(Theme.current().getBackgroundColor()); + } else { + setOpaque(false); + label.setForeground(Theme.current().getForegroundColor()); + } - JLabel label = new JLabel(); - JLabel icon = new JLabel(); + label.setText(StringUtils.abbreviateString(element.getName(), 14)); - if (element != null) { - if (isSelected) { - label.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - setOpaque(true); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - } else { - label.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - setOpaque(false); + ImageIcon dva = null; + if (element instanceof ModElement ma) { + if (!ma.doesCompile()) { + dva = TiledImageCache.modTabRed; } - - label.setText(StringUtils.abbreviateString(element.getName(), 14)); - label.setFont(MCreatorTheme.secondary_font.deriveFont(13.0f)); - - ImageIcon dva = null; - - if (element instanceof ModElement ma) { - if (!ma.doesCompile()) { - dva = TiledImageCache.modTabRed; - } - - if (ma.isCodeLocked()) { - if (dva != null) { - dva = ImageUtils.drawOver(dva, TiledImageCache.modTabPurple); - } else { - dva = TiledImageCache.modTabPurple; - } + if (ma.isCodeLocked()) { + if (dva != null) { + dva = ImageUtils.drawOver(dva, TiledImageCache.modTabPurple); + } else { + dva = TiledImageCache.modTabPurple; } } + } + + if (element instanceof FolderElement) { + icon.setIcon(new ImageIcon(ImageUtils.resize(UIRES.get("folder").getImage(), 64))); + } else if (element instanceof ModElement) { + ImageIcon modIcon = ((ModElement) element).getElementIcon(); - if (element instanceof FolderElement) { - icon.setIcon(new ImageIcon(ImageUtils.resize(UIRES.get("folder").getImage(), 64))); - } else if (element instanceof ModElement) { - ImageIcon modIcon = ((ModElement) element).getElementIcon(); - - if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 - && modIcon.getIconHeight() > 0 && modIcon != MCItem.DEFAULT_ICON) { - if (dva != null) { - ImageIcon iconbig = ImageUtils.drawOver(modIcon, dva); - icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 64))); - } else { - icon.setIcon(new ImageIcon(ImageUtils.resize(modIcon.getImage(), 64))); - } + if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 + && modIcon.getIconHeight() > 0 && modIcon != MCItem.DEFAULT_ICON) { + if (dva != null) { + ImageIcon iconbig = ImageUtils.drawOver(modIcon, dva); + icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 64))); } else { - if (dva != null) { - ImageIcon iconbig = ImageUtils.drawOver(((ModElement) element).getType().getIcon(), dva); - icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 64))); - } else { - icon.setIcon(new ImageIcon( - ImageUtils.resizeAA(((ModElement) element).getType().getIcon().getImage(), 64))); - } + icon.setIcon(new ImageIcon(ImageUtils.resize(modIcon.getImage(), 64))); + } + } else { + if (dva != null) { + ImageIcon iconbig = ImageUtils.drawOver(((ModElement) element).getType().getIcon(), dva); + icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 64))); + } else { + icon.setIcon(new ImageIcon( + ImageUtils.resizeAA(((ModElement) element).getType().getIcon().getImage(), 64))); } } - - setToolTipText(element.getName()); } - add("South", PanelUtils.centerInPanel(label)); - add("Center", PanelUtils.centerInPanel(icon)); + setToolTipText(element.getName()); return this; } diff --git a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/ListIconModListRender.java b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/ListIconModListRender.java index 3b0c3eaa16c..5b415c07e96 100644 --- a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/ListIconModListRender.java +++ b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/ListIconModListRender.java @@ -21,7 +21,7 @@ import net.mcreator.minecraft.MCItem; import net.mcreator.ui.init.TiledImageCache; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.StringUtils; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.FolderElement; @@ -33,81 +33,73 @@ public class ListIconModListRender extends JPanel implements ListCellRenderer { + private final JLabel label = new JLabel(); + private final JLabel icon = new JLabel(); + public ListIconModListRender() { setLayout(new BorderLayout(5, 0)); + setBorder(null); + setBackground(Theme.current().getForegroundColor()); + + icon.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + label.setFont(Theme.current().getSecondaryFont().deriveFont(14.0f)); + add("Center", label); + add("West", icon); } @Override public Component getListCellRendererComponent(JList list, IElement element, int index, boolean isSelected, boolean cellHasFocus) { - removeAll(); - setBorder(null); + if (isSelected) { + setOpaque(true); + label.setForeground(Theme.current().getBackgroundColor()); + } else { + setOpaque(false); + label.setForeground(Theme.current().getForegroundColor()); + } - JLabel label = new JLabel(); + label.setText(StringUtils.abbreviateString(element.getName(), 200)); - JLabel icon = new JLabel(); - if (element != null) { - if (isSelected) { - label.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - setOpaque(true); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - } else { - label.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - setOpaque(false); + ImageIcon dva = null; + if (element instanceof ModElement ma) { + if (!ma.doesCompile()) { + dva = TiledImageCache.modTabRed; } - - label.setText(StringUtils.abbreviateString(element.getName(), 200)); - label.setFont(MCreatorTheme.secondary_font.deriveFont(14.0f)); - - ImageIcon dva = null; - - if (element instanceof ModElement ma) { - if (!ma.doesCompile()) { - dva = TiledImageCache.modTabRed; - } - - if (ma.isCodeLocked()) { - if (dva != null) { - dva = ImageUtils.drawOver(dva, TiledImageCache.modTabPurple); - } else { - dva = TiledImageCache.modTabPurple; - } + if (ma.isCodeLocked()) { + if (dva != null) { + dva = ImageUtils.drawOver(dva, TiledImageCache.modTabPurple); + } else { + dva = TiledImageCache.modTabPurple; } } + } - if (element instanceof FolderElement) { - icon.setIcon(new ImageIcon(ImageUtils.resize(UIRES.get("folder").getImage(), 22))); - } else if (element instanceof ModElement) { - ImageIcon modIcon = ((ModElement) element).getElementIcon(); + if (element instanceof FolderElement) { + icon.setIcon(new ImageIcon(ImageUtils.resize(UIRES.get("folder").getImage(), 22))); + } else if (element instanceof ModElement) { + ImageIcon modIcon = ((ModElement) element).getElementIcon(); - if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 - && modIcon.getIconHeight() > 0 && modIcon != MCItem.DEFAULT_ICON) { - if (dva != null) { - ImageIcon iconbig = ImageUtils.drawOver(modIcon, dva); - icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 22))); - } else { - icon.setIcon(new ImageIcon(ImageUtils.resize(modIcon.getImage(), 22))); - } + if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 + && modIcon.getIconHeight() > 0 && modIcon != MCItem.DEFAULT_ICON) { + if (dva != null) { + ImageIcon iconbig = ImageUtils.drawOver(modIcon, dva); + icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 22))); + } else { + icon.setIcon(new ImageIcon(ImageUtils.resize(modIcon.getImage(), 22))); + } + } else { + if (dva != null) { + ImageIcon iconbig = ImageUtils.drawOver(((ModElement) element).getType().getIcon(), dva); + icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 22))); } else { - if (dva != null) { - ImageIcon iconbig = ImageUtils.drawOver(((ModElement) element).getType().getIcon(), dva); - icon.setIcon(new ImageIcon(ImageUtils.resize(iconbig.getImage(), 22))); - } else { - icon.setIcon(new ImageIcon( - ImageUtils.resizeAA(((ModElement) element).getType().getIcon().getImage(), 22))); - } + icon.setIcon(new ImageIcon( + ImageUtils.resizeAA(((ModElement) element).getType().getIcon().getImage(), 22))); } } - - setToolTipText(element.getName()); } - icon.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); - - add("Center", label); - add("West", icon); + setToolTipText(element.getName()); return this; } diff --git a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/MediumIconModListRender.java b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/MediumIconModListRender.java index 77fbab5b094..8a615df90b8 100644 --- a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/MediumIconModListRender.java +++ b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/MediumIconModListRender.java @@ -22,7 +22,7 @@ import net.mcreator.minecraft.MCItem; import net.mcreator.ui.init.TiledImageCache; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.StringUtils; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.FolderElement; @@ -34,41 +34,41 @@ public class MediumIconModListRender extends JPanel implements ListCellRenderer { + private final JLabel label = new JLabel(); + private final JLabel icon = new JLabel(); + public MediumIconModListRender() { setLayout(new BorderLayout(5, 0)); + setBorder(null); + setBackground(Theme.current().getForegroundColor()); + + label.setFont(Theme.current().getSecondaryFont().deriveFont(19.0f)); + + icon.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); + add("Center", label); + add("West", icon); } @Override public Component getListCellRendererComponent(JList list, IElement element, int index, boolean isSelected, boolean cellHasFocus) { - removeAll(); - setBorder(null); - - JLabel label = new JLabel(); - - JLabel icon = new JLabel(); if (element != null) { if (isSelected) { - label.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); setOpaque(true); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + label.setForeground(Theme.current().getBackgroundColor()); } else { - label.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); setOpaque(false); + label.setForeground(Theme.current().getForegroundColor()); } label.setText(StringUtils.abbreviateString(element.getName(), 25)); - label.setFont(MCreatorTheme.secondary_font.deriveFont(19.0f)); ImageIcon dva = null; - if (element instanceof ModElement ma) { if (!ma.doesCompile()) { dva = TiledImageCache.modTabRed; } - if (ma.isCodeLocked()) { if (dva != null) { dva = ImageUtils.drawOver(dva, TiledImageCache.modTabPurple); @@ -82,7 +82,6 @@ public Component getListCellRendererComponent(JList list, IE icon.setIcon(new ImageIcon(ImageUtils.resize(UIRES.get("folder").getImage(), 42))); } else if (element instanceof ModElement) { ImageIcon modIcon = ((ModElement) element).getElementIcon(); - if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 && modIcon.getIconHeight() > 0 && modIcon != MCItem.DEFAULT_ICON) { if (dva != null) { @@ -105,11 +104,6 @@ public Component getListCellRendererComponent(JList list, IE setToolTipText(element.getName()); } - icon.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6)); - - add("Center", label); - add("West", icon); - return this; } diff --git a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/SmallIconModListRender.java b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/SmallIconModListRender.java index 18db8a406a1..d398ed5281e 100644 --- a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/SmallIconModListRender.java +++ b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/SmallIconModListRender.java @@ -21,7 +21,7 @@ import net.mcreator.minecraft.MCItem; import net.mcreator.ui.init.TiledImageCache; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.StringUtils; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.FolderElement; @@ -33,45 +33,41 @@ public class SmallIconModListRender extends JPanel implements ListCellRenderer { - private final boolean showText; + private final JLabel label = new JLabel(); + private final JLabel icon = new JLabel(); public SmallIconModListRender(boolean showText) { - if (showText) + if (showText) { setLayout(new BorderLayout(5, 0)); + add("Center", label); + } - this.showText = showText; + add("West", icon); + setBorder(null); + setBackground(Theme.current().getForegroundColor()); + + label.setFont(Theme.current().getSecondaryFont().deriveFont(18.0f)); } @Override public Component getListCellRendererComponent(JList list, IElement element, int index, boolean isSelected, boolean cellHasFocus) { - removeAll(); - setBorder(null); - - JLabel label = new JLabel(); - - JLabel icon = new JLabel(); if (element != null) { if (isSelected) { - label.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); setOpaque(true); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + label.setForeground(Theme.current().getBackgroundColor()); } else { - label.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); setOpaque(false); + label.setForeground(Theme.current().getForegroundColor()); } label.setText(StringUtils.abbreviateString(element.getName(), 24)); - label.setFont(MCreatorTheme.secondary_font.deriveFont(18.0f)); ImageIcon dva = null; - if (element instanceof ModElement ma) { if (!ma.doesCompile()) { dva = TiledImageCache.modTabRed; } - if (ma.isCodeLocked()) { if (dva != null) { dva = ImageUtils.drawOver(dva, TiledImageCache.modTabPurple); @@ -85,7 +81,6 @@ public Component getListCellRendererComponent(JList list, IE icon.setIcon(new ImageIcon(ImageUtils.resize(UIRES.get("folder").getImage(), 25))); } else if (element instanceof ModElement) { ImageIcon modIcon = ((ModElement) element).getElementIcon(); - if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 && modIcon.getIconHeight() > 0 && modIcon != MCItem.DEFAULT_ICON) { if (dva != null) { @@ -108,10 +103,6 @@ public Component getListCellRendererComponent(JList list, IE setToolTipText(element.getName()); } - if (showText) - add("Center", label); - - add("West", icon); return this; } diff --git a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/TilesModListRender.java b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/TilesModListRender.java index ea82116c4bf..b1bd0af4dd0 100644 --- a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/TilesModListRender.java +++ b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/TilesModListRender.java @@ -19,10 +19,9 @@ package net.mcreator.ui.laf.renderer.elementlist; import net.mcreator.minecraft.MCItem; -import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.TiledImageCache; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.StringUtils; import net.mcreator.util.image.ImageUtils; import net.mcreator.workspace.elements.FolderElement; @@ -34,56 +33,59 @@ public class TilesModListRender extends JPanel implements ListCellRenderer { + private final JLabel label = new JLabel(); + private final JLabel label_details = new JLabel(); + private final JLabel icon = new JLabel(); + private final JPanel text = new JPanel(new BorderLayout(0, 0)); + public TilesModListRender() { super(new BorderLayout(0, 0)); + setBorder(null); + setBackground(Theme.current().getForegroundColor()); + + label.setFont(Theme.current().getSecondaryFont().deriveFont(24.0f)); + text.setOpaque(false); + text.add("Center", label); + text.add("South", label_details); + add("Center", text); + add("West", icon); } @Override public Component getListCellRendererComponent(JList list, IElement element, int index, boolean isSelected, boolean cellHasFocus) { - removeAll(); - setBorder(null); - - JLabel label = new JLabel(); - JLabel label_details = new JLabel(); - - JLabel icon = new JLabel(); if (element != null) { if (isSelected) { - label.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label_details.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - label.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label_details.setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); setOpaque(true); + label.setForeground(Theme.current().getBackgroundColor()); + label_details.setForeground(Theme.current().getBackgroundColor()); } else { - label.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - label_details.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); setOpaque(false); + label.setForeground(Theme.current().getForegroundColor()); + label_details.setForeground(Theme.current().getForegroundColor()); } label.setText(StringUtils.abbreviateString(element.getName(), 18)); - label.setFont(MCreatorTheme.secondary_font.deriveFont(24.0f)); - ImageIcon dva = null; - - if (element instanceof ModElement ma) { - JPanel text = new JPanel(); - text.setLayout(new BoxLayout(text, BoxLayout.PAGE_AXIS)); - text.setOpaque(false); - text.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); - - label_details.setText( - "
          " + ma.getType().getDescription()); + if (element instanceof ModElement modElement) { + label_details.setText("
          " + modElement.getType().getDescription()); + text.setBorder(BorderFactory.createEmptyBorder(0, 5, 10, 0)); + } else { + label_details.setText(""); + text.setBorder(BorderFactory.createEmptyBorder(0, 5, 6, 0)); + } - if (!ma.doesCompile()) { + if (element instanceof FolderElement) { + icon.setIcon(UIRES.get("folder")); + } else if (element instanceof ModElement modElement) { + ImageIcon dva = null; + if (!modElement.doesCompile()) { dva = TiledImageCache.modTabRed; } - - if (ma.isCodeLocked()) { + if (modElement.isCodeLocked()) { if (dva != null) { dva = ImageUtils.drawOver(dva, TiledImageCache.modTabPurple); } else { @@ -91,23 +93,7 @@ public Component getListCellRendererComponent(JList list, IE } } - text.add(label); - text.add(label_details); - - add("Center", text); - add("West", icon); - } else { - label.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 0)); - - add("Center", PanelUtils.join(FlowLayout.LEFT, label)); - add("West", icon); - } - - if (element instanceof FolderElement) { - icon.setIcon(UIRES.get("folder")); - } else if (element instanceof ModElement) { - ImageIcon modIcon = ((ModElement) element).getElementIcon(); - + ImageIcon modIcon = modElement.getElementIcon(); if (modIcon != null && modIcon.getImage() != null && modIcon.getIconWidth() > 0 && modIcon.getIconHeight() > 0 && modIcon != MCItem.DEFAULT_ICON) { if (dva != null) { @@ -118,9 +104,9 @@ public Component getListCellRendererComponent(JList list, IE } } else { if (dva != null) { - icon.setIcon(ImageUtils.drawOver(((ModElement) element).getType().getIcon(), dva)); + icon.setIcon(ImageUtils.drawOver(modElement.getType().getIcon(), dva)); } else { - icon.setIcon(((ModElement) element).getType().getIcon()); + icon.setIcon(modElement.getType().getIcon()); } } } diff --git a/src/main/java/net/mcreator/ui/laf/renderer/elementlist/special/CompactModElementListCellRenderer.java b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/special/CompactModElementListCellRenderer.java new file mode 100644 index 00000000000..1403c8eddfc --- /dev/null +++ b/src/main/java/net/mcreator/ui/laf/renderer/elementlist/special/CompactModElementListCellRenderer.java @@ -0,0 +1,50 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.laf.renderer.elementlist.special; + +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.util.StringUtils; +import net.mcreator.util.image.ImageUtils; +import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.elements.ModElementManager; + +import javax.swing.*; +import java.awt.*; + +public class CompactModElementListCellRenderer implements ListCellRenderer { + + @Override + public Component getListCellRendererComponent(JList list, ModElement value, int index, + boolean isSelected, boolean cellHasFocus) { + JLabel label = L10N.label("workspace.elements.list.special.item", + StringUtils.abbreviateString(value.getName(), 20), value.getType().getReadableName()); + label.setOpaque(true); + label.setIcon(new ImageIcon(ImageUtils.resizeAA(ModElementManager.getModElementIcon(value).getImage(), 32))); + label.setIconTextGap(10); + label.setBackground( + isSelected ? Theme.current().getForegroundColor() : Theme.current().getSecondAltBackgroundColor()); + label.setForeground( + isSelected ? Theme.current().getBackgroundColor() : Theme.current().getAltForegroundColor()); + label.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + return label; + } + +} diff --git a/src/main/java/net/mcreator/themes/ColorScheme.java b/src/main/java/net/mcreator/ui/laf/themes/ColorScheme.java similarity index 55% rename from src/main/java/net/mcreator/themes/ColorScheme.java rename to src/main/java/net/mcreator/ui/laf/themes/ColorScheme.java index a5543ab14c3..fc20a7619c0 100644 --- a/src/main/java/net/mcreator/themes/ColorScheme.java +++ b/src/main/java/net/mcreator/ui/laf/themes/ColorScheme.java @@ -17,8 +17,9 @@ * along with this program. If not, see . */ -package net.mcreator.themes; +package net.mcreator.ui.laf.themes; +import net.mcreator.preferences.PreferencesManager; import net.mcreator.preferences.data.PreferencesData; import javax.annotation.Nullable; @@ -32,6 +33,8 @@ */ public class ColorScheme { + public static final Color MAIN_TINT_DEFAULT = new Color(0x93c54b); + private String backgroundColor; private String altBackgroundColor; private String secondAltBackgroundColor; @@ -39,47 +42,72 @@ public class ColorScheme { private String foregroundColor; private String altForegroundColor; - @Nullable String interfaceAccentColor; + @Nullable private String interfaceAccentColor; + + // Caches + private transient Color backgroundColorCache; + private transient Color altBackgroundColorCache; + private transient Color secondAltBackgroundColorCache; + private transient Color foregroundColorCache; + private transient Color altForegroundColorCache; + private transient Color interfaceAccentColorCache; + + protected void init() { + this.backgroundColorCache = Color.decode(backgroundColor); + this.altBackgroundColorCache = Color.decode(altBackgroundColor); + this.secondAltBackgroundColorCache = Color.decode(secondAltBackgroundColor); + this.foregroundColorCache = Color.decode(foregroundColor); + this.altForegroundColorCache = Color.decode(altForegroundColor); + + interfaceAccentColorCache = PreferencesManager.PREFERENCES.ui.interfaceAccentColor.get(); + if (interfaceAccentColor != null) { + try { + interfaceAccentColorCache = Color.decode(interfaceAccentColor); + } catch (NumberFormatException ignored) { + } + } + } /** * @return Background of UI panels */ public Color getBackgroundColor() { - return Color.decode(backgroundColor); + return backgroundColorCache; } /** * @return Background of components (e.g. text fields, checkboxes and sound selectors) */ public Color getAltBackgroundColor() { - return Color.decode(altBackgroundColor); + return altBackgroundColorCache; } /** * @return Second background color used (e.g. workspace background) */ public Color getSecondAltBackgroundColor() { - return Color.decode(secondAltBackgroundColor); + return secondAltBackgroundColorCache; } /** * @return

          Secondary text color

          */ public Color getAltForegroundColor() { - return Color.decode(altForegroundColor); + return altForegroundColorCache; } /** * @return

          Color used for most of texts

          */ public Color getForegroundColor() { - return Color.decode(foregroundColor); + return foregroundColorCache; } /** - * @return

          Overrides the interfaceAccentColor defined by the user in {@link PreferencesData}

          + * @return

          Returns the interfaceAccentColor if defined by theme, otherwise the one defined by the user in {@link PreferencesData}

          */ - @Nullable public String getInterfaceAccentColor() { - return interfaceAccentColor; + public Color getInterfaceAccentColor() { + return interfaceAccentColorCache; } + } diff --git a/src/main/java/net/mcreator/ui/laf/themes/Theme.java b/src/main/java/net/mcreator/ui/laf/themes/Theme.java new file mode 100644 index 00000000000..47747b0baf3 --- /dev/null +++ b/src/main/java/net/mcreator/ui/laf/themes/Theme.java @@ -0,0 +1,251 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2021, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.laf.themes; + +import net.mcreator.plugin.PluginLoader; +import net.mcreator.preferences.data.PreferencesData; +import net.mcreator.ui.init.L10N; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.annotation.Nullable; +import javax.swing.*; +import java.awt.*; +import java.io.IOException; +import java.io.InputStream; + +/** + *

          A Theme can change images MCreator will use and redefine the colors and the style + * of {@link net.mcreator.ui.blockly.BlocklyPanel} and {@link net.mcreator.ui.ide.RSyntaxTextAreaStyler} by creating a new {@link ColorScheme}

          . + */ +@SuppressWarnings("unused") public class Theme { + + private static final Logger LOG = LogManager.getLogger(Theme.class); + + public static Theme current() { + return ThemeLoader.CURRENT_THEME; + } + + protected String id; + private String name; + + @Nullable private String description; + @Nullable private String version; + @Nullable private String credits; + @Nullable private String defaultFont; + private boolean useDefaultFontForSecondary; + private int fontSize; + + @Nullable private ColorScheme colorScheme; + + private transient ImageIcon icon; + + private transient Font defaultThemeFont; + private transient Font secondaryFont; + private transient Font consoleFont; + + protected Theme init() { + if (colorScheme != null) + colorScheme.init(); + + try { + defaultThemeFont = new Font(defaultFont != null ? defaultFont : "Sans-Serif", Font.PLAIN, + this.getFontSize()); + secondaryFont = defaultThemeFont; + + String lang = L10N.getLocale().getLanguage(); + if (!L10N.SYSTEM_FONT_LANGUAGES.contains(lang) && !useDefaultFontForSecondary) { + InputStream secondaryFontStream = PluginLoader.INSTANCE.getResourceAsStream( + "themes/" + id + "/fonts/secondary_font.ttf"); + if (secondaryFontStream != null) { // Font loaded from a file in the theme + secondaryFont = Font.createFont(Font.TRUETYPE_FONT, secondaryFontStream); + } else { // Default secondary front (from the default_dark theme) + secondaryFont = Font.createFont(Font.TRUETYPE_FONT, + PluginLoader.INSTANCE.getResourceAsStream("themes/default_dark/fonts/secondary_font.ttf")); + LOG.info("Main font from default_dark will be used."); + } + } + + InputStream consoleFontStream = PluginLoader.INSTANCE.getResourceAsStream( + "themes/" + id + "/fonts/console_font.ttf"); + if (consoleFontStream != null) { + consoleFont = Font.createFont(Font.TRUETYPE_FONT, consoleFontStream); + } else { + // Default main front (from the default_dark theme) + consoleFont = Font.createFont(Font.TRUETYPE_FONT, + PluginLoader.INSTANCE.getResourceAsStream("themes/default_dark/fonts/console_font.ttf")); + LOG.info("Console font from default_dark will be used."); + } + } catch (NullPointerException | FontFormatException | IOException e2) { + LOG.info("Failed to init MCreator Theme! Error " + e2.getMessage()); + } + + return this; + } + + /** + * The ID is the theme's registry name. It is used to differentiate each theme in the code. + * This ID is also the main folder's name of the theme. + * + * @return

          The theme's ID

          + */ + public String getID() { + return id; + } + + /** + * @return

          Its displayed name

          + */ + public String getName() { + return name; + } + + /** + * @return

          A description displayed in the {@link net.mcreator.ui.dialogs.preferences.ThemesPanel} if provided.

          + */ + public String getDescription() { + // Description inside the JSON file + if (description != null) + return description; + // Localized description + else if (!L10N.t("theme." + id + ".description").equals("theme." + id + ".description")) + return L10N.t("theme." + id + ".description"); + // No description + else + return ""; + } + + /** + * @return

          A String with optional credits to give to someone.

          + */ + @Nullable public String getCredits() { + return credits; + } + + /** + * @return

          The theme's version if provided

          + */ + @Nullable public String getVersion() { + return version; + } + + /** + *

          The main font size changes the size of the text for the main font. Usually, this parameter should not be changed except if the font is too big or too small with the default value.

          + * + * @return

          The main font size

          + */ + public int getFontSize() { + if (fontSize != 0) + return fontSize; + else + return 12; + } + + public Font getFont() { + return defaultThemeFont; + } + + public Font getSecondaryFont() { + return secondaryFont; + } + + public Font getConsoleFont() { + return consoleFont; + } + + /** + *

          This methods gets the {@link ColorScheme} to use with the theme

          + * + * @return Returns the {@link ColorScheme} of the Theme if one is defined. If the Theme does not create a new {@link ColorScheme}, the Dark's theme {@link ColorScheme} will be used. + */ + public ColorScheme getColorScheme() { + if (colorScheme != null) + return colorScheme; + else + return ThemeLoader.getTheme("default_dark").getColorScheme(); + } + + /** + * This icon is only with {@link net.mcreator.ui.dialogs.preferences.ThemesPanel}. + * + * @return

          An {@link ImageIcon} representing the plugin.

          + */ + public ImageIcon getIcon() { + return icon; + } + + /** + *

          To be detected, the name of the image file needs to be "icon.png" located into the main folder.

          + * + * @param icon

          An {@link ImageIcon} to display in {@link net.mcreator.ui.dialogs.preferences.ThemesPanel}

          + */ + public void setIcon(ImageIcon icon) { + this.icon = icon; + } + + @Override public String toString() { + return getID() + ": " + getName(); + } + + // Color scheme getters below (to keep code shorter) + + /** + * @return Background of UI panels + */ + public Color getBackgroundColor() { + return getColorScheme().getBackgroundColor(); + } + + /** + * @return Background of components (e.g. text fields, checkboxes and sound selectors) + */ + public Color getAltBackgroundColor() { + return getColorScheme().getAltBackgroundColor(); + } + + /** + * @return Second background color used (e.g. workspace background) + */ + public Color getSecondAltBackgroundColor() { + return getColorScheme().getSecondAltBackgroundColor(); + } + + /** + * @return

          Secondary text color

          + */ + public Color getAltForegroundColor() { + return getColorScheme().getAltForegroundColor(); + } + + /** + * @return

          Color used for most of texts

          + */ + public Color getForegroundColor() { + return getColorScheme().getForegroundColor(); + } + + /** + * @return

          Returns the interfaceAccentColor if defined by theme, otherwise the one defined by the user in {@link PreferencesData}

          + */ + public Color getInterfaceAccentColor() { + return getColorScheme().getInterfaceAccentColor(); + } + +} diff --git a/src/main/java/net/mcreator/themes/ThemeLoader.java b/src/main/java/net/mcreator/ui/laf/themes/ThemeLoader.java similarity index 81% rename from src/main/java/net/mcreator/themes/ThemeLoader.java rename to src/main/java/net/mcreator/ui/laf/themes/ThemeLoader.java index c6154bd3154..08106619a7b 100644 --- a/src/main/java/net/mcreator/themes/ThemeLoader.java +++ b/src/main/java/net/mcreator/ui/laf/themes/ThemeLoader.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package net.mcreator.themes; +package net.mcreator.ui.laf.themes; import com.google.gson.Gson; import net.mcreator.io.FileIO; @@ -47,10 +47,10 @@ public class ThemeLoader { private static final LinkedHashSet THEMES = new LinkedHashSet<>(); - public static Theme CURRENT_THEME; + protected static Theme CURRENT_THEME; /** - *

          This method loads the {@link net.mcreator.themes.Theme} of all plugins loaded into the current {@link net.mcreator.plugin.PluginLoader} instance.

          + *

          This method loads the {@link Theme} of all plugins loaded into the current {@link net.mcreator.plugin.PluginLoader} instance.

          */ public static void initUIThemes() { LOG.debug("Loading UI themes"); @@ -60,8 +60,8 @@ public static void initUIThemes() { for (String file : files) { Theme theme = gson.fromJson(FileIO.readResourceToString(PluginLoader.INSTANCE, file), Theme.class); - // The ID will be used to get images from this theme if the user select it. - theme.setID(new File(file).getParentFile().getName()); + // Initialize the theme and ID - the ID will be used to get images from this theme if the user select it. + theme.id = new File(file).getParentFile().getName(); // Load the custom icon if provided, otherwise load the default one if (PluginLoader.INSTANCE.getResource("themes/" + theme.getID() + "/icon.png") != null) @@ -71,7 +71,7 @@ public static void initUIThemes() { THEMES.add(theme); } - CURRENT_THEME = getTheme(PreferencesManager.PREFERENCES.hidden.uiTheme.get()); + CURRENT_THEME = getTheme(PreferencesManager.PREFERENCES.hidden.uiTheme.get()).init(); LOG.info("Using MCreator UI theme: " + CURRENT_THEME.getID()); } @@ -80,7 +80,7 @@ public static LinkedHashSet getThemes() { } /** - *

          This method gets the ID of each loaded {@link net.mcreator.themes.Theme}.

          + *

          This method gets the ID of each loaded {@link Theme}.

          * * @return Returns a {@link java.util.List} of all loaded theme IDs */ @@ -92,9 +92,9 @@ public static List getThemeIDList() { *

          This method checks in all loaded themes to get the theme matching the ID.

          * * @param id The theme's id we want to get - * @return Returns the {@link net.mcreator.themes.Theme}, if found in the cache, otherwise null + * @return Returns the {@link Theme}, if found in the cache, otherwise null */ - public static Theme getTheme(String id) { + static Theme getTheme(String id) { for (Theme pack : THEMES) { if (pack.getID().equals(id)) return pack; @@ -107,4 +107,5 @@ public static Theme getTheme(String id) { return getTheme("default_dark"); } + } diff --git a/src/main/java/net/mcreator/ui/minecraft/BiomeListField.java b/src/main/java/net/mcreator/ui/minecraft/BiomeListField.java index 5f58ef6b169..01695caec4b 100644 --- a/src/main/java/net/mcreator/ui/minecraft/BiomeListField.java +++ b/src/main/java/net/mcreator/ui/minecraft/BiomeListField.java @@ -21,6 +21,7 @@ import net.mcreator.element.parts.BiomeEntry; import net.mcreator.minecraft.ElementUtil; +import net.mcreator.minecraft.TagType; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.JItemListField; import net.mcreator.ui.dialogs.AddTagDialog; @@ -49,9 +50,9 @@ public BiomeListField(MCreator mcreator, boolean allowTags) { @Override protected List getTagsToAdd() { List tags = new ArrayList<>(); - String tag = AddTagDialog.openAddTagDialog(mcreator, mcreator, "Biomes", "is_overworld", "is_nether", "is_end", - "is_badlands", "is_beach", "is_deep_ocean", "is_forest", "is_hill", "is_jungle", "is_mountain", - "is_ocean", "is_river", "is_savanna", "is_taiga"); + String tag = AddTagDialog.openAddTagDialog(mcreator, mcreator, TagType.BIOMES, "is_overworld", "is_nether", + "is_end", "is_badlands", "is_beach", "is_deep_ocean", "is_forest", "is_hill", "is_jungle", + "is_mountain", "is_ocean", "is_river", "is_savanna", "is_taiga"); if (tag != null) tags.add(new BiomeEntry(mcreator.getWorkspace(), "#" + tag)); diff --git a/src/main/java/net/mcreator/ui/minecraft/DamageTypeListField.java b/src/main/java/net/mcreator/ui/minecraft/DamageTypeListField.java new file mode 100644 index 00000000000..2652755fa75 --- /dev/null +++ b/src/main/java/net/mcreator/ui/minecraft/DamageTypeListField.java @@ -0,0 +1,60 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.minecraft; + +import net.mcreator.element.parts.DamageTypeEntry; +import net.mcreator.minecraft.ElementUtil; +import net.mcreator.minecraft.TagType; +import net.mcreator.ui.MCreator; +import net.mcreator.ui.component.JItemListField; +import net.mcreator.ui.dialogs.AddTagDialog; +import net.mcreator.ui.dialogs.DataListSelectorDialog; +import net.mcreator.ui.init.L10N; + +import java.util.ArrayList; +import java.util.List; + +public class DamageTypeListField extends JItemListField { + + public DamageTypeListField(MCreator mcreator, boolean allowTags) { + super(mcreator, false, allowTags); + } + + @Override protected List getElementsToAdd() { + return DataListSelectorDialog.openMultiSelectorDialog(mcreator, + w -> ElementUtil.loadDataListAndElements(w, "damagesources", true, null, "damagetype"), + L10N.t("dialog.list_field.damage_type_list_title"), + L10N.t("dialog.list_field.damage_type_list_message")).stream() + .map(e -> new DamageTypeEntry(mcreator.getWorkspace(), e)).toList(); + } + + @Override protected List getTagsToAdd() { + List tags = new ArrayList<>(); + + String tag = AddTagDialog.openAddTagDialog(mcreator, mcreator, TagType.DAMAGE_TYPES, "is_drowning", + "is_explosion", "is_fall", "is_fire", "is_freezing", "is_lightning", "is_projectile", "bypasses_armor", + "bypasses_effects", "bypasses_enchantments", "bypasses_shield"); + if (tag != null) + tags.add(new DamageTypeEntry(mcreator.getWorkspace(), "#" + tag)); + + return tags; + } + +} diff --git a/src/main/java/net/mcreator/ui/minecraft/DataListComboBox.java b/src/main/java/net/mcreator/ui/minecraft/DataListComboBox.java index 370336bcfa8..20fa6e70080 100644 --- a/src/main/java/net/mcreator/ui/minecraft/DataListComboBox.java +++ b/src/main/java/net/mcreator/ui/minecraft/DataListComboBox.java @@ -22,8 +22,10 @@ import net.mcreator.minecraft.DataListEntry; import net.mcreator.minecraft.MCItem; import net.mcreator.ui.MCreator; +import net.mcreator.ui.component.SearchableComboBox; import net.mcreator.ui.init.BlockItemIcons; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.EmptyIcon; import net.mcreator.util.image.ImageUtils; @@ -32,7 +34,7 @@ import java.awt.*; import java.util.List; -public class DataListComboBox extends JComboBox { +public class DataListComboBox extends SearchableComboBox { public DataListComboBox(MCreator mcreator, List list) { super(list.toArray(new DataListEntry[0])); @@ -53,7 +55,7 @@ public void setSelectedItem(String string) { public void setSelectedItem(MappableElement mappableElement) { if (mappableElement == null) - setSelectedIndex(0); + setSelectedIndex(getItemCount() > 0 ? 0 : -1); else this.setSelectedItem(new DataListEntry.Dummy(mappableElement.getUnmappedValue())); } @@ -67,7 +69,7 @@ public void setSelectedItem(DataListEntry dataListEntry) { if (superretval == null) return new DataListEntry.Null(); - return (DataListEntry) super.getSelectedItem(); + return super.getSelectedItem(); } public static class CustomRenderer extends JLabel implements ListCellRenderer { @@ -96,9 +98,8 @@ public Component getListCellRendererComponent(JList lis setText(value.getReadableName()); - if (value instanceof DataListEntry.Custom) { - setIcon(MCItem.getBlockIconBasedOnName(((DataListEntry.Custom) value).getModElement().getWorkspace(), - value.getName())); + if (value instanceof DataListEntry.Custom custom) { + setIcon(MCItem.getBlockIconBasedOnName(custom.getModElement().getWorkspace(), value.getName())); } else if (value.getTexture() == null) { setIcon(new EmptyIcon(32, 32)); } else { @@ -110,7 +111,7 @@ public Component getListCellRendererComponent(JList lis if (imageIcon instanceof ImageIcon) setIcon(ImageUtils.changeSaturation((ImageIcon) imageIcon, 0.1f)); setText(L10N.t("datalist_combobox.not_supported", getText())); - setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + setForeground(Theme.current().getAltForegroundColor()); } setHorizontalTextPosition(SwingConstants.RIGHT); diff --git a/src/main/java/net/mcreator/ui/minecraft/MCItemHolder.java b/src/main/java/net/mcreator/ui/minecraft/MCItemHolder.java index f7e6469f57c..cd0a69945c4 100644 --- a/src/main/java/net/mcreator/ui/minecraft/MCItemHolder.java +++ b/src/main/java/net/mcreator/ui/minecraft/MCItemHolder.java @@ -36,16 +36,17 @@ public class MCItemHolder extends JButton implements IValidable { + private static final Color err = new Color(204, 166, 175); + private static final Color warn = new Color(236, 238, 207); + private static final Color bg = new Color(140, 140, 140); + private String block = ""; private final MCItemSelectorDialog bs; private boolean showValidation = true; - private final List listeners = new ArrayList<>(); private boolean removeButtonHover; - private static final Color err = new Color(204, 166, 175); - private static final Color warn = new Color(236, 238, 207); - private static final Color bg = new Color(140, 140, 140); + private final List listeners = new ArrayList<>(); private final MCreator mcreator; @@ -64,10 +65,7 @@ public MCItemHolder(MCreator mcreator, MCItem.ListProvider blocksConsumer, boole bs.setItemSelectedListener(e -> { MCItem bsa = bs.getSelectedMCItem(); if (bsa != null) { - setIcon(new ImageIcon(ImageUtils.resizeAA(bsa.icon.getImage(), 25))); - this.block = bsa.getName(); - this.setToolTipText(bsa.getName()); - getValidationStatus(); + setBlock(new MItemBlock(mcreator.getWorkspace(), bsa.getName())); } }); initGUI(); @@ -89,6 +87,7 @@ public void setBlock(MItemBlock mItemBlock) { block = ""; this.setToolTipText(null); } + listeners.forEach(listener -> listener.actionPerformed(new ActionEvent("", 0, ""))); getValidationStatus(); } @@ -122,13 +121,13 @@ private void initGUI() { addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (isEnabled()) { - if (e.getX() > 1 && e.getX() < 11 && e.getY() < getHeight() - 1 && e.getY() > getHeight() - 11 - && !block.isEmpty()) { + if ((e.getButton() == MouseEvent.BUTTON2 + || e.getX() > 1 && e.getX() < 11 && e.getY() < getHeight() - 1 + && e.getY() > getHeight() - 11) && !block.isEmpty()) { setBlock(null); } else { bs.setVisible(true); // show block selector } - listeners.forEach(listener -> listener.actionPerformed(new ActionEvent("", 0, ""))); repaint(); } } diff --git a/src/main/java/net/mcreator/ui/minecraft/MCItemListField.java b/src/main/java/net/mcreator/ui/minecraft/MCItemListField.java index c2b2545bdde..6637b47fa52 100644 --- a/src/main/java/net/mcreator/ui/minecraft/MCItemListField.java +++ b/src/main/java/net/mcreator/ui/minecraft/MCItemListField.java @@ -20,10 +20,12 @@ import net.mcreator.element.parts.MItemBlock; import net.mcreator.minecraft.MCItem; +import net.mcreator.minecraft.TagType; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.JItemListField; import net.mcreator.ui.dialogs.AddTagDialog; import net.mcreator.ui.dialogs.MCItemSelectorDialog; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; import javax.swing.*; @@ -54,11 +56,11 @@ public MCItemListField(MCreator mcreator, MCItem.ListProvider supplier, boolean } @Override protected List getTagsToAdd() { - String tagType = "Blocks"; + TagType tagType = TagType.BLOCKS; List items = supplier.provide(mcreator.getWorkspace()); for (MCItem item : items) { if (item.getType().equals("item")) { - tagType = "Items"; + tagType = TagType.ITEMS; break; } } @@ -77,12 +79,10 @@ public Component getListCellRendererComponent(JList list, boolean isSelected, boolean cellHasFocus) { setOpaque(isSelected); - setBackground(isSelected ? - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR") : - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + setBackground(isSelected ? Theme.current().getForegroundColor() : Theme.current().getAltBackgroundColor()); setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(0, 2, 0, 2, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")), + BorderFactory.createMatteBorder(0, 2, 0, 2, Theme.current().getBackgroundColor()), BorderFactory.createEmptyBorder(1, 1, 1, 1))); setHorizontalAlignment(SwingConstants.CENTER); setVerticalAlignment(SwingConstants.CENTER); diff --git a/src/main/java/net/mcreator/ui/minecraft/ModElementListField.java b/src/main/java/net/mcreator/ui/minecraft/ModElementListField.java index d273a8ee1b8..b0a2db33336 100644 --- a/src/main/java/net/mcreator/ui/minecraft/ModElementListField.java +++ b/src/main/java/net/mcreator/ui/minecraft/ModElementListField.java @@ -19,6 +19,7 @@ package net.mcreator.ui.minecraft; import net.mcreator.element.ModElementType; +import net.mcreator.generator.mapping.NonMappableElement; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.JItemListField; import net.mcreator.ui.dialogs.StringSelectorDialog; @@ -28,7 +29,7 @@ import java.util.List; import java.util.Locale; -public class ModElementListField extends JItemListField { +public class ModElementListField extends JItemListField { private final ModElementType type; @@ -37,10 +38,12 @@ public ModElementListField(MCreator mcreator, ModElementType type) { this.type = type; } - @Override protected List getElementsToAdd() { + @Override protected List getElementsToAdd() { return StringSelectorDialog.openMultiSelectorDialog(mcreator, - w -> w.getModElements().stream().filter(e -> e.getType() == this.type).map(ModElement::getName) - .toArray(String[]::new), L10N.t("dialog.list_field.mod_element_title"), - L10N.t("dialog.list_field.mod_element_message", type.getReadableName().toLowerCase(Locale.ENGLISH))); + w -> w.getModElements().stream().filter(e -> e.getType() == this.type).map(ModElement::getName) + .toArray(String[]::new), L10N.t("dialog.list_field.mod_element_title"), + L10N.t("dialog.list_field.mod_element_message", type.getReadableName().toLowerCase(Locale.ENGLISH))) + .stream().map(NonMappableElement::new).toList(); } + } diff --git a/src/main/java/net/mcreator/ui/minecraft/SoundSelector.java b/src/main/java/net/mcreator/ui/minecraft/SoundSelector.java index fbd2d4c88f9..6c502502aaf 100644 --- a/src/main/java/net/mcreator/ui/minecraft/SoundSelector.java +++ b/src/main/java/net/mcreator/ui/minecraft/SoundSelector.java @@ -33,9 +33,13 @@ import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; +import java.util.ArrayList; +import java.util.List; public class SoundSelector extends JPanel { @@ -43,6 +47,7 @@ public class SoundSelector extends JPanel { private final JButton bt = new JButton("..."); private final JButton rm = new JButton(UIRES.get("18px.remove")); private final JButton play = new JButton(UIRES.get("16px.play")); + private final List listeners = new ArrayList<>(); private final MCreator mcreator; @@ -113,6 +118,10 @@ public Sound getSound() { return new Sound(mcreator.getWorkspace(), tfe.getText()); } + public void addSoundSelectedListener(ActionListener a) { + listeners.add(a); + } + public void setSound(Sound sound) { if (sound != null) this.setSound(sound.getUnmappedValue()); @@ -131,6 +140,8 @@ public void setSound(String sound) { play.setVisible(false); rm.setEnabled(false); } + + listeners.forEach(l -> l.actionPerformed(new ActionEvent("", 0, ""))); } public void setText(String text) { diff --git a/src/main/java/net/mcreator/ui/minecraft/SpawnableEntityListField.java b/src/main/java/net/mcreator/ui/minecraft/SpawnableEntityListField.java index 3d12c39fb92..17cd31d4612 100644 --- a/src/main/java/net/mcreator/ui/minecraft/SpawnableEntityListField.java +++ b/src/main/java/net/mcreator/ui/minecraft/SpawnableEntityListField.java @@ -20,6 +20,7 @@ import net.mcreator.element.parts.EntityEntry; import net.mcreator.minecraft.ElementUtil; +import net.mcreator.minecraft.TagType; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.JItemListField; import net.mcreator.ui.dialogs.AddTagDialog; @@ -48,7 +49,7 @@ public SpawnableEntityListField(MCreator mcreator, boolean allowTags) { @Override protected List getTagsToAdd() { List tags = new ArrayList<>(); - String tag = AddTagDialog.openAddTagDialog(mcreator, mcreator, "Entities", "bosses", "raiders", + String tag = AddTagDialog.openAddTagDialog(mcreator, mcreator, TagType.ENTITIES, "bosses", "raiders", "fall_damage_immune", "powder_snow_walkable_mobs"); if (tag != null) tags.add(new EntityEntry(mcreator.getWorkspace(), "#" + tag)); diff --git a/src/main/java/net/mcreator/ui/minecraft/boundingboxes/JBoundingBoxList.java b/src/main/java/net/mcreator/ui/minecraft/boundingboxes/JBoundingBoxList.java index 0eac0ab619f..37b31b1a3a4 100644 --- a/src/main/java/net/mcreator/ui/minecraft/boundingboxes/JBoundingBoxList.java +++ b/src/main/java/net/mcreator/ui/minecraft/boundingboxes/JBoundingBoxList.java @@ -29,6 +29,7 @@ import net.mcreator.ui.component.entries.JSimpleEntriesList; import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.workspace.resources.Model; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -64,9 +65,9 @@ public JBoundingBoxList(MCreator mcreator, IHelpContext gui, @Nullable Supplier< e -> firePropertyChange("boundingBoxChanged", false, true)); setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.bounding_box_entries"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); setPreferredSize(new Dimension(getPreferredSize().width, (int) (mcreator.getSize().height * 0.6))); } diff --git a/src/main/java/net/mcreator/ui/minecraft/loottable/JLootTableEntry.java b/src/main/java/net/mcreator/ui/minecraft/loottable/JLootTableEntry.java index eb1b23cf097..41004d6e5ee 100644 --- a/src/main/java/net/mcreator/ui/minecraft/loottable/JLootTableEntry.java +++ b/src/main/java/net/mcreator/ui/minecraft/loottable/JLootTableEntry.java @@ -26,6 +26,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.MCItemHolder; import javax.swing.*; @@ -50,15 +51,15 @@ public class JLootTableEntry extends JPanel { public JLootTableEntry(MCreator mcreator, JPanel parent, List entryList) { setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); - setBackground(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker()); + setBackground((Theme.current().getAltBackgroundColor()).darker()); item = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); count.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(2, 2, 2, 2))); count.setAllowEqualValues(true); enchantmentsLevel.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(2, 2, 2, 2))); enchantmentsLevel.setAllowEqualValues(true); diff --git a/src/main/java/net/mcreator/ui/minecraft/loottable/JLootTablePool.java b/src/main/java/net/mcreator/ui/minecraft/loottable/JLootTablePool.java index 9c57d5ec10e..4efb3671365 100644 --- a/src/main/java/net/mcreator/ui/minecraft/loottable/JLootTablePool.java +++ b/src/main/java/net/mcreator/ui/minecraft/loottable/JLootTablePool.java @@ -27,6 +27,7 @@ import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -53,14 +54,14 @@ public JLootTablePool(MCreator mcreator, IHelpContext gui, JPanel parent, List. + */ + +package net.mcreator.ui.minecraft.modellayers; + +import net.mcreator.element.types.LivingEntity; +import net.mcreator.ui.MCreator; +import net.mcreator.ui.component.entries.JSimpleEntriesList; +import net.mcreator.ui.help.IHelpContext; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.validation.AggregatedValidationResult; + +import javax.swing.*; +import java.util.List; + +public class JModelLayerList extends JSimpleEntriesList { + + public JModelLayerList(MCreator mcreator, IHelpContext gui) { + super(mcreator, gui); + + add.setText(L10N.t("elementgui.living_entity.add_model_layer")); + + setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2), + BorderFactory.createCompoundBorder( + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), + BorderFactory.createEmptyBorder(2, 2, 2, 2)))); + } + + @Override + protected JModelLayerListEntry newEntry(JPanel parent, List entryList, boolean userAction) { + return new JModelLayerListEntry(mcreator, gui, parent, entryList); + } + + public AggregatedValidationResult getValidationResult() { + AggregatedValidationResult validationResult = new AggregatedValidationResult(); + entryList.forEach(validationResult::addValidationElement); + return validationResult; + } + +} diff --git a/src/main/java/net/mcreator/ui/minecraft/modellayers/JModelLayerListEntry.java b/src/main/java/net/mcreator/ui/minecraft/modellayers/JModelLayerListEntry.java new file mode 100644 index 00000000000..c568a1cd99c --- /dev/null +++ b/src/main/java/net/mcreator/ui/minecraft/modellayers/JModelLayerListEntry.java @@ -0,0 +1,145 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.minecraft.modellayers; + +import net.mcreator.blockly.data.Dependency; +import net.mcreator.element.types.LivingEntity; +import net.mcreator.ui.MCreator; +import net.mcreator.ui.component.SearchableComboBox; +import net.mcreator.ui.component.entries.JSimpleListEntry; +import net.mcreator.ui.component.util.ComboBoxUtil; +import net.mcreator.ui.help.HelpUtils; +import net.mcreator.ui.help.IHelpContext; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.renderer.ModelComboBoxRenderer; +import net.mcreator.ui.laf.renderer.WTextureComboBoxRenderer; +import net.mcreator.ui.procedure.ProcedureSelector; +import net.mcreator.ui.validation.IValidable; +import net.mcreator.ui.validation.Validator; +import net.mcreator.ui.validation.component.VComboBox; +import net.mcreator.ui.workspace.resources.TextureType; +import net.mcreator.util.ListUtils; +import net.mcreator.workspace.elements.VariableTypeLoader; +import net.mcreator.workspace.resources.Model; + +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +public class JModelLayerListEntry extends JSimpleListEntry implements IValidable { + + private final Model default_model = new Model.BuiltInModel("Default"); + private final JComboBox model = new JComboBox<>(new Model[] { default_model }); + private final VComboBox texture = new SearchableComboBox<>(); + private final JCheckBox glow = L10N.checkbox("elementgui.living_entity.layer_should_glow"); + private final ProcedureSelector condition; + private final MCreator mcreator; + + public JModelLayerListEntry(MCreator mcreator, IHelpContext gui, JPanel parent, + List entryList) { + super(parent, entryList); + this.mcreator = mcreator; + + line.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 5)); + + condition = new ProcedureSelector(gui.withEntry("entity/condition_display_model_layer"), mcreator, + L10N.t("elementgui.living_entity.layer_display_condition"), ProcedureSelector.Side.CLIENT, true, + VariableTypeLoader.BuiltInTypes.LOGIC, + Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")).makeInline(); + + model.setRenderer(new ModelComboBoxRenderer()); + + line.add(L10N.label("elementgui.living_entity.layer_model")); + line.add(model); + + texture.setRenderer(new WTextureComboBoxRenderer.TypeTextures(mcreator.getWorkspace(), TextureType.ENTITY)); + texture.setValidator(() -> { + if (texture.getSelectedItem() == null || texture.getSelectedItem().isEmpty()) + return new Validator.ValidationResult(Validator.ValidationResultType.ERROR, + L10N.t("elementgui.living_entity.layer_needs_texture")); + return Validator.ValidationResult.PASSED; + }); + + line.add(L10N.label("elementgui.living_entity.layer_texture")); + line.add(texture); + + glow.setOpaque(false); + + line.add(HelpUtils.wrapWithHelpButton(gui.withEntry("entity/glow_texture"), glow)); + + line.add(condition); + } + + @Override public void reloadDataLists() { + condition.refreshListKeepSelected(); + + ComboBoxUtil.updateComboBoxContents(model, ListUtils.merge(Collections.singletonList(default_model), + Model.getModels(mcreator.getWorkspace()).stream() + .filter(el -> el.getType() == Model.Type.JAVA || el.getType() == Model.Type.MCREATOR) + .collect(Collectors.toList()))); + + ComboBoxUtil.updateComboBoxContents(texture, ListUtils.merge(Collections.singleton(""), + mcreator.getFolderManager().getTexturesList(TextureType.ENTITY).stream().map(File::getName) + .collect(Collectors.toList())), ""); + } + + @Override protected void setEntryEnabled(boolean enabled) { + model.setEnabled(enabled); + texture.setEnabled(enabled); + glow.setEnabled(enabled); + condition.setEnabled(enabled); + } + + @Override public LivingEntity.ModelLayerEntry getEntry() { + LivingEntity.ModelLayerEntry entry = new LivingEntity.ModelLayerEntry(); + entry.setWorkspace(mcreator.getWorkspace()); + entry.model = ((Model) Objects.requireNonNull(model.getSelectedItem())).getReadableName(); + entry.texture = texture.getSelectedItem(); + entry.glow = glow.isSelected(); + entry.condition = condition.getSelectedProcedure(); + return entry; + } + + @Override public void setEntry(LivingEntity.ModelLayerEntry e) { + if (e.model != null && !e.model.isEmpty()) { + model.setSelectedItem(Model.getModelByParams(mcreator.getWorkspace(), e.model, + e.model.equals("Default") ? Model.Type.BUILTIN : Model.Type.JAVA)); + } + texture.setSelectedItem(e.texture); + glow.setSelected(e.glow); + condition.setSelectedProcedure(e.condition); + } + + @Override public Validator.ValidationResult getValidationStatus() { + return texture.getValidationStatus(); + } + + @Override public void setValidator(Validator validator) { + } + + @Override public Validator getValidator() { + return texture.getValidator(); + } + +} diff --git a/src/main/java/net/mcreator/ui/minecraft/potions/JPotionList.java b/src/main/java/net/mcreator/ui/minecraft/potions/JPotionList.java index 7a31567ed20..a4f87110fed 100644 --- a/src/main/java/net/mcreator/ui/minecraft/potions/JPotionList.java +++ b/src/main/java/net/mcreator/ui/minecraft/potions/JPotionList.java @@ -24,9 +24,9 @@ import net.mcreator.ui.component.entries.JSimpleEntriesList; import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; -import java.awt.*; import java.util.List; public class JPotionList extends JSimpleEntriesList { @@ -37,9 +37,9 @@ public JPotionList(MCreator mcreator, IHelpContext gui) { add.setText(L10N.t("elementgui.potion.add_entry")); setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.potion.effects"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); } @Override protected JPotionListEntry newEntry(JPanel parent, List entryList, boolean userAction) { diff --git a/src/main/java/net/mcreator/ui/minecraft/recipemakers/BlastFurnaceRecipeMaker.java b/src/main/java/net/mcreator/ui/minecraft/recipemakers/BlastFurnaceRecipeMaker.java index 14452b6cdb7..3d32170147e 100644 --- a/src/main/java/net/mcreator/ui/minecraft/recipemakers/BlastFurnaceRecipeMaker.java +++ b/src/main/java/net/mcreator/ui/minecraft/recipemakers/BlastFurnaceRecipeMaker.java @@ -34,8 +34,10 @@ public class BlastFurnaceRecipeMaker extends JPanel { - public MCItemHolder cb1; - public MCItemHolder cb2; + public final MCItemHolder cb1; + public final MCItemHolder cb2; + + private final JButton export = new JButton(UIRES.get("18px.export")); public BlastFurnaceRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, MCItem.ListProvider items) { ImagePanel ip = new ImagePanel(UIRES.get("recipe.blast_furnace").getImage()); @@ -46,8 +48,6 @@ public BlastFurnaceRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithT cb1 = new MCItemHolder(mcreator, itemsWithTags, true); cb2 = new MCItemHolder(mcreator, items); - JButton export = new JButton(UIRES.get("18px.export")); - export.setContentAreaFilled(false); export.setMargin(new Insets(0, 0, 0, 0)); export.setBounds(260, 13, 24, 24); @@ -88,4 +88,11 @@ public MItemBlock getBlock2() { return cb2.getBlock(); } + @Override public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + cb1.setEnabled(enabled); + cb2.setEnabled(enabled); + export.setEnabled(enabled); + } + } diff --git a/src/main/java/net/mcreator/ui/minecraft/recipemakers/BrewingRecipeMaker.java b/src/main/java/net/mcreator/ui/minecraft/recipemakers/BrewingRecipeMaker.java index ae6a7eec0e7..c5056dfe882 100644 --- a/src/main/java/net/mcreator/ui/minecraft/recipemakers/BrewingRecipeMaker.java +++ b/src/main/java/net/mcreator/ui/minecraft/recipemakers/BrewingRecipeMaker.java @@ -32,9 +32,12 @@ import java.io.File; public class BrewingRecipeMaker extends JPanel { - public MCItemHolder cb1; - public MCItemHolder cb2; - public MCItemHolder cb3; + + public final MCItemHolder cb1; + public final MCItemHolder cb2; + public final MCItemHolder cb3; + + private final JButton export = new JButton(UIRES.get("18px.export")); public BrewingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTagsAndPotions, MCItem.ListProvider itemsWithTags, MCItem.ListProvider itemsWithPotions) { @@ -47,8 +50,6 @@ public BrewingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTagsAn cb2 = new MCItemHolder(mcreator, itemsWithTags, true); cb3 = new MCItemHolder(mcreator, itemsWithPotions, false, true); - JButton export = new JButton(UIRES.get("18px.export")); - export.setContentAreaFilled(false); export.setMargin(new Insets(0, 0, 0, 0)); export.setBounds(260, 13, 24, 24); @@ -83,6 +84,14 @@ public BrewingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTagsAn add(ip); setPreferredSize(new Dimension(306, 145)); + } + @Override public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + cb1.setEnabled(enabled); + cb2.setEnabled(enabled); + cb3.setEnabled(enabled); + export.setEnabled(enabled); } + } \ No newline at end of file diff --git a/src/main/java/net/mcreator/ui/minecraft/recipemakers/CampfireCookingRecipeMaker.java b/src/main/java/net/mcreator/ui/minecraft/recipemakers/CampfireCookingRecipeMaker.java index b894b4cf6f0..8e0f865c2fd 100644 --- a/src/main/java/net/mcreator/ui/minecraft/recipemakers/CampfireCookingRecipeMaker.java +++ b/src/main/java/net/mcreator/ui/minecraft/recipemakers/CampfireCookingRecipeMaker.java @@ -34,8 +34,10 @@ public class CampfireCookingRecipeMaker extends JPanel { - public MCItemHolder cb1; - public MCItemHolder cb2; + public final MCItemHolder cb1; + public final MCItemHolder cb2; + + private final JButton export = new JButton(UIRES.get("18px.export")); public CampfireCookingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, MCItem.ListProvider items) { ImagePanel ip = new ImagePanel(UIRES.get("recipe.campfire_cooking").getImage()); @@ -46,8 +48,6 @@ public CampfireCookingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWi cb1 = new MCItemHolder(mcreator, itemsWithTags, true); cb2 = new MCItemHolder(mcreator, items); - JButton export = new JButton(UIRES.get("18px.export")); - export.setContentAreaFilled(false); export.setMargin(new Insets(0, 0, 0, 0)); export.setBounds(260, 13, 24, 24); @@ -88,4 +88,11 @@ public MItemBlock getBlock2() { return cb2.getBlock(); } + @Override public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + cb1.setEnabled(enabled); + cb2.setEnabled(enabled); + export.setEnabled(enabled); + } + } diff --git a/src/main/java/net/mcreator/ui/minecraft/recipemakers/CraftingRecipeMaker.java b/src/main/java/net/mcreator/ui/minecraft/recipemakers/CraftingRecipeMaker.java index e2fb1cdac24..a499d18213b 100644 --- a/src/main/java/net/mcreator/ui/minecraft/recipemakers/CraftingRecipeMaker.java +++ b/src/main/java/net/mcreator/ui/minecraft/recipemakers/CraftingRecipeMaker.java @@ -18,6 +18,7 @@ package net.mcreator.ui.minecraft.recipemakers; +import net.mcreator.element.parts.MItemBlock; import net.mcreator.io.FileIO; import net.mcreator.minecraft.MCItem; import net.mcreator.ui.MCreator; @@ -29,25 +30,31 @@ import javax.swing.*; import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; public class CraftingRecipeMaker extends JPanel { - public JSpinner sp; - public MCItemHolder cb1; - public MCItemHolder cb2; - public MCItemHolder cb3; - public MCItemHolder cb4; - public MCItemHolder cb5; - public MCItemHolder cb6; - public MCItemHolder cb7; - public MCItemHolder cb8; - public MCItemHolder cb9; - public MCItemHolder cb10; + public final JSpinner sp; + public final MCItemHolder cb1; + public final MCItemHolder cb2; + public final MCItemHolder cb3; + public final MCItemHolder cb4; + public final MCItemHolder cb5; + public final MCItemHolder cb6; + public final MCItemHolder cb7; + public final MCItemHolder cb8; + public final MCItemHolder cb9; + public final MCItemHolder cb10; private final JLabel shapeless = new JLabel(UIRES.get("recipe.shapeless")); + private final JButton export = new JButton(UIRES.get("18px.export")); + + private MItemBlock lastItemBlock = null; + public CraftingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, MCItem.ListProvider items) { ImagePanel ip = new ImagePanel(UIRES.get("recipe.crafting").getImage()); ip.fitToImage(); @@ -67,6 +74,34 @@ public CraftingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, cb8 = new MCItemHolder(mcreator, itemsWithTags, true); cb9 = new MCItemHolder(mcreator, itemsWithTags, true); + MouseAdapter cloneAdapter = new MouseAdapter() { + private static final int buttonsDownMask = + MouseEvent.BUTTON1_DOWN_MASK | MouseEvent.BUTTON2_DOWN_MASK | MouseEvent.BUTTON3_DOWN_MASK; + + @Override public void mouseEntered(MouseEvent e) { + if (e.getSource() instanceof MCItemHolder mcItemHolder) { + if ((e.getModifiersEx() & buttonsDownMask) != 0 && lastItemBlock != null) { + mcItemHolder.setBlock(lastItemBlock); + } + } + } + + @Override public void mousePressed(MouseEvent e) { + if (e.getSource() instanceof MCItemHolder mcItemHolder) { + lastItemBlock = mcItemHolder.getBlock(); + } + } + }; + cb1.addMouseListener(cloneAdapter); + cb2.addMouseListener(cloneAdapter); + cb3.addMouseListener(cloneAdapter); + cb4.addMouseListener(cloneAdapter); + cb5.addMouseListener(cloneAdapter); + cb6.addMouseListener(cloneAdapter); + cb7.addMouseListener(cloneAdapter); + cb8.addMouseListener(cloneAdapter); + cb9.addMouseListener(cloneAdapter); + cb10 = new MCItemHolder(mcreator, items); cb1.setMargin(new Insets(0, 0, 0, 0)); @@ -94,8 +129,11 @@ public CraftingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, cb.setBounds(205, 53, 40, 40); + sp = new JSpinner(new SpinnerNumberModel(1, 1, 64, 1)); + sp.setBounds(212, 109, 38, 17); + ip.add(sp); + JLabel drop = new JLabel("1"); - JButton export = new JButton(UIRES.get("18px.export")); export.setContentAreaFilled(false); export.setMargin(new Insets(0, 0, 0, 0)); @@ -141,10 +179,6 @@ public CraftingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, }); - sp = new JSpinner(new SpinnerNumberModel(1, 1, 64, 1)); - sp.setBounds(212, 109, 38, 17); - ip.add(sp); - drop.setBounds(212, 109, 38, 17); drop.setVisible(false); drop.setForeground(Color.white); @@ -175,4 +209,22 @@ public CraftingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, public void setShapeless(boolean shapeless) { this.shapeless.setVisible(shapeless); } + + @Override public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + cb1.setEnabled(enabled); + cb2.setEnabled(enabled); + cb3.setEnabled(enabled); + cb4.setEnabled(enabled); + cb5.setEnabled(enabled); + cb6.setEnabled(enabled); + cb7.setEnabled(enabled); + cb8.setEnabled(enabled); + cb9.setEnabled(enabled); + cb10.setEnabled(enabled); + sp.setEnabled(enabled); + shapeless.setEnabled(enabled); + export.setEnabled(enabled); + } + } diff --git a/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmeltingRecipeMaker.java b/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmeltingRecipeMaker.java index 3b0adcebe3a..c83d2968524 100644 --- a/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmeltingRecipeMaker.java +++ b/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmeltingRecipeMaker.java @@ -35,8 +35,10 @@ public class SmeltingRecipeMaker extends JPanel { - public MCItemHolder cb1; - public MCItemHolder cb2; + public final MCItemHolder cb1; + public final MCItemHolder cb2; + + private final JButton export = new JButton(UIRES.get("18px.export")); public SmeltingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, MCItem.ListProvider items) { ImagePanel ip = new ImagePanel(UIRES.get("recipe.furnace").getImage()); @@ -48,7 +50,6 @@ public SmeltingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, cb2 = new MCItemHolder(mcreator, items); JLabel drop = new JLabel("1"); - JButton export = new JButton(UIRES.get("18px.export")); export.setContentAreaFilled(false); export.setMargin(new Insets(0, 0, 0, 0)); @@ -98,4 +99,10 @@ public MItemBlock getBlock2() { return cb2.getBlock(); } + @Override public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + cb1.setEnabled(enabled); + cb2.setEnabled(enabled); + export.setEnabled(enabled); + } } diff --git a/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmithingRecipeMaker.java b/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmithingRecipeMaker.java index de955fb7999..e3f38c6c0b9 100644 --- a/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmithingRecipeMaker.java +++ b/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmithingRecipeMaker.java @@ -32,9 +32,13 @@ import java.io.File; public class SmithingRecipeMaker extends JPanel { - public MCItemHolder cb1; - public MCItemHolder cb2; - public MCItemHolder cb3; + + public final MCItemHolder cb4; + public final MCItemHolder cb1; + public final MCItemHolder cb2; + public final MCItemHolder cb3; + + private final JButton export = new JButton(UIRES.get("18px.export")); public SmithingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, MCItem.ListProvider items) { ImagePanel ip = new ImagePanel(UIRES.get("recipe.smithing").getImage()); @@ -42,12 +46,11 @@ public SmithingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, ip.fitToImage(); ip.setLayout(null); + cb4 = new MCItemHolder(mcreator, itemsWithTags, true); cb1 = new MCItemHolder(mcreator, itemsWithTags, true); cb2 = new MCItemHolder(mcreator, itemsWithTags, true); cb3 = new MCItemHolder(mcreator, items); - JButton export = new JButton(UIRES.get("18px.export")); - export.setContentAreaFilled(false); export.setMargin(new Insets(0, 0, 0, 0)); export.setBounds(260, 13, 24, 24); @@ -56,6 +59,7 @@ public SmithingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, ip.add(export); export.addActionListener(event -> { export.setVisible(false); + cb4.setValidationShownFlag(false); cb1.setValidationShownFlag(false); cb2.setValidationShownFlag(false); cb3.setValidationShownFlag(false); @@ -67,21 +71,32 @@ public SmithingRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, FileIO.writeImageToPNGFile(im, fi); setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); export.setVisible(true); + cb4.setValidationShownFlag(true); cb1.setValidationShownFlag(true); cb2.setValidationShownFlag(true); cb3.setValidationShownFlag(true); }); - cb1.setBounds(50, 60, 28, 28); - cb2.setBounds(117, 60, 28, 28); - cb3.setBounds(211, 60, 28, 28); + cb4.setBounds(18, 60, 28, 28); + cb1.setBounds(85, 60, 28, 28); + cb2.setBounds(152, 60, 28, 28); + cb3.setBounds(246, 60, 28, 28); + ip.add(cb4); ip.add(cb1); ip.add(cb2); ip.add(cb3); add(ip); setPreferredSize(new Dimension(306, 145)); + } + @Override public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + cb4.setEnabled(enabled); + cb1.setEnabled(enabled); + cb2.setEnabled(enabled); + cb3.setEnabled(enabled); + export.setEnabled(enabled); } } diff --git a/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmokerRecipeMaker.java b/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmokerRecipeMaker.java index bee6d91a899..d5a12e2f2af 100644 --- a/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmokerRecipeMaker.java +++ b/src/main/java/net/mcreator/ui/minecraft/recipemakers/SmokerRecipeMaker.java @@ -34,8 +34,10 @@ public class SmokerRecipeMaker extends JPanel { - public MCItemHolder cb1; - public MCItemHolder cb2; + public final MCItemHolder cb1; + public final MCItemHolder cb2; + + private final JButton export = new JButton(UIRES.get("18px.export")); public SmokerRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, MCItem.ListProvider items) { ImagePanel ip = new ImagePanel(UIRES.get("recipe.smoker").getImage()); @@ -46,8 +48,6 @@ public SmokerRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, M cb1 = new MCItemHolder(mcreator, itemsWithTags, true); cb2 = new MCItemHolder(mcreator, items); - JButton export = new JButton(UIRES.get("18px.export")); - export.setContentAreaFilled(false); export.setMargin(new Insets(0, 0, 0, 0)); export.setBounds(260, 13, 24, 24); @@ -88,4 +88,10 @@ public MItemBlock getBlock2() { return cb2.getBlock(); } + @Override public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + cb1.setEnabled(enabled); + cb2.setEnabled(enabled); + export.setEnabled(enabled); + } } diff --git a/src/main/java/net/mcreator/ui/minecraft/recipemakers/StoneCutterRecipeMaker.java b/src/main/java/net/mcreator/ui/minecraft/recipemakers/StoneCutterRecipeMaker.java index 33cdbe85337..6fe03f4495e 100644 --- a/src/main/java/net/mcreator/ui/minecraft/recipemakers/StoneCutterRecipeMaker.java +++ b/src/main/java/net/mcreator/ui/minecraft/recipemakers/StoneCutterRecipeMaker.java @@ -35,9 +35,11 @@ public class StoneCutterRecipeMaker extends JPanel { - public JSpinner sp; - public MCItemHolder cb1; - public MCItemHolder cb2; + public final JSpinner sp; + public final MCItemHolder cb1; + public final MCItemHolder cb2; + + private final JButton export = new JButton(UIRES.get("18px.export")); public StoneCutterRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTags, MCItem.ListProvider items) { ImagePanel ip = new ImagePanel(UIRES.get("recipe.stonecutter").getImage()); @@ -48,8 +50,11 @@ public StoneCutterRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTa cb1 = new MCItemHolder(mcreator, itemsWithTags, true); cb2 = new MCItemHolder(mcreator, items); + sp = new JSpinner(new SpinnerNumberModel(1, 1, 64, 1)); + sp.setBounds(203, 109, 38, 17); + ip.add(sp); + JLabel drop = new JLabel("1"); - JButton export = new JButton(UIRES.get("18px.export")); export.setContentAreaFilled(false); export.setMargin(new Insets(0, 0, 0, 0)); @@ -78,10 +83,6 @@ public StoneCutterRecipeMaker(MCreator mcreator, MCItem.ListProvider itemsWithTa drop.setVisible(false); }); - sp = new JSpinner(new SpinnerNumberModel(1, 1, 64, 1)); - sp.setBounds(203, 109, 38, 17); - ip.add(sp); - drop.setBounds(203, 109, 38, 17); drop.setVisible(false); drop.setForeground(Color.white); @@ -105,4 +106,12 @@ public MItemBlock getBlock2() { return cb2.getBlock(); } + @Override public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + cb1.setEnabled(enabled); + cb2.setEnabled(enabled); + sp.setEnabled(enabled); + export.setEnabled(enabled); + } + } diff --git a/src/main/java/net/mcreator/ui/minecraft/spawntypes/JSpawnEntriesList.java b/src/main/java/net/mcreator/ui/minecraft/spawntypes/JSpawnEntriesList.java index bcc6598a38e..55ee409838b 100644 --- a/src/main/java/net/mcreator/ui/minecraft/spawntypes/JSpawnEntriesList.java +++ b/src/main/java/net/mcreator/ui/minecraft/spawntypes/JSpawnEntriesList.java @@ -23,6 +23,7 @@ import net.mcreator.ui.component.entries.JSimpleEntriesList; import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -36,9 +37,9 @@ public JSpawnEntriesList(MCreator mcreator, IHelpContext gui) { add.setText(L10N.t("elementgui.spawnlist.add_entry")); setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.spawnlist.spawn_entries"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); setPreferredSize(new Dimension(getPreferredSize().width, (int) (mcreator.getSize().height * 0.6))); } diff --git a/src/main/java/net/mcreator/ui/minecraft/spawntypes/JSpawnListEntry.java b/src/main/java/net/mcreator/ui/minecraft/spawntypes/JSpawnListEntry.java index 380bd6b25a1..580711f08a0 100644 --- a/src/main/java/net/mcreator/ui/minecraft/spawntypes/JSpawnListEntry.java +++ b/src/main/java/net/mcreator/ui/minecraft/spawntypes/JSpawnListEntry.java @@ -30,10 +30,10 @@ import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.workspace.Workspace; import javax.swing.*; -import java.awt.*; import java.util.List; import java.util.stream.Collectors; @@ -53,7 +53,7 @@ public JSpawnListEntry(MCreator mcreator, IHelpContext gui, JPanel parent, List< this.workspace = mcreator.getWorkspace(); numberOfMobsPerGroup.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor()), BorderFactory.createEmptyBorder(2, 2, 2, 2))); numberOfMobsPerGroup.setAllowEqualValues(true); diff --git a/src/main/java/net/mcreator/ui/minecraft/states/JStateLabel.java b/src/main/java/net/mcreator/ui/minecraft/states/JStateLabel.java index a5604441104..439254e7920 100644 --- a/src/main/java/net/mcreator/ui/minecraft/states/JStateLabel.java +++ b/src/main/java/net/mcreator/ui/minecraft/states/JStateLabel.java @@ -25,6 +25,7 @@ import net.mcreator.ui.dialogs.StateEditorDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import java.awt.*; @@ -53,7 +54,7 @@ public JStateLabel(MCreator mcreator, Supplier>> properties this.properties = properties; this.otherStates = otherStates; - setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + setBackground(Theme.current().getSecondAltBackgroundColor()); setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); label.setEditable(false); @@ -74,7 +75,7 @@ public JStateLabel(MCreator mcreator, Supplier>> properties edit.addActionListener(e -> editState()); JPanel controls = new JPanel(); - controls.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + controls.setBackground(Theme.current().getAltBackgroundColor()); controls.add(edit); add("East", PanelUtils.centerInPanelPadding(controls, 2, 2)); } diff --git a/src/main/java/net/mcreator/ui/minecraft/states/PropertyData.java b/src/main/java/net/mcreator/ui/minecraft/states/PropertyData.java index a185373cc5a..ebd603a7b63 100644 --- a/src/main/java/net/mcreator/ui/minecraft/states/PropertyData.java +++ b/src/main/java/net/mcreator/ui/minecraft/states/PropertyData.java @@ -191,6 +191,14 @@ public IntegerType(String name, int min, int max) { this.max = max; } + public int getMin() { + return min; + } + + public int getMax() { + return max; + } + @Override @Nonnull public Integer getDefaultValue() { return 0; } @@ -234,6 +242,14 @@ public NumberType(String name, double min, double max) { this.max = max; } + public double getMin() { + return min; + } + + public double getMax() { + return max; + } + @Override @Nonnull public Double getDefaultValue() { return 0d; } @@ -275,6 +291,10 @@ public StringType(String name, String[] arrayData) { this.arrayData = arrayData; } + public String[] getArrayData() { + return arrayData; + } + @Override @Nonnull public String getDefaultValue() { return ""; } diff --git a/src/main/java/net/mcreator/ui/minecraft/states/PropertyDataWithValue.java b/src/main/java/net/mcreator/ui/minecraft/states/PropertyDataWithValue.java new file mode 100644 index 00000000000..792c38dc957 --- /dev/null +++ b/src/main/java/net/mcreator/ui/minecraft/states/PropertyDataWithValue.java @@ -0,0 +1,58 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.minecraft.states; + +import com.google.gson.*; +import com.google.gson.annotations.JsonAdapter; + +import java.lang.reflect.Type; + +@JsonAdapter(PropertyDataWithValue.GSONAdapter.class) public record PropertyDataWithValue(PropertyData property, + T value) { + + @SuppressWarnings("unchecked") + private static PropertyDataWithValue create(PropertyData property, Object value) { + return new PropertyDataWithValue<>(property, (T) value); + } + + static class GSONAdapter + implements JsonSerializer>, JsonDeserializer> { + + private static final Gson gson = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().setLenient() + .registerTypeHierarchyAdapter(PropertyData.class, new PropertyData.GSONAdapter()).create(); + + @Override + public PropertyDataWithValue deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + PropertyData data = gson.fromJson(jsonObject, PropertyData.class); + return create(data, data.parseObj(jsonObject.get("value"))); + } + + @Override + public JsonElement serialize(PropertyDataWithValue value, Type typeOfSrc, JsonSerializationContext context) { + JsonObject retVal = gson.toJsonTree(value.property).getAsJsonObject(); + retVal.add("value", gson.toJsonTree(value.value)); + return retVal; + } + + } + +} diff --git a/src/main/java/net/mcreator/ui/minecraft/states/entity/JEntityDataEntry.java b/src/main/java/net/mcreator/ui/minecraft/states/entity/JEntityDataEntry.java new file mode 100644 index 00000000000..74197fc2926 --- /dev/null +++ b/src/main/java/net/mcreator/ui/minecraft/states/entity/JEntityDataEntry.java @@ -0,0 +1,122 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2021, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.minecraft.states.entity; + +import net.mcreator.ui.MCreator; +import net.mcreator.ui.component.entries.JSimpleListEntry; +import net.mcreator.ui.component.util.ComponentUtils; +import net.mcreator.ui.component.util.PanelUtils; +import net.mcreator.ui.help.HelpUtils; +import net.mcreator.ui.help.IHelpContext; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.minecraft.states.PropertyData; +import net.mcreator.ui.minecraft.states.PropertyDataWithValue; + +import javax.swing.*; +import java.awt.*; +import java.util.List; + +public class JEntityDataEntry extends JSimpleListEntry> { + + private final MCreator mcreator; + private PropertyData data; + + private final JLabel nameLabel, typeLabel; + private final JPanel defValuePane = new JPanel(new BorderLayout()); + private JComponent defaultValue; + + public JEntityDataEntry(MCreator mcreator, IHelpContext gui, JPanel parent, List entryList) { + super(parent, entryList); + this.mcreator = mcreator; + + line.setLayout(new BorderLayout()); + line.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + nameLabel = new JLabel(); + nameLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + nameLabel.setPreferredSize(new Dimension(0, 28)); + ComponentUtils.deriveFont(nameLabel, 16); + + JPanel namePane = new JPanel(new BorderLayout()); + namePane.setOpaque(false); + namePane.add("North", HelpUtils.wrapWithHelpButton(gui.withEntry("entity/data_name"), + L10N.label("elementgui.living_entity.entity_data_entries.name"))); + namePane.add("Center", nameLabel); + namePane.setPreferredSize(new Dimension(240, 0)); + + typeLabel = new JLabel(); + typeLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + typeLabel.setPreferredSize(new Dimension(0, 28)); + ComponentUtils.deriveFont(typeLabel, 16); + + JPanel typePane = new JPanel(new BorderLayout()); + typePane.setOpaque(false); + typePane.add("North", HelpUtils.wrapWithHelpButton(gui.withEntry("entity/data_type"), + L10N.label("elementgui.living_entity.entity_data_entries.type"))); + typePane.add("Center", typeLabel); + typePane.setPreferredSize(new Dimension(240, 0)); + line.add("West", PanelUtils.westAndEastElement(namePane, typePane)); + + defValuePane.setOpaque(false); + line.add("Center", PanelUtils.northAndCenterElement( + HelpUtils.wrapWithHelpButton(gui.withEntry("entity/data_default_value"), + L10N.label("elementgui.living_entity.entity_data_entries.default_value")), + PanelUtils.join(FlowLayout.LEFT, defValuePane))); + } + + @Override protected void setEntryEnabled(boolean enabled) { + if (defaultValue != null) + defaultValue.setEnabled(enabled); + } + + @SuppressWarnings("unchecked") @Override public PropertyDataWithValue getEntry() { + return new PropertyDataWithValue<>((PropertyData) data, data.getValue(defaultValue)); + } + + @Override public void setEntry(PropertyDataWithValue entry) { + data = entry.property(); + nameLabel.setText(data.getName()); + typeLabel.setText(getTypeString(data)); + defValuePane.add(defaultValue = data.getComponent(mcreator, entry.value())); + defaultValue.setEnabled(isEnabled()); + + if (data instanceof PropertyData.IntegerType) { + defaultValue.setPreferredSize(new Dimension(150, 28)); + defaultValue.setOpaque(false); + } else if (data instanceof PropertyData.StringType) { + ((JTextField) defaultValue).setColumns(27); + defaultValue.setPreferredSize(new Dimension(0, 28)); + } else { + defaultValue.setOpaque(false); + } + } + + private String getTypeString(PropertyData data) { + if (data instanceof PropertyData.LogicType) + return "Logic"; + else if (data instanceof PropertyData.StringType) + return "String"; + else if (data instanceof PropertyData.IntegerType) + return "Integer"; + else + return "Unknown"; + } + +} diff --git a/src/main/java/net/mcreator/ui/minecraft/states/entity/JEntityDataList.java b/src/main/java/net/mcreator/ui/minecraft/states/entity/JEntityDataList.java new file mode 100644 index 00000000000..6318c6dd68a --- /dev/null +++ b/src/main/java/net/mcreator/ui/minecraft/states/entity/JEntityDataList.java @@ -0,0 +1,111 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2021, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.minecraft.states.entity; + +import net.mcreator.io.Transliteration; +import net.mcreator.ui.MCreator; +import net.mcreator.ui.component.entries.JSimpleEntriesList; +import net.mcreator.ui.component.util.PanelUtils; +import net.mcreator.ui.dialogs.MCreatorDialog; +import net.mcreator.ui.help.IHelpContext; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.minecraft.states.PropertyData; +import net.mcreator.ui.minecraft.states.PropertyDataWithValue; +import net.mcreator.ui.validation.Validator; +import net.mcreator.ui.validation.component.VTextField; +import net.mcreator.ui.validation.validators.JavaMemberNameValidator; +import net.mcreator.ui.validation.validators.UniqueNameValidator; + +import javax.swing.*; +import java.awt.*; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +public class JEntityDataList extends JSimpleEntriesList> { + + public JEntityDataList(MCreator mcreator, IHelpContext gui) { + super(mcreator, gui); + + add.setText(L10N.t("elementgui.living_entity.entity_data_entries.add_entry")); + + setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2), + BorderFactory.createCompoundBorder( + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), + BorderFactory.createEmptyBorder(2, 2, 2, 2)))); + } + + @Override protected JEntityDataEntry newEntry(JPanel parent, List entryList, boolean userAction) { + if (userAction) { + AtomicReference entry = new AtomicReference<>(); + + MCreatorDialog dialog = new MCreatorDialog(mcreator, + L10N.t("elementgui.living_entity.entity_data_entries.add_entry.title"), true); + + VTextField name = new VTextField(24); + name.setPreferredSize(new Dimension(0, 28)); + UniqueNameValidator validator = new UniqueNameValidator(L10N.t("workspace.variables.variable_name"), + name::getText, () -> entryList.stream().map(e -> e.getEntry().property().getName()), + new JavaMemberNameValidator(name, false)); + validator.setIsPresentOnList(false); + name.setValidator(validator); + name.enableRealtimeValidation(); + + JComboBox type = new JComboBox<>(new String[] { "Integer", "Logic", "String" }); + + JButton ok = new JButton(UIManager.getString("OptionPane.okButtonText")); + JButton cancel = new JButton(UIManager.getString("OptionPane.cancelButtonText")); + dialog.getRootPane().setDefaultButton(ok); + + ok.addActionListener(e -> { + if (name.getValidationStatus().getValidationResultType() != Validator.ValidationResultType.ERROR) { + dialog.setVisible(false); + String property = Transliteration.transliterateString(name.getText()); + JEntityDataEntry dataEntry = new JEntityDataEntry(mcreator, gui, parent, entryList); + if ("Integer".equals(type.getSelectedItem())) { + dataEntry.setEntry(new PropertyDataWithValue<>(new PropertyData.IntegerType(property), null)); + } else if ("Logic".equals(type.getSelectedItem())) { + dataEntry.setEntry(new PropertyDataWithValue<>(new PropertyData.LogicType(property), null)); + } else if ("String".equals(type.getSelectedItem())) { + dataEntry.setEntry(new PropertyDataWithValue<>(new PropertyData.StringType(property), null)); + } + entry.set(dataEntry); + } + }); + cancel.addActionListener(e -> dialog.setVisible(false)); + + JComponent main = PanelUtils.gridElements(2, 2, 2, 2, + L10N.label("elementgui.living_entity.entity_data_entries.add_entry.name"), name, + L10N.label("elementgui.living_entity.entity_data_entries.add_entry.type"), type); + main.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10)); + + dialog.getContentPane().add("Center", main); + dialog.getContentPane().add("South", PanelUtils.join(ok, cancel)); + dialog.pack(); + dialog.setLocationRelativeTo(mcreator); + dialog.setVisible(true); + + return entry.get(); + } else { + return new JEntityDataEntry(mcreator, gui, parent, entryList); + } + } + +} diff --git a/src/main/java/net/mcreator/ui/minecraft/states/item/JItemPropertiesStatesList.java b/src/main/java/net/mcreator/ui/minecraft/states/item/JItemPropertiesStatesList.java index 84f3b864a55..4a066cfcdfc 100644 --- a/src/main/java/net/mcreator/ui/minecraft/states/item/JItemPropertiesStatesList.java +++ b/src/main/java/net/mcreator/ui/minecraft/states/item/JItemPropertiesStatesList.java @@ -32,6 +32,7 @@ import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.states.JStateLabel; import net.mcreator.ui.minecraft.states.PropertyData; import net.mcreator.ui.minecraft.states.StateMap; @@ -105,7 +106,7 @@ builtinPropertyNames, new RegistryNameValidator((VTextField) component, JScrollPane scrollProperties = new JScrollPane(PanelUtils.pullElementUp(propertyEntries)) { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g2d.setColor(Theme.current().getAltBackgroundColor()); g2d.setComposite(AlphaComposite.SrcOver.derive(0.45f)); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); @@ -116,9 +117,9 @@ builtinPropertyNames, new RegistryNameValidator((VTextField) component, scrollProperties.setOpaque(false); scrollProperties.getViewport().setOpaque(false); scrollProperties.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.item.custom_properties.title"), 0, 0, scrollProperties.getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JPanel left = new JPanel(new BorderLayout()); left.setOpaque(false); left.add("North", PanelUtils.join(FlowLayout.LEFT, 0, 5, addProperty, new JEmptyBox(5, 5), @@ -129,7 +130,7 @@ builtinPropertyNames, new RegistryNameValidator((VTextField) component, JScrollPane scrollStates = new JScrollPane(PanelUtils.pullElementUp(stateEntries)) { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g2d.setColor(Theme.current().getAltBackgroundColor()); g2d.setComposite(AlphaComposite.SrcOver.derive(0.45f)); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); @@ -140,9 +141,9 @@ builtinPropertyNames, new RegistryNameValidator((VTextField) component, scrollStates.setOpaque(false); scrollStates.getViewport().setOpaque(false); scrollStates.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.item.custom_states.title"), 0, 0, scrollStates.getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JPanel right = new JPanel(new BorderLayout()); right.setOpaque(false); right.add("North", PanelUtils.join(FlowLayout.LEFT, 0, 5, addState, new JEmptyBox(5, 5), diff --git a/src/main/java/net/mcreator/ui/minecraft/villagers/JVillagerTradeEntry.java b/src/main/java/net/mcreator/ui/minecraft/villagers/JVillagerTradeEntry.java index f132371bc71..a839f1e9c23 100644 --- a/src/main/java/net/mcreator/ui/minecraft/villagers/JVillagerTradeEntry.java +++ b/src/main/java/net/mcreator/ui/minecraft/villagers/JVillagerTradeEntry.java @@ -28,6 +28,7 @@ import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.MCItemHolder; import javax.swing.*; @@ -55,7 +56,7 @@ public JVillagerTradeEntry(MCreator mcreator, IHelpContext gui, JPanel parent, List entryList) { setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); - setBackground(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker()); + setBackground((Theme.current().getAltBackgroundColor()).darker()); price1 = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); price2 = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); diff --git a/src/main/java/net/mcreator/ui/minecraft/villagers/JVillagerTradeProfession.java b/src/main/java/net/mcreator/ui/minecraft/villagers/JVillagerTradeProfession.java index 7958a61e34f..36106b7374f 100644 --- a/src/main/java/net/mcreator/ui/minecraft/villagers/JVillagerTradeProfession.java +++ b/src/main/java/net/mcreator/ui/minecraft/villagers/JVillagerTradeProfession.java @@ -29,6 +29,7 @@ import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.DataListComboBox; import net.mcreator.workspace.Workspace; @@ -65,7 +66,7 @@ public JVillagerTradeProfession(MCreator mcreator, IHelpContext gui, JPanel pare parent.add(container); professionList.add(this); - setBackground(((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")).brighter()); + setBackground((Theme.current().getBackgroundColor()).brighter()); JPanel topbar = new JPanel(new FlowLayout(FlowLayout.LEFT)); topbar.setOpaque(false); @@ -89,7 +90,7 @@ public JVillagerTradeProfession(MCreator mcreator, IHelpContext gui, JPanel pare JComponent component = PanelUtils.centerAndEastElement(topbar, PanelUtils.join(FlowLayout.RIGHT, add, remove)); component.setOpaque(true); - component.setBackground(((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")).brighter()); + component.setBackground((Theme.current().getBackgroundColor()).brighter()); add("North", component); entries.setOpaque(false); @@ -101,9 +102,9 @@ public JVillagerTradeProfession(MCreator mcreator, IHelpContext gui, JPanel pare add("Center", entries); setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.villager_trade.profession_trades"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); parent.revalidate(); parent.repaint(); diff --git a/src/main/java/net/mcreator/ui/modgui/AchievementGUI.java b/src/main/java/net/mcreator/ui/modgui/AchievementGUI.java index 9fa12d37615..09ea7b05525 100644 --- a/src/main/java/net/mcreator/ui/modgui/AchievementGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/AchievementGUI.java @@ -28,6 +28,7 @@ import net.mcreator.element.types.Achievement; import net.mcreator.generator.blockly.BlocklyBlockCodeGenerator; import net.mcreator.generator.blockly.ProceduralBlockCodeGenerator; +import net.mcreator.generator.mapping.NonMappableElement; import net.mcreator.generator.template.TemplateGeneratorException; import net.mcreator.minecraft.ElementUtil; import net.mcreator.ui.MCreator; @@ -41,6 +42,7 @@ import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; import net.mcreator.ui.laf.renderer.WTextureComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.DataListComboBox; import net.mcreator.ui.minecraft.MCItemHolder; import net.mcreator.ui.minecraft.ModElementListField; @@ -107,9 +109,8 @@ public AchievementGUI(MCreator mcreator, ModElement modElement, boolean editingM @Override protected void initGUI() { achievementIcon = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); - JPanel pane3 = new JPanel(new BorderLayout(10, 10)); - JPanel selp = new JPanel(new GridLayout(10, 2, 15, 2)); - JPanel selp2 = new JPanel(new GridLayout(4, 2, 10, 2)); + JPanel propertiesPanel = new JPanel(new GridLayout(7, 2, 10, 2)); + JPanel logicPanel = new JPanel(new GridLayout(7, 2, 10, 2)); rewardLoot = new ModElementListField(mcreator, ModElementType.LOOTTABLE); rewardRecipes = new ModElementListField(mcreator, ModElementType.RECIPE); @@ -128,75 +129,74 @@ public AchievementGUI(MCreator mcreator, ModElement modElement, boolean editingM showPopup.setSelected(true); announceToChat.setSelected(true); - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/name"), + propertiesPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/name"), L10N.label("elementgui.advancement.name"))); - selp.add(achievementName); + propertiesPanel.add(achievementName); - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/description"), + propertiesPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/description"), L10N.label("elementgui.advancement.description"))); - selp.add(achievementDescription); + propertiesPanel.add(achievementDescription); - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/icon"), + propertiesPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/icon"), L10N.label("elementgui.advancement.icon"))); - selp.add(PanelUtils.join(FlowLayout.LEFT, achievementIcon)); + propertiesPanel.add(PanelUtils.join(FlowLayout.LEFT, achievementIcon)); - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/background"), + propertiesPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/background"), L10N.label("elementgui.advancement.background"))); - selp.add(background); + propertiesPanel.add(background); - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/type"), + propertiesPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/type"), L10N.label("elementgui.advancement.type"))); - selp.add(achievementType); + propertiesPanel.add(achievementType); - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/parent"), + propertiesPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/parent"), L10N.label("elementgui.advancement.parent"))); - selp.add(parentAchievement); + propertiesPanel.add(parentAchievement); - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/show_toast"), + propertiesPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/show_toast"), L10N.label("elementgui.advancement.show_toast"))); - selp.add(showPopup); + propertiesPanel.add(showPopup); - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/announce_to_chat"), - L10N.label("elementgui.advancement.announce_to_chat"))); - selp.add(announceToChat); - - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/hide_if_not_completed"), - L10N.label("elementgui.advancement.hide_if_not_completed"))); - selp.add(hideIfNotCompleted); - - selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/hide_display"), - L10N.label("elementgui.advancement.hide_display"))); - selp.add(disableDisplay); - - selp2.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/reward_xp"), + logicPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/reward_xp"), L10N.label("elementgui.advancement.reward_xp"))); - selp2.add(rewardXP); + logicPanel.add(rewardXP); - selp2.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/reward_function"), + logicPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/reward_function"), L10N.label("elementgui.advancement.reward_functions"))); - selp2.add(rewardFunction); + logicPanel.add(rewardFunction); - selp2.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/reward_loot_tables"), + logicPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/reward_loot_tables"), L10N.label("elementgui.advancement.reward_loot_tables"))); - selp2.add(rewardLoot); + logicPanel.add(rewardLoot); - selp2.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/reward_recipes"), + logicPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/reward_recipes"), L10N.label("elementgui.advancement.reward_recipes"))); - selp2.add(rewardRecipes); + logicPanel.add(rewardRecipes); - selp2.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), - L10N.t("elementgui.advancement.logic"), 0, 0, selp2.getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + logicPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/announce_to_chat"), + L10N.label("elementgui.advancement.announce_to_chat"))); + logicPanel.add(announceToChat); - JComponent selpouter = PanelUtils.pullElementUp(selp); - selpouter.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), - L10N.t("elementgui.advancement.display_paramters"), 0, 0, selp.getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + logicPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/hide_if_not_completed"), + L10N.label("elementgui.advancement.hide_if_not_completed"))); + logicPanel.add(hideIfNotCompleted); - selp.setOpaque(false); - selp2.setOpaque(false); + logicPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("advancement/hide_display"), + L10N.label("elementgui.advancement.hide_display"))); + logicPanel.add(disableDisplay); + + logicPanel.setBorder(BorderFactory.createTitledBorder( + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), + L10N.t("elementgui.advancement.logic"), 0, 0, logicPanel.getFont().deriveFont(12.0f), + Theme.current().getForegroundColor())); + + propertiesPanel.setBorder(BorderFactory.createTitledBorder( + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), + L10N.t("elementgui.advancement.display_paramters"), 0, 0, propertiesPanel.getFont().deriveFont(12.0f), + Theme.current().getForegroundColor())); + + propertiesPanel.setOpaque(false); + logicPanel.setOpaque(false); achievementName.setValidator( new TextFieldValidator(achievementName, L10N.t("elementgui.advancement.cant_be_empty"))); @@ -225,19 +225,14 @@ public AchievementGUI(MCreator mcreator, ModElement modElement, boolean editingM JPanel advancementTrigger = (JPanel) PanelUtils.centerAndSouthElement(blocklyPanel, compileNotesPanel); advancementTrigger.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.advancement.trigger_builder"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, getFont(), Color.white)); - advancementTrigger.setPreferredSize(new Dimension(0, 330)); - - pane3.add("Center", PanelUtils.totalCenterInPanel(PanelUtils.centerInPanel( - PanelUtils.westAndEastElement(selpouter, - PanelUtils.northAndCenterElement(selp2, advancementTrigger))))); - - pane3.setOpaque(false); - - addPage(pane3); + JComponent wrap = PanelUtils.northAndCenterElement(PanelUtils.westAndCenterElement(propertiesPanel, logicPanel), + advancementTrigger); + wrap.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + addPage(wrap, false); if (!isEditingMode()) { String readableNameFromModElement = StringUtils.machineToReadableName(modElement.getName()); @@ -312,8 +307,8 @@ private synchronized void regenerateTrigger() { hideIfNotCompleted.setSelected(achievement.hideIfNotCompleted); rewardFunction.setSelectedItem(achievement.rewardFunction); background.setSelectedItem(achievement.background); - rewardLoot.setListElements(achievement.rewardLoot); - rewardRecipes.setListElements(achievement.rewardRecipes); + rewardLoot.setListElements(achievement.rewardLoot.stream().map(NonMappableElement::new).toList()); + rewardRecipes.setListElements(achievement.rewardRecipes.stream().map(NonMappableElement::new).toList()); rewardXP.setValue(achievement.rewardXP); blocklyPanel.setXMLDataOnly(achievement.triggerxml); @@ -338,8 +333,10 @@ private synchronized void regenerateTrigger() { achievement.hideIfNotCompleted = hideIfNotCompleted.isSelected(); achievement.rewardFunction = (String) rewardFunction.getSelectedItem(); achievement.background = (String) background.getSelectedItem(); - achievement.rewardLoot = rewardLoot.getListElements(); - achievement.rewardRecipes = rewardRecipes.getListElements(); + achievement.rewardLoot = rewardLoot.getListElements().stream().map(NonMappableElement::getUnmappedValue) + .collect(Collectors.toList()); + achievement.rewardRecipes = rewardRecipes.getListElements().stream().map(NonMappableElement::getUnmappedValue) + .collect(Collectors.toList()); achievement.rewardXP = (int) rewardXP.getValue(); achievement.triggerxml = blocklyPanel.getXML(); diff --git a/src/main/java/net/mcreator/ui/modgui/ArmorGUI.java b/src/main/java/net/mcreator/ui/modgui/ArmorGUI.java index e0e2fd641dc..2934c57b38d 100644 --- a/src/main/java/net/mcreator/ui/modgui/ArmorGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/ArmorGUI.java @@ -48,6 +48,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.laf.renderer.ModelComboBoxRenderer; import net.mcreator.ui.laf.renderer.WTextureComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.DataListComboBox; import net.mcreator.ui.minecraft.MCItemListField; import net.mcreator.ui.minecraft.SoundSelector; @@ -371,7 +372,7 @@ public ArmorGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JComponent helText = PanelUtils.centerAndSouthElement(PanelUtils.centerInPanelPadding(textureHelmet, 0, 0), enableHelmet); helText.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")), + BorderFactory.createLineBorder(Theme.current().getAltForegroundColor()), BorderFactory.createEmptyBorder(10, 0, 0, 0))); helText.setPreferredSize(new Dimension(145, 110)); @@ -384,7 +385,7 @@ public ArmorGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JComponent bodText = PanelUtils.centerAndSouthElement(PanelUtils.centerInPanelPadding(textureBody, 0, 0), enableBody); bodText.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")), + BorderFactory.createLineBorder(Theme.current().getAltForegroundColor()), BorderFactory.createEmptyBorder(10, 0, 0, 0))); bodText.setPreferredSize(new Dimension(145, 110)); @@ -423,7 +424,7 @@ public ArmorGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JComponent legText = PanelUtils.centerAndSouthElement(PanelUtils.centerInPanelPadding(textureLeggings, 0, 0), enableLeggings); legText.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")), + BorderFactory.createLineBorder(Theme.current().getAltForegroundColor()), BorderFactory.createEmptyBorder(10, 0, 0, 0))); legText.setPreferredSize(new Dimension(145, 110)); @@ -463,7 +464,7 @@ public ArmorGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JComponent bootText = PanelUtils.centerAndSouthElement(PanelUtils.centerInPanelPadding(textureBoots, 0, 0), enableBoots); bootText.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")), + BorderFactory.createLineBorder(Theme.current().getAltForegroundColor()), BorderFactory.createEmptyBorder(10, 0, 0, 0))); bootText.setPreferredSize(new Dimension(145, 110)); diff --git a/src/main/java/net/mcreator/ui/modgui/BiomeGUI.java b/src/main/java/net/mcreator/ui/modgui/BiomeGUI.java index 764b9e8d73d..76f66b49270 100644 --- a/src/main/java/net/mcreator/ui/modgui/BiomeGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/BiomeGUI.java @@ -33,6 +33,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.DataListComboBox; import net.mcreator.ui.minecraft.DefaultFeaturesListField; import net.mcreator.ui.minecraft.MCItemHolder; @@ -353,9 +354,9 @@ public BiomeGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JPanel sbbp3 = new JPanel(new GridLayout(1, 2, 0, 0)); sbbp3.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.biome.vanilla_features"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); sbbp3.add(HelpUtils.wrapWithHelpButton(this.withEntry("biome/default_features"), L10N.label("elementgui.biome.default_features"))); @@ -367,9 +368,9 @@ public BiomeGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JPanel sbbp5 = new JPanel(new GridLayout(8, 2, 0, 2)); sbbp5.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.biome.custom_tree_properties"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); sbbp5.setOpaque(false); sbbp5.add(HelpUtils.wrapWithHelpButton(this.withEntry("biome/trees_per_chunk"), @@ -489,9 +490,9 @@ public BiomeGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { sounds.add(moodSoundDelay); sounds.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.biome.sounds"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); sounds.setOpaque(false); @@ -512,9 +513,9 @@ public BiomeGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { particles.setOpaque(false); particles.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.biome.particles"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); spawnParticle.setOpaque(false); spawnParticle.addActionListener(event -> updateParticleParameters()); @@ -539,7 +540,7 @@ public BiomeGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { addPage(L10N.t("elementgui.biome.biome_generation"), pane5); addPage(L10N.t("elementgui.biome.features"), pane3); addPage(L10N.t("elementgui.biome.structures"), pane2); - addPage(L10N.t("elementgui.biome.entity_spawning"), pane1); + addPage(L10N.t("elementgui.biome.entity_spawning"), pane1, false); addPage(L10N.t("elementgui.biome.effects"), effectsPane); updateBiomeTreesForm(); diff --git a/src/main/java/net/mcreator/ui/modgui/BlockGUI.java b/src/main/java/net/mcreator/ui/modgui/BlockGUI.java index b2bdea1742e..84f922a482d 100644 --- a/src/main/java/net/mcreator/ui/modgui/BlockGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/BlockGUI.java @@ -44,8 +44,10 @@ import net.mcreator.ui.dialogs.TypedTextureSelectorDialog; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.renderer.ItemTexturesComboBoxRenderer; import net.mcreator.ui.laf.renderer.ModelComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.*; import net.mcreator.ui.minecraft.boundingboxes.JBoundingBoxList; import net.mcreator.ui.procedure.AbstractProcedureSelector; @@ -186,7 +188,7 @@ public class BlockGUI extends ModElementGUI { new String[] { "NORMAL", "DESTROY", "BLOCK", "PUSH_ONLY", "IGNORE" }); private final JComboBox offsetType = new JComboBox<>(new String[] { "NONE", "XZ", "XYZ" }); - private final JComboBox aiPathNodeType = new JComboBox<>(); + private final SearchableComboBox aiPathNodeType = new SearchableComboBox<>(); private final DataListComboBox creativeTab = new DataListComboBox(mcreator); @@ -222,7 +224,7 @@ public class BlockGUI extends ModElementGUI { private final JCheckBox hasInventory = L10N.checkbox("elementgui.block.has_inventory"); private final JCheckBox openGUIOnRightClick = L10N.checkbox("elementgui.common.enable"); - private final JComboBox guiBoundTo = new JComboBox<>(); + private final SearchableComboBox guiBoundTo = new SearchableComboBox<>(); private final JSpinner inventorySize = new JSpinner(new SpinnerNumberModel(9, 0, 256, 1)); private final JSpinner inventoryStackSize = new JSpinner(new SpinnerNumberModel(64, 1, 1024, 1)); @@ -235,7 +237,7 @@ public class BlockGUI extends ModElementGUI { private final ValidationGroup page1group = new ValidationGroup(); private final ValidationGroup page3group = new ValidationGroup(); - private final JComboBox blockBase = new JComboBox<>( + private final SearchableComboBox blockBase = new SearchableComboBox<>( new String[] { "Default basic block", "Stairs", "Slab", "Fence", "Wall", "Leaves", "TrapDoor", "Pane", "Door", "FenceGate", "EndRod", "PressurePlate", "Button" }); @@ -485,9 +487,9 @@ public BlockGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JPanel txblock4 = new JPanel(new BorderLayout()); txblock4.setOpaque(false); txblock4.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.block_base_item_texture"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); txblock4.add("Center", PanelUtils.gridElements(3, 2, HelpUtils.wrapWithHelpButton(this.withEntry("block/base"), L10N.label("elementgui.block.block_base")), @@ -505,9 +507,9 @@ public BlockGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { plantsGrowOn.setOpaque(false); sbbp22.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.block_textures"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JPanel topnbot = new JPanel(new BorderLayout()); topnbot.setOpaque(false); @@ -516,9 +518,9 @@ public BlockGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JComponent txblock3 = PanelUtils.gridElements(1, 1, specialInformation); txblock3.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.special_information"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); sbbp2.add("Center", topnbot); @@ -595,17 +597,17 @@ public BlockGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { topnbot.add("South", PanelUtils.northAndCenterElement(tintPanel, txblock4)); rent.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.render_type"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); transparencySettings.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.transparency"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); tintPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.block_tint"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); render.add(rent); render.add(transparencySettings); @@ -861,23 +863,23 @@ public BlockGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { }); selp.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.properties_general"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont(), Theme.current().getForegroundColor())); selp3.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.properties_dropping"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont(), Theme.current().getForegroundColor())); soundProperties.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.properties_sound"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont(), Theme.current().getForegroundColor())); advancedWithCondition.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.properties_advanced_block"), TitledBorder.LEADING, - TitledBorder.DEFAULT_POSITION, getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + TitledBorder.DEFAULT_POSITION, getFont(), Theme.current().getForegroundColor())); selp.setOpaque(false); soundProperties.setOpaque(false); @@ -966,7 +968,7 @@ public BlockGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { guiBoundTo.addActionListener(e -> { if (!isEditingMode()) { - String selected = (String) guiBoundTo.getSelectedItem(); + String selected = guiBoundTo.getSelectedItem(); if (selected != null) { ModElement element = mcreator.getWorkspace().getModElementByName(selected); if (element != null) { @@ -998,14 +1000,14 @@ else if (slot instanceof OutputSlot) fluidTank.setOpaque(false); energyStorage.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.energy_storage"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); fluidTank.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.fluid_tank"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); hasEnergyStorage.setOpaque(false); isFluidTank.setOpaque(false); @@ -1051,9 +1053,9 @@ else if (slot instanceof OutputSlot) refreshFieldsTileEntity(); props.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.settings_inventory"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); invblock.add("Center", props); @@ -1107,9 +1109,9 @@ else if (slot instanceof OutputSlot) JComponent redstoneMerger = PanelUtils.northAndCenterElement(redstoneParameters, emittedRedstonePower, 2, 2); redstoneMerger.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.block.properties_redstone"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); canProvidePower.addActionListener(e -> refreshRedstoneEmitted()); refreshRedstoneEmitted(); @@ -1130,9 +1132,9 @@ else if (slot instanceof OutputSlot) JComponent bonemealMerger = PanelUtils.northAndCenterElement(bonemealPanel, bonemealEvents, 2, 2); bonemealMerger.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.properties_bonemeal"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); isBonemealable.addActionListener(e -> refreshBonemealProperties()); refreshBonemealProperties(); @@ -1157,7 +1159,9 @@ else if (slot instanceof OutputSlot) pane7.setOpaque(false); pane9.setOpaque(false); - pane9.add("Center", PanelUtils.totalCenterInPanel(genPanel)); + JComponent genPanelWithChunk = PanelUtils.westAndCenterElement(new JLabel(UIRES.get("chunk")), + PanelUtils.pullElementUp(genPanel), 25, 0); + pane9.add("Center", PanelUtils.totalCenterInPanel(genPanelWithChunk)); texture.setValidator(new TileHolderValidator(texture)); @@ -1186,7 +1190,7 @@ else if (slot instanceof OutputSlot) page3group.addValidationElement(stepSound.getVTextField()); addPage(L10N.t("elementgui.common.page_visual"), pane2); - addPage(L10N.t("elementgui.common.page_bounding_boxes"), bbPane); + addPage(L10N.t("elementgui.common.page_bounding_boxes"), bbPane, false); addPage(L10N.t("elementgui.common.page_properties"), pane3); addPage(L10N.t("elementgui.common.page_advanced_properties"), pane7); addPage(L10N.t("elementgui.block.page_tile_entity"), pane8); @@ -1487,7 +1491,7 @@ else if (page == 7) block.transparencyType = (String) transparencyType.getSelectedItem(); block.tintType = (String) tintType.getSelectedItem(); block.isItemTinted = isItemTinted.isSelected(); - block.guiBoundTo = (String) guiBoundTo.getSelectedItem(); + block.guiBoundTo = guiBoundTo.getSelectedItem(); block.rotationMode = rotationMode.getSelectedIndex(); block.enablePitch = enablePitch.isSelected(); block.enchantPowerBonus = (double) enchantPowerBonus.getValue(); @@ -1590,7 +1594,7 @@ else if (page == 7) block.canProvidePower = canProvidePower.isSelected(); block.colorOnMap = colorOnMap.getSelectedItem().toString(); block.offsetType = (String) offsetType.getSelectedItem(); - block.aiPathNodeType = (String) aiPathNodeType.getSelectedItem(); + block.aiPathNodeType = aiPathNodeType.getSelectedItem(); block.creativePickItem = creativePickItem.getBlock(); block.placingCondition = placingCondition.getSelectedProcedure(); @@ -1604,7 +1608,7 @@ else if (page == 7) block.jumpFactor = (double) jumpFactor.getValue(); if (blockBase.getSelectedIndex() != 0) - block.blockBase = (String) blockBase.getSelectedItem(); + block.blockBase = blockBase.getSelectedItem(); Model model = Objects.requireNonNull(renderType.getSelectedItem()); block.renderType = 10; diff --git a/src/main/java/net/mcreator/ui/modgui/CommandGUI.java b/src/main/java/net/mcreator/ui/modgui/CommandGUI.java index 9956096d3b1..95601cbfb5d 100644 --- a/src/main/java/net/mcreator/ui/modgui/CommandGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/CommandGUI.java @@ -37,6 +37,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.ValidationGroup; import net.mcreator.ui.validation.component.VTextField; @@ -111,9 +112,9 @@ public CommandGUI(MCreator mcreator, ModElement modElement, boolean editingMode) new BlocklyEditorToolbar(mcreator, BlocklyEditorType.COMMAND_ARG, blocklyPanel), blocklyPanel), compileNotesPanel); args.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.command.arguments"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, getFont(), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); args.setOpaque(false); commandName.setValidator( diff --git a/src/main/java/net/mcreator/ui/modgui/CustomGUIGUI.java b/src/main/java/net/mcreator/ui/modgui/CustomGUIGUI.java index 916334b943a..48237694fea 100644 --- a/src/main/java/net/mcreator/ui/modgui/CustomGUIGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/CustomGUIGUI.java @@ -21,6 +21,7 @@ import net.mcreator.blockly.data.Dependency; import net.mcreator.element.types.GUI; import net.mcreator.ui.MCreator; +import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.component.CollapsiblePanel; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; @@ -29,8 +30,11 @@ import net.mcreator.ui.wysiwyg.WYSIWYGEditor; import net.mcreator.workspace.elements.ModElement; +import javax.annotation.Nullable; import javax.swing.*; import java.awt.*; +import java.net.URI; +import java.net.URISyntaxException; public class CustomGUIGUI extends ModElementGUI { @@ -135,4 +139,8 @@ public CustomGUIGUI(MCreator mcreator, ModElement modElement, boolean editingMod return gui; } + @Override public @Nullable URI contextURL() throws URISyntaxException { + return new URI(MCreatorApplication.SERVER_DOMAIN + "/wiki/gui-editor"); + } + } diff --git a/src/main/java/net/mcreator/ui/modgui/DamageTypeGUI.java b/src/main/java/net/mcreator/ui/modgui/DamageTypeGUI.java new file mode 100644 index 00000000000..38a8beab1bb --- /dev/null +++ b/src/main/java/net/mcreator/ui/modgui/DamageTypeGUI.java @@ -0,0 +1,174 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.modgui; + +import net.mcreator.element.types.DamageType; +import net.mcreator.ui.MCreator; +import net.mcreator.ui.MCreatorApplication; +import net.mcreator.ui.component.util.ComponentUtils; +import net.mcreator.ui.component.util.PanelUtils; +import net.mcreator.ui.help.HelpUtils; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.validation.AggregatedValidationResult; +import net.mcreator.ui.validation.ValidationGroup; +import net.mcreator.ui.validation.component.VTextField; +import net.mcreator.ui.validation.validators.TextFieldValidator; +import net.mcreator.workspace.elements.ModElement; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.swing.*; +import javax.swing.border.TitledBorder; +import java.awt.*; +import java.net.URI; +import java.net.URISyntaxException; + +public class DamageTypeGUI extends ModElementGUI { + + private final JSpinner exhaustion = new JSpinner(new SpinnerNumberModel(0.1, 0, 100, 0.01)); + private final JComboBox scaling = new JComboBox<>( + new String[] { "never", "always", "when_caused_by_living_non_player" }); + private final JComboBox effects = new JComboBox<>( + new String[] { "hurt", "thorns", "drowning", "burning", "poking", "freezing" }); + private final VTextField normalDeathMessage = new VTextField(28); + private final VTextField itemDeathMessage = new VTextField(28); + private final VTextField playerDeathMessage = new VTextField(28); + + private final ValidationGroup page1group = new ValidationGroup(); + + public DamageTypeGUI(MCreator mcreator, @Nonnull ModElement modElement, boolean editingMode) { + super(mcreator, modElement, editingMode); + this.initGUI(); + super.finalizeGUI(); + } + + @Override protected void initGUI() { + JPanel page = new JPanel(new BorderLayout(10, 10)); + page.setOpaque(false); + + JPanel damageProperties = new JPanel(new GridLayout(3, 2, 20, 2)); + damageProperties.setBorder(BorderFactory.createTitledBorder( + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), + L10N.t("elementgui.damagetype.damage_properties"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, + getFont(), Theme.current().getForegroundColor())); + damageProperties.setOpaque(false); + + exhaustion.setOpaque(false); + + damageProperties.add(HelpUtils.wrapWithHelpButton(this.withEntry("damagetype/exhaustion"), + L10N.label("elementgui.damagetype.exhaustion"))); + damageProperties.add(exhaustion); + + damageProperties.add(HelpUtils.wrapWithHelpButton(this.withEntry("damagetype/scaling"), + L10N.label("elementgui.damagetype.scaling"))); + damageProperties.add(scaling); + + damageProperties.add(HelpUtils.wrapWithHelpButton(this.withEntry("damagetype/effects"), + L10N.label("elementgui.damagetype.effects"))); + damageProperties.add(effects); + + JPanel localizationPanel = new JPanel(new GridLayout(3, 2, 20, 2)); + localizationPanel.setBorder(BorderFactory.createTitledBorder( + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), + L10N.t("elementgui.damagetype.death_messages"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, + getFont(), Theme.current().getForegroundColor())); + localizationPanel.setOpaque(false); + + ComponentUtils.deriveFont(normalDeathMessage, 16); + ComponentUtils.deriveFont(itemDeathMessage, 16); + ComponentUtils.deriveFont(playerDeathMessage, 16); + + localizationPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("damagetype/normal_death_message"), + L10N.label("elementgui.damagetype.normal_death_message"))); + localizationPanel.add(normalDeathMessage); + + localizationPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("damagetype/item_death_message"), + L10N.label("elementgui.damagetype.item_death_message"))); + localizationPanel.add(itemDeathMessage); + + localizationPanel.add(HelpUtils.wrapWithHelpButton(this.withEntry("damagetype/player_death_message"), + L10N.label("elementgui.damagetype.player_death_message"))); + localizationPanel.add(playerDeathMessage); + + normalDeathMessage.setValidator( + new TextFieldValidator(normalDeathMessage, L10N.t("elementgui.damagetype.error_empty_death_message"))); + normalDeathMessage.enableRealtimeValidation(); + page1group.addValidationElement(normalDeathMessage); + + itemDeathMessage.setValidator( + new TextFieldValidator(itemDeathMessage, L10N.t("elementgui.damagetype.error_empty_death_message"))); + itemDeathMessage.enableRealtimeValidation(); + page1group.addValidationElement(itemDeathMessage); + + playerDeathMessage.setValidator( + new TextFieldValidator(playerDeathMessage, L10N.t("elementgui.damagetype.error_empty_death_message"))); + playerDeathMessage.enableRealtimeValidation(); + page1group.addValidationElement(playerDeathMessage); + + page.add("Center", + PanelUtils.totalCenterInPanel(PanelUtils.northAndCenterElement(damageProperties, localizationPanel))); + addPage(L10N.t("elementgui.common.page_properties"), page); + + if (!isEditingMode()) { + normalDeathMessage.setText(" died"); + itemDeathMessage.setText(" was killed by using "); + playerDeathMessage.setText(" died whilst trying to escape "); + } + + } + + @Override protected AggregatedValidationResult validatePage(int page) { + if (page == 0) + return new AggregatedValidationResult(page1group); + return new AggregatedValidationResult.PASS(); + } + + @Override protected void openInEditingMode(DamageType damageType) { + exhaustion.setValue(damageType.exhaustion); + scaling.setSelectedItem(damageType.scaling); + effects.setSelectedItem(damageType.effects); + normalDeathMessage.setText( + damageType.normalDeathMessage.replace("%1$s", "").replace("%2$s", "")); + itemDeathMessage.setText(damageType.itemDeathMessage.replace("%1$s", "").replace("%2$s", "") + .replace("%3$s", "")); + playerDeathMessage.setText( + damageType.playerDeathMessage.replace("%1$s", "").replace("%2$s", "")); + } + + @Override public DamageType getElementFromGUI() { + DamageType damageType = new DamageType(modElement); + damageType.exhaustion = (double) exhaustion.getValue(); + damageType.scaling = (String) scaling.getSelectedItem(); + damageType.effects = (String) effects.getSelectedItem(); + damageType.normalDeathMessage = normalDeathMessage.getText().replace("", "%1$s") + .replace("", "%2$s"); + damageType.itemDeathMessage = itemDeathMessage.getText().replace("", "%1$s") + .replace("", "%2$s").replace("", "%3$s"); + damageType.playerDeathMessage = playerDeathMessage.getText().replace("", "%1$s") + .replace("", "%2$s"); + return damageType; + } + + @Override public @Nullable URI contextURL() throws URISyntaxException { + return new URI(MCreatorApplication.SERVER_DOMAIN + "/wiki/how-make-damage-type"); + } + +} diff --git a/src/main/java/net/mcreator/ui/modgui/DimensionGUI.java b/src/main/java/net/mcreator/ui/modgui/DimensionGUI.java index b19b0347ad5..1dfb3c6ae31 100644 --- a/src/main/java/net/mcreator/ui/modgui/DimensionGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/DimensionGUI.java @@ -37,6 +37,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.renderer.ItemTexturesComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.*; import net.mcreator.ui.procedure.AbstractProcedureSelector; import net.mcreator.ui.procedure.ProcedureSelector; @@ -280,9 +281,9 @@ public DimensionGUI(MCreator mcreator, ModElement modElement, boolean editingMod igniterPanel.add("South", PanelUtils.centerAndSouthElement(proper22, conditions, 2, 2)); igniterPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.dimension.portal_igniter_properties"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JPanel propertiesPanel = new JPanel(new BorderLayout(5, 2)); propertiesPanel.setOpaque(false); @@ -293,9 +294,9 @@ public DimensionGUI(MCreator mcreator, ModElement modElement, boolean editingMod propertiesPanel.add("South", portalUseCondition); propertiesPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.dimension.portal_properties"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JPanel dsg = new JPanel(new BorderLayout(5, 2)); dsg.setOpaque(false); diff --git a/src/main/java/net/mcreator/ui/modgui/FeatureGUI.java b/src/main/java/net/mcreator/ui/modgui/FeatureGUI.java index c8f0f013f91..c94ca8df140 100644 --- a/src/main/java/net/mcreator/ui/modgui/FeatureGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/FeatureGUI.java @@ -32,15 +32,16 @@ import net.mcreator.generator.template.TemplateGeneratorException; import net.mcreator.minecraft.ElementUtil; import net.mcreator.ui.MCreator; +import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.blockly.BlocklyEditorToolbar; import net.mcreator.ui.blockly.BlocklyEditorType; import net.mcreator.ui.blockly.BlocklyPanel; import net.mcreator.ui.blockly.CompileNotesPanel; import net.mcreator.ui.component.JEmptyBox; -import net.mcreator.ui.component.util.ComboBoxUtil; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.BiomeListField; import net.mcreator.ui.procedure.ProcedureSelector; import net.mcreator.ui.validation.AggregatedValidationResult; @@ -49,10 +50,12 @@ import net.mcreator.workspace.elements.VariableTypeLoader; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; -import java.util.Arrays; +import java.net.URI; +import java.net.URISyntaxException; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -61,7 +64,8 @@ public class FeatureGUI extends ModElementGUI implements IBlocklyPanelH private ProcedureSelector generateCondition; private BiomeListField restrictionBiomes; - private final JComboBox generationStep = new JComboBox<>(); + private final JComboBox generationStep = new JComboBox<>( + ElementUtil.getDataListAsStringArray("generationsteps")); private BlocklyPanel blocklyPanel; private final CompileNotesPanel compileNotesPanel = new CompileNotesPanel(); @@ -80,11 +84,11 @@ public FeatureGUI(MCreator mcreator, @Nonnull ModElement modElement, boolean edi Dependency.fromString("x:number/y:number/z:number/world:world")).setDefaultName( L10N.t("condition.common.no_additional")).makeInline(); + if (!isEditingMode()) + generationStep.setSelectedItem("SURFACE_STRUCTURES"); + restrictionBiomes = new BiomeListField(mcreator, true); restrictionBiomes.setValidator(new ItemListFieldSingleTagValidator(restrictionBiomes)); - - restrictionBiomes.setPreferredSize(new Dimension(380, -1)); - restrictionBiomes.setPreferredSize(new Dimension(380, -1)); JPanel page1 = new JPanel(new BorderLayout(10, 10)); @@ -126,7 +130,7 @@ public FeatureGUI(MCreator mcreator, @Nonnull ModElement modElement, boolean edi JPanel featureProcedure = (JPanel) PanelUtils.centerAndSouthElement(blocklyAndToolbarPanel, compileNotesPanel); featureProcedure.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.feature.feature_builder"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, getFont(), Color.white)); @@ -176,8 +180,6 @@ null, new ProceduralBlockCodeGenerator(blocklyBlockCodeGenerator), @Override public void reloadDataLists() { super.reloadDataLists(); - ComboBoxUtil.updateComboBoxContents(generationStep, - Arrays.asList(ElementUtil.getDataListAsStringArray("generationsteps")), "SURFACE_STRUCTURES"); generateCondition.refreshListKeepSelected(); } @@ -209,4 +211,8 @@ null, new ProceduralBlockCodeGenerator(blocklyBlockCodeGenerator), return List.of(blocklyPanel); } + @Override public @Nullable URI contextURL() throws URISyntaxException { + return new URI(MCreatorApplication.SERVER_DOMAIN + "/wiki/how-make-feature"); + } + } diff --git a/src/main/java/net/mcreator/ui/modgui/FluidGUI.java b/src/main/java/net/mcreator/ui/modgui/FluidGUI.java index f94bd765e43..20dd9981929 100644 --- a/src/main/java/net/mcreator/ui/modgui/FluidGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/FluidGUI.java @@ -34,6 +34,7 @@ import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; import net.mcreator.ui.laf.renderer.ItemTexturesComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.DataListComboBox; import net.mcreator.ui.minecraft.SoundSelector; import net.mcreator.ui.minecraft.TextureHolder; @@ -264,17 +265,17 @@ public FluidGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { }); bcProp.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.fluid.bucket_properties"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont().deriveFont(12.0f), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont().deriveFont(12.0f), Theme.current().getForegroundColor())); JComponent destala = PanelUtils.northAndCenterElement(destal, PanelUtils.westAndCenterElement(new JEmptyBox(4, 4), flowCondition), 0, 2); destala.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.fluid.fluid_properties"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont().deriveFont(12.0f), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont().deriveFont(12.0f), Theme.current().getForegroundColor())); JComponent fluidBucketProperties = PanelUtils.westAndEastElement(destala, PanelUtils.pullElementUp(bcProp)); fluidBucketProperties.setOpaque(false); @@ -327,9 +328,9 @@ public FluidGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { blockProperties.add(emissiveRendering); blockProperties.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.fluid.block_properties"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont().deriveFont(12.0f), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont().deriveFont(12.0f), Theme.current().getForegroundColor())); JPanel forgeProperties = new JPanel(new GridLayout(4, 2, 20, 2)); forgeProperties.setOpaque(false); @@ -360,9 +361,9 @@ public FluidGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { forgeProperties.add(temperature); forgeProperties.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.fluid.modded_properties"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont().deriveFont(12.0f), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont().deriveFont(12.0f), Theme.current().getForegroundColor())); JComponent properties = PanelUtils.westAndEastElement(blockProperties, PanelUtils.pullElementUp(forgeProperties)); diff --git a/src/main/java/net/mcreator/ui/modgui/FunctionGUI.java b/src/main/java/net/mcreator/ui/modgui/FunctionGUI.java index 312636604e6..7209642200b 100644 --- a/src/main/java/net/mcreator/ui/modgui/FunctionGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/FunctionGUI.java @@ -18,6 +18,7 @@ package net.mcreator.ui.modgui; +import net.mcreator.element.ModElementType; import net.mcreator.element.types.Function; import net.mcreator.minecraft.RegistryNameFixer; import net.mcreator.ui.MCreator; @@ -27,9 +28,11 @@ import net.mcreator.ui.ide.RSyntaxTextAreaStyler; import net.mcreator.ui.ide.mcfunction.MinecraftCommandsTokenMaker; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.validators.RegistryNameValidator; +import net.mcreator.ui.validation.validators.UniqueNameValidator; import net.mcreator.workspace.elements.ModElement; import org.fife.rsta.ac.LanguageSupportFactory; import org.fife.ui.rsyntaxtextarea.AbstractTokenMakerFactory; @@ -43,6 +46,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Arrays; +import java.util.Objects; public class FunctionGUI extends ModElementGUI { @@ -61,7 +65,18 @@ public FunctionGUI(MCreator mcreator, ModElement modElement, boolean editingMode JPanel pane3 = new JPanel(new BorderLayout()); pane3.setOpaque(false); - name.setValidator(new RegistryNameValidator(name, "Function").setValidChars(Arrays.asList('_', '/'))); + //@formatter:off + name.setValidator(new UniqueNameValidator( + L10N.t("modelement.function"), + () -> namespace.getSelectedItem() + ":" + name.getText(), + () -> mcreator.getWorkspace().getModElements().stream() + .filter(me -> me.getType() == ModElementType.FUNCTION) + .map(ModElement::getGeneratableElement) + .filter(Objects::nonNull) + .map(ge -> ((Function) ge).namespace + ":" + ((Function) ge).name), + new RegistryNameValidator(name, L10N.t("modelement.function")).setValidChars(Arrays.asList('_', '/')) + ).setIsPresentOnList(this::isEditingMode)); + //@formatter:on name.enableRealtimeValidation(); if (isEditingMode()) { @@ -98,12 +113,12 @@ public FunctionGUI(MCreator mcreator, ModElement modElement, boolean editingMode te.setTabsEmulated(false); sp.setFoldIndicatorEnabled(true); - sp.getGutter().setFoldBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - sp.getGutter().setBorderColor((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - sp.getGutter().setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + sp.getGutter().setFoldBackground(Theme.current().getBackgroundColor()); + sp.getGutter().setBorderColor(Theme.current().getBackgroundColor()); + sp.getGutter().setBackground(Theme.current().getBackgroundColor()); sp.getGutter().setBookmarkingEnabled(true); sp.setIconRowHeaderEnabled(false); - sp.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + sp.setBackground(Theme.current().getBackgroundColor()); sp.setBorder(null); AbstractTokenMakerFactory atmf = (AbstractTokenMakerFactory) TokenMakerFactory.getDefaultInstance(); diff --git a/src/main/java/net/mcreator/ui/modgui/ItemExtensionGUI.java b/src/main/java/net/mcreator/ui/modgui/ItemExtensionGUI.java index 38a5f3d2e1a..1ff19b446a3 100644 --- a/src/main/java/net/mcreator/ui/modgui/ItemExtensionGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/ItemExtensionGUI.java @@ -28,6 +28,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.MCItemHolder; import net.mcreator.ui.procedure.NumberProcedureSelector; import net.mcreator.ui.procedure.ProcedureSelector; @@ -40,7 +41,6 @@ import javax.annotation.Nullable; import javax.swing.*; import javax.swing.border.TitledBorder; -import java.awt.*; import java.net.URI; import java.net.URISyntaxException; @@ -86,18 +86,18 @@ public ItemExtensionGUI(MCreator mcreator, ModElement modElement, boolean editin JComponent fuelPanel = PanelUtils.northAndCenterElement(fuelTopPanel, fuelSuccessCondition, 0, 2); fuelPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.item_extension.fuel_properties"), TitledBorder.LEADING, - TitledBorder.DEFAULT_POSITION, getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + TitledBorder.DEFAULT_POSITION, getFont(), Theme.current().getForegroundColor())); // Compostable JComponent compostPanel = PanelUtils.gridElements(1, 2, 0, 2, HelpUtils.wrapWithHelpButton(this.withEntry("item_extension/layer_chance"), L10N.label("elementgui.item_extension.layer_chance")), compostLayerChance); compostPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.item_extension.compost_properties"), TitledBorder.LEADING, - TitledBorder.DEFAULT_POSITION, getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + TitledBorder.DEFAULT_POSITION, getFont(), Theme.current().getForegroundColor())); // Dispenser behaviour dispenseSuccessCondition = new ProcedureSelector(this.withEntry("item_extension/dispense_success_condition"), @@ -123,9 +123,9 @@ public ItemExtensionGUI(MCreator mcreator, ModElement modElement, boolean editin JComponent dispenserBehaviourPanel = PanelUtils.gridElements(3, 1, 0, 2, canDispense, dispenseSuccessCondition, dispenseResultItemstack); dispenserBehaviourPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.item_extension.dispense_properties"), TitledBorder.LEADING, - TitledBorder.DEFAULT_POSITION, getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + TitledBorder.DEFAULT_POSITION, getFont(), Theme.current().getForegroundColor())); JPanel itemPanel = PanelUtils.join(HelpUtils.wrapWithHelpButton(this.withEntry("item_extension/item"), L10N.label("elementgui.item_extension.item")), PanelUtils.centerInPanel(item)); diff --git a/src/main/java/net/mcreator/ui/modgui/ItemGUI.java b/src/main/java/net/mcreator/ui/modgui/ItemGUI.java index e14b6c65e5a..18170728873 100644 --- a/src/main/java/net/mcreator/ui/modgui/ItemGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/ItemGUI.java @@ -37,6 +37,7 @@ import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; import net.mcreator.ui.laf.renderer.ModelComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.DataListComboBox; import net.mcreator.ui.minecraft.MCItemHolder; import net.mcreator.ui.minecraft.TextureHolder; @@ -126,7 +127,7 @@ public class ItemGUI extends ModElementGUI { private final JSpinner damageVsEntity = new JSpinner(new SpinnerNumberModel(0, 0, 128000, 0.1)); private final JCheckBox enableMeleeDamage = new JCheckBox(); - private final JComboBox guiBoundTo = new JComboBox<>(); + private final SearchableComboBox guiBoundTo = new SearchableComboBox<>(); private final JSpinner inventorySize = new JSpinner(new SpinnerNumberModel(9, 0, 256, 1)); private final JSpinner inventoryStackSize = new JSpinner(new SpinnerNumberModel(64, 1, 1024, 1)); @@ -198,7 +199,7 @@ public ItemGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { guiBoundTo.addActionListener(e -> { if (!isEditingMode()) { - String selected = (String) guiBoundTo.getSelectedItem(); + String selected = guiBoundTo.getSelectedItem(); if (selected != null) { ModElement element = mcreator.getWorkspace().getModElementByName(selected); if (element != null) { @@ -243,9 +244,9 @@ public ItemGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { renderType.setRenderer(new ModelComboBoxRenderer()); rent.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.item.item_3d_model"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); destal2.add("North", PanelUtils.totalCenterInPanel(PanelUtils.westAndCenterElement( ComponentUtils.squareAndBorder(texture, L10N.t("elementgui.item.texture")), rent))); @@ -404,9 +405,9 @@ public ItemGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JPanel inventoryProperties = new JPanel(new GridLayout(3, 2, 35, 2)); inventoryProperties.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.page_inventory"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont(), Theme.current().getForegroundColor())); inventoryProperties.setOpaque(false); inventoryProperties.add( @@ -449,9 +450,9 @@ public ItemGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { rangedPanel.setOpaque(false); rangedPanel.add("Center", PanelUtils.centerAndSouthElement(rangedProperties, rangedTriggers)); rangedPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.item.ranged_properties"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont(), Theme.current().getForegroundColor())); advancedProperties.add("Center", PanelUtils.totalCenterInPanel( PanelUtils.centerAndEastElement(PanelUtils.pullElementUp(inventoryProperties), rangedPanel, 10, 10))); @@ -464,7 +465,7 @@ public ItemGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { name.enableRealtimeValidation(); addPage(L10N.t("elementgui.common.page_visual"), pane2); - addPage(L10N.t("elementgui.item.page_item_states"), cipp); + addPage(L10N.t("elementgui.item.page_item_states"), cipp, false); addPage(L10N.t("elementgui.common.page_properties"), pane3); addPage(L10N.t("elementgui.item.food_properties"), foodProperties); addPage(L10N.t("elementgui.common.page_advanced_properties"), advancedProperties); @@ -653,7 +654,7 @@ else if (page == 2) item.enableMeleeDamage = enableMeleeDamage.isSelected(); item.inventorySize = (int) inventorySize.getValue(); item.inventoryStackSize = (int) inventoryStackSize.getValue(); - item.guiBoundTo = (String) guiBoundTo.getSelectedItem(); + item.guiBoundTo = guiBoundTo.getSelectedItem(); item.isFood = isFood.isSelected(); item.nutritionalValue = (int) nutritionalValue.getValue(); item.saturation = (double) saturation.getValue(); diff --git a/src/main/java/net/mcreator/ui/modgui/KeyBindGUI.java b/src/main/java/net/mcreator/ui/modgui/KeyBindGUI.java index af1db317d79..f27b38b37c6 100644 --- a/src/main/java/net/mcreator/ui/modgui/KeyBindGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/KeyBindGUI.java @@ -23,10 +23,12 @@ import net.mcreator.minecraft.DataListEntry; import net.mcreator.minecraft.DataListLoader; import net.mcreator.ui.MCreator; +import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.procedure.ProcedureSelector; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.component.VComboBox; @@ -36,8 +38,12 @@ import net.mcreator.util.StringUtils; import net.mcreator.workspace.elements.ModElement; +import javax.annotation.Nullable; import javax.swing.*; import java.awt.*; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Objects; public class KeyBindGUI extends ModElementGUI { @@ -94,9 +100,9 @@ public KeyBindGUI(MCreator mcreator, ModElement modElement, boolean editingMode) JPanel events = new JPanel(new GridLayout(1, 2, 5, 5)); events.setOpaque(false); events.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.keybind.key_procedure_triggers"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); events.add(onKeyPressed); events.add(onKeyReleased); @@ -145,7 +151,7 @@ public KeyBindGUI(MCreator mcreator, ModElement modElement, boolean editingMode) @Override public KeyBinding getElementFromGUI() { KeyBinding keyBinding = new KeyBinding(modElement); - keyBinding.triggerKey = (String) triggerKey.getSelectedItem(); + keyBinding.triggerKey = (String) Objects.requireNonNull(triggerKey.getSelectedItem()); keyBinding.keyBindingName = keyBindingName.getText(); keyBinding.onKeyPressed = onKeyPressed.getSelectedProcedure(); keyBinding.onKeyReleased = onKeyReleased.getSelectedProcedure(); @@ -153,4 +159,8 @@ public KeyBindGUI(MCreator mcreator, ModElement modElement, boolean editingMode) return keyBinding; } + @Override public @Nullable URI contextURL() throws URISyntaxException { + return new URI(MCreatorApplication.SERVER_DOMAIN + "/wiki/how-make-key-binding"); + } + } diff --git a/src/main/java/net/mcreator/ui/modgui/LivingEntityGUI.java b/src/main/java/net/mcreator/ui/modgui/LivingEntityGUI.java index 9d28a2bdb83..99be90f50f1 100644 --- a/src/main/java/net/mcreator/ui/modgui/LivingEntityGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/LivingEntityGUI.java @@ -53,9 +53,13 @@ import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.renderer.ModelComboBoxRenderer; import net.mcreator.ui.laf.renderer.WTextureComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.*; +import net.mcreator.ui.minecraft.modellayers.JModelLayerList; +import net.mcreator.ui.minecraft.states.entity.JEntityDataList; import net.mcreator.ui.procedure.AbstractProcedureSelector; import net.mcreator.ui.procedure.LogicProcedureSelector; +import net.mcreator.ui.procedure.NumberProcedureSelector; import net.mcreator.ui.procedure.ProcedureSelector; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.Validator; @@ -100,6 +104,8 @@ public class LivingEntityGUI extends ModElementGUI implements IBlo private LogicProcedureSelector solidBoundingBox; private LogicProcedureSelector breatheUnderwater; private LogicProcedureSelector pushedByFluids; + private NumberProcedureSelector visualScale; + private NumberProcedureSelector boundingBoxScale; private final SoundSelector livingSound = new SoundSelector(mcreator); private final SoundSelector hurtSound = new SoundSelector(mcreator); @@ -167,13 +173,13 @@ public class LivingEntityGUI extends ModElementGUI implements IBlo private MCItemHolder equipmentBoots; private MCItemHolder equipmentOffHand; - private final JComboBox guiBoundTo = new JComboBox<>(); + private final SearchableComboBox guiBoundTo = new SearchableComboBox<>(); private final JSpinner inventorySize = new JSpinner(new SpinnerNumberModel(9, 0, 256, 1)); private final JSpinner inventoryStackSize = new JSpinner(new SpinnerNumberModel(64, 1, 1024, 1)); private MCItemHolder rangedAttackItem; - private final JComboBox rangedItemType = new JComboBox<>(); + private final SearchableComboBox rangedItemType = new SearchableComboBox<>(); private final JTextField mobLabel = new JTextField(); @@ -198,15 +204,16 @@ public class LivingEntityGUI extends ModElementGUI implements IBlo private static final Model witch = new Model.BuiltInModel("Witch"); public static final Model[] builtinmobmodels = new Model[] { biped, chicken, cod, cow, creeper, ghast, ocelot, pig, piglin, salmon, silverfish, slime, spider, villager, witch }; - private final JComboBox mobModel = new JComboBox<>(builtinmobmodels); + private final SearchableComboBox mobModel = new SearchableComboBox<>(builtinmobmodels); private final VComboBox mobModelTexture = new SearchableComboBox<>(); - private final VComboBox mobModelGlowTexture = new SearchableComboBox<>(); + + private JEntityDataList entityDataList; private static final BlocklyCompileNote aiUnmodifiableCompileNote = new BlocklyCompileNote( BlocklyCompileNote.Type.INFO, L10N.t("blockly.warnings.unmodifiable_ai_bases")); - private final JComboBox aiBase = new JComboBox<>( + private final SearchableComboBox aiBase = new SearchableComboBox<>( Stream.of("(none)", "Creeper", "Skeleton", "Enderman", "Blaze", "Slime", "Witch", "Zombie", "MagmaCube", "Pig", "Villager", "Wolf", "Cow", "Bat", "Chicken", "Ocelot", "Squid", "Horse", "Spider", "IronGolem").sorted().toArray(String[]::new)); @@ -246,6 +253,8 @@ public class LivingEntityGUI extends ModElementGUI implements IBlo private boolean disableMobModelCheckBoxListener = false; + private JModelLayerList modelLayers; + private final List unmodifiableAIBases = (List) mcreator.getWorkspace().getGenerator() .getGeneratorConfiguration().getDefinitionsProvider().getModElementDefinition(ModElementType.LIVINGENTITY) .get("unmodifiable_ai_bases"); @@ -336,40 +345,47 @@ private synchronized void regenerateAITasks() { L10N.t("condition.common.use_vanilla")).makeInline(); transparentModelCondition = new LogicProcedureSelector(this.withEntry("entity/condition_is_model_transparent"), mcreator, L10N.t("elementgui.living_entity.condition_is_model_transparent"), - ProcedureSelector.Side.CLIENT, L10N.checkbox("elementgui.common.enable"), 160, + ProcedureSelector.Side.CLIENT, L10N.checkbox("elementgui.common.enable"), 0, Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")); isShakingCondition = new LogicProcedureSelector(this.withEntry("entity/condition_is_shaking"), mcreator, L10N.t("elementgui.living_entity.condition_is_shaking"), ProcedureSelector.Side.CLIENT, - L10N.checkbox("elementgui.common.enable"), 160, + L10N.checkbox("elementgui.common.enable"), 0, Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")); solidBoundingBox = new LogicProcedureSelector(this.withEntry("entity/condition_solid_bounding_box"), mcreator, L10N.t("elementgui.living_entity.condition_solid_bounding_box"), AbstractProcedureSelector.Side.BOTH, - L10N.checkbox("elementgui.common.enable"), 160, + L10N.checkbox("elementgui.common.enable"), 0, Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")); breatheUnderwater = new LogicProcedureSelector(this.withEntry("entity/condition_can_breathe_underwater"), mcreator, L10N.t("elementgui.living_entity.condition_can_breathe_underwater"), - AbstractProcedureSelector.Side.BOTH, L10N.checkbox("elementgui.common.enable"), 160, + AbstractProcedureSelector.Side.BOTH, L10N.checkbox("elementgui.common.enable"), 0, Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")); pushedByFluids = new LogicProcedureSelector(this.withEntry("entity/condition_fluids_can_push"), mcreator, L10N.t("elementgui.living_entity.condition_fluids_can_push"), AbstractProcedureSelector.Side.BOTH, - L10N.checkbox("elementgui.common.enable"), 160, + L10N.checkbox("elementgui.common.enable"), 0, + Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")); + visualScale = new NumberProcedureSelector(this.withEntry("entity/visual_scale"), mcreator, + L10N.t("elementgui.living_entity.visual_scale"), AbstractProcedureSelector.Side.CLIENT, + new JSpinner(new SpinnerNumberModel(1, 0.01, 1024, 0.01)), 0, + Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")); + boundingBoxScale = new NumberProcedureSelector(this.withEntry("entity/bounding_box_scale"), mcreator, + L10N.t("elementgui.living_entity.bounding_box_scale"), AbstractProcedureSelector.Side.BOTH, + new JSpinner(new SpinnerNumberModel(1, 0.01, 1024, 0.01)), 210, Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")); restrictionBiomes = new BiomeListField(mcreator, true); restrictionBiomes.setValidator(new ItemListFieldSingleTagValidator(restrictionBiomes)); breedTriggerItems = new MCItemListField(mcreator, ElementUtil::loadBlocksAndItemsAndTags, false, true); + entityDataList = new JEntityDataList(mcreator, this); numberOfMobsPerGroup.setAllowEqualValues(true); mobModelTexture.setRenderer( new WTextureComboBoxRenderer.TypeTextures(mcreator.getWorkspace(), TextureType.ENTITY)); - mobModelGlowTexture.setRenderer( - new WTextureComboBoxRenderer.TypeTextures(mcreator.getWorkspace(), TextureType.ENTITY)); guiBoundTo.addActionListener(e -> { if (!isEditingMode()) { - String selected = (String) guiBoundTo.getSelectedItem(); + String selected = guiBoundTo.getSelectedItem(); if (selected != null) { ModElement element = mcreator.getWorkspace().getModElementByName(selected); if (element != null) { @@ -384,7 +400,6 @@ private synchronized void regenerateAITasks() { spawnInDungeons.setOpaque(false); mobModelTexture.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXXX"); - mobModelGlowTexture.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXXX"); mobDrop = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); equipmentMainHand = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); @@ -395,6 +410,8 @@ private synchronized void regenerateAITasks() { equipmentOffHand = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); rangedAttackItem = new MCItemHolder(mcreator, ElementUtil::loadBlocksAndItems); + modelLayers = new JModelLayerList(mcreator, this); + JPanel pane1 = new JPanel(new BorderLayout(0, 0)); JPanel pane2 = new JPanel(new BorderLayout(0, 0)); JPanel pane3 = new JPanel(new BorderLayout(0, 0)); @@ -402,6 +419,7 @@ private synchronized void regenerateAITasks() { JPanel pane5 = new JPanel(new BorderLayout(0, 0)); JPanel pane6 = new JPanel(new BorderLayout(0, 0)); JPanel pane7 = new JPanel(new BorderLayout(0, 0)); + JPanel pane8 = new JPanel(new BorderLayout(0, 0)); JPanel subpane1 = new JPanel(new GridLayout(12, 2, 0, 2)); @@ -512,7 +530,16 @@ private synchronized void regenerateAITasks() { pane1.add("Center", PanelUtils.totalCenterInPanel(PanelUtils.northAndCenterElement(subpane1, subpanel2))); - JPanel spo2 = new JPanel(new GridLayout(11, 2, 2, 2)); + JPanel entityDataListPanel = new JPanel(new GridLayout()); + + JComponent entityDataListComp = PanelUtils.northAndCenterElement( + HelpUtils.wrapWithHelpButton(this.withEntry("entity/entity_data"), + L10N.label("elementgui.living_entity.entity_data")), entityDataList); + entityDataListPanel.setOpaque(false); + entityDataListComp.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + entityDataListPanel.add(entityDataListComp); + + JPanel spo2 = new JPanel(new GridLayout(12, 2, 2, 2)); spo2.setOpaque(false); @@ -524,21 +551,6 @@ private synchronized void regenerateAITasks() { L10N.label("elementgui.living_entity.entity_model"))); spo2.add(mobModel); - spo2.add(HelpUtils.wrapWithHelpButton(this.withEntry("entity/bounding_box"), - L10N.label("elementgui.living_entity.bounding_box"))); - spo2.add(PanelUtils.join(FlowLayout.LEFT, 0, 0, modelWidth, new JEmptyBox(2, 2), modelHeight, - new JEmptyBox(2, 2), modelShadowSize, new JEmptyBox(2, 2), mountedYOffset, new JEmptyBox(2, 2), - disableCollisions)); - - spo2.add(new JEmptyBox()); - spo2.add(solidBoundingBox); - - spo2.add(new JEmptyBox()); - spo2.add(transparentModelCondition); - - spo2.add(new JEmptyBox()); - spo2.add(isShakingCondition); - JButton importmobtexture = new JButton(UIRES.get("18px.add")); importmobtexture.setToolTipText(L10N.t("elementgui.living_entity.entity_model_import")); importmobtexture.setOpaque(false); @@ -548,26 +560,40 @@ private synchronized void regenerateAITasks() { mobModelTexture.addItem(""); mcreator.getFolderManager().getTexturesList(TextureType.ENTITY) .forEach(el -> mobModelTexture.addItem(el.getName())); - mobModelGlowTexture.removeAllItems(); - mobModelGlowTexture.addItem(""); - mcreator.getFolderManager().getTexturesList(TextureType.ENTITY) - .forEach(el -> mobModelGlowTexture.addItem(el.getName())); }); spo2.add(HelpUtils.wrapWithHelpButton(this.withEntry("entity/texture"), L10N.label("elementgui.living_entity.texture"))); spo2.add(PanelUtils.centerAndEastElement(mobModelTexture, importmobtexture, 0, 0)); - spo2.add(HelpUtils.wrapWithHelpButton(this.withEntry("entity/glow_texture"), - L10N.label("elementgui.living_entity.glow_texture"))); - spo2.add(mobModelGlowTexture); + spo2.add(HelpUtils.wrapWithHelpButton(this.withEntry("entity/bounding_box"), + L10N.label("elementgui.living_entity.bounding_box"))); + spo2.add(PanelUtils.join(FlowLayout.LEFT, 0, 0, modelWidth, new JEmptyBox(2, 2), modelHeight, + new JEmptyBox(2, 2), modelShadowSize, new JEmptyBox(2, 2), mountedYOffset, new JEmptyBox(2, 2), + disableCollisions)); + + spo2.add(new JEmptyBox()); + spo2.add(visualScale); + + spo2.add(new JEmptyBox()); + spo2.add(boundingBoxScale); + + spo2.add(new JEmptyBox()); + spo2.add(solidBoundingBox); + + spo2.add(new JEmptyBox()); + spo2.add(transparentModelCondition); + + spo2.add(new JEmptyBox()); + spo2.add(isShakingCondition); ComponentUtils.deriveFont(mobModelTexture, 16); - ComponentUtils.deriveFont(mobModelGlowTexture, 16); ComponentUtils.deriveFont(aiBase, 16); ComponentUtils.deriveFont(mobModel, 16); ComponentUtils.deriveFont(rangedItemType, 16); + rangedItemType.setPrototypeDisplayValue("XXXXXXXXXXXXX"); + mobModel.setRenderer(new ModelComboBoxRenderer()); spawnEggBaseColor.setOpaque(false); @@ -651,9 +677,6 @@ private synchronized void regenerateAITasks() { spo2.add(PanelUtils.join(FlowLayout.LEFT, 0, 0, hasSpawnEgg, new JEmptyBox(2, 2), spawnEggBaseColor, new JEmptyBox(2, 2), spawnEggDotColor, new JEmptyBox(5, 5), creativeTab)); - bossBarColor.setEnabled(false); - bossBarType.setEnabled(false); - spo2.add(HelpUtils.wrapWithHelpButton(this.withEntry("entity/boss_entity"), L10N.label("elementgui.living_entity.mob_boss"))); spo2.add(PanelUtils.join(FlowLayout.LEFT, 0, 0, isBoss, new JEmptyBox(5, 5), bossBarColor, new JEmptyBox(5, 5), @@ -668,6 +691,15 @@ private synchronized void regenerateAITasks() { pane2.setOpaque(false); pane2.add("Center", PanelUtils.totalCenterInPanel(spo2)); + JComponent layerList = PanelUtils.northAndCenterElement( + HelpUtils.wrapWithHelpButton(this.withEntry("entity/model_layers"), + L10N.label("elementgui.living_entity.model_layers")), modelLayers); + + layerList.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + + pane8.setOpaque(false); + pane8.add(layerList); + JPanel spo6 = new JPanel(new GridLayout(4, 2, 2, 2)); spo6.setOpaque(false); @@ -720,19 +752,16 @@ private synchronized void regenerateAITasks() { HelpUtils.wrapWithHelpButton(this.withEntry("entity/do_ranged_attacks"), ranged), rangedItemType, rangedAttackItem, rangedAttackInterval, rangedAttackRadius)); - rangedAttackItem.setEnabled(false); - - rangedItemType.addActionListener( - e -> rangedAttackItem.setEnabled("Default item".equals(rangedItemType.getSelectedItem()))); + rangedItemType.addActionListener(e -> enableOrDisableFields()); ridable.setOpaque(false); canControlStrafe.setOpaque(false); canControlForward.setOpaque(false); aitopoveral.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.living_entity.ai_parameters"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JPanel aipan = new JPanel(new BorderLayout(0, 5)); aipan.setOpaque(false); @@ -755,7 +784,7 @@ private synchronized void regenerateAITasks() { JPanel bpb = new JPanel(new GridLayout()); bpb.setOpaque(false); bpb.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.living_entity.ai_tasks"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, getFont(), Color.white)); BlocklyEditorToolbar blocklyEditorToolbar = new BlocklyEditorToolbar(mcreator, BlocklyEditorType.AI_TASK, @@ -775,23 +804,8 @@ private synchronized void regenerateAITasks() { hasAI.setSelected(true); - breedable.addActionListener(actionEvent -> { - if (breedable.isSelected()) { - hasAI.setSelected(true); - hasAI.setEnabled(false); - this.breedTriggerItems.setEnabled(true); - this.tameable.setEnabled(true); - } else { - hasAI.setEnabled(true); - this.breedTriggerItems.setEnabled(false); - this.tameable.setEnabled(false); - } - }); - - isBoss.addActionListener(e -> { - bossBarColor.setEnabled(isBoss.isSelected()); - bossBarType.setEnabled(isBoss.isSelected()); - }); + breedable.addActionListener(actionEvent -> enableOrDisableFields()); + isBoss.addActionListener(e -> enableOrDisableFields()); pane3.setOpaque(false); @@ -895,8 +909,10 @@ private synchronized void regenerateAITasks() { pane1.setOpaque(false); addPage(L10N.t("elementgui.living_entity.page_visual"), pane2); + addPage(L10N.t("elementgui.living_entity.page_model_layers"), pane8, false); addPage(L10N.t("elementgui.living_entity.page_sound"), pane6); addPage(L10N.t("elementgui.living_entity.page_behaviour"), pane1); + addPage(L10N.t("elementgui.living_entity.page_entity_data"), entityDataListPanel, false); addPage(L10N.t("elementgui.common.page_inventory"), pane7); addPage(L10N.t("elementgui.common.page_triggers"), pane4); addPage(L10N.t("elementgui.living_entity.page_ai_and_goals"), pane3); @@ -907,6 +923,8 @@ private synchronized void regenerateAITasks() { mobName.setText(readableNameFromModElement); } + enableOrDisableFields(); + editorReady = true; } @@ -930,12 +948,12 @@ private synchronized void regenerateAITasks() { solidBoundingBox.refreshListKeepSelected(); breatheUnderwater.refreshListKeepSelected(); pushedByFluids.refreshListKeepSelected(); + visualScale.refreshListKeepSelected(); + boundingBoxScale.refreshListKeepSelected(); - ComboBoxUtil.updateComboBoxContents(mobModelTexture, ListUtils.merge(Collections.singleton(""), - mcreator.getFolderManager().getTexturesList(TextureType.ENTITY).stream().map(File::getName) - .collect(Collectors.toList())), ""); + modelLayers.reloadDataLists(); - ComboBoxUtil.updateComboBoxContents(mobModelGlowTexture, ListUtils.merge(Collections.singleton(""), + ComboBoxUtil.updateComboBoxContents(mobModelTexture, ListUtils.merge(Collections.singleton(""), mcreator.getFolderManager().getTexturesList(TextureType.ENTITY).stream().map(File::getName) .collect(Collectors.toList())), ""); @@ -962,27 +980,48 @@ private synchronized void regenerateAITasks() { @Override protected AggregatedValidationResult validatePage(int page) { if (page == 0) { return new AggregatedValidationResult(mobModelTexture, mobName); - } else if (page == 5) { + } else if (page == 1) { + return modelLayers.getValidationResult(); + } else if (page == 7) { if (hasErrors) return new AggregatedValidationResult.MULTIFAIL(compileNotesPanel.getCompileNotes().stream() .map(compileNote -> "Living entity AI builder: " + compileNote.message()) .collect(Collectors.toList())); - } else if (page == 6) { + } else if (page == 8) { return new AggregatedValidationResult(restrictionBiomes); } return new AggregatedValidationResult.PASS(); } + private void enableOrDisableFields() { + if (breedable.isSelected()) { + hasAI.setSelected(true); + hasAI.setEnabled(false); + breedTriggerItems.setEnabled(true); + tameable.setEnabled(true); + } else { + hasAI.setEnabled(true); + breedTriggerItems.setEnabled(false); + tameable.setEnabled(false); + } + + bossBarColor.setEnabled(isBoss.isSelected()); + bossBarType.setEnabled(isBoss.isSelected()); + + rangedAttackItem.setEnabled("Default item".equals(rangedItemType.getSelectedItem())); + } + @Override public void openInEditingMode(LivingEntity livingEntity) { disableMobModelCheckBoxListener = true; editorReady = false; mobName.setText(livingEntity.mobName); mobModelTexture.setSelectedItem(livingEntity.mobModelTexture); - mobModelGlowTexture.setSelectedItem(livingEntity.mobModelGlowTexture); transparentModelCondition.setSelectedProcedure(livingEntity.transparentModelCondition); isShakingCondition.setSelectedProcedure(livingEntity.isShakingCondition); solidBoundingBox.setSelectedProcedure(livingEntity.solidBoundingBox); + visualScale.setSelectedProcedure(livingEntity.visualScale); + boundingBoxScale.setSelectedProcedure(livingEntity.boundingBoxScale); mobSpawningType.setSelectedItem(livingEntity.mobSpawningType); rangedItemType.setSelectedItem(livingEntity.rangedItemType); spawnEggBaseColor.setColor(livingEntity.spawnEggBaseColor); @@ -1069,6 +1108,9 @@ private synchronized void regenerateAITasks() { guiBoundTo.setSelectedItem(livingEntity.guiBoundTo); inventorySize.setValue(livingEntity.inventorySize); inventoryStackSize.setValue(livingEntity.inventoryStackSize); + modelLayers.setEntries(livingEntity.modelLayers); + + entityDataList.setEntries(livingEntity.entityDataEntries); if (livingEntity.creativeTab != null) creativeTab.setSelectedItem(livingEntity.creativeTab); @@ -1084,21 +1126,7 @@ private synchronized void regenerateAITasks() { regenerateAITasks(); }); - if (breedable.isSelected()) { - hasAI.setSelected(true); - hasAI.setEnabled(false); - this.breedTriggerItems.setEnabled(true); - this.tameable.setEnabled(true); - } else { - hasAI.setEnabled(true); - this.breedTriggerItems.setEnabled(false); - this.tameable.setEnabled(false); - } - - bossBarColor.setEnabled(isBoss.isSelected()); - bossBarType.setEnabled(isBoss.isSelected()); - - rangedAttackItem.setEnabled("Default item".equals(rangedItemType.getSelectedItem())); + enableOrDisableFields(); disableMobModelCheckBoxListener = false; editorReady = true; @@ -1109,11 +1137,12 @@ private synchronized void regenerateAITasks() { livingEntity.mobName = mobName.getText(); livingEntity.mobLabel = mobLabel.getText(); livingEntity.mobModelTexture = mobModelTexture.getSelectedItem(); - livingEntity.mobModelGlowTexture = mobModelGlowTexture.getSelectedItem(); livingEntity.spawnEggBaseColor = spawnEggBaseColor.getColor(); livingEntity.transparentModelCondition = transparentModelCondition.getSelectedProcedure(); livingEntity.isShakingCondition = isShakingCondition.getSelectedProcedure(); livingEntity.solidBoundingBox = solidBoundingBox.getSelectedProcedure(); + livingEntity.visualScale = visualScale.getSelectedProcedure(); + livingEntity.boundingBoxScale = boundingBoxScale.getSelectedProcedure(); livingEntity.spawnEggDotColor = spawnEggDotColor.getColor(); livingEntity.hasSpawnEgg = hasSpawnEgg.isSelected(); livingEntity.disableCollisions = disableCollisions.isSelected(); @@ -1169,7 +1198,7 @@ private synchronized void regenerateAITasks() { livingEntity.onPlayerCollidesWith = onPlayerCollidesWith.getSelectedProcedure(); livingEntity.onInitialSpawn = onInitialSpawn.getSelectedProcedure(); livingEntity.hasAI = hasAI.isSelected(); - livingEntity.aiBase = (String) aiBase.getSelectedItem(); + livingEntity.aiBase = aiBase.getSelectedItem(); livingEntity.aixml = blocklyPanel.getXML(); livingEntity.breedable = breedable.isSelected(); livingEntity.tameable = tameable.isSelected(); @@ -1182,7 +1211,7 @@ private synchronized void regenerateAITasks() { livingEntity.doesDespawnWhenIdle = doesDespawnWhenIdle.isSelected(); livingEntity.spawningProbability = (int) spawningProbability.getValue(); livingEntity.mobSpawningType = (String) mobSpawningType.getSelectedItem(); - livingEntity.rangedItemType = (String) rangedItemType.getSelectedItem(); + livingEntity.rangedItemType = rangedItemType.getSelectedItem(); livingEntity.minNumberOfMobsPerGroup = numberOfMobsPerGroup.getIntMinValue(); livingEntity.maxNumberOfMobsPerGroup = numberOfMobsPerGroup.getIntMaxValue(); livingEntity.restrictionBiomes = restrictionBiomes.getListElements(); @@ -1192,7 +1221,7 @@ private synchronized void regenerateAITasks() { livingEntity.mountedYOffset = (double) mountedYOffset.getValue(); livingEntity.modelShadowSize = (double) modelShadowSize.getValue(); livingEntity.armorBaseValue = (double) armorBaseValue.getValue(); - livingEntity.mobModelName = ((Model) Objects.requireNonNull(mobModel.getSelectedItem())).getReadableName(); + livingEntity.mobModelName = Objects.requireNonNull(mobModel.getSelectedItem()).getReadableName(); livingEntity.waterMob = waterMob.isSelected(); livingEntity.breatheUnderwater = breatheUnderwater.getSelectedProcedure(); livingEntity.pushedByFluids = pushedByFluids.getSelectedProcedure(); @@ -1200,7 +1229,9 @@ private synchronized void regenerateAITasks() { livingEntity.creativeTab = new TabEntry(mcreator.getWorkspace(), creativeTab.getSelectedItem()); livingEntity.inventorySize = (int) inventorySize.getValue(); livingEntity.inventoryStackSize = (int) inventoryStackSize.getValue(); - livingEntity.guiBoundTo = (String) guiBoundTo.getSelectedItem(); + livingEntity.guiBoundTo = guiBoundTo.getSelectedItem(); + livingEntity.entityDataEntries = entityDataList.getEntries(); + livingEntity.modelLayers = modelLayers.getEntries(); return livingEntity; } diff --git a/src/main/java/net/mcreator/ui/modgui/LootTableGUI.java b/src/main/java/net/mcreator/ui/modgui/LootTableGUI.java index e8b960b5a69..2f4bdf8831d 100644 --- a/src/main/java/net/mcreator/ui/modgui/LootTableGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/LootTableGUI.java @@ -18,6 +18,7 @@ package net.mcreator.ui.modgui; +import net.mcreator.element.ModElementType; import net.mcreator.element.types.LootTable; import net.mcreator.minecraft.RegistryNameFixer; import net.mcreator.ui.MCreator; @@ -29,6 +30,7 @@ import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.component.VComboBox; import net.mcreator.ui.validation.validators.RegistryNameValidator; +import net.mcreator.ui.validation.validators.UniqueNameValidator; import net.mcreator.workspace.elements.ModElement; import javax.annotation.Nullable; @@ -37,6 +39,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Arrays; +import java.util.Objects; public class LootTableGUI extends ModElementGUI { @@ -52,23 +55,30 @@ public class LootTableGUI extends ModElementGUI { public LootTableGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { super(mcreator, modElement, editingMode); this.initGUI(); - super.finalizeGUI(false); + super.finalizeGUI(); } @Override protected void initGUI() { JPanel pane3 = new JPanel(new BorderLayout()); pane3.setOpaque(false); - name.setValidator(new RegistryNameValidator(name, L10N.t("elementgui.loot_table.name")).setValidChars( - Arrays.asList('_', '/'))); + //@formatter:off + name.setValidator(new UniqueNameValidator( + L10N.t("modelement.loottable"), + () -> namespace.getSelectedItem() + ":" + ((JTextField) name.getEditor().getEditorComponent()).getText(), + () -> mcreator.getWorkspace().getModElements().stream() + .filter(me -> me.getType() == ModElementType.LOOTTABLE) + .map(ModElement::getGeneratableElement) + .filter(Objects::nonNull) + .map(ge -> ((LootTable) ge).namespace + ":" + ((LootTable) ge).name), + new RegistryNameValidator(name, L10N.t("modelement.loottable")).setValidChars(Arrays.asList('_', '/')) + ).setIsPresentOnList(this::isEditingMode)); + //@formatter:on name.enableRealtimeValidation(); - name.addItem("blocks/stone"); name.addItem("entities/chicken"); name.addItem("gameplay/fishing"); - name.setEditable(true); - name.setOpaque(false); if (isEditingMode()) { name.setEnabled(false); @@ -118,7 +128,7 @@ public LootTableGUI(MCreator mcreator, ModElement modElement, boolean editingMod lootTablePools = new JLootTablePoolsList(mcreator, this); pane3.add(PanelUtils.northAndCenterElement(PanelUtils.join(FlowLayout.LEFT, northPanel), lootTablePools)); - addPage(pane3); + addPage(pane3, false); // add first pool if (!isEditingMode()) diff --git a/src/main/java/net/mcreator/ui/modgui/ModElementChangedListener.java b/src/main/java/net/mcreator/ui/modgui/ModElementChangedListener.java index f98e2cba91c..943469b483e 100644 --- a/src/main/java/net/mcreator/ui/modgui/ModElementChangedListener.java +++ b/src/main/java/net/mcreator/ui/modgui/ModElementChangedListener.java @@ -19,10 +19,14 @@ package net.mcreator.ui.modgui; -import javafx.embed.swing.JFXPanel; +import net.mcreator.ui.blockly.BlocklyPanel; +import net.mcreator.ui.component.ITechnicalComponent; +import net.mcreator.ui.component.JColor; import net.mcreator.ui.component.JItemListField; +import net.mcreator.ui.component.JStringListField; import net.mcreator.ui.component.entries.JEntriesList; import net.mcreator.ui.minecraft.MCItemHolder; +import net.mcreator.ui.minecraft.SoundSelector; import javax.swing.*; import javax.swing.event.ChangeEvent; @@ -51,42 +55,46 @@ public interface ModElementChangedListener /** *

          Registers the given UI component to trigger this listener when a change is detected on it

          * - * @param container The UI element to register + * @param component The UI element to register */ - default void registerUI(JComponent container) { - for (Component component : container.getComponents()) { - if ("TechnicalComponent".equals(component.getName())) - continue; // don't add listeners if component triggers actions not affecting mod element directly - - if (component instanceof MCItemHolder itemHolder) { - itemHolder.addBlockSelectedListener(this); - } else if (component instanceof JItemListField listField) { - listField.addChangeListener(this); - } else if (component instanceof JEntriesList entriesList) { - registerUI(entriesList); - entriesList.addEntryRegisterListener(c -> { - registerUI(c); - modElementChanged(); - }); - component.addMouseListener(this); - } else if (component instanceof AbstractButton button) { - button.addActionListener(this); - } else if (component instanceof JSpinner spinner) { - spinner.addChangeListener(this); - } else if (component instanceof JComboBox comboBox) { - comboBox.addActionListener(this); - } else if (component instanceof JTextComponent textComponent) { - textComponent.getDocument().addDocumentListener(this); - } else if (component instanceof JFXPanel) { + default void registerUI(JComponent component) { + if (component instanceof ITechnicalComponent) + return; // don't add listeners if component triggers actions not affecting mod element directly + + if (component instanceof MCItemHolder itemHolder) { + itemHolder.addBlockSelectedListener(this); + } else if (component instanceof JColor jcolor) { + jcolor.addColorSelectedListener(this); + } else if (component instanceof SoundSelector soundSelector) { + soundSelector.addSoundSelectedListener(this); + } else if (component instanceof JItemListField listField) { + listField.addChangeListener(this); + } else if (component instanceof JStringListField stringList) { + stringList.addChangeListener(this); + } else if (component instanceof JEntriesList entriesList) { + entriesList.addEntryRegisterListener(c -> { + registerUI(c); + modElementChanged(); + }); + } else if (component instanceof AbstractButton button) { + button.addActionListener(this); + } else if (component instanceof JSpinner spinner) { + spinner.addChangeListener(this); + } else if (component instanceof JComboBox comboBox) { + comboBox.addActionListener(this); + } else if (component instanceof JTextComponent textComponent) { + textComponent.getDocument().addDocumentListener(this); + } else if (component instanceof BlocklyPanel blocklyPanel) { + blocklyPanel.addChangeListener(this); + } else { + if (!isGenericComponent(component)) { component.addMouseListener(this); component.addKeyListener(this); - } else if (component instanceof JComponent jcomponent) { - registerUI(jcomponent); + } - if (!isGenericComponent(component)) { - component.addMouseListener(this); - component.addKeyListener(this); - } + for (Component subComponent : component.getComponents()) { + if (subComponent instanceof JComponent jcomponent) + registerUI(jcomponent); } } } diff --git a/src/main/java/net/mcreator/ui/modgui/ModElementGUI.java b/src/main/java/net/mcreator/ui/modgui/ModElementGUI.java index cfc6d9a584f..8712c9fa2c2 100644 --- a/src/main/java/net/mcreator/ui/modgui/ModElementGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/ModElementGUI.java @@ -35,6 +35,7 @@ import net.mcreator.ui.help.ModElementHelpContext; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.modgui.codeviewer.ModElementCodeViewer; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.ValidationGroup; @@ -84,11 +85,30 @@ public ModElementGUI(MCreator mcreator, @Nonnull ModElement modElement, boolean } public final void addPage(JComponent component) { - pages.put(modElement.getType().getReadableName(), component); + addPage(component, true); + } + + public final void addPage(JComponent component, boolean scroll) { + addPage(modElement.getType().getReadableName(), component, scroll); } public final void addPage(String name, JComponent component) { - pages.put(name, component); + addPage(name, component, true); + } + + public final void addPage(String name, JComponent component, boolean scroll) { + if (scroll) { + JScrollPane splitScroll = new JScrollPane(component); + splitScroll.setOpaque(false); + splitScroll.getViewport().setOpaque(false); + splitScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + splitScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + splitScroll.getVerticalScrollBar().setUnitIncrement(15); + splitScroll.getHorizontalScrollBar().setUnitIncrement(15); + pages.put(name, new JLayer<>(splitScroll, new ScrollWheelPassLayer())); + } else { + pages.put(name, component); + } } public void setModElementCreatedListener(ModElementCreatedListener modElementCreatedListener) { @@ -115,38 +135,38 @@ public void setModElementCreatedListener(ModElementCreatedListener modElemen this.tabIn = new MCreatorTabs.Tab(this, modElement); - // reload data lists in a background thread - this.tabIn.setTabShownListener(tab -> { - if (PreferencesManager.PREFERENCES.ui.autoReloadTabs.get()) { - listeningEnabled = false; - reloadDataLists(); - listeningEnabled = true; - } - }); - this.tabIn.setTabClosingListener(tab -> { - if (changed && PreferencesManager.PREFERENCES.ui.remindOfUnsavedChanges.get()) - return JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(mcreator, - L10N.label("dialog.unsaved_changes.message"), L10N.t("dialog.unsaved_changes.title"), - JOptionPane.YES_NO_OPTION); - return true; - }); - + ViewBase retval; MCreatorTabs.Tab existing = mcreator.mcreatorTabs.showTabOrGetExisting(this.tabIn); if (existing == null) { mcreator.mcreatorTabs.addTab(this.tabIn); - return this; + + this.tabIn.setTabShownListener(tab -> { + if (PreferencesManager.PREFERENCES.ui.autoReloadTabs.get()) { + listeningEnabled = false; + reloadDataLists(); + listeningEnabled = true; + } + }); + + this.tabIn.setTabClosingListener(tab -> { + if (changed && PreferencesManager.PREFERENCES.ui.remindOfUnsavedChanges.get()) + return JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(mcreator, + L10N.label("dialog.unsaved_changes.message"), L10N.t("dialog.unsaved_changes.title"), + JOptionPane.YES_NO_OPTION); + return true; + }); + + retval = this; + } else { + retval = (ViewBase) existing.getContent(); } MCREvent.event(new ModElementGUIEvent.AfterLoading(mcreator, existing, this)); - return (ViewBase) existing.getContent(); + return retval; } protected final void finalizeGUI() { - finalizeGUI(true); - } - - protected final void finalizeGUI(boolean wrapInScrollPane) { JComponent centerComponent, parameters = new JPanel(); if (allowCodePreview()) @@ -208,8 +228,8 @@ protected final void finalizeGUI(boolean wrapInScrollPane) { ComponentUtils.deriveFont(page, 13); page.addChangeListener(e -> page.setForeground(page.isSelected() ? - ((Color) UIManager.get("MCreatorLAF.MAIN_TINT")) : - ((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")))); + (Theme.current().getInterfaceAccentColor()) : + (Theme.current().getForegroundColor()))); pager.add(page); buttonGroup.add(page); @@ -229,8 +249,8 @@ protected final void finalizeGUI(boolean wrapInScrollPane) { JButton save = L10N.button("elementgui.save_mod_element"); save.setMargin(new Insets(1, 40, 1, 40)); - save.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - save.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + save.setBackground(Theme.current().getInterfaceAccentColor()); + save.setForeground(Theme.current().getSecondAltBackgroundColor()); save.setFocusPainted(false); save.addActionListener(event -> { List errors = new ArrayList<>(); @@ -256,8 +276,8 @@ protected final void finalizeGUI(boolean wrapInScrollPane) { JButton saveOnly = L10N.button("elementgui.save_keep_open"); saveOnly.setMargin(new Insets(1, 40, 1, 40)); - saveOnly.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - saveOnly.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + saveOnly.setBackground(Theme.current().getAltBackgroundColor()); + saveOnly.setForeground(Theme.current().getForegroundColor()); saveOnly.setFocusPainted(false); saveOnly.addActionListener(event -> { List errors = new ArrayList<>(); @@ -291,11 +311,11 @@ protected final void finalizeGUI(boolean wrapInScrollPane) { if (modElementCodeViewer != null) { JToggleButton codeViewer = L10N.togglebutton("elementgui.code_viewer"); - codeViewer.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); - codeViewer.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + codeViewer.setBackground(Theme.current().getSecondAltBackgroundColor()); + codeViewer.setForeground(Theme.current().getAltForegroundColor()); codeViewer.setFocusPainted(false); codeViewer.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getBackgroundColor(), 1), BorderFactory.createEmptyBorder(2, 40, 2, 40))); codeViewer.addActionListener(e -> { if (codeViewer.isSelected()) { @@ -316,24 +336,12 @@ protected final void finalizeGUI(boolean wrapInScrollPane) { add("North", PanelUtils.maxMargin(PanelUtils.westAndEastElement(toolBarLeft, toolBar), 5, true, true, false, false)); - if (wrapInScrollPane) { - JScrollPane splitScroll = new JScrollPane(split); - splitScroll.setOpaque(false); - splitScroll.getViewport().setOpaque(false); - splitScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); - splitScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - splitScroll.getVerticalScrollBar().setUnitIncrement(15); - splitScroll.getHorizontalScrollBar().setUnitIncrement(15); - parameters = new JLayer<>(splitScroll, new ScrollWheelPassLayer()); - } else { - parameters = PanelUtils.join(split); - } - centerComponent = PanelUtils.centerAndSouthElement(parameters, pager); + centerComponent = PanelUtils.centerAndSouthElement(parameters = split, pager); } else { JButton saveOnly = L10N.button("elementgui.save_keep_open"); saveOnly.setMargin(new Insets(1, 40, 1, 40)); - saveOnly.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - saveOnly.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + saveOnly.setBackground(Theme.current().getAltBackgroundColor()); + saveOnly.setForeground(Theme.current().getForegroundColor()); saveOnly.setFocusPainted(false); saveOnly.addActionListener(event -> { AggregatedValidationResult validationResult = validatePage(0); @@ -345,8 +353,8 @@ protected final void finalizeGUI(boolean wrapInScrollPane) { JButton save = L10N.button("elementgui.save_mod_element"); save.setMargin(new Insets(1, 40, 1, 40)); - save.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - save.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + save.setBackground(Theme.current().getInterfaceAccentColor()); + save.setForeground(Theme.current().getSecondAltBackgroundColor()); save.setFocusPainted(false); save.addActionListener(event -> { AggregatedValidationResult validationResult = validatePage(0); @@ -366,11 +374,11 @@ protected final void finalizeGUI(boolean wrapInScrollPane) { if (modElementCodeViewer != null) { JToggleButton codeViewer = L10N.togglebutton("elementgui.code_viewer"); - codeViewer.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); - codeViewer.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + codeViewer.setBackground(Theme.current().getSecondAltBackgroundColor()); + codeViewer.setForeground(Theme.current().getAltForegroundColor()); codeViewer.setFocusPainted(false); codeViewer.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getBackgroundColor(), 1), BorderFactory.createEmptyBorder(2, 40, 2, 40))); codeViewer.addActionListener(e -> { if (codeViewer.isSelected()) { @@ -392,18 +400,7 @@ protected final void finalizeGUI(boolean wrapInScrollPane) { PanelUtils.maxMargin(PanelUtils.westAndEastElement(toolBarLeft, toolBar), 5, true, false, false, false)); - if (wrapInScrollPane) { - JScrollPane splitScroll = new JScrollPane(new ArrayList<>(pages.values()).get(0)); - splitScroll.setOpaque(false); - splitScroll.getViewport().setOpaque(false); - splitScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); - splitScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - splitScroll.getVerticalScrollBar().setUnitIncrement(15); - splitScroll.getHorizontalScrollBar().setUnitIncrement(15); - centerComponent = new JLayer<>(splitScroll, new ScrollWheelPassLayer()); - } else { - centerComponent = new ArrayList<>(pages.values()).get(0); - } + centerComponent = new ArrayList<>(pages.values()).get(0); } if (modElementCodeViewer != null) { @@ -525,8 +522,8 @@ private void finishModCreation(boolean closeTab) { MCREvent.event(new ModElementGUIEvent.WhenSaving(mcreator, tabIn, this, !closeTab)); GE element = getElementFromGUI(); - // if new element, and if we are not in the root folder, specify the folder of the mod element - if (!editingMode && !mcreator.mv.currentFolder.equals(mcreator.getWorkspace().getFoldersRoot())) + // if new element, specify the folder of the mod element + if (!editingMode) modElement.setParentFolder(mcreator.mv.currentFolder); // add mod element to the list, it will be only added for the first time, otherwise refreshed @@ -547,7 +544,8 @@ private void finishModCreation(boolean closeTab) { // we perform any custom defined after all other operations are complete afterGeneratableElementStored(); - // generate mod base as it may be needed + // generate mod base (this is needed so imports tree generator can see base + // files while generating imports for the mod element Java files) mcreator.getGenerator().generateBase(); // generate mod element code @@ -561,6 +559,15 @@ private void finishModCreation(boolean closeTab) { afterGeneratableElementGenerated(); + // build if selected and needed + if (PreferencesManager.PREFERENCES.gradle.compileOnSave.get() && mcreator.getModElementManager() + .requiresElementGradleBuild(element)) { + mcreator.actionRegistry.buildWorkspace.doAction(); + } else { + // Explicitly generate mod base if we don't call build action which does this for us + mcreator.getGenerator().generateBase(); + } + if (editingMode) { mcreator.getApplication().getAnalytics() .trackEvent(AnalyticsConstants.EVENT_EDIT_MOD_ELEMENT, modElement.getType().getRegistryName()); @@ -569,11 +576,6 @@ private void finishModCreation(boolean closeTab) { .trackEvent(AnalyticsConstants.EVENT_NEW_MOD_ELEMENT, modElement.getType().getRegistryName()); } - // build if selected and needed - if (PreferencesManager.PREFERENCES.gradle.compileOnSave.get() && mcreator.getModElementManager() - .requiresElementGradleBuild(element)) - mcreator.actionRegistry.buildWorkspace.doAction(); - changed = false; if (!editingMode && modElementCreatedListener @@ -606,8 +608,7 @@ protected void afterGeneratableElementGenerated() { } protected boolean allowCodePreview() { - return !modElement.getWorkspace().getGenerator().getModElementGeneratorTemplatesList(getElementFromGUI()) - .isEmpty(); + return true; } public void reloadDataLists() { @@ -624,6 +625,16 @@ public final boolean isEditingMode() { return editingMode; } + public final AggregatedValidationResult validateAllPages() { + List errors = new ArrayList<>(); + for (int i = 0; i < pages.size(); i++) { + AggregatedValidationResult validationResult = validatePage(i); + if (!validationResult.validateIsErrorFree()) + errors.add(validationResult); + } + return new AggregatedValidationResult(errors); + } + public interface ModElementCreatedListener { void modElementCreated(GE generatableElement); } diff --git a/src/main/java/net/mcreator/ui/modgui/MusicDiscGUI.java b/src/main/java/net/mcreator/ui/modgui/MusicDiscGUI.java index f53315abceb..0f8741ba28f 100644 --- a/src/main/java/net/mcreator/ui/modgui/MusicDiscGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/MusicDiscGUI.java @@ -61,6 +61,7 @@ public class MusicDiscGUI extends ModElementGUI { private StringListProcedureSelector specialInformation; private final VTextField name = new VTextField(20); + private final JComboBox rarity = new JComboBox<>(new String[] { "COMMON", "UNCOMMON", "RARE", "EPIC" }); private final VTextField description = new VTextField(20); private final JSpinner lengthInTicks = new JSpinner(new SpinnerNumberModel(100, 0, 20 * 3600, 1)); @@ -130,7 +131,7 @@ public MusicDiscGUI(MCreator mcreator, ModElement modElement, boolean editingMod ComponentUtils.deriveFont(name, 16); ComponentUtils.deriveFont(description, 16); - JPanel subpane2 = new JPanel(new GridLayout(6, 2, 45, 2)); + JPanel subpane2 = new JPanel(new GridLayout(7, 2, 45, 2)); subpane2.setOpaque(false); ComponentUtils.deriveFont(name, 16); @@ -143,6 +144,10 @@ public MusicDiscGUI(MCreator mcreator, ModElement modElement, boolean editingMod L10N.label("elementgui.common.name_in_gui"))); subpane2.add(name); + subpane2.add( + HelpUtils.wrapWithHelpButton(this.withEntry("item/rarity"), L10N.label("elementgui.common.rarity"))); + subpane2.add(rarity); + subpane2.add(HelpUtils.wrapWithHelpButton(this.withEntry("musicdisc/description"), L10N.label("elementgui.music_disc.disc_description"))); subpane2.add(description); @@ -238,6 +243,7 @@ public MusicDiscGUI(MCreator mcreator, ModElement modElement, boolean editingMod @Override public void openInEditingMode(MusicDisc musicDisc) { name.setText(musicDisc.name); + rarity.setSelectedItem(musicDisc.rarity); description.setText(musicDisc.description); texture.setTextureFromTextureName(musicDisc.texture); onRightClickedInAir.setSelectedProcedure(musicDisc.onRightClickedInAir); @@ -258,6 +264,7 @@ public MusicDiscGUI(MCreator mcreator, ModElement modElement, boolean editingMod @Override public MusicDisc getElementFromGUI() { MusicDisc musicDisc = new MusicDisc(modElement); musicDisc.name = name.getText(); + musicDisc.rarity = (String) rarity.getSelectedItem(); musicDisc.description = description.getText(); musicDisc.creativeTab = new TabEntry(mcreator.getWorkspace(), creativeTab.getSelectedItem()); musicDisc.glowCondition = glowCondition.getSelectedProcedure(); diff --git a/src/main/java/net/mcreator/ui/modgui/OverlayGUI.java b/src/main/java/net/mcreator/ui/modgui/OverlayGUI.java index 21bbc046124..c20b9b47013 100644 --- a/src/main/java/net/mcreator/ui/modgui/OverlayGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/OverlayGUI.java @@ -21,6 +21,7 @@ import net.mcreator.blockly.data.Dependency; import net.mcreator.element.types.Overlay; import net.mcreator.ui.MCreator; +import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.component.util.ComboBoxUtil; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; @@ -33,9 +34,12 @@ import net.mcreator.workspace.elements.ModElement; import net.mcreator.workspace.elements.VariableTypeLoader; +import javax.annotation.Nullable; import javax.swing.*; import java.awt.*; import java.io.File; +import java.net.URI; +import java.net.URISyntaxException; import java.util.Collections; import java.util.stream.Collectors; @@ -48,7 +52,7 @@ public class OverlayGUI extends ModElementGUI { public OverlayGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { super(mcreator, modElement, editingMode); this.initGUI(); - super.finalizeGUI(false); + super.finalizeGUI(); } @Override protected void initGUI() { @@ -71,7 +75,7 @@ public OverlayGUI(MCreator mcreator, ModElement modElement, boolean editingMode) pane5.setOpaque(false); pane5.add("Center", PanelUtils.maxMargin(editor, 5, true, true, true, true)); - addPage(pane5); + addPage(pane5, false); } @Override protected AggregatedValidationResult validatePage(int page) { @@ -122,4 +126,8 @@ public OverlayGUI(MCreator mcreator, ModElement modElement, boolean editingMode) return overlay; } + @Override public @Nullable URI contextURL() throws URISyntaxException { + return new URI(MCreatorApplication.SERVER_DOMAIN + "/wiki/how-make-overlay"); + } + } \ No newline at end of file diff --git a/src/main/java/net/mcreator/ui/modgui/PlantGUI.java b/src/main/java/net/mcreator/ui/modgui/PlantGUI.java index ddd36593f28..4ad107f2ccb 100644 --- a/src/main/java/net/mcreator/ui/modgui/PlantGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/PlantGUI.java @@ -39,6 +39,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.TiledImageCache; import net.mcreator.ui.laf.renderer.ModelComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.*; import net.mcreator.ui.minecraft.boundingboxes.JBoundingBoxList; import net.mcreator.ui.procedure.AbstractProcedureSelector; @@ -134,7 +135,7 @@ public class PlantGUI extends ModElementGUI { private final SearchableComboBox renderType = new SearchableComboBox<>(new Model[] { cross, crop }); private final JComboBox offsetType = new JComboBox<>(new String[] { "XZ", "XYZ", "NONE" }); - private final JComboBox aiPathNodeType = new JComboBox<>(); + private final SearchableComboBox aiPathNodeType = new SearchableComboBox<>(); private final JComboBox tintType = new JComboBox<>( new String[] { "No tint", "Grass", "Foliage", "Birch foliage", "Spruce foliage", "Default foliage", "Water", @@ -310,9 +311,9 @@ public PlantGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { texturesAndRent.add("East", PanelUtils.centerAndSouthElement(rent, specialInformation, 2, 2)); texturesAndRent.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.plant.textures_and_model"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JPanel sbbp2 = new JPanel(new BorderLayout()); @@ -345,9 +346,9 @@ public PlantGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JPanel ptipe1 = new JPanel(new BorderLayout()); ptipe1.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.plant.type_static"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JPanel staticPlantProperties = new JPanel(new GridLayout(2, 2, 0, 4)); staticPlantProperties.setOpaque(false); @@ -365,9 +366,9 @@ public PlantGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JPanel ptipe2 = new JPanel(new BorderLayout()); ptipe2.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.plant.type_growable"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); ptipe2.add("West", dyn); JPanel mlo = new JPanel(new GridLayout(1, 2)); @@ -384,9 +385,9 @@ public PlantGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JPanel ptipe3 = new JPanel(new BorderLayout()); ptipe3.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.plant.type_double"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); ptipe3.add("Center", dbl); ptipe3.add("North", doubleType); ptipe3.setOpaque(false); @@ -435,23 +436,23 @@ public PlantGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JPanel selp = new JPanel(new GridLayout(9, 2, 5, 2)); selp.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.properties_general"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont(), Theme.current().getForegroundColor())); selp.setOpaque(false); JPanel selp2 = new JPanel(new GridLayout(6, 2, 5, 2)); selp2.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.properties_dropping"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont(), Theme.current().getForegroundColor())); selp2.setOpaque(false); JPanel soundProperties = new JPanel(new GridLayout(7, 2, 0, 2)); soundProperties.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.properties_sound"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, - getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + getFont(), Theme.current().getForegroundColor())); soundProperties.setOpaque(false); useLootTableForDrops.setOpaque(false); @@ -582,9 +583,9 @@ public PlantGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JComponent bonemealMerger = PanelUtils.northAndCenterElement(bonemealPanel, bonemealEvents, 2, 2); bonemealMerger.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.common.properties_bonemeal"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); pane3.add("Center", PanelUtils.totalCenterInPanel(PanelUtils.westAndEastElement( PanelUtils.pullElementUp(PanelUtils.northAndCenterElement(selp, bonemealMerger)), @@ -636,9 +637,9 @@ public PlantGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { JComponent plocb = PanelUtils.northAndCenterElement(advancedProperties, PanelUtils.westAndCenterElement(new JEmptyBox(5, 5), placingCondition), 2, 2); plocb.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.plant.properties_advanced_plant"), TitledBorder.LEADING, - TitledBorder.DEFAULT_POSITION, getFont(), (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + TitledBorder.DEFAULT_POSITION, getFont(), Theme.current().getForegroundColor())); plocb.setOpaque(false); pane5.add("Center", PanelUtils.totalCenterInPanel(plocb)); @@ -1019,7 +1020,7 @@ else if (growapableType.isSelected()) plant.isReplaceable = isReplaceable.isSelected(); plant.colorOnMap = colorOnMap.getSelectedItem().toString(); plant.offsetType = (String) offsetType.getSelectedItem(); - plant.aiPathNodeType = (String) aiPathNodeType.getSelectedItem(); + plant.aiPathNodeType = aiPathNodeType.getSelectedItem(); plant.creativePickItem = creativePickItem.getBlock(); plant.flammability = (int) flammability.getValue(); plant.fireSpreadSpeed = (int) fireSpreadSpeed.getValue(); diff --git a/src/main/java/net/mcreator/ui/modgui/PotionGUI.java b/src/main/java/net/mcreator/ui/modgui/PotionGUI.java index 2f0e2aa6141..a54934564f7 100644 --- a/src/main/java/net/mcreator/ui/modgui/PotionGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/PotionGUI.java @@ -54,7 +54,7 @@ public class PotionGUI extends ModElementGUI { public PotionGUI(MCreator mcreator, @Nonnull ModElement modElement, boolean editingMode) { super(mcreator, modElement, editingMode); this.initGUI(); - super.finalizeGUI(false); + super.finalizeGUI(); } @Override protected void initGUI() { @@ -114,7 +114,7 @@ public PotionGUI(MCreator mcreator, @Nonnull ModElement modElement, boolean edit page1group.addValidationElement(arrowName); pane3.add(PanelUtils.northAndCenterElement(PanelUtils.join(FlowLayout.LEFT, northPanel), mainEditor)); - addPage(pane3); + addPage(pane3, false); if (!isEditingMode()) { String readableNameFromModElement = "Potion of " + StringUtils.machineToReadableName(modElement.getName()); diff --git a/src/main/java/net/mcreator/ui/modgui/ProcedureGUI.java b/src/main/java/net/mcreator/ui/modgui/ProcedureGUI.java index 2f6b3b251d3..eb6869f6259 100644 --- a/src/main/java/net/mcreator/ui/modgui/ProcedureGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/ProcedureGUI.java @@ -21,18 +21,14 @@ import net.mcreator.blockly.BlocklyCompileNote; import net.mcreator.blockly.data.*; import net.mcreator.blockly.java.BlocklyToProcedure; -import net.mcreator.element.GeneratableElement; -import net.mcreator.element.parts.gui.GUIComponent; -import net.mcreator.element.parts.procedure.Procedure; -import net.mcreator.element.types.Command; -import net.mcreator.element.types.GUI; -import net.mcreator.element.types.Item; +import net.mcreator.element.ModElementType; import net.mcreator.generator.blockly.BlocklyBlockCodeGenerator; import net.mcreator.generator.blockly.OutputBlockCodeGenerator; import net.mcreator.generator.blockly.ProceduralBlockCodeGenerator; import net.mcreator.generator.template.TemplateGeneratorException; import net.mcreator.io.Transliteration; import net.mcreator.ui.MCreator; +import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.blockly.BlocklyEditorToolbar; import net.mcreator.ui.blockly.BlocklyEditorType; import net.mcreator.ui.blockly.BlocklyPanel; @@ -43,6 +39,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.SlickDarkScrollBarUI; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; @@ -52,17 +49,25 @@ import net.mcreator.workspace.elements.VariableElement; import net.mcreator.workspace.elements.VariableType; import net.mcreator.workspace.elements.VariableTypeLoader; +import net.mcreator.workspace.references.ReferencesFinder; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import javax.annotation.Nullable; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.net.URI; +import java.net.URISyntaxException; import java.util.List; import java.util.*; import java.util.stream.Collectors; public class ProcedureGUI extends ModElementGUI implements IBlocklyPanelHolder { + private static final Logger LOG = LogManager.getLogger(ProcedureGUI.class); + private final JPanel pane5 = new JPanel(new BorderLayout(0, 0)); private BlocklyPanel blocklyPanel; @@ -101,7 +106,7 @@ public class ProcedureGUI extends ModElementGUI list, setOpaque(isSelected); setBorder(null); Color col = value.getColor(); - setBackground(isSelected ? col : (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - setForeground(isSelected ? (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR") : col.brighter()); + setBackground(isSelected ? col : Theme.current().getBackgroundColor()); + setForeground(isSelected ? Theme.current().getForegroundColor() : col.brighter()); ComponentUtils.deriveFont(this, 14); setText(value.getName()); setToolTipText(value.toString()); @@ -286,10 +291,8 @@ public Component getListCellRendererComponent(JList l int index, boolean isSelected, boolean cellHasFocus) { setOpaque(isSelected); setBorder(null); - setBackground( - isSelected ? value.getType().getBlocklyColor() : (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - setForeground( - isSelected ? (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR") : value.getType().getBlocklyColor()); + setBackground(isSelected ? value.getType().getBlocklyColor() : Theme.current().getBackgroundColor()); + setForeground(isSelected ? Theme.current().getForegroundColor() : value.getType().getBlocklyColor()); ComponentUtils.deriveFont(this, 14); setText(value.getName()); return this; @@ -322,7 +325,7 @@ public Component getListCellRendererComponent(JList l returnType.add("Center", returnTypeLabel); returnTypeLabel.setOpaque(true); - returnTypeLabel.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + returnTypeLabel.setBackground(Theme.current().getBackgroundColor()); returnTypeLabel.setBorder(BorderFactory.createEmptyBorder(0, 7, 9, 0)); ComponentUtils.deriveFont(returnType, 13); @@ -334,14 +337,13 @@ public Component getListCellRendererComponent(JList l JPanel rettypeHeader = new JPanel(new GridLayout()); rettypeHeader.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); - rettypeHeader.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + rettypeHeader.setBackground(Theme.current().getBackgroundColor()); rettypeHeader.add(bar4); returnType.add("North", rettypeHeader); returnType.setOpaque(false); returnType.setPreferredSize(new Dimension(150, 46)); - returnType.setBorder( - BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + returnType.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Theme.current().getAltBackgroundColor())); triggerInfoPanel.setOpaque(false); triggerInfoPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 0)); @@ -353,17 +355,15 @@ public Component getListCellRendererComponent(JList l localVarsPan.setOpaque(false); JScrollPane scrollPane = new JScrollPane(localVarsList); - scrollPane.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + scrollPane.setBackground(Theme.current().getBackgroundColor()); scrollPane.getViewport().setOpaque(false); scrollPane.getVerticalScrollBar().setUnitIncrement(11); - scrollPane.getVerticalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPane.getVerticalScrollBar())); + scrollPane.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPane.getVerticalScrollBar())); scrollPane.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); scrollPane.getHorizontalScrollBar().setUnitIncrement(11); - scrollPane.getHorizontalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPane.getHorizontalScrollBar())); + scrollPane.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPane.getHorizontalScrollBar())); scrollPane.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 8)); scrollPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); localVarsPan.add("Center", scrollPane); @@ -472,7 +472,7 @@ public Component getListCellRendererComponent(JList l JPanel varHeader = new JPanel(new GridLayout()); varHeader.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); - varHeader.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + varHeader.setBackground(Theme.current().getBackgroundColor()); varHeader.add(PanelUtils.northAndCenterElement(ComponentUtils.deriveFont(lab, 13), bar)); localVarsPan.add("North", varHeader); localVarsPan.setOpaque(false); @@ -489,27 +489,24 @@ public Component getListCellRendererComponent(JList l JPanel depsHeader = new JPanel(new BorderLayout()); depsHeader.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); - depsHeader.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + depsHeader.setBackground(Theme.current().getBackgroundColor()); depsHeader.add("North", bar2); depsHeader.add("South", ComponentUtils.deriveFont(depsWarningLabel, 11)); depsPan.add("North", depsHeader); depsPan.setOpaque(false); - depsPan.setBorder( - BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + depsPan.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Theme.current().getAltBackgroundColor())); JScrollPane scrollPaneDeps = new JScrollPane(dependenciesList); - scrollPaneDeps.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + scrollPaneDeps.setBackground(Theme.current().getBackgroundColor()); scrollPaneDeps.getViewport().setOpaque(false); scrollPaneDeps.getVerticalScrollBar().setUnitIncrement(11); - scrollPaneDeps.getVerticalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPaneDeps.getVerticalScrollBar())); + scrollPaneDeps.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPaneDeps.getVerticalScrollBar())); scrollPaneDeps.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); scrollPaneDeps.getHorizontalScrollBar().setUnitIncrement(11); - scrollPaneDeps.getHorizontalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPaneDeps.getHorizontalScrollBar())); + scrollPaneDeps.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPaneDeps.getHorizontalScrollBar())); scrollPaneDeps.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 8)); scrollPaneDeps.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); depsPan.add("Center", scrollPaneDeps); @@ -523,26 +520,23 @@ public Component getListCellRendererComponent(JList l JPanel extdepsHeader = new JPanel(new BorderLayout()); extdepsHeader.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); - extdepsHeader.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + extdepsHeader.setBackground(Theme.current().getBackgroundColor()); extdepsHeader.add("North", bar3); triggerDepsPan.add("North", extdepsHeader); - triggerDepsPan.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - triggerDepsPan.setBorder( - BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + triggerDepsPan.setBackground(Theme.current().getBackgroundColor()); + triggerDepsPan.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Theme.current().getAltBackgroundColor())); JScrollPane scrollPaneExtDeps = new JScrollPane(dependenciesExtTrigList); - scrollPaneExtDeps.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + scrollPaneExtDeps.setBackground(Theme.current().getBackgroundColor()); scrollPaneExtDeps.getViewport().setOpaque(false); scrollPaneExtDeps.getVerticalScrollBar().setUnitIncrement(11); - scrollPaneExtDeps.getVerticalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPaneExtDeps.getVerticalScrollBar())); + scrollPaneExtDeps.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPaneExtDeps.getVerticalScrollBar())); scrollPaneExtDeps.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); scrollPaneExtDeps.getHorizontalScrollBar().setUnitIncrement(11); - scrollPaneExtDeps.getHorizontalScrollBar() - .setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPaneExtDeps.getHorizontalScrollBar())); + scrollPaneExtDeps.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPaneExtDeps.getHorizontalScrollBar())); scrollPaneExtDeps.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 8)); scrollPaneExtDeps.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); @@ -555,9 +549,8 @@ public Component getListCellRendererComponent(JList l JPanel eastPan = new JPanel(); eastPan.setLayout(new BoxLayout(eastPan, BoxLayout.PAGE_AXIS)); - eastPan.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - eastPan.setBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT"))); + eastPan.setBackground(Theme.current().getBackgroundColor()); + eastPan.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getBackgroundColor())); eastPan.add(localVarsPan); eastPan.add(depsPan); @@ -596,7 +589,7 @@ public Component getListCellRendererComponent(JList l blocklyEditorToolbar.setTemplateLibButtonWidth(168); pane5.add("North", blocklyEditorToolbar); - addPage(PanelUtils.gridElements(1, 1, pane5)); + addPage(PanelUtils.gridElements(1, 1, pane5), false); } @Override protected AggregatedValidationResult validatePage(int page) { @@ -619,54 +612,27 @@ else if (hasErrors) new HashSet<>(dependenciesArrayList)); // this procedure could be in use and new dependencies were added - if (isEditingMode() && dependenciesChanged) { - for (ModElement element : mcreator.getWorkspace().getModElements()) { - // if this mod element is not locked and has procedures, we try to update dependencies - // in this case, we (re)generate mod element code so dependencies get updated in the trigger code - if (!element.isCodeLocked()) { - GeneratableElement generatableElement = element.getGeneratableElement(); - if (generatableElement instanceof GUI gui) { - boolean procedureUsedByGUI = false; - for (GUIComponent component : gui.components) { - if (Procedure.isElementUsingProcedure(component, modElement.getName())) { - procedureUsedByGUI = true; - break; - } - } - if (procedureUsedByGUI || Procedure.isElementUsingProcedure(generatableElement, - modElement.getName())) - mcreator.getGenerator().generateElement(generatableElement); - } else if (generatableElement instanceof Item item) { - boolean procedureUsedByItem = false; - for (Procedure procedure : item.customProperties.values()) { - if (modElement.getName().equals(procedure.getName())) { - procedureUsedByItem = true; - break; - } - } - if (procedureUsedByItem || Procedure.isElementUsingProcedure(generatableElement, - modElement.getName())) - mcreator.getGenerator().generateElement(generatableElement); - } else if (generatableElement != null && element.getType().hasProcedureTriggers()) { - if (Procedure.isElementUsingProcedure(generatableElement, modElement.getName())) { - mcreator.getGenerator().generateElement(generatableElement); - } - } else if (generatableElement instanceof Command command) { - if (command.argsxml != null && command.argsxml.contains( - "" + modElement.getName() + "")) { - mcreator.getGenerator().generateElement(generatableElement); - } - } else if (generatableElement instanceof net.mcreator.element.types.Procedure procedure) { - if (procedure.procedurexml != null && procedure.procedurexml.contains( - "" + modElement.getName() + "")) { - mcreator.getGenerator().generateElement(generatableElement); - } - } + if (isEditingMode() && dependenciesChanged) + regenerateProcedureCallers(modElement, modElement); + + dependenciesBeforeEdit = dependenciesArrayList; + } + + private void regenerateProcedureCallers(ModElement procedure, ModElement recursionLock) { + for (ModElement element : ReferencesFinder.searchModElementUsages(mcreator.getWorkspace(), procedure)) { + // if this mod element is not locked and has procedures, we try to update dependencies + // in this case, we (re)generate mod element code so dependencies get updated in the trigger code + if (!element.isCodeLocked() && element.getGeneratableElement() != null) { + LOG.info("Regenerating " + element.getName() + " (" + element.getType() + + ") because it triggers procedure " + procedure.getName()); + mcreator.getGenerator().generateElement(element.getGeneratableElement()); + + // Procedure may call other procedures that also need updating + if (element.getType() == ModElementType.PROCEDURE && !element.equals(recursionLock)) { + regenerateProcedureCallers(element, recursionLock); } } } - - dependenciesBeforeEdit = dependenciesArrayList; } @Override public void openInEditingMode(net.mcreator.element.types.Procedure procedure) { @@ -690,4 +656,8 @@ else if (hasErrors) return List.of(blocklyPanel); } + @Override public @Nullable URI contextURL() throws URISyntaxException { + return new URI(MCreatorApplication.SERVER_DOMAIN + "/wiki/section/procedure-system"); + } + } \ No newline at end of file diff --git a/src/main/java/net/mcreator/ui/modgui/RecipeGUI.java b/src/main/java/net/mcreator/ui/modgui/RecipeGUI.java index d39b5b3969f..845ec67780c 100644 --- a/src/main/java/net/mcreator/ui/modgui/RecipeGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/RecipeGUI.java @@ -19,6 +19,7 @@ package net.mcreator.ui.modgui; +import net.mcreator.element.ModElementType; import net.mcreator.element.parts.MItemBlock; import net.mcreator.element.types.Recipe; import net.mcreator.minecraft.ElementUtil; @@ -30,11 +31,13 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.recipemakers.*; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.component.VComboBox; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.validators.RegistryNameValidator; +import net.mcreator.ui.validation.validators.UniqueNameValidator; import net.mcreator.workspace.elements.ModElement; import javax.annotation.Nullable; @@ -46,6 +49,7 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; +import java.util.Objects; public class RecipeGUI extends ModElementGUI { @@ -123,14 +127,22 @@ public RecipeGUI(MCreator mcreator, ModElement modElement, boolean editingMode) smithingRecipeMaker.setOpaque(false); brewingRecipeMaker.setOpaque(false); - name.setValidator(new RegistryNameValidator(name, "Loot table").setValidChars(Arrays.asList('_', '/'))); + //@formatter:off + name.setValidator(new UniqueNameValidator( + L10N.t("modelement.recipe"), + () -> namespace.getSelectedItem() + ":" + ((JTextField) name.getEditor().getEditorComponent()).getText(), + () -> mcreator.getWorkspace().getModElements().stream() + .filter(me -> me.getType() == ModElementType.RECIPE) + .map(ModElement::getGeneratableElement) + .filter(Objects::nonNull) + .map(ge -> ((Recipe) ge).namespace + ":" + ((Recipe) ge).name), + new RegistryNameValidator(name, L10N.t("modelement.recipe")).setValidChars(Arrays.asList('_', '/')) + ).setIsPresentOnList(this::isEditingMode)); + //@formatter:on name.enableRealtimeValidation(); - name.addItem("crafting_table"); name.addItem("diamond_block"); - name.setEditable(true); - name.setOpaque(false); ComponentUtils.deriveFont(group, 16); @@ -159,7 +171,7 @@ public RecipeGUI(MCreator mcreator, ModElement modElement, boolean editingMode) JComponent recwrap = PanelUtils.maxMargin(recipesPanel, 10, true, true, true, true); recwrap.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.recipe.definition"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, getFont(), Color.white)); @@ -314,7 +326,8 @@ private void updateUIFields() { cookingBookCategory.setSelectedItem(recipe.cookingBookCategory); craftingBookCategory.setSelectedItem(recipe.craftingBookCategory); - if ("Crafting".equals(recipe.recipeType)) { + switch (recipe.recipeType) { + case "Crafting" -> { recipeShapeless.setSelected(recipe.recipeShapeless); craftingRecipeMaker.cb1.setBlock(recipe.recipeSlots[0]); craftingRecipeMaker.cb2.setBlock(recipe.recipeSlots[3]); @@ -328,46 +341,56 @@ private void updateUIFields() { craftingRecipeMaker.cb10.setBlock(recipe.recipeReturnStack); craftingRecipeMaker.sp.setValue(recipe.recipeRetstackSize); craftingRecipeMaker.setShapeless(recipeShapeless.isSelected()); - } else if ("Smelting".equals(recipe.recipeType)) { + } + case "Smelting" -> { smeltingRecipeMaker.cb1.setBlock(recipe.smeltingInputStack); smeltingRecipeMaker.cb2.setBlock(recipe.smeltingReturnStack); xpReward.setValue(recipe.xpReward); cookingTime.setValue(recipe.cookingTime); - } else if ("Blasting".equals(recipe.recipeType)) { + } + case "Blasting" -> { blastFurnaceRecipeMaker.cb1.setBlock(recipe.blastingInputStack); blastFurnaceRecipeMaker.cb2.setBlock(recipe.blastingReturnStack); xpReward.setValue(recipe.xpReward); cookingTime.setValue(recipe.cookingTime); - } else if ("Smoking".equals(recipe.recipeType)) { + } + case "Smoking" -> { smokerRecipeMaker.cb1.setBlock(recipe.smokingInputStack); smokerRecipeMaker.cb2.setBlock(recipe.smokingReturnStack); xpReward.setValue(recipe.xpReward); cookingTime.setValue(recipe.cookingTime); - } else if ("Stone cutting".equals(recipe.recipeType)) { + } + case "Stone cutting" -> { stoneCutterRecipeMaker.cb1.setBlock(recipe.stoneCuttingInputStack); stoneCutterRecipeMaker.cb2.setBlock(recipe.stoneCuttingReturnStack); stoneCutterRecipeMaker.sp.setValue(recipe.recipeRetstackSize); - } else if ("Campfire cooking".equals(recipe.recipeType)) { + } + case "Campfire cooking" -> { campfireCookingRecipeMaker.cb1.setBlock(recipe.campfireCookingInputStack); campfireCookingRecipeMaker.cb2.setBlock(recipe.campfireCookingReturnStack); xpReward.setValue(recipe.xpReward); cookingTime.setValue(recipe.cookingTime); - } else if ("Smithing".equals(recipe.recipeType)) { + } + case "Smithing" -> { smithingRecipeMaker.cb1.setBlock(recipe.smithingInputStack); smithingRecipeMaker.cb2.setBlock(recipe.smithingInputAdditionStack); + smithingRecipeMaker.cb4.setBlock(recipe.smithingInputTemplateStack); smithingRecipeMaker.cb3.setBlock(recipe.smithingReturnStack); - } else if ("Brewing".equals(recipe.recipeType)) { + } + case "Brewing" -> { brewingRecipeMaker.cb1.setBlock(recipe.brewingInputStack); brewingRecipeMaker.cb2.setBlock(recipe.brewingIngredientStack); brewingRecipeMaker.cb3.setBlock(recipe.brewingReturnStack); } + } } @Override public Recipe getElementFromGUI() { Recipe recipe = new Recipe(modElement); - recipe.recipeType = (String) recipeType.getSelectedItem(); + recipe.recipeType = (String) Objects.requireNonNull(recipeType.getSelectedItem()); - if ("Crafting".equals(recipe.recipeType)) { + switch (recipe.recipeType) { + case "Crafting" -> { MItemBlock[] recipeSlots = new MItemBlock[9]; recipeSlots[0] = craftingRecipeMaker.cb1.getBlock(); recipeSlots[3] = craftingRecipeMaker.cb2.getBlock(); @@ -382,39 +405,48 @@ private void updateUIFields() { recipe.recipeShapeless = recipeShapeless.isSelected(); recipe.recipeReturnStack = craftingRecipeMaker.cb10.getBlock(); recipe.recipeSlots = recipeSlots; - } else if ("Smelting".equals(recipe.recipeType)) { + } + case "Smelting" -> { recipe.smeltingInputStack = smeltingRecipeMaker.getBlock(); recipe.smeltingReturnStack = smeltingRecipeMaker.getBlock2(); recipe.xpReward = (double) xpReward.getValue(); recipe.cookingTime = (int) cookingTime.getValue(); - } else if ("Blasting".equals(recipe.recipeType)) { + } + case "Blasting" -> { recipe.blastingInputStack = blastFurnaceRecipeMaker.getBlock(); recipe.blastingReturnStack = blastFurnaceRecipeMaker.getBlock2(); recipe.xpReward = (double) xpReward.getValue(); recipe.cookingTime = (int) cookingTime.getValue(); - } else if ("Smoking".equals(recipe.recipeType)) { + } + case "Smoking" -> { recipe.smokingInputStack = smokerRecipeMaker.getBlock(); recipe.smokingReturnStack = smokerRecipeMaker.getBlock2(); recipe.xpReward = (double) xpReward.getValue(); recipe.cookingTime = (int) cookingTime.getValue(); - } else if ("Stone cutting".equals(recipe.recipeType)) { + } + case "Stone cutting" -> { recipe.recipeRetstackSize = (int) stoneCutterRecipeMaker.sp.getValue(); recipe.stoneCuttingInputStack = stoneCutterRecipeMaker.getBlock(); recipe.stoneCuttingReturnStack = stoneCutterRecipeMaker.getBlock2(); - } else if ("Campfire cooking".equals(recipe.recipeType)) { + } + case "Campfire cooking" -> { recipe.campfireCookingInputStack = campfireCookingRecipeMaker.getBlock(); recipe.campfireCookingReturnStack = campfireCookingRecipeMaker.getBlock2(); recipe.xpReward = (double) xpReward.getValue(); recipe.cookingTime = (int) cookingTime.getValue(); - } else if ("Smithing".equals(recipe.recipeType)) { + } + case "Smithing" -> { recipe.smithingInputStack = smithingRecipeMaker.cb1.getBlock(); recipe.smithingInputAdditionStack = smithingRecipeMaker.cb2.getBlock(); + recipe.smithingInputTemplateStack = smithingRecipeMaker.cb4.getBlock(); recipe.smithingReturnStack = smithingRecipeMaker.cb3.getBlock(); - } else if ("Brewing".equals(recipe.recipeType)) { + } + case "Brewing" -> { recipe.brewingInputStack = brewingRecipeMaker.cb1.getBlock(); recipe.brewingIngredientStack = brewingRecipeMaker.cb2.getBlock(); recipe.brewingReturnStack = brewingRecipeMaker.cb3.getBlock(); } + } recipe.namespace = (String) namespace.getSelectedItem(); recipe.name = name.getEditor().getItem().toString(); diff --git a/src/main/java/net/mcreator/ui/modgui/StructureGUI.java b/src/main/java/net/mcreator/ui/modgui/StructureGUI.java index 9a256b97abc..358332334d4 100644 --- a/src/main/java/net/mcreator/ui/modgui/StructureGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/StructureGUI.java @@ -18,6 +18,7 @@ package net.mcreator.ui.modgui; +import net.mcreator.element.parts.MItemBlock; import net.mcreator.element.types.Structure; import net.mcreator.io.FileIO; import net.mcreator.io.Transliteration; @@ -25,6 +26,7 @@ import net.mcreator.ui.MCreator; import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.component.JMinMaxSpinner; +import net.mcreator.ui.component.SearchableComboBox; import net.mcreator.ui.component.util.ComboBoxUtil; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.PanelUtils; @@ -33,9 +35,11 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.minecraft.BiomeListField; +import net.mcreator.ui.minecraft.MCItemListField; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.CompoundValidator; import net.mcreator.ui.validation.ValidationGroup; +import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.validators.ItemListFieldSingleTagValidator; import net.mcreator.ui.validation.validators.ItemListFieldValidator; import net.mcreator.util.FilenameUtilsPatched; @@ -47,13 +51,12 @@ import java.io.File; import java.net.URI; import java.net.URISyntaxException; -import java.util.Arrays; +import java.util.List; import java.util.Locale; public class StructureGUI extends ModElementGUI { - private final JComboBox ignoreBlocks = new JComboBox<>( - new String[] { "STRUCTURE_BLOCK", "AIR_AND_STRUCTURE_BLOCK", "AIR" }); + private MCItemListField ignoreBlocks; private final JComboBox surfaceDetectionType = new JComboBox<>( new String[] { "WORLD_SURFACE_WG", "WORLD_SURFACE", "OCEAN_FLOOR_WG", "OCEAN_FLOOR", "MOTION_BLOCKING", @@ -69,9 +72,10 @@ public class StructureGUI extends ModElementGUI { private final JMinMaxSpinner separation_spacing = new JMinMaxSpinner(2, 5, 0, 1000000, 1, L10N.t("elementgui.structuregen.separation"), L10N.t("elementgui.structuregen.spacing")); - private final JComboBox structureSelector = new JComboBox<>(); + private SearchableComboBox structureSelector; - private final JComboBox generationStep = new JComboBox<>(); + private final JComboBox generationStep = new JComboBox<>( + ElementUtil.getDataListAsStringArray("generationsteps")); private final ValidationGroup page1group = new ValidationGroup(); @@ -82,7 +86,10 @@ public StructureGUI(MCreator mcreator, ModElement modElement, boolean editingMod } @Override protected void initGUI() { + structureSelector = new SearchableComboBox<>( + mcreator.getFolderManager().getStructureList().toArray(String[]::new)); restrictionBiomes = new BiomeListField(mcreator, true); + ignoreBlocks = new MCItemListField(mcreator, ElementUtil::loadBlocks); separation_spacing.setAllowEqualValues(false); @@ -90,6 +97,11 @@ public StructureGUI(MCreator mcreator, ModElement modElement, boolean editingMod ComponentUtils.deriveFont(structureSelector, 16); + if (!isEditingMode()) { + generationStep.setSelectedItem("SURFACE_STRUCTURES"); + ignoreBlocks.setListElements(List.of(new MItemBlock(modElement.getWorkspace(), "Blocks.STRUCTURE_BLOCK"))); + } + JPanel params = new JPanel(new GridLayout(8, 2, 50, 2)); params.setOpaque(false); @@ -149,26 +161,29 @@ public StructureGUI(MCreator mcreator, ModElement modElement, boolean editingMod new ItemListFieldSingleTagValidator(restrictionBiomes))); page1group.addValidationElement(restrictionBiomes); + structureSelector.setValidator(() -> { + if (structureSelector.getSelectedItem() == null || structureSelector.getSelectedItem().isEmpty()) + return new Validator.ValidationResult(Validator.ValidationResultType.ERROR, + L10N.t("elementgui.structuregen.error_select_structure_spawn")); + return Validator.ValidationResult.PASSED; + }); + page1group.addValidationElement(structureSelector); + addPage(pane5); } @Override public void reloadDataLists() { super.reloadDataLists(); - ComboBoxUtil.updateComboBoxContents(generationStep, - Arrays.asList(ElementUtil.getDataListAsStringArray("generationsteps")), "SURFACE_STRUCTURES"); - ComboBoxUtil.updateComboBoxContents(structureSelector, mcreator.getFolderManager().getStructureList()); } @Override protected AggregatedValidationResult validatePage(int page) { - if (structureSelector.getSelectedItem() == null || structureSelector.getSelectedItem().toString().isEmpty()) - return new AggregatedValidationResult.FAIL(L10N.t("elementgui.structuregen.error_select_structure_spawn")); return new AggregatedValidationResult(page1group); } @Override public void openInEditingMode(Structure structure) { - ignoreBlocks.setSelectedItem(structure.ignoreBlocks); + ignoreBlocks.setListElements(structure.ignoredBlocks); projection.setSelectedItem(structure.projection); surfaceDetectionType.setSelectedItem(structure.surfaceDetectionType); terrainAdaptation.setSelectedItem(structure.terrainAdaptation); @@ -181,12 +196,12 @@ public StructureGUI(MCreator mcreator, ModElement modElement, boolean editingMod @Override public Structure getElementFromGUI() { Structure structure = new Structure(modElement); - structure.ignoreBlocks = (String) ignoreBlocks.getSelectedItem(); + structure.ignoredBlocks = ignoreBlocks.getListElements(); structure.projection = (String) projection.getSelectedItem(); structure.surfaceDetectionType = (String) surfaceDetectionType.getSelectedItem(); structure.terrainAdaptation = (String) terrainAdaptation.getSelectedItem(); structure.restrictionBiomes = restrictionBiomes.getListElements(); - structure.structure = (String) structureSelector.getSelectedItem(); + structure.structure = structureSelector.getSelectedItem(); structure.separation = separation_spacing.getIntMinValue(); structure.spacing = separation_spacing.getIntMaxValue(); structure.generationStep = (String) generationStep.getSelectedItem(); diff --git a/src/main/java/net/mcreator/ui/modgui/TabGUI.java b/src/main/java/net/mcreator/ui/modgui/TabGUI.java index 96dbc7ad0b2..79248dde1bd 100644 --- a/src/main/java/net/mcreator/ui/modgui/TabGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/TabGUI.java @@ -26,6 +26,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.MCItemHolder; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.ValidationGroup; @@ -87,9 +88,9 @@ public TabGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { slpa.setMaximumSize(new Dimension(700, 110)); slpa.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.tab.add_stuff_tip"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, getFont(), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); pane3.add(PanelUtils.totalCenterInPanel(slpa)); pane3.setOpaque(false); diff --git a/src/main/java/net/mcreator/ui/modgui/TagGUI.java b/src/main/java/net/mcreator/ui/modgui/TagGUI.java index 165f1abf96e..5875da48c29 100644 --- a/src/main/java/net/mcreator/ui/modgui/TagGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/TagGUI.java @@ -20,6 +20,7 @@ import net.mcreator.element.ModElementType; import net.mcreator.element.types.Tag; +import net.mcreator.generator.mapping.NonMappableElement; import net.mcreator.minecraft.ElementUtil; import net.mcreator.minecraft.RegistryNameFixer; import net.mcreator.ui.MCreator; @@ -27,10 +28,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.help.HelpUtils; import net.mcreator.ui.init.L10N; -import net.mcreator.ui.minecraft.BiomeListField; -import net.mcreator.ui.minecraft.MCItemListField; -import net.mcreator.ui.minecraft.ModElementListField; -import net.mcreator.ui.minecraft.SpawnableEntityListField; +import net.mcreator.ui.minecraft.*; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.ui.validation.component.VComboBox; import net.mcreator.ui.validation.validators.NamespaceValidator; @@ -43,18 +41,20 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Objects; +import java.util.stream.Collectors; public class TagGUI extends ModElementGUI { private final VComboBox namespace = new VComboBox<>(new String[] { "minecraft", "mod", "forge", "c" }); private final JComboBox type = new JComboBox<>( - new String[] { "Items", "Blocks", "Entities", "Biomes", "Functions" }); + new String[] { "Items", "Blocks", "Entities", "Biomes", "Functions", "Damage types" }); private MCItemListField items; private MCItemListField blocks; private SpawnableEntityListField entities; private BiomeListField biomes; private ModElementListField functions; + private DamageTypeListField damageTypes; private final VComboBox name = new VComboBox<>(); @@ -73,6 +73,7 @@ public TagGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { entities = new SpawnableEntityListField(mcreator, true); biomes = new BiomeListField(mcreator, true); functions = new ModElementListField(mcreator, ModElementType.FUNCTION); + damageTypes = new DamageTypeListField(mcreator, true); name.setValidator(new ResourceLocationValidator<>(L10N.t("modelement.tag"), name, false)); name.enableRealtimeValidation(); @@ -100,6 +101,7 @@ public TagGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { valuesPan.add(functions, "Functions"); valuesPan.add(entities, "Entities"); valuesPan.add(biomes, "Biomes"); + valuesPan.add(damageTypes, "Damage types"); if (isEditingMode()) { type.setEnabled(false); @@ -151,9 +153,10 @@ public TagGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { items.setListElements(tag.items); blocks.setListElements(tag.blocks); - functions.setListElements(tag.functions); + functions.setListElements(tag.functions.stream().map(NonMappableElement::new).toList()); entities.setListElements(tag.entities); biomes.setListElements(tag.biomes); + damageTypes.setListElements(tag.damageTypes); } @Override public Tag getElementFromGUI() { @@ -163,9 +166,11 @@ public TagGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { tag.items = items.getListElements(); tag.blocks = blocks.getListElements(); - tag.functions = functions.getListElements(); + tag.functions = functions.getListElements().stream().map(NonMappableElement::getUnmappedValue) + .collect(Collectors.toList()); tag.entities = entities.getListElements(); tag.biomes = biomes.getListElements(); + tag.damageTypes = damageTypes.getListElements(); tag.name = name.getEditor().getItem().toString(); return tag; diff --git a/src/main/java/net/mcreator/ui/modgui/ToolGUI.java b/src/main/java/net/mcreator/ui/modgui/ToolGUI.java index 7e007eab637..50413d38b97 100644 --- a/src/main/java/net/mcreator/ui/modgui/ToolGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/ToolGUI.java @@ -35,6 +35,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.laf.renderer.ItemTexturesComboBoxRenderer; import net.mcreator.ui.laf.renderer.ModelComboBoxRenderer; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.minecraft.DataListComboBox; import net.mcreator.ui.minecraft.MCItemListField; import net.mcreator.ui.minecraft.TextureHolder; @@ -181,9 +182,9 @@ public ToolGUI(MCreator mcreator, ModElement modElement, boolean editingMode) { renderType.setRenderer(new ModelComboBoxRenderer()); rent.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.tool.tool_3d_model"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JComponent visualBottom = PanelUtils.centerAndSouthElement(glowCondition, specialInformation, 0, 5); diff --git a/src/main/java/net/mcreator/ui/modgui/VillagerProfessionGUI.java b/src/main/java/net/mcreator/ui/modgui/VillagerProfessionGUI.java index c164a175d63..5f35041b6cb 100644 --- a/src/main/java/net/mcreator/ui/modgui/VillagerProfessionGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/VillagerProfessionGUI.java @@ -25,6 +25,7 @@ import net.mcreator.minecraft.ElementUtil; import net.mcreator.minecraft.MCItem; import net.mcreator.ui.MCreator; +import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.component.SearchableComboBox; import net.mcreator.ui.component.util.ComboBoxUtil; import net.mcreator.ui.component.util.ComponentUtils; @@ -48,9 +49,12 @@ import net.mcreator.util.StringUtils; import net.mcreator.workspace.elements.ModElement; +import javax.annotation.Nullable; import javax.swing.*; import java.awt.*; import java.io.File; +import java.net.URI; +import java.net.URISyntaxException; import java.util.Collections; import java.util.stream.Collectors; @@ -209,4 +213,8 @@ public VillagerProfessionGUI(MCreator mcreator, ModElement modElement, boolean e return profession; } + @Override public @Nullable URI contextURL() throws URISyntaxException { + return new URI(MCreatorApplication.SERVER_DOMAIN + "/wiki/how-make-villager-profession"); + } + } diff --git a/src/main/java/net/mcreator/ui/modgui/VillagerTradeGUI.java b/src/main/java/net/mcreator/ui/modgui/VillagerTradeGUI.java index dde86625009..cb453c7008c 100644 --- a/src/main/java/net/mcreator/ui/modgui/VillagerTradeGUI.java +++ b/src/main/java/net/mcreator/ui/modgui/VillagerTradeGUI.java @@ -21,13 +21,17 @@ import net.mcreator.element.types.VillagerTrade; import net.mcreator.ui.MCreator; +import net.mcreator.ui.MCreatorApplication; import net.mcreator.ui.minecraft.villagers.JVillagerTradeProfessionsList; import net.mcreator.ui.validation.AggregatedValidationResult; import net.mcreator.workspace.elements.ModElement; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import javax.swing.*; import java.awt.*; +import java.net.URI; +import java.net.URISyntaxException; public class VillagerTradeGUI extends ModElementGUI { @@ -48,7 +52,7 @@ public VillagerTradeGUI(MCreator mcreator, @Nonnull ModElement modElement, boole pane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); pane.add(villagerTradeProfessions); - addPage(pane); + addPage(pane, false); // Add first pool if (!isEditingMode()) { @@ -74,4 +78,9 @@ public VillagerTradeGUI(MCreator mcreator, @Nonnull ModElement modElement, boole villagerTrade.tradeEntries = villagerTradeProfessions.getEntries(); return villagerTrade; } + + @Override public @Nullable URI contextURL() throws URISyntaxException { + return new URI(MCreatorApplication.SERVER_DOMAIN + "/wiki/how-make-villager-trades"); + } + } diff --git a/src/main/java/net/mcreator/ui/modgui/codeviewer/ModElementCodeViewer.java b/src/main/java/net/mcreator/ui/modgui/codeviewer/ModElementCodeViewer.java index 09c05b75c57..fc15ee845b9 100644 --- a/src/main/java/net/mcreator/ui/modgui/codeviewer/ModElementCodeViewer.java +++ b/src/main/java/net/mcreator/ui/modgui/codeviewer/ModElementCodeViewer.java @@ -23,8 +23,10 @@ import net.mcreator.generator.GeneratorFile; import net.mcreator.generator.GeneratorTemplatesList; import net.mcreator.generator.ListTemplate; +import net.mcreator.ui.component.util.ThreadUtil; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.FileIcons; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.modgui.ModElementChangedListener; import net.mcreator.ui.modgui.ModElementGUI; import net.mcreator.util.image.ImageUtils; @@ -57,7 +59,7 @@ public ModElementCodeViewer(ModElementGUI modElementGUI) { this.modElementGUI = modElementGUI; this.codeChangeListener = this::reload; - setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + setBackground(Theme.current().getAltBackgroundColor()); setOpaque(true); addComponentListener(new ComponentAdapter() { @@ -84,7 +86,7 @@ public ModElementCodeViewer(ModElementGUI modElementGUI) { } }); - listPane.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + listPane.setBackground(Theme.current().getAltBackgroundColor()); listPane.setOpaque(true); listPane.addComponentListener(new ComponentAdapter() { @@ -118,7 +120,7 @@ private synchronized void reload() { for (GeneratorFile file : files) { if (cache.containsKey(file)) { // existing file - SwingUtilities.invokeAndWait(() -> { + ThreadUtil.runOnSwingThreadAndWait(() -> { try { if (cache.get(file).update(file)) { if (file.source() instanceof ListTemplate lt) { // file from list @@ -141,7 +143,7 @@ private synchronized void reload() { } }); } else { // new file - SwingUtilities.invokeAndWait(() -> { + ThreadUtil.runOnSwingThreadAndWait(() -> { try { FileCodeViewer fileCodeViewer = new FileCodeViewer<>(this, file); if (file.source() instanceof ListTemplate lt) { // file from list @@ -179,7 +181,7 @@ private synchronized void reload() { if (!isEnabledAt(getSelectedIndex()) && !cache.isEmpty()) setSelectedIndex(IntStream.range(0, getTabCount()).filter(this::isEnabledAt).min().orElse(0)); - setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + setBackground(Theme.current().getAltBackgroundColor()); } catch (Exception ignored) { setBackground(new Color(0x8D5C5C)); } diff --git a/src/main/java/net/mcreator/ui/notifications/NotificationsRenderer.java b/src/main/java/net/mcreator/ui/notifications/NotificationsRenderer.java index 3348722c168..5e73c457554 100644 --- a/src/main/java/net/mcreator/ui/notifications/NotificationsRenderer.java +++ b/src/main/java/net/mcreator/ui/notifications/NotificationsRenderer.java @@ -24,6 +24,7 @@ import net.mcreator.ui.component.JEmptyBox; import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import javax.annotation.Nullable; import javax.swing.*; @@ -86,9 +87,8 @@ public void addNotification(@Nullable String title, String text, @Nullable Image } BalloonTip balloonTip = new BalloonTip(this.anchor, tipContents, - new EdgedBalloonStyle((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.GRAY_COLOR")), BalloonTip.Orientation.RIGHT_BELOW, - BalloonTip.AttachLocation.SOUTHEAST, -10, 10, false); + new EdgedBalloonStyle(Theme.current().getBackgroundColor(), Theme.current().getAltForegroundColor()), + BalloonTip.Orientation.RIGHT_BELOW, BalloonTip.AttachLocation.SOUTHEAST, -10, 10, false); closeButton.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); closeButton.setContentAreaFilled(false); diff --git a/src/main/java/net/mcreator/ui/procedure/AbstractProcedureSelector.java b/src/main/java/net/mcreator/ui/procedure/AbstractProcedureSelector.java index d8d3597a4ad..999e344b79d 100644 --- a/src/main/java/net/mcreator/ui/procedure/AbstractProcedureSelector.java +++ b/src/main/java/net/mcreator/ui/procedure/AbstractProcedureSelector.java @@ -23,8 +23,6 @@ import net.mcreator.blockly.data.Dependency; import net.mcreator.element.ModElementType; import net.mcreator.element.parts.procedure.Procedure; -import net.mcreator.generator.GeneratorConfiguration; -import net.mcreator.generator.GeneratorStats; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.SearchableComboBox; import net.mcreator.ui.init.L10N; @@ -45,7 +43,7 @@ public abstract class AbstractProcedureSelector extends JPanel implements IValid private static final Gson gson = new GsonBuilder().setLenient().create(); - protected final SearchableComboBox procedures = new SearchableComboBox<>(); + protected final SearchableComboBox procedures = new SearchableComboBox<>(); protected final Dependency[] providedDependencies; protected final Map> depsMap = new HashMap<>(); @@ -54,7 +52,7 @@ public abstract class AbstractProcedureSelector extends JPanel implements IValid protected final JButton edit = new JButton(UIRES.get("18px.edit")); protected final JButton add = new JButton(UIRES.get("18px.add")); - protected CBoxEntry oldItem; + protected ProcedureEntry oldItem; protected final MCreator mcreator; @@ -73,11 +71,6 @@ public AbstractProcedureSelector(MCreator mcreator, @Nullable VariableType retur } @Override public void setEnabled(boolean enabled) { - GeneratorConfiguration gc = mcreator.getGeneratorConfiguration(); - if (gc.getGeneratorStats().getModElementTypeCoverageInfo().get(ModElementType.PROCEDURE) - == GeneratorStats.CoverageStatus.NONE) - enabled = false; - super.setEnabled(enabled); procedures.setEnabled(enabled); @@ -85,22 +78,21 @@ public AbstractProcedureSelector(MCreator mcreator, @Nullable VariableType retur add.setEnabled(enabled); } - public void refreshList() { + public final void refreshList() { depsMap.clear(); procedures.removeAllItems(); - procedures.addItem(new CBoxEntry(defaultName, null)); + procedures.addItem(new ProcedureEntry(defaultName, null)); for (ModElement mod : mcreator.getWorkspace().getModElements()) { if (mod.getType() == ModElementType.PROCEDURE) { List dependenciesList = (List) mod.getMetadata("dependencies"); - - List realdepsList = new ArrayList<>(); if (dependenciesList == null) continue; - boolean missing = false; + List realdepsList = new ArrayList<>(); + boolean missing = false; for (Object depobj : dependenciesList) { Dependency dependency = gson.fromJson(gson.toJsonTree(depobj).getAsJsonObject(), Dependency.class); realdepsList.add(dependency); @@ -122,7 +114,7 @@ public void refreshList() { depsMap.put(mod.getName(), realdepsList); if (correctReturnType || (returnTypeCurrent == null && returnTypeOptional)) - procedures.addItem(new CBoxEntry(mod.getName(), returnTypeCurrent, !missing)); + procedures.addItem(new ProcedureEntry(mod.getName(), returnTypeCurrent, !missing)); } } } @@ -134,8 +126,8 @@ public void refreshListKeepSelected() { updateDepsList(false); } - protected CBoxEntry updateDepsList(boolean smallIcons) { - CBoxEntry selected = procedures.getSelectedItem(); + ProcedureEntry updateDepsList(boolean smallIcons) { + ProcedureEntry selected = procedures.getSelectedItem(); List dependencies = null; if (selected != null) { @@ -183,7 +175,7 @@ protected CBoxEntry updateDepsList(boolean smallIcons) { } public Procedure getSelectedProcedure() { - CBoxEntry selected = procedures.getSelectedItem(); + ProcedureEntry selected = procedures.getSelectedItem(); if (selected == null || selected.string.equals(defaultName)) return null; return new Procedure(selected.string); @@ -191,12 +183,12 @@ public Procedure getSelectedProcedure() { public void setSelectedProcedure(String procedure) { if (procedure != null) - procedures.setSelectedItem(new CBoxEntry(procedure, null)); + procedures.setSelectedItem(new ProcedureEntry(procedure, null)); } public void setSelectedProcedure(Procedure procedure) { if (procedure != null) - procedures.setSelectedItem(new CBoxEntry(procedure.getName(), null)); + procedures.setSelectedItem(new ProcedureEntry(procedure.getName(), null)); } public AbstractProcedureSelector makeReturnValueOptional() { diff --git a/src/main/java/net/mcreator/ui/procedure/ConditionalComboBoxRenderer.java b/src/main/java/net/mcreator/ui/procedure/ConditionalComboBoxRenderer.java index 637887236b2..aa5dbdd610d 100644 --- a/src/main/java/net/mcreator/ui/procedure/ConditionalComboBoxRenderer.java +++ b/src/main/java/net/mcreator/ui/procedure/ConditionalComboBoxRenderer.java @@ -20,23 +20,24 @@ package net.mcreator.ui.procedure; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; import javax.swing.plaf.basic.BasicComboBoxRenderer; import java.awt.*; -class ConditionalComboBoxRenderer implements ListCellRenderer { +class ConditionalComboBoxRenderer implements ListCellRenderer { private final BasicComboBoxRenderer renderer = new BasicComboBoxRenderer(); @Override - public Component getListCellRendererComponent(JList list, CBoxEntry value, int index, boolean isSelected, + public Component getListCellRendererComponent(JList list, ProcedureEntry value, int index, boolean isSelected, boolean cellHasFocus) { JLabel component = (JLabel) renderer.getListCellRendererComponent(list, value.string, index, isSelected, cellHasFocus); if (!value.correctDependencies) { - component.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + component.setForeground(Theme.current().getAltForegroundColor()); component.setText("" + component.getText() + L10N.t("action.procedure.missing_dependencies")); } diff --git a/src/main/java/net/mcreator/ui/procedure/LogicProcedureSelector.java b/src/main/java/net/mcreator/ui/procedure/LogicProcedureSelector.java index 17634c36b84..2dccbc0f85d 100644 --- a/src/main/java/net/mcreator/ui/procedure/LogicProcedureSelector.java +++ b/src/main/java/net/mcreator/ui/procedure/LogicProcedureSelector.java @@ -67,7 +67,7 @@ public LogicProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcrea } @Override public LogicProcedure getSelectedProcedure() { - CBoxEntry selected = procedures.getSelectedItem(); + ProcedureEntry selected = procedures.getSelectedItem(); if (selected == null || selected.string.equals(defaultName)) return new LogicProcedure(null, getFixedValue()); return new LogicProcedure(selected.string, getFixedValue()); @@ -76,7 +76,8 @@ public LogicProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcrea @Override public void setSelectedProcedure(Procedure procedure) { if (procedure instanceof LogicProcedure logicProcedure) { if (logicProcedure.getName() != null) - procedures.setSelectedItem(new CBoxEntry(logicProcedure.getName(), null)); + procedures.setSelectedItem(new ProcedureEntry(logicProcedure.getName(), null)); + setFixedValue(logicProcedure.getFixedValue()); } } @@ -88,7 +89,7 @@ public LogicProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcrea } @Override public void setFixedValue(Boolean value) { - if (fixedValue != null) + if (fixedValue != null && value != null) fixedValue.setSelected(value); } } diff --git a/src/main/java/net/mcreator/ui/procedure/NumberProcedureSelector.java b/src/main/java/net/mcreator/ui/procedure/NumberProcedureSelector.java index f8feebf92c8..a7b9ef5c70d 100644 --- a/src/main/java/net/mcreator/ui/procedure/NumberProcedureSelector.java +++ b/src/main/java/net/mcreator/ui/procedure/NumberProcedureSelector.java @@ -60,7 +60,7 @@ public NumberProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcre } @Override public NumberProcedure getSelectedProcedure() { - CBoxEntry selected = procedures.getSelectedItem(); + ProcedureEntry selected = procedures.getSelectedItem(); if (selected == null || selected.string.equals(defaultName)) return new NumberProcedure(null, getFixedValue()); return new NumberProcedure(selected.string, getFixedValue()); @@ -69,7 +69,7 @@ public NumberProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcre @Override public void setSelectedProcedure(Procedure procedure) { if (procedure instanceof NumberProcedure numberProcedure) { if (numberProcedure.getName() != null) - procedures.setSelectedItem(new CBoxEntry(numberProcedure.getName(), null)); + procedures.setSelectedItem(new ProcedureEntry(numberProcedure.getName(), null)); setFixedValue(numberProcedure.getFixedValue()); } @@ -96,7 +96,7 @@ else if (rawValue instanceof Byte) } @Override public void setFixedValue(Double value) { - if (fixedValue != null) + if (fixedValue != null && value != null) fixedValue.setValue(value); } diff --git a/src/main/java/net/mcreator/ui/procedure/CBoxEntry.java b/src/main/java/net/mcreator/ui/procedure/ProcedureEntry.java similarity index 80% rename from src/main/java/net/mcreator/ui/procedure/CBoxEntry.java rename to src/main/java/net/mcreator/ui/procedure/ProcedureEntry.java index fa4dd242a84..0d2360ebb29 100644 --- a/src/main/java/net/mcreator/ui/procedure/CBoxEntry.java +++ b/src/main/java/net/mcreator/ui/procedure/ProcedureEntry.java @@ -23,16 +23,16 @@ import javax.annotation.Nullable; -class CBoxEntry { +class ProcedureEntry { String string; final boolean correctDependencies; @Nullable private final VariableType variableType; - CBoxEntry(String string, @Nullable VariableType variableType) { + ProcedureEntry(String string, @Nullable VariableType variableType) { this(string, variableType, true); } - CBoxEntry(String string, @Nullable VariableType variableType, boolean correctDependencies) { + ProcedureEntry(String string, @Nullable VariableType variableType, boolean correctDependencies) { this.string = string; if (this.string == null) this.string = ""; @@ -45,7 +45,7 @@ class CBoxEntry { } @Override public boolean equals(Object o) { - return o instanceof CBoxEntry && ((CBoxEntry) o).string.equals(this.string); + return o instanceof ProcedureEntry && ((ProcedureEntry) o).string.equals(this.string); } @Override public String toString() { diff --git a/src/main/java/net/mcreator/ui/procedure/ProcedureSelector.java b/src/main/java/net/mcreator/ui/procedure/ProcedureSelector.java index 78a47515707..92b61463479 100644 --- a/src/main/java/net/mcreator/ui/procedure/ProcedureSelector.java +++ b/src/main/java/net/mcreator/ui/procedure/ProcedureSelector.java @@ -20,8 +20,6 @@ import net.mcreator.blockly.data.Dependency; import net.mcreator.element.ModElementType; -import net.mcreator.generator.GeneratorConfiguration; -import net.mcreator.generator.GeneratorStats; import net.mcreator.java.JavaConventions; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.util.ComboBoxFullWidthPopup; @@ -31,6 +29,7 @@ import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.modgui.ModElementGUI; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.optionpane.OptionPaneValidatior; @@ -141,8 +140,8 @@ public ProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcreator, } }); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - setBorder(BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); + setBackground(Theme.current().getBackgroundColor()); + setBorder(BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor())); if (returnType != null) { setBorder(BorderFactory.createLineBorder(returnType.getBlocklyColor())); @@ -154,7 +153,7 @@ public ProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcreator, procedures.setRenderer(new ConditionalComboBoxRenderer()); procedures.addPopupMenuListener(new ComboBoxFullWidthPopup()); procedures.addActionListener(e -> { - CBoxEntry selectedItem = procedures.getSelectedItem(); + ProcedureEntry selectedItem = procedures.getSelectedItem(); if (selectedItem != null) { if (!selectedItem.correctDependencies) { procedures.setSelectedItem(oldItem); @@ -282,12 +281,7 @@ public ProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcreator, procedures.setToolTipText(L10N.t("action.procedure.match_dependencies")); - procedures.setPrototypeDisplayValue(new CBoxEntry("XXXXXXXXX", null)); - - GeneratorConfiguration gc = mcreator.getGeneratorConfiguration(); - if (gc.getGeneratorStats().getModElementTypeCoverageInfo().get(ModElementType.PROCEDURE) - == GeneratorStats.CoverageStatus.NONE) - setEnabled(false); + procedures.setPrototypeDisplayValue(new ProcedureEntry("XXXXXXXXX", null)); } public ProcedureSelector setDefaultName(String defaultName) { @@ -317,13 +311,13 @@ public ProcedureSelector makeInline() { if (returnType != null) setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createMatteBorder(1, 0, 1, 1, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")), + BorderFactory.createMatteBorder(1, 0, 1, 1, Theme.current().getAltBackgroundColor()), BorderFactory.createMatteBorder(0, 5, 0, 0, returnType.getBlocklyColor()))); return (ProcedureSelector) retval; } - @Override protected CBoxEntry updateDepsList(boolean smallIcons) { + @Override protected ProcedureEntry updateDepsList(boolean smallIcons) { return super.updateDepsList(inline); } } diff --git a/src/main/java/net/mcreator/ui/procedure/RetvalProcedureSelector.java b/src/main/java/net/mcreator/ui/procedure/RetvalProcedureSelector.java index 6359c1e2f85..5b450e960b7 100644 --- a/src/main/java/net/mcreator/ui/procedure/RetvalProcedureSelector.java +++ b/src/main/java/net/mcreator/ui/procedure/RetvalProcedureSelector.java @@ -23,8 +23,6 @@ import net.mcreator.element.ModElementType; import net.mcreator.element.parts.procedure.Procedure; import net.mcreator.element.parts.procedure.RetvalProcedure; -import net.mcreator.generator.GeneratorConfiguration; -import net.mcreator.generator.GeneratorStats; import net.mcreator.java.JavaConventions; import net.mcreator.ui.MCreator; import net.mcreator.ui.component.JEmptyBox; @@ -35,6 +33,7 @@ import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.modgui.ModElementGUI; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.optionpane.OptionPaneValidatior; @@ -73,12 +72,12 @@ public RetvalProcedureSelector(VariableType returnType, @Nullable IHelpContext h setOpaque(true); procedures.setBorder(BorderFactory.createLineBorder(returnType.getBlocklyColor())); - setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + setBackground(Theme.current().getAltBackgroundColor()); procedures.setRenderer(new ConditionalComboBoxRenderer()); procedures.addPopupMenuListener(new ComboBoxFullWidthPopup()); procedures.addActionListener(e -> { - CBoxEntry selectedItem = procedures.getSelectedItem(); + ProcedureEntry selectedItem = procedures.getSelectedItem(); if (selectedItem != null) { if (!selectedItem.correctDependencies) { procedures.setSelectedItem(oldItem); @@ -197,19 +196,14 @@ public RetvalProcedureSelector(VariableType returnType, @Nullable IHelpContext h procedures.setToolTipText(L10N.t("action.procedure.match_dependencies")); - procedures.setPrototypeDisplayValue(new CBoxEntry("XXXXXXXXXX", null)); + procedures.setPrototypeDisplayValue(new ProcedureEntry("XXXXXXXXXX", null)); if (fixedValue != null && width != 0) fixedValue.setPreferredSize(new Dimension(width, 0)); - - GeneratorConfiguration gc = mcreator.getGeneratorConfiguration(); - if (gc.getGeneratorStats().getModElementTypeCoverageInfo().get(ModElementType.PROCEDURE) - == GeneratorStats.CoverageStatus.NONE) - setEnabled(false); } - @Override protected CBoxEntry updateDepsList(boolean smallIcons) { - CBoxEntry selected = super.updateDepsList(true); + @Override ProcedureEntry updateDepsList(boolean smallIcons) { + ProcedureEntry selected = super.updateDepsList(true); edit.setEnabled(selected != null && !selected.string.equals(defaultName)); @@ -225,16 +219,11 @@ public RetvalProcedureSelector(VariableType returnType, @Nullable IHelpContext h fixedValue.setEnabled(enabled); if (enabled) { - setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + setBackground(Theme.current().getAltBackgroundColor()); } else { - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); } - GeneratorConfiguration gc = mcreator.getGeneratorConfiguration(); - if (gc.getGeneratorStats().getModElementTypeCoverageInfo().get(ModElementType.PROCEDURE) - == GeneratorStats.CoverageStatus.NONE) - enabled = false; - procedures.setEnabled(enabled); edit.setEnabled(enabled); add.setEnabled(enabled); diff --git a/src/main/java/net/mcreator/ui/procedure/StringListProcedureSelector.java b/src/main/java/net/mcreator/ui/procedure/StringListProcedureSelector.java index 8e6ffea12ee..d2ebbffc9ff 100644 --- a/src/main/java/net/mcreator/ui/procedure/StringListProcedureSelector.java +++ b/src/main/java/net/mcreator/ui/procedure/StringListProcedureSelector.java @@ -26,11 +26,11 @@ import net.mcreator.ui.component.JStringListField; import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.workspace.elements.VariableTypeLoader; import javax.annotation.Nullable; import javax.swing.*; -import java.awt.*; import java.util.List; public class StringListProcedureSelector extends RetvalProcedureSelector, StringListProcedure> { @@ -63,13 +63,13 @@ public StringListProcedureSelector(@Nullable IHelpContext helpContext, MCreator this.fixedValue = fixedValue; if (fixedValue != null) { - fixedValue.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + fixedValue.setBackground(Theme.current().getBackgroundColor()); fixedValue.setBorder(BorderFactory.createMatteBorder(1, 5, 1, allowInlineEditor ? 5 : 0, getBackground())); } } @Override public StringListProcedure getSelectedProcedure() { - CBoxEntry selected = procedures.getSelectedItem(); + ProcedureEntry selected = procedures.getSelectedItem(); if (selected == null || selected.string.equals(defaultName)) return new StringListProcedure(null, getFixedValue()); return new StringListProcedure(selected.string, getFixedValue()); @@ -78,7 +78,7 @@ public StringListProcedureSelector(@Nullable IHelpContext helpContext, MCreator @Override public void setSelectedProcedure(Procedure procedure) { if (procedure instanceof StringListProcedure stringListProcedure) { if (stringListProcedure.getName() != null) - procedures.setSelectedItem(new CBoxEntry(stringListProcedure.getName(), null)); + procedures.setSelectedItem(new ProcedureEntry(stringListProcedure.getName(), null)); setFixedValue(stringListProcedure.getFixedValue()); } @@ -89,7 +89,7 @@ public StringListProcedureSelector(@Nullable IHelpContext helpContext, MCreator } @Override public void setFixedValue(List value) { - if (fixedValue != null) + if (fixedValue != null && value != null) fixedValue.setTextList(value); } diff --git a/src/main/java/net/mcreator/ui/procedure/StringProcedureSelector.java b/src/main/java/net/mcreator/ui/procedure/StringProcedureSelector.java index eba0cad1f22..fc10f61c88d 100644 --- a/src/main/java/net/mcreator/ui/procedure/StringProcedureSelector.java +++ b/src/main/java/net/mcreator/ui/procedure/StringProcedureSelector.java @@ -25,12 +25,12 @@ import net.mcreator.ui.MCreator; import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.workspace.elements.VariableTypeLoader; import javax.annotation.Nullable; import javax.swing.*; import javax.swing.text.JTextComponent; -import java.awt.*; public class StringProcedureSelector extends RetvalProcedureSelector { @@ -64,7 +64,7 @@ public StringProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcre this.fixedValue = fixedValue; if (fixedValue != null) { - fixedValue.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + fixedValue.setBackground(Theme.current().getBackgroundColor()); fixedValue.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createMatteBorder(1, 5, 1, allowInlineEditor ? 5 : 0, this.getBackground()), BorderFactory.createMatteBorder(0, 5, 0, 5, fixedValue.getBackground()))); @@ -104,7 +104,7 @@ public StringProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcre } @Override public StringProcedure getSelectedProcedure() { - CBoxEntry selected = procedures.getSelectedItem(); + ProcedureEntry selected = procedures.getSelectedItem(); if (selected == null || selected.string.equals(defaultName)) return new StringProcedure(null, getFixedValue()); return new StringProcedure(selected.string, getFixedValue()); @@ -113,7 +113,7 @@ public StringProcedureSelector(@Nullable IHelpContext helpContext, MCreator mcre @Override public void setSelectedProcedure(Procedure procedure) { if (procedure instanceof StringProcedure stringProcedure) { if (stringProcedure.getName() != null) - procedures.setSelectedItem(new CBoxEntry(stringProcedure.getName(), null)); + procedures.setSelectedItem(new ProcedureEntry(stringProcedure.getName(), null)); setFixedValue(stringProcedure.getFixedValue()); } diff --git a/src/main/java/net/mcreator/ui/validation/optionpane/VOptionPane.java b/src/main/java/net/mcreator/ui/validation/optionpane/VOptionPane.java index 6b3a79760f2..01f56826a7b 100644 --- a/src/main/java/net/mcreator/ui/validation/optionpane/VOptionPane.java +++ b/src/main/java/net/mcreator/ui/validation/optionpane/VOptionPane.java @@ -19,7 +19,6 @@ package net.mcreator.ui.validation.optionpane; import net.mcreator.ui.component.util.ComponentUtils; -import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.L10N; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; @@ -45,13 +44,13 @@ public static String showInputDialog(Window frame, String text, String title, Im public static String showInputDialog(Window frame, String text, String title, ImageIcon icon, OptionPaneValidatior validator, String ok, String cancel, String defaultValue) { - return showInputDialog(frame, text, title, icon, validator, ok, cancel, defaultValue, null); + return showInputDialog(frame, text, title, icon, validator, ok, cancel, defaultValue, null, null); } public static String showInputDialog(Window frame, String text, String title, ImageIcon icon, OptionPaneValidatior validator, String ok, String cancel, String defaultValue, - @Nullable JComponent optionalComponent) { - JPanel inp = new JPanel(new BorderLayout(10, 15)); + @Nullable JComponent optionalNorthComponent, @Nullable JComponent optionalSouthComponent) { + JPanel inp = new JPanel(new BorderLayout(10, 10)); VTextField textField = new VTextField(20); ComponentUtils.deriveFont(textField, 17); @@ -65,14 +64,20 @@ public static String showInputDialog(Window frame, String text, String title, Im textField.getValidationStatus(); } - if (optionalComponent == null) { - inp.add("Center", new JLabel(text)); - inp.add("South", textField); - } else { - inp.add("Center", new JLabel(text)); - inp.add("South", PanelUtils.northAndCenterElement(textField, optionalComponent)); + JPanel textFieldPanel = new JPanel(new BorderLayout(0, 0)); + textFieldPanel.add("Center", textField); + + if (optionalNorthComponent != null) { + textFieldPanel.add("North", optionalNorthComponent); + } + + if (optionalSouthComponent != null) { + textFieldPanel.add("South", optionalSouthComponent); } + inp.add("North", new JLabel(text)); + inp.add("Center", textFieldPanel); + textField.addAncestorListener(new AncestorListener() { @Override public void ancestorRemoved(AncestorEvent event) { @@ -84,6 +89,7 @@ public static String showInputDialog(Window frame, String text, String title, Im @Override public void ancestorAdded(AncestorEvent event) { event.getComponent().requestFocusInWindow(); } + }); int option = JOptionPane.showOptionDialog(frame, inp, title, JOptionPane.OK_CANCEL_OPTION, diff --git a/src/main/java/net/mcreator/ui/views/AnimationMakerView.java b/src/main/java/net/mcreator/ui/views/AnimationMakerView.java index 7fa96d34f79..38e9ce68d9d 100644 --- a/src/main/java/net/mcreator/ui/views/AnimationMakerView.java +++ b/src/main/java/net/mcreator/ui/views/AnimationMakerView.java @@ -32,6 +32,7 @@ import net.mcreator.ui.dialogs.file.FileDialogs; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.GifUtil; import net.mcreator.util.StringUtils; @@ -117,7 +118,7 @@ public AnimationMakerView(final MCreator fra) { JPanel preview2 = new JPanel(new GridLayout()) { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g2d.setColor(Theme.current().getAltBackgroundColor()); g2d.setComposite(AlphaComposite.SrcOver.derive(0.45f)); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); @@ -138,9 +139,9 @@ public AnimationMakerView(final MCreator fra) { JComponent stp = PanelUtils.centerInPanel(settings); stp.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("dialog.animation_maker.settings"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); editor.add("Center", PanelUtils.centerAndEastElement(preview2, stp)); @@ -217,9 +218,9 @@ public AnimationMakerView(final MCreator fra) { JPanel timelinee = new JPanel(new BorderLayout()); timelinee.setOpaque(false); timelinee.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("dialog.animation_maker.animation_timeline"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JToolBar timelinebar = new JToolBar(); timelinebar.setFloatable(false); @@ -258,35 +259,33 @@ public AnimationMakerView(final MCreator fra) { try { ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("dialog.animation_maker.gif_reading")); - dial.addProgress(p1); + dial.addProgressUnit(p1); BufferedImage[] frames = GifUtil.readAnimatedGif(frame); if (frames.length > 0) - p1.ok(); + p1.markStateOk(); else { - p1.err(); - dial.hideAll(); + p1.markStateError(); + dial.hideDialog(); JOptionPane.showMessageDialog(fra, L10N.t("dialog.animation_maker.gif_format_unsupported"), L10N.t("common.warning"), JOptionPane.ERROR_MESSAGE); return; } - dial.refreshDisplay(); int frameCount = frames.length; ProgressDialog.ProgressUnit p2 = new ProgressDialog.ProgressUnit( L10N.t("dialog.animation_maker.gif_processing")); - dial.addProgress(p2); + dial.addProgressUnit(p2); for (int i = 0; i < frameCount; i++) { int finalI = i; SwingUtilities.invokeLater( () -> timelinevector.addElement(new AnimationFrame(frames[finalI]))); p2.setPercent((int) (((float) i / (float) frameCount) * 100.0f)); } - p2.ok(); - dial.refreshDisplay(); - dial.hideAll(); + p2.markStateOk(); + dial.hideDialog(); } catch (Exception e) { - dial.hideAll(); + dial.hideDialog(); LOG.error(e.getMessage(), e); } @@ -329,8 +328,8 @@ public AnimationMakerView(final MCreator fra) { JButton save = L10N.button("dialog.animation_maker.save_animated_texture"); save.setMargin(new Insets(1, 40, 1, 40)); - save.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - save.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + save.setBackground(Theme.current().getInterfaceAccentColor()); + save.setForeground(Theme.current().getSecondAltBackgroundColor()); save.setFocusPainted(false); add("North", PanelUtils.maxMargin( PanelUtils.westAndEastElement(new JEmptyBox(0, 0), PanelUtils.centerInPanelPadding(save, 0, 0)), 5, @@ -421,7 +420,7 @@ private void addFramesFromTemplate() { types.addActionListener(al); cbox.addActionListener(al); - colors.setColorSelectedListener(al); + colors.addColorSelectedListener(al); od.add("North", lab1); od.add("Center", centerPanel); @@ -504,7 +503,7 @@ private void addFramesFromStrip() { preview.setIcon(new ImageIcon(ImageUtils.resize(tilImgUtl.get().getIcon(1, 1).getImage(), 128))); }; - colors.setColorSelectedListener(al); + colors.addColorSelectedListener(al); cbox.addActionListener(al); cbox2.addActionListener(al); diff --git a/src/main/java/net/mcreator/ui/views/ArmorImageMakerView.java b/src/main/java/net/mcreator/ui/views/ArmorImageMakerView.java index aa941f8371a..c6f10040741 100644 --- a/src/main/java/net/mcreator/ui/views/ArmorImageMakerView.java +++ b/src/main/java/net/mcreator/ui/views/ArmorImageMakerView.java @@ -26,6 +26,7 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.init.ArmorMakerTexturesCache; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.image.EmptyIcon; import net.mcreator.util.image.ImageUtils; @@ -70,15 +71,15 @@ public ArmorImageMakerView(final MCreator fra) { controls.add(L10N.label("dialog.armor_image_maker.saturation_lightness_lock")); controls.add(type1); - col.setColorSelectedListener(event -> updateARM()); + col.addColorSelectedListener(event -> updateARM()); str.addActionListener(e -> updateARM()); type1.addActionListener(e -> updateARM()); JPanel wrap = PanelUtils.centerInPanelPadding(controls, 10, 10); wrap.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("dialog.armor_image_maker.properties"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); add("Center", wrap); @@ -95,18 +96,18 @@ public ArmorImageMakerView(final MCreator fra) { JPanel spom = PanelUtils.totalCenterInPanel(spo); spom.setOpaque(true); - spom.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + spom.setBackground(Theme.current().getAltBackgroundColor()); spom.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"), 1), + BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("dialog.armor_image_maker.preview"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); add("South", spom); JButton save = L10N.button("dialog.armor_image_maker.save"); save.setMargin(new Insets(1, 40, 1, 40)); - save.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - save.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + save.setBackground(Theme.current().getInterfaceAccentColor()); + save.setForeground(Theme.current().getSecondAltBackgroundColor()); save.setFocusPainted(false); add("North", PanelUtils.maxMargin( PanelUtils.westAndEastElement(new JEmptyBox(0, 0), PanelUtils.centerInPanelPadding(save, 0, 0)), 5, @@ -127,7 +128,7 @@ public ArmorImageMakerView(final MCreator fra) { }); type1.setSelected(true); - col.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + col.setColor(Theme.current().getInterfaceAccentColor()); updateARM(); } diff --git a/src/main/java/net/mcreator/ui/views/NBTEditorView.java b/src/main/java/net/mcreator/ui/views/NBTEditorView.java index 4646e9e51a4..a4980cd90bf 100644 --- a/src/main/java/net/mcreator/ui/views/NBTEditorView.java +++ b/src/main/java/net/mcreator/ui/views/NBTEditorView.java @@ -21,6 +21,7 @@ import net.mcreator.ui.MCreator; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.laf.SlickTreeUI; +import net.mcreator.ui.laf.themes.Theme; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jnbt.CompoundTag; @@ -131,11 +132,11 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean setText(nbtTagNode.toString()); if (sel) { - a.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - a.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + a.setForeground(Theme.current().getBackgroundColor()); + a.setBackground(Theme.current().getInterfaceAccentColor()); } else { - a.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - a.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + a.setBackground(Theme.current().getBackgroundColor()); + a.setForeground(Theme.current().getForegroundColor()); } return a; } diff --git a/src/main/java/net/mcreator/ui/views/editor/image/ImageMakerView.java b/src/main/java/net/mcreator/ui/views/editor/image/ImageMakerView.java index b2b9918ba20..faf80b069a8 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/ImageMakerView.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/ImageMakerView.java @@ -29,11 +29,14 @@ import net.mcreator.ui.dialogs.MCreatorDialog; import net.mcreator.ui.dialogs.imageeditor.FromTemplateDialog; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.validators.RegistryNameValidator; import net.mcreator.ui.views.ViewBase; import net.mcreator.ui.views.editor.image.canvas.Canvas; import net.mcreator.ui.views.editor.image.canvas.CanvasRenderer; +import net.mcreator.ui.views.editor.image.canvas.SelectedBorder; +import net.mcreator.ui.views.editor.image.clipboard.ClipboardManager; import net.mcreator.ui.views.editor.image.layer.Layer; import net.mcreator.ui.views.editor.image.layer.LayerPanel; import net.mcreator.ui.views.editor.image.tool.ToolPanel; @@ -59,34 +62,36 @@ import java.util.concurrent.Executors; public class ImageMakerView extends ViewBase implements MouseListener, MouseMotionListener { - private static final Logger LOG = LogManager.getLogger("Image Maker View"); + private static final int FPS = 4; - private String name = L10N.t("tab.image_maker"); + public static final ExecutorService toolExecutor = Executors.newSingleThreadExecutor(); - private Canvas canvas; private final CanvasRenderer canvasRenderer; private final JZoomPane zoomPane; private final JSplitPane leftSplitPane; private final JSplitPane rightSplitPane; private final ToolPanel toolPanel; private final LayerPanel layerPanel; - private final VersionManager versionManager; - + private final ClipboardManager clipboardManager; private final JLabel imageInfo = new JLabel(""); public final JButton save; - public static final ExecutorService toolExecutor = Executors.newSingleThreadExecutor(); + private String name = L10N.t("tab.image_maker"); private MCreatorTabs.Tab tab; private File image; + private Canvas canvas; + private Cursor currentCursor = null; + private boolean active; private boolean canEdit = true; public ImageMakerView(MCreator f) { super(f); versionManager = new VersionManager(this); + clipboardManager = new ClipboardManager(this); JPanel controls = new JPanel(new BorderLayout()); controls.setBorder(new EmptyBorder(2, 3, 2, 3)); @@ -95,23 +100,23 @@ public ImageMakerView(MCreator f) { save = L10N.button("dialog.image_maker.save"); save.setMargin(new Insets(1, 40, 1, 40)); - save.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - save.setForeground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + save.setBackground(Theme.current().getInterfaceAccentColor()); + save.setForeground(Theme.current().getSecondAltBackgroundColor()); save.setFocusPainted(false); - imageInfo.setForeground(((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")).darker()); + imageInfo.setForeground((Theme.current().getAltForegroundColor()).darker()); imageInfo.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 5)); JButton saveNew = L10N.button("dialog.image_maker.save_as_new"); saveNew.setMargin(new Insets(1, 40, 1, 40)); - saveNew.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - saveNew.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + saveNew.setBackground(Theme.current().getAltBackgroundColor()); + saveNew.setForeground(Theme.current().getForegroundColor()); saveNew.setFocusPainted(false); JButton template = L10N.button("dialog.image_maker.generate_from_template"); template.setMargin(new Insets(1, 40, 1, 40)); - template.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - template.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + template.setBackground(Theme.current().getAltBackgroundColor()); + template.setForeground(Theme.current().getForegroundColor()); template.setFocusPainted(false); save.addActionListener(event -> save()); @@ -125,7 +130,7 @@ public ImageMakerView(MCreator f) { rightSplitPane = new JSplitPane() { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g2d.setColor(Theme.current().getAltBackgroundColor()); g2d.setComposite(AlphaComposite.SrcOver.derive(0.45f)); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); @@ -161,11 +166,29 @@ public ImageMakerView(MCreator f) { controls.add(leftControls, BorderLayout.WEST); controls.add(rightControls, BorderLayout.EAST); - controls.setBorder( - BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.BLACK_ACCENT"))); + controls.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Theme.current().getSecondAltBackgroundColor())); add(controls, BorderLayout.NORTH); add(leftSplitPane, BorderLayout.CENTER); + + Thread animator = new Thread(() -> { + active = true; + while (active) { + if (canvas != null && canvas.getSelection() != null + && canvas.getSelection().getEditing() != SelectedBorder.NONE) { + canvasRenderer.addPhaseToOutline((float) Math.PI / FPS / 2); + repaint(); + } + + try { + Thread.sleep(1000 / FPS); + } catch (InterruptedException e) { + LOG.error(e.getMessage(), e); + } + } + }, "ImageMakerAnimationRenderer"); + + animator.start(); } public void openInEditMode(File image) { @@ -219,7 +242,7 @@ public void save() { //reload image in java cache new ImageIcon(image.getAbsolutePath()).getImage().flush(); - mcreator.mv.reloadElements(); + mcreator.mv.reloadElementsInCurrentTab(); refreshTab(); } else { @@ -325,6 +348,8 @@ public static boolean isFileSupported(String fileName) { else this.tab = new MCreatorTabs.Tab(this); + tab.setTabClosedListener(tab -> this.active = false); + MCreatorTabs.Tab existing = mcreator.mcreatorTabs.showTabOrGetExisting(this.tab); if (existing == null) { mcreator.mcreatorTabs.addTab(this.tab); @@ -362,14 +387,12 @@ public void refreshTab() { } @Override public void mousePressed(MouseEvent e) { - zoomPane.setCursor(toolPanel.getCurrentTool().getUsingCursor()); - canvasRenderer.setCursor(toolPanel.getCurrentTool().getUsingCursor()); + setEditorCursor(toolPanel.getCurrentTool().getUsingCursor()); toolExecutor.execute(() -> toolPanel.getCurrentTool().mousePressed(e)); } @Override public void mouseReleased(MouseEvent e) { - zoomPane.setCursor(toolPanel.getCurrentTool().getCursor()); - canvasRenderer.setCursor(toolPanel.getCurrentTool().getCursor()); + setEditorCursor(toolPanel.getCurrentTool().getCursor()); toolExecutor.execute(() -> toolPanel.getCurrentTool().mouseReleased(e)); } @@ -382,17 +405,30 @@ public void refreshTab() { } @Override public void mouseDragged(MouseEvent e) { - zoomPane.setCursor(toolPanel.getCurrentTool().getUsingCursor()); - canvasRenderer.setCursor(toolPanel.getCurrentTool().getUsingCursor()); + setEditorCursor(toolPanel.getCurrentTool().getUsingCursor()); toolExecutor.execute(() -> toolPanel.getCurrentTool().mouseDragged(e)); updateInfoBar(e.getX(), e.getY()); } @Override public void mouseMoved(MouseEvent e) { + if (toolPanel.getCurrentTool().getHoverCursor() != null) { + setEditorCursor(toolPanel.getCurrentTool().getHoverCursor()); + } toolExecutor.execute(() -> toolPanel.getCurrentTool().mouseMoved(e)); updateInfoBar(e.getX(), e.getY()); } + public void setEditorCursor(Cursor cursor) { + if (currentCursor == cursor) + return; + currentCursor = cursor; + + SwingUtilities.invokeLater(() -> { + zoomPane.getZoomport().setCursor(cursor); + canvasRenderer.setCursor(cursor); + }); + } + private void updateInfoBar(int x, int y) { String title; if (image != null) @@ -409,6 +445,10 @@ public VersionManager getVersionManager() { return versionManager; } + public ClipboardManager getClipboardManager() { + return clipboardManager; + } + public ToolPanel getToolPanel() { return toolPanel; } diff --git a/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorClearSelectionAction.java b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorClearSelectionAction.java new file mode 100644 index 00000000000..4999ba94235 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorClearSelectionAction.java @@ -0,0 +1,40 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.action; + +import net.mcreator.ui.action.ActionRegistry; +import net.mcreator.ui.action.BasicAction; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.views.editor.image.ImageMakerView; + +import javax.swing.*; + +public class ImageEditorClearSelectionAction extends BasicAction { + public ImageEditorClearSelectionAction(ActionRegistry actionRegistry) { + super(actionRegistry, L10N.t("action.image_editor.selection.clear"), actionEvent -> { + JPanel pan = actionRegistry.getMCreator().mcreatorTabs.getCurrentTab().getContent(); + if (pan instanceof ImageMakerView imageMakerView) { + imageMakerView.getCanvas().getSelection().clear(); + } + }); + setTooltip(L10N.t("action.image_editor.selection.clear.tooltip")); + actionRegistry.getMCreator().mcreatorTabs.addTabShownListener( + tab -> setEnabled(tab.getContent() instanceof ImageMakerView)); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCopyAction.java b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCopyAction.java new file mode 100644 index 00000000000..aa1344adb3b --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCopyAction.java @@ -0,0 +1,40 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.action; + +import net.mcreator.ui.action.ActionRegistry; +import net.mcreator.ui.action.BasicAction; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.views.editor.image.ImageMakerView; + +import javax.swing.*; + +public class ImageEditorCopyAction extends BasicAction { + public ImageEditorCopyAction(ActionRegistry actionRegistry) { + super(actionRegistry, L10N.t("action.image_editor.copy"), actionEvent -> { + JPanel pan = actionRegistry.getMCreator().mcreatorTabs.getCurrentTab().getContent(); + if (pan instanceof ImageMakerView imageMakerView) { + imageMakerView.getClipboardManager().copy(); + } + }); + setTooltip(L10N.t("action.image_editor.copy.tooltip")); + actionRegistry.getMCreator().mcreatorTabs.addTabShownListener( + tab -> setEnabled(tab.getContent() instanceof ImageMakerView)); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCopyAllAction.java b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCopyAllAction.java new file mode 100644 index 00000000000..1302f71d990 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCopyAllAction.java @@ -0,0 +1,40 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.action; + +import net.mcreator.ui.action.ActionRegistry; +import net.mcreator.ui.action.BasicAction; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.views.editor.image.ImageMakerView; + +import javax.swing.*; + +public class ImageEditorCopyAllAction extends BasicAction { + public ImageEditorCopyAllAction(ActionRegistry actionRegistry) { + super(actionRegistry, L10N.t("action.image_editor.copy_all"), actionEvent -> { + JPanel pan = actionRegistry.getMCreator().mcreatorTabs.getCurrentTab().getContent(); + if (pan instanceof ImageMakerView imageMakerView) { + imageMakerView.getClipboardManager().copyAll(); + } + }); + setTooltip(L10N.t("action.image_editor.copy_all.tooltip")); + actionRegistry.getMCreator().mcreatorTabs.addTabShownListener( + tab -> setEnabled(tab.getContent() instanceof ImageMakerView)); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCutAction.java b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCutAction.java new file mode 100644 index 00000000000..4f5a54e6045 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorCutAction.java @@ -0,0 +1,40 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.action; + +import net.mcreator.ui.action.ActionRegistry; +import net.mcreator.ui.action.BasicAction; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.views.editor.image.ImageMakerView; + +import javax.swing.*; + +public class ImageEditorCutAction extends BasicAction { + public ImageEditorCutAction(ActionRegistry actionRegistry) { + super(actionRegistry, L10N.t("action.image_editor.cut"), actionEvent -> { + JPanel pan = actionRegistry.getMCreator().mcreatorTabs.getCurrentTab().getContent(); + if (pan instanceof ImageMakerView imageMakerView) { + imageMakerView.getClipboardManager().cut(); + } + }); + setTooltip(L10N.t("action.image_editor.cut.tooltip")); + actionRegistry.getMCreator().mcreatorTabs.addTabShownListener( + tab -> setEnabled(tab.getContent() instanceof ImageMakerView)); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorDeleteAction.java b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorDeleteAction.java new file mode 100644 index 00000000000..bd7c6e5a4de --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorDeleteAction.java @@ -0,0 +1,40 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.action; + +import net.mcreator.ui.action.ActionRegistry; +import net.mcreator.ui.action.BasicAction; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.views.editor.image.ImageMakerView; + +import javax.swing.*; + +public class ImageEditorDeleteAction extends BasicAction { + public ImageEditorDeleteAction(ActionRegistry actionRegistry) { + super(actionRegistry, L10N.t("action.image_editor.delete"), actionEvent -> { + JPanel pan = actionRegistry.getMCreator().mcreatorTabs.getCurrentTab().getContent(); + if (pan instanceof ImageMakerView imageMakerView) { + imageMakerView.getLayerPanel().selected().deleteSelection(); + } + }); + setTooltip(L10N.t("action.image_editor.delete.tooltip")); + actionRegistry.getMCreator().mcreatorTabs.addTabShownListener( + tab -> setEnabled(tab.getContent() instanceof ImageMakerView)); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorPasteAction.java b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorPasteAction.java new file mode 100644 index 00000000000..440d12e3b08 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/action/ImageEditorPasteAction.java @@ -0,0 +1,40 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.action; + +import net.mcreator.ui.action.ActionRegistry; +import net.mcreator.ui.action.BasicAction; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.views.editor.image.ImageMakerView; + +import javax.swing.*; + +public class ImageEditorPasteAction extends BasicAction { + public ImageEditorPasteAction(ActionRegistry actionRegistry) { + super(actionRegistry, L10N.t("action.image_editor.paste"), actionEvent -> { + JPanel pan = actionRegistry.getMCreator().mcreatorTabs.getCurrentTab().getContent(); + if (pan instanceof ImageMakerView imageMakerView) { + imageMakerView.getClipboardManager().paste(); + } + }); + setTooltip(L10N.t("action.image_editor.paste.tooltip")); + actionRegistry.getMCreator().mcreatorTabs.addTabShownListener( + tab -> setEnabled(tab.getContent() instanceof ImageMakerView)); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/canvas/Canvas.java b/src/main/java/net/mcreator/ui/views/editor/image/canvas/Canvas.java index 53c8d63e5e8..c571c5522ef 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/canvas/Canvas.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/canvas/Canvas.java @@ -22,9 +22,7 @@ import net.mcreator.ui.views.editor.image.layer.LayerPanel; import net.mcreator.ui.views.editor.image.tool.tools.Shape; import net.mcreator.ui.views.editor.image.versioning.VersionManager; -import net.mcreator.ui.views.editor.image.versioning.change.Addition; -import net.mcreator.ui.views.editor.image.versioning.change.CanvasResize; -import net.mcreator.ui.views.editor.image.versioning.change.Removal; +import net.mcreator.ui.views.editor.image.versioning.change.*; import net.mcreator.util.ArrayListListModel; import java.awt.*; @@ -36,8 +34,8 @@ public class Canvas extends ArrayListListModel { private int height; private final LayerPanel layerPanel; private final VersionManager versionManager; + private final Selection selection; private CanvasRenderer canvasRenderer; - private boolean drawPreview; private MouseEvent previewEvent; private Shape shape; @@ -45,12 +43,14 @@ public class Canvas extends ArrayListListModel { private Image previewImage; private boolean drawCustomPreview; + private Layer floatingLayer; public Canvas(int width, int height, LayerPanel layerPanel, VersionManager versionManager) { this.width = width; this.height = height; this.layerPanel = layerPanel; this.versionManager = versionManager; + this.selection = new Selection(this); layerPanel.setCanvas(this); layerPanel.updateSelection(); } @@ -62,21 +62,75 @@ public boolean add(Layer layer, UUID group) { Addition addition = new Addition(this, layer); addition.setUUID(group); versionManager.addRevision(addition); + floatingCheck(layer); return success; } + public boolean add(Layer layer, int index, UUID group) { + super.add(index, layer); + layer.setCanvas(this); + layerPanel.select(indexOf(layer)); + Addition addition = new Addition(this, layer); + addition.setUUID(group); + versionManager.addRevision(addition); + floatingCheck(layer); + return true; + } + @Override public boolean add(Layer layer) { - boolean success = super.add(layer); + super.add(0, layer); layer.setCanvas(this); layerPanel.select(indexOf(layer)); versionManager.addRevision(new Addition(this, layer)); - return success; + floatingCheck(layer); + return true; + } + + public boolean addOnTop(Layer layer, UUID group) { + super.add(layerPanel.selectedID(), layer); + layer.setCanvas(this); + layerPanel.select(indexOf(layer)); + Addition addition = new Addition(this, layer); + addition.setUUID(group); + versionManager.addRevision(addition); + floatingCheck(layer); + return true; + } + + public boolean addOnTop(Layer layer) { + return addOnTop(layer, null); } @Override public void add(int index, Layer element) { super.add(index, element); element.setCanvas(this); layerPanel.select(indexOf(element)); + floatingCheck(element); + } + + /** + * Checks if the layer is floating and updates the floating layer. + * + * @param layer the layer to check + */ + public void floatingCheck(Layer layer) { + if (layer == null || layer.isPasted()) { + floatingLayer = layer; + layerPanel.updateFloatingLayer(); + } + } + + public Layer getFloatingLayer() { + return floatingLayer; + } + + /** + * Returns the selection. + * + * @return the selection + */ + public Selection getSelection() { + return selection; } @Override public Layer set(int index, Layer layer) { @@ -92,19 +146,45 @@ public Layer remove(int index, UUID group) { layerPanel.select(index - 1); removal.setUUID(group); versionManager.addRevision(removal); + floatingCheck(null); + versionManager.refreshPreview(); + return removed; + } + + public Layer remove(int index, UUID group, int toSelect) { + Removal removal = new Removal(this, get(index), layerPanel, toSelect); + Layer removed = super.remove(index); + layerPanel.select(toSelect); + removal.setUUID(group); + versionManager.addRevision(removal); + floatingCheck(null); + versionManager.refreshPreview(); return removed; } @Override public Layer remove(int index) { versionManager.addRevision(new Removal(this, get(index))); Layer removed = super.remove(index); - layerPanel.select(index - 1); + layerPanel.select(Math.max(index - 1, 0)); + floatingCheck(null); + versionManager.refreshPreview(); + return removed; + } + + @Override public boolean remove(Object o) { + int index = indexOf(o); + versionManager.addRevision(new Removal(this, (Layer) o)); + boolean removed = super.remove(o); + layerPanel.select(Math.max(index - 1, 0)); + floatingCheck(null); + versionManager.refreshPreview(); return removed; } public Layer removeNR(int index) { Layer removed = super.remove(index); layerPanel.select(index - 1); + floatingCheck(null); return removed; } @@ -122,12 +202,42 @@ public Layer removeNR(int index) { return md; } + public boolean mergeDown(int selectedID) { + UUID uuid = UUID.randomUUID(); + return mergeDown(selectedID, uuid); + } + + public boolean mergeDown(int selectedID, UUID uuid) { + get(selectedID + 1).mergeOnTop(get(selectedID)); + + Modification adt = new Modification(this, get(selectedID + 1)); + adt.setUUID(uuid); + versionManager.addRevision(adt); + + boolean success = remove(selectedID, uuid, selectedID) != null; + layerPanel.select(selectedID); + return success; + } + + public boolean consolidateFloating() { + Consolidation consolidation = new Consolidation(this, floatingLayer); + floatingLayer.setPasted(false); + consolidation.setAfter(floatingLayer); + versionManager.addRevision(consolidation); + return true; + } + + public boolean mergeSelectedDown() { + return mergeDown(layerPanel.selectedID()); + } + public void update(Layer layer) { update(indexOf(layer)); } public void update(int index) { fireContentsChanged(this, index, index); + canvasRenderer.repaint(); } public int getWidth() { @@ -201,6 +311,14 @@ public Layer selected() { return layerPanel.selected(); } + public LayerPanel getLayerPanel() { + return layerPanel; + } + + public VersionManager getVersionManager() { + return versionManager; + } + public void setSize(int width, int height, UUID group) { CanvasResize canvasResize = new CanvasResize(this, layerPanel.selected(), width, height); canvasResize.setUUID(group); diff --git a/src/main/java/net/mcreator/ui/views/editor/image/canvas/CanvasRenderer.java b/src/main/java/net/mcreator/ui/views/editor/image/canvas/CanvasRenderer.java index 1c2a0589fc1..f45f8f37428 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/canvas/CanvasRenderer.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/canvas/CanvasRenderer.java @@ -21,6 +21,7 @@ import net.mcreator.ui.component.zoompane.IZoomable; import net.mcreator.ui.component.zoompane.JZoomPane; import net.mcreator.ui.component.zoompane.ZoomedMouseEvent; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.views.editor.image.ImageMakerView; import net.mcreator.ui.views.editor.image.layer.Layer; import net.mcreator.ui.views.editor.image.tool.tools.Shape; @@ -33,14 +34,19 @@ import java.awt.image.BufferedImage; public class CanvasRenderer extends JComponent implements IZoomable { + private static final int CHECKERBOARD_TILE_SIZE = 8; private static final int OUTLINE_LINE_LENGTH = CHECKERBOARD_TILE_SIZE / 2; + private static final Color FLOATING_LAYER_OUTLINE = new Color(0x8D7DD2); + private Canvas canvas; private JZoomPane jZoomPane; private TexturePaint checkerboard; - private Stroke dashed; + private Stroke dashed, dashed_animated, shadow; + private float stroke_phase = 0; + private Color shadowColor; public CanvasRenderer(ImageMakerView imageMakerView) { rebuildCheckerboardPattern(); @@ -110,7 +116,7 @@ public void setCanvas(Canvas canvas) { int scaledSize = (int) Math.round(size * zoom); Graphics2D graphics2D = (Graphics2D) g; - graphics2D.setColor((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + graphics2D.setColor(Theme.current().getAltForegroundColor()); Stroke original = graphics2D.getStroke(); Stroke dashed = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[] { 3 }, @@ -150,30 +156,46 @@ public void setCanvas(Canvas canvas) { int x, y; int width = image.getWidth(null), height = image.getHeight(null); + int centerX = width / 2, centerY = height / 2; if (width % 2.0 == 1) { - x = (int) Math.round((mouseEvent.getX() - width / 2) * zoom); + x = (int) ((mouseEvent.getX() - centerX) * zoom); } else { - x = (int) Math.round(Math.floor((mex / zoom + 0.5 - width / 2)) * zoom); - + x = (int) Math.round(Math.floor((mex / zoom + 0.5 - centerX)) * zoom); } if (height % 2.0 == 1) { - y = (int) Math.round((mouseEvent.getY() - height / 2) * zoom); + y = (int) ((mouseEvent.getY() - centerY) * zoom); } else { - y = (int) Math.round(Math.floor((mey / zoom + 0.5 - height / 2)) * zoom); + y = (int) Math.round(Math.floor((mey / zoom + 0.5 - centerY)) * zoom); } g.drawImage(image, x, y, (int) Math.round(width * zoom), (int) Math.round(height * zoom), null); } } + double zoom = jZoomPane.getZoomport().getZoom(); Layer outline = canvas.selected(); if (outline != null) { - double zoom = jZoomPane.getZoomport().getZoom(); - int x = (int) Math.round(outline.getX() * zoom), y = (int) Math.round(outline.getY() * zoom); - int width = (int) Math.round(outline.getWidth() * zoom), height = (int) Math.round( - outline.getHeight() * zoom); - drawOutline((Graphics2D) g, x, y, width, height); + int x = (int) Math.round(outline.getX() * zoom); + int y = (int) Math.round(outline.getY() * zoom); + + int width = (int) Math.round(outline.getWidth() * zoom); + int height = (int) Math.round(outline.getHeight() * zoom); + + drawOutline((Graphics2D) g, x, y, width, height, outline.isPasted(), false); + } + + Selection selection = canvas.getSelection(); + if (selection.getEditing() != SelectedBorder.NONE) { + selection.drawHandles((Graphics2D) g); + + int x = (int) Math.round(selection.getLeft() * zoom); + int y = (int) Math.round(selection.getTop() * zoom); + + int width = (int) Math.round((selection.getWidth()) * zoom); + int height = (int) Math.round((selection.getHeight()) * zoom); + + drawOutline((Graphics2D) g, x, y, width, height, true, true); } } @@ -189,15 +211,21 @@ public void setCanvas(Canvas canvas) { return canvas.getHeight(); } + public double getZoom() { + return jZoomPane.getZoomport().getZoom(); + } + public BufferedImage render() { BufferedImage layerStack = new BufferedImage(canvas.getWidth(), canvas.getHeight(), BufferedImage.TYPE_INT_ARGB); if (canvas != null) { Graphics2D layerStackGraphics2D = layerStack.createGraphics(); - for (Layer layer : canvas) + for (int i = canvas.size() - 1; i >= 0; i--) { + Layer layer = canvas.get(i); if (layer.isVisible()) { layerStackGraphics2D.drawImage(layer.mergeOverlay(false), null, layer.getX(), layer.getY()); } + } layerStackGraphics2D.dispose(); } return layerStack; @@ -221,8 +249,26 @@ public static TexturePaint buildCheckerboardPattern() { } private void rebuildOutlineStroke() { + // Stroke building dashed = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, - new float[] { OUTLINE_LINE_LENGTH }, 0); + new float[] { OUTLINE_LINE_LENGTH, OUTLINE_LINE_LENGTH }, 0); + dashed_animated = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, + new float[] { OUTLINE_LINE_LENGTH, OUTLINE_LINE_LENGTH }, stroke_phase); + shadow = new BasicStroke(3); + + // Builds the semi-transparent color for the outline shadow + Color baseColor = Theme.current().getSecondAltBackgroundColor(); + shadowColor = new Color(baseColor.getRed(), baseColor.getGreen(), baseColor.getBlue(), 120); + } + + public void addPhaseToOutline(float phase) { + float sp = (stroke_phase - phase / ((float) Math.PI) * OUTLINE_LINE_LENGTH) % (OUTLINE_LINE_LENGTH * 2); + if (sp < 0) + stroke_phase = OUTLINE_LINE_LENGTH * 2 + sp; + else + stroke_phase = sp; + dashed_animated = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, + new float[] { OUTLINE_LINE_LENGTH, OUTLINE_LINE_LENGTH }, stroke_phase); } private void drawCheckerboard(Graphics2D graphics2D, Dimension d) { @@ -230,12 +276,40 @@ private void drawCheckerboard(Graphics2D graphics2D, Dimension d) { graphics2D.fillRect(0, 0, (int) d.getWidth(), (int) d.getHeight()); } - private void drawOutline(Graphics2D graphics2D, int x, int y, int width, int height) { - graphics2D.setPaint((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + private void drawOutline(Graphics2D graphics2D, int x, int y, int width, int height, boolean pasted, + boolean animated) { + // Save the previous stroke to avoid unwanted changes + Stroke prevStroke = graphics2D.getStroke(); + + // The base for the outline + graphics2D.setPaint(Theme.current().getSecondAltBackgroundColor()); graphics2D.drawRect(x, y, width - 1, height - 1); - graphics2D.setPaint((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - graphics2D.setStroke(dashed); + + // Shadow after the black stroke to avoid shifting strokes + // Shouldn't be visible since it's black on black + graphics2D.setStroke(shadow); + graphics2D.setPaint(shadowColor); graphics2D.drawRect(x, y, width - 1, height - 1); + + // If pasted, the outline is brighter + if (pasted && animated) + graphics2D.setPaint(Theme.current().getAltForegroundColor()); + else if (pasted) + graphics2D.setPaint(FLOATING_LAYER_OUTLINE); + else + graphics2D.setPaint(Theme.current().getInterfaceAccentColor()); + + // Use the animated stroke if the flag is set + if (animated) + graphics2D.setStroke(dashed_animated); + else + graphics2D.setStroke(dashed); + + // Draw the outline + graphics2D.drawRect(x, y, width - 1, height - 1); + + // Return the previous stroke to avoid unwanted changes + graphics2D.setStroke(prevStroke); } public void recalculateBounds() { diff --git a/src/main/java/net/mcreator/ui/views/editor/image/canvas/SelectedBorder.java b/src/main/java/net/mcreator/ui/views/editor/image/canvas/SelectedBorder.java new file mode 100644 index 00000000000..509115b2c58 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/canvas/SelectedBorder.java @@ -0,0 +1,24 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.canvas; + +public enum SelectedBorder { + NONE, ANY, TOP, BOTTOM, LEFT, RIGHT, TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/canvas/Selection.java b/src/main/java/net/mcreator/ui/views/editor/image/canvas/Selection.java new file mode 100644 index 00000000000..6bcc46bdc49 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/canvas/Selection.java @@ -0,0 +1,383 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.canvas; + +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.views.editor.image.layer.Layer; + +import java.awt.*; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; + +/** + * Class used to transfer selection data between objects + */ +public class Selection { + private final Canvas canvas; + private final Point first, second; + private final int handleSize = 10; + private final Stroke handleStroke = new BasicStroke(handleSize); + private SelectedBorder editing = SelectedBorder.NONE; + private boolean editStarted = false; + + public Selection(Canvas canvas) { + this(canvas, 0, 0, 0, 0); + } + + public Selection(Canvas canvas, int xFirst, int yFirst, int xSecond, int ySecond) { + this.canvas = canvas; + this.first = new Point(xFirst, yFirst); + this.second = new Point(xSecond, ySecond); + } + + public SelectedBorder getEditing() { + return editing; + } + + /** + * Returns the editing state of the selection if no cursor was hovering over it. + * This way we have a way to store the selection visibility state without another variable. + * + * @return editing visibility state of the selection + */ + public SelectedBorder getVisibilityState() { + return editing == SelectedBorder.NONE ? SelectedBorder.NONE : SelectedBorder.ANY; + } + + public void setEditing(SelectedBorder editing) { + this.editing = editing; + } + + public int getHandleSize() { + return handleSize; + } + + public Stroke getHandleStroke() { + return handleStroke; + } + + public int getLeft() { + return Math.min(first.x, second.x); + } + + public Point getLeftPoint() { + return first.x == getLeft() ? first : second; + } + + public int getRight() { + return Math.max(first.x, second.x); + } + + public Point getRightPoint() { + return first.x == getRight() ? first : second; + } + + public int getTop() { + return Math.min(first.y, second.y); + } + + public Point getTopPoint() { + return first.y == getTop() ? first : second; + } + + public int getBottom() { + return Math.max(first.y, second.y); + } + + public Point getBottomPoint() { + return first.y == getBottom() ? first : second; + } + + public int getWidth() { + return Math.abs(first.x - second.x); + } + + public int getHeight() { + return Math.abs(first.y - second.y); + } + + public boolean hasSurface() { + return getWidth() > 0 && getHeight() > 0; + } + + public Point getFirst() { + return first; + } + + public Point getSecond() { + return second; + } + + public void setEditStarted(boolean editStarted) { + this.editStarted = editStarted; + } + + public boolean isEditStarted() { + return editStarted; + } + + public void clear() { + first.x = 0; + first.y = 0; + second.x = 0; + second.y = 0; + setEditing(SelectedBorder.NONE); + } + + public Shape getLayerMask(Layer layer) { + if (hasSurface() && getEditing() != SelectedBorder.NONE) { + int xStart = getLeft() - layer.getX(); + int yStart = getTop() - layer.getY(); + + int xStartLimited = Math.max(0, xStart); + int yStartLimited = Math.max(0, yStart); + + int widthLimited = Math.min(layer.getWidth() - xStartLimited, getWidth()); + int heightLimited = Math.min(layer.getHeight() - yStartLimited, getHeight()); + + return new Rectangle2D.Float(xStartLimited, yStartLimited, widthLimited, heightLimited); + } + return null; + } + + public boolean isInside(Shape shape, int x, int y) { + return shape == null || shape.contains(x, y); + } + + public BufferedImage cropCanvas(BufferedImage canvasRender) { + return cropAndExtend(canvasRender, 0, 0); + } + + public BufferedImage cropLayer(BufferedImage layer, int xOffset, int yOffset) { + return cropAndExtend(layer, xOffset, yOffset); + } + + /** + * Crops the image to the selection and extends it to the selection size if the + * selection extends out of the image borders. + * + * @param image image to crop + * @param xOffset x offset of the image (the layer's offset) + * @param yOffset y offset of the image (the layer's offset) + * @return cropped image + */ + private BufferedImage cropAndExtend(BufferedImage image, int xOffset, int yOffset) { + if (hasSurface() && getEditing() != SelectedBorder.NONE) { + BufferedImage newImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); + Graphics2D g2d = newImage.createGraphics(); + int xImage = getLeft() - xOffset; + int yImage = getTop() - yOffset; + + int xLimited = Math.max(0, xImage); + int yLimited = Math.max(0, yImage); + + int xLimOffset = Math.min(0, xImage); + int yLimOffset = Math.min(0, yImage); + + int widthLimited = Math.min(image.getWidth() - xLimited, getWidth()); + int heightLimited = Math.min(image.getHeight() - yLimited, getHeight()); + + if (xLimited >= image.getWidth() || yLimited >= image.getHeight() || widthLimited <= 0 + || heightLimited <= 0) { + g2d.dispose(); + return newImage; + } + + BufferedImage croppedImage = image.getSubimage(xLimited, yLimited, widthLimited, heightLimited); + + g2d.drawImage(croppedImage, -xLimOffset, -yLimOffset, null); + g2d.dispose(); + return newImage; + } + return image; + } + + /** + * Draws the selection handles depending on the current state of the selection. + * + * @param g2d Graphics2D object to draw on + */ + public void drawHandles(Graphics2D g2d) { + if (!isEditStarted()) { + // Save the previous stroke to avoid unwanted changes + Stroke prevStroke = g2d.getStroke(); + + Color baseColor = Theme.current().getForegroundColor(); + + Color strokeColor = new Color(baseColor.getRed(), baseColor.getGreen(), baseColor.getBlue(), 120); + Color strokeColorHighlighted = new Color(baseColor.getRed(), baseColor.getGreen(), baseColor.getBlue(), + 100); + + g2d.setPaint(strokeColor); + + int handleSize = getHandleSize(); + + double zoom = canvas.getCanvasRenderer().getZoom(); + int x_left = (int) Math.round(getLeft() * zoom); + int y_top = (int) Math.round(getTop() * zoom); + int x_right = (int) Math.round(getRight() * zoom); + int y_bottom = (int) Math.round(getBottom() * zoom); + + // Render the corners + if (cornersVisible()) { + // Add highlight to the selected corner + switch (editing) { + case TOP_LEFT: { + g2d.setPaint(strokeColorHighlighted); + g2d.fillRect(x_left - handleSize / 2, y_top - handleSize / 2, handleSize, handleSize); + g2d.setPaint(strokeColor); + break; + } + case BOTTOM_LEFT: { + g2d.setPaint(strokeColorHighlighted); + g2d.fillRect(x_left - handleSize / 2, y_bottom - handleSize / 2, handleSize, handleSize); + g2d.setPaint(strokeColor); + break; + } + case TOP_RIGHT: { + g2d.setPaint(strokeColorHighlighted); + g2d.fillRect(x_right - handleSize / 2, y_top - handleSize / 2, handleSize, handleSize); + g2d.setPaint(strokeColor); + break; + } + case BOTTOM_RIGHT: { + g2d.setPaint(strokeColorHighlighted); + g2d.fillRect(x_right - handleSize / 2, y_bottom - handleSize / 2, handleSize, handleSize); + g2d.setPaint(strokeColor); + break; + } + } + } + + g2d.setStroke(getHandleStroke()); + + if (horizontalHandlesVisible()) { + // Add highlight to the selected horizontal handle + switch (editing) { + case TOP: { + g2d.setPaint(strokeColorHighlighted); + g2d.drawLine(x_left + 2 * handleSize, y_top, x_right - 2 * handleSize, y_top); + g2d.setPaint(strokeColor); + break; + } + case BOTTOM: { + g2d.setPaint(strokeColorHighlighted); + g2d.drawLine(x_left + 2 * handleSize, y_bottom, x_right - 2 * handleSize, y_bottom); + g2d.setPaint(strokeColor); + break; + } + } + } + + if (verticalHandlesVisible()) { + // Add highlight to the selected vertical handle + switch (editing) { + case LEFT: { + g2d.setPaint(strokeColorHighlighted); + g2d.drawLine(x_left, y_top + 2 * handleSize, x_left, y_bottom - 2 * handleSize); + break; + } + case RIGHT: { + g2d.setPaint(strokeColorHighlighted); + g2d.drawLine(x_right, y_top + 2 * handleSize, x_right, y_bottom - 2 * handleSize); + break; + } + } + } + + // Restore the previous stroke + g2d.setStroke(prevStroke); + } + } + + public boolean verticalHandlesVisible() { + double zoom = canvas.getCanvasRenderer().getZoom(); + int height = (int) Math.round(getHeight() * zoom); + return height > 4 * handleSize; + } + + public boolean horizontalHandlesVisible() { + double zoom = canvas.getCanvasRenderer().getZoom(); + int width = (int) Math.round(getWidth() * zoom); + return width > 4 * handleSize; + } + + public boolean cornersVisible() { + double zoom = canvas.getCanvasRenderer().getZoom(); + int height = (int) Math.round(getHeight() * zoom); + int width = (int) Math.round(getWidth() * zoom); + return height > handleSize && width > handleSize; + } + + public SelectedBorder checkHandles(int x, int y) { + SelectedBorder detected = SelectedBorder.ANY; + + if (editing != SelectedBorder.NONE) { + double zoom = canvas.getCanvasRenderer().getZoom(); + int x_left = (int) Math.round(getLeft() * zoom); + int y_top = (int) Math.round(getTop() * zoom); + int x_right = (int) Math.round(getRight() * zoom); + int y_bottom = (int) Math.round(getBottom() * zoom); + + // Check whether we are hovering over any corners + if (cornersVisible()) { + if (x >= x_left - handleSize / 2 && x <= x_left + handleSize / 2 && y >= y_top - handleSize / 2 + && y <= y_top + handleSize / 2) { + detected = SelectedBorder.TOP_LEFT; + } else if (x >= x_left - handleSize / 2 && x <= x_left + handleSize / 2 + && y >= y_bottom - handleSize / 2 && y <= y_bottom + handleSize / 2) { + detected = SelectedBorder.BOTTOM_LEFT; + } else if (x >= x_right - handleSize / 2 && x <= x_right + handleSize / 2 && y >= y_top - handleSize / 2 + && y <= y_top + handleSize / 2) { + detected = SelectedBorder.TOP_RIGHT; + } else if (x >= x_right - handleSize / 2 && x <= x_right + handleSize / 2 + && y >= y_bottom - handleSize / 2 && y <= y_bottom + handleSize / 2) { + detected = SelectedBorder.BOTTOM_RIGHT; + } + } + + // Check whether we are hovering over any vertical handles + if (detected == SelectedBorder.ANY && verticalHandlesVisible()) { + if (x >= x_left + 1.5 * handleSize && x <= x_right - 1.5 * handleSize && y >= y_top - handleSize / 2 + && y <= y_top + handleSize / 2) { + detected = SelectedBorder.TOP; + } else if (x >= x_left + 1.5 * handleSize && x <= x_right - 1.5 * handleSize + && y >= y_bottom - handleSize / 2 && y <= y_bottom + handleSize / 2) { + detected = SelectedBorder.BOTTOM; + } + } + + // Check whether we are hovering over any horizontal handles + if (detected == SelectedBorder.ANY && horizontalHandlesVisible()) { + if (x >= x_left - handleSize / 2 && x <= x_left + handleSize / 2 && y >= y_top + 1.5 * handleSize + && y <= y_bottom - 1.5 * handleSize) { + detected = SelectedBorder.LEFT; + } else if (x >= x_right - handleSize / 2 && x <= x_right + handleSize / 2 + && y >= y_top + 1.5 * handleSize && y <= y_bottom - 1.5 * handleSize) { + detected = SelectedBorder.RIGHT; + } + } + } + + // Update to the detected state + editing = detected; + return editing; + } +} \ No newline at end of file diff --git a/src/main/java/net/mcreator/ui/views/editor/image/clipboard/ClipboardManager.java b/src/main/java/net/mcreator/ui/views/editor/image/clipboard/ClipboardManager.java new file mode 100644 index 00000000000..1141bc5eab0 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/clipboard/ClipboardManager.java @@ -0,0 +1,114 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.clipboard; + +import net.mcreator.ui.views.editor.image.ImageMakerView; +import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.clipboard.transferables.CanvasTransferable; +import net.mcreator.ui.views.editor.image.clipboard.transferables.LayerTransferable; +import net.mcreator.ui.views.editor.image.layer.Layer; +import net.mcreator.ui.views.editor.image.versioning.change.Modification; + +import java.awt.*; +import java.awt.datatransfer.*; +import java.io.IOException; +import java.util.UUID; + +public class ClipboardManager implements ClipboardOwner { + private final Clipboard clipboard; + private final ImageMakerView imageMakerView; + + public ClipboardManager(ImageMakerView imageMakerView) { + this.imageMakerView = imageMakerView; + clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + } + + public void copy() { + addLayerToClipboard(); + } + + public void copyAll() { + addCanvasToClipboard(); + } + + public void cut() { + addLayerToClipboard(); + Layer selected = imageMakerView.getLayerPanel().selected(); + selected.clearSelection(); + imageMakerView.getVersionManager().addRevision(new Modification(imageMakerView.getCanvas(), selected)); + } + + private void addCanvasToClipboard() { + addLayerToClipboard(new CanvasTransferable(imageMakerView.getCanvas())); + } + + private void addLayerToClipboard() { + Layer selected = imageMakerView.getLayerPanel().selected(); + if (selected != null) + addLayerToClipboard(new LayerTransferable(selected)); + } + + private void addLayerToClipboard(Transferable transferable) { + try { + clipboard.setContents(transferable, this); + } catch (IllegalStateException ignored) { + } + } + + public void paste() { + if (clipboard.isDataFlavorAvailable(DataFlavor.imageFlavor)) { + Transferable clp = clipboard.getContents(this); + if (clp.isDataFlavorSupported(DataFlavor.imageFlavor)) { + try { + Image img = (Image) clp.getTransferData(DataFlavor.imageFlavor); + + Layer layer; + if (clp.isDataFlavorSupported(DataFlavor.stringFlavor)) + layer = new Layer((String) clp.getTransferData(DataFlavor.stringFlavor), img); + else + layer = new Layer("Pasted layer", img); + + layer.setX(imageMakerView.getCanvas().getWidth() / 2 - layer.getWidth() / 2); + layer.setY(imageMakerView.getCanvas().getHeight() / 2 - layer.getHeight() / 2); + layer.setPasted(!imageMakerView.getCanvas().isEmpty()); + + addFloatingLayer(layer); + } catch (UnsupportedFlavorException | IOException e) { + throw new RuntimeException(e); + } + } + } + } + + private void addFloatingLayer(Layer layer) { + if (imageMakerView.getLayerPanel().isFloating()) { + Canvas canvas = imageMakerView.getCanvas(); + UUID uuid = UUID.randomUUID(); + canvas.mergeDown(canvas.indexOf(canvas.getFloatingLayer()), uuid); + canvas.addOnTop(layer, uuid); + } else { + imageMakerView.getCanvas().addOnTop(layer); + } + } + + @Override public void lostOwnership(Clipboard clipboard, Transferable contents) { + // Oh no, anyway? + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/clipboard/transferables/CanvasTransferable.java b/src/main/java/net/mcreator/ui/views/editor/image/clipboard/transferables/CanvasTransferable.java new file mode 100644 index 00000000000..5603cc5bf2b --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/clipboard/transferables/CanvasTransferable.java @@ -0,0 +1,59 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.clipboard.transferables; + +import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.util.image.ImageUtils; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Arrays; + +public class CanvasTransferable implements Transferable { + private final BufferedImage image; + private final DataFlavor[] flavours = new DataFlavor[] { DataFlavor.imageFlavor }; + private final Canvas canvas; + + public CanvasTransferable(Canvas canvas) { + this.canvas = canvas; + image = canvas.getSelection().cropCanvas(canvas.getCanvasRenderer().render()); + } + + public BufferedImage getRender() { + return ImageUtils.deepCopy(image); + } + + @Override public DataFlavor[] getTransferDataFlavors() { + return flavours; + } + + @Override public boolean isDataFlavorSupported(DataFlavor flavor) { + return Arrays.asList(flavours).contains(flavor); + } + + @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { + if (flavor == DataFlavor.imageFlavor) + return image; + throw new UnsupportedFlavorException(flavor); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/clipboard/transferables/LayerTransferable.java b/src/main/java/net/mcreator/ui/views/editor/image/clipboard/transferables/LayerTransferable.java new file mode 100644 index 00000000000..6a773e42197 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/clipboard/transferables/LayerTransferable.java @@ -0,0 +1,62 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.clipboard.transferables; + +import net.mcreator.ui.views.editor.image.layer.Layer; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Arrays; + +public class LayerTransferable implements Transferable { + private final BufferedImage image; + private final Layer layer; + + // Don't include the layer name to improve compatibility with other software + private final DataFlavor[] flavours = new DataFlavor[] { DataFlavor.imageFlavor/*, DataFlavor.stringFlavor */ }; + + public LayerTransferable(Layer layer) { + this.layer = layer.copy(); + image = layer.getCanvas().getSelection().cropLayer(layer.copyImage(), layer.getX(), layer.getY()); + } + + public Layer getLayer() { + return layer.copy(); + } + + @Override public DataFlavor[] getTransferDataFlavors() { + return flavours; + } + + @Override public boolean isDataFlavorSupported(DataFlavor flavor) { + return Arrays.asList(flavours).contains(flavor); + } + + @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { + if (flavor == DataFlavor.imageFlavor) + return image; + //else if (flavor == DataFlavor.stringFlavor) + // return layer.getName(); + throw new UnsupportedFlavorException(flavor); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/layer/Layer.java b/src/main/java/net/mcreator/ui/views/editor/image/layer/Layer.java index 7b9d0789b4e..058c7e500bc 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/layer/Layer.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/layer/Layer.java @@ -19,6 +19,9 @@ package net.mcreator.ui.views.editor.image.layer; import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.SelectedBorder; +import net.mcreator.ui.views.editor.image.canvas.Selection; +import net.mcreator.ui.views.editor.image.versioning.change.Modification; import net.mcreator.util.image.ImageUtils; import java.awt.*; @@ -38,6 +41,8 @@ public class Layer { private boolean renderingMode = false; + private boolean isPasted = false; + public Layer(int width, int height, String name) { this(width, height, 0, 0, name); } @@ -69,6 +74,13 @@ public Layer(int width, int height, int x, int y, String name, Image image) { g.dispose(); } + public Layer(String name, Image image) { + this(image.getWidth(null), image.getHeight(null), 0, 0, name); + Graphics2D g = createGraphics(); + g.drawImage(image, 0, 0, null); + g.dispose(); + } + public int getX() { return x; } @@ -134,6 +146,14 @@ public void setVisible(boolean visible) { canvas.update(this); } + public boolean isPasted() { + return isPasted; + } + + public void setPasted(boolean isPasted) { + this.isPasted = isPasted; + } + public boolean in(int x, int y) { return (x >= getX() && x < (getX() + getWidth())) && (y >= getY() && y < (getY() + getHeight())); } @@ -179,6 +199,37 @@ private BufferedImage mergeOverlay(boolean apply, boolean eraser) { return temp; } + public void mergeOnTop(Layer topLayer) { + Graphics2D g2d = createGraphics(); + g2d.drawImage(topLayer.getRaster(), topLayer.x - x, topLayer.y - y, null); + g2d.dispose(); + } + + public void clear() { + Graphics2D g2d = createGraphics(); + Composite composite = g2d.getComposite(); + g2d.setComposite(AlphaComposite.Clear); + g2d.fillRect(0, 0, getWidth(), getHeight()); + g2d.setComposite(composite); + g2d.dispose(); + } + + public void clearSelection() { + Selection selection = canvas.getSelection(); + if (selection.hasSurface() && selection.getEditing() != SelectedBorder.NONE) { + Graphics2D g2d = createGraphics(); + Composite composite = g2d.getComposite(); + g2d.setComposite(AlphaComposite.Clear); + int x = selection.getLeft() - getX(); + int y = selection.getTop() - getY(); + g2d.fillRect(x, y, selection.getWidth(), selection.getHeight()); + g2d.setComposite(composite); + g2d.dispose(); + } else { + clear(); + } + } + public BufferedImage getRaster() { return raster; } @@ -282,4 +333,10 @@ public void resize(int width, int height, boolean antialiasing) { else setRaster(ImageUtils.resize(raster, width, height)); } + + public void deleteSelection() { + Layer selected = canvas.getLayerPanel().selected(); + selected.clearSelection(); + canvas.getVersionManager().addRevision(new Modification(canvas, selected)); + } } diff --git a/src/main/java/net/mcreator/ui/views/editor/image/layer/LayerListCellRenderer.java b/src/main/java/net/mcreator/ui/views/editor/image/layer/LayerListCellRenderer.java index 93b8493a8de..283be797837 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/layer/LayerListCellRenderer.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/layer/LayerListCellRenderer.java @@ -19,6 +19,7 @@ package net.mcreator.ui.views.editor.image.layer; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; import javax.swing.*; @@ -31,6 +32,8 @@ public class LayerListCellRenderer extends JPanel implements ListCellRenderer list, Layer layer, int index, boolean isSelected, boolean cellHasFocus) { - name.setText(layer.getName()); + + if (layer.isPasted()) { + name.setForeground(Theme.current().getAltForegroundColor().brighter()); + name.setFont(italic); + name.setText(layer.getName() + " (floating)"); + } else { + name.setForeground(Theme.current().getForegroundColor()); + name.setFont(normal); + name.setText(layer.getName()); + } ImageIcon iconImage = ImageUtils.fit(layer.getRaster(), 32); if (!layer.isVisible()) @@ -59,10 +71,10 @@ public Component getListCellRendererComponent(JList list, Layer if (isSelected) { setOpaque(true); - setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + setBackground(Theme.current().getInterfaceAccentColor()); } else if (cellHasFocus) { setOpaque(true); - setBackground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + setBackground(Theme.current().getAltForegroundColor()); } else setOpaque(false); diff --git a/src/main/java/net/mcreator/ui/views/editor/image/layer/LayerPanel.java b/src/main/java/net/mcreator/ui/views/editor/image/layer/LayerPanel.java index bda5f89efc6..a31acdb93d7 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/layer/LayerPanel.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/layer/LayerPanel.java @@ -40,13 +40,7 @@ public class LayerPanel extends JPanel { private JList layerList; private final JPanel layerPanel = new JPanel(new CardLayout()); - private final JButton add; - private final JButton up; - private final JButton down; - private final JButton editMeta; - private final JButton toggleVisibility; - private final JButton delete; - private final JButton duplicate; + private final JButton add, up, down, editMeta, toggleVisibility, delete, duplicate, mergeDown; private Canvas canvas; private LayerListMode mode; @@ -73,6 +67,7 @@ public LayerPanel(MCreator f, ToolPanel toolPanel, VersionManager versionManager toggleVisibility = new JButton(UIRES.get("18px.visibility")); delete = new JButton(UIRES.get("18px.remove")); duplicate = new JButton(UIRES.get("18px.duplicate")); + mergeDown = new JButton(UIRES.get("18px.merge")); add.setToolTipText(L10N.t("dialog.imageeditor.layer_panel_new_layer")); add.setMargin(new Insets(0, 0, 0, 0)); @@ -112,11 +107,21 @@ public LayerPanel(MCreator f, ToolPanel toolPanel, VersionManager versionManager duplicate.setOpaque(false); duplicate.setBorder(BorderFactory.createEmptyBorder()); + mergeDown.setToolTipText(L10N.t("dialog.imageeditor.layer_panel_merge_layers_down")); + mergeDown.setMargin(new Insets(0, 0, 0, 0)); + mergeDown.setOpaque(false); + mergeDown.setBorder(BorderFactory.createEmptyBorder()); + canEdit(false); add.addActionListener(e -> { - NewLayerDialog dialog = new NewLayerDialog(f, canvas); - dialog.setVisible(true); + if (isFloating()) { + canvas.consolidateFloating(); + updateControls(); + } else { + NewLayerDialog dialog = new NewLayerDialog(f, canvas); + dialog.setVisible(true); + } }); up.addActionListener(e -> { @@ -143,8 +148,10 @@ public LayerPanel(MCreator f, ToolPanel toolPanel, VersionManager versionManager L10N.t("dialog.imageeditor.layer_panel_confirm_layer_deletion_message") + selected(), L10N.t("dialog.imageeditor.layer_panel_confirm_layer_deletion_title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); - if (confirmDialog == 0) + if (confirmDialog == 0) { canvas.remove(selectedID()); + updateControls(); + } }); duplicate.addActionListener(e -> { @@ -152,8 +159,14 @@ public LayerPanel(MCreator f, ToolPanel toolPanel, VersionManager versionManager canvas.add(selected().copy()); }); + mergeDown.addActionListener(e -> { + if (selected() != null) + canvas.mergeDown(selectedID()); + }); + controls.add(add); controls.add(duplicate); + controls.add(mergeDown); controls.add(up); controls.add(down); controls.add(toggleVisibility); @@ -165,8 +178,6 @@ public LayerPanel(MCreator f, ToolPanel toolPanel, VersionManager versionManager layerPanel.add(PanelUtils.totalCenterInPanel(closed), LayerListMode.CLOSED.toString()); layerPanel.add(PanelUtils.totalCenterInPanel(empty), LayerListMode.EMPTY.toString()); - //setOpaque(false); - add(layerPanel, BorderLayout.CENTER); add(controls, BorderLayout.NORTH); } @@ -211,15 +222,24 @@ private void promptRename() { } } - public void setListMode(LayerListMode mode) { + private void setListMode(LayerListMode mode) { if (!(layerList == null && mode == LayerListMode.NORMAL)) this.mode = mode; CardLayout cl = (CardLayout) (layerPanel.getLayout()); cl.show(layerPanel, mode.toString()); } + public void updateFloatingLayer() { + updateControls(); + } + public void select(int selected) { - layerList.setSelectedIndex(selected); + if (selected < 0) + layerList.setSelectedIndex(0); + else if (selected >= canvas.size()) + layerList.setSelectedIndex(canvas.size() - 1); + else + layerList.setSelectedIndex(selected); updateSelection(); } @@ -227,7 +247,14 @@ public int selectedID() { return layerList.getSelectedIndex(); } + public boolean isFloating() { + return canvas.getFloatingLayer() != null && canvas.getFloatingLayer().isPasted(); + } + public Layer selected() { + if (layerList == null) + return null; + int selectedIndex = layerList.getSelectedIndex(); if (selectedIndex == -1) return null; @@ -235,22 +262,34 @@ public Layer selected() { } public void updateSelection() { - updateControls(); Layer selected = selected(); if (selected != null) toolPanel.setLayer(selected); + updateControls(); } - private void updateControls() { + public void updateControls() { if (!canvas.isEmpty()) { setListMode(LayerListMode.NORMAL); if (selectedID() != -1) { - canEdit(true); - down.setEnabled(selectedID() < canvas.size() - 1); - up.setEnabled(selectedID() > 0); + boolean floating = isFloating(); + canEdit(!floating); + down.setEnabled(selectedID() < canvas.size() - 1 && !floating); + up.setEnabled(selectedID() > 0 && !floating); + mergeDown.setEnabled(selectedID() < canvas.size() - 1); + layerList.setEnabled(!floating); + if (floating) { + add.setIcon(UIRES.get("18px.add_new")); + add.setToolTipText(L10N.t("dialog.imageeditor.layer_panel_new_layer.floating")); + delete.setEnabled(true); + } else { + add.setIcon(UIRES.get("18px.add")); + add.setToolTipText(L10N.t("dialog.imageeditor.layer_panel_new_layer")); + } } else { up.setEnabled(false); down.setEnabled(false); + mergeDown.setEnabled(false); canEdit(false); } } else diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/ToolPanel.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/ToolPanel.java index c1a1e031516..2d7d7e3f031 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/ToolPanel.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/ToolPanel.java @@ -130,6 +130,7 @@ private void init() { register(new HSVNoiseTool(canvas, cs, versionManager, frame), filters); register(new MoveTool(canvas, cs, versionManager), constraints); + register(new SelectionTool(canvas, cs, versionManager), constraints); register(new ResizeTool(canvas, cs, versionManager, frame), constraints); register(new ResizeCanvasTool(canvas, cs, versionManager, frame), constraints); diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/action/SelectionToolAction.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/action/SelectionToolAction.java new file mode 100644 index 00000000000..1264ac484f9 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/action/SelectionToolAction.java @@ -0,0 +1,32 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.tool.action; + +import net.mcreator.ui.action.ActionRegistry; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.views.editor.image.tool.tools.SelectionTool; + +public class SelectionToolAction extends ToolChangeAction { + public SelectionToolAction(ActionRegistry actionRegistry) { + super(actionRegistry, L10N.t("dialog.image_maker.tools.types.select"), + L10N.t("dialog.image_maker.tools.types.select_description"), SelectionTool.class); + setIcon(UIRES.get("img_editor.select")); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractDrawingTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractDrawingTool.java new file mode 100644 index 00000000000..ab424df2f04 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractDrawingTool.java @@ -0,0 +1,117 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.tool.tools; + +import net.mcreator.ui.component.zoompane.ZoomedMouseEvent; +import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.Selection; +import net.mcreator.ui.views.editor.image.tool.component.ColorSelector; +import net.mcreator.ui.views.editor.image.versioning.VersionManager; + +import javax.swing.*; +import java.awt.Shape; +import java.awt.*; +import java.awt.geom.Point2D; + +public abstract class AbstractDrawingTool extends AbstractModificationTool { + + protected Point prevPoint = null; + + protected boolean first = true; + protected JCheckBox aliasing; + protected JCheckBox connect; + + public AbstractDrawingTool(String name, String description, ImageIcon icon, Canvas canvas, + ColorSelector colorSelector, VersionManager versionManager) { + super(name, description, icon, canvas, colorSelector, versionManager); + } + + protected abstract void preProcess(ZoomedMouseEvent e); + + @Override public boolean process(ZoomedMouseEvent e) { + preProcess(e); + int sx = e.getX() - layer.getX(), sy = e.getY() - layer.getY(); + + Selection selection = canvas.getSelection(); + Shape validArea = selection.getLayerMask(layer); + + Graphics2D graphics2D = layer.getOverlay().createGraphics(); + Shape previousShape = graphics2D.getClip(); + + if (validArea != null) + graphics2D.setClip(validArea); + + if (aliasing.isSelected()) + graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + draw(graphics2D, sx, sy, e.getRawX(), e.getRawY(), e.getZoom()); + if (((connect.isSelected() && !first) || e.isShiftDown()) && prevPoint != null) { + int minx = Math.min(sx, prevPoint.x); + int maxx = Math.max(sx, prevPoint.x); + int miny = Math.min(sy, prevPoint.y); + int maxy = Math.max(sy, prevPoint.y); + + if (sx == prevPoint.getX()) + for (int y = miny + 1; y < maxy; y++) + draw(graphics2D, sx, y, e.getRawX(), y * e.getZoom(), e.getZoom()); + else if (sy == prevPoint.getY()) + for (int x = minx + 1; x < maxx; x++) + draw(graphics2D, x, sy, x * e.getZoom(), e.getRawY(), e.getZoom()); + else { + double part = 1; + double distance = Point2D.distance(prevPoint.x, prevPoint.y, sx, sy); + for (double t = 0; t < 1; t += 1 / (distance * part)) { + int x = (int) Math.round((1 - t) * prevPoint.x + t * sx); + int y = (int) Math.round((1 - t) * prevPoint.y + t * sy); + draw(graphics2D, x, y, x * e.getZoom(), y * e.getZoom(), e.getZoom()); + } + } + } + first = false; + prevPoint = new Point(e.getX() - layer.getX(), e.getY() - layer.getY()); + + if (validArea != null) + graphics2D.setClip(previousShape); + + graphics2D.dispose(); + + canvas.getCanvasRenderer().repaint(); + return true; + } + + protected abstract Dimension getShapeDimension(); + + protected abstract void doDrawing(Graphics2D g, int x, int y, Dimension d); + + private void draw(Graphics2D g, int tx, int ty, double rx, double ry, double zoom) { + int x, y; + Dimension d = getShapeDimension(); + + if (d.width % 2 == 1) + x = tx - d.width / 2; + else + x = (int) (rx / zoom + 0.5) - d.width / 2; + + if (d.height % 2 == 1) + y = ty - d.height / 2; + else + y = (int) (ry / zoom + 0.5) - d.height / 2; + + doDrawing(g, x, y, d); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractModificationTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractModificationTool.java index 59d4a9666b9..971fb96869c 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractModificationTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractModificationTool.java @@ -41,10 +41,10 @@ public AbstractModificationTool(String name, String description, ImageIcon icon, } @Override public void mouseReleased(MouseEvent e) { - if (SwingUtilities.isLeftMouseButton(e)) { + if (SwingUtilities.isLeftMouseButton(e) && (startSuccess || processSuccess)) { layer.mergeOverlay(); versionManager.addRevision(new Modification(canvas, layer)); - super.mouseReleased(e); } + super.mouseReleased(e); } } diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractTool.java index 21d510ab3ca..9d7fc78a363 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/AbstractTool.java @@ -50,6 +50,7 @@ public abstract class AbstractTool implements MouseListener, MouseMotionListener protected VersionManager versionManager; private JToggleButton toolPanelButton; + protected boolean startSuccess = false, processSuccess = false; public AbstractTool(String name, String description, ImageIcon icon, Canvas canvas, ColorSelector colorSelector, VersionManager versionManager) { @@ -121,7 +122,11 @@ public Cursor getCursor() { } public Cursor getUsingCursor() { - return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); + return Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); + } + + public Cursor getHoverCursor() { + return null; } public void setLayerPanel(LayerPanel layerPanel) { @@ -130,17 +135,19 @@ public void setLayerPanel(LayerPanel layerPanel) { public abstract boolean process(ZoomedMouseEvent mouseEvent); - private void startProcess(MouseEvent e) { + private boolean startProcess(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e)) { - process((ZoomedMouseEvent) e); + return process((ZoomedMouseEvent) e); } + return false; } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { - startProcess(e); + startSuccess = startProcess(e); + processSuccess = startSuccess; } @Override public void mouseReleased(MouseEvent e) { @@ -155,7 +162,7 @@ private void startProcess(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { - startProcess(e); + processSuccess |= startProcess(e); } @Override public void mouseMoved(MouseEvent e) { diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/DrawingTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/DrawingTool.java index e55a3100b5e..f8b9613051c 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/DrawingTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/DrawingTool.java @@ -32,20 +32,12 @@ import java.awt.*; import java.awt.event.MouseEvent; import java.awt.geom.Ellipse2D; -import java.awt.geom.Point2D; -public class DrawingTool extends AbstractModificationTool { +public class DrawingTool extends AbstractDrawingTool { private int size = 1; private Shape shape = Shape.SQUARE; - private Point prevPoint = null; - - private final JCheckBox aliasing; - private final JCheckBox connect; - - private boolean first = true; - public DrawingTool(Canvas canvas, ColorSelector colorSelector, LayerPanel layerPanel, String name, String description, ImageIcon icon, VersionManager versionManager) { super(name, description, icon, canvas, colorSelector, versionManager); @@ -71,41 +63,9 @@ public DrawingTool(Canvas canvas, ColorSelector colorSelector, LayerPanel layerP settingsPanel.add(connect); } - @Override public boolean process(ZoomedMouseEvent e) { + @Override protected void preProcess(ZoomedMouseEvent e) { layer.setOverlayOpacity(colorSelector.getForegroundColor().getAlpha() / 255.0); canvas.updateCustomPreview(e, shape, size); - int sx = e.getX() - layer.getX(), sy = e.getY() - layer.getY(); - Graphics2D graphics2D = layer.getOverlay().createGraphics(); - if (aliasing.isSelected()) - graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - draw(graphics2D, sx, sy, e.getRawX(), e.getRawY(), e.getZoom()); - if (((connect.isSelected() && !first) || e.isShiftDown()) && prevPoint != null) { - int minx = Math.min(sx, prevPoint.x); - int maxx = Math.max(sx, prevPoint.x); - int miny = Math.min(sy, prevPoint.y); - int maxy = Math.max(sy, prevPoint.y); - - if (sx == prevPoint.getX()) - for (int y = miny + 1; y < maxy; y++) - draw(graphics2D, sx, y, e.getRawX(), y * e.getZoom(), e.getZoom()); - else if (sy == prevPoint.getY()) - for (int x = minx + 1; x < maxx; x++) - draw(graphics2D, x, sy, x * e.getZoom(), e.getRawY(), e.getZoom()); - else { - double part = 1; - double distance = Point2D.distance(prevPoint.x, prevPoint.y, sx, sy); - for (double t = 0; t < 1; t += 1 / (distance * part)) { - int x = (int) Math.round((1 - t) * prevPoint.x + t * sx); - int y = (int) Math.round((1 - t) * prevPoint.y + t * sy); - draw(graphics2D, x, y, x * e.getZoom(), y * e.getZoom(), e.getZoom()); - } - } - } - first = false; - prevPoint = new Point(e.getX() - layer.getX(), e.getY() - layer.getY()); - graphics2D.dispose(); - canvas.getCanvasRenderer().repaint(); - return true; } @Override public void mouseReleased(MouseEvent e) { @@ -113,15 +73,11 @@ else if (sy == prevPoint.getY()) first = true; } - private void draw(Graphics2D g, int tx, int ty, double rx, double ry, double zoom) { - int x, y; - if (size % 2 == 1) { - x = tx - size / 2; - y = ty - size / 2; - } else { - x = Math.round((int) (rx / zoom + 0.5)) - size / 2; - y = Math.round((int) (ry / zoom + 0.5)) - size / 2; - } + @Override protected Dimension getShapeDimension() { + return new Dimension(size, size); + } + + @Override protected void doDrawing(Graphics2D g, int x, int y, Dimension d) { g.setColor(colorSelector.getForegroundColor()); switch (shape) { case CIRCLE: diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/FloodFillTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/FloodFillTool.java index da5ee6d4b75..673102fec70 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/FloodFillTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/FloodFillTool.java @@ -22,10 +22,12 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.Selection; import net.mcreator.ui.views.editor.image.tool.component.ColorSelector; import net.mcreator.ui.views.editor.image.tool.component.JSlidingSpinner; import net.mcreator.ui.views.editor.image.versioning.VersionManager; +import java.awt.Shape; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; @@ -47,7 +49,10 @@ public FloodFillTool(Canvas canvas, ColorSelector colorSelector, VersionManager } @Override public boolean process(ZoomedMouseEvent e) { - if (layer.in(e.getX(), e.getY())) { + Selection selection = canvas.getSelection(); + Shape validArea = selection.getLayerMask(layer); + + if (layer.in(e.getX(), e.getY()) && selection.isInside(validArea, e.getX(), e.getY())) { layer.setOverlayOpacity(colorSelector.getForegroundColor().getAlpha() / 255.0); fillArea(layer.getRaster(), layer.getOverlay(), e.getX() - layer.getX(), e.getY() - layer.getY(), colorSelector.getForegroundColor()); @@ -80,6 +85,8 @@ private boolean inThreshold(Color primary, Color secondary) { public void fillArea(BufferedImage image, BufferedImage overlay, int x, int y, Color fill) { Graphics2D g2d = overlay.createGraphics(); + Selection selection = canvas.getSelection(); + Shape validArea = selection.getLayerMask(layer); g2d.setColor(fill); int originalint = image.getRGB(x, y); { @@ -98,28 +105,32 @@ public void fillArea(BufferedImage image, BufferedImage overlay, int x, int y, C y = stack[index][1]; index--; - if ((x > 0) && toPaint(image.getRGB(x - 1, y), overlay.getRGB(x - 1, y), originalint)) { + if ((x > 0) && toPaint(image.getRGB(x - 1, y), overlay.getRGB(x - 1, y), originalint) + && selection.isInside(validArea, x - 1, y)) { g2d.fillRect(x - 1, y, 1, 1); index++; stack[index][0] = x - 1; stack[index][1] = y; } - if ((x < maxX) && toPaint(image.getRGB(x + 1, y), overlay.getRGB(x + 1, y), originalint)) { + if ((x < maxX) && toPaint(image.getRGB(x + 1, y), overlay.getRGB(x + 1, y), originalint) + && selection.isInside(validArea, x + 1, y)) { g2d.fillRect(x + 1, y, 1, 1); index++; stack[index][0] = x + 1; stack[index][1] = y; } - if ((y > 0) && toPaint(image.getRGB(x, y - 1), overlay.getRGB(x, y - 1), originalint)) { + if ((y > 0) && toPaint(image.getRGB(x, y - 1), overlay.getRGB(x, y - 1), originalint) + && selection.isInside(validArea, x, y - 1)) { g2d.fillRect(x, y - 1, 1, 1); index++; stack[index][0] = x; stack[index][1] = y - 1; } - if ((y < maxY) && toPaint(image.getRGB(x, y + 1), overlay.getRGB(x, y + 1), originalint)) { + if ((y < maxY) && toPaint(image.getRGB(x, y + 1), overlay.getRGB(x, y + 1), originalint) + && selection.isInside(validArea, x, y + 1)) { g2d.fillRect(x, y + 1, 1, 1); index++; stack[index][0] = x; diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/LineTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/LineTool.java index 3bb43396c2d..8bdd268002d 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/LineTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/LineTool.java @@ -23,12 +23,14 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.Selection; import net.mcreator.ui.views.editor.image.layer.LayerPanel; import net.mcreator.ui.views.editor.image.tool.component.ColorSelector; import net.mcreator.ui.views.editor.image.tool.component.JSlidingSpinner; import net.mcreator.ui.views.editor.image.versioning.VersionManager; import javax.swing.*; +import java.awt.Shape; import java.awt.*; import java.awt.event.MouseEvent; @@ -63,7 +65,16 @@ public LineTool(Canvas canvas, ColorSelector colorSelector, LayerPanel layerPane @Override public boolean process(ZoomedMouseEvent e) { layer.resetOverlay(); layer.setOverlayOpacity(colorSelector.getForegroundColor().getAlpha() / 255.0); + + Selection selection = canvas.getSelection(); + Shape validArea = selection.getLayerMask(layer); + Graphics2D g = layer.getOverlay().createGraphics(); + Shape previousShape = g.getClip(); + + if (validArea != null) + g.setClip(validArea); + g.setColor(colorSelector.getForegroundColor()); if (aliasing.isSelected()) g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); @@ -71,7 +82,11 @@ public LineTool(Canvas canvas, ColorSelector colorSelector, LayerPanel layerPane firstPoint = new Point(e.getX() - layer.getX(), e.getY() - layer.getY()); g.setStroke(new BasicStroke(size)); g.drawLine(firstPoint.x, firstPoint.y, e.getX() - layer.getX(), e.getY() - layer.getY()); + + if (validArea != null) + g.setClip(previousShape); g.dispose(); + canvas.getCanvasRenderer().repaint(); return true; } diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/MoveTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/MoveTool.java index bffeefc4005..7c144abf9a0 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/MoveTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/MoveTool.java @@ -34,6 +34,8 @@ public class MoveTool extends AbstractTool { private Point prev = null; private Relocation relocation; + private boolean canMove = false; + public MoveTool(Canvas canvas, ColorSelector colorSelector, VersionManager versionManager) { super(L10N.t("dialog.image_maker.tools.types.move"), L10N.t("dialog.image_maker.tools.types.move_description"), UIRES.get("img_editor.move"), canvas, colorSelector, versionManager); @@ -59,15 +61,38 @@ public MoveTool(Canvas canvas, ColorSelector colorSelector, VersionManager versi prev = e.getPoint(); original = new Point(layer.getX(), layer.getY()); relocation = new Relocation(canvas, layer); - versionManager.addRevision(relocation); } } @Override public void mouseReleased(MouseEvent e) { prev = null; - if (original.x != layer.getX() && original.y != layer.getY()) { + if (layer.in(e.getX(), e.getY()) && original.x != layer.getX() && original.y != layer.getY()) { relocation.setAfter(layer); + versionManager.addRevision(relocation); } + super.mouseReleased(e); } + + @Override public void mouseClicked(MouseEvent e) { + if (layer.isPasted() && !layer.in(e.getX(), e.getY())) + canvas.mergeSelectedDown(); + + super.mouseClicked(e); + } + + @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + canMove = layer.in(e.getX(), e.getY()); + } + + @Override public Cursor getCursor() { + return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR); + } + + @Override public Cursor getHoverCursor() { + if (canMove) + return Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR); + return getCursor(); + } } diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ResizeCanvasTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ResizeCanvasTool.java index 246ffdcce85..8e58b589a6f 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ResizeCanvasTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ResizeCanvasTool.java @@ -28,6 +28,7 @@ import net.mcreator.ui.views.editor.image.versioning.VersionManager; import javax.swing.*; +import java.awt.*; import java.awt.event.MouseEvent; public class ResizeCanvasTool extends AbstractTool { @@ -51,4 +52,8 @@ public ResizeCanvasTool(Canvas canvas, ColorSelector colorSelector, VersionManag @Override public void mouseDragged(MouseEvent e) { } + + @Override public Cursor getCursor() { + return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR); + } } diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ResizeTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ResizeTool.java index aa7d4eea5cb..fba0fb13147 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ResizeTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ResizeTool.java @@ -28,6 +28,7 @@ import net.mcreator.ui.views.editor.image.versioning.VersionManager; import javax.swing.*; +import java.awt.*; import java.awt.event.MouseEvent; public class ResizeTool extends AbstractTool { @@ -50,4 +51,8 @@ public ResizeTool(Canvas canvas, ColorSelector colorSelector, VersionManager ver @Override public void mouseDragged(MouseEvent e) { } + + @Override public Cursor getCursor() { + return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR); + } } diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/SelectionTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/SelectionTool.java new file mode 100644 index 00000000000..35670b3cf18 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/SelectionTool.java @@ -0,0 +1,190 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.tool.tools; + +import net.mcreator.ui.component.zoompane.ZoomedMouseEvent; +import net.mcreator.ui.init.L10N; +import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.SelectedBorder; +import net.mcreator.ui.views.editor.image.canvas.Selection; +import net.mcreator.ui.views.editor.image.tool.component.ColorSelector; +import net.mcreator.ui.views.editor.image.tool.tools.event.ToolActivationEvent; +import net.mcreator.ui.views.editor.image.versioning.VersionManager; +import net.mcreator.ui.views.editor.image.versioning.change.SelectionChange; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; + +public class SelectionTool extends AbstractTool { + private Cursor usingCursor = null; + private boolean first = true; + private SelectedBorder editingBorder = SelectedBorder.NONE, lastBorder = SelectedBorder.NONE; + private Point x = null, y = null; + + SelectionChange change = null; + + public SelectionTool(Canvas canvas, ColorSelector colorSelector, VersionManager versionManager) { + super(L10N.t("dialog.image_maker.tools.types.select"), + L10N.t("dialog.image_maker.tools.types.select_description"), UIRES.get("img_editor.select"), canvas, + colorSelector, versionManager); + noSettings(true); + } + + @Override public boolean process(ZoomedMouseEvent e) { + if (SwingUtilities.isLeftMouseButton(e)) { + Selection selection = canvas.getSelection(); + switch (editingBorder) { + case ANY, NONE -> { + if (first) { + selection.setEditing(SelectedBorder.ANY); + selection.getFirst().x = (int) Math.round(e.getPreciseX()); + selection.getFirst().y = (int) Math.round(e.getPreciseY()); + first = false; + } + selection.getSecond().x = (int) Math.round(e.getPreciseX()); + selection.getSecond().y = (int) Math.round(e.getPreciseY()); + } + case TOP_LEFT, TOP_RIGHT, BOTTOM_RIGHT, BOTTOM_LEFT -> { + x.x = (int) Math.round(e.getPreciseX()); + y.y = (int) Math.round(e.getPreciseY()); + } + case TOP, BOTTOM -> y.y = (int) Math.round(e.getPreciseY()); + case LEFT, RIGHT -> x.x = (int) Math.round(e.getPreciseX()); + } + return true; + } + return false; + } + + @Override public void mousePressed(MouseEvent e) { + if (SwingUtilities.isLeftMouseButton(e)) { + change = new SelectionChange(canvas, layer); + Selection selection = canvas.getSelection(); + + selection.setEditStarted(true); + editingBorder = selection.getEditing(); + + switch (editingBorder) { + case TOP_LEFT -> { + x = selection.getLeftPoint(); + y = selection.getTopPoint(); + } + case TOP -> { + x = null; + y = selection.getTopPoint(); + } + case TOP_RIGHT -> { + x = selection.getRightPoint(); + y = selection.getTopPoint(); + } + case RIGHT -> { + x = selection.getRightPoint(); + y = null; + } + case BOTTOM_RIGHT -> { + x = selection.getRightPoint(); + y = selection.getBottomPoint(); + } + case BOTTOM -> { + x = null; + y = selection.getBottomPoint(); + } + case BOTTOM_LEFT -> { + x = selection.getLeftPoint(); + y = selection.getBottomPoint(); + } + case LEFT -> { + x = selection.getLeftPoint(); + y = null; + } + } + } + super.mousePressed(e); + } + + @Override public void mouseReleased(MouseEvent e) { + if (SwingUtilities.isLeftMouseButton(e)) { + Selection selection = canvas.getSelection(); + + if (selection.hasSurface()) + selection.setEditing(SelectedBorder.ANY); + else { + selection.setEditing(SelectedBorder.NONE); + } + + first = true; + selection.setEditStarted(false); + + if (change != null) { + change.setAfter(); + if (change.isChanged()) + versionManager.addRevision(change); + } + } + super.mouseReleased(e); + } + + @Override public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + if (SwingUtilities.isLeftMouseButton(e)) { + Selection selection = canvas.getSelection(); + + ZoomedMouseEvent zme = (ZoomedMouseEvent) e; + + SelectedBorder border = selection.checkHandles((int) zme.getRawX(), (int) zme.getRawY()); + if (border != SelectedBorder.ANY) { + selection.setEditing(SelectedBorder.NONE); + } + } + } + + @Override public void mouseMoved(MouseEvent e) { + ZoomedMouseEvent event = (ZoomedMouseEvent) e; + SelectedBorder border = canvas.getSelection().checkHandles((int) event.getRawX(), (int) event.getRawY()); + + // change the cursor based on which border we are floating above if different from the previous one + if (border != lastBorder) { + switch (border) { + case TOP_LEFT, BOTTOM_RIGHT -> usingCursor = Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR); + case TOP_RIGHT, BOTTOM_LEFT -> usingCursor = Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR); + case TOP, BOTTOM -> usingCursor = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR); + case LEFT, RIGHT -> usingCursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR); + default -> usingCursor = null; + } + lastBorder = border; + } + } + + @Override public Cursor getHoverCursor() { + if (usingCursor != null) + return usingCursor; + return getCursor(); + } + + @Override public Cursor getCursor() { + return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR); + } + + @Override public void toolDisabled(ToolActivationEvent event) { + super.toolDisabled(event); + canvas.getSelection().setEditing(SelectedBorder.ANY); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ShapeTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ShapeTool.java index 5166c97649f..7958e30b9e5 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ShapeTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/ShapeTool.java @@ -22,6 +22,7 @@ import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.Selection; import net.mcreator.ui.views.editor.image.layer.LayerPanel; import net.mcreator.ui.views.editor.image.tool.component.ColorSelector; import net.mcreator.ui.views.editor.image.tool.component.JTitledComponentWrapper; @@ -58,13 +59,26 @@ public ShapeTool(Canvas canvas, ColorSelector colorSelector, LayerPanel layerPan @Override public boolean process(ZoomedMouseEvent e) { layer.resetOverlay(); layer.setOverlayOpacity(colorSelector.getForegroundColor().getAlpha() / 255.0); + + Selection selection = canvas.getSelection(); + java.awt.Shape validArea = selection.getLayerMask(layer); + Graphics2D graphics2D = layer.getOverlay().createGraphics(); + java.awt.Shape previousShape = graphics2D.getClip(); + + if (validArea != null) + graphics2D.setClip(validArea); + graphics2D.setColor(colorSelector.getForegroundColor()); if (aliasing.isSelected()) graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); if (firstPoint == null) firstPoint = new Point(e.getX() - layer.getX(), e.getY() - layer.getY()); draw(graphics2D, firstPoint.x, firstPoint.y, e.getX() - layer.getX(), e.getY() - layer.getY()); + + if (validArea != null) + graphics2D.setClip(previousShape); + graphics2D.dispose(); canvas.getCanvasRenderer().repaint(); return true; diff --git a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/StampTool.java b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/StampTool.java index ff40b7f44d6..3de621ab3d8 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/StampTool.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/tool/tools/StampTool.java @@ -37,20 +37,14 @@ import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; -import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Comparator; import java.util.List; -public class StampTool extends AbstractModificationTool { +public class StampTool extends AbstractDrawingTool { private double saturation = 1; - - private Point prevPoint = null; - - private final JCheckBox aliasing; - private final JCheckBox connect; private final JCheckBox colorize; private final JCheckBox colorType; @@ -59,8 +53,6 @@ public class StampTool extends AbstractModificationTool { private ResourcePointer selection; - private boolean first = true; - public StampTool(Canvas canvas, ColorSelector colorSelector, LayerPanel layerPanel, VersionManager versionManager, MCreator window) { super(L10N.t("dialog.image_maker.tools.types.stamp"), @@ -115,41 +107,9 @@ public StampTool(Canvas canvas, ColorSelector colorSelector, LayerPanel layerPan settingsPanel.add(connect); } - @Override public boolean process(ZoomedMouseEvent e) { + @Override protected void preProcess(ZoomedMouseEvent e) { canvas.enableCustomPreview(false); layer.setOverlayOpacity(colorSelector.getForegroundColor().getAlpha() / 255.0); - int sx = e.getX() - layer.getX(), sy = e.getY() - layer.getY(); - Graphics2D graphics2D = layer.getOverlay().createGraphics(); - if (aliasing.isSelected()) - graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - draw(graphics2D, sx, sy, e.getRawX(), e.getRawY(), e.getZoom()); - if (((connect.isSelected() && !first) || e.isShiftDown()) && prevPoint != null) { - int minx = Math.min(sx, prevPoint.x); - int maxx = Math.max(sx, prevPoint.x); - int miny = Math.min(sy, prevPoint.y); - int maxy = Math.max(sy, prevPoint.y); - - if (sx == prevPoint.getX()) - for (int y = miny + 1; y < maxy; y++) - draw(graphics2D, sx, y, e.getRawX(), y * e.getZoom(), e.getZoom()); - else if (sy == prevPoint.getY()) - for (int x = minx + 1; x < maxx; x++) - draw(graphics2D, x, sy, x * e.getZoom(), e.getRawY(), e.getZoom()); - else { - double part = 1; - double distance = Point2D.distance(prevPoint.x, prevPoint.y, sx, sy); - for (double t = 0; t < 1; t += 1 / (distance * part)) { - int x = (int) Math.round((1 - t) * prevPoint.x + t * sx); - int y = (int) Math.round((1 - t) * prevPoint.y + t * sy); - draw(graphics2D, x, y, x * e.getZoom(), y * e.getZoom(), e.getZoom()); - } - } - } - first = false; - prevPoint = new Point(e.getX() - layer.getX(), e.getY() - layer.getY()); - graphics2D.dispose(); - canvas.getCanvasRenderer().repaint(); - return true; } @Override public void mouseReleased(MouseEvent e) { @@ -159,21 +119,12 @@ else if (sy == prevPoint.getY()) first = true; } - private void draw(Graphics2D g, int tx, int ty, double rx, double ry, double zoom) { - int x, y; - int width = (int) Math.round(this.width.getValue()), height = (int) Math.round(this.height.getValue()); - - if (width % 2.0 == 1) - x = tx - width / 2; - else - x = Math.round((int) (rx / zoom + 0.5)) - width / 2; - - if (height % 2.0 == 1) - y = ty - height / 2; - else - y = Math.round((int) (ry / zoom + 0.5)) - height / 2; + @Override protected Dimension getShapeDimension() { + return new Dimension((int) Math.round(this.width.getValue()), (int) Math.round(this.height.getValue())); + } - g.drawImage(getImage(), x, y, width, height, null); + @Override protected void doDrawing(Graphics2D g, int x, int y, Dimension d) { + g.drawImage(getImage(), x, y, d.width, d.height, null); } @Override public void mouseEntered(MouseEvent e) { diff --git a/src/main/java/net/mcreator/ui/views/editor/image/versioning/VersionManager.java b/src/main/java/net/mcreator/ui/views/editor/image/versioning/VersionManager.java index 46c8bf777ce..97b51bd6998 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/versioning/VersionManager.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/versioning/VersionManager.java @@ -66,11 +66,16 @@ public void addRevision(Change change) { linkChanges(change); changes.add(change); + + refreshPreview(); + + revisionListener.revisionChanged(); + } + + public void refreshPreview() { imageMakerView.refreshTab(); if (layerPanel != null) layerPanel.repaintList(); - - revisionListener.revisionChanged(); } private void linkChanges(Change change) { diff --git a/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/Consolidation.java b/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/Consolidation.java new file mode 100644 index 00000000000..486e2ff2ea9 --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/Consolidation.java @@ -0,0 +1,57 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2020 Pylo and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.versioning.change; + +import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.layer.Layer; + +/** + * When a floating layer changes into a solid layer (by pressing the purple + button in the layer list). + */ +public class Consolidation extends MultiStateChange { + private boolean newState; + private final boolean prevState; + + public Consolidation(Canvas canvas, Layer layer) { + super(canvas, layer); + this.prevState = layer.isPasted(); + } + + @Override public void setAfter(Layer after) { + this.newState = layer.isPasted(); + } + + @Override public void apply() { + layer.setPasted(newState); + updatePastedStates(); + } + + @Override public void revert() { + layer.setPasted(prevState); + updatePastedStates(); + } + + /** + * Updates controls after paste state change. + */ + private void updatePastedStates() { + canvas.floatingCheck(layer); + canvas.getLayerPanel().updateControls(); + } +} diff --git a/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/Removal.java b/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/Removal.java index 7490754b19a..362060c671b 100644 --- a/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/Removal.java +++ b/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/Removal.java @@ -20,15 +20,27 @@ import net.mcreator.ui.views.editor.image.canvas.Canvas; import net.mcreator.ui.views.editor.image.layer.Layer; +import net.mcreator.ui.views.editor.image.layer.LayerPanel; public class Removal extends Addition { + private LayerPanel layerPanel = null; + private int lastIndex = -1; + + public Removal(Canvas canvas, Layer layer, LayerPanel layerPanel, int lastIndex) { + this(canvas, layer); + this.layerPanel = layerPanel; + this.lastIndex = lastIndex; + } + public Removal(Canvas canvas, Layer layer) { super(canvas, layer); } @Override public void apply() { super.revert(); + if (layerPanel != null && lastIndex >= 0) + layerPanel.select(lastIndex); } @Override public void revert() { diff --git a/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/SelectionChange.java b/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/SelectionChange.java new file mode 100644 index 00000000000..7652e40c8ba --- /dev/null +++ b/src/main/java/net/mcreator/ui/views/editor/image/versioning/change/SelectionChange.java @@ -0,0 +1,78 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.views.editor.image.versioning.change; + +import net.mcreator.ui.views.editor.image.canvas.Canvas; +import net.mcreator.ui.views.editor.image.canvas.SelectedBorder; +import net.mcreator.ui.views.editor.image.canvas.Selection; +import net.mcreator.ui.views.editor.image.layer.Layer; + +import java.awt.*; + +public class SelectionChange extends Change { + private final Selection selection; + + // State before the changes + private final Point firstBefore, secondBefore; + private final SelectedBorder editingBefore; + + // State after the changes + private Point firstAfter, secondAfter; + private SelectedBorder editingAfter; + + public SelectionChange(Canvas canvas, Layer layer) { + super(canvas, layer); + selection = canvas.getSelection(); + + firstBefore = selection.getFirst().getLocation(); + secondBefore = selection.getSecond().getLocation(); + + editingBefore = selection.getVisibilityState(); + } + + @Override public void apply() { + selection.getFirst().setLocation(firstAfter); + selection.getSecond().setLocation(secondAfter); + + selection.setEditing(editingAfter); + + selection.setEditStarted(false); + } + + @Override public void revert() { + selection.getFirst().setLocation(firstBefore); + selection.getSecond().setLocation(secondBefore); + + selection.setEditing(editingBefore); + + selection.setEditStarted(false); + } + + public void setAfter() { + firstAfter = selection.getFirst().getLocation(); + secondAfter = selection.getSecond().getLocation(); + + editingAfter = selection.getVisibilityState(); + } + + public boolean isChanged() { + return !firstBefore.equals(firstAfter) || !secondBefore.equals(secondAfter) || editingBefore != editingAfter; + } +} diff --git a/src/main/java/net/mcreator/ui/workspace/ModElementCodeDropdown.java b/src/main/java/net/mcreator/ui/workspace/ModElementCodeDropdown.java index 20a95c6a544..023e0625b9d 100644 --- a/src/main/java/net/mcreator/ui/workspace/ModElementCodeDropdown.java +++ b/src/main/java/net/mcreator/ui/workspace/ModElementCodeDropdown.java @@ -25,9 +25,9 @@ import net.mcreator.ui.ide.ProjectFileOpener; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.FileIcons; +import net.mcreator.ui.laf.themes.Theme; import javax.swing.*; -import java.awt.*; import java.util.Arrays; import java.util.List; @@ -38,7 +38,7 @@ class ModElementCodeDropdown extends JPopupMenu { List modElementGlobalFiles, List modElementListFiles) { this.mcreator = mcreator; setBorder(BorderFactory.createEmptyBorder()); - setBackground(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker()); + setBackground((Theme.current().getAltBackgroundColor()).darker()); int entryCounter = 0; @@ -71,8 +71,8 @@ class ModElementCodeDropdown extends JPopupMenu { if (!list.templates().isEmpty()) { JMenu listMenu = new JMenu(list.groupName()); listMenu.setIcon(UIRES.get("16px.list.gif")); - listMenu.setBackground(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker()); - listMenu.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + listMenu.setBackground((Theme.current().getAltBackgroundColor()).darker()); + listMenu.setForeground(Theme.current().getForegroundColor()); listMenu.setIconTextGap(8); listMenu.setBorder(BorderFactory.createEmptyBorder(10, 0, 11, 0)); @@ -102,8 +102,8 @@ private JMenuItem modElementFileMenuItem(GeneratorTemplate template) { "" + template.getFile().getName() + "
          " + mcreator.getWorkspace() .getFolderManager().getPathInWorkspace(template.getFile())); item.setIcon(FileIcons.getIconForFile(template.getFile())); - item.setBackground(((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).darker()); - item.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + item.setBackground((Theme.current().getAltBackgroundColor()).darker()); + item.setForeground(Theme.current().getForegroundColor()); item.setIconTextGap(8); item.setBorder(BorderFactory.createEmptyBorder(4, 0, 4, 0)); item.addActionListener(e -> ProjectFileOpener.openCodeFile(mcreator, template.getFile())); diff --git a/src/main/java/net/mcreator/ui/workspace/WorkspacePanel.java b/src/main/java/net/mcreator/ui/workspace/WorkspacePanel.java index 9ca6ae77f76..74477dc96f8 100644 --- a/src/main/java/net/mcreator/ui/workspace/WorkspacePanel.java +++ b/src/main/java/net/mcreator/ui/workspace/WorkspacePanel.java @@ -19,6 +19,7 @@ package net.mcreator.ui.workspace; import net.mcreator.element.*; +import net.mcreator.element.types.CustomElement; import net.mcreator.generator.GeneratorTemplate; import net.mcreator.generator.GeneratorTemplatesList; import net.mcreator.generator.ListTemplate; @@ -36,12 +37,14 @@ import net.mcreator.ui.component.util.PanelUtils; import net.mcreator.ui.dialogs.ModElementIDsDialog; import net.mcreator.ui.dialogs.ProgressDialog; +import net.mcreator.ui.dialogs.SearchUsagesDialog; import net.mcreator.ui.ide.ProjectFileOpener; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.TiledImageCache; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.SlickDarkScrollBarUI; import net.mcreator.ui.laf.renderer.elementlist.*; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.modgui.ModElementGUI; import net.mcreator.ui.modgui.ModTypeDropdown; import net.mcreator.ui.validation.Validator; @@ -56,6 +59,7 @@ import net.mcreator.workspace.elements.FolderElement; import net.mcreator.workspace.elements.IElement; import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ReferencesFinder; import javax.swing.*; import javax.swing.event.ChangeEvent; @@ -74,7 +78,7 @@ @SuppressWarnings("EqualsBetweenInconvertibleTypes") public class WorkspacePanel extends JPanel { - private FilterModel dml = new FilterModel(); + private final FilterModel dml = new FilterModel(); public final JTextField search; public FolderElement currentFolder; @@ -107,9 +111,9 @@ private final JLabel but3 = new JLabel(TiledImageCache.workspaceDelete); private final JLabel but5 = new JLabel(TiledImageCache.workspaceCode); private final JLabel but5a = new JLabel(TiledImageCache.workspaceToggle); - private final JLabel but6 = new JLabel(TiledImageCache.workspaceModElementIDs); private final JMenuItem deleteElement = new JMenuItem(L10N.t("workspace.elements.list.edit.delete")); + private final JMenuItem searchElement = new JMenuItem(L10N.t("common.search_usages")); private final JMenuItem duplicateElement = new JMenuItem(L10N.t("workspace.elements.list.edit.duplicate")); private final JMenuItem codeElement = new JMenuItem(L10N.t("workspace.elements.list.edit.code")); private final JMenuItem lockElement = new JMenuItem(L10N.t("workspace.elements.list.edit.lock")); @@ -170,7 +174,13 @@ public WorkspacePanel(final MCreator mcreator) { this.resourcesPan = new WorkspacePanelResources(this); - this.elementsBreadcrumb = new WorkspaceFolderBreadcrumb(mcreator); + this.elementsBreadcrumb = new WorkspaceFolderBreadcrumb(mcreator, 10, false); + this.elementsBreadcrumb.setSelectionListener((element, component, event) -> { + if (element instanceof ModElement me) + editCurrentlySelectedModElement(me, component, event.getX(), event.getY()); + else if (element instanceof FolderElement fe) + switchFolder(fe); + }); JPopupMenu contextMenu = new JPopupMenu(); @@ -195,7 +205,7 @@ public WorkspacePanel(final MCreator mcreator) { } } mcreator.getWorkspace().markDirty(); - reloadElements(); + sectionTabs.get("mods").reloadElements(); } else { Toolkit.getDefaultToolkit().beep(); } @@ -226,12 +236,14 @@ public WorkspacePanel(final MCreator mcreator) { selected = list.getSelectedValue(); if (selected instanceof FolderElement) { + searchElement.setVisible(false); duplicateElement.setVisible(false); codeElement.setVisible(false); lockElement.setVisible(false); idElement.setVisible(false); renameElementFolder.setVisible(true); } else { + searchElement.setVisible(true); duplicateElement.setVisible(true); codeElement.setVisible(true); lockElement.setVisible(true); @@ -259,7 +271,9 @@ public WorkspacePanel(final MCreator mcreator) { list.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE) { + if (e.getKeyCode() == KeyEvent.VK_F && e.isControlDown() && e.isShiftDown()) { + searchModElementsUsages(); + } else if (e.getKeyCode() == KeyEvent.VK_DELETE) { deleteCurrentlySelectedModElement(); } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { IElement selected = list.getSelectedValue(); @@ -277,8 +291,8 @@ public WorkspacePanel(final MCreator mcreator) { sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); sp.getViewport().setOpaque(false); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); + sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), sp.getVerticalScrollBar())); sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); sp.setBorder(null); @@ -323,20 +337,20 @@ public WorkspacePanel(final MCreator mcreator) { ComponentUtils.deriveFont(search, 14); search.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 2)); search.setOpaque(false); - search.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + search.setBackground(Theme.current().getAltBackgroundColor()); search.getDocument().addDocumentListener(new DocumentListener() { @Override public void removeUpdate(DocumentEvent arg0) { - refilterElements(); + sectionTabs.values().forEach(IReloadableFilterable::refilterElements); } @Override public void insertUpdate(DocumentEvent arg0) { - refilterElements(); + sectionTabs.values().forEach(IReloadableFilterable::refilterElements); } @Override public void changedUpdate(DocumentEvent arg0) { - refilterElements(); + sectionTabs.values().forEach(IReloadableFilterable::refilterElements); } }); @@ -541,12 +555,12 @@ public WorkspacePanel(final MCreator mcreator) { ComponentUtils.deriveFont(filter, 11); filter.setMargin(new Insets(1, 3, 1, 3)); - filter.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + filter.setBackground(Theme.current().getBackgroundColor()); filter.setBorderPainted(false); ComponentUtils.deriveFont(sort, 11); sort.setMargin(new Insets(1, 3, 1, 3)); - sort.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + sort.setBackground(Theme.current().getBackgroundColor()); sort.setBorderPainted(false); leftPan.add(new JEmptyBox(2, 2)); @@ -560,12 +574,12 @@ public WorkspacePanel(final MCreator mcreator) { filterPopup.add(new UnregisteredAction(L10N.t("workspace.elements.list.filter_all"), e -> search.setText(""))); filterPopup.addSeparator(); filterPopup.add( - new UnregisteredAction(L10N.t("workspace.elements.list.filter_locked"), e -> togglefilter("f:locked"))); + new UnregisteredAction(L10N.t("workspace.elements.list.filter_locked"), e -> toggleFilter("f:locked"))); filterPopup.add(new UnregisteredAction(L10N.t("workspace.elements.list.filter_witherrors"), - e -> togglefilter("f:err"))); + e -> toggleFilter("f:err"))); filterPopup.addSeparator(); for (ModElementType type : ModElementTypeLoader.REGISTRY) { - filterPopup.add(new UnregisteredAction(type.getReadableName(), e -> togglefilter( + filterPopup.add(new UnregisteredAction(type.getReadableName(), e -> toggleFilter( "f:" + type.getReadableName().replace(" ", "").toLowerCase(Locale.ENGLISH))).setIcon( new ImageIcon(ImageUtils.resizeAA(type.getIcon().getImage(), 16)))); } @@ -638,7 +652,7 @@ public WorkspacePanel(final MCreator mcreator) { L10N.label("workspace.elements.details.id"), L10N.label("workspace.elements.details.type"), L10N.label("workspace.elements.details.lock"), L10N.label("workspace.elements.details.compile"))); detailsbar.setBorder(BorderFactory.createEmptyBorder(4, 47, 4, 8)); - detailsbar.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + detailsbar.setBackground(Theme.current().getSecondAltBackgroundColor()); modElementsPanel.add("North", PanelUtils.northAndCenterElement(elementsBreadcrumb, detailsbar, 0, 0)); modElementsPanel.add("Center", mainp); @@ -648,7 +662,7 @@ public WorkspacePanel(final MCreator mcreator) { slo.setBorder(null); rotatablePanel.setLayout(new BoxLayout(rotatablePanel, BoxLayout.PAGE_AXIS)); - rotatablePanel.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + rotatablePanel.setBackground(Theme.current().getBackgroundColor()); slo.add("West", rotatablePanel); add("Center", slo); @@ -722,22 +736,6 @@ public WorkspacePanel(final MCreator mcreator) { but5a.setCursor(new Cursor(Cursor.HAND_CURSOR)); pne.add(but5a); - but6.addMouseListener(new MouseAdapter() { - @Override public void mouseClicked(MouseEvent e) { - if (but6.isEnabled()) { - IElement mu = list.getSelectedValue(); - if (mu instanceof ModElement && ((ModElement) mu).getType().getBaseType() != BaseType.DATAPACK) { - ModElement modified = ModElementIDsDialog.openModElementIDDialog(mcreator, ((ModElement) mu)); - if (modified != null) - mcreator.getWorkspace().markDirty(); - } - } - } - }); - but6.setToolTipText(L10N.t("workspace.elements.edit_registry_names.tooltip")); - but6.setCursor(new Cursor(Cursor.HAND_CURSOR)); - pne.add(but6); - JPanel toolp = new JPanel(new BorderLayout(0, 0)) { @Override public void paintComponent(Graphics g) { g.setColor(new Color(0.3f, 0.3f, 0.3f, 0.4f)); @@ -768,11 +766,12 @@ public WorkspacePanel(final MCreator mcreator) { addVerticalTab("mods", L10N.t("workspace.category.mod_elements"), new WorkspacePanelMods(PanelUtils.westAndCenterElement(toolp, modElementsPanel))); - addVerticalTab("res", L10N.t("workspace.category.resources"), resourcesPan); - addVerticalTab("locales", L10N.t("workspace.category.variables"), new WorkspacePanelVariables(this)); - addVerticalTab("variables", L10N.t("workspace.category.localization"), new WorkspacePanelLocalizations(this)); + addVerticalTab("resources", L10N.t("workspace.category.resources"), resourcesPan); + addVerticalTab("variables", L10N.t("workspace.category.variables"), new WorkspacePanelVariables(this)); + addVerticalTab("localization", L10N.t("workspace.category.localization"), + new WorkspacePanelLocalizations(this)); - verticalTabs.get(0).doClick(); + switchToVerticalTab("mods"); elementsBreadcrumb.reloadPath(currentFolder, ModElement.class); @@ -791,6 +790,9 @@ public WorkspacePanel(final MCreator mcreator) { duplicateElement.addActionListener(e -> duplicateCurrentlySelectedModElement()); + searchElement.setIcon(UIRES.get("16px.search")); + searchElement.addActionListener(e -> searchModElementsUsages()); + codeElement.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked(e); @@ -807,14 +809,7 @@ public WorkspacePanel(final MCreator mcreator) { lockElement.addActionListener(e -> lockCode()); - idElement.addActionListener(e -> { - IElement mu = list.getSelectedValue(); - if (mu instanceof ModElement && ((ModElement) mu).getType().getBaseType() != BaseType.DATAPACK) { - ModElement modified = ModElementIDsDialog.openModElementIDDialog(mcreator, ((ModElement) mu)); - if (modified != null) - mcreator.getWorkspace().markDirty(); - } - }); + idElement.addActionListener(e -> editIDOfCurrentlySelectedModElement()); JMenuItem addElementFolder = new JMenuItem(L10N.t("workspace.elements.list.edit.add.folder")); addElementFolder.setIcon(UIRES.get("laf.newFolder.gif")); @@ -835,6 +830,7 @@ public WorkspacePanel(final MCreator mcreator) { contextMenu.addSeparator(); contextMenu.add(deleteElement); contextMenu.addSeparator(); + contextMenu.add(searchElement); contextMenu.add(duplicateElement); contextMenu.add(lockElement); contextMenu.add(idElement); @@ -859,25 +855,15 @@ public void addVerticalTab(String id, String name, AbstractWorkspacePanel sectio if (section.isSupportedInWorkspace()) { VerticalTabButton tab = new VerticalTabButton(name); + tab.setName(id); tab.setContentAreaFilled(false); tab.setMargin(new Insets(7, 1, 7, 2)); tab.setBorderPainted(false); tab.setFocusPainted(false); tab.setOpaque(true); - tab.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + tab.setBackground(Theme.current().getBackgroundColor()); tab.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - tab.addActionListener(e -> { - if (section.canSwitchToSection()) { - for (JButton btt : verticalTabs) { - btt.setBackground(btt == tab ? - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT") : - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - } - cardLayout.show(panels, id); - updateMods(); - modElementsBar.setVisible(id.equals("mods")); - } - }); + tab.addActionListener(e -> switchToVerticalTab(id)); verticalTabs.add(tab); rotatablePanel.add(tab); } @@ -887,11 +873,24 @@ public AbstractWorkspacePanel getVerticalTab(String id) { return sectionTabs.get(id); } + public void switchToVerticalTab(String id) { + if (sectionTabs.get(id).canSwitchToSection()) { + for (JButton btt : verticalTabs) { + btt.setBackground(btt.getName().equals(id) ? + Theme.current().getAltBackgroundColor() : + Theme.current().getBackgroundColor()); + } + cardLayout.show(panels, id); + reloadElementsInCurrentTab(); + modElementsBar.setVisible(id.equals("mods")); + } + } + public void switchFolder(FolderElement switchTo) { search.setText(null); // clear the search bar currentFolder = switchTo; - reloadElements(); + sectionTabs.get("mods").reloadElements(); // reload breadcrumb elementsBreadcrumb.reloadPath(currentFolder, ModElement.class); @@ -899,7 +898,7 @@ public void switchFolder(FolderElement switchTo) { upFolder.setEnabled(!currentFolder.isRoot()); } - private void togglefilter(String filter) { + private void toggleFilter(String filter) { String currentSearchText = search.getText().trim(); if (currentSearchText.contains(filter)) { search.setText(currentSearchText.replace(filter, "").replaceAll("\\s{2,}", " ").trim()); @@ -921,7 +920,7 @@ private void resort() { PreferencesManager.PREFERENCES.hidden.workspaceSortAscending.set(!desc.isSelected()); - refilterElements(); + sectionTabs.values().forEach(IReloadableFilterable::refilterElements); } private void updateElementListRenderer() { @@ -993,6 +992,20 @@ public void enableRemoving() { but3.setCursor(new Cursor(Cursor.HAND_CURSOR)); } + private void editIDOfCurrentlySelectedModElement() { + IElement mu = list.getSelectedValue(); + if (mu instanceof ModElement modElement && !NamespacedGeneratableElement.class.isAssignableFrom( + modElement.getType().getModElementStorageClass())) { + ModElement modified = ModElementIDsDialog.openModElementIDDialog(mcreator, ((ModElement) mu)); + if (modified != null) + mcreator.getWorkspace().markDirty(); + } else { + JOptionPane.showMessageDialog(mcreator, + L10N.t("workspace.elements.edit_registry_names.not_possible_message"), + L10N.t("workspace.elements.edit_registry_names.not_possible_title"), JOptionPane.WARNING_MESSAGE); + } + } + private void lockCode() { Object[] options = { L10N.t("workspace.elements.lock_modelement_lock_unlock"), UIManager.getString("OptionPane.cancelButtonText") }; @@ -1004,7 +1017,7 @@ private void lockCode() { Thread t = new Thread(() -> { ProgressDialog.ProgressUnit p0 = new ProgressDialog.ProgressUnit( L10N.t("workspace.elements.lock_modelement_locking_unlocking")); - dial.addProgress(p0); + dial.addProgressUnit(p0); List elementsThatGotUnlocked = new ArrayList<>(); list.getSelectedValuesList().forEach(el -> { @@ -1019,16 +1032,15 @@ private void lockCode() { mcreator.getWorkspace().markDirty(); } }); - updateMods(); + reloadElementsInCurrentTab(); - p0.ok(); - dial.refreshDisplay(); + p0.markStateOk(); // if we have new unlocked elements, we recreate their code if (!elementsThatGotUnlocked.isEmpty()) { ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("workspace.elements.lock_modelement_regeneration")); - dial.addProgress(p1); + dial.addProgressUnit(p1); int i = 0; for (ModElement mod : elementsThatGotUnlocked) { GeneratableElement generatableElement = mod.getGeneratableElement(); @@ -1038,30 +1050,57 @@ private void lockCode() { } i++; p1.setPercent((int) (((float) i / (float) elementsThatGotUnlocked.size()) * 100.0f)); - dial.refreshDisplay(); } - p1.ok(); - dial.refreshDisplay(); + p1.markStateOk(); ProgressDialog.ProgressUnit p2 = new ProgressDialog.ProgressUnit( L10N.t("workspace.elements.lock_modelement_rebuilding_workspace")); - dial.addProgress(p2); + dial.addProgressUnit(p2); mcreator.actionRegistry.buildWorkspace.doAction(); - p2.ok(); - dial.refreshDisplay(); + p2.markStateOk(); } - dial.hideAll(); + dial.hideDialog(); }, "CodeLock"); t.start(); dial.setVisible(true); } } + private void searchModElementsUsages() { + if (list.getSelectedValuesList().stream().anyMatch(i -> i instanceof ModElement)) { + mcreator.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set references = new HashSet<>(); + boolean tagsSelected = false, nonTagsSelected = false; + for (IElement el : list.getSelectedValuesList()) { + if (el instanceof ModElement mod) { + // We don't look for tag references since those are "weak" references also affected by other mods + if (mod.getType() == ModElementType.TAG) { + tagsSelected = true; + } else { + nonTagsSelected = true; + references.addAll(ReferencesFinder.searchModElementUsages(mcreator.getWorkspace(), mod)); + } + } + } + + mcreator.setCursor(Cursor.getDefaultCursor()); + if (tagsSelected) { + JOptionPane.showMessageDialog(mcreator, L10N.t("workspace.elements.list.edit.usages.tags"), + L10N.t("workspace.elements.list.edit.usages.tags.title"), JOptionPane.WARNING_MESSAGE); + } + if (nonTagsSelected) { + SearchUsagesDialog.showUsagesDialog(mcreator, L10N.t("dialog.search_usages.type.mod_element"), + references); + } + } + } + private void duplicateCurrentlySelectedModElement() { if (list.getSelectedValue() instanceof ModElement mu) { GeneratableElement generatableElementOriginal = mu.getGeneratableElement(); - if (generatableElementOriginal != null) { + if (generatableElementOriginal != null && !(generatableElementOriginal instanceof CustomElement)) { String modName = VOptionPane.showInputDialog(mcreator, L10N.t("workspace.elements.duplicate_message", mu.getName()), L10N.t("workspace.elements.duplicate_element", mu.getName()), mu.getElementIcon(), @@ -1119,7 +1158,7 @@ private void duplicateCurrentlySelectedModElement() { mcreator.getWorkspace().addModElement(duplicateModElement); - updateMods(); + reloadElementsInCurrentTab(); } } } @@ -1172,11 +1211,20 @@ else if (modElementGlobalFiles.size() == 1) private void deleteCurrentlySelectedModElement() { if (but3.isEnabled()) { if (list.getSelectedValue() != null) { - int n = JOptionPane.showConfirmDialog(mcreator, - L10N.t("workspace.elements.confirm_delete_message", list.getSelectedValuesList().size()), - L10N.t("common.confirmation"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null); + mcreator.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - if (n == 0) { + Set references = new HashSet<>(); + for (IElement el : list.getSelectedValuesList()) { + if (el instanceof ModElement mod) + references.addAll(ReferencesFinder.searchModElementUsages(mcreator.getWorkspace(), mod)); + } + list.getSelectedValuesList().stream() // exclude usages by other mod elements being removed + .filter(e -> e instanceof ModElement).map(e -> (ModElement) e).forEach(references::remove); + + mcreator.setCursor(Cursor.getDefaultCursor()); + + if (SearchUsagesDialog.showDeleteDialog(mcreator, L10N.t("dialog.search_usages.type.mod_element"), + references, L10N.t("workspace.elements.confirm_delete_msg_suffix"))) { AtomicBoolean buildNeeded = new AtomicBoolean(false); list.getSelectedValuesList().forEach(re -> { if (re instanceof ModElement) { @@ -1211,7 +1259,7 @@ private void deleteCurrentlySelectedModElement() { folder.getParent().removeChild(folder); } }); - updateMods(); + reloadElementsInCurrentTab(); if (buildNeeded.get()) mcreator.actionRegistry.buildWorkspace.doAction(); @@ -1227,7 +1275,7 @@ private void addNewFolder() { if (name != null) { currentFolder.addChild(new FolderElement(name, currentFolder)); mcreator.getWorkspace().markDirty(); - reloadElements(); + sectionTabs.get("mods").reloadElements(); } } @@ -1238,84 +1286,12 @@ private void renameFolder(FolderElement selected) { selected.setName(mcreator.getWorkspace(), newName); mcreator.getWorkspace().markDirty(); - reloadElements(); + sectionTabs.get("mods").reloadElements(); } } - private boolean updateRunning = false; - - public synchronized void updateMods() { - if (updateRunning) - return; - - updateRunning = true; - + public synchronized void reloadElementsInCurrentTab() { sectionTabs.get(currentTab).reloadElements(); - - updateRunning = false; - } - - public void reloadElements() { - if (mcreator.getWorkspaceSettings() != null) { - // first we need to get current folder from the workspace - // as current reference to the folder may be out of date (eg. reload from disk) - List folders = mcreator.getWorkspace().getFoldersRoot().getRecursiveFolderChildren(); - int folderIdx = folders.indexOf(currentFolder); - if (folderIdx == -1) { - currentFolder = mcreator.getWorkspace().getFoldersRoot(); - } else { - currentFolder = folders.get(folderIdx); - } - - if (mcreator.getWorkspace().getModElements().stream() - .anyMatch(el -> currentFolder.equals(el.getFolderPath())) - || !currentFolder.getDirectFolderChildren().isEmpty()) { - mainpcl.show(mainp, "sp"); - - // reload list model partially in the background - new Thread(() -> { - List selected = list.getSelectedValuesList(); - - FilterModel newModel = new FilterModel(); - - // add folders - currentFolder.getRecursiveFolderChildren().forEach(newModel::addElement); - - // add mod elements - mcreator.getWorkspace().getModElements().forEach(newModel::addElement); - - SwingUtilities.invokeLater(() -> { - list.setModel(dml = newModel); - - ListUtil.setSelectedValues(list, selected); - - this.refilterElements(); - }); - }, "WorkspaceListReloader").start(); - } else { - mainpcl.show(mainp, "ep"); - } - - if (mcreator.getWorkspace().getModElements().isEmpty()) { - elementsCount.setText(L10N.t("workspace.stats.empty", mcreator.getWorkspaceSettings().getModName(), - mcreator.getGenerator().getGeneratorName())); - } else { - elementsCount.setText( - L10N.t("workspace.stats.current_workspace", mcreator.getWorkspaceSettings().getModName(), - mcreator.getGenerator().getGeneratorName(), - mcreator.getWorkspace().getModElements().size())); - } - - if (mcreator.getWorkspaceSettings().getMCreatorDependencies().contains("mcreator_link")) { - elementsCount.setIcon(UIRES.get("16px.link")); - } else { - elementsCount.setIcon(new EmptyIcon(0, 0)); - } - } - } - - public void refilterElements() { - sectionTabs.values().forEach(IReloadableFilterable::refilterElements); } public MCreator getMCreator() { @@ -1326,14 +1302,18 @@ private class FilterModel extends DefaultListModel { ArrayList items; ArrayList filterItems; - final Pattern pattern = Pattern.compile("([^\"]\\S*|\".+?\")\\s*"); + private final static Pattern pattern = Pattern.compile("([^\"]\\S*|\".+?\")\\s*"); FilterModel() { - super(); items = new ArrayList<>(); filterItems = new ArrayList<>(); } + @Override public void addAll(Collection collection) { + items.addAll(collection); + refilter(); + } + @Override public IElement getElementAt(int index) { if (!filterItems.isEmpty() && index < filterItems.size()) return filterItems.get(index); @@ -1489,11 +1469,57 @@ private WorkspacePanelMods(JComponent contents) { } @Override public void reloadElements() { - WorkspacePanel.this.reloadElements(); + if (mcreator.getWorkspaceSettings() != null) { + // first we need to get current folder from the workspace + // as current reference to the folder may be out of date (e.g. reload from disk) + List folders = mcreator.getWorkspace().getFoldersRoot().getRecursiveFolderChildren(); + int folderIdx = folders.indexOf(currentFolder); + if (folderIdx == -1) { + currentFolder = mcreator.getWorkspace().getFoldersRoot(); + } else { + currentFolder = folders.get(folderIdx); + } + + if (mcreator.getWorkspace().getModElements().stream() + .anyMatch(el -> currentFolder.equals(el.getFolderPath())) + || !currentFolder.getDirectFolderChildren().isEmpty()) { + mainpcl.show(mainp, "sp"); + + // add folders + ArrayList newDataModel = new ArrayList<>(currentFolder.getRecursiveFolderChildren()); + + // add mod elements + newDataModel.addAll(mcreator.getWorkspace().getModElements()); + + List selected = list.getSelectedValuesList(); + dml.removeAllElements(); + dml.addAll(newDataModel); + ListUtil.setSelectedValues(list, selected); + } else { + mainpcl.show(mainp, "ep"); + } + + if (mcreator.getWorkspace().getModElements().isEmpty()) { + elementsCount.setText(L10N.t("workspace.stats.empty", mcreator.getWorkspaceSettings().getModName(), + mcreator.getGenerator().getGeneratorName())); + } else { + elementsCount.setText( + L10N.t("workspace.stats.current_workspace", mcreator.getWorkspaceSettings().getModName(), + mcreator.getGenerator().getGeneratorName(), + mcreator.getWorkspace().getModElements().size())); + } + + if (mcreator.getWorkspaceSettings().getMCreatorDependencies().contains("mcreator_link")) { + elementsCount.setIcon(UIRES.get("16px.link")); + } else { + elementsCount.setIcon(new EmptyIcon(0, 0)); + } + } } @Override public void refilterElements() { dml.refilter(); } } + } diff --git a/src/main/java/net/mcreator/ui/workspace/WorkspacePanelLocalizations.java b/src/main/java/net/mcreator/ui/workspace/WorkspacePanelLocalizations.java index 54d0b9c81e6..7f66eb80ebe 100644 --- a/src/main/java/net/mcreator/ui/workspace/WorkspacePanelLocalizations.java +++ b/src/main/java/net/mcreator/ui/workspace/WorkspacePanelLocalizations.java @@ -26,11 +26,15 @@ import net.mcreator.io.FileIO; import net.mcreator.ui.component.TransparentToolBar; import net.mcreator.ui.component.util.ComponentUtils; +import net.mcreator.ui.dialogs.SearchUsagesDialog; import net.mcreator.ui.dialogs.file.FileDialogs; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.SlickDarkScrollBarUI; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.image.ImageUtils; +import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ReferencesFinder; import javax.imageio.ImageIO; import javax.swing.*; @@ -61,6 +65,7 @@ class WorkspacePanelLocalizations extends AbstractWorkspacePanel { private final JButton del; private final JButton exp; private final JButton imp; + private final JButton use; WorkspacePanelLocalizations(WorkspacePanel workspacePanel) { super(workspacePanel); @@ -93,7 +98,8 @@ class WorkspacePanelLocalizations extends AbstractWorkspacePanel { } })); - bar.add(del = createToolBarButton("workspace.localization.remove_selected", UIRES.get("16px.delete.gif"))); + bar.add(del = createToolBarButton("common.delete_selected", UIRES.get("16px.delete.gif"))); + bar.add(use = createToolBarButton("common.search_usages", UIRES.get("16px.search"))); bar.add(exp = createToolBarButton("workspace.localization.export_to_csv", UIRES.get("16px.ext.gif"))); bar.add(imp = createToolBarButton("workspace.localization.import_csv", UIRES.get("16px.open.gif"))); @@ -104,6 +110,9 @@ class WorkspacePanelLocalizations extends AbstractWorkspacePanel { for (var al : del.getActionListeners()) del.removeActionListener(al); + for (var al : use.getActionListeners()) + use.removeActionListener(al); + for (var al : imp.getActionListeners()) imp.removeActionListener(al); @@ -153,22 +162,23 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean }); TableRowSorter sorter = new TableRowSorter<>(elements.getModel()); + sorter.toggleSortOrder(0); elements.setRowSorter(sorter); sorters.add(sorter); - elements.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - elements.setSelectionBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - elements.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); - elements.setSelectionForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + elements.setBackground(Theme.current().getBackgroundColor()); + elements.setSelectionBackground(Theme.current().getForegroundColor()); + elements.setForeground(Theme.current().getForegroundColor()); + elements.setSelectionForeground(Theme.current().getBackgroundColor()); elements.setBorder(BorderFactory.createEmptyBorder()); - elements.setGridColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + elements.setGridColor(Theme.current().getAltBackgroundColor()); elements.setRowHeight(22); elements.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); elements.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 13)); JTableHeader header = elements.getTableHeader(); - header.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - header.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + header.setBackground(Theme.current().getInterfaceAccentColor()); + header.setForeground(Theme.current().getBackgroundColor()); DefaultTableModel model = (DefaultTableModel) elements.getModel(); for (Map.Entry langs : entries.entrySet()) { @@ -191,9 +201,8 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean JScrollPane sp = new JScrollPane(elements); sp.setOpaque(false); sp.getViewport().setOpaque(false); - sp.getVerticalScrollBar().setUnitIncrement(11); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); + sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), sp.getVerticalScrollBar())); sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); sp.setColumnHeaderView(null); @@ -233,6 +242,22 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean tab.add(button); pane.setTabComponentAt(id, tab); + use.addActionListener(a -> { + if (elements.getSelectedRow() != -1 && pane.getSelectedIndex() == id) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set references = new HashSet<>(); + for (int i : elements.getSelectedRows()) { + references.addAll(ReferencesFinder.searchLocalizationKeyUsages( + workspacePanel.getMCreator().getWorkspace(), (String) elements.getValueAt(i, 0))); + } + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + SearchUsagesDialog.showUsagesDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.localization_key"), references); + } + }); + del.addActionListener(a -> deleteCurrentlySelected(elements, id)); elements.addKeyListener(new KeyAdapter() { @@ -334,12 +359,20 @@ private void deleteCurrentlySelected(JTable elements, int id) { if (elements.getSelectedRow() == -1 || pane.getSelectedIndex() != id) return; - String key = (String) elements.getValueAt(elements.getSelectedRow(), 0); - if (key != null) { - int n = JOptionPane.showConfirmDialog(workspacePanel.getMCreator(), - L10N.t("workspace.localization.confirm_delete_entry"), L10N.t("common.confirmation"), - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); - if (n == 0) { + if (elements.getValueAt(elements.getSelectedRow(), 0) != null) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set references = new HashSet<>(); + for (int i : elements.getSelectedRows()) { + references.addAll( + ReferencesFinder.searchLocalizationKeyUsages(workspacePanel.getMCreator().getWorkspace(), + (String) elements.getValueAt(i, 0))); + } + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + + if (SearchUsagesDialog.showDeleteDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.localization_key"), references)) { Arrays.stream(elements.getSelectedRows()).mapToObj(el -> (String) elements.getValueAt(el, 0)) .forEach(workspacePanel.getMCreator().getWorkspace()::removeLocalizationEntryByKey); reloadElements(); diff --git a/src/main/java/net/mcreator/ui/workspace/WorkspacePanelVariables.java b/src/main/java/net/mcreator/ui/workspace/WorkspacePanelVariables.java index e6d352c233d..dd3d55f4e86 100644 --- a/src/main/java/net/mcreator/ui/workspace/WorkspacePanelVariables.java +++ b/src/main/java/net/mcreator/ui/workspace/WorkspacePanelVariables.java @@ -27,9 +27,11 @@ import net.mcreator.ui.component.util.SpinnerCellEditor; import net.mcreator.ui.component.util.TableUtil; import net.mcreator.ui.dialogs.NewVariableDialog; +import net.mcreator.ui.dialogs.SearchUsagesDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.SlickDarkScrollBarUI; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.Validator; import net.mcreator.ui.validation.component.VTextField; import net.mcreator.ui.validation.optionpane.OptionPaneValidatior; @@ -37,9 +39,11 @@ import net.mcreator.ui.validation.validators.UniqueNameValidator; import net.mcreator.util.DesktopUtils; import net.mcreator.workspace.Workspace; +import net.mcreator.workspace.elements.ModElement; import net.mcreator.workspace.elements.VariableElement; import net.mcreator.workspace.elements.VariableType; import net.mcreator.workspace.elements.VariableTypeLoader; +import net.mcreator.workspace.references.ReferencesFinder; import javax.swing.*; import javax.swing.event.TableModelEvent; @@ -47,9 +51,8 @@ import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import java.util.*; class WorkspacePanelVariables extends AbstractWorkspacePanel { @@ -163,26 +166,25 @@ class WorkspacePanelVariables extends AbstractWorkspacePanel { sorter = new TableRowSorter<>(elements.getModel()); elements.setRowSorter(sorter); - elements.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - elements.setSelectionBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); - elements.setForeground(Color.white); - elements.setSelectionForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + elements.setBackground(Theme.current().getBackgroundColor()); + elements.setSelectionBackground(Theme.current().getAltBackgroundColor()); + elements.setForeground(Theme.current().getForegroundColor()); + elements.setSelectionForeground(Theme.current().getBackgroundColor()); elements.setBorder(BorderFactory.createEmptyBorder()); - elements.setGridColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + elements.setGridColor(Theme.current().getAltBackgroundColor()); elements.setRowHeight(28); elements.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); ComponentUtils.deriveFont(elements, 13); JTableHeader header = elements.getTableHeader(); - header.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); - header.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + header.setBackground(Theme.current().getInterfaceAccentColor()); + header.setForeground(Theme.current().getBackgroundColor()); JScrollPane sp = new JScrollPane(elements); - sp.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + sp.setBackground(Theme.current().getBackgroundColor()); sp.getViewport().setOpaque(false); - sp.getVerticalScrollBar().setUnitIncrement(11); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); + sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), sp.getVerticalScrollBar())); sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); sp.setColumnHeaderView(null); @@ -217,9 +219,25 @@ class WorkspacePanelVariables extends AbstractWorkspacePanel { } })); - bar.add(createToolBarButton("workspace.variables.remove_selected", UIRES.get("16px.delete.gif"), + bar.add(createToolBarButton("common.delete_selected", UIRES.get("16px.delete.gif"), e -> deleteCurrentlySelected())); + bar.add(createToolBarButton("common.search_usages", UIRES.get("16px.search"), e -> { + if (elements.getSelectedRow() != -1) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set refs = new HashSet<>(); + for (int i : elements.getSelectedRows()) { + refs.addAll(ReferencesFinder.searchGlobalVariableUsages(workspacePanel.getMCreator().getWorkspace(), + (String) elements.getValueAt(i, 0))); + } + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + SearchUsagesDialog.showUsagesDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.global_variable"), refs); + } + })); + bar.add(createToolBarButton("workspace.variables.help", UIRES.get("16px.info"), e -> DesktopUtils.browseSafe(MCreatorApplication.SERVER_DOMAIN + "/wiki/variables"))); @@ -271,10 +289,18 @@ private void deleteCurrentlySelected() { if (elements.getSelectedRow() == -1) return; - int n = JOptionPane.showConfirmDialog(workspacePanel.getMCreator(), - L10N.t("workspace.variables.remove_variable_confirmation"), L10N.t("common.confirmation"), - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); - if (n == JOptionPane.YES_OPTION) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set references = new HashSet<>(); + for (int i : elements.getSelectedRows()) { + references.addAll(ReferencesFinder.searchGlobalVariableUsages(workspacePanel.getMCreator().getWorkspace(), + (String) elements.getValueAt(i, 0))); + } + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + + if (SearchUsagesDialog.showDeleteDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.global_variable"), references)) { Arrays.stream(elements.getSelectedRows()).mapToObj(el -> (String) elements.getValueAt(el, 0)) .forEach(el -> { VariableElement element = new VariableElement(el); diff --git a/src/main/java/net/mcreator/ui/workspace/breadcrumb/FolderElementCrumb.java b/src/main/java/net/mcreator/ui/workspace/breadcrumb/FolderElementCrumb.java index e282f395612..cdca6a34591 100644 --- a/src/main/java/net/mcreator/ui/workspace/breadcrumb/FolderElementCrumb.java +++ b/src/main/java/net/mcreator/ui/workspace/breadcrumb/FolderElementCrumb.java @@ -19,10 +19,10 @@ package net.mcreator.ui.workspace.breadcrumb; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.workspace.elements.FolderElement; import javax.swing.*; -import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -38,12 +38,12 @@ public FolderElementCrumb(FolderElement element) { setIcon(UIRES.get("laf.directory.gif")); setOpaque(false); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { setOpaque(false); - setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(Theme.current().getBackgroundColor()); } }); } diff --git a/src/main/java/net/mcreator/ui/workspace/breadcrumb/WorkspaceFolderBreadcrumb.java b/src/main/java/net/mcreator/ui/workspace/breadcrumb/WorkspaceFolderBreadcrumb.java index e3f9303d40c..55e2374c955 100644 --- a/src/main/java/net/mcreator/ui/workspace/breadcrumb/WorkspaceFolderBreadcrumb.java +++ b/src/main/java/net/mcreator/ui/workspace/breadcrumb/WorkspaceFolderBreadcrumb.java @@ -39,11 +39,19 @@ public class WorkspaceFolderBreadcrumb extends JPanel { private final MCreator mcreator; + private final int maxDepth; + private final boolean canExpandTrailHead; - public WorkspaceFolderBreadcrumb(MCreator mcreator) { - super(new FlowLayout(FlowLayout.LEFT, 0, 0)); + private SelectionListener selectionListener; + + private FolderElement currentFolder; + public WorkspaceFolderBreadcrumb(MCreator mcreator, int maxDepth, boolean canExpandTrailHead) { + super(new FlowLayout(FlowLayout.LEFT, 0, 0)); this.mcreator = mcreator; + this.maxDepth = maxDepth; + this.canExpandTrailHead = canExpandTrailHead; + setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 0)); setOpaque(false); } @@ -56,6 +64,8 @@ public WorkspaceFolderBreadcrumb(MCreator mcreator) { @SuppressWarnings("EqualsBetweenInconvertibleTypes") public void reloadPath(FolderElement file, Class childElement) { + this.currentFolder = file; + removeAll(); List path = new ArrayList<>(); @@ -68,7 +78,7 @@ public void reloadPath(FolderElement file, Class childElemen file = file.getParent(); depth++; - if (depth > 9) + if (depth > maxDepth - 1) break; } Collections.reverse(path); @@ -84,11 +94,12 @@ public void reloadPath(FolderElement file, Class childElemen add(entry); - if (idx < path.size() - 1) { + if (idx < path.size() - 1 || canExpandTrailHead) { adapter = new MouseAdapter() { @Override public void mouseClicked(MouseEvent mouseEvent) { if (mouseEvent.getClickCount() == 2) { - mcreator.mv.switchFolder(filePathPart); + if (selectionListener != null) + selectionListener.elementSelected(filePathPart, entry, mouseEvent); return; } @@ -113,12 +124,8 @@ else if (file instanceof FolderElement) menuItem.setIcon(UIRES.get("laf.directory.gif")); menuItem.addActionListener(e -> { - if (file instanceof ModElement) { - mcreator.mv.editCurrentlySelectedModElement((ModElement) file, entry, - mouseEvent.getX(), mouseEvent.getY()); - } else if (file instanceof FolderElement) { - mcreator.mv.switchFolder((FolderElement) file); - } + if (selectionListener != null) + selectionListener.elementSelected(file, entry, mouseEvent); }); popupMenu.add(menuItem); } @@ -130,9 +137,11 @@ else if (file instanceof FolderElement) } }; entry.addMouseListener(adapter); - add(new JLabel(UIRES.get("16px.subpath"))); } + if (idx < path.size() - 1) + add(new JLabel(UIRES.get("16px.subpath"))); + idx++; } @@ -146,4 +155,16 @@ else if (file instanceof FolderElement) }); } + public FolderElement getCurrentFolder() { + return currentFolder; + } + + public void setSelectionListener(SelectionListener selectionListener) { + this.selectionListener = selectionListener; + } + + public interface SelectionListener { + void elementSelected(IElement element, JComponent component, MouseEvent event); + } + } \ No newline at end of file diff --git a/src/main/java/net/mcreator/ui/workspace/resources/AbstractResourcePanel.java b/src/main/java/net/mcreator/ui/workspace/resources/AbstractResourcePanel.java new file mode 100644 index 00000000000..52e8d56a13f --- /dev/null +++ b/src/main/java/net/mcreator/ui/workspace/resources/AbstractResourcePanel.java @@ -0,0 +1,112 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.ui.workspace.resources; + +import net.mcreator.ui.component.JSelectableList; +import net.mcreator.ui.component.TransparentToolBar; +import net.mcreator.ui.laf.SlickDarkScrollBarUI; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.workspace.AbstractWorkspacePanel; +import net.mcreator.ui.workspace.IReloadableFilterable; +import net.mcreator.ui.workspace.WorkspacePanel; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseListener; + +/** + *

          An abstract class used to standardize code, methods and features across the different resource tabs. + * This class is optional and only expected to be used when the behavior of a tab is similar to the others (e.g. sounds, structures, etc.) + * It should not be used in a case where it is different in some way (e.g. textures having multiple lists).

          + * + * @param Type of resources that can be managed in this tab. + */ +public abstract class AbstractResourcePanel extends JPanel implements IReloadableFilterable { + + protected final WorkspacePanel workspacePanel; + + private final TransparentToolBar bar = new TransparentToolBar(); + + protected final ResourceFilterModel filterModel; + protected JSelectableList elementList; + + public AbstractResourcePanel(WorkspacePanel workspacePanel, ResourceFilterModel filterModel, + ListCellRenderer render) { + this(workspacePanel, filterModel, render, JList.VERTICAL); + } + + public AbstractResourcePanel(WorkspacePanel workspacePanel, ResourceFilterModel filterModel, + ListCellRenderer render, int layoutOrientation) { + super(new BorderLayout()); + setOpaque(false); + + this.filterModel = filterModel; + this.workspacePanel = workspacePanel; + + elementList = new JSelectableList<>(filterModel); + elementList.setOpaque(false); + elementList.setCellRenderer(render); + elementList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + elementList.setLayoutOrientation(layoutOrientation); + if (layoutOrientation == JList.HORIZONTAL_WRAP) + elementList.setVisibleRowCount(-1); + + JScrollPane sp = new JScrollPane(elementList); + sp.setOpaque(false); + sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + sp.getViewport().setOpaque(false); + sp.getVerticalScrollBar().setUnitIncrement(11); + sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), sp.getVerticalScrollBar())); + sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); + + add("Center", sp); + + elementList.addKeyListener(new KeyAdapter() { + @Override public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + deleteCurrentlySelected(); + } + } + }); + + bar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 0)); + + add("North", bar); + } + + abstract void deleteCurrentlySelected(); + + @Override public void refilterElements() { + filterModel.refilter(); + } + + protected void addToolBarButton(String translationKey, ImageIcon icon, ActionListener actionListener) { + bar.add(AbstractWorkspacePanel.createToolBarButton(translationKey, icon, actionListener)); + } + + protected void addToolBarButton(String translationKey, ImageIcon icon, MouseListener mouseListener) { + bar.add(AbstractWorkspacePanel.createToolBarButton(translationKey, icon, mouseListener)); + } + +} diff --git a/src/main/java/net/mcreator/ui/workspace/resources/ResourceFilterModel.java b/src/main/java/net/mcreator/ui/workspace/resources/ResourceFilterModel.java index 210dfdcd795..5e4cb968951 100644 --- a/src/main/java/net/mcreator/ui/workspace/resources/ResourceFilterModel.java +++ b/src/main/java/net/mcreator/ui/workspace/resources/ResourceFilterModel.java @@ -60,6 +60,11 @@ public ResourceFilterModel(WorkspacePanel workspacePanel, BiFunction(); } + @Override public void addAll(Collection collection) { + items.addAll(collection); + refilter(); + } + @SuppressWarnings("SuspiciousMethodCalls") @Override public int indexOf(Object elem) { try { return filterItems.indexOf(elem); diff --git a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelModels.java b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelModels.java index ce7dcbc6bb8..65174d7c9b1 100644 --- a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelModels.java +++ b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelModels.java @@ -18,233 +18,119 @@ package net.mcreator.ui.workspace.resources; -import net.mcreator.element.GeneratableElement; -import net.mcreator.element.ModElementType; import net.mcreator.generator.GeneratorStats; import net.mcreator.io.FileIO; -import net.mcreator.ui.component.TransparentToolBar; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.dialogs.JavaModelAnimationEditorDialog; -import net.mcreator.ui.dialogs.ProgressDialog; +import net.mcreator.ui.dialogs.SearchUsagesDialog; import net.mcreator.ui.dialogs.TextureMappingDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.SlickDarkScrollBarUI; -import net.mcreator.ui.workspace.IReloadableFilterable; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.WorkspacePanel; import net.mcreator.util.StringUtils; +import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ReferencesFinder; import net.mcreator.workspace.resources.Model; import net.mcreator.workspace.resources.TexturedModel; import javax.swing.*; import java.awt.*; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; -import java.util.Arrays; -import java.util.Locale; -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.List; +import java.util.*; -public class WorkspacePanelModels extends JPanel implements IReloadableFilterable { - - private final WorkspacePanel workspacePanel; - - private final ResourceFilterModel filterModel; - private final JList modelList; +public class WorkspacePanelModels extends AbstractResourcePanel { WorkspacePanelModels(WorkspacePanel workspacePanel) { - super(new BorderLayout()); - setOpaque(false); - - this.workspacePanel = workspacePanel; - this.filterModel = new ResourceFilterModel<>(workspacePanel, - (item, query) -> item.getReadableName().toLowerCase(Locale.ENGLISH).contains(query) || item.getType() - .name().toLowerCase(Locale.ENGLISH).contains(query), Model::getReadableName); - modelList = new JList<>(filterModel); - - modelList.setOpaque(false); - modelList.setCellRenderer(new Render()); - modelList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - modelList.setLayoutOrientation(JList.HORIZONTAL_WRAP); - modelList.setVisibleRowCount(-1); + super(workspacePanel, new ResourceFilterModel<>(workspacePanel, + (item, query) -> item.getReadableName().toLowerCase(Locale.ENGLISH).contains(query) || item.getType() + .name().toLowerCase(Locale.ENGLISH).contains(query), Model::getReadableName), new Render(), + JList.HORIZONTAL_WRAP); - modelList.addMouseMotionListener(new MouseAdapter() { - @Override public void mouseMoved(MouseEvent e) { - super.mouseMoved(e); - int idx = modelList.locationToIndex(e.getPoint()); - Model model = modelList.getModel().getElementAt(idx); - if (model != null) { - workspacePanel.getMCreator().getStatusBar().setMessage(model.getReadableName()); + elementList.addMouseListener(new MouseAdapter() { + @Override public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2) { + Model model = elementList.getSelectedValue(); + if (model.getType() == Model.Type.JAVA) { + editSelectedModelAnimations(); + } else { + editSelectedModelTextureMappings(); + } } } }); - JScrollPane sp = new JScrollPane(modelList); - sp.setOpaque(false); - sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - sp.getViewport().setOpaque(false); - sp.getVerticalScrollBar().setUnitIncrement(11); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); - sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); - - add("Center", sp); - - TransparentToolBar bar = new TransparentToolBar(); - bar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 0)); - - JButton imp1 = L10N.button("action.workspace.resources.import_java_model"); - imp1.setIcon(UIRES.get("16px.importjavamodel")); - imp1.setContentAreaFilled(false); - imp1.setOpaque(false); - ComponentUtils.deriveFont(imp1, 12); - imp1.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - if (workspacePanel.getMCreator().getGeneratorStats().getBaseCoverageInfo().get("model_java") != GeneratorStats.CoverageStatus.NONE) - bar.add(imp1); - - imp1.addActionListener(e -> workspacePanel.getMCreator().actionRegistry.importJavaModel.doAction()); - - JButton imp2 = L10N.button("action.workspace.resources.import_json_model"); - imp2.setIcon(UIRES.get("16px.importjsonmodel")); - imp2.setContentAreaFilled(false); - imp2.setOpaque(false); - ComponentUtils.deriveFont(imp2, 12); - imp2.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); + addToolBarButton("action.workspace.resources.import_java_model", UIRES.get("16px.importjavamodel"), + e -> workspacePanel.getMCreator().actionRegistry.importJavaModel.doAction()); if (workspacePanel.getMCreator().getGeneratorStats().getBaseCoverageInfo().get("model_json") != GeneratorStats.CoverageStatus.NONE) - bar.add(imp2); - - imp2.addActionListener(e -> workspacePanel.getMCreator().actionRegistry.importJSONModel.doAction()); - - JButton imp3 = L10N.button("action.workspace.resources.import_obj_mtl_model"); - imp3.setIcon(UIRES.get("16px.importobjmodel")); - imp3.setContentAreaFilled(false); - imp3.setOpaque(false); - ComponentUtils.deriveFont(imp3, 12); - imp3.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); + addToolBarButton("action.workspace.resources.import_json_model", UIRES.get("16px.importjsonmodel"), + e -> workspacePanel.getMCreator().actionRegistry.importJSONModel.doAction()); if (workspacePanel.getMCreator().getGeneratorStats().getBaseCoverageInfo().get("model_obj") != GeneratorStats.CoverageStatus.NONE) - bar.add(imp3); - - imp3.addActionListener(e -> workspacePanel.getMCreator().actionRegistry.importOBJModel.doAction()); - - JButton editTextureMappings = L10N.button("workspace.3dmodels.edit_texture_mappings"); - editTextureMappings.setIcon(UIRES.get("16px.edit.gif")); - editTextureMappings.setOpaque(false); - editTextureMappings.setContentAreaFilled(false); - editTextureMappings.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(editTextureMappings); - editTextureMappings.addActionListener(e -> editSelectedModelTextureMappings()); - - JButton editModelAnimations = L10N.button("workspace.3dmodels.redefine_animations"); - editModelAnimations.setIcon(UIRES.get("16px.edit.gif")); - editModelAnimations.setOpaque(false); - editModelAnimations.setContentAreaFilled(false); - editModelAnimations.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(editModelAnimations); - editModelAnimations.addActionListener(e -> editSelectedModelAnimations()); - - JButton del = L10N.button("workspace.3dmodels.delete_selected"); - del.setIcon(UIRES.get("16px.delete.gif")); - del.setOpaque(false); - del.setContentAreaFilled(false); - del.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(del); - - del.addActionListener(e -> deleteCurrentlySelected()); - - modelList.addKeyListener(new KeyAdapter() { - @Override public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE) { - deleteCurrentlySelected(); - } + addToolBarButton("action.workspace.resources.import_obj_mtl_model", UIRES.get("16px.importobjmodel"), + e -> workspacePanel.getMCreator().actionRegistry.importOBJModel.doAction()); + + addToolBarButton("workspace.3dmodels.edit_texture_mappings", UIRES.get("16px.edit.gif"), + e -> editSelectedModelTextureMappings()); + addToolBarButton("workspace.3dmodels.redefine_animations", UIRES.get("16px.edit.gif"), + e -> editSelectedModelAnimations()); + addToolBarButton("common.search_usages", UIRES.get("16px.search"), e -> { + if (!elementList.isSelectionEmpty()) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set refs = new HashSet<>(); + for (Model model : elementList.getSelectedValuesList()) + refs.addAll(ReferencesFinder.searchModelUsages(workspacePanel.getMCreator().getWorkspace(), model)); + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + SearchUsagesDialog.showUsagesDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.resource.model"), refs); } }); + addToolBarButton("common.delete_selected", UIRES.get("16px.delete.gif"), e -> deleteCurrentlySelected()); + } - modelList.addMouseListener(new MouseAdapter() { - @Override public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2) { - Model model = modelList.getSelectedValue(); - if (model.getType() == Model.Type.JAVA) { - editSelectedModelAnimations(); - } else { - editSelectedModelTextureMappings(); - } - } - } - }); + @Override void deleteCurrentlySelected() { + List elements = elementList.getSelectedValuesList(); + if (!elements.isEmpty()) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - add("North", bar); - } + Set references = new HashSet<>(); + for (Model m : elementList.getSelectedValuesList()) + references.addAll(ReferencesFinder.searchModelUsages(workspacePanel.getMCreator().getWorkspace(), m)); - private void deleteCurrentlySelected() { - Model model = modelList.getSelectedValue(); - if (model != null) { - int n = JOptionPane.showConfirmDialog(workspacePanel.getMCreator(), - L10N.t("workspace.3dmodels.delete_confirm_message"), L10N.t("common.confirmation"), - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null); + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); - if (n == 0) { - Arrays.stream(model.getFiles()).forEach(File::delete); + if (SearchUsagesDialog.showDeleteDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.resource.model"), references)) { + elements.forEach(model -> Arrays.stream(model.getFiles()).forEach(File::delete)); reloadElements(); } } } + @Override public void reloadElements() { + filterModel.removeAllElements(); + filterModel.addAll(Model.getModels(workspacePanel.getMCreator().getWorkspace())); + } + private void editSelectedModelAnimations() { - Model model = modelList.getSelectedValue(); + Model model = elementList.getSelectedValue(); if (model.getType() == Model.Type.JAVA) { File file = model.getFile(); String code = FileIO.readFileToString(file); code = JavaModelAnimationEditorDialog.openAnimationEditorDialog(workspacePanel.getMCreator(), code); if (code != null) { FileIO.writeStringToFile(code, file); - - ProgressDialog dial = new ProgressDialog(workspacePanel.getMCreator(), - L10N.t("workspace.3dmodels.regenerating_code")); - Thread t = new Thread(() -> { - ProgressDialog.ProgressUnit p0 = new ProgressDialog.ProgressUnit( - L10N.t("workspace.3dmodels.regenerating_entity_code")); - dial.addProgress(p0); - - AtomicInteger i = new AtomicInteger(); - // this model might be in use, we need to regenerate code of mobs - workspacePanel.getMCreator().getWorkspace().getModElements().forEach(e -> { - if (e.getType() == ModElementType.LIVINGENTITY && !e.isCodeLocked()) { - GeneratableElement generatableElement = e.getGeneratableElement(); - if (generatableElement != null) { - // generate mod element - workspacePanel.getMCreator().getGenerator().generateElement(generatableElement); - } - } - - i.getAndIncrement(); - p0.setPercent((int) (((float) i.get() / (float) workspacePanel.getMCreator().getWorkspace() - .getModElements().size()) * 100.0f)); - dial.refreshDisplay(); - }); - - p0.ok(); - dial.refreshDisplay(); - - ProgressDialog.ProgressUnit p2 = new ProgressDialog.ProgressUnit( - L10N.t("workspace.3dmodels.rebuilding_workspace")); - dial.addProgress(p2); - workspacePanel.getMCreator().actionRegistry.buildWorkspace.doAction(); - p2.ok(); - dial.refreshDisplay(); - - dial.hideAll(); - }, "WorkspaceModelsReload"); - t.start(); - dial.setVisible(true); + workspacePanel.getMCreator().actionRegistry.buildWorkspace.doAction(); } } else { JOptionPane.showMessageDialog(workspacePanel.getMCreator(), @@ -254,7 +140,7 @@ private void editSelectedModelAnimations() { } private void editSelectedModelTextureMappings() { - Model model = modelList.getSelectedValue(); + Model model = elementList.getSelectedValue(); Map textureMappingMap = TexturedModel.getTextureMappingsForModel(model); if (textureMappingMap != null) { textureMappingMap = new TextureMappingDialog(textureMappingMap).openMappingDialog( @@ -271,25 +157,13 @@ private void editSelectedModelTextureMappings() { } } - @Override public void reloadElements() { - filterModel.removeAllElements(); - Model.getModels(workspacePanel.getMCreator().getWorkspace()).forEach(filterModel::addElement); - refilterElements(); - } - - @Override public void refilterElements() { - filterModel.refilter(); - } - static class Render extends JLabel implements ListCellRenderer { @Override public JLabel getListCellRendererComponent(JList list, Model ma, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(isSelected); - setBackground(isSelected ? - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT") : - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(isSelected ? Theme.current().getAltBackgroundColor() : Theme.current().getBackgroundColor()); setText(StringUtils.abbreviateString(ma.getReadableName(), 13)); setToolTipText(ma.getReadableName()); ComponentUtils.deriveFont(this, 11); diff --git a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelResources.java b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelResources.java index 822f9100d9f..f6acf831618 100644 --- a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelResources.java +++ b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelResources.java @@ -20,6 +20,7 @@ import net.mcreator.generator.GeneratorStats; import net.mcreator.ui.init.L10N; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.AbstractWorkspacePanel; import net.mcreator.ui.workspace.IReloadableFilterable; import net.mcreator.ui.workspace.WorkspacePanel; @@ -43,7 +44,7 @@ public WorkspacePanelResources(WorkspacePanel workspacePanel) { resourceTabs = new JTabbedPane() { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + g2d.setColor(Theme.current().getAltBackgroundColor()); g2d.setComposite(AlphaComposite.SrcOver.derive(0.45f)); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); diff --git a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelScreenshots.java b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelScreenshots.java index 5b82d5f7cd5..75c78450210 100644 --- a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelScreenshots.java +++ b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelScreenshots.java @@ -20,142 +20,76 @@ import net.mcreator.io.FileIO; import net.mcreator.io.UserFolderManager; -import net.mcreator.ui.component.JSelectableList; -import net.mcreator.ui.component.TransparentToolBar; import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.ListUtil; import net.mcreator.ui.dialogs.file.FileDialogs; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.SlickDarkScrollBarUI; -import net.mcreator.ui.workspace.IReloadableFilterable; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.WorkspacePanel; import net.mcreator.util.image.ImageUtils; import javax.swing.*; -import java.awt.*; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; -import java.util.Arrays; import java.util.List; -class WorkspacePanelScreenshots extends JPanel implements IReloadableFilterable { - - private final WorkspacePanel workspacePanel; - - private final ResourceFilterModel filterModel; - private final JSelectableList screenshotsList; +class WorkspacePanelScreenshots extends AbstractResourcePanel { WorkspacePanelScreenshots(WorkspacePanel workspacePanel) { - super(new BorderLayout()); - setOpaque(false); - - this.workspacePanel = workspacePanel; - filterModel = new ResourceFilterModel<>(workspacePanel, File::getName); - screenshotsList = new JSelectableList<>(filterModel); - - screenshotsList.setOpaque(false); - screenshotsList.setCellRenderer(new Render()); - screenshotsList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - screenshotsList.setLayoutOrientation(JList.HORIZONTAL_WRAP); - screenshotsList.setVisibleRowCount(-1); - - JScrollPane sp = new JScrollPane(screenshotsList); - sp.setOpaque(false); - sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - sp.getViewport().setOpaque(false); - sp.getVerticalScrollBar().setUnitIncrement(11); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); - sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); - - add("Center", sp); - - TransparentToolBar bar = new TransparentToolBar(); - bar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 0)); - - JButton edit = L10N.button("workspace.screenshots.export_selected"); - edit.setIcon(UIRES.get("16px.ext.gif")); - edit.setOpaque(false); - edit.setContentAreaFilled(false); - edit.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(edit); - edit.addActionListener(e -> exportSelectedScreenshots()); - - JButton useasbg = L10N.button("workspace.screenshots.use_as_background"); - useasbg.setIcon(UIRES.get("16px.textures")); - useasbg.setOpaque(false); - useasbg.setContentAreaFilled(false); - useasbg.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(useasbg); - useasbg.addActionListener(e -> useSelectedAsBackgrounds()); - - JButton del = L10N.button("workspace.screenshots.delete_selected"); - del.setIcon(UIRES.get("16px.delete.gif")); - del.setOpaque(false); - del.setContentAreaFilled(false); - del.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(del); - del.addActionListener(e -> { - screenshotsList.getSelectedValuesList().forEach(File::delete); - reloadElements(); - }); - screenshotsList.addKeyListener(new KeyAdapter() { - @Override public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE) { - screenshotsList.getSelectedValuesList().forEach(File::delete); - reloadElements(); - } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { - exportSelectedScreenshots(); - } - } - }); + super(workspacePanel, new ResourceFilterModel<>(workspacePanel, File::getName), new Render(), + JList.HORIZONTAL_WRAP); - screenshotsList.addMouseListener(new MouseAdapter() { + elementList.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) exportSelectedScreenshots(); } }); - add("North", bar); + addToolBarButton("workspace.screenshots.export_selected", UIRES.get("16px.ext.gif"), + e -> exportSelectedScreenshots()); + addToolBarButton("workspace.screenshots.use_as_background", UIRES.get("16px.textures"), + e -> useSelectedAsBackgrounds()); + addToolBarButton("common.delete_selected", UIRES.get("16px.delete.gif"), e -> { + deleteCurrentlySelected(); + reloadElements(); + }); } - private void useSelectedAsBackgrounds() { - screenshotsList.getSelectedValuesList().forEach( - f -> FileIO.copyFile(f, new File(UserFolderManager.getFileFromUserFolder("backgrounds"), f.getName()))); - JOptionPane.showMessageDialog(workspacePanel.getMCreator(), - L10N.t("workspace.screenshots.use_background_message"), L10N.t("workspace.screenshots.action_complete"), - JOptionPane.INFORMATION_MESSAGE); - } - - private void exportSelectedScreenshots() { - screenshotsList.getSelectedValuesList().forEach(f -> { - File to = FileDialogs.getSaveDialog(workspacePanel.getMCreator(), new String[] { ".png" }); - if (to != null) - FileIO.copyFile(f, to); - }); + @Override void deleteCurrentlySelected() { + List elements = elementList.getSelectedValuesList(); + elements.forEach(File::delete); } @Override public void reloadElements() { - List selected = screenshotsList.getSelectedValuesList(); + List selected = elementList.getSelectedValuesList(); filterModel.removeAllElements(); File[] screenshots = new File(workspacePanel.getMCreator().getWorkspaceFolder(), "run/screenshots/").listFiles(); + if (screenshots != null) - Arrays.stream(screenshots).forEach(filterModel::addElement); + filterModel.addAll(List.of(screenshots)); - ListUtil.setSelectedValues(screenshotsList, selected); + ListUtil.setSelectedValues(elementList, selected); + } - refilterElements(); + private void useSelectedAsBackgrounds() { + elementList.getSelectedValuesList().forEach( + f -> FileIO.copyFile(f, new File(UserFolderManager.getFileFromUserFolder("backgrounds"), f.getName()))); + JOptionPane.showMessageDialog(workspacePanel.getMCreator(), + L10N.t("workspace.screenshots.use_background_message"), L10N.t("workspace.screenshots.action_complete"), + JOptionPane.INFORMATION_MESSAGE); } - @Override public void refilterElements() { - filterModel.refilter(); + private void exportSelectedScreenshots() { + elementList.getSelectedValuesList().forEach(f -> { + File to = FileDialogs.getSaveDialog(workspacePanel.getMCreator(), new String[] { ".png" }); + if (to != null) + FileIO.copyFile(f, to); + }); } static class Render extends JLabel implements ListCellRenderer { @@ -164,12 +98,10 @@ static class Render extends JLabel implements ListCellRenderer { public JLabel getListCellRendererComponent(JList list, File ma, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(isSelected); - setBackground(isSelected ? - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT") : - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground(isSelected ? Theme.current().getAltBackgroundColor() : Theme.current().getBackgroundColor()); setText(ma.getName()); ComponentUtils.deriveFont(this, 11); - setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setForeground(Theme.current().getForegroundColor()); setVerticalTextPosition(BOTTOM); setHorizontalTextPosition(CENTER); setHorizontalAlignment(CENTER); diff --git a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelSounds.java b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelSounds.java index 1b524cde3a1..cedcf9b01ae 100644 --- a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelSounds.java +++ b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelSounds.java @@ -18,146 +18,68 @@ package net.mcreator.ui.workspace.resources; -import net.mcreator.ui.component.JSelectableList; -import net.mcreator.ui.component.TransparentToolBar; import net.mcreator.ui.component.util.ComponentUtils; +import net.mcreator.ui.dialogs.SearchUsagesDialog; import net.mcreator.ui.dialogs.SoundElementDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; -import net.mcreator.ui.laf.SlickDarkScrollBarUI; -import net.mcreator.ui.workspace.IReloadableFilterable; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.WorkspacePanel; import net.mcreator.util.ListUtils; import net.mcreator.util.SoundUtils; +import net.mcreator.workspace.elements.ModElement; import net.mcreator.workspace.elements.SoundElement; +import net.mcreator.workspace.references.ReferencesFinder; import javax.swing.*; import java.awt.*; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; +import java.util.HashSet; import java.util.List; +import java.util.Set; -public class WorkspacePanelSounds extends JPanel implements IReloadableFilterable { - - private final WorkspacePanel workspacePanel; - - private final ResourceFilterModel filterModel; +public class WorkspacePanelSounds extends AbstractResourcePanel { WorkspacePanelSounds(WorkspacePanel workspacePanel) { - super(new BorderLayout()); - setOpaque(false); - - this.workspacePanel = workspacePanel; - this.filterModel = new ResourceFilterModel<>(workspacePanel, SoundElement::getName); - - JSelectableList soundElementList = new JSelectableList<>(filterModel); - soundElementList.setOpaque(false); - soundElementList.setCellRenderer(new Render()); - soundElementList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - - soundElementList.addMouseListener(new MouseAdapter() { - @Override public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2) - editSelectedSound(soundElementList.getSelectedValue()); + super(workspacePanel, new ResourceFilterModel<>(workspacePanel, SoundElement::getName), new Render()); + + addToolBarButton("action.workspace.resources.import_sound", UIRES.get("16px.open.gif"), + e -> workspacePanel.getMCreator().actionRegistry.importSound.doAction()); + addToolBarButton("workspace.sounds.edit_selected", UIRES.get("16px.edit.gif"), + e -> editSelectedSound(elementList.getSelectedValue())); + addToolBarButton("common.search_usages", UIRES.get("16px.search"), e -> { + if (!elementList.isSelectionEmpty()) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set refs = new HashSet<>(); + for (SoundElement sound : elementList.getSelectedValuesList()) + refs.addAll(ReferencesFinder.searchSoundUsages(workspacePanel.getMCreator().getWorkspace(), sound)); + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + SearchUsagesDialog.showUsagesDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.resource.sound"), refs); } }); - - JScrollPane sp = new JScrollPane(soundElementList); - sp.setOpaque(false); - sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - sp.getViewport().setOpaque(false); - sp.getVerticalScrollBar().setUnitIncrement(11); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); - sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); - sp.setBorder(null); - - add("Center", sp); - - TransparentToolBar bar = new TransparentToolBar(); - bar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 0)); - - JButton importsound = L10N.button("action.workspace.resources.import_sound"); - importsound.setIcon(UIRES.get("16px.open.gif")); - importsound.setContentAreaFilled(false); - importsound.setOpaque(false); - ComponentUtils.deriveFont(importsound, 12); - importsound.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(importsound); - - JButton edit = L10N.button("workspace.sounds.edit_selected"); - edit.setIcon(UIRES.get("16px.edit.gif")); - edit.setContentAreaFilled(false); - edit.setOpaque(false); - ComponentUtils.deriveFont(edit, 12); - edit.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(edit); - - JButton del = L10N.button("workspace.sounds.delete_selected"); - del.setIcon(UIRES.get("16px.delete.gif")); - del.setOpaque(false); - del.setContentAreaFilled(false); - del.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(del); - - del.addActionListener(a -> deleteSelectedSound(workspacePanel, soundElementList)); - - JButton play = L10N.button("workspace.sounds.play_selected"); - play.setIcon(UIRES.get("16px.play")); - play.setOpaque(false); - play.setContentAreaFilled(false); - play.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(play); - play.addMouseListener(new MouseAdapter() { + addToolBarButton("common.delete_selected", UIRES.get("16px.delete.gif"), e -> deleteCurrentlySelected()); + addToolBarButton("workspace.sounds.play_selected", UIRES.get("16px.play"), new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { - SoundElement soundElement = soundElementList.getSelectedValue(); + SoundElement soundElement = elementList.getSelectedValue(); if (soundElement != null) { if (!soundElement.getFiles().isEmpty()) { SoundUtils.playSound( new File(workspacePanel.getMCreator().getWorkspace().getFolderManager().getSoundsDir(), ListUtils.getRandomItem(soundElement.getFiles()) + ".ogg")); - play.setEnabled(false); } } } @Override public void mouseReleased(MouseEvent e) { SoundUtils.stopAllSounds(); - play.setEnabled(true); } }); - - soundElementList.addKeyListener(new KeyAdapter() { - @Override public void keyPressed(KeyEvent e) { - switch (e.getKeyCode()) { - case KeyEvent.VK_DELETE -> deleteSelectedSound(workspacePanel, soundElementList); - case KeyEvent.VK_ENTER -> editSelectedSound(soundElementList.getSelectedValue()); - } - } - }); - - edit.addActionListener(e -> editSelectedSound(soundElementList.getSelectedValue())); - importsound.addActionListener(e -> workspacePanel.getMCreator().actionRegistry.importSound.doAction()); - add("North", bar); - - } - - private void deleteSelectedSound(WorkspacePanel workspacePanel, JSelectableList soundElementList) { - List soundElements = soundElementList.getSelectedValuesList(); - if (!soundElements.isEmpty()) { - int n = JOptionPane.showConfirmDialog(workspacePanel.getMCreator(), - L10N.t("workspace.sounds.confirm_deletion_message"), L10N.t("common.confirmation"), - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); - if (n == 0) { - soundElements.forEach(workspacePanel.getMCreator().getWorkspace()::removeSoundElement); - reloadElements(); - } - } } private void editSelectedSound(SoundElement selectedValue) { @@ -168,14 +90,28 @@ private void editSelectedSound(SoundElement selectedValue) { } } - @Override public void reloadElements() { - filterModel.removeAllElements(); - workspacePanel.getMCreator().getWorkspace().getSoundElements().forEach(filterModel::addElement); - refilterElements(); + @Override void deleteCurrentlySelected() { + List elements = elementList.getSelectedValuesList(); + if (!elements.isEmpty()) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set references = new HashSet<>(); + for (SoundElement s : elements) + references.addAll(ReferencesFinder.searchSoundUsages(workspacePanel.getMCreator().getWorkspace(), s)); + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + + if (SearchUsagesDialog.showDeleteDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.resource.sound"), references)) { + elements.forEach(workspacePanel.getMCreator().getWorkspace()::removeSoundElement); + reloadElements(); + } + } } - @Override public void refilterElements() { - filterModel.refilter(); + @Override public void reloadElements() { + filterModel.removeAllElements(); + filterModel.addAll(workspacePanel.getMCreator().getWorkspace().getSoundElements()); } static class Render extends JPanel implements ListCellRenderer { @@ -193,8 +129,8 @@ public JPanel getListCellRendererComponent(JList list, S JPanel cont = new JPanel(new BorderLayout()); cont.setBackground(isSelected ? - ((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")).brighter() : - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + (Theme.current().getAltBackgroundColor()).brighter() : + Theme.current().getAltBackgroundColor()); cont.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); JPanel namepan = new JPanel(new BorderLayout()); @@ -202,7 +138,7 @@ public JPanel getListCellRendererComponent(JList list, S namepan.setOpaque(false); JLabel name = new JLabel(ma.getName()); - name.setFont(MCreatorTheme.secondary_font.deriveFont(20.0f)); + name.setFont(Theme.current().getSecondaryFont().deriveFont(20.0f)); namepan.add("North", name); JLabel name2 = L10N.label("workspace.sounds.files", String.join(", ", ma.getFiles())); diff --git a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelStructures.java b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelStructures.java index fcb19c93152..da2aaf4cd89 100644 --- a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelStructures.java +++ b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelStructures.java @@ -18,102 +18,64 @@ package net.mcreator.ui.workspace.resources; -import net.mcreator.ui.component.JSelectableList; -import net.mcreator.ui.component.TransparentToolBar; import net.mcreator.ui.component.util.ComponentUtils; +import net.mcreator.ui.dialogs.SearchUsagesDialog; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.SlickDarkScrollBarUI; -import net.mcreator.ui.workspace.IReloadableFilterable; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.WorkspacePanel; +import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ReferencesFinder; import javax.swing.*; import java.awt.*; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; +import java.util.HashSet; import java.util.List; +import java.util.Set; -public class WorkspacePanelStructures extends JPanel implements IReloadableFilterable { - - private final WorkspacePanel workspacePanel; - - private final ResourceFilterModel filterModel; +public class WorkspacePanelStructures extends AbstractResourcePanel { WorkspacePanelStructures(WorkspacePanel workspacePanel) { - super(new BorderLayout()); - setOpaque(false); - - this.workspacePanel = workspacePanel; - this.filterModel = new ResourceFilterModel<>(workspacePanel, String::toString); - - JSelectableList structureElementList = new JSelectableList<>(filterModel); - structureElementList.setOpaque(false); - structureElementList.setCellRenderer(new Render()); - structureElementList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - - JScrollPane sp = new JScrollPane(structureElementList); - sp.setOpaque(false); - sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - sp.getViewport().setOpaque(false); - sp.getVerticalScrollBar().setUnitIncrement(11); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); - sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); - - add("Center", sp); - - TransparentToolBar bar = new TransparentToolBar(); - bar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 0)); - - JButton importnbt = L10N.button("action.workspace.resources.import_structure"); - importnbt.setIcon(UIRES.get("16px.open.gif")); - importnbt.setContentAreaFilled(false); - importnbt.setOpaque(false); - ComponentUtils.deriveFont(importnbt, 12); - importnbt.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(importnbt); - - JButton importmc = L10N.button("action.workspace.resources.import_structure_from_minecraft"); - importmc.setIcon(UIRES.get("16px.open.gif")); - importmc.setContentAreaFilled(false); - importmc.setOpaque(false); - ComponentUtils.deriveFont(importmc, 12); - importmc.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(importmc); - - JButton del = L10N.button("workspace.sounds.delete_selected"); - del.setIcon(UIRES.get("16px.delete.gif")); - del.setOpaque(false); - del.setContentAreaFilled(false); - del.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); - bar.add(del); - - del.addActionListener(a -> deleteCurrentlySelected(structureElementList)); - - structureElementList.addKeyListener(new KeyAdapter() { - @Override public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_DELETE) { - deleteCurrentlySelected(structureElementList); + super(workspacePanel, new ResourceFilterModel<>(workspacePanel, String::toString), new Render()); + + addToolBarButton("action.workspace.resources.import_structure", UIRES.get("16px.open.gif"), + e -> workspacePanel.getMCreator().actionRegistry.importStructure.doAction()); + addToolBarButton("action.workspace.resources.import_structure_from_minecraft", UIRES.get("16px.open.gif"), + e -> workspacePanel.getMCreator().actionRegistry.importStructureFromMinecraft.doAction()); + addToolBarButton("common.search_usages", UIRES.get("16px.search"), e -> { + if (!elementList.isSelectionEmpty()) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set refs = new HashSet<>(); + for (String structure : elementList.getSelectedValuesList()) { + refs.addAll(ReferencesFinder.searchStructureUsages(workspacePanel.getMCreator().getWorkspace(), + structure)); } + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + SearchUsagesDialog.showUsagesDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.resource.structure"), refs); } }); + addToolBarButton("common.delete_selected", UIRES.get("16px.delete.gif"), e -> deleteCurrentlySelected()); + } - importnbt.addActionListener(e -> workspacePanel.getMCreator().actionRegistry.importStructure.doAction()); - importmc.addActionListener( - e -> workspacePanel.getMCreator().actionRegistry.importStructureFromMinecraft.doAction()); + @Override void deleteCurrentlySelected() { + List elements = elementList.getSelectedValuesList(); + if (!elements.isEmpty()) { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - add("North", bar); + Set references = new HashSet<>(); + for (String structure : elements) { + references.addAll( + ReferencesFinder.searchStructureUsages(workspacePanel.getMCreator().getWorkspace(), structure)); + } - } + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); - private void deleteCurrentlySelected(JSelectableList structureElementList) { - List files = structureElementList.getSelectedValuesList(); - if (!files.isEmpty()) { - int n = JOptionPane.showConfirmDialog(workspacePanel.getMCreator(), - L10N.t("workspace.structure.confirm_deletion_message"), L10N.t("common.confirmation"), - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); - if (n == 0) { - files.forEach(workspacePanel.getMCreator().getFolderManager()::removeStructure); + if (SearchUsagesDialog.showDeleteDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.resource.structure"), references)) { + elements.forEach(workspacePanel.getMCreator().getFolderManager()::removeStructure); reloadElements(); } } @@ -121,12 +83,7 @@ private void deleteCurrentlySelected(JSelectableList structureElementLis @Override public void reloadElements() { filterModel.removeAllElements(); - workspacePanel.getMCreator().getFolderManager().getStructureList().forEach(filterModel::addElement); - refilterElements(); - } - - @Override public void refilterElements() { - filterModel.refilter(); + filterModel.addAll(workspacePanel.getMCreator().getFolderManager().getStructureList()); } static class Render extends JLabel implements ListCellRenderer { @@ -140,9 +97,8 @@ static class Render extends JLabel implements ListCellRenderer { public JLabel getListCellRendererComponent(JList list, String ma, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(isSelected); - setBackground(isSelected ? - (Color) UIManager.get("MCreatorLAF.MAIN_TINT") : - (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + setBackground( + isSelected ? Theme.current().getInterfaceAccentColor() : Theme.current().getBackgroundColor()); setText(" " + ma); ComponentUtils.deriveFont(this, 17); setIcon(UIRES.get("16px.ext.gif")); diff --git a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelTextures.java b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelTextures.java index 7e189fb6e76..16e660148cc 100644 --- a/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelTextures.java +++ b/src/main/java/net/mcreator/ui/workspace/resources/WorkspacePanelTextures.java @@ -25,11 +25,13 @@ import net.mcreator.ui.component.util.ComponentUtils; import net.mcreator.ui.component.util.ListUtil; import net.mcreator.ui.component.util.PanelUtils; +import net.mcreator.ui.dialogs.SearchUsagesDialog; import net.mcreator.ui.dialogs.TextureImportDialogs; import net.mcreator.ui.dialogs.file.FileDialogs; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; import net.mcreator.ui.laf.SlickDarkScrollBarUI; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.views.editor.image.ImageMakerView; import net.mcreator.ui.workspace.AbstractWorkspacePanel; import net.mcreator.ui.workspace.IReloadableFilterable; @@ -37,6 +39,8 @@ import net.mcreator.util.FilenameUtilsPatched; import net.mcreator.util.StringUtils; import net.mcreator.util.image.ImageUtils; +import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.references.ReferencesFinder; import javax.swing.*; import java.awt.*; @@ -45,10 +49,8 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; -import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class WorkspacePanelTextures extends JPanel implements IReloadableFilterable { @@ -95,8 +97,8 @@ public class WorkspacePanelTextures extends JPanel implements IReloadableFiltera sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); sp.getViewport().setOpaque(false); sp.getVerticalScrollBar().setUnitIncrement(20); - sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), - (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar())); + sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI(Theme.current().getBackgroundColor(), + Theme.current().getAltBackgroundColor(), sp.getVerticalScrollBar())); sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0)); sp.setBorder(null); @@ -106,9 +108,8 @@ public class WorkspacePanelTextures extends JPanel implements IReloadableFiltera bar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 0)); JPopupMenu createMenu = new JPopupMenu(); - createMenu.setBorder( - BorderFactory.createMatteBorder(0, 3, 0, 0, (Color) UIManager.get("MCreatorLAF.MAIN_TINT"))); - createMenu.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + createMenu.setBorder(BorderFactory.createMatteBorder(0, 3, 0, 0, Theme.current().getInterfaceAccentColor())); + createMenu.setBackground(Theme.current().getAltBackgroundColor()); createMenu.add(workspacePanel.getMCreator().actionRegistry.createMCItemTexture); createMenu.add(workspacePanel.getMCreator().actionRegistry.createArmorTexture); createMenu.add(workspacePanel.getMCreator().actionRegistry.createAnimatedTexture); @@ -119,9 +120,8 @@ public class WorkspacePanelTextures extends JPanel implements IReloadableFiltera bar.add(create); JPopupMenu importMenu = new JPopupMenu(); - importMenu.setBorder( - BorderFactory.createMatteBorder(0, 3, 0, 0, (Color) UIManager.get("MCreatorLAF.MAIN_TINT"))); - importMenu.setBackground((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")); + importMenu.setBorder(BorderFactory.createMatteBorder(0, 3, 0, 0, Theme.current().getInterfaceAccentColor())); + importMenu.setBackground(Theme.current().getAltBackgroundColor()); importMenu.add(workspacePanel.getMCreator().actionRegistry.importBlockTexture); importMenu.add(workspacePanel.getMCreator().actionRegistry.importItemTexture); importMenu.add(workspacePanel.getMCreator().actionRegistry.importEntityTexture); @@ -142,8 +142,30 @@ public class WorkspacePanelTextures extends JPanel implements IReloadableFiltera bar.add(AbstractWorkspacePanel.createToolBarButton("workspace.textures.duplicate_selected", UIRES.get("16px.duplicate.gif"), e -> duplicateSelectedFile())); - bar.add(AbstractWorkspacePanel.createToolBarButton("workspace.textures.delete_selected", - UIRES.get("16px.delete.gif"), e -> deleteCurrentlySelected())); + bar.add(AbstractWorkspacePanel.createToolBarButton("workspace.textures.replace_selected", + UIRES.get("16px.editorder.png"), e -> replaceSelectedFile())); + + bar.add(AbstractWorkspacePanel.createToolBarButton("common.search_usages", UIRES.get("16px.search"), e -> { + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set refs = new HashSet<>(); + for (TextureType section : TextureType.getSupportedTypes(workspacePanel.getMCreator().getWorkspace(), + true)) { + JList list = mapLists.get(section.getID()).list(); + for (File texture : list.getSelectedValuesList()) { + refs.addAll( + ReferencesFinder.searchTextureUsages(workspacePanel.getMCreator().getWorkspace(), texture, + section)); + } + } + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); + SearchUsagesDialog.showUsagesDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.resource.texture"), refs); + })); + + bar.add(AbstractWorkspacePanel.createToolBarButton("common.delete_selected", UIRES.get("16px.delete.gif"), + e -> deleteCurrentlySelected())); bar.add(AbstractWorkspacePanel.createToolBarButton("workspace.textures.export_selected", UIRES.get("16px.ext.gif"), e -> exportSelectedImages())); @@ -154,11 +176,23 @@ public class WorkspacePanelTextures extends JPanel implements IReloadableFiltera private void deleteCurrentlySelected() { List files = listGroup.getSelectedItemsList(); if (!files.isEmpty()) { - int n = JOptionPane.showConfirmDialog(workspacePanel.getMCreator(), - L10N.t("workspace.textures.confirm_deletion_message"), L10N.t("common.confirmation"), - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null); + workspacePanel.getMCreator().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + Set references = new HashSet<>(); + for (TextureType section : TextureType.getSupportedTypes(workspacePanel.getMCreator().getWorkspace(), + true)) { + JList list = mapLists.get(section.getID()).list(); + for (File texture : list.getSelectedValuesList()) { + references.addAll( + ReferencesFinder.searchTextureUsages(workspacePanel.getMCreator().getWorkspace(), texture, + section)); + } + } + + workspacePanel.getMCreator().setCursor(Cursor.getDefaultCursor()); - if (n == 0) { + if (SearchUsagesDialog.showDeleteDialog(workspacePanel.getMCreator(), + L10N.t("dialog.search_usages.type.resource.texture"), references)) { files.forEach(file -> { if (file != null) { file.delete(); @@ -193,6 +227,18 @@ private void duplicateSelectedFile() { } } + private void replaceSelectedFile() { + File file = listGroup.getSelectedItem(); + if (file != null) { + File newTexture = FileDialogs.getOpenDialog(workspacePanel.getMCreator(), new String[] { ".png" }); + if (newTexture != null) { + FileIO.copyFile(newTexture, file); + new ImageIcon(file.getAbsolutePath()).getImage().flush(); + reloadElements(); + } + } + } + private void editSelectedFile() { File file = listGroup.getSelectedItem(); if (file != null) { @@ -228,28 +274,20 @@ private JComponentWithList createListElement(String title) { } @Override public void reloadElements() { - new Thread(() -> { - Arrays.stream(TextureType.values()).forEach(section -> { - List selected = mapLists.get(section.getID()).list().getSelectedValuesList(); + Arrays.stream(TextureType.values()).forEach(section -> { + List selected = mapLists.get(section.getID()).list().getSelectedValuesList(); - // instead of clearing and adding all elements, we just replace the model (less flickering) - ResourceFilterModel newfm = new ResourceFilterModel<>(workspacePanel, File::getName); - workspacePanel.getMCreator().getFolderManager().getTexturesList(section).forEach(newfm::addElement); + JList list = mapLists.get(section.getID()).list(); - SwingUtilities.invokeLater(() -> { - JList list = mapLists.get(section.getID()).list(); - list.setModel(newfm); - ListUtil.setSelectedValues(list, selected); + ((ResourceFilterModel) list.getModel()).removeAllElements(); + ((ResourceFilterModel) list.getModel()).addAll( + workspacePanel.getMCreator().getFolderManager().getTexturesList(section)); - refilterElements(); - }); - }); + ListUtil.setSelectedValues(list, selected); + }); - SwingUtilities.invokeLater(() -> { - textureRender.invalidateIconCache(); - refilterElements(); - }); - }, "WorkspaceTexturesReload").start(); + textureRender.invalidateIconCache(); + refilterElements(); } @Override public void refilterElements() { @@ -287,11 +325,11 @@ private void invalidateIconCache() { public Component getListCellRendererComponent(JList list, File ma, int index, boolean isSelected, boolean cellHasFocus) { if (isSelected) { - setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setForeground(Theme.current().getBackgroundColor()); + setBackground(Theme.current().getForegroundColor()); setOpaque(true); } else { - setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setForeground(Theme.current().getForegroundColor()); setOpaque(false); } diff --git a/src/main/java/net/mcreator/ui/workspace/selector/RecentWorkspacesRenderer.java b/src/main/java/net/mcreator/ui/workspace/selector/RecentWorkspacesRenderer.java index 05b3ba04fcd..74df62ae20c 100644 --- a/src/main/java/net/mcreator/ui/workspace/selector/RecentWorkspacesRenderer.java +++ b/src/main/java/net/mcreator/ui/workspace/selector/RecentWorkspacesRenderer.java @@ -20,7 +20,7 @@ import net.mcreator.generator.GeneratorFlavor; import net.mcreator.ui.init.L10N; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.util.StringUtils; import net.mcreator.util.image.ImageUtils; @@ -52,12 +52,10 @@ public Component getListCellRendererComponent(JList" + StringUtils.abbreviateString(value.getName(), 17) @@ -92,9 +88,8 @@ public Component getListCellRendererComponent(JList defaultListModel = new DefaultListModel<>(); recentWorkspaces.getList().forEach(defaultListModel::addElement); JList recentsList = new JList<>(defaultListModel); - recentsList.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + recentsList.setBackground(Theme.current().getSecondAltBackgroundColor()); recentsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); recentsList.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent mouseEvent) { @@ -377,14 +379,17 @@ private void reloadRecents() { recentsList.setCellRenderer(new RecentWorkspacesRenderer()); JScrollPane scrollPane = new JScrollPane(recentsList); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + scrollPane.getVerticalScrollBar() + .setUI(new SlickDarkScrollBarUI(Theme.current().getSecondAltBackgroundColor(), + Theme.current().getAltBackgroundColor(), scrollPane.getVerticalScrollBar())); recentPanel.add(scrollPane); } else if (recentWorkspaces == null) { JLabel norecents = L10N.label("dialog.workspace_selector.no_workspaces_loaded"); - norecents.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + norecents.setForeground(Theme.current().getAltForegroundColor()); recentPanel.add(PanelUtils.totalCenterInPanel(norecents)); } else { JLabel norecents = L10N.label("dialog.workspace_selector.no_workspaces"); - norecents.setForeground((Color) UIManager.get("MCreatorLAF.GRAY_COLOR")); + norecents.setForeground(Theme.current().getAltForegroundColor()); recentPanel.add(PanelUtils.totalCenterInPanel(norecents)); } @@ -400,7 +405,7 @@ private void reloadRecents() { private JButton mainWorkspaceButton(String text, ImageIcon icon, ActionListener event) { JButton newWorkspace = new JButton(text); ComponentUtils.deriveFont(newWorkspace, 15); - newWorkspace.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + newWorkspace.setForeground(Theme.current().getForegroundColor()); newWorkspace.setPreferredSize(new Dimension(240, 48)); newWorkspace.setMargin(new Insets(0, 0, 0, 0)); newWorkspace.setIcon(icon); @@ -422,7 +427,7 @@ private JButton mainWorkspaceButton(String text, ImageIcon icon, ActionListener public void addWorkspaceButton(String text, ImageIcon icon, ActionListener event) { JButton workspaceButton = new JButton(text); ComponentUtils.deriveFont(workspaceButton, 11); - workspaceButton.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + workspaceButton.setForeground(Theme.current().getForegroundColor()); workspaceButton.setPreferredSize(new Dimension(240, 22)); workspaceButton.setMargin(new Insets(0, 0, 0, 0)); workspaceButton.setIcon( @@ -518,22 +523,19 @@ private void initWebsitePanel() { JComponent south = PanelUtils.westAndEastElement(nov, motwpan, 20, 20); south.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); - JComponent hol = PanelUtils.gridElements(1, 1, south); - hol.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); JPanel soim; if (!Launcher.version.isSnapshot()) { soim = new ImagePanel(ImageUtils.darken(ImageUtils.toBufferedImage(UIRES.getBuiltIn("splash").getImage()))); ((ImagePanel) soim).setFitToWidth(true); - ((ImagePanel) soim).setOffsetY(-60); + ((ImagePanel) soim).setOffsetY(-400); } else { soim = new JPanel(); - soim.setBackground((Color) UIManager.get("MCreatorLAF.BLACK_ACCENT")); + soim.setBackground(Theme.current().getSecondAltBackgroundColor()); } soim.setLayout(new BorderLayout()); - soim.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"))); - + soim.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Theme.current().getAltBackgroundColor())); soim.add(south); add("South", soim); diff --git a/src/main/java/net/mcreator/ui/wysiwyg/WYSIWYG.java b/src/main/java/net/mcreator/ui/wysiwyg/WYSIWYG.java index db777ffcce3..f20a02b8847 100644 --- a/src/main/java/net/mcreator/ui/wysiwyg/WYSIWYG.java +++ b/src/main/java/net/mcreator/ui/wysiwyg/WYSIWYG.java @@ -25,7 +25,7 @@ import net.mcreator.ui.component.zoompane.JZoomPane; import net.mcreator.ui.component.zoompane.JZoomport; import net.mcreator.ui.init.UIRES; -import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.FilenameUtilsPatched; @@ -82,7 +82,7 @@ public class WYSIWYG extends JComponent implements MouseMotionListener, MouseLis WYSIWYG(WYSIWYGEditor wysiwygEditor) { if (fontMC == null) - fontMC = MCreatorTheme.console_font.deriveFont(8f).deriveFont(Font.BOLD); + fontMC = Theme.current().getConsoleFont().deriveFont(8f).deriveFont(Font.BOLD); this.wysiwygEditor = wysiwygEditor; @@ -137,7 +137,7 @@ public void addComponent(GUIComponent component) { g.drawImage(background, 0, 0, null); - g.setColor((Color) UIManager.get("MCreatorLAF.MAIN_TINT")); + g.setColor(Theme.current().getInterfaceAccentColor()); g.drawRect(0, 0, getWidth(), getHeight()); // draw wysiwyg diff --git a/src/main/java/net/mcreator/ui/wysiwyg/WYSIWYGEditor.java b/src/main/java/net/mcreator/ui/wysiwyg/WYSIWYGEditor.java index dab6648d3ba..3a106abac46 100644 --- a/src/main/java/net/mcreator/ui/wysiwyg/WYSIWYGEditor.java +++ b/src/main/java/net/mcreator/ui/wysiwyg/WYSIWYGEditor.java @@ -37,6 +37,7 @@ import net.mcreator.ui.help.IHelpContext; import net.mcreator.ui.init.L10N; import net.mcreator.ui.init.UIRES; +import net.mcreator.ui.laf.themes.Theme; import net.mcreator.ui.validation.component.VComboBox; import net.mcreator.ui.workspace.resources.TextureType; import net.mcreator.util.ArrayListListModel; @@ -191,9 +192,9 @@ public WYSIWYGEditor(final MCreator mcreator, boolean isNotOverlayType) { JPanel comppan = new JPanel(new BorderLayout()); comppan.setOpaque(false); comppan.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor(), 1), (L10N.t("elementgui.gui.component_list")), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); TransparentToolBar bar2 = new TransparentToolBar(); bar2.setBorder(null); @@ -315,9 +316,9 @@ public WYSIWYGEditor(final MCreator mcreator, boolean isNotOverlayType) { moveComponentDown.setEnabled(false); adds.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor(), 1), (L10N.t("elementgui.gui.editor_options")), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); adds.setOpaque(false); @@ -327,9 +328,9 @@ public WYSIWYGEditor(final MCreator mcreator, boolean isNotOverlayType) { JPanel adds2 = new JPanel(); adds2.setLayout(new BoxLayout(adds2, BoxLayout.PAGE_AXIS)); adds2.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor(), 1), (L10N.t("elementgui.gui.gui_properties")), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); JComponent pon = PanelUtils.westAndEastElement(new JLabel((L10N.t("elementgui.gui.gui_type"))), guiType); @@ -382,9 +383,9 @@ public WYSIWYGEditor(final MCreator mcreator, boolean isNotOverlayType) { ovst2.setOpaque(false); ovst.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createLineBorder((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), 1), + BorderFactory.createLineBorder(Theme.current().getAltBackgroundColor(), 1), L10N.t("elementgui.gui.overlay_properties"), 0, 0, getFont().deriveFont(12.0f), - (Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"))); + Theme.current().getForegroundColor())); overlayBaseTexture.addActionListener(e -> editor.repaint()); overlayBaseTexture.setPrototypeDisplayValue("XXXXXX"); @@ -426,7 +427,7 @@ public WYSIWYGEditor(final MCreator mcreator, boolean isNotOverlayType) { JPanel zoomHolder = new JPanel(new BorderLayout()) { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setColor((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); + g2d.setColor(Theme.current().getBackgroundColor()); g2d.setComposite(AlphaComposite.SrcOver.derive(0.6f)); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); @@ -508,11 +509,11 @@ static class GUIComponentRenderer extends JLabel implements ListCellRenderer list, Object value, int index, boolean isSelected, boolean cellHasFocus) { if (isSelected) { - setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT")); - setBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setForeground(Theme.current().getBackgroundColor()); + setBackground(Theme.current().getForegroundColor()); setOpaque(true); } else { - setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR")); + setForeground(Theme.current().getForegroundColor()); setOpaque(false); } diff --git a/src/main/java/net/mcreator/util/TerribleModuleHacks.java b/src/main/java/net/mcreator/util/TerribleModuleHacks.java index 0abd14e9716..d8312597275 100644 --- a/src/main/java/net/mcreator/util/TerribleModuleHacks.java +++ b/src/main/java/net/mcreator/util/TerribleModuleHacks.java @@ -29,19 +29,19 @@ public class TerribleModuleHacks { private static final Logger LOG = LogManager.getLogger("Terrible module hacks"); - public static void openAllUnnamed() { + public static void openAllFor(Module moduleToOpenFor) { ModuleLayer.boot().modules().forEach(module -> module.getPackages() - .forEach(pn -> addOpens(module, pn, ClassLoader.getSystemClassLoader().getUnnamedModule()))); + .forEach(pn -> addOpens(module, pn, moduleToOpenFor))); } public static void openMCreatorRequirements() { - // MCreator theme + // Required by: LafUtil - to apply custom CSS styles + ModuleLayer.boot().findModule("java.desktop") + .ifPresent(module -> addOpens(module, "sun.awt", net.mcreator.ui.laf.LafUtil.class.getModule())); ModuleLayer.boot().findModule("java.desktop").ifPresent( - module -> addOpens(module, "sun.awt", net.mcreator.ui.laf.MCreatorLookAndFeel.class.getModule())); - ModuleLayer.boot().findModule("java.desktop").ifPresent(module -> addOpens(module, "javax.swing.text.html", - net.mcreator.ui.laf.MCreatorLookAndFeel.class.getModule())); + module -> addOpens(module, "javax.swing.text.html", net.mcreator.ui.laf.LafUtil.class.getModule())); - // Blockly panel transparency + // Required by: BlocklyPanel - for transparency ModuleLayer.boot().findModule("javafx.web").ifPresent(module -> addOpens(module, "com.sun.javafx.webkit", net.mcreator.ui.blockly.BlocklyPanel.class.getModule())); ModuleLayer.boot().findModule("javafx.web").ifPresent( diff --git a/src/main/java/net/mcreator/util/image/ImageUtils.java b/src/main/java/net/mcreator/util/image/ImageUtils.java index fcb50750d4d..9c28a22b513 100644 --- a/src/main/java/net/mcreator/util/image/ImageUtils.java +++ b/src/main/java/net/mcreator/util/image/ImageUtils.java @@ -60,6 +60,16 @@ public static ImageIcon drawOver(ImageIcon i, ImageIcon wh, int xp, int yp, int return new ImageIcon(resizedImage); } + public static ImageIcon createColorSquare(Color color, int width, int height) { + BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics g = bi.createGraphics(); + g.setColor(color); + g.fillRect(0, 0, width, height); + g.dispose(); + + return new ImageIcon(bi); + } + public static ImageIcon colorize(ImageIcon icon, Color modifier, boolean type) { return type ? colorize1(icon, modifier) : colorize2(icon, modifier); } diff --git a/src/main/java/net/mcreator/workspace/ShareableZIPManager.java b/src/main/java/net/mcreator/workspace/ShareableZIPManager.java index b411b252003..4497c6838b7 100644 --- a/src/main/java/net/mcreator/workspace/ShareableZIPManager.java +++ b/src/main/java/net/mcreator/workspace/ShareableZIPManager.java @@ -45,30 +45,28 @@ public static File importZIP(File file, File workspaceDir, Window window) { Thread t = new Thread(() -> { ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.import_from_zip.extracting")); - dial.addProgress(p1); + dial.addProgressUnit(p1); ZipIO.unzip(file.getAbsolutePath(), workspaceDir.getAbsolutePath()); retval.set(WorkspaceUtils.getWorkspaceFileForWorkspaceFolder(workspaceDir)); if (retval.get() != null) { - p1.ok(); - dial.refreshDisplay(); + p1.markStateOk(); } else { - p1.err(); - dial.refreshDisplay(); + p1.markStateError(); JOptionPane.showMessageDialog(dial, L10N.t("dialog.workspace.import_from_zip.failed_message"), L10N.t("dialog.workspace.import_from_zip.failed_title"), JOptionPane.ERROR_MESSAGE); - dial.hideAll(); + dial.hideDialog(); return; } ProgressDialog.ProgressUnit p2 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.regenerate_and_build.progress.loading_mod_elements")); - dial.addProgress(p2); + dial.addProgressUnit(p2); try { Workspace workspace = Workspace.readFromFS(retval.get(), dial); @@ -80,19 +78,28 @@ public static File importZIP(File file, File workspaceDir, Window window) { // If workspace MCR version is the same, regeneration will not run and thus ME icons will be missing // This is "fixed" by "preloading mod elements" here for (ModElement mod : workspace.getModElements()) { - GeneratableElement generatableElement = mod.getGeneratableElement(); - - if (generatableElement != null) { - // save custom mod element picture if it has one - workspace.getModElementManager().storeModElementPicture(generatableElement); - - // we reinit the mod to load new ME icon - generatableElement.getModElement().reinit(workspace); + // During the loading of GeneratableElement, other MEs could be converted too, so we make sure + // that the current ME (from list that could be outdated at this point) was not converted to + // a different type. If this is the case, we don't preload the ME here as this will result in + // warnings because we are trying to load ME that is already stored in GeneratableElement cache + // as a different mod element type + ModElement check = workspace.getModElementByName(mod.getName()); + if (check != null && check.getType() == mod.getType()) { + GeneratableElement generatableElement = mod.getGeneratableElement(); + if (generatableElement != null) { + // save custom mod element picture if it has one + workspace.getModElementManager().storeModElementPicture(generatableElement); + + // we reinit the mod to load new ME icon + generatableElement.getModElement().reinit(workspace); + } + } else { + LOG.debug("Skipping preloading of mod element " + mod.getName() + + " as it was converted to a different type"); } i++; p1.setPercent((int) (((float) i / (float) modstoload) * 100.0f)); - dial.refreshDisplay(); } // make sure we store any potential changes made to the workspace @@ -103,10 +110,9 @@ public static File importZIP(File file, File workspaceDir, Window window) { LOG.error("Failed to import workspace", e); } - p2.ok(); - dial.refreshDisplay(); + p2.markStateOk(); - dial.hideAll(); + dial.hideDialog(); }, "ZIPImporter"); t.start(); dial.setVisible(true); @@ -119,7 +125,7 @@ public static void exportZIP(String title, File file, MCreator mcreator, boolean Thread t = new Thread(() -> { ProgressDialog.ProgressUnit p1 = new ProgressDialog.ProgressUnit( L10N.t("dialog.workspace.export_workspace.compressing")); - dial.addProgress(p1); + dial.addProgressUnit(p1); try { if (excludeRunDir) { @@ -135,9 +141,8 @@ public static void exportZIP(String title, File file, MCreator mcreator, boolean LOG.error("Failed to export workspace", e); } - p1.ok(); - dial.refreshDisplay(); - dial.hideAll(); + p1.markStateOk(); + dial.hideDialog(); }, "ZIPExporter"); t.start(); dial.setVisible(true); diff --git a/src/main/java/net/mcreator/workspace/Workspace.java b/src/main/java/net/mcreator/workspace/Workspace.java index 098a086eb9a..8374492ce58 100644 --- a/src/main/java/net/mcreator/workspace/Workspace.java +++ b/src/main/java/net/mcreator/workspace/Workspace.java @@ -19,6 +19,7 @@ package net.mcreator.workspace; import net.mcreator.Launcher; +import net.mcreator.element.ModElementType; import net.mcreator.generator.Generator; import net.mcreator.generator.GeneratorConfiguration; import net.mcreator.generator.GeneratorFlavor; @@ -125,6 +126,11 @@ public FolderElement getFoldersRoot() { return workspaceInfo; } + public boolean containsModElement(String elementName) { + // We create "dummy" mod element for contains check since hashcode of ME is only based on its name + return mod_elements.contains(new ModElement(this, elementName, ModElementType.UNKNOWN)); + } + public ModElement getModElementByName(String elementName) { return mod_elements.parallelStream().filter(element -> element.getName().equals(elementName)).findFirst() .orElse(null); @@ -275,14 +281,20 @@ boolean isDirty() { return changed; } - protected void reloadModElements() { + /** + * @apiNote This method performs sensitive operations on this workspace. Avoid using it! + */ + public void reloadModElements() { // While reiniting, list may change due to converters, so we need to copy it for (ModElement modElement : Set.copyOf(mod_elements)) { modElement.reinit(this); } } - protected void reloadFolderStructure() { + /** + * @apiNote This method performs sensitive operations on this workspace. Avoid using it! + */ + public void reloadFolderStructure() { this.foldersRoot.updateStructure(); Set validPaths = foldersRoot.getRecursiveFolderChildren().stream().map(FolderElement::getPath) @@ -422,7 +434,7 @@ public static Workspace readFromFS(File workspaceFile, @Nullable Window ui) * @param generatorConfiguration If same as workspace, nothing is done, otherwise regenerateRequired is set to true. * @return Workspace object for the given file */ - public static Workspace readFromFS(File workspaceFile, GeneratorConfiguration generatorConfiguration) { + public static Workspace readFromFSUnsafe(File workspaceFile, GeneratorConfiguration generatorConfiguration) { Workspace retval = WorkspaceFileManager.gson.fromJson(FileIO.readFileToString(workspaceFile), Workspace.class); retval.fileManager = new WorkspaceFileManager(workspaceFile, retval); @@ -469,7 +481,11 @@ public boolean isRegenerateRequired() { // Below are methods that may still be used by some plugins - @SuppressWarnings("unused") void loadStoredDataFrom(Workspace other) { + /** + * @param other The workspace to copy elements and settings from. + * @apiNote This method performs sensitive operations on this workspace. Avoid using it! + */ + @SuppressWarnings("unused") public void loadStoredDataFrom(Workspace other) { this.mod_elements = other.mod_elements; this.variable_elements = other.variable_elements; this.sound_elements = other.sound_elements; diff --git a/src/main/java/net/mcreator/workspace/elements/ModElement.java b/src/main/java/net/mcreator/workspace/elements/ModElement.java index 768f7638eb3..6563fbc5c89 100644 --- a/src/main/java/net/mcreator/workspace/elements/ModElement.java +++ b/src/main/java/net/mcreator/workspace/elements/ModElement.java @@ -105,17 +105,6 @@ public ModElement(@Nonnull Workspace workspace, @Nonnull ModElement mu, String d return this.workspace.getModElementManager().loadGeneratableElement(this); } - public void loadDataFrom(ModElement other) { - this.compiles = other.compiles; - this.locked_code = other.locked_code; - this.sortid = other.sortid; - this.registry_name = other.registry_name; - this.metadata = other.metadata; - this.mcItems = other.mcItems; - this.elementIcon = other.elementIcon; - this.workspace = other.workspace; - } - /** * Call this method to reinit ME icon, mcItems cache or update associated workspace * @@ -274,10 +263,16 @@ public void setRegistryName(String registry_name) { } public void setParentFolder(@Nullable FolderElement parent) { - if (parent == null || parent.isRoot()) + if (parent == null || parent.isRoot()) { this.path = null; - else - this.path = parent.getPath(); + } else { + // Make sure that the specified parent folder exists in the workspace + if (workspace.getFoldersRoot().getRecursiveFolderChildren().stream().anyMatch(e -> e.equals(parent))) { + this.path = parent.getPath(); + } else { + this.path = null; + } + } } /** @@ -289,6 +284,21 @@ public Collection getBaseTypesProvided() { Collections.emptyList(); } + /** + * @param other The mod element to copy settings from. + * @apiNote This method performs sensitive operations on this mod element. Avoid using it! + */ + @SuppressWarnings("unused") public void loadDataFrom(ModElement other) { + this.compiles = other.compiles; + this.locked_code = other.locked_code; + this.sortid = other.sortid; + this.registry_name = other.registry_name; + this.metadata = other.metadata; + this.mcItems = other.mcItems; + this.elementIcon = other.elementIcon; + this.workspace = other.workspace; + } + public static class ModElementDeserializer implements JsonDeserializer { private final Gson gson = new Gson(); diff --git a/src/main/java/net/mcreator/workspace/elements/ModElementManager.java b/src/main/java/net/mcreator/workspace/elements/ModElementManager.java index 6b54ec94428..9dde9eee3ae 100644 --- a/src/main/java/net/mcreator/workspace/elements/ModElementManager.java +++ b/src/main/java/net/mcreator/workspace/elements/ModElementManager.java @@ -79,6 +79,9 @@ public ModElement getLastElementInConversion() { * @param element GeneratableElement to convert to store */ public void storeModElement(GeneratableElement element) { + if (element instanceof CustomElement) + return; // Custom elements are not stored as they have no definition file + if (element == null) { LOG.warn( "Attempted to store null generatable element. Something went wrong previously for this to happen!"); @@ -122,11 +125,15 @@ GeneratableElement loadGeneratableElement(ModElement element) { GeneratableElement cachedGeneratableElement = cache.get(element); if (cachedGeneratableElement != null) { if (cachedGeneratableElement.getModElement() != element) { - ModElement cacheModElement = cachedGeneratableElement.getModElement(); - LOG.error( - "Cache contains mod element with same name but different object. This should not happen! Cache element: " - + cacheModElement.getName() + ", type: " + cacheModElement.getType() - + ", queried element: " + element.getName() + ", type: " + element.getType()); + try { + throw new IllegalStateException( + "Cache element: " + cachedGeneratableElement.getModElement().getName() + ", type: " + + cachedGeneratableElement.getModElement().getType() + ", queried element: " + + element.getName() + ", type: " + element.getType()); + } catch (IllegalStateException e) { + LOG.error("Cache contains mod element with same name but different object. This should not happen!", + e); + } } return cachedGeneratableElement; } @@ -216,8 +223,10 @@ public static ImageIcon getModElementIcon(ModElement element) { /** * Invalidates the generatable element cache + * + * @apiNote This method performs sensitive operations on host workspace. Avoid using it! */ - public void invalidateCache() { + @SuppressWarnings("unused") public void invalidateCache() { cache.clear(); } diff --git a/src/main/java/net/mcreator/workspace/misc/WorkspaceInfo.java b/src/main/java/net/mcreator/workspace/misc/WorkspaceInfo.java index 48962ff360f..387dc111ac6 100644 --- a/src/main/java/net/mcreator/workspace/misc/WorkspaceInfo.java +++ b/src/main/java/net/mcreator/workspace/misc/WorkspaceInfo.java @@ -28,6 +28,8 @@ import net.mcreator.element.types.interfaces.ITabContainedElement; import net.mcreator.generator.GeneratorWrapper; import net.mcreator.generator.mapping.MappableElement; +import net.mcreator.generator.mapping.NonMappableElement; +import net.mcreator.generator.mapping.UniquelyMappedElement; import net.mcreator.minecraft.MCItem; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.elements.ModElement; @@ -38,6 +40,7 @@ import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.function.Function; @SuppressWarnings("unused") public record WorkspaceInfo(Workspace workspace) { @@ -101,34 +104,11 @@ public boolean hasJavaModels() { return Model.getModels(workspace).parallelStream().anyMatch(model -> model.getType() == Model.Type.JAVA); } - public Set filterBrokenReferences(List input) { - if (input == null) - return Collections.emptySet(); - - Set retval = new HashSet<>(); - for (T t : input) { - if (t.getUnmappedValue().startsWith("CUSTOM:")) { - if (workspace.getModElementByName(GeneratorWrapper.getElementPlainName(t.getUnmappedValue())) != null) { - retval.add(new MappableElement.Unique(t)); - } else { - LOG.warn("Broken reference found. Referencing non-existent element: " + t.getUnmappedValue() - .replaceFirst("CUSTOM:", "")); - } - } else { - retval.add(new MappableElement.Unique(t)); - } - } - return retval; - } - public Map getItemTextureMap() { Map textureMap = new HashMap<>(); for (ModElement element : workspace.getModElements()) { - if (element.getType().getBaseType() == BaseType.ITEM) { - GeneratableElement generatableElement = element.getGeneratableElement(); - if (generatableElement instanceof IItemWithTexture) { - textureMap.put(element.getRegistryName(), ((IItemWithTexture) generatableElement).getTexture()); - } + if (element.getGeneratableElement() instanceof IItemWithTexture itemWithTexture) { + textureMap.put(element.getRegistryName(), itemWithTexture.getTexture()); } } return textureMap; @@ -180,6 +160,51 @@ public Map> getCreativeTabMap() { return tabMap; } + public Set filterBrokenReferences(Collection input) { + if (input == null) + return Collections.emptySet(); + + Set retval = new LinkedHashSet<>(); + for (T t : input) { + if (t instanceof NonMappableElement) { + retval.add(t); + } else if (t.getUnmappedValue().startsWith("CUSTOM:")) { + if (workspace.containsModElement(GeneratorWrapper.getElementPlainName(t.getUnmappedValue()))) { + retval.add(new UniquelyMappedElement(t)); + } else { + LOG.warn("Broken reference found. Referencing non-existent element: " + t.getUnmappedValue() + .replaceFirst("CUSTOM:", "")); + } + } else { + retval.add(new UniquelyMappedElement(t)); + } + } + return retval; + } + + public Set normalizeTagElements(String tag, int mappingTable, + Collection elements) { + final Function normalizeTag = input -> { + input = input.replaceFirst("#", "").replaceFirst("TAG:", ""); + if (input.contains(":")) { + return input; + } else { + return "minecraft:" + input; + } + }; + + tag = normalizeTag.apply(tag); + Set filtered = filterBrokenReferences(elements); + + Set retval = new LinkedHashSet<>(); + for (MappableElement element : filtered) { + if (!tag.equals(normalizeTag.apply(element.getMappedValue(mappingTable)))) { + retval.add(element); + } + } + return retval; + } + public String getUUID(String offset) { return UUID.nameUUIDFromBytes( (offset + workspace.getWorkspaceSettings().getModID()).getBytes(StandardCharsets.UTF_8)).toString(); diff --git a/src/main/java/net/mcreator/workspace/references/ModElementReference.java b/src/main/java/net/mcreator/workspace/references/ModElementReference.java new file mode 100644 index 00000000000..e026a04834d --- /dev/null +++ b/src/main/java/net/mcreator/workspace/references/ModElementReference.java @@ -0,0 +1,47 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.workspace.references; + +import net.mcreator.element.parts.procedure.Procedure; +import net.mcreator.generator.mapping.MappableElement; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.Collection; + +/** + * Used to mark fields that can store names of custom elements (mappable or MEs) used by mod element instance + * and NOT already included as names of objects like {@link MappableElement} or {@link Procedure}. + *
          Format of strings: with {@code CUSTOM:} prefix for entries created from other mod elements + * or unmapped name for data list entries. + * + * @apiNote This annotation can also be added to fields of type {@link Collection}, custom object, etc. + * with their values known to have fields/methods with matching values. + */ +@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ModElementReference { + + /** + * Special values indicating the element is not assigned. + */ + String[] defaultValues() default ""; + +} diff --git a/src/main/java/net/mcreator/workspace/references/ReferencesFinder.java b/src/main/java/net/mcreator/workspace/references/ReferencesFinder.java new file mode 100644 index 00000000000..b6c7e7aa07b --- /dev/null +++ b/src/main/java/net/mcreator/workspace/references/ReferencesFinder.java @@ -0,0 +1,292 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.workspace.references; + +import net.mcreator.blockly.data.BlocklyXML; +import net.mcreator.element.GeneratableElement; +import net.mcreator.element.parts.Sound; +import net.mcreator.element.parts.procedure.Procedure; +import net.mcreator.generator.GeneratorWrapper; +import net.mcreator.generator.mapping.MappableElement; +import net.mcreator.plugin.PluginLoader; +import net.mcreator.ui.MCreator; +import net.mcreator.ui.workspace.resources.TextureType; +import net.mcreator.util.FilenameUtilsPatched; +import net.mcreator.workspace.IWorkspaceProvider; +import net.mcreator.workspace.Workspace; +import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.elements.SoundElement; +import net.mcreator.workspace.resources.Model; +import net.mcreator.workspace.resources.TexturedModel; + +import javax.annotation.Nullable; +import java.io.File; +import java.lang.reflect.*; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.BiPredicate; +import java.util.function.Predicate; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class ReferencesFinder { + + /** + * Convenience method to provide a list of all generatable elements contained in the provided workspace in a thread-safe manner. + * List returned by this method can be used in parallel streams as long as all other methods in the said parallel stream are + * also thread safe. Thus, e.g. calling ModElementManager within the parallel stream later would still cause problems. + * + * @param workspace Workspace to obtain generatable elements from. + * @return List of all generatable elements contained in the provided workspace. + */ + private static List getGeneratableElements(Workspace workspace) { + return workspace.getModElements().stream().filter(me -> !me.isCodeLocked()) + .map(ModElement::getGeneratableElement).collect(Collectors.toList()); + } + + //@formatter:off + + public static Set searchModElementUsages(Workspace workspace, ModElement element) { + final Pattern procedureXmlPattern = Pattern.compile(">(?:CUSTOM:)?" + element.getName() + "([.:]\\w+?)?"); + return getGeneratableElements(workspace).parallelStream() + .filter(ge -> + anyValueMatches(ge, String.class, e -> e.isAnnotationPresent(ModElementReference.class), (a, t) -> { + ModElementReference ref = a.getAnnotation(ModElementReference.class); + return !Set.of(ref.defaultValues()).contains(t) && element.getName().equals( + GeneratorWrapper.getElementPlainName(t)); + }) || + anyValueMatches(ge, MappableElement.class, e -> e.isAnnotationPresent(ModElementReference.class), (a, t) -> + element.getName().equals(GeneratorWrapper.getElementPlainName(t.getUnmappedValue())) + ) || + anyValueMatches(ge, Procedure.class, e -> e.isAnnotationPresent(ModElementReference.class), (a, t) -> + element.getName().equals(t.getName()) + ) || + anyValueMatches(ge, String.class, e -> e.isAnnotationPresent(BlocklyXML.class), (a, t) -> + procedureXmlPattern.matcher(t).find() + ) + ) + .map(GeneratableElement::getModElement).filter(me -> !me.equals(element)).collect(Collectors.toSet()); + } + + public static Set searchTextureUsages(Workspace workspace, File texture, TextureType type) { + return getGeneratableElements(workspace).parallelStream() + .filter(ge -> + anyValueMatches(ge, String.class, e -> { + TextureReference ref = e.getAnnotation(TextureReference.class); + return ref != null && ref.value() == type; + }, (a, t) -> { + TextureReference ref = a.getAnnotation(TextureReference.class); + if (!Set.of(ref.defaultValues()).contains(t)) { + for (String template : ref.files()) { + String file = template.isEmpty() ? t : template.formatted(t); + if (workspace.getFolderManager() + .getTextureFile(FilenameUtilsPatched.removeExtension(file), type).equals(texture)) + return true; + } + } + return false; + }) + ) + .map(GeneratableElement::getModElement).collect(Collectors.toSet()); + } + + public static Set searchModelUsages(Workspace workspace, Model model) { + return getGeneratableElements(workspace).parallelStream() + .filter(ge -> + anyValueMatches(ge, Model.class, e -> { + ResourceReference ref = e.getAnnotation(ResourceReference.class); + return ref != null && ref.value().equals("model"); + }, (a, t) -> + model.equals(t) || TexturedModel.getModelTextureMapVariations(model).contains(t) + ) + ) + .map(GeneratableElement::getModElement).collect(Collectors.toSet()); + } + + public static Set searchSoundUsages(Workspace workspace, SoundElement sound) { + return getGeneratableElements(workspace).parallelStream() + .filter(ge -> + anyValueMatches(ge, Sound.class, e -> { + ResourceReference ref = e.getAnnotation(ResourceReference.class); + return ref != null && ref.value().equals("sound"); + }, (a, t) -> + t.getUnmappedValue().replaceFirst("CUSTOM:", "").equals(sound.getName()) + ) || + anyValueMatches(ge, String.class, e -> e.isAnnotationPresent(BlocklyXML.class), (a, t) -> + t.contains(">CUSTOM:" + sound.getName() + "") + ) + ) + .map(GeneratableElement::getModElement).collect(Collectors.toSet()); + } + + public static Set searchStructureUsages(Workspace workspace, String structure) { + return getGeneratableElements(workspace).parallelStream() + .filter(ge -> + anyValueMatches(ge, String.class, e -> { + ResourceReference ref = e.getAnnotation(ResourceReference.class); + return ref != null && ref.value().equals("structure"); + }, (a, t) -> + t.equals(structure) + ) || + anyValueMatches(ge, String.class, e -> e.isAnnotationPresent(BlocklyXML.class), (a, t) -> + t.contains(">" + structure + "") + ) + ) + .map(GeneratableElement::getModElement).collect(Collectors.toSet()); + } + + public static Set searchGlobalVariableUsages(Workspace workspace, String variableName) { + return getGeneratableElements(workspace).parallelStream() + .filter(ge -> + anyValueMatches(ge, String.class, e -> e.isAnnotationPresent(BlocklyXML.class), (a, t) -> + t.contains("global:" + variableName + "") + ) + ) + .map(GeneratableElement::getModElement).collect(Collectors.toSet()); + } + + public static Set searchLocalizationKeyUsages(Workspace workspace, String localizationKey) { + return getGeneratableElements(workspace).parallelStream() + .filter(ge -> + (ge != null && workspace.getGenerator().getElementLocalizationKeys(ge).contains(localizationKey)) || + anyValueMatches(ge, String.class, e -> e.isAnnotationPresent(BlocklyXML.class), (a, t) -> + t.contains(">" + localizationKey + "") + ) + ) + .map(GeneratableElement::getModElement).collect(Collectors.toSet()); + } + + //@formatter:on + + /** + * Checks if values acquired from any valid fields or methods meet the specified condition. + * + * @param source The object to extract values from. + * @param clazz The class of values to be checked. + * @param validIf The predicate used to check if a field/method is considered valid. + * @param condition The predicate defining the condition that the acquired values should pass. + * @param The type of values to be checked. + * @return Whether any value extracted from valid fields/methods on the {@code source} object pass the condition. + */ + public static boolean anyValueMatches(@Nullable Object source, Class clazz, + Predicate validIf, BiPredicate condition) { + if (source == null) + return false; + + for (Field field : source.getClass().getFields()) { + if (!Modifier.isStatic(field.getModifiers()) && (clazz.isAssignableFrom(field.getType()) || (validIf != null + && validIf.test(field)))) { + try { + if (checkValue(field.get(source), field, clazz, validIf, condition)) + return true; + } catch (ReflectiveOperationException ignored) { + } + } + } + for (Method method : source.getClass().getMethods()) { + if (!Modifier.isStatic(method.getModifiers()) && method.getParameterCount() == 0 && ( + clazz.isAssignableFrom(method.getReturnType()) || (validIf != null && validIf.test(method)))) { + try { + if (checkValue(method.invoke(source), method, clazz, validIf, condition)) + return true; + } catch (ReflectiveOperationException ignored) { + } + } + } + + return false; + } + + /** + * Checks if the value (or its components) acquired from the given field/method passes the specified condition. + * + * @param value The extracted value that should be checked. + * @param field The field/method the {@code value} was acquired. + * @param clazz The class of values to be checked. + * @param validIf The predicate used to check if the field/method is considered valid. + * @param condition The predicate defining the condition that the acquired values should pass. + * @param The type of values to be checked. + * @return Whether the provided value or any value extracted from valid fields/methods on the {@code value} object + * passes the provided condition. + */ + @SuppressWarnings("unchecked") private static boolean checkValue(@Nullable Object value, AccessibleObject field, + Class clazz, @Nullable Predicate validIf, + @Nullable BiPredicate condition) { + if (value == null) + return false; + + if (clazz.isInstance(value)) { // value of specified type + return (isCustomObject(value) || validIf == null || validIf.test(field)) && (condition == null + || condition.test(field, (T) value)); + } else if (value instanceof Iterable list) { // list of values + return listHasMatches(list, field, clazz, validIf, condition); + } else if (value instanceof Map map) { // map with values + return listHasMatches(map.keySet(), field, clazz, validIf, condition) || listHasMatches(map.values(), field, + clazz, validIf, condition); + } else if (value.getClass().isArray()) { // array of values + int length = Array.getLength(value); + for (int i = 0; i < length; i++) { + if (checkValue(Array.get(value, i), field, clazz, validIf, condition)) + return true; + } + } else if (isCustomObject(value)) { // value of unknown type but from MCreator system, do recursive check + return anyValueMatches(value, clazz, validIf, condition); + } + + return false; + } + + /** + * Checks if any value (or its components) on the list acquired from the passed field/method meets given condition. + * + * @param list The extracted list of values that should be checked. + * @param field The field/method the {@code value} was acquired. + * @param clazz The class of values to be checked. + * @param validIf The predicate used to check if the field/method is considered valid. + * @param condition The predicate defining the condition that the acquired values should pass. + * @param The type of values to be checked. + * @return Whether the provided value or any value extracted from valid fields/methods on the {@code value} object + * passes the provided condition. + */ + private static boolean listHasMatches(Iterable list, AccessibleObject field, Class clazz, + @Nullable Predicate validIf, @Nullable BiPredicate condition) { + for (Object obj : list) { + if (checkValue(obj, field, clazz, validIf, condition)) + return true; + } + return false; + } + + /** + * Checks if class of the passed value is from this module and not related to the technical part of the application. + * Scanning values that do not pass this condition will most probably lead to a {@link StackOverflowError}. + *
          NOTE: If needed values are instances of a class not contained in this module, they will still be checked. + * + * @param value The value that should be checked. + * @return Whether it is safe to scan the {@code value} object deeper. + */ + private static boolean isCustomObject(Object value) { + return (value.getClass().getModule() == MCreator.class.getModule() || PluginLoader.INSTANCE.getPluginModules() + .contains(value.getClass().getModule())) + && !(value instanceof IWorkspaceProvider); // prevent from being stuck in app structure + } + +} diff --git a/src/main/java/net/mcreator/workspace/references/ResourceReference.java b/src/main/java/net/mcreator/workspace/references/ResourceReference.java new file mode 100644 index 00000000000..743e08c6eee --- /dev/null +++ b/src/main/java/net/mcreator/workspace/references/ResourceReference.java @@ -0,0 +1,43 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.workspace.references; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.Collection; + +/** + * Used to mark fields storing names of resources used by mod element instance. + * For textures, {@link TextureReference} should be used instead as it also declares the texture type. + *
          Regular Model and Sound references using Model or Sound object do not need this annotation additionally. + * + * @apiNote This annotation can also be added to fields of type {@link Collection}, custom object, etc. + * with their values known to match or have fields/methods with matching values. + */ +@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ResourceReference { + + /** + * The type of resource that the marked field can contain a reference to. + */ + String value(); + +} diff --git a/src/main/java/net/mcreator/workspace/references/TextureReference.java b/src/main/java/net/mcreator/workspace/references/TextureReference.java new file mode 100644 index 00000000000..4f56b53b3b2 --- /dev/null +++ b/src/main/java/net/mcreator/workspace/references/TextureReference.java @@ -0,0 +1,54 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.workspace.references; + +import net.mcreator.ui.workspace.resources.TextureType; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.Collection; + +/** + * Used to mark fields storing names of textures used by mod element instance. + * + * @apiNote This annotation can also be added to fields of type {@link Collection}, custom object, etc. + * with their values known to match or have fields/methods with matching values. + */ +@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface TextureReference { + + /** + * The type of texture that the marked field can contain a reference to. + */ + TextureType value(); + + /** + * Template strings that the value of target type should be applied to in order to retrieve texture file names. + * An empty string means the value itself will be considered (effectively same as {@code "%s"}). + */ + String[] files() default ""; + + /** + * Special values indicating the texture is not assigned. + */ + String[] defaultValues() default ""; + +} diff --git a/src/main/java/net/mcreator/workspace/resources/Model.java b/src/main/java/net/mcreator/workspace/resources/Model.java index 07bec904734..be64687b9f8 100644 --- a/src/main/java/net/mcreator/workspace/resources/Model.java +++ b/src/main/java/net/mcreator/workspace/resources/Model.java @@ -21,7 +21,10 @@ import net.mcreator.workspace.Workspace; import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; public class Model { @@ -143,19 +146,7 @@ public static List getModelsWithTextureMaps(Workspace workspace) { List models = new ArrayList<>(); File[] candidates = workspace.getFolderManager().getModelsDir().listFiles(); for (File f : candidates != null ? candidates : new File[0]) { - Model m = new Model(f); - if (m.getType() != null) { - Map textureMappingMap = TexturedModel.getTextureMappingsForModel( - m); - if (textureMappingMap != null) { - // we add all variations of texturemappings for model - for (Map.Entry entry : textureMappingMap.entrySet()) { - models.add(new TexturedModel(f, entry.getValue())); - } - } else { - models.add(m); - } - } + models.addAll(TexturedModel.getModelTextureMapVariations(new Model(f))); } return models; } diff --git a/src/main/java/net/mcreator/workspace/resources/TexturedModel.java b/src/main/java/net/mcreator/workspace/resources/TexturedModel.java index a301ba4bc53..eb04bfffba3 100644 --- a/src/main/java/net/mcreator/workspace/resources/TexturedModel.java +++ b/src/main/java/net/mcreator/workspace/resources/TexturedModel.java @@ -24,6 +24,8 @@ import net.mcreator.ui.init.L10N; import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class TexturedModel extends Model { @@ -51,6 +53,22 @@ public TextureMapping getTextureMapping() { return textureMapping; } + public static List getModelTextureMapVariations(Model m) { + List variations = new ArrayList<>(); + if (m.getType() != null && m.getFiles() != null && m.getFile() != null) { + Map textureMappingMap = getTextureMappingsForModel(m); + if (textureMappingMap != null) { + // we add all variations of texture mappings for model + for (TextureMapping mapping : textureMappingMap.values()) { + variations.add(new TexturedModel(m.getFile(), mapping)); + } + } else { + variations.add(m); + } + } + return variations; + } + public static Map getTextureMappingsForModel(Model model) { try { if (model.type == Type.JSON && model.getFiles().length == 2) { diff --git a/src/main/java/net/mcreator/workspace/settings/WorkspaceSettings.java b/src/main/java/net/mcreator/workspace/settings/WorkspaceSettings.java index 14fd6980191..2b29f0d49ae 100644 --- a/src/main/java/net/mcreator/workspace/settings/WorkspaceSettings.java +++ b/src/main/java/net/mcreator/workspace/settings/WorkspaceSettings.java @@ -19,8 +19,8 @@ package net.mcreator.workspace.settings; import com.google.common.base.CaseFormat; -import net.mcreator.minecraft.api.ModAPIImplementation; -import net.mcreator.minecraft.api.ModAPIManager; +import net.mcreator.plugin.modapis.ModAPIImplementation; +import net.mcreator.plugin.modapis.ModAPIManager; import net.mcreator.ui.MCreatorApplication; import net.mcreator.util.StringUtils; import net.mcreator.workspace.Workspace; diff --git a/src/main/resources/blockly/css/mcreator_blockly.css b/src/main/resources/blockly/css/mcreator_blockly.css index e6e8fbc7f7e..982f23b623f 100644 --- a/src/main/resources/blockly/css/mcreator_blockly.css +++ b/src/main/resources/blockly/css/mcreator_blockly.css @@ -25,8 +25,8 @@ body { position: absolute; top: 0; left: 0; - width: 100%; - height: 100%; + bottom: 0; + right: 0; } .blocklyTreeLabel { diff --git a/src/main/resources/net/mcreator/ui/res/splash.png b/src/main/resources/net/mcreator/ui/res/splash.png index 5a6c9b3968d..1e61c074b45 100644 Binary files a/src/main/resources/net/mcreator/ui/res/splash.png and b/src/main/resources/net/mcreator/ui/res/splash.png differ diff --git a/src/test/java/net/mcreator/integration/TestSetup.java b/src/test/java/net/mcreator/integration/IntegrationTestSetup.java similarity index 58% rename from src/test/java/net/mcreator/integration/TestSetup.java rename to src/test/java/net/mcreator/integration/IntegrationTestSetup.java index ce1998600a7..852bd4cd30d 100644 --- a/src/test/java/net/mcreator/integration/TestSetup.java +++ b/src/test/java/net/mcreator/integration/IntegrationTestSetup.java @@ -1,149 +1,183 @@ -/* - * MCreator (https://mcreator.net/) - * Copyright (C) 2020 Pylo and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.mcreator.integration; - -import javafx.embed.swing.JFXPanel; -import net.mcreator.Launcher; -import net.mcreator.blockly.data.BlocklyLoader; -import net.mcreator.element.ModElementTypeLoader; -import net.mcreator.generator.Generator; -import net.mcreator.generator.GeneratorConfiguration; -import net.mcreator.io.net.analytics.GoogleAnalytics; -import net.mcreator.minecraft.DataListLoader; -import net.mcreator.minecraft.api.ModAPIManager; -import net.mcreator.plugin.PluginLoader; -import net.mcreator.preferences.PreferencesManager; -import net.mcreator.themes.ThemeLoader; -import net.mcreator.ui.MCreatorApplication; -import net.mcreator.ui.blockly.WebConsoleListener; -import net.mcreator.ui.help.HelpLoader; -import net.mcreator.ui.init.*; -import net.mcreator.ui.laf.MCreatorLookAndFeel; -import net.mcreator.util.MCreatorVersionNumber; -import net.mcreator.util.TerribleModuleHacks; -import net.mcreator.workspace.elements.VariableTypeLoader; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import javax.swing.*; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.Properties; -import java.util.Set; -import java.util.regex.Pattern; - -public class TestSetup { - - private static final Logger LOG = LogManager.getLogger(TestSetup.class); - - private static boolean already = false; - - public static void setupIntegrationTestEnvironment() throws IOException { - if (already) - return; - - TerribleModuleHacks.openAllUnnamed(); - TerribleModuleHacks.openMCreatorRequirements(); - - WebConsoleListener.registerLogger(LOG); - - MCreatorApplication.isInternet = MCreatorApplication.WEB_API.initAPI(); - - // Do not track unit tests - GoogleAnalytics.ANALYTICS_ENABLED = false; - - // print version of Java - LOG.info("Java version: " + System.getProperty("java.version") + ", VM: " + System.getProperty("java.vm.name") - + ", vendor: " + System.getProperty("java.vendor")); - LOG.info("Current JAVA_HOME for running instance: " + System.getProperty("java.home")); - - Properties conf = new Properties(); - conf.load(Launcher.class.getResourceAsStream("/mcreator.conf")); - Launcher.version = new MCreatorVersionNumber(conf); - - // Init JFX Toolkit - try { - SwingUtilities.invokeAndWait(JFXPanel::new); - } catch (InterruptedException | InvocationTargetException e) { - LOG.error("Failed to start JFX toolkit", e); - } - - // load preferences - PreferencesManager.init(); - - // load plugins - // We begin by loading plugins, so every image can be changed - PluginLoader.initInstance(); - - // We load UI themes now as theme plugins are loaded at this point - ThemeLoader.initUIThemes(); - - // init UI theme - try { - UIManager.setLookAndFeel(new MCreatorLookAndFeel()); - } catch (UnsupportedLookAndFeelException e) { - LOG.error("Failed to set look and feel: " + e.getMessage()); - } - - DataListLoader.preloadCache(); - - // preload help entries cache - HelpLoader.preloadCache(); - - // load translations after plugins are loaded - L10N.initTranslations(); - L10N.enterTestingMode(); - - // some mod element guis use icons - TiledImageCache.loadAndTileImages(); - - // may be needed to generate icons for MCItems (e.g. generation of potion icons) - ImageMakerTexturesCache.init(); - - // load apis defined by plugins after plugins are loaded - ModAPIManager.initAPIs(); - - // load variable elements - VariableTypeLoader.loadVariableTypes(); - - // load JS files for Blockly - BlocklyJavaScriptsLoader.init(); - BlocklyToolboxesLoader.init(); - - // blockly mod elements need blockly blocks loaded - BlocklyLoader.init(); - - // load entity animations for the Java Model animation editor - EntityAnimationsLoader.init(); - - // register mod element types - ModElementTypeLoader.loadModElements(); - - // load generator configurations - Set fileNames = PluginLoader.INSTANCE.getResources(Pattern.compile("generator\\.yaml")); - for (String generator : fileNames) { - LOG.info("Loading generator: " + generator); - generator = generator.replace("/generator.yaml", ""); - Generator.GENERATOR_CACHE.put(generator, new GeneratorConfiguration(generator)); - } - - already = true; - } - -} +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.integration; + +import javafx.embed.swing.JFXPanel; +import net.mcreator.Launcher; +import net.mcreator.blockly.data.BlocklyLoader; +import net.mcreator.element.ModElementTypeLoader; +import net.mcreator.generator.Generator; +import net.mcreator.generator.GeneratorConfiguration; +import net.mcreator.io.LoggingSystem; +import net.mcreator.io.net.analytics.GoogleAnalytics; +import net.mcreator.minecraft.DataListLoader; +import net.mcreator.plugin.PluginLoader; +import net.mcreator.plugin.modapis.ModAPIManager; +import net.mcreator.preferences.PreferencesManager; +import net.mcreator.ui.MCreatorApplication; +import net.mcreator.ui.blockly.WebConsoleListener; +import net.mcreator.ui.component.ConsolePane; +import net.mcreator.ui.component.util.ThreadUtil; +import net.mcreator.ui.help.HelpLoader; +import net.mcreator.ui.init.*; +import net.mcreator.ui.laf.LafUtil; +import net.mcreator.ui.laf.MCreatorTheme; +import net.mcreator.ui.laf.themes.Theme; +import net.mcreator.ui.laf.themes.ThemeLoader; +import net.mcreator.util.MCreatorVersionNumber; +import net.mcreator.util.TerribleModuleHacks; +import net.mcreator.util.UTF8Forcer; +import net.mcreator.workspace.elements.VariableTypeLoader; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +import javax.swing.*; +import javax.swing.plaf.metal.MetalLookAndFeel; +import java.util.Properties; +import java.util.Set; +import java.util.regex.Pattern; + +import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL; + +public class IntegrationTestSetup implements BeforeAllCallback { + + private static final String STORE_KEY = IntegrationTestSetup.class.getName(); + + @Override public synchronized void beforeAll(ExtensionContext context) throws Exception { + Object value = context.getRoot().getStore(GLOBAL).get(STORE_KEY); + if (value == null) { + context.getRoot().getStore(GLOBAL).put(STORE_KEY, this); + setup(); + } + } + + public void setup() throws Exception { + /* ****************************** + * START: Launcher.java emulation + * ******************************/ + LoggingSystem.init(); + + TerribleModuleHacks.openAllFor(ClassLoader.getSystemClassLoader().getUnnamedModule()); + TerribleModuleHacks.openMCreatorRequirements(); + + UTF8Forcer.forceGlobalUTF8(); + + Logger LOG = LogManager.getLogger("Test setup"); + + Properties conf = new Properties(); + conf.load(Launcher.class.getResourceAsStream("/mcreator.conf")); + Launcher.version = new MCreatorVersionNumber(conf); + + // print version of Java + LOG.info("Java version: " + System.getProperty("java.version") + ", VM: " + System.getProperty("java.vm.name") + + ", vendor: " + System.getProperty("java.vendor")); + LOG.info("Current JAVA_HOME for running instance: " + System.getProperty("java.home")); + + // load preferences + PreferencesManager.init(); + + // Init JFX Toolkit + ThreadUtil.runOnSwingThreadAndWait(JFXPanel::new); + WebConsoleListener.registerLogger(LOG); + /* **************************** + * END: Launcher.java emulation + * ****************************/ + + // Reduce autosave interval for tests + PreferencesManager.PREFERENCES.backups.workspaceAutosaveInterval.set(2000); + + // Gradle's builds are RAM intensive, so we may need more RAM + PreferencesManager.PREFERENCES.gradle.xmx.set(3072); // 3G + + // Disable native file choosers for tests due to threading issues + PreferencesManager.PREFERENCES.ui.useNativeFileChooser.set(false); + + // Do not track unit tests + GoogleAnalytics.ANALYTICS_ENABLED = false; + + // Enable logging of HTML panes (gradle console) + ConsolePane.DEBUG_CONTENTS_TO_LOG = true; + + /* ***************************************** + * START: MCreatorApplication.java emulation + * *****************************************/ + MCreatorApplication.isInternet = MCreatorApplication.WEB_API.initAPI(); + + // load plugins + // We begin by loading plugins, so every image can be changed + PluginLoader.initInstance(); + + // We load UI themes now as theme plugins are loaded at this point + ThemeLoader.initUIThemes(); + MetalLookAndFeel.setCurrentTheme(new MCreatorTheme(Theme.current())); + + UIManager.setLookAndFeel(new MetalLookAndFeel()); + LafUtil.applyDefaultHTMLStyles(); + LafUtil.fixMacOSActions(); + + DataListLoader.preloadCache(); + + // preload help entries cache + HelpLoader.preloadCache(); + + // load translations after plugins are loaded + L10N.initTranslations(); + L10N.enterTestingMode(); + + // some mod element guis use icons + TiledImageCache.loadAndTileImages(); + + // may be needed to generate icons for MCItems (e.g. generation of potion icons) + ImageMakerTexturesCache.init(); + + // load apis defined by plugins after plugins are loaded + ModAPIManager.initAPIs(); + + // load variable elements + VariableTypeLoader.loadVariableTypes(); + + // load JS files for Blockly + BlocklyJavaScriptsLoader.init(); + BlocklyToolboxesLoader.init(); + + // blockly mod elements need blockly blocks loaded + BlocklyLoader.init(); + + // load entity animations for the Java Model animation editor + EntityAnimationsLoader.init(); + + // register mod element types + ModElementTypeLoader.loadModElements(); + + // load generator configurations + Set fileNames = PluginLoader.INSTANCE.getResources(Pattern.compile("generator\\.yaml")); + for (String generator : fileNames) { + LOG.info("Loading generator: " + generator); + generator = generator.replace("/generator.yaml", ""); + Generator.GENERATOR_CACHE.put(generator, new GeneratorConfiguration(generator)); + } + /* *************************************** + * END: MCreatorApplication.java emulation + * ***************************************/ + } + +} diff --git a/src/test/java/net/mcreator/integration/TestWorkspaceDataProvider.java b/src/test/java/net/mcreator/integration/TestWorkspaceDataProvider.java index e0b01874861..0fc13974863 100644 --- a/src/test/java/net/mcreator/integration/TestWorkspaceDataProvider.java +++ b/src/test/java/net/mcreator/integration/TestWorkspaceDataProvider.java @@ -44,6 +44,7 @@ import net.mcreator.minecraft.MCItem; import net.mcreator.ui.dialogs.wysiwyg.AbstractWYSIWYGDialog; import net.mcreator.ui.minecraft.states.PropertyData; +import net.mcreator.ui.minecraft.states.PropertyDataWithValue; import net.mcreator.ui.minecraft.states.StateMap; import net.mcreator.ui.modgui.ItemGUI; import net.mcreator.ui.modgui.LivingEntityGUI; @@ -51,10 +52,7 @@ import net.mcreator.util.StringUtils; import net.mcreator.util.image.EmptyIcon; import net.mcreator.workspace.Workspace; -import net.mcreator.workspace.elements.ModElement; -import net.mcreator.workspace.elements.VariableElement; -import net.mcreator.workspace.elements.VariableType; -import net.mcreator.workspace.elements.VariableTypeLoader; +import net.mcreator.workspace.elements.*; import java.awt.*; import java.awt.image.RenderedImage; @@ -126,6 +124,13 @@ public static List getModElementExamplesFor(Workspace worksp } public static void fillWorkspaceWithTestData(Workspace workspace) { + if (workspace.getGeneratorStats().getBaseCoverageInfo().get("sounds") == GeneratorStats.CoverageStatus.FULL) { + for (int i = 1; i <= 3; i++) { + SoundElement sound = new SoundElement("test" + i, List.of(), "neutral", null); + workspace.addSoundElement(sound); + } + } + if (workspace.getGeneratorStats().getBaseCoverageInfo().get("variables") == GeneratorStats.CoverageStatus.FULL) { VariableElement sampleVariable1 = new VariableElement("test"); @@ -500,7 +505,7 @@ private static GeneratableElement getExampleFor(ModElement modElement, boolean u keyBinding.triggerKey = getRandomString(random, DataListLoader.loadDataList("keybuttons").stream().map(DataListEntry::getName).toList()); keyBinding.keyBindingName = modElement.getName(); - keyBinding.keyBindingCategoryKey = "key.categories.misc"; + keyBinding.keyBindingCategoryKey = "test_category"; if (!emptyLists) keyBinding.onKeyPressed = new Procedure("procedure3"); if (_true) @@ -617,8 +622,8 @@ Color.white, new Procedure("condition4"), gui.components = components; return gui; } else if (ModElementType.LIVINGENTITY.equals(modElement.getType())) { - return getLivingEntity(modElement, random, _true, emptyLists, valueIndex, blocksAndItems, - blocksAndItemsAndTags, biomes); + return getLivingEntity(modElement, random, _true, emptyLists, blocksAndItems, blocksAndItemsAndTags, + biomes); } else if (ModElementType.DIMENSION.equals(modElement.getType())) { Dimension dimension = new Dimension(modElement); dimension.texture = "test"; @@ -674,20 +679,24 @@ Color.white, new Procedure("condition4"), structure.surfaceDetectionType = getRandomString(random, Arrays.asList("WORLD_SURFACE_WG", "WORLD_SURFACE", "OCEAN_FLOOR_WG", "OCEAN_FLOOR", "MOTION_BLOCKING", "MOTION_BLOCKING_NO_LEAVES")); - structure.ignoreBlocks = getRandomString(random, - Arrays.asList("STRUCTURE_BLOCK", "AIR_AND_STRUCTURE_BLOCK", "AIR")); + structure.ignoredBlocks = new ArrayList<>(); + if (!emptyLists) { + structure.ignoredBlocks.addAll( + blocks.stream().skip(_true ? 0 : ((long) (blocks.size() / 4) * valueIndex)) + .limit(blocks.size() / 4) + .map(e -> new MItemBlock(modElement.getWorkspace(), e.getName())).toList()); + } structure.terrainAdaptation = getRandomString(random, Arrays.asList("none", "beard_thin", "beard_box", "bury")); structure.projection = getRandomString(random, Arrays.asList("rigid", "terrain_matching")); structure.restrictionBiomes = new ArrayList<>(); structure.spacing = 14; structure.separation = 6; - if (!emptyLists) { + if (_true) { structure.restrictionBiomes.addAll( biomes.stream().map(e -> new BiomeEntry(modElement.getWorkspace(), e.getName())).toList()); - structure.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_surface")); + } else { structure.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_overworld")); - structure.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#forge:test/tag")); } structure.generationStep = TestWorkspaceDataProvider.getRandomItem(random, ElementUtil.getDataListAsStringArray("generationsteps")); @@ -843,11 +852,12 @@ Color.white, new Procedure("condition4"), } plant.restrictionBiomes = new ArrayList<>(); if (!emptyLists) { - plant.restrictionBiomes.addAll( - biomes.stream().skip(_true ? 0 : ((biomes.size() / 4) * valueIndex)).limit(biomes.size() / 4) - .map(e -> new BiomeEntry(modElement.getWorkspace(), e.getName())).toList()); - plant.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_overworld")); - plant.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#forge:tag/test")); + if (_true) { + plant.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_overworld")); + } else { + plant.restrictionBiomes.addAll( + biomes.stream().map(e -> new BiomeEntry(modElement.getWorkspace(), e.getName())).toList()); + } } plant.onNeighbourBlockChanges = new Procedure("procedure7"); plant.onTickUpdate = new Procedure("procedure2"); @@ -939,6 +949,7 @@ Color.white, new Procedure("condition4"), } Item.StateEntry stateEntry = new Item.StateEntry(); + stateEntry.setWorkspace(modElement.getWorkspace()); stateEntry.customModelName = getRandomItem(random, ItemGUI.builtinitemmodels).getReadableName(); stateEntry.texture = i == 0 ? "test" : "test" + i; stateEntry.renderType = 0; @@ -1159,11 +1170,12 @@ Color.white, new Procedure("condition4"), } block.restrictionBiomes = new ArrayList<>(); if (!emptyLists) { - block.restrictionBiomes.addAll( - biomes.stream().skip(_true ? 0 : ((biomes.size() / 4) * valueIndex)).limit(biomes.size() / 4) - .map(e -> new BiomeEntry(modElement.getWorkspace(), e.getName())).toList()); - block.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_overworld")); - block.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#forge:tag/test")); + if (_true) { + block.restrictionBiomes.addAll( + biomes.stream().map(e -> new BiomeEntry(modElement.getWorkspace(), e.getName())).toList()); + } else { + block.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_overworld")); + } } block.blocksToReplace = new ArrayList<>(); if (!emptyLists) { @@ -1221,13 +1233,15 @@ Color.white, new Procedure("condition4"), } else if (ModElementType.TAG.equals(modElement.getType())) { Tag tag = new Tag(modElement); tag.namespace = getRandomItem(random, new String[] { "forge", "minecraft", "test1", "test2" }); - tag.type = getRandomItem(random, new String[] { "Items", "Blocks", "Entities", "Functions", "Biomes" }); - tag.name = modElement.getName(); + tag.type = getRandomItem(random, + new String[] { "Items", "Blocks", "Entities", "Functions", "Biomes", "Damage types" }); + tag.name = modElement.getName().toLowerCase(Locale.ENGLISH); tag.items = new ArrayList<>(); tag.blocks = new ArrayList<>(); tag.functions = new ArrayList<>(); tag.entities = new ArrayList<>(); tag.biomes = new ArrayList<>(); + tag.damageTypes = new ArrayList<>(); if (!emptyLists) { tag.items.addAll( blocksAndItems.stream().map(e -> new MItemBlock(modElement.getWorkspace(), e.getName())) @@ -1240,6 +1254,10 @@ Color.white, new Procedure("condition4"), .map(e -> new BiomeEntry(modElement.getWorkspace(), e.getName())).toList()); tag.biomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_overworld")); tag.biomes.add(new BiomeEntry(modElement.getWorkspace(), "#forge:tag/test")); + tag.damageTypes.addAll( + ElementUtil.loadDataListAndElements(modElement.getWorkspace(), "damagesources", false, null, + "damagetype").stream() + .map(e -> new DamageTypeEntry(modElement.getWorkspace(), e.getName())).toList()); tag.functions.add("ExampleFunction1"); tag.functions.add("ExampleFunction2"); @@ -1304,6 +1322,7 @@ Color.white, new Procedure("condition4"), } else if (ModElementType.MUSICDISC.equals(modElement.getType())) { MusicDisc musicDisc = new MusicDisc(modElement); musicDisc.name = modElement.getName(); + musicDisc.rarity = getRandomString(random, Arrays.asList("COMMON", "UNCOMMON", "RARE", "EPIC")); musicDisc.description = modElement.getName(); musicDisc.creativeTab = new TabEntry(modElement.getWorkspace(), getRandomDataListEntry(random, ElementUtil.loadAllTabs(modElement.getWorkspace()))); @@ -1475,6 +1494,17 @@ Color.white, new Procedure("condition4"), net.mcreator.element.types.Procedure procedure = new net.mcreator.element.types.Procedure(modElement); procedure.procedurexml = net.mcreator.element.types.Procedure.XML_BASE; return procedure; + } else if (ModElementType.DAMAGETYPE.equals(modElement.getType())) { + DamageType damageType = new DamageType(modElement); + damageType.exhaustion = 0.37; + damageType.scaling = getRandomString(random, + Arrays.asList("never", "always", "when_caused_by_living_non_player")); + damageType.effects = getRandomString(random, + Arrays.asList("hurt", "thorns", "drowning", "burning", "poking", "freezing")); + damageType.normalDeathMessage = "%1$s was slain"; + damageType.itemDeathMessage = "%1$s was slain by %2$s using %3$s"; + damageType.playerDeathMessage = "%1$s was slain whilst escaping %2$s"; + return damageType; } // As feature requires placement and feature to place, this GE is only returned for uiTests // For generator tests, it will be tested by GTFeatureBlocks anyway @@ -1508,16 +1538,16 @@ private static GeneratableElement getCommandExample(ModElement modElement, Strin } public static LivingEntity getLivingEntity(ModElement modElement, Random random, boolean _true, boolean emptyLists, - int valueIndex, List blocksAndItems, List blocksAndItemsAndTags, - List biomes) { + List blocksAndItems, List blocksAndItemsAndTags, List biomes) { LivingEntity livingEntity = new LivingEntity(modElement); livingEntity.mobName = modElement.getName(); livingEntity.mobLabel = "mod label " + StringUtils.machineToReadableName(modElement.getName()); livingEntity.mobModelTexture = "entityTx1.png"; - livingEntity.mobModelGlowTexture = emptyLists ? "" : "test.png"; livingEntity.transparentModelCondition = new LogicProcedure(emptyLists ? "condition1" : null, _true); livingEntity.isShakingCondition = new LogicProcedure(emptyLists ? "condition2" : null, !_true); livingEntity.solidBoundingBox = new LogicProcedure(emptyLists ? "condition3" : null, _true); + livingEntity.visualScale = new NumberProcedure(emptyLists ? null : "number1", 8.123); + livingEntity.boundingBoxScale = new NumberProcedure(emptyLists ? null : "number2", 4.223); livingEntity.mobModelName = getRandomItem(random, LivingEntityGUI.builtinmobmodels).getReadableName(); livingEntity.spawnEggBaseColor = Color.red; livingEntity.spawnEggDotColor = Color.green; @@ -1632,17 +1662,47 @@ public static LivingEntity getLivingEntity(ModElement modElement, Random random, livingEntity.maxNumberOfMobsPerGroup = 40; livingEntity.restrictionBiomes = new ArrayList<>(); if (!emptyLists) { - livingEntity.restrictionBiomes.addAll( - biomes.stream().skip(_true ? 0 : ((long) (biomes.size() / 4) * valueIndex)).limit(biomes.size() / 4) - .map(e -> new BiomeEntry(modElement.getWorkspace(), e.getName())).toList()); - livingEntity.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_overworld")); - livingEntity.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#forge:tag/test")); + if (_true) { + livingEntity.restrictionBiomes.addAll( + biomes.stream().map(e -> new BiomeEntry(modElement.getWorkspace(), e.getName())).toList()); + } else { + livingEntity.restrictionBiomes.add(new BiomeEntry(modElement.getWorkspace(), "#is_overworld")); + } } livingEntity.spawnInDungeons = _true; livingEntity.modelWidth = 0.4; livingEntity.modelHeight = 1.3; livingEntity.mountedYOffset = -3.1; livingEntity.modelShadowSize = 1.8; + livingEntity.modelLayers = new ArrayList<>(); + if (!emptyLists) { + livingEntity.entityDataEntries.add(new PropertyDataWithValue<>(new PropertyData.LogicType("Logic"), _true)); + livingEntity.entityDataEntries.add( + new PropertyDataWithValue<>(new PropertyData.IntegerType("Integer"), random.nextInt())); + livingEntity.entityDataEntries.add(new PropertyDataWithValue<>(new PropertyData.StringType("String"), + getRandomItem(random, new String[] { "value1", "value2", "value3" }))); + LivingEntity.ModelLayerEntry modelLayer = new LivingEntity.ModelLayerEntry(); + modelLayer.setWorkspace(modElement.getWorkspace()); + modelLayer.model = "Default"; + modelLayer.texture = "entityTx2.png"; + modelLayer.glow = true; + modelLayer.condition = null; + livingEntity.modelLayers.add(modelLayer); + modelLayer = new LivingEntity.ModelLayerEntry(); + modelLayer.setWorkspace(modElement.getWorkspace()); + modelLayer.model = "Default"; + modelLayer.texture = "test.png"; + modelLayer.glow = false; + modelLayer.condition = new Procedure("condition1"); + livingEntity.modelLayers.add(modelLayer); + modelLayer = new LivingEntity.ModelLayerEntry(); + modelLayer.setWorkspace(modElement.getWorkspace()); + modelLayer.model = "Default"; + modelLayer.texture = "entityTx2.png"; + modelLayer.glow = true; + modelLayer.condition = null; + livingEntity.modelLayers.add(modelLayer); + } return livingEntity; } @@ -1664,7 +1724,6 @@ private static GeneratableElement getToolExample(ModElement modElement, String t tool.immuneToFire = _true; tool.blocksAffected = new ArrayList<>(); tool.glowCondition = new LogicProcedure(emptyLists ? "condition2" : null, _true); - ; tool.specialInformation = new StringListProcedure(emptyLists ? null : "string1", Arrays.asList("info 1", "info 2", "test, is this", "another one")); if (!emptyLists) { @@ -1708,99 +1767,102 @@ private static GeneratableElement getRecipeExample(ModElement modElement, String new String[] { "MISC", "BUILDING", "REDSTONE", "EQUIPMENT" }); recipe.recipeType = recipeType; - List blocksAndItemsAndTags = ElementUtil.loadBlocksAndItemsAndTags(modElement.getWorkspace()); - List blocksAndItems = ElementUtil.loadBlocksAndItems(modElement.getWorkspace()); + List blocksAndItemsAndTagsNoAir = filterAir( + ElementUtil.loadBlocksAndItemsAndTags(modElement.getWorkspace())); + List blocksAndItemsNoAir = filterAir(ElementUtil.loadBlocksAndItems(modElement.getWorkspace())); switch (recipe.recipeType) { case "Crafting" -> { MItemBlock[] recipeSlots = new MItemBlock[9]; Arrays.fill(recipeSlots, new MItemBlock(modElement.getWorkspace(), "")); recipeSlots[0] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); if (random.nextBoolean()) recipeSlots[3] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); if (random.nextBoolean()) recipeSlots[6] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); if (random.nextBoolean()) recipeSlots[1] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); if (random.nextBoolean()) recipeSlots[4] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); if (random.nextBoolean()) recipeSlots[7] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); if (random.nextBoolean()) recipeSlots[2] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); if (random.nextBoolean()) recipeSlots[5] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); if (random.nextBoolean()) recipeSlots[8] = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); recipe.recipeRetstackSize = 11; recipe.recipeShapeless = _true; recipe.recipeReturnStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItems).getName()); + getRandomMCItem(random, blocksAndItemsNoAir).getName()); recipe.recipeSlots = recipeSlots; } case "Smelting" -> { recipe.smeltingInputStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); recipe.smeltingReturnStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItems).getName()); + getRandomMCItem(random, blocksAndItemsNoAir).getName()); recipe.xpReward = 1.234; recipe.cookingTime = 123; } case "Smoking" -> { recipe.smokingInputStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); recipe.smokingReturnStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItems).getName()); + getRandomMCItem(random, blocksAndItemsNoAir).getName()); recipe.xpReward = 1.34; recipe.cookingTime = 42; } case "Blasting" -> { recipe.blastingInputStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); recipe.blastingReturnStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItems).getName()); + getRandomMCItem(random, blocksAndItemsNoAir).getName()); recipe.xpReward = 6.45; recipe.cookingTime = 1000; } case "Stone cutting" -> { recipe.stoneCuttingInputStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); recipe.stoneCuttingReturnStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItems).getName()); + getRandomMCItem(random, blocksAndItemsNoAir).getName()); recipe.recipeRetstackSize = 32; } case "Campfire cooking" -> { recipe.campfireCookingInputStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); recipe.campfireCookingReturnStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItems).getName()); + getRandomMCItem(random, blocksAndItemsNoAir).getName()); recipe.xpReward = 24.234; recipe.cookingTime = 2983; } case "Smithing" -> { recipe.smithingInputStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); recipe.smithingInputAdditionStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); + recipe.smithingInputTemplateStack = new MItemBlock(modElement.getWorkspace(), + _true ? getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName() : ""); recipe.smithingReturnStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItems).getName()); + getRandomMCItem(random, blocksAndItemsNoAir).getName()); } case "Brewing" -> { recipe.brewingInputStack = new MItemBlock(modElement.getWorkspace(), getRandomMCItem(random, - ElementUtil.loadBlocksAndItemsAndTagsAndPotions(modElement.getWorkspace())).getName()); + filterAir(ElementUtil.loadBlocksAndItemsAndTagsAndPotions(modElement.getWorkspace()))).getName()); recipe.brewingIngredientStack = new MItemBlock(modElement.getWorkspace(), - getRandomMCItem(random, blocksAndItemsAndTags).getName()); + getRandomMCItem(random, blocksAndItemsAndTagsNoAir).getName()); recipe.brewingReturnStack = new MItemBlock(modElement.getWorkspace(), getRandomMCItem(random, - ElementUtil.loadBlocksAndItemsAndPotions(modElement.getWorkspace())).getName()); + filterAir(ElementUtil.loadBlocksAndItemsAndPotions(modElement.getWorkspace()))).getName()); } default -> throw new RuntimeException("Unknown recipe type"); } diff --git a/src/test/java/net/mcreator/integration/WorkspaceConvertersTest.java b/src/test/java/net/mcreator/integration/WorkspaceConvertersTest.java index ce718b62956..5437e84da16 100644 --- a/src/test/java/net/mcreator/integration/WorkspaceConvertersTest.java +++ b/src/test/java/net/mcreator/integration/WorkspaceConvertersTest.java @@ -20,25 +20,27 @@ package net.mcreator.integration; import net.mcreator.element.GeneratableElement; +import net.mcreator.element.parts.IWorkspaceDependent; import net.mcreator.generator.Generator; import net.mcreator.generator.GeneratorConfiguration; import net.mcreator.generator.GeneratorFlavor; +import net.mcreator.integration.ui.UITestUtil; import net.mcreator.io.zip.ZipIO; -import net.mcreator.ui.init.ImageMakerTexturesCache; +import net.mcreator.ui.MCreator; +import net.mcreator.ui.modgui.ModElementGUI; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.WorkspaceUtils; import net.mcreator.workspace.elements.ModElement; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.TestFactory; +import org.junit.jupiter.api.extension.ExtendWith; import org.reflections.Reflections; import org.reflections.scanners.Scanners; import org.reflections.util.ConfigurationBuilder; import java.io.File; -import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Objects; @@ -49,15 +51,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -public class WorkspaceConvertersTest { - - @BeforeAll public static void initTest() throws IOException { - System.setProperty("log_directory", System.getProperty("java.io.tmpdir")); - - TestSetup.setupIntegrationTestEnvironment(); - - ImageMakerTexturesCache.init(); - } +@ExtendWith(IntegrationTestSetup.class) public class WorkspaceConvertersTest { public @TestFactory Stream testWorkspaceConversions() { Set testWorkspaces = new Reflections( @@ -83,18 +77,24 @@ public class WorkspaceConvertersTest { assertNotNull(generatorConfiguration); - try (Workspace workspace = Workspace.readFromFS(workspaceFile, generatorConfiguration)) { + try (Workspace workspace = Workspace.readFromFSUnsafe(workspaceFile, generatorConfiguration)) { // Conversions for (ModElement mod : workspace.getModElements()) { mod.getGeneratableElement(); } + MCreator mcreator = new MCreator(null, workspace); + // Check if all MEs have valid GE definition for (ModElement mod : workspace.getModElements()) { GeneratableElement ge = mod.getGeneratableElement(); assertNotNull(ge); + // Check if all workspace fields are not null + IWorkspaceDependent.processWorkspaceDependentObjects(ge, + workspaceDependent -> assertNotNull(workspaceDependent.getWorkspace())); + // test if methods below work and no exceptions are thrown // save custom mod element picture if it has one @@ -108,6 +108,12 @@ public class WorkspaceConvertersTest { // test if GE definition is valid enough to be generated assertTrue(workspace.getGenerator().generateElement(ge)); + + // test if the converted GE can be opened in the UI + ModElementGUI modElementGUI = UITestUtil.openModElementGUIFor(mcreator, ge); + + // test if UI validation is error free + UITestUtil.testIfValidationPasses(modElementGUI); } } }); diff --git a/src/test/java/net/mcreator/integration/generator/BlocklyTestUtil.java b/src/test/java/net/mcreator/integration/generator/BlocklyTestUtil.java index 5f349a49ecd..ac41fbaaf1a 100644 --- a/src/test/java/net/mcreator/integration/generator/BlocklyTestUtil.java +++ b/src/test/java/net/mcreator/integration/generator/BlocklyTestUtil.java @@ -122,6 +122,9 @@ protected static boolean populateFields(ToolboxBlock toolboxBlock, Workspace wor if (arg.has("name") && arg.get("name").getAsString().equals(field)) { processed += appendFieldXML(workspace, random, additionalXML, arg, field); break; + } else if (toolboxBlock.getToolboxTestXML().contains("")) { + processed++; + break; } } } @@ -233,7 +236,7 @@ private static String[] getDataListFieldValues(Workspace workspace, String datal return ElementUtil.loadAllSpawnableEntities(workspace).stream().map(DataListEntry::getName) .toArray(String[]::new); case "gui": - return ElementUtil.loadBasicGUI(workspace).toArray(String[]::new); + return ElementUtil.loadBasicGUIs(workspace).toArray(String[]::new); case "direction": return ElementUtil.loadDirections(); case "biome": diff --git a/src/test/java/net/mcreator/integration/generator/GTAITaskBlocks.java b/src/test/java/net/mcreator/integration/generator/GTAITaskBlocks.java index 46500381294..0d4c47f1aa2 100644 --- a/src/test/java/net/mcreator/integration/generator/GTAITaskBlocks.java +++ b/src/test/java/net/mcreator/integration/generator/GTAITaskBlocks.java @@ -77,7 +77,7 @@ public static void runTest(Logger LOG, String generatorName, Random random, Work testXML = testXML.replace("", "" + additionalXML); - LivingEntity livingentity = TestWorkspaceDataProvider.getLivingEntity(modElement, random, true, true, 0, + LivingEntity livingentity = TestWorkspaceDataProvider.getLivingEntity(modElement, random, true, true, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); if (aiTask.getType() == IBlockGenerator.BlockType.PROCEDURAL) diff --git a/src/test/java/net/mcreator/integration/generator/GTModElements.java b/src/test/java/net/mcreator/integration/generator/GTModElements.java index 8304cdea1b5..0858f01369a 100644 --- a/src/test/java/net/mcreator/integration/generator/GTModElements.java +++ b/src/test/java/net/mcreator/integration/generator/GTModElements.java @@ -30,6 +30,7 @@ import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; import net.mcreator.element.ModElementTypeLoader; +import net.mcreator.element.parts.IWorkspaceDependent; import net.mcreator.generator.GeneratorStats; import net.mcreator.generator.GeneratorTemplate; import net.mcreator.integration.TestWorkspaceDataProvider; @@ -42,8 +43,7 @@ import java.util.Random; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; +import static org.junit.jupiter.api.Assertions.*; public class GTModElements { @@ -62,6 +62,10 @@ public static void runTest(Logger LOG, String generatorName, Random random, Work + " with " + modElementExamples.size() + " variants"); modElementExamples.forEach(generatableElement -> { + // Check if all workspace fields are not null (from the TestWorkspaceDataProvider) + IWorkspaceDependent.processWorkspaceDependentObjects(generatableElement, + workspaceDependent -> assertNotNull(workspaceDependent.getWorkspace())); + ModElement modElement = generatableElement.getModElement(); workspace.addModElement(modElement); diff --git a/src/test/java/net/mcreator/integration/generator/GeneratorsTest.java b/src/test/java/net/mcreator/integration/generator/GeneratorsTest.java index 24feaad7f24..1749678e873 100644 --- a/src/test/java/net/mcreator/integration/generator/GeneratorsTest.java +++ b/src/test/java/net/mcreator/integration/generator/GeneratorsTest.java @@ -22,22 +22,20 @@ import net.mcreator.generator.setup.WorkspaceGeneratorSetup; import net.mcreator.gradle.GradleDaemonUtils; import net.mcreator.gradle.GradleErrorCodes; -import net.mcreator.integration.TestSetup; +import net.mcreator.integration.IntegrationTestSetup; import net.mcreator.integration.TestWorkspaceDataProvider; import net.mcreator.io.FileIO; import net.mcreator.io.writer.ClassWriter; import net.mcreator.plugin.PluginLoader; -import net.mcreator.preferences.PreferencesManager; import net.mcreator.ui.MCreator; -import net.mcreator.ui.component.ConsolePane; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.settings.WorkspaceSettings; import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.TestFactory; +import org.junit.jupiter.api.extension.ExtendWith; import java.io.File; import java.io.IOException; @@ -54,25 +52,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; -public class GeneratorsTest { +@ExtendWith(IntegrationTestSetup.class) public class GeneratorsTest { - private static Logger LOG; - - @BeforeAll public static void initTest() throws IOException { - System.setProperty("log_directory", System.getProperty("java.io.tmpdir")); - LOG = LogManager.getLogger("Generator Test"); - - TestSetup.setupIntegrationTestEnvironment(); - - // enable logging of HTML panes (gradle console) - ConsolePane.DEBUG_CONTENTS_TO_LOG = true; - - // reduce autosave interval for tests - PreferencesManager.PREFERENCES.backups.workspaceAutosaveInterval.set(2000); - - // This test is RAM intensive, so we may need more RAM - PreferencesManager.PREFERENCES.gradle.xmx.set(3072); // 3G - } + private static final Logger LOG = LogManager.getLogger("Generator Test"); public @TestFactory Stream testGenerators() { long rgenseed = System.currentTimeMillis(); diff --git a/src/test/java/net/mcreator/integration/ui/DialogsTest.java b/src/test/java/net/mcreator/integration/ui/DialogsTest.java index de713603f1f..9cfcea8f86b 100644 --- a/src/test/java/net/mcreator/integration/ui/DialogsTest.java +++ b/src/test/java/net/mcreator/integration/ui/DialogsTest.java @@ -23,7 +23,7 @@ import net.mcreator.generator.Generator; import net.mcreator.generator.GeneratorConfiguration; import net.mcreator.generator.GeneratorFlavor; -import net.mcreator.integration.TestSetup; +import net.mcreator.integration.IntegrationTestSetup; import net.mcreator.integration.TestWorkspaceDataProvider; import net.mcreator.minecraft.ElementUtil; import net.mcreator.ui.MCreator; @@ -34,6 +34,7 @@ import net.mcreator.ui.dialogs.tools.*; import net.mcreator.ui.dialogs.workspace.GeneratorSelector; import net.mcreator.ui.dialogs.workspace.NewWorkspaceDialog; +import net.mcreator.ui.dialogs.workspace.WorkspaceDialogs; import net.mcreator.ui.dialogs.wysiwyg.*; import net.mcreator.ui.init.L10N; import net.mcreator.ui.minecraft.states.JStateLabel; @@ -44,12 +45,9 @@ import net.mcreator.ui.wysiwyg.WYSIWYGEditor; import net.mcreator.workspace.Workspace; import net.mcreator.workspace.settings.WorkspaceSettings; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.api.extension.ExtendWith; import java.io.File; import java.io.IOException; @@ -59,21 +57,11 @@ import static org.junit.jupiter.api.Assertions.fail; -public class DialogsTest { - - private static Logger LOG; +@ExtendWith(IntegrationTestSetup.class) public class DialogsTest { private static MCreator mcreator; @BeforeAll public static void initTest() throws IOException { - System.setProperty("log_directory", System.getProperty("java.io.tmpdir")); - LOG = LogManager.getLogger("Dialogs Test"); - - // disable native file choosers for tests due to threading issues - FileDialogs.DISABLE_NATIVE_DIALOGS = true; - - TestSetup.setupIntegrationTestEnvironment(); - // create temporary directory Path tempDirWithPrefix = Files.createTempDirectory("mcreator_test_workspace"); @@ -93,10 +81,6 @@ public class DialogsTest { mcreator = new MCreator(null, workspace); } - @BeforeEach void printName(TestInfo testInfo) { - LOG.info("Running " + testInfo.getDisplayName()); - } - @Test public void testWorkspaceSelector() throws Throwable { UITestUtil.waitUntilWindowIsOpen(mcreator, () -> new WorkspaceSelector(null, f -> {})); } @@ -105,12 +89,30 @@ public class DialogsTest { UITestUtil.waitUntilWindowIsOpen(mcreator, () -> new NewWorkspaceDialog(mcreator)); } + @Test public void testNewWorkspaceSettingsDialog() throws Throwable { + UITestUtil.waitUntilWindowIsOpen(mcreator, + () -> WorkspaceDialogs.workspaceSettings(mcreator, mcreator.getWorkspace())); + } + @Test public void testGeneratorSelectorDialog() throws Throwable { UITestUtil.waitUntilWindowIsOpen(mcreator, () -> GeneratorSelector.getGeneratorSelector(mcreator, mcreator.getGeneratorConfiguration(), GeneratorFlavor.FORGE, true)); } + @Test public void testProgressDialog() throws Throwable { + UITestUtil.waitUntilWindowIsOpen(mcreator, () -> { + ProgressDialog dialog = new ProgressDialog(null, "Test progress dialog"); + ProgressDialog.ProgressUnit unit = new ProgressDialog.ProgressUnit("Test progress unit"); + dialog.addProgressUnit(unit); + unit.setPercent(50); + unit.markStateError(); + unit.markStateWarning(); + unit.markStateOk(); + dialog.setVisible(true); + }); + } + @Test public void testAboutDialog() throws Throwable { UITestUtil.waitUntilWindowIsOpen(mcreator, () -> AboutAction.showDialog(mcreator)); } @@ -208,6 +210,13 @@ public class DialogsTest { false)); } + @Test public void testUsagesSearchDialogs() throws Throwable { + UITestUtil.waitUntilWindowIsOpen(mcreator, + () -> SearchUsagesDialog.showUsagesDialog(mcreator, "", Collections.emptyList())); + UITestUtil.waitUntilWindowIsOpen(mcreator, + () -> SearchUsagesDialog.showDeleteDialog(mcreator, "", Collections.emptyList(), "test sufix")); + } + @Test public void testFileDialogs() throws Throwable { UITestUtil.waitUntilWindowIsOpen(mcreator, () -> FileDialogs.getWorkspaceDirectorySelectDialog(mcreator, new File(System.getProperty("user.home")))); diff --git a/src/test/java/net/mcreator/integration/ui/ImageMakerTest.java b/src/test/java/net/mcreator/integration/ui/ImageMakerTest.java index c1c7e0739db..f32400c0cd0 100644 --- a/src/test/java/net/mcreator/integration/ui/ImageMakerTest.java +++ b/src/test/java/net/mcreator/integration/ui/ImageMakerTest.java @@ -22,10 +22,9 @@ import net.mcreator.generator.Generator; import net.mcreator.generator.GeneratorConfiguration; import net.mcreator.generator.GeneratorFlavor; -import net.mcreator.integration.TestSetup; +import net.mcreator.integration.IntegrationTestSetup; import net.mcreator.ui.MCreator; import net.mcreator.ui.dialogs.imageeditor.*; -import net.mcreator.ui.init.ImageMakerTexturesCache; import net.mcreator.ui.views.editor.image.ImageMakerView; import net.mcreator.ui.views.editor.image.layer.Layer; import net.mcreator.ui.views.editor.image.tool.component.ColorSelector; @@ -34,9 +33,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.api.extension.ExtendWith; import java.awt.*; import java.io.File; @@ -46,20 +44,13 @@ import static org.junit.jupiter.api.Assertions.fail; -public class ImageMakerTest { +@ExtendWith(IntegrationTestSetup.class) public class ImageMakerTest { - private static Logger LOG; + private static final Logger LOG = LogManager.getLogger("Image Maker Test"); private static MCreator mcreator; @BeforeAll public static void initTest() throws IOException { - System.setProperty("log_directory", System.getProperty("java.io.tmpdir")); - LOG = LogManager.getLogger("Image Maker Test"); - - TestSetup.setupIntegrationTestEnvironment(); - - ImageMakerTexturesCache.init(); - // create temporary directory Path tempDirWithPrefix = Files.createTempDirectory("mcreator_test_workspace"); @@ -79,10 +70,6 @@ public class ImageMakerTest { mcreator = new MCreator(null, workspace); } - @BeforeEach void printName(TestInfo testInfo) { - LOG.info("Running " + testInfo.getDisplayName()); - } - @Test public void testImageMaker() throws Throwable { ImageMakerView imv = new ImageMakerView(mcreator); imv.newImage(new Layer(100, 100, 0, 0, "Layer", Color.red)); diff --git a/src/test/java/net/mcreator/integration/ui/ModElementUITest.java b/src/test/java/net/mcreator/integration/ui/ModElementUITest.java index 7ef843c2409..942f1591f28 100644 --- a/src/test/java/net/mcreator/integration/ui/ModElementUITest.java +++ b/src/test/java/net/mcreator/integration/ui/ModElementUITest.java @@ -22,15 +22,15 @@ import net.mcreator.element.GeneratableElement; import net.mcreator.element.ModElementType; import net.mcreator.element.ModElementTypeLoader; +import net.mcreator.element.parts.IWorkspaceDependent; import net.mcreator.generator.Generator; import net.mcreator.generator.GeneratorConfiguration; import net.mcreator.generator.GeneratorFlavor; -import net.mcreator.integration.TestSetup; +import net.mcreator.integration.IntegrationTestSetup; import net.mcreator.integration.TestWorkspaceDataProvider; import net.mcreator.integration.generator.GTSampleElements; import net.mcreator.preferences.PreferencesManager; import net.mcreator.ui.MCreator; -import net.mcreator.ui.blockly.BlocklyPanel; import net.mcreator.ui.init.L10N; import net.mcreator.ui.modgui.ModElementGUI; import net.mcreator.workspace.Workspace; @@ -40,34 +40,26 @@ import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import java.io.File; import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Random; import static org.junit.jupiter.api.Assertions.*; -public class ModElementUITest { +@ExtendWith(IntegrationTestSetup.class) public class ModElementUITest { - private static Logger LOG; + private static final Logger LOG = LogManager.getLogger("Mod Element Test"); private static Workspace workspace; private static MCreator mcreator; @BeforeAll public static void initTest() throws IOException { - System.setProperty("log_directory", System.getProperty("java.io.tmpdir")); - LOG = LogManager.getLogger("Mod Element Test"); - - TestSetup.setupIntegrationTestEnvironment(); - // create temporary directory Path tempDirWithPrefix = Files.createTempDirectory("mcreator_test_workspace"); @@ -123,9 +115,7 @@ public class ModElementUITest { testModElementLoading(random); } - private void testModElementLoading(Random random) - throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException, - InterruptedException { + private void testModElementLoading(Random random) throws Exception { for (ModElementType modElementType : ModElementTypeLoader.REGISTRY) { if (modElementType == ModElementType.CODE) @@ -147,29 +137,18 @@ private void testModElementLoading(Random random) // back to GeneratableElement generatableElement = workspace.getModElementManager() - .fromJSONtoGeneratableElement(exportedJSON, modElement);// from JSON to generatableelement - - assertNotNull(generatableElement); + .fromJSONtoGeneratableElement(exportedJSON, modElement);// from JSON to GeneratableElement - ModElementGUI modElementGUI = modElementType.getModElementGUI(mcreator, modElement, false); + // Check if all workspace fields are not null after re-import + IWorkspaceDependent.processWorkspaceDependentObjects(generatableElement, + workspaceDependent -> assertNotNull(workspaceDependent.getWorkspace())); - modElementGUI.showView(); - - Field field = modElementGUI.getClass().getSuperclass().getDeclaredField("editingMode"); - field.setAccessible(true); - field.set(modElementGUI, true); + assertNotNull(generatableElement); - // test opening generatable element - Method method = modElementGUI.getClass() - .getDeclaredMethod("openInEditingMode", GeneratableElement.class); - method.setAccessible(true); - method.invoke(modElementGUI, generatableElement); + ModElementGUI modElementGUI = UITestUtil.openModElementGUIFor(mcreator, generatableElement); - if (Arrays.stream(modElementGUI.getClass().getDeclaredFields()) - .anyMatch(f -> f.getType() == BlocklyPanel.class)) { - // If ModElementGUI contains BlocklyPanel, give it time to fully load - Thread.sleep(3500); - } + // test if UI validation is error free + UITestUtil.testIfValidationPasses(modElementGUI); // test if data remains the same after reloading the data lists modElementGUI.reloadDataLists(); @@ -177,6 +156,10 @@ private void testModElementLoading(Random random) // test UI -> GeneratableElement generatableElement = modElementGUI.getElementFromGUI(); + // Check if all workspace fields are not null after reading from GUI + IWorkspaceDependent.processWorkspaceDependentObjects(generatableElement, + workspaceDependent -> assertNotNull(workspaceDependent.getWorkspace())); + // compare GeneratableElements, no fields should change in the process String exportedJSON2 = workspace.getModElementManager().generatableElementToJSON(generatableElement); diff --git a/src/test/java/net/mcreator/integration/ui/UITestUtil.java b/src/test/java/net/mcreator/integration/ui/UITestUtil.java index e8b8ebc7a03..9822b1627ec 100644 --- a/src/test/java/net/mcreator/integration/ui/UITestUtil.java +++ b/src/test/java/net/mcreator/integration/ui/UITestUtil.java @@ -19,14 +19,59 @@ package net.mcreator.integration.ui; +import net.mcreator.element.GeneratableElement; +import net.mcreator.element.ModElementType; +import net.mcreator.ui.MCreator; +import net.mcreator.ui.blockly.BlocklyPanel; +import net.mcreator.ui.modgui.ModElementGUI; +import net.mcreator.ui.validation.AggregatedValidationResult; + import javax.swing.*; import java.awt.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicReference; +import static org.junit.jupiter.api.Assertions.fail; + public class UITestUtil { + public static ModElementGUI openModElementGUIFor(MCreator mcreator, GeneratableElement generatableElement) + throws Exception { + ModElementGUI modElementGUI = generatableElement.getModElement().getType() + .getModElementGUI(mcreator, generatableElement.getModElement(), false); + modElementGUI.reloadDataLists(); + + Field field = modElementGUI.getClass().getSuperclass().getDeclaredField("editingMode"); + field.setAccessible(true); + field.set(modElementGUI, true); + + // test opening generatable element + Method method = modElementGUI.getClass().getDeclaredMethod("openInEditingMode", GeneratableElement.class); + method.setAccessible(true); + method.invoke(modElementGUI, generatableElement); + + // If ModElementGUI contains BlocklyPanel, give it time to fully load + if (Arrays.stream(modElementGUI.getClass().getDeclaredFields()) + .anyMatch(f -> f.getType() == BlocklyPanel.class)) { + Thread.sleep(3500); + } + + return modElementGUI; + } + + public static void testIfValidationPasses(ModElementGUI modElementGUI) { + // test if UI validation is error free (skip advancement and feature as provider provides empty Blockly setup) + AggregatedValidationResult validationResult = modElementGUI.validateAllPages(); + if ((modElementGUI.getModElement().getType() != ModElementType.ADVANCEMENT + && modElementGUI.getModElement().getType() != ModElementType.FEATURE) + && !validationResult.validateIsErrorFree()) { + fail(String.join(",", validationResult.getValidationProblemMessages())); + } + } + public static void waitUntilWindowIsOpen(Window master, Runnable openTask) throws Throwable { int frames_start = Window.getWindows().length; diff --git a/src/test/java/net/mcreator/integration/workspace/ReferencesFinderTest.java b/src/test/java/net/mcreator/integration/workspace/ReferencesFinderTest.java new file mode 100644 index 00000000000..747bfe8c62b --- /dev/null +++ b/src/test/java/net/mcreator/integration/workspace/ReferencesFinderTest.java @@ -0,0 +1,224 @@ +/* + * MCreator (https://mcreator.net/) + * Copyright (C) 2012-2020, Pylo + * Copyright (C) 2020-2023, Pylo, opensource contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.mcreator.integration.workspace; + +import net.mcreator.element.ModElementType; +import net.mcreator.element.ModElementTypeLoader; +import net.mcreator.generator.*; +import net.mcreator.integration.IntegrationTestSetup; +import net.mcreator.integration.TestWorkspaceDataProvider; +import net.mcreator.integration.generator.GTSampleElements; +import net.mcreator.ui.workspace.resources.TextureType; +import net.mcreator.util.ListUtils; +import net.mcreator.workspace.Workspace; +import net.mcreator.workspace.elements.ModElement; +import net.mcreator.workspace.elements.SoundElement; +import net.mcreator.workspace.references.ReferencesFinder; +import net.mcreator.workspace.resources.Model; +import net.mcreator.workspace.settings.WorkspaceSettings; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Random; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(IntegrationTestSetup.class) public class ReferencesFinderTest { + + private static final Logger LOG = LogManager.getLogger("References Finder Test"); + + private static Workspace workspace; + + @BeforeAll public static void initTest() throws IOException { + long rgenseed = System.currentTimeMillis(); + Random random = new Random(rgenseed); + LOG.info("Random number generator seed: " + rgenseed); + + // create temporary directory + Path tempDirWithPrefix = Files.createTempDirectory("mcreator_test_workspace"); + + GeneratorConfiguration generatorConfiguration = GeneratorConfiguration.getRecommendedGeneratorForFlavor( + Generator.GENERATOR_CACHE.values(), GeneratorFlavor.FORGE); + + if (generatorConfiguration == null) + fail("Failed to load any Forge flavored generator for this unit test"); + + // we create a new workspace + WorkspaceSettings workspaceSettings = new WorkspaceSettings("test_mod"); + workspaceSettings.setModName("Test mod"); + workspaceSettings.setCurrentGenerator(generatorConfiguration.getGeneratorName()); + workspace = Workspace.createWorkspace(new File(tempDirWithPrefix.toFile(), "test_mod.mcreator"), + workspaceSettings); + + LOG.info("Generating sample elements"); + TestWorkspaceDataProvider.fillWorkspaceWithTestData(workspace); + GTSampleElements.provideAndGenerateSampleElements(random, workspace); + for (ModElementType type : ModElementTypeLoader.REGISTRY) { + if (workspace.getGeneratorStats().getModElementTypeCoverageInfo().get(type) + != GeneratorStats.CoverageStatus.NONE) { + TestWorkspaceDataProvider.getModElementExamplesFor(workspace, type, false, random).forEach(e -> { + workspace.addModElement(e.getModElement()); + workspace.getModElementManager().storeModElement(e); + + // generate I18N keys for testLocalizationKeyUsagesSearch() to check later + LocalizationUtils.generateLocalizationKeys(workspace.getGenerator(), e, + (List) generatorConfiguration.getDefinitionsProvider().getModElementDefinition(type) + .get("localizationkeys")); + }); + } + } + } + + @Test void testModElementUsagesSearch() { + ModElement modElement = workspace.getModElementByName("Exampleblock3"); + ReferencesFinder.searchModElementUsages(workspace, modElement); + + modElement = workspace.getModElementByName("Examplelivingentity3"); + ReferencesFinder.searchModElementUsages(workspace, modElement); + + modElement = workspace.getModElementByName("condition1"); + Set references = ReferencesFinder.searchModElementUsages(workspace, modElement); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Examplelivingentity"))); + modElement = workspace.getModElementByName("condition4"); + references = ReferencesFinder.searchModElementUsages(workspace, modElement); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Exampleoverlay"))); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Examplegui"))); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Examplearmor"))); + + modElement = workspace.getModElementByName("number1"); + references = ReferencesFinder.searchModElementUsages(workspace, modElement); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Exampleitem"))); + + modElement = workspace.getModElementByName("string1"); + references = ReferencesFinder.searchModElementUsages(workspace, modElement); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Exampleitem"))); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Exampleblock"))); + + modElement = workspace.getModElementByName("procedure1"); + references = ReferencesFinder.searchModElementUsages(workspace, modElement); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Exampledimension"))); + + modElement = workspace.getModElementByName("procedure10"); + references = ReferencesFinder.searchModElementUsages(workspace, modElement); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Examplegui"))); + + modElement = workspace.getModElementByName("ExampleLootTable1"); + references = ReferencesFinder.searchModElementUsages(workspace, modElement); + assertTrue(references.stream().map(ModElement::getName).anyMatch(e -> e.contains("Exampleachievement"))); + } + + @Test void testTextureUsagesSearch() { + TextureType section = TextureType.PARTICLE; + File texture = workspace.getFolderManager().getTextureFile("particle1", section); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Exampleparticle"))); + + section = TextureType.EFFECT; + texture = workspace.getFolderManager().getTextureFile("effect1", section); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Examplepotioneffect"))); + + section = TextureType.ENTITY; + texture = workspace.getFolderManager().getTextureFile("entityTx1", section); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Examplelivingentity"))); + texture = workspace.getFolderManager().getTextureFile("entityTx2", section); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Examplelivingentity"))); + + section = TextureType.BLOCK; + texture = workspace.getFolderManager().getTextureFile("test6", section); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Exampleblock"))); + + section = TextureType.ITEM; + texture = workspace.getFolderManager().getTextureFile("test", section); + // "test" texture is not used as ITEM type in Block demo MEs, so this needs to be false + assertFalse(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Exampleblock"))); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Exampleitem"))); + + section = TextureType.SCREEN; + texture = workspace.getFolderManager().getTextureFile("picture1", section); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Examplegui"))); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Exampleoverlay"))); + + section = TextureType.ARMOR; + texture = workspace.getFolderManager().getTextureFile("armorTexture_layer_1", section); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Examplearmor"))); + texture = workspace.getFolderManager().getTextureFile("armorTexture_layer_2", section); + assertTrue(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Examplearmor"))); + texture = workspace.getFolderManager().getTextureFile("armorTexture", section); + assertFalse(ReferencesFinder.searchTextureUsages(workspace, texture, section).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Examplearmor"))); + } + + @Test void testModelUsagesSearch() { + Model model = new Model.BuiltInModel("Normal"); + assertTrue(ReferencesFinder.searchModelUsages(workspace, model).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Exampletool"))); + model = new Model.BuiltInModel("Cross model"); + assertTrue(ReferencesFinder.searchModelUsages(workspace, model).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Exampleplant"))); + model = new Model.BuiltInModel("Default"); + assertTrue(ReferencesFinder.searchModelUsages(workspace, model).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Exampleprojectile"))); + } + + @Test void testSoundUsagesSearch() { + SoundElement sound = ListUtils.getRandomItem(List.copyOf(workspace.getSoundElements())); + ReferencesFinder.searchSoundUsages(workspace, sound); + } + + @Test void testStructureUsagesSearch() { + String structure = "test"; + assertTrue(ReferencesFinder.searchStructureUsages(workspace, structure).stream().map(ModElement::getName) + .anyMatch(e -> e.contains("Examplestructure"))); + } + + @Test void testGlobalVariableUsagesSearch() { + String variableName = "logic2"; + assertTrue(ReferencesFinder.searchGlobalVariableUsages(workspace, variableName).isEmpty()); + variableName = "direction4"; + assertTrue(ReferencesFinder.searchGlobalVariableUsages(workspace, variableName).isEmpty()); + variableName = "blockstate3"; + assertTrue(ReferencesFinder.searchGlobalVariableUsages(workspace, variableName).isEmpty()); + } + + @Test void testLocalizationKeyUsagesSearch() { + String localizationKey = ListUtils.getRandomItem( + workspace.getLanguageMap().get("en_us").keySet().toArray(String[]::new)); + assertFalse(ReferencesFinder.searchLocalizationKeyUsages(workspace, localizationKey).isEmpty()); + } +} \ No newline at end of file