diff --git a/.github/workflows/cd-scripts.yml b/.github/workflows/cd-scripts.yml deleted file mode 100644 index 1adb1334..00000000 --- a/.github/workflows/cd-scripts.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: scripts -on: - workflow_dispatch: - - push: - branches: - - main - tags: - - '!*' # Do not execute on tags - paths: - - src/** - - tools/** - - yarn.lock - - .github/workflows/cd-scripts.yml - - eslint.config.js - - vitest.config.ts - - tsconfig.json - - pull_request: - -env: - CI: true - -jobs: - test: - name: Test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4.1.7 - with: - submodules: true - - - run: corepack enable - - - uses: actions/setup-node@v4.0.3 - with: - node-version: 22 - - - run: yarn install --immutable - - - run: node --no-warnings --experimental-strip-types --experimental-transform-types tools/build.ts - - - run: yarn test --run --coverage - - - name: Upload coverage - # Run only on push on main repo - if: github.repository == 'LushWay/Scripts' && github.ref == 'refs/heads/main' - uses: qltysh/qlty-action/coverage@v1 - with: - token: ${{ secrets.QLTY_COVERAGE_TOKEN }} - files: coverage/lcov.info - - lint: - name: Lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4.1.7 - with: - submodules: true - - - run: corepack enable - - - uses: actions/setup-node@v4.0.3 - with: - node-version: 22 - - - run: yarn install --immutable - - - run: node --no-warnings --experimental-strip-types --experimental-transform-types tools/build.ts - - - run: yarn tsc - - - run: yarn eslint src diff --git a/.gitignore b/.gitignore index a110f4ec..7eeed517 100644 --- a/.gitignore +++ b/.gitignore @@ -2,14 +2,4 @@ coverage .env.sentry-build-plugin manifest.json scripts - -# Yarn -node_modules -yarn-error.log -.yarn/* -!.yarn/cache -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions \ No newline at end of file +node_modules \ No newline at end of file diff --git a/.qlty/.gitignore b/.qlty/.gitignore deleted file mode 100644 index 30366188..00000000 --- a/.qlty/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -* -!configs -!configs/** -!hooks -!hooks/** -!qlty.toml -!.gitignore diff --git a/.qlty/configs/.yamllint.yaml b/.qlty/configs/.yamllint.yaml deleted file mode 100644 index fb31ea70..00000000 --- a/.qlty/configs/.yamllint.yaml +++ /dev/null @@ -1,8 +0,0 @@ -rules: - document-start: disable - quoted-strings: - required: only-when-needed - extra-allowed: ['{|}'] - key-duplicates: {} - octal-values: - forbid-implicit-octal: true diff --git a/.qlty/qlty.toml b/.qlty/qlty.toml deleted file mode 100644 index 721fb2b1..00000000 --- a/.qlty/qlty.toml +++ /dev/null @@ -1,109 +0,0 @@ -# This file was automatically generated by `qlty init`. -# You can modify it to suit your needs. -# We recommend you to commit this file to your repository. -# -# This configuration is used by both Qlty CLI and Qlty Cloud. -# -# Qlty CLI -- Code quality toolkit for developers -# Qlty Cloud -- Fully automated Code Health Platform -# -# Try Qlty Cloud: https://qlty.sh -# -# For a guide to configuration, visit https://qlty.sh/d/config -# Or for a full reference, visit https://qlty.sh/d/qlty-toml -config_version = "0" - -exclude_patterns = [ - "*_min.*", - "*-min.*", - "*.min.*", - "**/.yarn/**", - "**/*.d.ts", - "**/assets/**", - "**/bower_components/**", - "**/build/**", - "**/cache/**", - "**/config/**", - "**/db/**", - "**/deps/**", - "**/dist/**", - "**/extern/**", - "**/external/**", - "**/generated/**", - "**/Godeps/**", - "**/gradlew/**", - "**/mvnw/**", - "**/node_modules/**", - "**/protos/**", - "**/seed/**", - "**/target/**", - "**/templates/**", - "**/testdata/**", - "**/vendor/**", - "src/lib/assets/**", - "tools/**", - "*.config.ts", - "src/modules/world-edit/**", - "src/lib/i18n/sprintf.ts", - "src/lib/utils/later.ts", - "src/lib/vector.ts", - "items/**", - "*.json", - "functions/**", - ".github", - "entities", - ".vscode" -] - -test_patterns = [ - "**/test/**", - "**/spec/**", - "**/*.test.*", - "**/*.spec.*", - "**/*_test.*", - "**/*_spec.*", - "**/test_*.*", - "**/spec_*.*", -] - -[smells] -mode = "comment" -return_statements.enabled = false -function_parameters.threshold = 10 -function_complexity.threshold = 30 -file_complexity.threshold = 80 - -[[source]] -name = "default" -default = true - -# [[plugin]] -# name = "osv-scanner" - -# [[plugin]] -# name = "radarlint-js" - -[[plugin]] -name = "ripgrep" -mode = "comment" - -[[plugin]] -name = "trivy" -drivers = [ - "config", - "fs-vuln", -] - -[[plugin]] -name = "trufflehog" - - -# [[plugin]] -# name = "eslint" -# package_file = "package.json" -# package_filters = ["eslint", "prettier"] - -[[plugin]] -name = "prettier" -package_file = "package.json" -package_filters = ["prettier"] diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index f590f796..00000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "recommendations": [ - "hookyqr.jsdoctagcomplete", - "mojang-studios.minecraft-debugger", - "nobuwu.mc-color", - "zz5840.minecraft-lang-colorizer", - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint" - ] -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index a62ab09a..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": "0.3.0", - "configurations": [ - { - "type": "minecraft-js", - "request": "attach", - "targetModuleUuid": "8198b306-bfbb-48c9-874d-217cd4cef1ae", - "name": "Minecraft debugger", - "mode": "listen", - "localRoot": "${workspaceFolder}/src/", - "sourceMapRoot": "${workspaceFolder}/scripts/", - "port": 1000 - } - ] -} - -/* - -/script debugger connect localhost 1000 - -/connect localhost:1020 - -*/ diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 62fe91ee..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnPaste": false, - "editor.formatOnType": false, - "editor.formatOnSave": true, - "editor.formatOnSaveMode": "file", - "files.autoSave": "onFocusChange", - "typescript.preferences.autoImportFileExcludePatterns": [ - "./**/node_modules/@types/node", - "./**/node_modules/**", - "./scripts/src/test/__mocks__/**" - ] -} diff --git a/.yarn/plugins/@yarnpkg/plugin-after-install.cjs b/.yarn/plugins/@yarnpkg/plugin-after-install.cjs deleted file mode 100644 index 418e90b7..00000000 --- a/.yarn/plugins/@yarnpkg/plugin-after-install.cjs +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-after-install", -factory: function (require) { -"use strict";var plugin=(()=>{var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var r=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(o,e)=>(typeof require<"u"?require:o)[e]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var I=(t,o)=>{for(var e in o)s(t,e,{get:o[e],enumerable:!0})},h=(t,o,e,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of x(o))!C.call(t,n)&&n!==e&&s(t,n,{get:()=>o[n],enumerable:!(a=g(o,n))||a.enumerable});return t};var k=t=>h(s({},"__esModule",{value:!0}),t);var P={};I(P,{default:()=>y});var d=r("@yarnpkg/core");var f=r("@yarnpkg/core"),c={afterInstall:{description:"Hook that will always run after install",type:f.SettingsType.STRING,default:""}};var p=r("clipanion"),u=r("@yarnpkg/core");var m=r("@yarnpkg/shell"),l=async(t,o)=>{let e=t.get("afterInstall"),a=!!t.projectCwd?.endsWith(`dlx-${process.pid}`);return e&&!a?(o&&console.log("\x1B[94m➤\x1B[39m \x1B[90mYN0000\x1B[39m: Running `afterInstall` hook..."),(0,m.execute)(e,[],{cwd:t.projectCwd||void 0})):0};var i=class extends p.Command{async execute(){let o=await u.Configuration.find(this.context.cwd,this.context.plugins);return l(o,!1)}};i.paths=[["after-install"]];var w={configuration:c,commands:[i],hooks:{afterAllInstalled:async(t,o)=>{if(o?.mode===d.InstallMode.UpdateLockfile)return;if(await l(t.configuration,!0))throw new Error("`afterInstall` hook failed, see output above.")}}},y=w;return k(P);})(); -return plugin; -} -}; diff --git a/.yarnrc.yml b/.yarnrc.yml deleted file mode 100644 index b08ba0a9..00000000 --- a/.yarnrc.yml +++ /dev/null @@ -1,6 +0,0 @@ -afterInstall: node --no-warnings --experimental-strip-types --experimental-transform-types tools/patches.ts - -nodeLinker: node-modules - -plugins: - - .yarn/plugins/@yarnpkg/plugin-after-install.cjs diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..33830f36 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM busybox + +WORKDIR /build + +COPY scripts scripts +COPY functions functions +COPY items items +COPY entities entities +COPY structures structures +COPY manifest.json manifest.json + +CMD cp -r /build/* /target/ && sleep infinity \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js index 53d59f86..261d04a0 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -27,7 +27,6 @@ export default ts.config( 'src/lib/lang/**', 'src/test/__mocks__/**', 'coverage/**', - '.yarn/**', ], }, { plugins: { tr }, rules: { 'tr/tr': I18N ? 'error' : 'off', 'tr/export-boundaries': 'error' } }, @@ -37,6 +36,7 @@ export default ts.config( 'no-empty': 'off', 'no-console': 'off', 'no-undef': 'off', + 'no-var': 'off', 'prefer-const': 'warn', 'lines-between-class-members': 'off', '@typescript-eslint/no-explicit-any': 'off', diff --git a/pack_icon.png b/pack_icon.png deleted file mode 100644 index 011fa285..00000000 Binary files a/pack_icon.png and /dev/null differ diff --git a/package.json b/package.json index b0388453..26794944 100644 --- a/package.json +++ b/package.json @@ -1,69 +1,30 @@ -{ - "name": "scripts", - "version": "0.17.117", - "license": "MIT", - "type": "module", - "scripts": { - "lint": "eslint ./src/ --fix", - "test": "./node_modules/vitest/vitest.mjs", - "coverage": "./node_modules/vitest/vitest.mjs --coverage", - "cov": "./node_modules/vitest/vitest.mjs --coverage --ui", - "patches": "node --no-warnings --experimental-strip-types --experimental-transform-types tools/patches.ts", - "prepare": "git config core.ignorecase false" - }, - "dependencies": { - "@formatjs/intl-durationformat": "^0.7.4", - "@formatjs/intl-listformat": "^7.7.11", - "@formatjs/intl-locale": "^4.2.11", - "@formatjs/intl-numberformat": "^8.15.4", - "@formatjs/intl-pluralrules": "^5.4.4", - "@minecraft/server": "2.1.0-beta.1.21.90-stable", - "@minecraft/server-gametest": "1.0.0-beta.1.21.90-stable", - "@minecraft/server-net": "1.0.0-beta.1.21.90-stable", - "@minecraft/server-ui": "2.1.0-beta.1.21.90-stable", - "@minecraft/vanilla-data": "1.21.90", - "async-mutex": "^0.5.0" - }, - "resolutions": { - "@minecraft/server": "2.1.0-beta.1.21.90-stable", - "@minecraft/server-gametest": "1.0.0-beta.1.21.90-stable", - "@minecraft/server-net": "1.0.0-beta.1.21.90-stable", - "@minecraft/server-ui": "2.1.0-beta.1.21.90-stable", - "@minecraft/vanilla-data": "1.21.90" - }, - "devDependencies": { - "@eslint/js": "^9.29.0", - "@vitest/coverage-istanbul": "3.2.4", - "@vitest/ui": "3.2.4", - "esbuild": "^0.25.5", - "eslint": "^9.29.0", - "eslint-config-prettier": "^10.1.5", - "eslint-import-resolver-typescript": "^4.4.4", - "eslint-plugin-file-progress": "^3.0.2", - "eslint-plugin-only-warn": "^1.1.0", - "leafy-utils": "^7.1.5", - "prettier": "^3.6.2", - "prettier-plugin-jsdoc": "^1.3.3", - "tslib": "^2.8.1", - "typescript": "^5.8.3", - "typescript-eslint": "^8.35.0", - "vite-tsconfig-paths": "5.1.4", - "vitest": "3.2.4" - }, - "prettier": { - "singleQuote": true, - "arrowParens": "avoid", - "semi": false, - "printWidth": 120, - "endOfLine": "crlf", - "quoteProps": "consistent", - "plugins": [], - "jsdocTagsOrder": "{\"template\": 24.5}" - }, - "packageManager": "yarn@4.9.1", - "workspaces": { - "packages": [ - "tools/eslint-plugin" - ] - } -} +{ + "name": "@lw/scripts", + "version": "0.17.117", + "license": "MIT", + "type": "module", + "scripts": { + "scripts:lint": "eslint ./src/ --fix", + "scripts:test": "vitest", + "scripts:coverage": "vitest --coverage", + "scripts:cov": "vitest --coverage --ui", + "postinstall": "node tools/patches.ts", + "scripts:build": "node tools/build.ts" + }, + "dependencies": { + "async-mutex": "^0.5.0" + }, + "prettier": { + "singleQuote": true, + "arrowParens": "avoid", + "semi": false, + "printWidth": 120, + "endOfLine": "crlf", + "quoteProps": "consistent", + "plugins": [ + "prettier-plugin-jsdoc" + ], + "jsdocTagsOrder": "{\"template\": 24.5}" + } +} + diff --git a/src/index.ts b/src/index.ts index 38458904..b135f28c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,8 @@ -import { system } from '@minecraft/server' +// Takes too much to load dynamically which results in interrupted error +import 'lib/assets/intl-global-object' -system.beforeEvents.startup.subscribe(() => { - system.run(() => { - if (__TEST__) import('./test/loader') - else import('./modules/loader') - }) +import 'lib/assets/intl' + +import('./modules/loader').catch((e: unknown) => { + console.error('Loading error', e) }) diff --git a/src/lib.ts b/src/lib.ts index 38eab696..ccd281c6 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -5,54 +5,54 @@ import 'lib/load/message1' import 'lib/database/properties' // Database -export * from 'lib/database/inventory' -export * from 'lib/database/player' -export * from 'lib/database/scoreboard' -export * from 'lib/database/utils' - -// Command -export * from 'lib/command/index' - -// Lib -export * from 'lib/roles' -export * from 'lib/util' -export * from 'lib/vector' - -export * from 'lib/action' -export * from 'lib/cooldown' -export * from 'lib/enchantments' -export * from 'lib/event-signal' -export * from 'lib/i18n/lang' -export * from 'lib/location' -export * from 'lib/mail' -export * from 'lib/player-join' -export * from 'lib/portals' -export * from 'lib/rpg/airdrop' -export * from 'lib/rpg/boss' -export * from 'lib/rpg/leaderboard' -export * from 'lib/rpg/loot-table' -export * from 'lib/rpg/menu' -export * from 'lib/settings' -export * from 'lib/sidebar' -export * from 'lib/temporary' -export * from 'lib/utils/game' -export * from 'lib/utils/ms' -export * from 'lib/utils/search' - -// Region -export * from 'lib/region/index' - -// Form -export * from 'lib/form/action' -export * from 'lib/form/array' -export * from 'lib/form/chest' -export * from 'lib/form/message' -export * from 'lib/form/modal' -export * from 'lib/form/npc' -export * from 'lib/form/utils' - -// Extension exports -export * from 'lib/extensions/extend' -export * from 'lib/extensions/item-stack' -export * from 'lib/extensions/system' -export * from 'lib/load/extensions' +import 'lib/database/inventory' +import 'lib/database/player' +import 'lib/database/scoreboard' +import 'lib/database/utils' + +// // Command +import 'lib/command/index' + +// // Lib +// export * from 'lib/roles' +// export * from 'lib/util' +// export * from 'lib/vector' + +// export * from 'lib/action' +// export * from 'lib/cooldown' +// export * from 'lib/enchantments' +// export * from 'lib/event-signal' +// export * from 'lib/i18n/lang' +// export * from 'lib/location' +// export * from 'lib/mail' +// export * from 'lib/player-join' +// export * from 'lib/portals' +// export * from 'lib/rpg/airdrop' +// export * from 'lib/rpg/boss' +// export * from 'lib/rpg/leaderboard' +// export * from 'lib/rpg/loot-table' +// export * from 'lib/rpg/menu' +// export * from 'lib/settings' +// export * from 'lib/sidebar' +// export * from 'lib/temporary' +// export * from 'lib/utils/game' +// export * from 'lib/utils/ms' +// export * from 'lib/utils/search' + +// // Region +// export * from 'lib/region/index' + +// // Form +// export * from 'lib/form/action' +// export * from 'lib/form/array' +// export * from 'lib/form/chest' +// export * from 'lib/form/message' +// export * from 'lib/form/modal' +// export * from 'lib/form/npc' +// export * from 'lib/form/utils' + +// // Extension exports +// export * from 'lib/extensions/extend' +// export * from 'lib/extensions/item-stack' +// export * from 'lib/extensions/system' +// export * from 'lib/load/extensions' diff --git a/src/lib/achievements/achievement.ts b/src/lib/achievements/achievement.ts index 6eed9521..e6505fa7 100644 --- a/src/lib/achievements/achievement.ts +++ b/src/lib/achievements/achievement.ts @@ -4,6 +4,12 @@ import { i18n } from 'lib/i18n/text' import { isNotPlaying } from 'lib/utils/game' import { Rewards } from 'lib/utils/rewards' +declare module '@minecraft/server' { + interface PlayerDatabase { + achivs?: Achievement.DB + } +} + export namespace Achievement { export interface DBSingle { id: string diff --git a/src/lib/action.ts b/src/lib/action.ts index cc5433e8..f72f63b2 100644 --- a/src/lib/action.ts +++ b/src/lib/action.ts @@ -13,6 +13,8 @@ export class PlaceAction { } static subscribe(type: PlaceType, place: Vector3, action: PlayerCallback, dimension: DimensionType = 'overworld') { + this.listen() + const id = this.placeId(place, dimension) if (!this[type].has(id)) this[type].set(id, new Set()) @@ -50,7 +52,11 @@ export class PlaceAction { private static interactions = new Map>() - static { + private static isListening = false + + private static listen() { + if (this.isListening) return + this.isListening = true onPlayerMove.subscribe(({ player, location, dimensionType }) => this.emit('enters', location, player, dimensionType), ) diff --git a/src/lib/anticheat/anti-piston-abuse.ts b/src/lib/anticheat/anti-piston-abuse.ts new file mode 100644 index 00000000..ab5e4967 --- /dev/null +++ b/src/lib/anticheat/anti-piston-abuse.ts @@ -0,0 +1,29 @@ +import { system, world } from '@minecraft/server' +import { MinecraftBlockTypes } from '@minecraft/vanilla-data' +import { Vec } from 'lib/vector' +import { antiCheatLog } from './log-provider' + +world.afterEvents.pistonActivate.subscribe(event => { + const locations = event.piston.getAttachedBlocksLocations() + + system.runTimeout( + () => { + if (!event.block.isValid) return + + for (const location of locations) { + const block = event.block.dimension.getBlock(location) + if (block?.typeId !== MinecraftBlockTypes.Hopper) continue + + const nearbyPlayers = event.block.dimension.getPlayers({ location: event.block.location, maxDistance: 20 }) + const nearbyPlayersNames = nearbyPlayers.map(e => e.name).join('\n') + + antiCheatLog(`ПОРШЕНЬ ДЮП ${Vec.string(event.block.location)}\n${nearbyPlayersNames}`) + + event.block.dimension.createExplosion(event.block.location, 5, { breaksBlocks: true }) + return + } + }, + 'piston dupe prevent', + 2, + ) +}) diff --git a/src/lib/anticheat/anti-wither-bedrock-kill.ts b/src/lib/anticheat/anti-wither-bedrock-kill.ts new file mode 100644 index 00000000..401bdce0 --- /dev/null +++ b/src/lib/anticheat/anti-wither-bedrock-kill.ts @@ -0,0 +1,22 @@ +import { world } from '@minecraft/server' +import { MinecraftBlockTypes, MinecraftEntityTypes } from '@minecraft/vanilla-data' +import { Vec } from 'lib/vector' +import { antiCheatLog } from './log-provider' + +world.afterEvents.entitySpawn.subscribe(event => { + const { entity } = event + + if (entity.typeId !== MinecraftEntityTypes.Wither) return + + const { location } = entity + const block = entity.dimension.getBlock(location) + + if (block?.typeId !== MinecraftBlockTypes.Bedrock) return + + const nearbyPlayers = event.entity.dimension.getPlayers({ location, maxDistance: 20 }) + const nearbyPlayersNames = nearbyPlayers.map(e => e.name).join('\n') + + antiCheatLog(`ОБНАРУЖЕН АБУЗ ВИЗЕРА ${Vec.string(location)}\n${nearbyPlayersNames}`) + + entity.remove() +}) diff --git a/src/lib/anticheat/ban.ts b/src/lib/anticheat/ban.ts new file mode 100644 index 00000000..cdef101a --- /dev/null +++ b/src/lib/anticheat/ban.ts @@ -0,0 +1,15 @@ +import { system, world } from '@minecraft/server' + +new Command('ban') + .setDescription('Кикает и убирает игрока из вайтлиста') + .setPermissions('helper') + .string('playerName') + .executes((ctx, name) => { + system.delay(() => { + world.overworld.runCommand(`allowlist remove ${name}`) + world.overworld.runCommand( + `kick ${name} "Вы были забанены\nОбжаловать можно через бот техподдержки: @FolkLore_Support_bot"`, + ) + }) + ctx.player.success() + }) diff --git a/src/modules/anticheat/forbidden-items.ts b/src/lib/anticheat/forbidden-items.ts similarity index 82% rename from src/modules/anticheat/forbidden-items.ts rename to src/lib/anticheat/forbidden-items.ts index df991f6f..4c5064c7 100644 --- a/src/modules/anticheat/forbidden-items.ts +++ b/src/lib/anticheat/forbidden-items.ts @@ -1,7 +1,10 @@ import { system, world } from '@minecraft/server' import { MinecraftItemTypes } from '@minecraft/vanilla-data' -import { actionGuard, ActionGuardOrder, isNotPlaying } from 'lib' -import { createLogger } from 'lib/utils/logger' + +import { antiCheatLogger } from './log-provider' +import { ActionGuardOrder } from 'lib/region' +import { actionGuard } from 'lib/region' +import { isNotPlaying } from 'lib/utils/game' const forbiddenItems: string[] = [ MinecraftItemTypes.Barrier, @@ -13,7 +16,9 @@ const forbiddenItems: string[] = [ MinecraftItemTypes.RepeatingCommandBlock, ] -const logger = createLogger('AntiCheat') +const logger = antiCheatLogger + +// TODO Use inventorySlotChange + scan on startup and player join function interval() { try { diff --git a/src/lib/anticheat/freeze.ts b/src/lib/anticheat/freeze.ts new file mode 100644 index 00000000..059fb656 --- /dev/null +++ b/src/lib/anticheat/freeze.ts @@ -0,0 +1,53 @@ +import { InputPermissionCategory, Player, system } from '@minecraft/server' +import { ActionbarPriority } from 'lib/extensions/on-screen-display' +import { selectPlayer } from 'lib/form/select-player' + +new Command('freeze') + .setDescription('Останавливает движение игрока до unfreeze') + .setPermissions('helper') + .string('playerName') + .executes((ctx, name) => { + if (name) { + const player = Player.getByName(name) + if (!player) return ctx.error('Player not found') + + system.delay(() => { + player.inputPermissions.setPermissionCategory(InputPermissionCategory.Movement, false) + player.onScreenDisplay.setActionBar('§cВы были заморожены', ActionbarPriority.Highest) + }) + return ctx.reply('Успешно') + } + selectPlayer(ctx.player, 'заморозить').then(({ player }) => { + if (!player) return ctx.player.fail('Выберите онлайн игрока') + + player.inputPermissions.setPermissionCategory(InputPermissionCategory.Movement, false) + player.onScreenDisplay.setActionBar('§cВы были заморожены', ActionbarPriority.Highest) + ctx.player.success() + }) + }) + +new Command('unfreeze') + .setDescription('Возвращает движение игроку') + .setPermissions('helper') + + .string('playerName') + .executes((ctx, name) => { + if (name) { + const player = Player.getByName(name) + if (!player) return ctx.error('Player not found') + + system.delay(() => { + player.inputPermissions.setPermissionCategory(InputPermissionCategory.Movement, true) + player.onScreenDisplay.setActionBar('§aВы были разморожены', ActionbarPriority.Highest) + }) + return ctx.reply('Успешно') + } + selectPlayer(ctx.player, 'заморозить').then(({ id }) => { + const player = Player.getById(id) + if (!player) return ctx.player.fail('Выберите онлайн игрока') + + player.inputPermissions.setPermissionCategory(InputPermissionCategory.Movement, true) + player.onScreenDisplay.setActionBar('§aВы были разморожены', ActionbarPriority.Highest) + ctx.player.success() + }) + }) diff --git a/src/lib/anticheat/log-provider.ts b/src/lib/anticheat/log-provider.ts new file mode 100644 index 00000000..4ae0bbb3 --- /dev/null +++ b/src/lib/anticheat/log-provider.ts @@ -0,0 +1,16 @@ +import { createLogger } from 'lib/utils/logger' + +export const antiCheatLogger = createLogger('anticheat') + +export function antiCheatLog(text: string) { + if (!log) return antiCheatLogger.warn('No provider: ', text) + + antiCheatLogger.warn(text) + log(text) +} + +let log: null | ((text: string) => void) = null + +export function registerAntiCheatLogProvider(provider: typeof log) { + log = provider +} diff --git a/src/modules/anticheat/whitelist.ts b/src/lib/anticheat/whitelist.ts similarity index 92% rename from src/modules/anticheat/whitelist.ts rename to src/lib/anticheat/whitelist.ts index 2ad51064..6413ba8c 100644 --- a/src/modules/anticheat/whitelist.ts +++ b/src/lib/anticheat/whitelist.ts @@ -1,7 +1,10 @@ import { system, world } from '@minecraft/server' -import { DEFAULT_ROLE, is, ROLES, Settings } from 'lib' + import { defaultLang } from 'lib/assets/lang' import { noI18n } from 'lib/i18n/text' +import { DEFAULT_ROLE, is, ROLES } from 'lib/roles' +import { Settings } from 'lib/settings' +import { onLoad } from 'lib/utils/load-ref' import { createLogger } from 'lib/utils/logger' // Delay execution to move whitelist settings to the end of the settings menu @@ -37,7 +40,7 @@ system.delay(() => { } }) - system.delay(() => { + onLoad(() => { if (whitelist.enabled) { logger.info('To disable, use /scriptevent whitelist:disable') } diff --git a/src/lib/assets/chest-ui-type-ids.ts b/src/lib/assets/chest-ui-type-ids.ts index 3c19abd9..0765fecb 100644 --- a/src/lib/assets/chest-ui-type-ids.ts +++ b/src/lib/assets/chest-ui-type-ids.ts @@ -1,2171 +1,2255 @@ export const typeIdToID = new Map([ - ['minecraft:cactus_flower', -1030], - ['minecraft:tall_dry_grass', -1029], - ['minecraft:short_dry_grass', -1028], - ['minecraft:leaf_litter', -1026], - ['minecraft:firefly_bush', -1025], - ['minecraft:wildflowers', -1024], - ['minecraft:bush', -1023], - ['minecraft:resin_clump', -1022], - ['minecraft:resin_block', -1021], - ['minecraft:chiseled_resin_bricks', -1020], - ['minecraft:closed_eyeblossom', -1019], - ['minecraft:open_eyeblossom', -1018], - ['minecraft:resin_brick_wall', -1017], - ['minecraft:resin_brick_stairs', -1016], - ['minecraft:resin_brick_slab', -1014], - ['minecraft:resin_bricks', -1013], - ['minecraft:creaking_heart', -1012], - ['minecraft:pale_hanging_moss', -1011], - ['minecraft:pale_moss_carpet', -1010], - ['minecraft:pale_moss_block', -1009], - ['minecraft:mushroom_stem', -1008], - ['minecraft:pale_oak_leaves', -1007], - ['minecraft:pale_oak_sapling', -1006], - ['minecraft:pale_oak_wood', -1005], - ['minecraft:stripped_pale_oak_wood', -1004], - ['minecraft:pale_oak_trapdoor', -1002], - ['minecraft:pale_oak_stairs', -1000], - ['minecraft:pale_oak_slab', -998], - ['minecraft:pale_oak_pressure_plate', -997], - ['minecraft:pale_oak_planks', -996], - ['minecraft:pale_oak_log', -995], - ['minecraft:stripped_pale_oak_log', -994], - ['minecraft:pale_oak_hanging_sign', -993], - ['minecraft:pale_oak_fence_gate', -992], - ['minecraft:pale_oak_fence', -991], - ['minecraft:pale_oak_door', -990], - ['minecraft:pale_oak_button', -989], - ['minecraft:lab_table', -988], - ['minecraft:element_constructor', -987], - ['minecraft:material_reducer', -986], - ['minecraft:underwater_tnt', -985], - ['minecraft:wet_sponge', -984], - ['minecraft:red_nether_brick_wall', -983], - ['minecraft:red_sandstone_wall', -982], - ['minecraft:prismarine_wall', -981], - ['minecraft:end_stone_brick_wall', -980], - ['minecraft:nether_brick_wall', -979], - ['minecraft:mossy_stone_brick_wall', -978], - ['minecraft:stone_brick_wall', -977], - ['minecraft:brick_wall', -976], - ['minecraft:sandstone_wall', -975], - ['minecraft:andesite_wall', -974], - ['minecraft:diorite_wall', -973], - ['minecraft:granite_wall', -972], - ['minecraft:mossy_cobblestone_wall', -971], - ['minecraft:piglin_head', -970], - ['minecraft:dragon_head', -969], - ['minecraft:creeper_head', -968], - ['minecraft:player_head', -967], - ['minecraft:zombie_head', -966], - ['minecraft:wither_skeleton_skull', -965], - ['minecraft:colored_torch_purple', -964], - ['minecraft:colored_torch_green', -963], - ['minecraft:coarse_dirt', -962], - ['minecraft:deprecated_anvil', -961], - ['minecraft:damaged_anvil', -960], - ['minecraft:chipped_anvil', -959], - ['minecraft:smooth_red_sandstone', -958], - ['minecraft:cut_red_sandstone', -957], - ['minecraft:chiseled_red_sandstone', -956], - ['minecraft:smooth_quartz', -955], - ['minecraft:quartz_pillar', -954], - ['minecraft:chiseled_quartz_block', -953], - ['minecraft:deprecated_purpur_block_2', -952], - ['minecraft:purpur_pillar', -951], - ['minecraft:deprecated_purpur_block_1', -950], - ['minecraft:red_sand', -949], - ['minecraft:prismarine_bricks', -948], - ['minecraft:dark_prismarine', -947], - ['minecraft:smooth_sandstone', -946], - ['minecraft:cut_sandstone', -945], - ['minecraft:chiseled_sandstone', -944], - ['minecraft:light_block_15', -943], - ['minecraft:light_block_14', -942], - ['minecraft:light_block_13', -941], - ['minecraft:light_block_12', -940], - ['minecraft:light_block_11', -939], - ['minecraft:light_block_10', -938], - ['minecraft:light_block_9', -937], - ['minecraft:light_block_8', -936], - ['minecraft:light_block_7', -935], - ['minecraft:light_block_6', -934], - ['minecraft:light_block_5', -933], - ['minecraft:light_block_4', -932], - ['minecraft:light_block_3', -931], - ['minecraft:light_block_2', -930], - ['minecraft:light_block_1', -929], - ['minecraft:cut_red_sandstone_double_slab', -928], - ['minecraft:cut_sandstone_double_slab', -927], - ['minecraft:normal_stone_double_slab', -926], - ['minecraft:smooth_quartz_double_slab', -925], - ['minecraft:polished_granite_double_slab', -924], - ['minecraft:granite_double_slab', -923], - ['minecraft:polished_diorite_double_slab', -922], - ['minecraft:diorite_double_slab', -921], - ['minecraft:andesite_double_slab', -920], - ['minecraft:polished_andesite_double_slab', -919], - ['minecraft:smooth_red_sandstone_double_slab', -918], - ['minecraft:red_nether_brick_double_slab', -917], - ['minecraft:smooth_sandstone_double_slab', -916], - ['minecraft:mossy_cobblestone_double_slab', -915], - ['minecraft:prismarine_brick_double_slab', -914], - ['minecraft:dark_prismarine_double_slab', -913], - ['minecraft:prismarine_double_slab', -912], - ['minecraft:purpur_double_slab', -911], - ['minecraft:dead_horn_coral_wall_fan', -910], - ['minecraft:dead_fire_coral_wall_fan', -909], - ['minecraft:dead_bubble_coral_wall_fan', -908], - ['minecraft:fire_coral_wall_fan', -907], - ['minecraft:dead_brain_coral_wall_fan', -906], - ['minecraft:dead_tube_coral_wall_fan', -905], - ['minecraft:brain_coral_wall_fan', -904], - ['minecraft:petrified_oak_double_slab', -903], - ['minecraft:petrified_oak_slab', -902], - ['minecraft:cut_red_sandstone_slab', -901], - ['minecraft:cut_sandstone_slab', -900], - ['minecraft:normal_stone_slab', -899], - ['minecraft:smooth_quartz_slab', -898], - ['minecraft:polished_granite_slab', -897], - ['minecraft:granite_slab', -896], - ['minecraft:polished_diorite_slab', -895], - ['minecraft:diorite_slab', -894], - ['minecraft:andesite_slab', -893], - ['minecraft:polished_andesite_slab', -892], - ['minecraft:smooth_red_sandstone_slab', -891], - ['minecraft:red_nether_brick_slab', -890], - ['minecraft:smooth_sandstone_slab', -889], - ['minecraft:mossy_cobblestone_slab', -888], - ['minecraft:prismarine_brick_slab', -887], - ['minecraft:dark_prismarine_slab', -886], - ['minecraft:prismarine_slab', -885], - ['minecraft:purpur_slab', -884], - ['minecraft:nether_brick_double_slab', -883], - ['minecraft:quartz_double_slab', -882], - ['minecraft:stone_brick_double_slab', -881], - ['minecraft:brick_double_slab', -880], - ['minecraft:cobblestone_double_slab', -879], - ['minecraft:sandstone_double_slab', -878], - ['minecraft:nether_brick_slab', -877], - ['minecraft:quartz_slab', -876], - ['minecraft:stone_brick_slab', -875], - ['minecraft:brick_slab', -874], - ['minecraft:cobblestone_slab', -873], - ['minecraft:sandstone_slab', -872], - ['minecraft:chiseled_stone_bricks', -870], - ['minecraft:cracked_stone_bricks', -869], - ['minecraft:mossy_stone_bricks', -868], - ['minecraft:peony', -867], - ['minecraft:rose_bush', -866], - ['minecraft:large_fern', -865], - ['minecraft:tall_grass', -864], - ['minecraft:lilac', -863], - ['minecraft:infested_chiseled_stone_bricks', -862], - ['minecraft:infested_cracked_stone_bricks', -861], - ['minecraft:infested_mossy_stone_bricks', -860], - ['minecraft:infested_stone_bricks', -859], - ['minecraft:infested_cobblestone', -858], - ['minecraft:dead_horn_coral_block', -857], - ['minecraft:dead_fire_coral_block', -856], - ['minecraft:dead_bubble_coral_block', -855], - ['minecraft:dead_brain_coral_block', -854], - ['minecraft:dead_tube_coral_block', -853], - ['minecraft:horn_coral_block', -852], - ['minecraft:fire_coral_block', -851], - ['minecraft:bubble_coral_block', -850], - ['minecraft:brain_coral_block', -849], - ['minecraft:fern', -848], - ['minecraft:dead_horn_coral_fan', -847], - ['minecraft:dead_fire_coral_fan', -846], - ['minecraft:dead_bubble_coral_fan', -845], - ['minecraft:dead_brain_coral_fan', -844], - ['minecraft:horn_coral_fan', -843], - ['minecraft:fire_coral_fan', -842], - ['minecraft:bubble_coral_fan', -841], - ['minecraft:brain_coral_fan', -840], - ['minecraft:lily_of_the_valley', -839], - ['minecraft:cornflower', -838], - ['minecraft:oxeye_daisy', -837], - ['minecraft:pink_tulip', -836], - ['minecraft:white_tulip', -835], - ['minecraft:orange_tulip', -834], - ['minecraft:red_tulip', -833], - ['minecraft:azure_bluet', -832], - ['minecraft:allium', -831], - ['minecraft:blue_orchid', -830], - ['minecraft:dark_oak_sapling', -829], - ['minecraft:acacia_sapling', -828], - ['minecraft:jungle_sapling', -827], - ['minecraft:birch_sapling', -826], - ['minecraft:spruce_sapling', -825], - ['minecraft:stripped_dark_oak_wood', -824], - ['minecraft:stripped_acacia_wood', -823], - ['minecraft:stripped_jungle_wood', -822], - ['minecraft:stripped_birch_wood', -821], - ['minecraft:stripped_spruce_wood', -820], - ['minecraft:stripped_oak_wood', -819], - ['minecraft:dark_oak_wood', -818], - ['minecraft:acacia_wood', -817], - ['minecraft:jungle_wood', -816], - ['minecraft:birch_wood', -815], - ['minecraft:spruce_wood', -814], - ['minecraft:dark_oak_double_slab', -813], - ['minecraft:acacia_double_slab', -812], - ['minecraft:jungle_double_slab', -811], - ['minecraft:birch_double_slab', -810], - ['minecraft:spruce_double_slab', -809], - ['minecraft:dark_oak_slab', -808], - ['minecraft:acacia_slab', -807], - ['minecraft:jungle_slab', -806], - ['minecraft:birch_slab', -805], - ['minecraft:spruce_slab', -804], - ['minecraft:dark_oak_leaves', -803], - ['minecraft:jungle_leaves', -802], - ['minecraft:birch_leaves', -801], - ['minecraft:spruce_leaves', -800], - ['minecraft:waxed_oxidized_copper_trapdoor', -799], - ['minecraft:waxed_weathered_copper_trapdoor', -798], - ['minecraft:waxed_exposed_copper_trapdoor', -797], - ['minecraft:waxed_copper_trapdoor', -796], - ['minecraft:oxidized_copper_trapdoor', -795], - ['minecraft:weathered_copper_trapdoor', -794], - ['minecraft:exposed_copper_trapdoor', -793], - ['minecraft:copper_trapdoor', -792], - ['minecraft:waxed_oxidized_copper_door', -791], - ['minecraft:waxed_weathered_copper_door', -790], - ['minecraft:waxed_exposed_copper_door', -789], - ['minecraft:waxed_copper_door', -788], - ['minecraft:oxidized_copper_door', -787], - ['minecraft:weathered_copper_door', -786], - ['minecraft:exposed_copper_door', -785], - ['minecraft:copper_door', -784], - ['minecraft:waxed_oxidized_copper_bulb', -783], - ['minecraft:waxed_weathered_copper_bulb', -782], - ['minecraft:waxed_exposed_copper_bulb', -781], - ['minecraft:waxed_copper_bulb', -780], - ['minecraft:oxidized_copper_bulb', -779], - ['minecraft:weathered_copper_bulb', -778], - ['minecraft:exposed_copper_bulb', -777], - ['minecraft:copper_bulb', -776], - ['minecraft:waxed_oxidized_copper_grate', -775], - ['minecraft:waxed_weathered_copper_grate', -774], - ['minecraft:waxed_exposed_copper_grate', -773], - ['minecraft:waxed_copper_grate', -772], - ['minecraft:oxidized_copper_grate', -771], - ['minecraft:weathered_copper_grate', -770], - ['minecraft:exposed_copper_grate', -769], - ['minecraft:copper_grate', -768], - ['minecraft:waxed_weathered_chiseled_copper', -767], - ['minecraft:waxed_oxidized_chiseled_copper', -766], - ['minecraft:waxed_exposed_chiseled_copper', -765], - ['minecraft:waxed_chiseled_copper', -764], - ['minecraft:oxidized_chiseled_copper', -763], - ['minecraft:weathered_chiseled_copper', -762], - ['minecraft:exposed_chiseled_copper', -761], - ['minecraft:chiseled_copper', -760], - ['minecraft:chiseled_tuff_bricks', -759], - ['minecraft:tuff_brick_wall', -758], - ['minecraft:tuff_brick_stairs', -757], - ['minecraft:tuff_brick_double_slab', -756], - ['minecraft:tuff_brick_slab', -755], - ['minecraft:tuff_bricks', -754], - ['minecraft:chiseled_tuff', -753], - ['minecraft:polished_tuff_wall', -752], - ['minecraft:polished_tuff_stairs', -751], - ['minecraft:polished_tuff_double_slab', -750], - ['minecraft:polished_tuff_slab', -749], - ['minecraft:polished_tuff', -748], - ['minecraft:tuff_wall', -747], - ['minecraft:tuff_stairs', -746], - ['minecraft:tuff_double_slab', -745], - ['minecraft:tuff_slab', -744], - ['minecraft:dark_oak_planks', -743], - ['minecraft:acacia_planks', -742], - ['minecraft:jungle_planks', -741], - ['minecraft:birch_planks', -740], - ['minecraft:spruce_planks', -739], - ['minecraft:black_terracotta', -738], - ['minecraft:red_terracotta', -737], - ['minecraft:green_terracotta', -736], - ['minecraft:brown_terracotta', -735], - ['minecraft:blue_terracotta', -734], - ['minecraft:purple_terracotta', -733], - ['minecraft:cyan_terracotta', -732], - ['minecraft:light_gray_terracotta', -731], - ['minecraft:gray_terracotta', -730], - ['minecraft:pink_terracotta', -729], - ['minecraft:lime_terracotta', -728], - ['minecraft:yellow_terracotta', -727], - ['minecraft:light_blue_terracotta', -726], - ['minecraft:magenta_terracotta', -725], - ['minecraft:orange_terracotta', -724], - ['minecraft:black_concrete_powder', -723], - ['minecraft:red_concrete_powder', -722], - ['minecraft:green_concrete_powder', -721], - ['minecraft:brown_concrete_powder', -720], - ['minecraft:blue_concrete_powder', -719], - ['minecraft:purple_concrete_powder', -718], - ['minecraft:cyan_concrete_powder', -717], - ['minecraft:light_gray_concrete_powder', -716], - ['minecraft:gray_concrete_powder', -715], - ['minecraft:pink_concrete_powder', -714], - ['minecraft:lime_concrete_powder', -713], - ['minecraft:yellow_concrete_powder', -712], - ['minecraft:light_blue_concrete_powder', -711], - ['minecraft:magenta_concrete_powder', -710], - ['minecraft:orange_concrete_powder', -709], - ['minecraft:hard_black_stained_glass', -702], - ['minecraft:hard_red_stained_glass', -701], - ['minecraft:hard_green_stained_glass', -700], - ['minecraft:hard_brown_stained_glass', -699], - ['minecraft:hard_blue_stained_glass', -698], - ['minecraft:hard_purple_stained_glass', -697], - ['minecraft:hard_cyan_stained_glass', -696], - ['minecraft:hard_light_gray_stained_glass', -695], - ['minecraft:hard_gray_stained_glass', -694], - ['minecraft:hard_pink_stained_glass', -693], - ['minecraft:hard_lime_stained_glass', -692], - ['minecraft:hard_yellow_stained_glass', -691], - ['minecraft:hard_light_blue_stained_glass', -690], - ['minecraft:hard_magenta_stained_glass', -689], - ['minecraft:hard_orange_stained_glass', -688], - ['minecraft:black_stained_glass', -687], - ['minecraft:red_stained_glass', -686], - ['minecraft:green_stained_glass', -685], - ['minecraft:brown_stained_glass', -684], - ['minecraft:blue_stained_glass', -683], - ['minecraft:purple_stained_glass', -682], - ['minecraft:cyan_stained_glass', -681], - ['minecraft:light_gray_stained_glass', -680], - ['minecraft:gray_stained_glass', -679], - ['minecraft:pink_stained_glass', -678], - ['minecraft:lime_stained_glass', -677], - ['minecraft:yellow_stained_glass', -676], - ['minecraft:light_blue_stained_glass', -675], - ['minecraft:magenta_stained_glass', -674], - ['minecraft:orange_stained_glass', -673], - ['minecraft:hard_black_stained_glass_pane', -672], - ['minecraft:hard_red_stained_glass_pane', -671], - ['minecraft:hard_green_stained_glass_pane', -670], - ['minecraft:hard_brown_stained_glass_pane', -669], - ['minecraft:hard_blue_stained_glass_pane', -668], - ['minecraft:hard_purple_stained_glass_pane', -667], - ['minecraft:hard_cyan_stained_glass_pane', -666], - ['minecraft:hard_light_gray_stained_glass_pane', -665], - ['minecraft:hard_gray_stained_glass_pane', -664], - ['minecraft:hard_pink_stained_glass_pane', -663], - ['minecraft:hard_lime_stained_glass_pane', -662], - ['minecraft:hard_yellow_stained_glass_pane', -661], - ['minecraft:hard_light_blue_stained_glass_pane', -660], - ['minecraft:hard_magenta_stained_glass_pane', -659], - ['minecraft:hard_orange_stained_glass_pane', -658], - ['minecraft:black_stained_glass_pane', -657], - ['minecraft:red_stained_glass_pane', -656], - ['minecraft:green_stained_glass_pane', -655], - ['minecraft:brown_stained_glass_pane', -654], - ['minecraft:blue_stained_glass_pane', -653], - ['minecraft:purple_stained_glass_pane', -652], - ['minecraft:cyan_stained_glass_pane', -651], - ['minecraft:light_gray_stained_glass_pane', -650], - ['minecraft:gray_stained_glass_pane', -649], - ['minecraft:pink_stained_glass_pane', -648], - ['minecraft:lime_stained_glass_pane', -647], - ['minecraft:yellow_stained_glass_pane', -646], - ['minecraft:light_blue_stained_glass_pane', -645], - ['minecraft:magenta_stained_glass_pane', -644], - ['minecraft:orange_stained_glass_pane', -643], - ['minecraft:black_concrete', -642], - ['minecraft:red_concrete', -641], - ['minecraft:green_concrete', -640], - ['minecraft:brown_concrete', -639], - ['minecraft:blue_concrete', -638], - ['minecraft:purple_concrete', -637], - ['minecraft:cyan_concrete', -636], - ['minecraft:light_gray_concrete', -635], - ['minecraft:gray_concrete', -634], - ['minecraft:pink_concrete', -633], - ['minecraft:lime_concrete', -632], - ['minecraft:yellow_concrete', -631], - ['minecraft:light_blue_concrete', -630], - ['minecraft:magenta_concrete', -629], - ['minecraft:orange_concrete', -628], - ['minecraft:black_shulker_box', -627], - ['minecraft:red_shulker_box', -626], - ['minecraft:green_shulker_box', -625], - ['minecraft:brown_shulker_box', -624], - ['minecraft:blue_shulker_box', -623], - ['minecraft:purple_shulker_box', -622], - ['minecraft:cyan_shulker_box', -621], - ['minecraft:light_gray_shulker_box', -620], - ['minecraft:gray_shulker_box', -619], - ['minecraft:pink_shulker_box', -618], - ['minecraft:lime_shulker_box', -617], - ['minecraft:yellow_shulker_box', -616], - ['minecraft:light_blue_shulker_box', -615], - ['minecraft:magenta_shulker_box', -614], - ['minecraft:orange_shulker_box', -613], - ['minecraft:pitcher_plant', -612], - ['minecraft:black_carpet', -611], - ['minecraft:red_carpet', -610], - ['minecraft:green_carpet', -609], - ['minecraft:brown_carpet', -608], - ['minecraft:blue_carpet', -607], - ['minecraft:purple_carpet', -606], - ['minecraft:cyan_carpet', -605], - ['minecraft:light_gray_carpet', -604], - ['minecraft:gray_carpet', -603], - ['minecraft:pink_carpet', -602], - ['minecraft:lime_carpet', -601], - ['minecraft:yellow_carpet', -600], - ['minecraft:light_blue_carpet', -599], - ['minecraft:magenta_carpet', -598], - ['minecraft:orange_carpet', -597], - ['minecraft:sniffer_egg', -596], - ['minecraft:polished_andesite', -595], - ['minecraft:andesite', -594], - ['minecraft:polished_diorite', -593], - ['minecraft:diorite', -592], - ['minecraft:polished_granite', -591], - ['minecraft:granite', -590], - ['minecraft:dead_horn_coral', -589], - ['minecraft:dead_fire_coral', -588], - ['minecraft:dead_bubble_coral', -587], - ['minecraft:dead_brain_coral', -586], - ['minecraft:dead_tube_coral', -585], - ['minecraft:horn_coral', -584], - ['minecraft:fire_coral', -583], - ['minecraft:bubble_coral', -582], - ['minecraft:brain_coral', -581], - ['minecraft:calibrated_sculk_sensor', -580], - ['minecraft:spruce_fence', -579], - ['minecraft:jungle_fence', -578], - ['minecraft:dark_oak_fence', -577], - ['minecraft:birch_fence', -576], - ['minecraft:acacia_fence', -575], - ['minecraft:pitcher_crop', -574], - ['minecraft:suspicious_gravel', -573], - ['minecraft:dark_oak_log', -572], - ['minecraft:jungle_log', -571], - ['minecraft:birch_log', -570], - ['minecraft:spruce_log', -569], - ['minecraft:torchflower', -568], - ['minecraft:torchflower_crop', -567], - ['minecraft:pink_wool', -566], - ['minecraft:magenta_wool', -565], - ['minecraft:purple_wool', -564], - ['minecraft:blue_wool', -563], - ['minecraft:light_blue_wool', -562], - ['minecraft:cyan_wool', -561], - ['minecraft:green_wool', -560], - ['minecraft:lime_wool', -559], - ['minecraft:yellow_wool', -558], - ['minecraft:orange_wool', -557], - ['minecraft:red_wool', -556], - ['minecraft:brown_wool', -555], - ['minecraft:black_wool', -554], - ['minecraft:gray_wool', -553], - ['minecraft:light_gray_wool', -552], - ['minecraft:decorated_pot', -551], - ['minecraft:pink_petals', -549], - ['minecraft:cherry_leaves', -548], - ['minecraft:cherry_sapling', -547], - ['minecraft:cherry_wood', -546], - ['minecraft:stripped_cherry_wood', -545], - ['minecraft:cherry_wall_sign', -544], - ['minecraft:cherry_trapdoor', -543], - ['minecraft:cherry_standing_sign', -542], - ['minecraft:cherry_stairs', -541], - ['minecraft:cherry_double_slab', -540], - ['minecraft:cherry_slab', -539], - ['minecraft:cherry_pressure_plate', -538], - ['minecraft:cherry_planks', -537], - ['minecraft:cherry_log', -536], - ['minecraft:stripped_cherry_log', -535], - ['minecraft:cherry_hanging_sign', -534], - ['minecraft:cherry_fence_gate', -533], - ['minecraft:cherry_fence', -532], - ['minecraft:cherry_door', -531], - ['minecraft:cherry_button', -530], - ['minecraft:suspicious_sand', -529], - ['minecraft:stripped_bamboo_block', -528], - ['minecraft:bamboo_block', -527], - ['minecraft:chiseled_bookshelf', -526], - ['minecraft:bamboo_mosaic_double_slab', -525], - ['minecraft:bamboo_mosaic_slab', -524], - ['minecraft:bamboo_mosaic_stairs', -523], - ['minecraft:bamboo_hanging_sign', -522], - ['minecraft:bamboo_double_slab', -521], - ['minecraft:bamboo_trapdoor', -520], - ['minecraft:bamboo_wall_sign', -519], - ['minecraft:bamboo_standing_sign', -518], - ['minecraft:bamboo_door', -517], - ['minecraft:bamboo_fence_gate', -516], - ['minecraft:bamboo_fence', -515], - ['minecraft:bamboo_pressure_plate', -514], - ['minecraft:bamboo_slab', -513], - ['minecraft:bamboo_stairs', -512], - ['minecraft:bamboo_button', -511], - ['minecraft:bamboo_planks', -510], - ['minecraft:bamboo_mosaic', -509], - ['minecraft:mangrove_hanging_sign', -508], - ['minecraft:warped_hanging_sign', -507], - ['minecraft:crimson_hanging_sign', -506], - ['minecraft:dark_oak_hanging_sign', -505], - ['minecraft:acacia_hanging_sign', -504], - ['minecraft:jungle_hanging_sign', -503], - ['minecraft:birch_hanging_sign', -502], - ['minecraft:spruce_hanging_sign', -501], - ['minecraft:oak_hanging_sign', -500], - ['minecraft:mangrove_double_slab', -499], - ['minecraft:stripped_mangrove_wood', -498], - ['minecraft:mangrove_wood', -497], - ['minecraft:mangrove_trapdoor', -496], - ['minecraft:mangrove_wall_sign', -495], - ['minecraft:mangrove_standing_sign', -494], - ['minecraft:mangrove_door', -493], - ['minecraft:mangrove_fence_gate', -492], - ['minecraft:mangrove_fence', -491], - ['minecraft:mangrove_pressure_plate', -490], - ['minecraft:mangrove_slab', -489], - ['minecraft:mangrove_stairs', -488], - ['minecraft:mangrove_button', -487], - ['minecraft:mangrove_planks', -486], - ['minecraft:stripped_mangrove_log', -485], - ['minecraft:mangrove_log', -484], - ['minecraft:muddy_mangrove_roots', -483], - ['minecraft:mangrove_roots', -482], - ['minecraft:mud_brick_wall', -481], - ['minecraft:mud_brick_stairs', -480], - ['minecraft:mud_brick_double_slab', -479], - ['minecraft:mud_brick_slab', -478], - ['minecraft:packed_mud', -477], - ['minecraft:mud_bricks', -475], - ['minecraft:mangrove_propagule', -474], - ['minecraft:mud', -473], - ['minecraft:mangrove_leaves', -472], - ['minecraft:ochre_froglight', -471], - ['minecraft:verdant_froglight', -470], - ['minecraft:pearlescent_froglight', -469], - ['minecraft:frog_spawn', -468], - ['minecraft:reinforced_deepslate', -466], - ['minecraft:client_request_placeholder_block', -465], - ['minecraft:sculk_shrieker', -461], - ['minecraft:sculk_catalyst', -460], - ['minecraft:sculk_vein', -459], - ['minecraft:sculk', -458], - ['minecraft:infested_deepslate', -454], - ['minecraft:raw_gold_block', -453], - ['minecraft:raw_copper_block', -452], - ['minecraft:raw_iron_block', -451], - ['minecraft:waxed_oxidized_double_cut_copper_slab', -450], - ['minecraft:waxed_oxidized_cut_copper_slab', -449], - ['minecraft:waxed_oxidized_cut_copper_stairs', -448], - ['minecraft:waxed_oxidized_cut_copper', -447], - ['minecraft:waxed_oxidized_copper', -446], - ['minecraft:black_candle_cake', -445], - ['minecraft:red_candle_cake', -444], - ['minecraft:green_candle_cake', -443], - ['minecraft:brown_candle_cake', -442], - ['minecraft:blue_candle_cake', -441], - ['minecraft:purple_candle_cake', -440], - ['minecraft:cyan_candle_cake', -439], - ['minecraft:light_gray_candle_cake', -438], - ['minecraft:gray_candle_cake', -437], - ['minecraft:pink_candle_cake', -436], - ['minecraft:lime_candle_cake', -435], - ['minecraft:yellow_candle_cake', -434], - ['minecraft:light_blue_candle_cake', -433], - ['minecraft:magenta_candle_cake', -432], - ['minecraft:orange_candle_cake', -431], - ['minecraft:white_candle_cake', -430], - ['minecraft:candle_cake', -429], - ['minecraft:black_candle', -428], - ['minecraft:red_candle', -427], - ['minecraft:green_candle', -426], - ['minecraft:brown_candle', -425], - ['minecraft:blue_candle', -424], - ['minecraft:purple_candle', -423], - ['minecraft:cyan_candle', -422], - ['minecraft:light_gray_candle', -421], - ['minecraft:gray_candle', -420], - ['minecraft:pink_candle', -419], - ['minecraft:lime_candle', -418], - ['minecraft:yellow_candle', -417], - ['minecraft:light_blue_candle', -416], - ['minecraft:magenta_candle', -415], - ['minecraft:orange_candle', -414], - ['minecraft:white_candle', -413], - ['minecraft:candle', -412], - ['minecraft:glow_lichen', -411], - ['minecraft:cracked_deepslate_bricks', -410], - ['minecraft:cracked_deepslate_tiles', -409], - ['minecraft:deepslate_copper_ore', -408], - ['minecraft:deepslate_emerald_ore', -407], - ['minecraft:deepslate_coal_ore', -406], - ['minecraft:deepslate_diamond_ore', -405], - ['minecraft:lit_deepslate_redstone_ore', -404], - ['minecraft:deepslate_redstone_ore', -403], - ['minecraft:deepslate_gold_ore', -402], - ['minecraft:deepslate_iron_ore', -401], - ['minecraft:deepslate_lapis_ore', -400], - ['minecraft:deepslate_brick_double_slab', -399], - ['minecraft:deepslate_tile_double_slab', -398], - ['minecraft:polished_deepslate_double_slab', -397], - ['minecraft:cobbled_deepslate_double_slab', -396], - ['minecraft:chiseled_deepslate', -395], - ['minecraft:deepslate_brick_wall', -394], - ['minecraft:deepslate_brick_stairs', -393], - ['minecraft:deepslate_brick_slab', -392], - ['minecraft:deepslate_bricks', -391], - ['minecraft:deepslate_tile_wall', -390], - ['minecraft:deepslate_tile_stairs', -389], - ['minecraft:deepslate_tile_slab', -388], - ['minecraft:deepslate_tiles', -387], - ['minecraft:polished_deepslate_wall', -386], - ['minecraft:polished_deepslate_stairs', -385], - ['minecraft:polished_deepslate_slab', -384], - ['minecraft:polished_deepslate', -383], - ['minecraft:cobbled_deepslate_wall', -382], - ['minecraft:cobbled_deepslate_stairs', -381], - ['minecraft:cobbled_deepslate_slab', -380], - ['minecraft:cobbled_deepslate', -379], - ['minecraft:deepslate', -378], - ['minecraft:smooth_basalt', -377], - ['minecraft:cave_vines_head_with_berries', -376], - ['minecraft:cave_vines_body_with_berries', -375], - ['minecraft:waxed_weathered_double_cut_copper_slab', -374], - ['minecraft:waxed_exposed_double_cut_copper_slab', -373], - ['minecraft:waxed_double_cut_copper_slab', -372], - ['minecraft:oxidized_double_cut_copper_slab', -371], - ['minecraft:weathered_double_cut_copper_slab', -370], - ['minecraft:exposed_double_cut_copper_slab', -369], - ['minecraft:double_cut_copper_slab', -368], - ['minecraft:waxed_weathered_cut_copper_slab', -367], - ['minecraft:waxed_exposed_cut_copper_slab', -366], - ['minecraft:waxed_cut_copper_slab', -365], - ['minecraft:oxidized_cut_copper_slab', -364], - ['minecraft:weathered_cut_copper_slab', -363], - ['minecraft:exposed_cut_copper_slab', -362], - ['minecraft:cut_copper_slab', -361], - ['minecraft:waxed_weathered_cut_copper_stairs', -360], - ['minecraft:waxed_exposed_cut_copper_stairs', -359], - ['minecraft:waxed_cut_copper_stairs', -358], - ['minecraft:oxidized_cut_copper_stairs', -357], - ['minecraft:weathered_cut_copper_stairs', -356], - ['minecraft:exposed_cut_copper_stairs', -355], - ['minecraft:cut_copper_stairs', -354], - ['minecraft:waxed_weathered_cut_copper', -353], - ['minecraft:waxed_exposed_cut_copper', -352], - ['minecraft:waxed_cut_copper', -351], - ['minecraft:oxidized_cut_copper', -350], - ['minecraft:weathered_cut_copper', -349], - ['minecraft:exposed_cut_copper', -348], - ['minecraft:cut_copper', -347], - ['minecraft:waxed_weathered_copper', -346], - ['minecraft:waxed_exposed_copper', -345], - ['minecraft:waxed_copper', -344], - ['minecraft:oxidized_copper', -343], - ['minecraft:weathered_copper', -342], - ['minecraft:exposed_copper', -341], - ['minecraft:copper_block', -340], - ['minecraft:glow_frame_block', -339], - ['minecraft:flowering_azalea', -338], - ['minecraft:azalea', -337], - ['minecraft:small_dripleaf_block', -336], - ['minecraft:moss_carpet', -335], - ['minecraft:tinted_glass', -334], - ['minecraft:tuff', -333], - ['minecraft:small_amethyst_bud', -332], - ['minecraft:medium_amethyst_bud', -331], - ['minecraft:large_amethyst_bud', -330], - ['minecraft:amethyst_cluster', -329], - ['minecraft:budding_amethyst', -328], - ['minecraft:amethyst_block', -327], - ['minecraft:calcite', -326], - ['minecraft:azalea_leaves_flowered', -325], - ['minecraft:azalea_leaves', -324], - ['minecraft:big_dripleaf', -323], - ['minecraft:cave_vines', -322], - ['minecraft:spore_blossom', -321], - ['minecraft:moss_block', -320], - ['minecraft:hanging_roots', -319], - ['minecraft:dirt_with_roots', -318], - ['minecraft:dripstone_block', -317], - ['minecraft:heavy_core', -316], - ['minecraft:trial_spawner', -315], - ['minecraft:vault', -314], - ['minecraft:crafter', -313], - ['minecraft:lightning_rod', -312], - ['minecraft:copper_ore', -311], - ['minecraft:pointed_dripstone', -308], - ['minecraft:sculk_sensor', -307], - ['minecraft:powder_snow', -306], - ['minecraft:unknown', -305], - ['minecraft:quartz_bricks', -304], - ['minecraft:cracked_nether_bricks', -303], - ['minecraft:chiseled_nether_bricks', -302], - ['minecraft:stripped_warped_hyphae', -301], - ['minecraft:stripped_crimson_hyphae', -300], - ['minecraft:crimson_hyphae', -299], - ['minecraft:warped_hyphae', -298], - ['minecraft:polished_blackstone_wall', -297], - ['minecraft:polished_blackstone_button', -296], - ['minecraft:polished_blackstone_pressure_plate', -295], - ['minecraft:polished_blackstone_double_slab', -294], - ['minecraft:polished_blackstone_slab', -293], - ['minecraft:polished_blackstone_stairs', -292], - ['minecraft:polished_blackstone', -291], - ['minecraft:crying_obsidian', -289], - ['minecraft:nether_gold_ore', -288], - ['minecraft:twisting_vines', -287], - ['minecraft:polished_blackstone_brick_double_slab', -285], - ['minecraft:polished_blackstone_brick_slab', -284], - ['minecraft:blackstone_double_slab', -283], - ['minecraft:blackstone_slab', -282], - ['minecraft:gilded_blackstone', -281], - ['minecraft:cracked_polished_blackstone_bricks', -280], - ['minecraft:chiseled_polished_blackstone', -279], - ['minecraft:polished_blackstone_brick_wall', -278], - ['minecraft:blackstone_wall', -277], - ['minecraft:blackstone_stairs', -276], - ['minecraft:polished_blackstone_brick_stairs', -275], - ['minecraft:polished_blackstone_bricks', -274], - ['minecraft:blackstone', -273], - ['minecraft:respawn_anchor', -272], - ['minecraft:ancient_debris', -271], - ['minecraft:netherite_block', -270], - ['minecraft:soul_lantern', -269], - ['minecraft:soul_torch', -268], - ['minecraft:warped_double_slab', -267], - ['minecraft:crimson_double_slab', -266], - ['minecraft:warped_slab', -265], - ['minecraft:crimson_slab', -264], - ['minecraft:warped_pressure_plate', -263], - ['minecraft:crimson_pressure_plate', -262], - ['minecraft:warped_button', -261], - ['minecraft:crimson_button', -260], - ['minecraft:warped_fence_gate', -259], - ['minecraft:crimson_fence_gate', -258], - ['minecraft:warped_fence', -257], - ['minecraft:crimson_fence', -256], - ['minecraft:warped_stairs', -255], - ['minecraft:crimson_stairs', -254], - ['minecraft:warped_wall_sign', -253], - ['minecraft:crimson_wall_sign', -252], - ['minecraft:warped_standing_sign', -251], - ['minecraft:crimson_standing_sign', -250], - ['minecraft:warped_trapdoor', -247], - ['minecraft:crimson_trapdoor', -246], - ['minecraft:warped_planks', -243], - ['minecraft:crimson_planks', -242], - ['minecraft:stripped_warped_stem', -241], - ['minecraft:stripped_crimson_stem', -240], - ['minecraft:target', -239], - ['minecraft:soul_soil', -236], - ['minecraft:polished_basalt', -235], - ['minecraft:basalt', -234], - ['minecraft:warped_nylium', -233], - ['minecraft:crimson_nylium', -232], - ['minecraft:weeping_vines', -231], - ['minecraft:shroomlight', -230], - ['minecraft:warped_fungus', -229], - ['minecraft:crimson_fungus', -228], - ['minecraft:warped_wart_block', -227], - ['minecraft:warped_stem', -226], - ['minecraft:crimson_stem', -225], - ['minecraft:warped_roots', -224], - ['minecraft:crimson_roots', -223], - ['minecraft:lodestone', -222], - ['minecraft:honeycomb_block', -221], - ['minecraft:honey_block', -220], - ['minecraft:beehive', -219], - ['minecraft:bee_nest', -218], - ['minecraft:sticky_piston_arm_collision', -217], - ['minecraft:wither_rose', -216], - ['minecraft:light_block_0', -215], - ['minecraft:lit_blast_furnace', -214], - ['minecraft:composter', -213], - ['minecraft:oak_wood', -212], - ['minecraft:jigsaw', -211], - ['minecraft:lantern', -208], - ['minecraft:sweet_berry_bush', -207], - ['minecraft:bell', -206], - ['minecraft:loom', -204], - ['minecraft:barrel', -203], - ['minecraft:smithing_table', -202], - ['minecraft:fletching_table', -201], - ['minecraft:cartography_table', -200], - ['minecraft:lit_smoker', -199], - ['minecraft:smoker', -198], - ['minecraft:stonecutter_block', -197], - ['minecraft:blast_furnace', -196], - ['minecraft:grindstone', -195], - ['minecraft:lectern', -194], - ['minecraft:darkoak_wall_sign', -193], - ['minecraft:darkoak_standing_sign', -192], - ['minecraft:acacia_wall_sign', -191], - ['minecraft:acacia_standing_sign', -190], - ['minecraft:jungle_wall_sign', -189], - ['minecraft:jungle_standing_sign', -188], - ['minecraft:birch_wall_sign', -187], - ['minecraft:birch_standing_sign', -186], - ['minecraft:smooth_quartz_stairs', -185], - ['minecraft:red_nether_brick_stairs', -184], - ['minecraft:smooth_stone', -183], - ['minecraft:spruce_wall_sign', -182], - ['minecraft:spruce_standing_sign', -181], - ['minecraft:normal_stone_stairs', -180], - ['minecraft:mossy_cobblestone_stairs', -179], - ['minecraft:end_brick_stairs', -178], - ['minecraft:smooth_sandstone_stairs', -177], - ['minecraft:smooth_red_sandstone_stairs', -176], - ['minecraft:mossy_stone_brick_stairs', -175], - ['minecraft:polished_andesite_stairs', -174], - ['minecraft:polished_diorite_stairs', -173], - ['minecraft:polished_granite_stairs', -172], - ['minecraft:andesite_stairs', -171], - ['minecraft:diorite_stairs', -170], - ['minecraft:granite_stairs', -169], - ['minecraft:mossy_stone_brick_double_slab', -168], - ['minecraft:end_stone_brick_double_slab', -167], - ['minecraft:mossy_stone_brick_slab', -166], - ['minecraft:scaffolding', -165], - ['minecraft:bamboo_sapling', -164], - ['minecraft:bamboo', -163], - ['minecraft:end_stone_brick_slab', -162], - ['minecraft:barrier', -161], - ['minecraft:bubble_column', -160], - ['minecraft:turtle_egg', -159], - ['minecraft:conduit', -157], - ['minecraft:sea_pickle', -156], - ['minecraft:carved_pumpkin', -155], - ['minecraft:spruce_pressure_plate', -154], - ['minecraft:jungle_pressure_plate', -153], - ['minecraft:dark_oak_pressure_plate', -152], - ['minecraft:birch_pressure_plate', -151], - ['minecraft:acacia_pressure_plate', -150], - ['minecraft:spruce_trapdoor', -149], - ['minecraft:jungle_trapdoor', -148], - ['minecraft:dark_oak_trapdoor', -147], - ['minecraft:birch_trapdoor', -146], - ['minecraft:acacia_trapdoor', -145], - ['minecraft:spruce_button', -144], - ['minecraft:jungle_button', -143], - ['minecraft:dark_oak_button', -142], - ['minecraft:birch_button', -141], - ['minecraft:acacia_button', -140], - ['minecraft:dried_kelp_block', -139], - ['minecraft:kelp_plant', -138], - ['minecraft:horn_coral_wall_fan', -137], - ['minecraft:bubble_coral_wall_fan', -136], - ['minecraft:tube_coral_wall_fan', -135], - ['minecraft:dead_tube_coral_fan', -134], - ['minecraft:tube_coral_fan', -133], - ['minecraft:tube_coral_block', -132], - ['minecraft:tube_coral', -131], - ['minecraft:seagrass', -130], - ['minecraft:element_118', -129], - ['minecraft:element_117', -128], - ['minecraft:element_116', -127], - ['minecraft:element_115', -126], - ['minecraft:element_114', -125], - ['minecraft:element_113', -124], - ['minecraft:element_112', -123], - ['minecraft:element_111', -122], - ['minecraft:element_110', -121], - ['minecraft:element_109', -120], - ['minecraft:element_108', -119], - ['minecraft:element_107', -118], - ['minecraft:element_106', -117], - ['minecraft:element_105', -116], - ['minecraft:element_104', -115], - ['minecraft:element_103', -114], - ['minecraft:element_102', -113], - ['minecraft:element_101', -112], - ['minecraft:element_100', -111], - ['minecraft:element_99', -110], - ['minecraft:element_98', -109], - ['minecraft:element_97', -108], - ['minecraft:element_96', -107], - ['minecraft:element_95', -106], - ['minecraft:element_94', -105], - ['minecraft:element_93', -104], - ['minecraft:element_92', -103], - ['minecraft:element_91', -102], - ['minecraft:element_90', -101], - ['minecraft:element_89', -100], - ['minecraft:element_88', -99], - ['minecraft:element_87', -98], - ['minecraft:element_86', -97], - ['minecraft:element_85', -96], - ['minecraft:element_84', -95], - ['minecraft:element_83', -94], - ['minecraft:element_82', -93], - ['minecraft:element_81', -92], - ['minecraft:element_80', -91], - ['minecraft:element_79', -90], - ['minecraft:element_78', -89], - ['minecraft:element_77', -88], - ['minecraft:element_76', -87], - ['minecraft:element_75', -86], - ['minecraft:element_74', -85], - ['minecraft:element_73', -84], - ['minecraft:element_72', -83], - ['minecraft:element_71', -82], - ['minecraft:element_70', -81], - ['minecraft:element_69', -80], - ['minecraft:element_68', -79], - ['minecraft:element_67', -78], - ['minecraft:element_66', -77], - ['minecraft:element_65', -76], - ['minecraft:element_64', -75], - ['minecraft:element_63', -74], - ['minecraft:element_62', -73], - ['minecraft:element_61', -72], - ['minecraft:element_60', -71], - ['minecraft:element_59', -70], - ['minecraft:element_58', -69], - ['minecraft:element_57', -68], - ['minecraft:element_56', -67], - ['minecraft:element_55', -66], - ['minecraft:element_54', -65], - ['minecraft:element_53', -64], - ['minecraft:element_52', -63], - ['minecraft:element_51', -62], - ['minecraft:element_50', -61], - ['minecraft:element_49', -60], - ['minecraft:element_48', -59], - ['minecraft:element_47', -58], - ['minecraft:element_46', -57], - ['minecraft:element_45', -56], - ['minecraft:element_44', -55], - ['minecraft:element_43', -54], - ['minecraft:element_42', -53], - ['minecraft:element_41', -52], - ['minecraft:element_40', -51], - ['minecraft:element_39', -50], - ['minecraft:element_38', -49], - ['minecraft:element_37', -48], - ['minecraft:element_36', -47], - ['minecraft:element_35', -46], - ['minecraft:element_34', -45], - ['minecraft:element_33', -44], - ['minecraft:element_32', -43], - ['minecraft:element_31', -42], - ['minecraft:element_30', -41], - ['minecraft:element_29', -40], - ['minecraft:element_28', -39], - ['minecraft:element_27', -38], - ['minecraft:element_26', -37], - ['minecraft:element_25', -36], - ['minecraft:element_24', -35], - ['minecraft:element_23', -34], - ['minecraft:element_22', -33], - ['minecraft:element_21', -32], - ['minecraft:element_20', -31], - ['minecraft:element_19', -30], - ['minecraft:element_18', -29], - ['minecraft:element_17', -28], - ['minecraft:element_16', -27], - ['minecraft:element_15', -26], - ['minecraft:element_14', -25], - ['minecraft:element_13', -24], - ['minecraft:element_12', -23], - ['minecraft:element_11', -22], - ['minecraft:element_10', -21], - ['minecraft:element_9', -20], - ['minecraft:element_8', -19], - ['minecraft:element_7', -18], - ['minecraft:element_6', -17], - ['minecraft:element_5', -16], - ['minecraft:element_4', -15], - ['minecraft:element_3', -14], - ['minecraft:element_2', -13], - ['minecraft:element_1', -12], - ['minecraft:blue_ice', -11], - ['minecraft:stripped_oak_log', -10], - ['minecraft:stripped_dark_oak_log', -9], - ['minecraft:stripped_acacia_log', -8], - ['minecraft:stripped_jungle_log', -7], - ['minecraft:stripped_birch_log', -6], - ['minecraft:stripped_spruce_log', -5], - ['minecraft:prismarine_bricks_stairs', -4], - ['minecraft:dark_prismarine_stairs', -3], - ['minecraft:prismarine_stairs', -2], - ['minecraft:air', 0], - ['minecraft:stone', 1], - ['minecraft:grass_block', 2], - ['minecraft:dirt', 3], - ['minecraft:cobblestone', 4], - ['minecraft:oak_planks', 5], - ['minecraft:oak_sapling', 6], - ['minecraft:bedrock', 7], - ['minecraft:flowing_water', 8], - ['minecraft:water', 9], - ['minecraft:flowing_lava', 10], - ['minecraft:lava', 11], - ['minecraft:sand', 12], - ['minecraft:gravel', 13], - ['minecraft:gold_ore', 14], - ['minecraft:iron_ore', 15], - ['minecraft:coal_ore', 16], - ['minecraft:oak_log', 17], - ['minecraft:oak_leaves', 18], - ['minecraft:sponge', 19], - ['minecraft:glass', 20], - ['minecraft:lapis_ore', 21], - ['minecraft:lapis_block', 22], - ['minecraft:dispenser', 23], - ['minecraft:sandstone', 24], - ['minecraft:noteblock', 25], - ['minecraft:golden_rail', 27], - ['minecraft:detector_rail', 28], - ['minecraft:sticky_piston', 29], - ['minecraft:web', 30], - ['minecraft:short_grass', 31], - ['minecraft:deadbush', 32], - ['minecraft:piston', 33], - ['minecraft:piston_arm_collision', 34], - ['minecraft:white_wool', 35], - ['minecraft:element_0', 36], - ['minecraft:dandelion', 37], - ['minecraft:poppy', 38], - ['minecraft:brown_mushroom', 39], - ['minecraft:red_mushroom', 40], - ['minecraft:gold_block', 41], - ['minecraft:iron_block', 42], - ['minecraft:smooth_stone_double_slab', 43], - ['minecraft:smooth_stone_slab', 44], - ['minecraft:brick_block', 45], - ['minecraft:tnt', 46], - ['minecraft:bookshelf', 47], - ['minecraft:mossy_cobblestone', 48], - ['minecraft:obsidian', 49], - ['minecraft:torch', 50], - ['minecraft:fire', 51], - ['minecraft:mob_spawner', 52], - ['minecraft:oak_stairs', 53], - ['minecraft:chest', 54], - ['minecraft:redstone_wire', 55], - ['minecraft:diamond_ore', 56], - ['minecraft:diamond_block', 57], - ['minecraft:crafting_table', 58], - ['minecraft:wheat_plant', 59], - ['minecraft:farmland', 60], - ['minecraft:furnace', 61], - ['minecraft:lit_furnace', 62], - ['minecraft:standing_sign', 63], - ['minecraft:ladder', 65], - ['minecraft:rail', 66], - ['minecraft:stone_stairs', 67], - ['minecraft:wall_sign', 68], - ['minecraft:lever', 69], - ['minecraft:stone_pressure_plate', 70], - ['minecraft:wooden_pressure_plate', 72], - ['minecraft:redstone_ore', 73], - ['minecraft:lit_redstone_ore', 74], - ['minecraft:unlit_redstone_torch', 75], - ['minecraft:redstone_torch', 76], - ['minecraft:stone_button', 77], - ['minecraft:snow_layer', 78], - ['minecraft:ice', 79], - ['minecraft:snow', 80], - ['minecraft:cactus', 81], - ['minecraft:clay', 82], - ['minecraft:reeds', 83], - ['minecraft:jukebox', 84], - ['minecraft:oak_fence', 85], - ['minecraft:pumpkin', 86], - ['minecraft:netherrack', 87], - ['minecraft:soul_sand', 88], - ['minecraft:glowstone', 89], - ['minecraft:portal', 90], - ['minecraft:lit_pumpkin', 91], - ['minecraft:cake_block', 92], - ['minecraft:unpowered_repeater', 93], - ['minecraft:powered_repeater', 94], - ['minecraft:invisible_bedrock', 95], - ['minecraft:trapdoor', 96], - ['minecraft:infested_stone', 97], - ['minecraft:stone_bricks', 98], - ['minecraft:brown_mushroom_block', 99], - ['minecraft:red_mushroom_block', 100], - ['minecraft:iron_bars', 101], - ['minecraft:glass_pane', 102], - ['minecraft:melon_block', 103], - ['minecraft:pumpkin_stem', 104], - ['minecraft:melon_stem', 105], - ['minecraft:vine', 106], - ['minecraft:fence_gate', 107], - ['minecraft:brick_stairs', 108], - ['minecraft:stone_brick_stairs', 109], - ['minecraft:mycelium', 110], - ['minecraft:waterlily', 111], - ['minecraft:nether_brick', 112], - ['minecraft:nether_brick_fence', 113], - ['minecraft:nether_brick_stairs', 114], - ['minecraft:nether_wart_plant', 115], - ['minecraft:enchanting_table', 116], - ['minecraft:end_portal', 119], - ['minecraft:end_portal_frame', 120], - ['minecraft:end_stone', 121], - ['minecraft:dragon_egg', 122], - ['minecraft:redstone_lamp', 123], - ['minecraft:lit_redstone_lamp', 124], - ['minecraft:dropper', 125], - ['minecraft:activator_rail', 126], - ['minecraft:cocoa', 127], - ['minecraft:sandstone_stairs', 128], - ['minecraft:emerald_ore', 129], - ['minecraft:ender_chest', 130], - ['minecraft:tripwire_hook', 131], - ['minecraft:tripwire', 132], - ['minecraft:emerald_block', 133], - ['minecraft:spruce_stairs', 134], - ['minecraft:birch_stairs', 135], - ['minecraft:jungle_stairs', 136], - ['minecraft:command_block', 137], - ['minecraft:beacon', 138], - ['minecraft:cobblestone_wall', 139], - ['minecraft:carrots', 141], - ['minecraft:potatoes', 142], - ['minecraft:wooden_button', 143], - ['minecraft:skeleton_skull', 144], - ['minecraft:anvil', 145], - ['minecraft:trapped_chest', 146], - ['minecraft:light_weighted_pressure_plate', 147], - ['minecraft:heavy_weighted_pressure_plate', 148], - ['minecraft:unpowered_comparator', 149], - ['minecraft:powered_comparator', 150], - ['minecraft:daylight_detector', 151], - ['minecraft:redstone_block', 152], - ['minecraft:quartz_ore', 153], - ['minecraft:quartz_block', 155], - ['minecraft:quartz_stairs', 156], - ['minecraft:double_oak_slab', 157], - ['minecraft:oak_slab', 158], - ['minecraft:stained_hardened_clay', 159], - ['minecraft:stained_glass_pane', 160], - ['minecraft:acacia_leaves', 161], - ['minecraft:acacia_log', 162], - ['minecraft:acacia_stairs', 163], - ['minecraft:dark_oak_stairs', 164], - ['minecraft:slime', 165], - ['minecraft:iron_trapdoor', 167], - ['minecraft:prismarine', 168], - ['minecraft:sea_lantern', 169], - ['minecraft:hay_block', 170], - ['minecraft:white_carpet', 171], - ['minecraft:hardened_clay', 172], - ['minecraft:coal_block', 173], - ['minecraft:packed_ice', 174], - ['minecraft:sunflower', 175], - ['minecraft:standing_banner', 176], - ['minecraft:wall_banner', 177], - ['minecraft:daylight_detector_inverted', 178], - ['minecraft:red_sandstone', 179], - ['minecraft:red_sandstone_stairs', 180], - ['minecraft:red_sandstone_double_slab', 181], - ['minecraft:red_sandstone_slab', 182], - ['minecraft:spruce_fence_gate', 183], - ['minecraft:birch_fence_gate', 184], - ['minecraft:jungle_fence_gate', 185], - ['minecraft:dark_oak_fence_gate', 186], - ['minecraft:acacia_fence_gate', 187], - ['minecraft:repeating_command_block', 188], - ['minecraft:chain_command_block', 189], - ['minecraft:hard_glass_pane', 190], - ['minecraft:hard_white_stained_glass_pane', 191], - ['minecraft:chemical_heat', 192], - ['minecraft:spruce_door', 193], - ['minecraft:birch_door', 194], - ['minecraft:jungle_door', 195], - ['minecraft:acacia_door', 196], - ['minecraft:dark_oak_door', 197], - ['minecraft:grass_path', 198], - ['minecraft:frame_block', 199], - ['minecraft:chorus_flower', 200], - ['minecraft:purpur_block', 201], - ['minecraft:colored_torch_red', 202], - ['minecraft:purpur_stairs', 203], - ['minecraft:colored_torch_blue', 204], - ['minecraft:undyed_shulker_box', 205], - ['minecraft:end_bricks', 206], - ['minecraft:frosted_ice', 207], - ['minecraft:end_rod', 208], - ['minecraft:end_gateway', 209], - ['minecraft:allow', 210], - ['minecraft:deny', 211], - ['minecraft:border_block', 212], - ['minecraft:magma', 213], - ['minecraft:nether_wart_block', 214], - ['minecraft:red_nether_brick', 215], - ['minecraft:bone_block', 216], - ['minecraft:structure_void', 217], - ['minecraft:white_shulker_box', 218], - ['minecraft:purple_glazed_terracotta', 219], - ['minecraft:white_glazed_terracotta', 220], - ['minecraft:orange_glazed_terracotta', 221], - ['minecraft:magenta_glazed_terracotta', 222], - ['minecraft:light_blue_glazed_terracotta', 223], - ['minecraft:yellow_glazed_terracotta', 224], - ['minecraft:lime_glazed_terracotta', 225], - ['minecraft:pink_glazed_terracotta', 226], - ['minecraft:gray_glazed_terracotta', 227], - ['minecraft:silver_glazed_terracotta', 228], - ['minecraft:cyan_glazed_terracotta', 229], - ['minecraft:blue_glazed_terracotta', 231], - ['minecraft:brown_glazed_terracotta', 232], - ['minecraft:green_glazed_terracotta', 233], - ['minecraft:red_glazed_terracotta', 234], - ['minecraft:black_glazed_terracotta', 235], - ['minecraft:concrete', 236], - ['minecraft:concrete_powder', 237], - ['minecraft:compound_creator', 238], - ['minecraft:underwater_torch', 239], - ['minecraft:chorus_plant', 240], - ['minecraft:white_stained_glass', 241], - ['minecraft:camera', 242], - ['minecraft:podzol', 243], - ['minecraft:beetroots', 244], - ['minecraft:stonecutter', 245], - ['minecraft:glowingobsidian', 246], - ['minecraft:netherreactor', 247], - ['minecraft:info_update', 248], - ['minecraft:info_update2', 249], - ['minecraft:moving_block', 250], - ['minecraft:observer', 251], - ['minecraft:structure_block', 252], - ['minecraft:hard_glass', 253], - ['minecraft:hard_white_stained_glass', 254], - ['minecraft:reserved6', 255], - ['minecraft:black_bundle', 257], - ['minecraft:blue_bundle', 258], - ['minecraft:brown_bundle', 259], - ['minecraft:bundle', 260], - ['minecraft:cyan_bundle', 261], - ['minecraft:gray_bundle', 262], - ['minecraft:green_bundle', 263], - ['minecraft:light_blue_bundle', 264], - ['minecraft:light_gray_bundle', 265], - ['minecraft:lime_bundle', 266], - ['minecraft:magenta_bundle', 267], - ['minecraft:orange_bundle', 268], - ['minecraft:pink_bundle', 269], - ['minecraft:purple_bundle', 270], - ['minecraft:red_bundle', 271], - ['minecraft:white_bundle', 272], - ['minecraft:yellow_bundle', 273], - ['minecraft:breeze_rod', 274], - ['minecraft:ominous_trial_key', 275], - ['minecraft:trial_key', 276], - ['minecraft:wind_charge', 277], - ['minecraft:apple', 278], - ['minecraft:golden_apple', 280], - ['minecraft:enchanted_golden_apple', 281], - ['minecraft:mushroom_stew', 282], - ['minecraft:bread', 283], - ['minecraft:porkchop', 284], - ['minecraft:cooked_porkchop', 285], - ['minecraft:cod', 286], - ['minecraft:salmon', 287], - ['minecraft:tropical_fish', 288], - ['minecraft:pufferfish', 289], - ['minecraft:cooked_cod', 290], - ['minecraft:cooked_salmon', 291], - ['minecraft:dried_kelp', 292], - ['minecraft:cookie', 293], - ['minecraft:melon_slice', 294], - ['minecraft:beef', 295], - ['minecraft:cooked_beef', 296], - ['minecraft:chicken', 297], - ['minecraft:cooked_chicken', 298], - ['minecraft:rotten_flesh', 299], - ['minecraft:spider_eye', 300], - ['minecraft:carrot', 301], - ['minecraft:potato', 302], - ['minecraft:baked_potato', 303], - ['minecraft:poisonous_potato', 304], - ['minecraft:golden_carrot', 305], - ['minecraft:pumpkin_pie', 306], - ['minecraft:beetroot', 307], - ['minecraft:beetroot_soup', 308], - ['minecraft:sweet_berries', 309], - ['minecraft:rabbit', 310], - ['minecraft:cooked_rabbit', 311], - ['minecraft:rabbit_stew', 312], - ['minecraft:wheat_seeds', 313], - ['minecraft:pumpkin_seeds', 314], - ['minecraft:melon_seeds', 315], - ['minecraft:nether_wart', 316], - ['minecraft:beetroot_seeds', 317], - ['minecraft:torchflower_seeds', 318], - ['minecraft:pitcher_pod', 319], - ['minecraft:iron_shovel', 320], - ['minecraft:iron_pickaxe', 321], - ['minecraft:iron_axe', 322], - ['minecraft:flint_and_steel', 323], - ['minecraft:bow', 324], - ['minecraft:arrow', 325], - ['minecraft:coal', 326], - ['minecraft:charcoal', 327], - ['minecraft:diamond', 328], - ['minecraft:iron_ingot', 329], - ['minecraft:gold_ingot', 330], - ['minecraft:iron_sword', 331], - ['minecraft:wooden_sword', 332], - ['minecraft:wooden_shovel', 333], - ['minecraft:wooden_pickaxe', 334], - ['minecraft:wooden_axe', 335], - ['minecraft:stone_sword', 336], - ['minecraft:stone_shovel', 337], - ['minecraft:stone_pickaxe', 338], - ['minecraft:stone_axe', 339], - ['minecraft:diamond_sword', 340], - ['minecraft:diamond_shovel', 341], - ['minecraft:diamond_pickaxe', 342], - ['minecraft:diamond_axe', 343], - ['minecraft:mace', 344], - ['minecraft:stick', 345], - ['minecraft:bowl', 346], - ['minecraft:golden_sword', 347], - ['minecraft:golden_shovel', 348], - ['minecraft:golden_pickaxe', 349], - ['minecraft:golden_axe', 350], - ['minecraft:string', 351], - ['minecraft:feather', 352], - ['minecraft:gunpowder', 353], - ['minecraft:wooden_hoe', 354], - ['minecraft:stone_hoe', 355], - ['minecraft:iron_hoe', 356], - ['minecraft:diamond_hoe', 357], - ['minecraft:golden_hoe', 358], - ['minecraft:wheat', 359], - ['minecraft:leather_helmet', 360], - ['minecraft:leather_chestplate', 361], - ['minecraft:leather_leggings', 362], - ['minecraft:leather_boots', 363], - ['minecraft:chainmail_helmet', 364], - ['minecraft:chainmail_chestplate', 365], - ['minecraft:chainmail_leggings', 366], - ['minecraft:chainmail_boots', 367], - ['minecraft:iron_helmet', 368], - ['minecraft:iron_chestplate', 369], - ['minecraft:iron_leggings', 370], - ['minecraft:iron_boots', 371], - ['minecraft:diamond_helmet', 372], - ['minecraft:diamond_chestplate', 373], - ['minecraft:diamond_leggings', 374], - ['minecraft:diamond_boots', 375], - ['minecraft:golden_helmet', 376], - ['minecraft:golden_chestplate', 377], - ['minecraft:golden_leggings', 378], - ['minecraft:golden_boots', 379], - ['minecraft:shield', 380], - ['minecraft:flint', 381], - ['minecraft:painting', 382], - ['minecraft:oak_sign', 383], - ['minecraft:wooden_door', 384], - ['minecraft:bucket', 385], - ['minecraft:milk_bucket', 386], - ['minecraft:water_bucket', 387], - ['minecraft:lava_bucket', 388], - ['minecraft:cod_bucket', 389], - ['minecraft:salmon_bucket', 390], - ['minecraft:tropical_fish_bucket', 391], - ['minecraft:pufferfish_bucket', 392], - ['minecraft:powder_snow_bucket', 393], - ['minecraft:axolotl_bucket', 394], - ['minecraft:minecart', 395], - ['minecraft:saddle', 396], - ['minecraft:iron_door', 397], - ['minecraft:redstone', 398], - ['minecraft:snowball', 399], - ['minecraft:oak_boat', 401], - ['minecraft:birch_boat', 402], - ['minecraft:jungle_boat', 403], - ['minecraft:spruce_boat', 404], - ['minecraft:acacia_boat', 405], - ['minecraft:dark_oak_boat', 406], - ['minecraft:leather', 407], - ['minecraft:kelp', 408], - ['minecraft:brick', 409], - ['minecraft:clay_ball', 410], - ['minecraft:sugar_cane', 411], - ['minecraft:paper', 412], - ['minecraft:book', 413], - ['minecraft:slime_ball', 414], - ['minecraft:chest_minecart', 415], - ['minecraft:egg', 416], - ['minecraft:compass', 417], - ['minecraft:fishing_rod', 418], - ['minecraft:clock', 419], - ['minecraft:glowstone_dust', 420], - ['minecraft:black_dye', 421], - ['minecraft:red_dye', 422], - ['minecraft:green_dye', 423], - ['minecraft:brown_dye', 424], - ['minecraft:blue_dye', 425], - ['minecraft:purple_dye', 426], - ['minecraft:cyan_dye', 427], - ['minecraft:light_gray_dye', 428], - ['minecraft:gray_dye', 429], - ['minecraft:pink_dye', 430], - ['minecraft:lime_dye', 431], - ['minecraft:yellow_dye', 432], - ['minecraft:light_blue_dye', 433], - ['minecraft:magenta_dye', 434], - ['minecraft:orange_dye', 435], - ['minecraft:white_dye', 436], - ['minecraft:bone_meal', 437], - ['minecraft:cocoa_beans', 438], - ['minecraft:ink_sac', 439], - ['minecraft:lapis_lazuli', 440], - ['minecraft:bone', 441], - ['minecraft:sugar', 442], - ['minecraft:cake', 443], - ['minecraft:bed', 444], - ['minecraft:repeater', 445], - ['minecraft:filled_map', 446], - ['minecraft:shears', 447], - ['minecraft:ender_pearl', 448], - ['minecraft:blaze_rod', 449], - ['minecraft:ghast_tear', 451], - ['minecraft:gold_nugget', 452], - ['minecraft:potion', 453], - ['minecraft:glass_bottle', 454], - ['minecraft:fermented_spider_eye', 455], - ['minecraft:blaze_powder', 456], - ['minecraft:magma_cream', 457], - ['minecraft:brewing_stand', 458], - ['minecraft:cauldron', 459], - ['minecraft:ender_eye', 460], - ['minecraft:glistering_melon_slice', 461], - ['minecraft:chicken_spawn_egg', 462], - ['minecraft:cow_spawn_egg', 463], - ['minecraft:pig_spawn_egg', 464], - ['minecraft:sheep_spawn_egg', 465], - ['minecraft:wolf_spawn_egg', 466], - ['minecraft:mooshroom_spawn_egg', 467], - ['minecraft:creeper_spawn_egg', 468], - ['minecraft:enderman_spawn_egg', 469], - ['minecraft:silverfish_spawn_egg', 470], - ['minecraft:skeleton_spawn_egg', 471], - ['minecraft:slime_spawn_egg', 472], - ['minecraft:spider_spawn_egg', 473], - ['minecraft:zombie_spawn_egg', 474], - ['minecraft:zombie_pigman_spawn_egg', 475], - ['minecraft:villager_spawn_egg', 476], - ['minecraft:squid_spawn_egg', 477], - ['minecraft:ocelot_spawn_egg', 478], - ['minecraft:witch_spawn_egg', 479], - ['minecraft:bat_spawn_egg', 480], - ['minecraft:ghast_spawn_egg', 481], - ['minecraft:magma_cube_spawn_egg', 482], - ['minecraft:blaze_spawn_egg', 483], - ['minecraft:cave_spider_spawn_egg', 484], - ['minecraft:horse_spawn_egg', 485], - ['minecraft:rabbit_spawn_egg', 486], - ['minecraft:endermite_spawn_egg', 487], - ['minecraft:guardian_spawn_egg', 488], - ['minecraft:stray_spawn_egg', 489], - ['minecraft:bogged_spawn_egg', 490], - ['minecraft:husk_spawn_egg', 491], - ['minecraft:wither_skeleton_spawn_egg', 492], - ['minecraft:donkey_spawn_egg', 493], - ['minecraft:mule_spawn_egg', 494], - ['minecraft:skeleton_horse_spawn_egg', 495], - ['minecraft:zombie_horse_spawn_egg', 496], - ['minecraft:shulker_spawn_egg', 497], - ['minecraft:npc_spawn_egg', 498], - ['minecraft:elder_guardian_spawn_egg', 499], - ['minecraft:polar_bear_spawn_egg', 500], - ['minecraft:llama_spawn_egg', 501], - ['minecraft:vindicator_spawn_egg', 502], - ['minecraft:evoker_spawn_egg', 503], - ['minecraft:vex_spawn_egg', 504], - ['minecraft:zombie_villager_spawn_egg', 505], - ['minecraft:parrot_spawn_egg', 506], - ['minecraft:tropical_fish_spawn_egg', 507], - ['minecraft:cod_spawn_egg', 508], - ['minecraft:pufferfish_spawn_egg', 509], - ['minecraft:salmon_spawn_egg', 510], - ['minecraft:drowned_spawn_egg', 511], - ['minecraft:dolphin_spawn_egg', 512], - ['minecraft:turtle_spawn_egg', 513], - ['minecraft:phantom_spawn_egg', 514], - ['minecraft:agent_spawn_egg', 515], - ['minecraft:cat_spawn_egg', 516], - ['minecraft:panda_spawn_egg', 517], - ['minecraft:fox_spawn_egg', 518], - ['minecraft:pillager_spawn_egg', 519], - ['minecraft:wandering_trader_spawn_egg', 520], - ['minecraft:ravager_spawn_egg', 521], - ['minecraft:bee_spawn_egg', 522], - ['minecraft:strider_spawn_egg', 523], - ['minecraft:hoglin_spawn_egg', 524], - ['minecraft:piglin_spawn_egg', 525], - ['minecraft:zoglin_spawn_egg', 526], - ['minecraft:piglin_brute_spawn_egg', 527], - ['minecraft:sniffer_spawn_egg', 528], - ['minecraft:breeze_spawn_egg', 529], - ['minecraft:axolotl_spawn_egg', 530], - ['minecraft:goat_spawn_egg', 531], - ['minecraft:glow_squid_spawn_egg', 532], - ['minecraft:iron_golem_spawn_egg', 533], - ['minecraft:snow_golem_spawn_egg', 534], - ['minecraft:ender_dragon_spawn_egg', 535], - ['minecraft:wither_spawn_egg', 536], - ['minecraft:glow_ink_sac', 537], - ['minecraft:copper_ingot', 538], - ['minecraft:raw_iron', 539], - ['minecraft:raw_gold', 540], - ['minecraft:raw_copper', 541], - ['minecraft:experience_bottle', 542], - ['minecraft:fire_charge', 543], - ['minecraft:writable_book', 544], - ['minecraft:written_book', 545], - ['minecraft:emerald', 546], - ['minecraft:frame', 547], - ['minecraft:flower_pot', 548], - ['minecraft:empty_map', 549], - ['minecraft:carrot_on_a_stick', 550], - ['minecraft:nether_star', 551], - ['minecraft:firework_rocket', 552], - ['minecraft:firework_star', 553], - ['minecraft:enchanted_book', 554], - ['minecraft:comparator', 555], - ['minecraft:netherbrick', 556], - ['minecraft:quartz', 557], - ['minecraft:tnt_minecart', 558], - ['minecraft:hopper_minecart', 559], - ['minecraft:hopper', 560], - ['minecraft:rabbit_foot', 561], - ['minecraft:rabbit_hide', 562], - ['minecraft:leather_horse_armor', 563], - ['minecraft:iron_horse_armor', 564], - ['minecraft:golden_horse_armor', 565], - ['minecraft:diamond_horse_armor', 566], - ['minecraft:music_disc_13', 567], - ['minecraft:music_disc_cat', 568], - ['minecraft:music_disc_blocks', 569], - ['minecraft:music_disc_chirp', 570], - ['minecraft:music_disc_far', 571], - ['minecraft:music_disc_mall', 572], - ['minecraft:music_disc_mellohi', 573], - ['minecraft:music_disc_stal', 574], - ['minecraft:music_disc_strad', 575], - ['minecraft:music_disc_ward', 576], - ['minecraft:music_disc_11', 577], - ['minecraft:music_disc_wait', 578], - ['minecraft:trident', 579], - ['minecraft:lead', 580], - ['minecraft:name_tag', 581], - ['minecraft:prismarine_crystals', 582], - ['minecraft:mutton', 583], - ['minecraft:cooked_mutton', 584], - ['minecraft:armor_stand', 585], - ['minecraft:spruce_door', 586], - ['minecraft:birch_door', 587], - ['minecraft:jungle_door', 588], - ['minecraft:acacia_door', 589], - ['minecraft:dark_oak_door', 590], - ['minecraft:chorus_fruit', 591], - ['minecraft:popped_chorus_fruit', 592], - ['minecraft:dragon_breath', 593], - ['minecraft:splash_potion', 594], - ['minecraft:lingering_potion', 595], - ['minecraft:command_block_minecart', 596], - ['minecraft:elytra', 597], - ['minecraft:prismarine_shard', 598], - ['minecraft:shulker_shell', 599], - ['minecraft:banner', 600], - ['minecraft:totem_of_undying', 601], - ['minecraft:iron_nugget', 602], - ['minecraft:nautilus_shell', 603], - ['minecraft:heart_of_the_sea', 604], - ['minecraft:turtle_scute', 605], - ['minecraft:turtle_helmet', 606], - ['minecraft:phantom_membrane', 607], - ['minecraft:crossbow', 608], - ['minecraft:spruce_sign', 609], - ['minecraft:birch_sign', 610], - ['minecraft:jungle_sign', 611], - ['minecraft:acacia_sign', 612], - ['minecraft:dark_oak_sign', 613], - ['minecraft:flower_banner_pattern', 614], - ['minecraft:creeper_banner_pattern', 615], - ['minecraft:skull_banner_pattern', 616], - ['minecraft:mojang_banner_pattern', 617], - ['minecraft:field_masoned_banner_pattern', 618], - ['minecraft:bordure_indented_banner_pattern', 619], - ['minecraft:piglin_banner_pattern', 620], - ['minecraft:globe_banner_pattern', 621], - ['minecraft:flow_banner_pattern', 622], - ['minecraft:guster_banner_pattern', 623], - ['minecraft:campfire', 624], - ['minecraft:suspicious_stew', 625], - ['minecraft:honeycomb', 626], - ['minecraft:honey_bottle', 627], - ['minecraft:ominous_bottle', 628], - ['minecraft:chalkboard', 629], - ['minecraft:camera_block', 630], - ['minecraft:compound', 631], - ['minecraft:ice_bomb', 632], - ['minecraft:bleach', 633], - ['minecraft:rapid_fertilizer', 634], - ['minecraft:balloon', 635], - ['minecraft:medicine', 636], - ['minecraft:sparkler', 637], - ['minecraft:glow_stick', 638], - ['minecraft:lodestone_compass', 639], - ['minecraft:netherite_sword', 640], - ['minecraft:netherite_shovel', 641], - ['minecraft:netherite_pickaxe', 642], - ['minecraft:netherite_axe', 643], - ['minecraft:netherite_hoe', 644], - ['minecraft:netherite_ingot', 645], - ['minecraft:netherite_helmet', 646], - ['minecraft:netherite_chestplate', 647], - ['minecraft:netherite_leggings', 648], - ['minecraft:netherite_boots', 649], - ['minecraft:netherite_scrap', 650], - ['minecraft:crimson_sign', 651], - ['minecraft:warped_sign', 652], - ['minecraft:crimson_door', 653], - ['minecraft:warped_door', 654], - ['minecraft:warped_fungus_on_a_stick', 655], - ['minecraft:chain', 656], - ['minecraft:music_disc_pigstep', 657], - ['minecraft:nether_sprouts', 658], - ['minecraft:soul_campfire', 659], - ['minecraft:glow_frame', 660], - ['minecraft:amethyst_shard', 661], - ['minecraft:spyglass', 662], - ['minecraft:music_disc_otherside', 663], - ['minecraft:goat_horn', 664], - ['minecraft:frog_spawn_egg', 665], - ['minecraft:tadpole_spawn_egg', 666], - ['minecraft:tadpole_bucket', 667], - ['minecraft:allay_spawn_egg', 668], - ['minecraft:warden_spawn_egg', 669], - ['minecraft:mangrove_door', 670], - ['minecraft:mangrove_sign', 671], - ['minecraft:mangrove_boat', 672], - ['minecraft:music_disc_5', 673], - ['minecraft:disc_fragment_5', 674], - ['minecraft:oak_chest_boat', 675], - ['minecraft:birch_chest_boat', 676], - ['minecraft:jungle_chest_boat', 677], - ['minecraft:spruce_chest_boat', 678], - ['minecraft:acacia_chest_boat', 679], - ['minecraft:dark_oak_chest_boat', 680], - ['minecraft:mangrove_chest_boat', 681], - ['minecraft:recovery_compass', 683], - ['minecraft:echo_shard', 684], - ['minecraft:trader_llama_spawn_egg', 685], - ['minecraft:cherry_boat', 686], - ['minecraft:cherry_chest_boat', 687], - ['minecraft:cherry_sign', 688], - ['minecraft:bamboo_sign', 689], - ['minecraft:bamboo_raft', 690], - ['minecraft:bamboo_chest_raft', 691], - ['minecraft:camel_spawn_egg', 692], - ['minecraft:angler_pottery_sherd', 693], - ['minecraft:archer_pottery_sherd', 694], - ['minecraft:arms_up_pottery_sherd', 695], - ['minecraft:blade_pottery_sherd', 696], - ['minecraft:brewer_pottery_sherd', 697], - ['minecraft:burn_pottery_sherd', 698], - ['minecraft:danger_pottery_sherd', 699], - ['minecraft:explorer_pottery_sherd', 700], - ['minecraft:flow_pottery_sherd', 701], - ['minecraft:friend_pottery_sherd', 702], - ['minecraft:guster_pottery_sherd', 703], - ['minecraft:heart_pottery_sherd', 704], - ['minecraft:heartbreak_pottery_sherd', 705], - ['minecraft:howl_pottery_sherd', 706], - ['minecraft:miner_pottery_sherd', 707], - ['minecraft:mourner_pottery_sherd', 708], - ['minecraft:plenty_pottery_sherd', 709], - ['minecraft:prize_pottery_sherd', 710], - ['minecraft:scrape_pottery_sherd', 711], - ['minecraft:sheaf_pottery_sherd', 712], - ['minecraft:shelter_pottery_sherd', 713], - ['minecraft:skull_pottery_sherd', 714], - ['minecraft:snort_pottery_sherd', 715], - ['minecraft:brush', 716], - ['minecraft:netherite_upgrade_smithing_template', 717], - ['minecraft:sentry_armor_trim_smithing_template', 718], - ['minecraft:dune_armor_trim_smithing_template', 719], - ['minecraft:coast_armor_trim_smithing_template', 720], - ['minecraft:wild_armor_trim_smithing_template', 721], - ['minecraft:ward_armor_trim_smithing_template', 722], - ['minecraft:eye_armor_trim_smithing_template', 723], - ['minecraft:vex_armor_trim_smithing_template', 724], - ['minecraft:tide_armor_trim_smithing_template', 725], - ['minecraft:snout_armor_trim_smithing_template', 726], - ['minecraft:rib_armor_trim_smithing_template', 727], - ['minecraft:spire_armor_trim_smithing_template', 728], - ['minecraft:silence_armor_trim_smithing_template', 729], - ['minecraft:wayfinder_armor_trim_smithing_template', 730], - ['minecraft:raiser_armor_trim_smithing_template', 731], - ['minecraft:shaper_armor_trim_smithing_template', 732], - ['minecraft:host_armor_trim_smithing_template', 733], - ['minecraft:flow_armor_trim_smithing_template', 734], - ['minecraft:bolt_armor_trim_smithing_template', 735], - ['minecraft:music_disc_relic', 736], - ['minecraft:skull', 737], - ['minecraft:white_terracotta', 738], - ['minecraft:armadillo_spawn_egg', 739], - ['minecraft:armadillo_scute', 740], - ['minecraft:wolf_armor', 741], - ['minecraft:pale_oak_boat', 744], - ['minecraft:pale_oak_chest_boat', 745], - ['minecraft:pale_oak_sign', 746], - ['minecraft:creaking_spawn_egg', 747], - ['minecraft:resin_brick', 748], - ['minecraft:wool', 749], - ['minecraft:blue_egg', 750], - ['minecraft:brown_egg', 751], - ['minecraft:carpet', 752], - ['minecraft:log', 753], - ['minecraft:fence', 754], - ['minecraft:stonebrick', 755], - ['minecraft:coral_block', 756], - ['minecraft:stone_block_slab', 757], - ['minecraft:stone_block_slab2', 758], - ['minecraft:stone_block_slab3', 759], - ['minecraft:stone_block_slab4', 760], - ['minecraft:double_stone_block_slab', 761], - ['minecraft:double_stone_block_slab2', 762], - ['minecraft:double_stone_block_slab3', 763], - ['minecraft:double_stone_block_slab4', 764], - ['minecraft:coral_fan', 765], - ['minecraft:coral_fan_dead', 766], - ['minecraft:sapling', 767], - ['minecraft:leaves', 768], - ['minecraft:leaves2', 769], - ['minecraft:wooden_slab', 770], - ['minecraft:red_flower', 771], - ['minecraft:double_plant', 772], - ['minecraft:double_wooden_slab', 773], - ['minecraft:coral', 774], - ['minecraft:tallgrass', 775], - ['minecraft:log2', 776], - ['minecraft:monster_egg', 777], - ['minecraft:concrete', 778], - ['minecraft:concrete_powder', 779], - ['minecraft:stained_glass', 780], - ['minecraft:stained_glass_pane', 781], - ['minecraft:shulker_box', 782], - ['minecraft:wood', 783], - ['minecraft:music_disc_creator', 784], - ['minecraft:music_disc_creator_music_box', 785], - ['minecraft:music_disc_precipice', 786], - ['minecraft:chemistry_table', 787], - ['minecraft:hard_stained_glass', 788], - ['minecraft:hard_stained_glass_pane', 789], - ['minecraft:colored_torch_rg', 790], - ['minecraft:colored_torch_bp', 791], - ['minecraft:light_block', 792], - ['minecraft:boat', 793], - ['minecraft:dye', 794], - ['minecraft:banner_pattern', 795], - ['minecraft:spawn_egg', 796], - ['minecraft:end_crystal', 797], - ['minecraft:glow_berries', 798], -]) + ['minecraft:waxed_oxidized_copper_lantern', -1090], + ['minecraft:waxed_weathered_copper_lantern', -1089], + ['minecraft:waxed_exposed_copper_lantern', -1088], + ['minecraft:waxed_copper_lantern', -1087], + ['minecraft:oxidized_copper_lantern', -1086], + ['minecraft:weathered_copper_lantern', -1085], + ['minecraft:exposed_copper_lantern', -1084], + ['minecraft:copper_lantern', -1083], + ['minecraft:copper_torch', -1082], + ['minecraft:waxed_oxidized_copper_chain', -1081], + ['minecraft:waxed_weathered_copper_chain', -1080], + ['minecraft:waxed_exposed_copper_chain', -1079], + ['minecraft:waxed_copper_chain', -1078], + ['minecraft:oxidized_copper_chain', -1077], + ['minecraft:weathered_copper_chain', -1076], + ['minecraft:exposed_copper_chain', -1075], + ['minecraft:copper_chain', -1074], + ['minecraft:waxed_oxidized_copper_bars', -1073], + ['minecraft:waxed_weathered_copper_bars', -1072], + ['minecraft:waxed_exposed_copper_bars', -1071], + ['minecraft:waxed_copper_bars', -1070], + ['minecraft:oxidized_copper_bars', -1069], + ['minecraft:weathered_copper_bars', -1068], + ['minecraft:exposed_copper_bars', -1067], + ['minecraft:copper_bars', -1066], + ['minecraft:waxed_oxidized_copper_golem_statue', -1046], + ['minecraft:waxed_weathered_copper_golem_statue', -1045], + ['minecraft:waxed_exposed_copper_golem_statue', -1044], + ['minecraft:waxed_copper_golem_statue', -1043], + ['minecraft:oxidized_copper_golem_statue', -1042], + ['minecraft:weathered_copper_golem_statue', -1041], + ['minecraft:exposed_copper_golem_statue', -1040], + ['minecraft:copper_golem_statue', -1039], + ['minecraft:waxed_oxidized_copper_chest', -1038], + ['minecraft:waxed_weathered_copper_chest', -1037], + ['minecraft:waxed_exposed_copper_chest', -1036], + ['minecraft:waxed_copper_chest', -1035], + ['minecraft:oxidized_copper_chest', -1034], + ['minecraft:weathered_copper_chest', -1033], + ['minecraft:exposed_copper_chest', -1032], + ['minecraft:copper_chest', -1031], + ['minecraft:cactus_flower', -1030], + ['minecraft:tall_dry_grass', -1029], + ['minecraft:short_dry_grass', -1028], + ['minecraft:dried_ghast', -1027], + ['minecraft:leaf_litter', -1026], + ['minecraft:firefly_bush', -1025], + ['minecraft:wildflowers', -1024], + ['minecraft:bush', -1023], + ['minecraft:resin_clump', -1022], + ['minecraft:resin_block', -1021], + ['minecraft:chiseled_resin_bricks', -1020], + ['minecraft:closed_eyeblossom', -1019], + ['minecraft:open_eyeblossom', -1018], + ['minecraft:resin_brick_wall', -1017], + ['minecraft:resin_brick_stairs', -1016], + ['minecraft:resin_brick_slab', -1014], + ['minecraft:resin_bricks', -1013], + ['minecraft:creaking_heart', -1012], + ['minecraft:pale_hanging_moss', -1011], + ['minecraft:pale_moss_carpet', -1010], + ['minecraft:pale_moss_block', -1009], + ['minecraft:mushroom_stem', -1008], + ['minecraft:pale_oak_leaves', -1007], + ['minecraft:pale_oak_sapling', -1006], + ['minecraft:pale_oak_wood', -1005], + ['minecraft:stripped_pale_oak_wood', -1004], + ['minecraft:pale_oak_trapdoor', -1002], + ['minecraft:pale_oak_stairs', -1000], + ['minecraft:pale_oak_slab', -998], + ['minecraft:pale_oak_pressure_plate', -997], + ['minecraft:pale_oak_planks', -996], + ['minecraft:pale_oak_log', -995], + ['minecraft:stripped_pale_oak_log', -994], + ['minecraft:pale_oak_hanging_sign', -993], + ['minecraft:pale_oak_fence_gate', -992], + ['minecraft:pale_oak_fence', -991], + ['minecraft:pale_oak_door', -990], + ['minecraft:pale_oak_button', -989], + ['minecraft:lab_table', -988], + ['minecraft:element_constructor', -987], + ['minecraft:material_reducer', -986], + ['minecraft:underwater_tnt', -985], + ['minecraft:wet_sponge', -984], + ['minecraft:red_nether_brick_wall', -983], + ['minecraft:red_sandstone_wall', -982], + ['minecraft:prismarine_wall', -981], + ['minecraft:end_stone_brick_wall', -980], + ['minecraft:nether_brick_wall', -979], + ['minecraft:mossy_stone_brick_wall', -978], + ['minecraft:stone_brick_wall', -977], + ['minecraft:brick_wall', -976], + ['minecraft:sandstone_wall', -975], + ['minecraft:andesite_wall', -974], + ['minecraft:diorite_wall', -973], + ['minecraft:granite_wall', -972], + ['minecraft:mossy_cobblestone_wall', -971], + ['minecraft:piglin_head', -970], + ['minecraft:dragon_head', -969], + ['minecraft:creeper_head', -968], + ['minecraft:player_head', -967], + ['minecraft:zombie_head', -966], + ['minecraft:wither_skeleton_skull', -965], + ['minecraft:colored_torch_purple', -964], + ['minecraft:colored_torch_green', -963], + ['minecraft:coarse_dirt', -962], + ['minecraft:deprecated_anvil', -961], + ['minecraft:damaged_anvil', -960], + ['minecraft:chipped_anvil', -959], + ['minecraft:smooth_red_sandstone', -958], + ['minecraft:cut_red_sandstone', -957], + ['minecraft:chiseled_red_sandstone', -956], + ['minecraft:smooth_quartz', -955], + ['minecraft:quartz_pillar', -954], + ['minecraft:chiseled_quartz_block', -953], + ['minecraft:deprecated_purpur_block_2', -952], + ['minecraft:purpur_pillar', -951], + ['minecraft:deprecated_purpur_block_1', -950], + ['minecraft:red_sand', -949], + ['minecraft:prismarine_bricks', -948], + ['minecraft:dark_prismarine', -947], + ['minecraft:smooth_sandstone', -946], + ['minecraft:cut_sandstone', -945], + ['minecraft:chiseled_sandstone', -944], + ['minecraft:light_block_15', -943], + ['minecraft:light_block_14', -942], + ['minecraft:light_block_13', -941], + ['minecraft:light_block_12', -940], + ['minecraft:light_block_11', -939], + ['minecraft:light_block_10', -938], + ['minecraft:light_block_9', -937], + ['minecraft:light_block_8', -936], + ['minecraft:light_block_7', -935], + ['minecraft:light_block_6', -934], + ['minecraft:light_block_5', -933], + ['minecraft:light_block_4', -932], + ['minecraft:light_block_3', -931], + ['minecraft:light_block_2', -930], + ['minecraft:light_block_1', -929], + ['minecraft:cut_red_sandstone_double_slab', -928], + ['minecraft:cut_sandstone_double_slab', -927], + ['minecraft:normal_stone_double_slab', -926], + ['minecraft:smooth_quartz_double_slab', -925], + ['minecraft:polished_granite_double_slab', -924], + ['minecraft:granite_double_slab', -923], + ['minecraft:polished_diorite_double_slab', -922], + ['minecraft:diorite_double_slab', -921], + ['minecraft:andesite_double_slab', -920], + ['minecraft:polished_andesite_double_slab', -919], + ['minecraft:smooth_red_sandstone_double_slab', -918], + ['minecraft:red_nether_brick_double_slab', -917], + ['minecraft:smooth_sandstone_double_slab', -916], + ['minecraft:mossy_cobblestone_double_slab', -915], + ['minecraft:prismarine_brick_double_slab', -914], + ['minecraft:dark_prismarine_double_slab', -913], + ['minecraft:prismarine_double_slab', -912], + ['minecraft:purpur_double_slab', -911], + ['minecraft:dead_horn_coral_wall_fan', -910], + ['minecraft:dead_fire_coral_wall_fan', -909], + ['minecraft:dead_bubble_coral_wall_fan', -908], + ['minecraft:fire_coral_wall_fan', -907], + ['minecraft:dead_brain_coral_wall_fan', -906], + ['minecraft:dead_tube_coral_wall_fan', -905], + ['minecraft:brain_coral_wall_fan', -904], + ['minecraft:petrified_oak_double_slab', -903], + ['minecraft:petrified_oak_slab', -902], + ['minecraft:cut_red_sandstone_slab', -901], + ['minecraft:cut_sandstone_slab', -900], + ['minecraft:normal_stone_slab', -899], + ['minecraft:smooth_quartz_slab', -898], + ['minecraft:polished_granite_slab', -897], + ['minecraft:granite_slab', -896], + ['minecraft:polished_diorite_slab', -895], + ['minecraft:diorite_slab', -894], + ['minecraft:andesite_slab', -893], + ['minecraft:polished_andesite_slab', -892], + ['minecraft:smooth_red_sandstone_slab', -891], + ['minecraft:red_nether_brick_slab', -890], + ['minecraft:smooth_sandstone_slab', -889], + ['minecraft:mossy_cobblestone_slab', -888], + ['minecraft:prismarine_brick_slab', -887], + ['minecraft:dark_prismarine_slab', -886], + ['minecraft:prismarine_slab', -885], + ['minecraft:purpur_slab', -884], + ['minecraft:nether_brick_double_slab', -883], + ['minecraft:quartz_double_slab', -882], + ['minecraft:stone_brick_double_slab', -881], + ['minecraft:brick_double_slab', -880], + ['minecraft:cobblestone_double_slab', -879], + ['minecraft:sandstone_double_slab', -878], + ['minecraft:nether_brick_slab', -877], + ['minecraft:quartz_slab', -876], + ['minecraft:stone_brick_slab', -875], + ['minecraft:brick_slab', -874], + ['minecraft:cobblestone_slab', -873], + ['minecraft:sandstone_slab', -872], + ['minecraft:chiseled_stone_bricks', -870], + ['minecraft:cracked_stone_bricks', -869], + ['minecraft:mossy_stone_bricks', -868], + ['minecraft:peony', -867], + ['minecraft:rose_bush', -866], + ['minecraft:large_fern', -865], + ['minecraft:tall_grass', -864], + ['minecraft:lilac', -863], + ['minecraft:infested_chiseled_stone_bricks', -862], + ['minecraft:infested_cracked_stone_bricks', -861], + ['minecraft:infested_mossy_stone_bricks', -860], + ['minecraft:infested_stone_bricks', -859], + ['minecraft:infested_cobblestone', -858], + ['minecraft:dead_horn_coral_block', -857], + ['minecraft:dead_fire_coral_block', -856], + ['minecraft:dead_bubble_coral_block', -855], + ['minecraft:dead_brain_coral_block', -854], + ['minecraft:dead_tube_coral_block', -853], + ['minecraft:horn_coral_block', -852], + ['minecraft:fire_coral_block', -851], + ['minecraft:bubble_coral_block', -850], + ['minecraft:brain_coral_block', -849], + ['minecraft:fern', -848], + ['minecraft:dead_horn_coral_fan', -847], + ['minecraft:dead_fire_coral_fan', -846], + ['minecraft:dead_bubble_coral_fan', -845], + ['minecraft:dead_brain_coral_fan', -844], + ['minecraft:horn_coral_fan', -843], + ['minecraft:fire_coral_fan', -842], + ['minecraft:bubble_coral_fan', -841], + ['minecraft:brain_coral_fan', -840], + ['minecraft:lily_of_the_valley', -839], + ['minecraft:cornflower', -838], + ['minecraft:oxeye_daisy', -837], + ['minecraft:pink_tulip', -836], + ['minecraft:white_tulip', -835], + ['minecraft:orange_tulip', -834], + ['minecraft:red_tulip', -833], + ['minecraft:azure_bluet', -832], + ['minecraft:allium', -831], + ['minecraft:blue_orchid', -830], + ['minecraft:dark_oak_sapling', -829], + ['minecraft:acacia_sapling', -828], + ['minecraft:jungle_sapling', -827], + ['minecraft:birch_sapling', -826], + ['minecraft:spruce_sapling', -825], + ['minecraft:stripped_dark_oak_wood', -824], + ['minecraft:stripped_acacia_wood', -823], + ['minecraft:stripped_jungle_wood', -822], + ['minecraft:stripped_birch_wood', -821], + ['minecraft:stripped_spruce_wood', -820], + ['minecraft:stripped_oak_wood', -819], + ['minecraft:dark_oak_wood', -818], + ['minecraft:acacia_wood', -817], + ['minecraft:jungle_wood', -816], + ['minecraft:birch_wood', -815], + ['minecraft:spruce_wood', -814], + ['minecraft:dark_oak_double_slab', -813], + ['minecraft:acacia_double_slab', -812], + ['minecraft:jungle_double_slab', -811], + ['minecraft:birch_double_slab', -810], + ['minecraft:spruce_double_slab', -809], + ['minecraft:dark_oak_slab', -808], + ['minecraft:acacia_slab', -807], + ['minecraft:jungle_slab', -806], + ['minecraft:birch_slab', -805], + ['minecraft:spruce_slab', -804], + ['minecraft:dark_oak_leaves', -803], + ['minecraft:jungle_leaves', -802], + ['minecraft:birch_leaves', -801], + ['minecraft:spruce_leaves', -800], + ['minecraft:waxed_oxidized_copper_trapdoor', -799], + ['minecraft:waxed_weathered_copper_trapdoor', -798], + ['minecraft:waxed_exposed_copper_trapdoor', -797], + ['minecraft:waxed_copper_trapdoor', -796], + ['minecraft:oxidized_copper_trapdoor', -795], + ['minecraft:weathered_copper_trapdoor', -794], + ['minecraft:exposed_copper_trapdoor', -793], + ['minecraft:copper_trapdoor', -792], + ['minecraft:waxed_oxidized_copper_door', -791], + ['minecraft:waxed_weathered_copper_door', -790], + ['minecraft:waxed_exposed_copper_door', -789], + ['minecraft:waxed_copper_door', -788], + ['minecraft:oxidized_copper_door', -787], + ['minecraft:weathered_copper_door', -786], + ['minecraft:exposed_copper_door', -785], + ['minecraft:copper_door', -784], + ['minecraft:waxed_oxidized_copper_bulb', -783], + ['minecraft:waxed_weathered_copper_bulb', -782], + ['minecraft:waxed_exposed_copper_bulb', -781], + ['minecraft:waxed_copper_bulb', -780], + ['minecraft:oxidized_copper_bulb', -779], + ['minecraft:weathered_copper_bulb', -778], + ['minecraft:exposed_copper_bulb', -777], + ['minecraft:copper_bulb', -776], + ['minecraft:waxed_oxidized_copper_grate', -775], + ['minecraft:waxed_weathered_copper_grate', -774], + ['minecraft:waxed_exposed_copper_grate', -773], + ['minecraft:waxed_copper_grate', -772], + ['minecraft:oxidized_copper_grate', -771], + ['minecraft:weathered_copper_grate', -770], + ['minecraft:exposed_copper_grate', -769], + ['minecraft:copper_grate', -768], + ['minecraft:waxed_weathered_chiseled_copper', -767], + ['minecraft:waxed_oxidized_chiseled_copper', -766], + ['minecraft:waxed_exposed_chiseled_copper', -765], + ['minecraft:waxed_chiseled_copper', -764], + ['minecraft:oxidized_chiseled_copper', -763], + ['minecraft:weathered_chiseled_copper', -762], + ['minecraft:exposed_chiseled_copper', -761], + ['minecraft:chiseled_copper', -760], + ['minecraft:chiseled_tuff_bricks', -759], + ['minecraft:tuff_brick_wall', -758], + ['minecraft:tuff_brick_stairs', -757], + ['minecraft:tuff_brick_double_slab', -756], + ['minecraft:tuff_brick_slab', -755], + ['minecraft:tuff_bricks', -754], + ['minecraft:chiseled_tuff', -753], + ['minecraft:polished_tuff_wall', -752], + ['minecraft:polished_tuff_stairs', -751], + ['minecraft:polished_tuff_double_slab', -750], + ['minecraft:polished_tuff_slab', -749], + ['minecraft:polished_tuff', -748], + ['minecraft:tuff_wall', -747], + ['minecraft:tuff_stairs', -746], + ['minecraft:tuff_double_slab', -745], + ['minecraft:tuff_slab', -744], + ['minecraft:dark_oak_planks', -743], + ['minecraft:acacia_planks', -742], + ['minecraft:jungle_planks', -741], + ['minecraft:birch_planks', -740], + ['minecraft:spruce_planks', -739], + ['minecraft:black_terracotta', -738], + ['minecraft:red_terracotta', -737], + ['minecraft:green_terracotta', -736], + ['minecraft:brown_terracotta', -735], + ['minecraft:blue_terracotta', -734], + ['minecraft:purple_terracotta', -733], + ['minecraft:cyan_terracotta', -732], + ['minecraft:light_gray_terracotta', -731], + ['minecraft:gray_terracotta', -730], + ['minecraft:pink_terracotta', -729], + ['minecraft:lime_terracotta', -728], + ['minecraft:yellow_terracotta', -727], + ['minecraft:light_blue_terracotta', -726], + ['minecraft:magenta_terracotta', -725], + ['minecraft:orange_terracotta', -724], + ['minecraft:black_concrete_powder', -723], + ['minecraft:red_concrete_powder', -722], + ['minecraft:green_concrete_powder', -721], + ['minecraft:brown_concrete_powder', -720], + ['minecraft:blue_concrete_powder', -719], + ['minecraft:purple_concrete_powder', -718], + ['minecraft:cyan_concrete_powder', -717], + ['minecraft:light_gray_concrete_powder', -716], + ['minecraft:gray_concrete_powder', -715], + ['minecraft:pink_concrete_powder', -714], + ['minecraft:lime_concrete_powder', -713], + ['minecraft:yellow_concrete_powder', -712], + ['minecraft:light_blue_concrete_powder', -711], + ['minecraft:magenta_concrete_powder', -710], + ['minecraft:orange_concrete_powder', -709], + ['minecraft:hard_black_stained_glass', -702], + ['minecraft:hard_red_stained_glass', -701], + ['minecraft:hard_green_stained_glass', -700], + ['minecraft:hard_brown_stained_glass', -699], + ['minecraft:hard_blue_stained_glass', -698], + ['minecraft:hard_purple_stained_glass', -697], + ['minecraft:hard_cyan_stained_glass', -696], + ['minecraft:hard_light_gray_stained_glass', -695], + ['minecraft:hard_gray_stained_glass', -694], + ['minecraft:hard_pink_stained_glass', -693], + ['minecraft:hard_lime_stained_glass', -692], + ['minecraft:hard_yellow_stained_glass', -691], + ['minecraft:hard_light_blue_stained_glass', -690], + ['minecraft:hard_magenta_stained_glass', -689], + ['minecraft:hard_orange_stained_glass', -688], + ['minecraft:black_stained_glass', -687], + ['minecraft:red_stained_glass', -686], + ['minecraft:green_stained_glass', -685], + ['minecraft:brown_stained_glass', -684], + ['minecraft:blue_stained_glass', -683], + ['minecraft:purple_stained_glass', -682], + ['minecraft:cyan_stained_glass', -681], + ['minecraft:light_gray_stained_glass', -680], + ['minecraft:gray_stained_glass', -679], + ['minecraft:pink_stained_glass', -678], + ['minecraft:lime_stained_glass', -677], + ['minecraft:yellow_stained_glass', -676], + ['minecraft:light_blue_stained_glass', -675], + ['minecraft:magenta_stained_glass', -674], + ['minecraft:orange_stained_glass', -673], + ['minecraft:hard_black_stained_glass_pane', -672], + ['minecraft:hard_red_stained_glass_pane', -671], + ['minecraft:hard_green_stained_glass_pane', -670], + ['minecraft:hard_brown_stained_glass_pane', -669], + ['minecraft:hard_blue_stained_glass_pane', -668], + ['minecraft:hard_purple_stained_glass_pane', -667], + ['minecraft:hard_cyan_stained_glass_pane', -666], + ['minecraft:hard_light_gray_stained_glass_pane', -665], + ['minecraft:hard_gray_stained_glass_pane', -664], + ['minecraft:hard_pink_stained_glass_pane', -663], + ['minecraft:hard_lime_stained_glass_pane', -662], + ['minecraft:hard_yellow_stained_glass_pane', -661], + ['minecraft:hard_light_blue_stained_glass_pane', -660], + ['minecraft:hard_magenta_stained_glass_pane', -659], + ['minecraft:hard_orange_stained_glass_pane', -658], + ['minecraft:black_stained_glass_pane', -657], + ['minecraft:red_stained_glass_pane', -656], + ['minecraft:green_stained_glass_pane', -655], + ['minecraft:brown_stained_glass_pane', -654], + ['minecraft:blue_stained_glass_pane', -653], + ['minecraft:purple_stained_glass_pane', -652], + ['minecraft:cyan_stained_glass_pane', -651], + ['minecraft:light_gray_stained_glass_pane', -650], + ['minecraft:gray_stained_glass_pane', -649], + ['minecraft:pink_stained_glass_pane', -648], + ['minecraft:lime_stained_glass_pane', -647], + ['minecraft:yellow_stained_glass_pane', -646], + ['minecraft:light_blue_stained_glass_pane', -645], + ['minecraft:magenta_stained_glass_pane', -644], + ['minecraft:orange_stained_glass_pane', -643], + ['minecraft:black_concrete', -642], + ['minecraft:red_concrete', -641], + ['minecraft:green_concrete', -640], + ['minecraft:brown_concrete', -639], + ['minecraft:blue_concrete', -638], + ['minecraft:purple_concrete', -637], + ['minecraft:cyan_concrete', -636], + ['minecraft:light_gray_concrete', -635], + ['minecraft:gray_concrete', -634], + ['minecraft:pink_concrete', -633], + ['minecraft:lime_concrete', -632], + ['minecraft:yellow_concrete', -631], + ['minecraft:light_blue_concrete', -630], + ['minecraft:magenta_concrete', -629], + ['minecraft:orange_concrete', -628], + ['minecraft:black_shulker_box', -627], + ['minecraft:red_shulker_box', -626], + ['minecraft:green_shulker_box', -625], + ['minecraft:brown_shulker_box', -624], + ['minecraft:blue_shulker_box', -623], + ['minecraft:purple_shulker_box', -622], + ['minecraft:cyan_shulker_box', -621], + ['minecraft:light_gray_shulker_box', -620], + ['minecraft:gray_shulker_box', -619], + ['minecraft:pink_shulker_box', -618], + ['minecraft:lime_shulker_box', -617], + ['minecraft:yellow_shulker_box', -616], + ['minecraft:light_blue_shulker_box', -615], + ['minecraft:magenta_shulker_box', -614], + ['minecraft:orange_shulker_box', -613], + ['minecraft:pitcher_plant', -612], + ['minecraft:black_carpet', -611], + ['minecraft:red_carpet', -610], + ['minecraft:green_carpet', -609], + ['minecraft:brown_carpet', -608], + ['minecraft:blue_carpet', -607], + ['minecraft:purple_carpet', -606], + ['minecraft:cyan_carpet', -605], + ['minecraft:light_gray_carpet', -604], + ['minecraft:gray_carpet', -603], + ['minecraft:pink_carpet', -602], + ['minecraft:lime_carpet', -601], + ['minecraft:yellow_carpet', -600], + ['minecraft:light_blue_carpet', -599], + ['minecraft:magenta_carpet', -598], + ['minecraft:orange_carpet', -597], + ['minecraft:sniffer_egg', -596], + ['minecraft:polished_andesite', -595], + ['minecraft:andesite', -594], + ['minecraft:polished_diorite', -593], + ['minecraft:diorite', -592], + ['minecraft:polished_granite', -591], + ['minecraft:granite', -590], + ['minecraft:dead_horn_coral', -589], + ['minecraft:dead_fire_coral', -588], + ['minecraft:dead_bubble_coral', -587], + ['minecraft:dead_brain_coral', -586], + ['minecraft:dead_tube_coral', -585], + ['minecraft:horn_coral', -584], + ['minecraft:fire_coral', -583], + ['minecraft:bubble_coral', -582], + ['minecraft:brain_coral', -581], + ['minecraft:calibrated_sculk_sensor', -580], + ['minecraft:spruce_fence', -579], + ['minecraft:jungle_fence', -578], + ['minecraft:dark_oak_fence', -577], + ['minecraft:birch_fence', -576], + ['minecraft:acacia_fence', -575], + ['minecraft:pitcher_crop', -574], + ['minecraft:suspicious_gravel', -573], + ['minecraft:dark_oak_log', -572], + ['minecraft:jungle_log', -571], + ['minecraft:birch_log', -570], + ['minecraft:spruce_log', -569], + ['minecraft:torchflower', -568], + ['minecraft:torchflower_crop', -567], + ['minecraft:pink_wool', -566], + ['minecraft:magenta_wool', -565], + ['minecraft:purple_wool', -564], + ['minecraft:blue_wool', -563], + ['minecraft:light_blue_wool', -562], + ['minecraft:cyan_wool', -561], + ['minecraft:green_wool', -560], + ['minecraft:lime_wool', -559], + ['minecraft:yellow_wool', -558], + ['minecraft:orange_wool', -557], + ['minecraft:red_wool', -556], + ['minecraft:brown_wool', -555], + ['minecraft:black_wool', -554], + ['minecraft:gray_wool', -553], + ['minecraft:light_gray_wool', -552], + ['minecraft:decorated_pot', -551], + ['minecraft:pink_petals', -549], + ['minecraft:cherry_leaves', -548], + ['minecraft:cherry_sapling', -547], + ['minecraft:cherry_wood', -546], + ['minecraft:stripped_cherry_wood', -545], + ['minecraft:cherry_wall_sign', -544], + ['minecraft:cherry_trapdoor', -543], + ['minecraft:cherry_standing_sign', -542], + ['minecraft:cherry_stairs', -541], + ['minecraft:cherry_double_slab', -540], + ['minecraft:cherry_slab', -539], + ['minecraft:cherry_pressure_plate', -538], + ['minecraft:cherry_planks', -537], + ['minecraft:cherry_log', -536], + ['minecraft:stripped_cherry_log', -535], + ['minecraft:cherry_hanging_sign', -534], + ['minecraft:cherry_fence_gate', -533], + ['minecraft:cherry_fence', -532], + ['minecraft:cherry_door', -531], + ['minecraft:cherry_button', -530], + ['minecraft:suspicious_sand', -529], + ['minecraft:stripped_bamboo_block', -528], + ['minecraft:bamboo_block', -527], + ['minecraft:chiseled_bookshelf', -526], + ['minecraft:bamboo_mosaic_double_slab', -525], + ['minecraft:bamboo_mosaic_slab', -524], + ['minecraft:bamboo_mosaic_stairs', -523], + ['minecraft:bamboo_hanging_sign', -522], + ['minecraft:bamboo_double_slab', -521], + ['minecraft:bamboo_trapdoor', -520], + ['minecraft:bamboo_wall_sign', -519], + ['minecraft:bamboo_standing_sign', -518], + ['minecraft:bamboo_door', -517], + ['minecraft:bamboo_fence_gate', -516], + ['minecraft:bamboo_fence', -515], + ['minecraft:bamboo_pressure_plate', -514], + ['minecraft:bamboo_slab', -513], + ['minecraft:bamboo_stairs', -512], + ['minecraft:bamboo_button', -511], + ['minecraft:bamboo_planks', -510], + ['minecraft:bamboo_mosaic', -509], + ['minecraft:mangrove_hanging_sign', -508], + ['minecraft:warped_hanging_sign', -507], + ['minecraft:crimson_hanging_sign', -506], + ['minecraft:dark_oak_hanging_sign', -505], + ['minecraft:acacia_hanging_sign', -504], + ['minecraft:jungle_hanging_sign', -503], + ['minecraft:birch_hanging_sign', -502], + ['minecraft:spruce_hanging_sign', -501], + ['minecraft:oak_hanging_sign', -500], + ['minecraft:mangrove_double_slab', -499], + ['minecraft:stripped_mangrove_wood', -498], + ['minecraft:mangrove_wood', -497], + ['minecraft:mangrove_trapdoor', -496], + ['minecraft:mangrove_wall_sign', -495], + ['minecraft:mangrove_standing_sign', -494], + ['minecraft:mangrove_door', -493], + ['minecraft:mangrove_fence_gate', -492], + ['minecraft:mangrove_fence', -491], + ['minecraft:mangrove_pressure_plate', -490], + ['minecraft:mangrove_slab', -489], + ['minecraft:mangrove_stairs', -488], + ['minecraft:mangrove_button', -487], + ['minecraft:mangrove_planks', -486], + ['minecraft:stripped_mangrove_log', -485], + ['minecraft:mangrove_log', -484], + ['minecraft:muddy_mangrove_roots', -483], + ['minecraft:mangrove_roots', -482], + ['minecraft:mud_brick_wall', -481], + ['minecraft:mud_brick_stairs', -480], + ['minecraft:mud_brick_double_slab', -479], + ['minecraft:mud_brick_slab', -478], + ['minecraft:packed_mud', -477], + ['minecraft:mud_bricks', -475], + ['minecraft:mangrove_propagule', -474], + ['minecraft:mud', -473], + ['minecraft:mangrove_leaves', -472], + ['minecraft:ochre_froglight', -471], + ['minecraft:verdant_froglight', -470], + ['minecraft:pearlescent_froglight', -469], + ['minecraft:frog_spawn', -468], + ['minecraft:reinforced_deepslate', -466], + ['minecraft:client_request_placeholder_block', -465], + ['minecraft:sculk_shrieker', -461], + ['minecraft:sculk_catalyst', -460], + ['minecraft:sculk_vein', -459], + ['minecraft:sculk', -458], + ['minecraft:infested_deepslate', -454], + ['minecraft:raw_gold_block', -453], + ['minecraft:raw_copper_block', -452], + ['minecraft:raw_iron_block', -451], + ['minecraft:waxed_oxidized_double_cut_copper_slab', -450], + ['minecraft:waxed_oxidized_cut_copper_slab', -449], + ['minecraft:waxed_oxidized_cut_copper_stairs', -448], + ['minecraft:waxed_oxidized_cut_copper', -447], + ['minecraft:waxed_oxidized_copper', -446], + ['minecraft:black_candle_cake', -445], + ['minecraft:red_candle_cake', -444], + ['minecraft:green_candle_cake', -443], + ['minecraft:brown_candle_cake', -442], + ['minecraft:blue_candle_cake', -441], + ['minecraft:purple_candle_cake', -440], + ['minecraft:cyan_candle_cake', -439], + ['minecraft:light_gray_candle_cake', -438], + ['minecraft:gray_candle_cake', -437], + ['minecraft:pink_candle_cake', -436], + ['minecraft:lime_candle_cake', -435], + ['minecraft:yellow_candle_cake', -434], + ['minecraft:light_blue_candle_cake', -433], + ['minecraft:magenta_candle_cake', -432], + ['minecraft:orange_candle_cake', -431], + ['minecraft:white_candle_cake', -430], + ['minecraft:candle_cake', -429], + ['minecraft:black_candle', -428], + ['minecraft:red_candle', -427], + ['minecraft:green_candle', -426], + ['minecraft:brown_candle', -425], + ['minecraft:blue_candle', -424], + ['minecraft:purple_candle', -423], + ['minecraft:cyan_candle', -422], + ['minecraft:light_gray_candle', -421], + ['minecraft:gray_candle', -420], + ['minecraft:pink_candle', -419], + ['minecraft:lime_candle', -418], + ['minecraft:yellow_candle', -417], + ['minecraft:light_blue_candle', -416], + ['minecraft:magenta_candle', -415], + ['minecraft:orange_candle', -414], + ['minecraft:white_candle', -413], + ['minecraft:candle', -412], + ['minecraft:glow_lichen', -411], + ['minecraft:cracked_deepslate_bricks', -410], + ['minecraft:cracked_deepslate_tiles', -409], + ['minecraft:deepslate_copper_ore', -408], + ['minecraft:deepslate_emerald_ore', -407], + ['minecraft:deepslate_coal_ore', -406], + ['minecraft:deepslate_diamond_ore', -405], + ['minecraft:lit_deepslate_redstone_ore', -404], + ['minecraft:deepslate_redstone_ore', -403], + ['minecraft:deepslate_gold_ore', -402], + ['minecraft:deepslate_iron_ore', -401], + ['minecraft:deepslate_lapis_ore', -400], + ['minecraft:deepslate_brick_double_slab', -399], + ['minecraft:deepslate_tile_double_slab', -398], + ['minecraft:polished_deepslate_double_slab', -397], + ['minecraft:cobbled_deepslate_double_slab', -396], + ['minecraft:chiseled_deepslate', -395], + ['minecraft:deepslate_brick_wall', -394], + ['minecraft:deepslate_brick_stairs', -393], + ['minecraft:deepslate_brick_slab', -392], + ['minecraft:deepslate_bricks', -391], + ['minecraft:deepslate_tile_wall', -390], + ['minecraft:deepslate_tile_stairs', -389], + ['minecraft:deepslate_tile_slab', -388], + ['minecraft:deepslate_tiles', -387], + ['minecraft:polished_deepslate_wall', -386], + ['minecraft:polished_deepslate_stairs', -385], + ['minecraft:polished_deepslate_slab', -384], + ['minecraft:polished_deepslate', -383], + ['minecraft:cobbled_deepslate_wall', -382], + ['minecraft:cobbled_deepslate_stairs', -381], + ['minecraft:cobbled_deepslate_slab', -380], + ['minecraft:cobbled_deepslate', -379], + ['minecraft:deepslate', -378], + ['minecraft:smooth_basalt', -377], + ['minecraft:cave_vines_head_with_berries', -376], + ['minecraft:cave_vines_body_with_berries', -375], + ['minecraft:waxed_weathered_double_cut_copper_slab', -374], + ['minecraft:waxed_exposed_double_cut_copper_slab', -373], + ['minecraft:waxed_double_cut_copper_slab', -372], + ['minecraft:oxidized_double_cut_copper_slab', -371], + ['minecraft:weathered_double_cut_copper_slab', -370], + ['minecraft:exposed_double_cut_copper_slab', -369], + ['minecraft:double_cut_copper_slab', -368], + ['minecraft:waxed_weathered_cut_copper_slab', -367], + ['minecraft:waxed_exposed_cut_copper_slab', -366], + ['minecraft:waxed_cut_copper_slab', -365], + ['minecraft:oxidized_cut_copper_slab', -364], + ['minecraft:weathered_cut_copper_slab', -363], + ['minecraft:exposed_cut_copper_slab', -362], + ['minecraft:cut_copper_slab', -361], + ['minecraft:waxed_weathered_cut_copper_stairs', -360], + ['minecraft:waxed_exposed_cut_copper_stairs', -359], + ['minecraft:waxed_cut_copper_stairs', -358], + ['minecraft:oxidized_cut_copper_stairs', -357], + ['minecraft:weathered_cut_copper_stairs', -356], + ['minecraft:exposed_cut_copper_stairs', -355], + ['minecraft:cut_copper_stairs', -354], + ['minecraft:waxed_weathered_cut_copper', -353], + ['minecraft:waxed_exposed_cut_copper', -352], + ['minecraft:waxed_cut_copper', -351], + ['minecraft:oxidized_cut_copper', -350], + ['minecraft:weathered_cut_copper', -349], + ['minecraft:exposed_cut_copper', -348], + ['minecraft:cut_copper', -347], + ['minecraft:waxed_weathered_copper', -346], + ['minecraft:waxed_exposed_copper', -345], + ['minecraft:waxed_copper', -344], + ['minecraft:oxidized_copper', -343], + ['minecraft:weathered_copper', -342], + ['minecraft:exposed_copper', -341], + ['minecraft:copper_block', -340], + ['minecraft:glow_frame_block', -339], + ['minecraft:flowering_azalea', -338], + ['minecraft:azalea', -337], + ['minecraft:small_dripleaf_block', -336], + ['minecraft:moss_carpet', -335], + ['minecraft:tinted_glass', -334], + ['minecraft:tuff', -333], + ['minecraft:small_amethyst_bud', -332], + ['minecraft:medium_amethyst_bud', -331], + ['minecraft:large_amethyst_bud', -330], + ['minecraft:amethyst_cluster', -329], + ['minecraft:budding_amethyst', -328], + ['minecraft:amethyst_block', -327], + ['minecraft:calcite', -326], + ['minecraft:azalea_leaves_flowered', -325], + ['minecraft:azalea_leaves', -324], + ['minecraft:big_dripleaf', -323], + ['minecraft:cave_vines', -322], + ['minecraft:spore_blossom', -321], + ['minecraft:moss_block', -320], + ['minecraft:hanging_roots', -319], + ['minecraft:dirt_with_roots', -318], + ['minecraft:dripstone_block', -317], + ['minecraft:heavy_core', -316], + ['minecraft:trial_spawner', -315], + ['minecraft:vault', -314], + ['minecraft:crafter', -313], + ['minecraft:lightning_rod', -312], + ['minecraft:copper_ore', -311], + ['minecraft:pointed_dripstone', -308], + ['minecraft:sculk_sensor', -307], + ['minecraft:powder_snow', -306], + ['minecraft:unknown', -305], + ['minecraft:quartz_bricks', -304], + ['minecraft:cracked_nether_bricks', -303], + ['minecraft:chiseled_nether_bricks', -302], + ['minecraft:stripped_warped_hyphae', -301], + ['minecraft:stripped_crimson_hyphae', -300], + ['minecraft:crimson_hyphae', -299], + ['minecraft:warped_hyphae', -298], + ['minecraft:polished_blackstone_wall', -297], + ['minecraft:polished_blackstone_button', -296], + ['minecraft:polished_blackstone_pressure_plate', -295], + ['minecraft:polished_blackstone_double_slab', -294], + ['minecraft:polished_blackstone_slab', -293], + ['minecraft:polished_blackstone_stairs', -292], + ['minecraft:polished_blackstone', -291], + ['minecraft:crying_obsidian', -289], + ['minecraft:nether_gold_ore', -288], + ['minecraft:twisting_vines', -287], + ['minecraft:polished_blackstone_brick_double_slab', -285], + ['minecraft:polished_blackstone_brick_slab', -284], + ['minecraft:blackstone_double_slab', -283], + ['minecraft:blackstone_slab', -282], + ['minecraft:gilded_blackstone', -281], + ['minecraft:cracked_polished_blackstone_bricks', -280], + ['minecraft:chiseled_polished_blackstone', -279], + ['minecraft:polished_blackstone_brick_wall', -278], + ['minecraft:blackstone_wall', -277], + ['minecraft:blackstone_stairs', -276], + ['minecraft:polished_blackstone_brick_stairs', -275], + ['minecraft:polished_blackstone_bricks', -274], + ['minecraft:blackstone', -273], + ['minecraft:respawn_anchor', -272], + ['minecraft:ancient_debris', -271], + ['minecraft:netherite_block', -270], + ['minecraft:soul_lantern', -269], + ['minecraft:soul_torch', -268], + ['minecraft:warped_double_slab', -267], + ['minecraft:crimson_double_slab', -266], + ['minecraft:warped_slab', -265], + ['minecraft:crimson_slab', -264], + ['minecraft:warped_pressure_plate', -263], + ['minecraft:crimson_pressure_plate', -262], + ['minecraft:warped_button', -261], + ['minecraft:crimson_button', -260], + ['minecraft:warped_fence_gate', -259], + ['minecraft:crimson_fence_gate', -258], + ['minecraft:warped_fence', -257], + ['minecraft:crimson_fence', -256], + ['minecraft:warped_stairs', -255], + ['minecraft:crimson_stairs', -254], + ['minecraft:warped_wall_sign', -253], + ['minecraft:crimson_wall_sign', -252], + ['minecraft:warped_standing_sign', -251], + ['minecraft:crimson_standing_sign', -250], + ['minecraft:warped_trapdoor', -247], + ['minecraft:crimson_trapdoor', -246], + ['minecraft:warped_planks', -243], + ['minecraft:crimson_planks', -242], + ['minecraft:stripped_warped_stem', -241], + ['minecraft:stripped_crimson_stem', -240], + ['minecraft:target', -239], + ['minecraft:soul_soil', -236], + ['minecraft:polished_basalt', -235], + ['minecraft:basalt', -234], + ['minecraft:warped_nylium', -233], + ['minecraft:crimson_nylium', -232], + ['minecraft:weeping_vines', -231], + ['minecraft:shroomlight', -230], + ['minecraft:warped_fungus', -229], + ['minecraft:crimson_fungus', -228], + ['minecraft:warped_wart_block', -227], + ['minecraft:warped_stem', -226], + ['minecraft:crimson_stem', -225], + ['minecraft:warped_roots', -224], + ['minecraft:crimson_roots', -223], + ['minecraft:lodestone', -222], + ['minecraft:honeycomb_block', -221], + ['minecraft:honey_block', -220], + ['minecraft:beehive', -219], + ['minecraft:bee_nest', -218], + ['minecraft:sticky_piston_arm_collision', -217], + ['minecraft:wither_rose', -216], + ['minecraft:light_block_0', -215], + ['minecraft:lit_blast_furnace', -214], + ['minecraft:composter', -213], + ['minecraft:oak_wood', -212], + ['minecraft:jigsaw', -211], + ['minecraft:lantern', -208], + ['minecraft:sweet_berry_bush', -207], + ['minecraft:bell', -206], + ['minecraft:loom', -204], + ['minecraft:barrel', -203], + ['minecraft:smithing_table', -202], + ['minecraft:fletching_table', -201], + ['minecraft:cartography_table', -200], + ['minecraft:lit_smoker', -199], + ['minecraft:smoker', -198], + ['minecraft:stonecutter_block', -197], + ['minecraft:blast_furnace', -196], + ['minecraft:grindstone', -195], + ['minecraft:lectern', -194], + ['minecraft:darkoak_wall_sign', -193], + ['minecraft:darkoak_standing_sign', -192], + ['minecraft:acacia_wall_sign', -191], + ['minecraft:acacia_standing_sign', -190], + ['minecraft:jungle_wall_sign', -189], + ['minecraft:jungle_standing_sign', -188], + ['minecraft:birch_wall_sign', -187], + ['minecraft:birch_standing_sign', -186], + ['minecraft:smooth_quartz_stairs', -185], + ['minecraft:red_nether_brick_stairs', -184], + ['minecraft:smooth_stone', -183], + ['minecraft:spruce_wall_sign', -182], + ['minecraft:spruce_standing_sign', -181], + ['minecraft:normal_stone_stairs', -180], + ['minecraft:mossy_cobblestone_stairs', -179], + ['minecraft:end_brick_stairs', -178], + ['minecraft:smooth_sandstone_stairs', -177], + ['minecraft:smooth_red_sandstone_stairs', -176], + ['minecraft:mossy_stone_brick_stairs', -175], + ['minecraft:polished_andesite_stairs', -174], + ['minecraft:polished_diorite_stairs', -173], + ['minecraft:polished_granite_stairs', -172], + ['minecraft:andesite_stairs', -171], + ['minecraft:diorite_stairs', -170], + ['minecraft:granite_stairs', -169], + ['minecraft:mossy_stone_brick_double_slab', -168], + ['minecraft:end_stone_brick_double_slab', -167], + ['minecraft:mossy_stone_brick_slab', -166], + ['minecraft:scaffolding', -165], + ['minecraft:bamboo_sapling', -164], + ['minecraft:bamboo', -163], + ['minecraft:end_stone_brick_slab', -162], + ['minecraft:barrier', -161], + ['minecraft:bubble_column', -160], + ['minecraft:turtle_egg', -159], + ['minecraft:conduit', -157], + ['minecraft:sea_pickle', -156], + ['minecraft:carved_pumpkin', -155], + ['minecraft:spruce_pressure_plate', -154], + ['minecraft:jungle_pressure_plate', -153], + ['minecraft:dark_oak_pressure_plate', -152], + ['minecraft:birch_pressure_plate', -151], + ['minecraft:acacia_pressure_plate', -150], + ['minecraft:spruce_trapdoor', -149], + ['minecraft:jungle_trapdoor', -148], + ['minecraft:dark_oak_trapdoor', -147], + ['minecraft:birch_trapdoor', -146], + ['minecraft:acacia_trapdoor', -145], + ['minecraft:spruce_button', -144], + ['minecraft:jungle_button', -143], + ['minecraft:dark_oak_button', -142], + ['minecraft:birch_button', -141], + ['minecraft:acacia_button', -140], + ['minecraft:dried_kelp_block', -139], + ['minecraft:kelp_plant', -138], + ['minecraft:horn_coral_wall_fan', -137], + ['minecraft:bubble_coral_wall_fan', -136], + ['minecraft:tube_coral_wall_fan', -135], + ['minecraft:dead_tube_coral_fan', -134], + ['minecraft:tube_coral_fan', -133], + ['minecraft:tube_coral_block', -132], + ['minecraft:tube_coral', -131], + ['minecraft:seagrass', -130], + ['minecraft:element_118', -129], + ['minecraft:element_117', -128], + ['minecraft:element_116', -127], + ['minecraft:element_115', -126], + ['minecraft:element_114', -125], + ['minecraft:element_113', -124], + ['minecraft:element_112', -123], + ['minecraft:element_111', -122], + ['minecraft:element_110', -121], + ['minecraft:element_109', -120], + ['minecraft:element_108', -119], + ['minecraft:element_107', -118], + ['minecraft:element_106', -117], + ['minecraft:element_105', -116], + ['minecraft:element_104', -115], + ['minecraft:element_103', -114], + ['minecraft:element_102', -113], + ['minecraft:element_101', -112], + ['minecraft:element_100', -111], + ['minecraft:element_99', -110], + ['minecraft:element_98', -109], + ['minecraft:element_97', -108], + ['minecraft:element_96', -107], + ['minecraft:element_95', -106], + ['minecraft:element_94', -105], + ['minecraft:element_93', -104], + ['minecraft:element_92', -103], + ['minecraft:element_91', -102], + ['minecraft:element_90', -101], + ['minecraft:element_89', -100], + ['minecraft:element_88', -99], + ['minecraft:element_87', -98], + ['minecraft:element_86', -97], + ['minecraft:element_85', -96], + ['minecraft:element_84', -95], + ['minecraft:element_83', -94], + ['minecraft:element_82', -93], + ['minecraft:element_81', -92], + ['minecraft:element_80', -91], + ['minecraft:element_79', -90], + ['minecraft:element_78', -89], + ['minecraft:element_77', -88], + ['minecraft:element_76', -87], + ['minecraft:element_75', -86], + ['minecraft:element_74', -85], + ['minecraft:element_73', -84], + ['minecraft:element_72', -83], + ['minecraft:element_71', -82], + ['minecraft:element_70', -81], + ['minecraft:element_69', -80], + ['minecraft:element_68', -79], + ['minecraft:element_67', -78], + ['minecraft:element_66', -77], + ['minecraft:element_65', -76], + ['minecraft:element_64', -75], + ['minecraft:element_63', -74], + ['minecraft:element_62', -73], + ['minecraft:element_61', -72], + ['minecraft:element_60', -71], + ['minecraft:element_59', -70], + ['minecraft:element_58', -69], + ['minecraft:element_57', -68], + ['minecraft:element_56', -67], + ['minecraft:element_55', -66], + ['minecraft:element_54', -65], + ['minecraft:element_53', -64], + ['minecraft:element_52', -63], + ['minecraft:element_51', -62], + ['minecraft:element_50', -61], + ['minecraft:element_49', -60], + ['minecraft:element_48', -59], + ['minecraft:element_47', -58], + ['minecraft:element_46', -57], + ['minecraft:element_45', -56], + ['minecraft:element_44', -55], + ['minecraft:element_43', -54], + ['minecraft:element_42', -53], + ['minecraft:element_41', -52], + ['minecraft:element_40', -51], + ['minecraft:element_39', -50], + ['minecraft:element_38', -49], + ['minecraft:element_37', -48], + ['minecraft:element_36', -47], + ['minecraft:element_35', -46], + ['minecraft:element_34', -45], + ['minecraft:element_33', -44], + ['minecraft:element_32', -43], + ['minecraft:element_31', -42], + ['minecraft:element_30', -41], + ['minecraft:element_29', -40], + ['minecraft:element_28', -39], + ['minecraft:element_27', -38], + ['minecraft:element_26', -37], + ['minecraft:element_25', -36], + ['minecraft:element_24', -35], + ['minecraft:element_23', -34], + ['minecraft:element_22', -33], + ['minecraft:element_21', -32], + ['minecraft:element_20', -31], + ['minecraft:element_19', -30], + ['minecraft:element_18', -29], + ['minecraft:element_17', -28], + ['minecraft:element_16', -27], + ['minecraft:element_15', -26], + ['minecraft:element_14', -25], + ['minecraft:element_13', -24], + ['minecraft:element_12', -23], + ['minecraft:element_11', -22], + ['minecraft:element_10', -21], + ['minecraft:element_9', -20], + ['minecraft:element_8', -19], + ['minecraft:element_7', -18], + ['minecraft:element_6', -17], + ['minecraft:element_5', -16], + ['minecraft:element_4', -15], + ['minecraft:element_3', -14], + ['minecraft:element_2', -13], + ['minecraft:element_1', -12], + ['minecraft:blue_ice', -11], + ['minecraft:stripped_oak_log', -10], + ['minecraft:stripped_dark_oak_log', -9], + ['minecraft:stripped_acacia_log', -8], + ['minecraft:stripped_jungle_log', -7], + ['minecraft:stripped_birch_log', -6], + ['minecraft:stripped_spruce_log', -5], + ['minecraft:prismarine_bricks_stairs', -4], + ['minecraft:dark_prismarine_stairs', -3], + ['minecraft:prismarine_stairs', -2], + ['minecraft:air', 0], + ['minecraft:stone', 1], + ['minecraft:grass_block', 2], + ['minecraft:dirt', 3], + ['minecraft:cobblestone', 4], + ['minecraft:oak_planks', 5], + ['minecraft:oak_sapling', 6], + ['minecraft:bedrock', 7], + ['minecraft:flowing_water', 8], + ['minecraft:water', 9], + ['minecraft:flowing_lava', 10], + ['minecraft:lava', 11], + ['minecraft:sand', 12], + ['minecraft:gravel', 13], + ['minecraft:gold_ore', 14], + ['minecraft:iron_ore', 15], + ['minecraft:coal_ore', 16], + ['minecraft:oak_log', 17], + ['minecraft:oak_leaves', 18], + ['minecraft:sponge', 19], + ['minecraft:glass', 20], + ['minecraft:lapis_ore', 21], + ['minecraft:lapis_block', 22], + ['minecraft:dispenser', 23], + ['minecraft:sandstone', 24], + ['minecraft:noteblock', 25], + ['minecraft:golden_rail', 27], + ['minecraft:detector_rail', 28], + ['minecraft:sticky_piston', 29], + ['minecraft:web', 30], + ['minecraft:short_grass', 31], + ['minecraft:deadbush', 32], + ['minecraft:piston', 33], + ['minecraft:piston_arm_collision', 34], + ['minecraft:white_wool', 35], + ['minecraft:element_0', 36], + ['minecraft:dandelion', 37], + ['minecraft:poppy', 38], + ['minecraft:brown_mushroom', 39], + ['minecraft:red_mushroom', 40], + ['minecraft:gold_block', 41], + ['minecraft:iron_block', 42], + ['minecraft:smooth_stone_double_slab', 43], + ['minecraft:smooth_stone_slab', 44], + ['minecraft:brick_block', 45], + ['minecraft:tnt', 46], + ['minecraft:bookshelf', 47], + ['minecraft:mossy_cobblestone', 48], + ['minecraft:obsidian', 49], + ['minecraft:torch', 50], + ['minecraft:fire', 51], + ['minecraft:mob_spawner', 52], + ['minecraft:oak_stairs', 53], + ['minecraft:chest', 54], + ['minecraft:redstone_wire', 55], + ['minecraft:diamond_ore', 56], + ['minecraft:diamond_block', 57], + ['minecraft:crafting_table', 58], + ['minecraft:wheat_plant', 59], + ['minecraft:farmland', 60], + ['minecraft:furnace', 61], + ['minecraft:lit_furnace', 62], + ['minecraft:standing_sign', 63], + ['minecraft:ladder', 65], + ['minecraft:rail', 66], + ['minecraft:stone_stairs', 67], + ['minecraft:wall_sign', 68], + ['minecraft:lever', 69], + ['minecraft:stone_pressure_plate', 70], + ['minecraft:wooden_pressure_plate', 72], + ['minecraft:redstone_ore', 73], + ['minecraft:lit_redstone_ore', 74], + ['minecraft:unlit_redstone_torch', 75], + ['minecraft:redstone_torch', 76], + ['minecraft:stone_button', 77], + ['minecraft:snow_layer', 78], + ['minecraft:ice', 79], + ['minecraft:snow', 80], + ['minecraft:cactus', 81], + ['minecraft:clay', 82], + ['minecraft:reeds', 83], + ['minecraft:jukebox', 84], + ['minecraft:oak_fence', 85], + ['minecraft:pumpkin', 86], + ['minecraft:netherrack', 87], + ['minecraft:soul_sand', 88], + ['minecraft:glowstone', 89], + ['minecraft:portal', 90], + ['minecraft:lit_pumpkin', 91], + ['minecraft:cake_block', 92], + ['minecraft:unpowered_repeater', 93], + ['minecraft:powered_repeater', 94], + ['minecraft:invisible_bedrock', 95], + ['minecraft:trapdoor', 96], + ['minecraft:infested_stone', 97], + ['minecraft:stone_bricks', 98], + ['minecraft:brown_mushroom_block', 99], + ['minecraft:red_mushroom_block', 100], + ['minecraft:iron_bars', 101], + ['minecraft:glass_pane', 102], + ['minecraft:melon_block', 103], + ['minecraft:pumpkin_stem', 104], + ['minecraft:melon_stem', 105], + ['minecraft:vine', 106], + ['minecraft:fence_gate', 107], + ['minecraft:brick_stairs', 108], + ['minecraft:stone_brick_stairs', 109], + ['minecraft:mycelium', 110], + ['minecraft:waterlily', 111], + ['minecraft:nether_brick', 112], + ['minecraft:nether_brick_fence', 113], + ['minecraft:nether_brick_stairs', 114], + ['minecraft:nether_wart_plant', 115], + ['minecraft:enchanting_table', 116], + ['minecraft:end_portal', 119], + ['minecraft:end_portal_frame', 120], + ['minecraft:end_stone', 121], + ['minecraft:dragon_egg', 122], + ['minecraft:redstone_lamp', 123], + ['minecraft:lit_redstone_lamp', 124], + ['minecraft:dropper', 125], + ['minecraft:activator_rail', 126], + ['minecraft:cocoa', 127], + ['minecraft:sandstone_stairs', 128], + ['minecraft:emerald_ore', 129], + ['minecraft:ender_chest', 130], + ['minecraft:tripwire_hook', 131], + ['minecraft:tripwire', 132], + ['minecraft:emerald_block', 133], + ['minecraft:spruce_stairs', 134], + ['minecraft:birch_stairs', 135], + ['minecraft:jungle_stairs', 136], + ['minecraft:command_block', 137], + ['minecraft:beacon', 138], + ['minecraft:cobblestone_wall', 139], + ['minecraft:carrots', 141], + ['minecraft:potatoes', 142], + ['minecraft:wooden_button', 143], + ['minecraft:skeleton_skull', 144], + ['minecraft:anvil', 145], + ['minecraft:trapped_chest', 146], + ['minecraft:light_weighted_pressure_plate', 147], + ['minecraft:heavy_weighted_pressure_plate', 148], + ['minecraft:unpowered_comparator', 149], + ['minecraft:powered_comparator', 150], + ['minecraft:daylight_detector', 151], + ['minecraft:redstone_block', 152], + ['minecraft:quartz_ore', 153], + ['minecraft:quartz_block', 155], + ['minecraft:quartz_stairs', 156], + ['minecraft:double_oak_slab', 157], + ['minecraft:oak_slab', 158], + ['minecraft:stained_hardened_clay', 159], + ['minecraft:stained_glass_pane', 160], + ['minecraft:acacia_leaves', 161], + ['minecraft:acacia_log', 162], + ['minecraft:acacia_stairs', 163], + ['minecraft:dark_oak_stairs', 164], + ['minecraft:slime', 165], + ['minecraft:iron_trapdoor', 167], + ['minecraft:prismarine', 168], + ['minecraft:sea_lantern', 169], + ['minecraft:hay_block', 170], + ['minecraft:white_carpet', 171], + ['minecraft:hardened_clay', 172], + ['minecraft:coal_block', 173], + ['minecraft:packed_ice', 174], + ['minecraft:sunflower', 175], + ['minecraft:standing_banner', 176], + ['minecraft:wall_banner', 177], + ['minecraft:daylight_detector_inverted', 178], + ['minecraft:red_sandstone', 179], + ['minecraft:red_sandstone_stairs', 180], + ['minecraft:red_sandstone_double_slab', 181], + ['minecraft:red_sandstone_slab', 182], + ['minecraft:spruce_fence_gate', 183], + ['minecraft:birch_fence_gate', 184], + ['minecraft:jungle_fence_gate', 185], + ['minecraft:dark_oak_fence_gate', 186], + ['minecraft:acacia_fence_gate', 187], + ['minecraft:repeating_command_block', 188], + ['minecraft:chain_command_block', 189], + ['minecraft:hard_glass_pane', 190], + ['minecraft:hard_white_stained_glass_pane', 191], + ['minecraft:chemical_heat', 192], + ['minecraft:spruce_door', 193], + ['minecraft:birch_door', 194], + ['minecraft:jungle_door', 195], + ['minecraft:acacia_door', 196], + ['minecraft:dark_oak_door', 197], + ['minecraft:grass_path', 198], + ['minecraft:frame_block', 199], + ['minecraft:chorus_flower', 200], + ['minecraft:purpur_block', 201], + ['minecraft:colored_torch_red', 202], + ['minecraft:purpur_stairs', 203], + ['minecraft:colored_torch_blue', 204], + ['minecraft:undyed_shulker_box', 205], + ['minecraft:end_bricks', 206], + ['minecraft:frosted_ice', 207], + ['minecraft:end_rod', 208], + ['minecraft:end_gateway', 209], + ['minecraft:allow', 210], + ['minecraft:deny', 211], + ['minecraft:border_block', 212], + ['minecraft:magma', 213], + ['minecraft:nether_wart_block', 214], + ['minecraft:red_nether_brick', 215], + ['minecraft:bone_block', 216], + ['minecraft:structure_void', 217], + ['minecraft:white_shulker_box', 218], + ['minecraft:purple_glazed_terracotta', 219], + ['minecraft:white_glazed_terracotta', 220], + ['minecraft:orange_glazed_terracotta', 221], + ['minecraft:magenta_glazed_terracotta', 222], + ['minecraft:light_blue_glazed_terracotta', 223], + ['minecraft:yellow_glazed_terracotta', 224], + ['minecraft:lime_glazed_terracotta', 225], + ['minecraft:pink_glazed_terracotta', 226], + ['minecraft:gray_glazed_terracotta', 227], + ['minecraft:silver_glazed_terracotta', 228], + ['minecraft:cyan_glazed_terracotta', 229], + ['minecraft:blue_glazed_terracotta', 231], + ['minecraft:brown_glazed_terracotta', 232], + ['minecraft:green_glazed_terracotta', 233], + ['minecraft:red_glazed_terracotta', 234], + ['minecraft:black_glazed_terracotta', 235], + ['minecraft:white_concrete', 236], + ['minecraft:white_concrete_powder', 237], + ['minecraft:compound_creator', 238], + ['minecraft:underwater_torch', 239], + ['minecraft:chorus_plant', 240], + ['minecraft:white_stained_glass', 241], + ['minecraft:camera', 242], + ['minecraft:podzol', 243], + ['minecraft:beetroots', 244], + ['minecraft:stonecutter', 245], + ['minecraft:glowingobsidian', 246], + ['minecraft:netherreactor', 247], + ['minecraft:info_update', 248], + ['minecraft:info_update2', 249], + ['minecraft:moving_block', 250], + ['minecraft:observer', 251], + ['minecraft:structure_block', 252], + ['minecraft:hard_glass', 253], + ['minecraft:hard_white_stained_glass', 254], + ['minecraft:reserved6', 255], + ['minecraft:black_bundle', 257], + ['minecraft:blue_bundle', 258], + ['minecraft:brown_bundle', 259], + ['minecraft:bundle', 260], + ['minecraft:cyan_bundle', 261], + ['minecraft:gray_bundle', 262], + ['minecraft:green_bundle', 263], + ['minecraft:light_blue_bundle', 264], + ['minecraft:light_gray_bundle', 265], + ['minecraft:lime_bundle', 266], + ['minecraft:magenta_bundle', 267], + ['minecraft:orange_bundle', 268], + ['minecraft:pink_bundle', 269], + ['minecraft:purple_bundle', 270], + ['minecraft:red_bundle', 271], + ['minecraft:white_bundle', 272], + ['minecraft:yellow_bundle', 273], + ['minecraft:breeze_rod', 274], + ['minecraft:ominous_trial_key', 275], + ['minecraft:trial_key', 276], + ['minecraft:wind_charge', 277], + ['minecraft:apple', 278], + ['minecraft:golden_apple', 280], + ['minecraft:enchanted_golden_apple', 281], + ['minecraft:mushroom_stew', 282], + ['minecraft:bread', 283], + ['minecraft:porkchop', 284], + ['minecraft:cooked_porkchop', 285], + ['minecraft:cod', 286], + ['minecraft:salmon', 287], + ['minecraft:tropical_fish', 288], + ['minecraft:pufferfish', 289], + ['minecraft:cooked_cod', 290], + ['minecraft:cooked_salmon', 291], + ['minecraft:dried_kelp', 292], + ['minecraft:cookie', 293], + ['minecraft:melon_slice', 294], + ['minecraft:beef', 295], + ['minecraft:cooked_beef', 296], + ['minecraft:chicken', 297], + ['minecraft:cooked_chicken', 298], + ['minecraft:rotten_flesh', 299], + ['minecraft:spider_eye', 300], + ['minecraft:carrot', 301], + ['minecraft:potato', 302], + ['minecraft:baked_potato', 303], + ['minecraft:poisonous_potato', 304], + ['minecraft:golden_carrot', 305], + ['minecraft:pumpkin_pie', 306], + ['minecraft:beetroot', 307], + ['minecraft:beetroot_soup', 308], + ['minecraft:sweet_berries', 309], + ['minecraft:rabbit', 310], + ['minecraft:cooked_rabbit', 311], + ['minecraft:rabbit_stew', 312], + ['minecraft:wheat_seeds', 313], + ['minecraft:pumpkin_seeds', 314], + ['minecraft:melon_seeds', 315], + ['minecraft:nether_wart', 316], + ['minecraft:beetroot_seeds', 317], + ['minecraft:torchflower_seeds', 318], + ['minecraft:pitcher_pod', 319], + ['minecraft:iron_shovel', 320], + ['minecraft:iron_pickaxe', 321], + ['minecraft:iron_axe', 322], + ['minecraft:flint_and_steel', 323], + ['minecraft:bow', 324], + ['minecraft:arrow', 325], + ['minecraft:coal', 326], + ['minecraft:charcoal', 327], + ['minecraft:diamond', 328], + ['minecraft:iron_ingot', 329], + ['minecraft:gold_ingot', 330], + ['minecraft:iron_sword', 331], + ['minecraft:wooden_sword', 332], + ['minecraft:wooden_shovel', 333], + ['minecraft:wooden_pickaxe', 334], + ['minecraft:wooden_axe', 335], + ['minecraft:stone_sword', 336], + ['minecraft:stone_shovel', 337], + ['minecraft:stone_pickaxe', 338], + ['minecraft:stone_axe', 339], + ['minecraft:diamond_sword', 340], + ['minecraft:diamond_shovel', 341], + ['minecraft:diamond_pickaxe', 342], + ['minecraft:diamond_axe', 343], + ['minecraft:mace', 344], + ['minecraft:stick', 345], + ['minecraft:bowl', 346], + ['minecraft:golden_sword', 347], + ['minecraft:golden_shovel', 348], + ['minecraft:golden_pickaxe', 349], + ['minecraft:golden_axe', 350], + ['minecraft:string', 351], + ['minecraft:feather', 352], + ['minecraft:gunpowder', 353], + ['minecraft:wooden_hoe', 354], + ['minecraft:stone_hoe', 355], + ['minecraft:iron_hoe', 356], + ['minecraft:diamond_hoe', 357], + ['minecraft:golden_hoe', 358], + ['minecraft:wheat', 359], + ['minecraft:leather_helmet', 360], + ['minecraft:leather_chestplate', 361], + ['minecraft:leather_leggings', 362], + ['minecraft:leather_boots', 363], + ['minecraft:chainmail_helmet', 364], + ['minecraft:chainmail_chestplate', 365], + ['minecraft:chainmail_leggings', 366], + ['minecraft:chainmail_boots', 367], + ['minecraft:iron_helmet', 368], + ['minecraft:iron_chestplate', 369], + ['minecraft:iron_leggings', 370], + ['minecraft:iron_boots', 371], + ['minecraft:diamond_helmet', 372], + ['minecraft:diamond_chestplate', 373], + ['minecraft:diamond_leggings', 374], + ['minecraft:diamond_boots', 375], + ['minecraft:golden_helmet', 376], + ['minecraft:golden_chestplate', 377], + ['minecraft:golden_leggings', 378], + ['minecraft:golden_boots', 379], + ['minecraft:shield', 380], + ['minecraft:flint', 381], + ['minecraft:painting', 382], + ['minecraft:oak_sign', 383], + ['minecraft:wooden_door', 384], + ['minecraft:bucket', 385], + ['minecraft:milk_bucket', 386], + ['minecraft:water_bucket', 387], + ['minecraft:lava_bucket', 388], + ['minecraft:cod_bucket', 389], + ['minecraft:salmon_bucket', 390], + ['minecraft:tropical_fish_bucket', 391], + ['minecraft:pufferfish_bucket', 392], + ['minecraft:powder_snow_bucket', 393], + ['minecraft:axolotl_bucket', 394], + ['minecraft:minecart', 395], + ['minecraft:saddle', 396], + ['minecraft:iron_door', 397], + ['minecraft:redstone', 398], + ['minecraft:snowball', 399], + ['minecraft:oak_boat', 400], + ['minecraft:birch_boat', 401], + ['minecraft:jungle_boat', 402], + ['minecraft:spruce_boat', 403], + ['minecraft:acacia_boat', 404], + ['minecraft:dark_oak_boat', 405], + ['minecraft:leather', 406], + ['minecraft:kelp', 407], + ['minecraft:brick', 408], + ['minecraft:clay_ball', 409], + ['minecraft:sugar_cane', 410], + ['minecraft:paper', 411], + ['minecraft:book', 412], + ['minecraft:slime_ball', 413], + ['minecraft:chest_minecart', 414], + ['minecraft:egg', 415], + ['minecraft:compass', 416], + ['minecraft:fishing_rod', 417], + ['minecraft:clock', 418], + ['minecraft:glowstone_dust', 419], + ['minecraft:black_dye', 420], + ['minecraft:red_dye', 421], + ['minecraft:green_dye', 422], + ['minecraft:brown_dye', 423], + ['minecraft:blue_dye', 424], + ['minecraft:purple_dye', 425], + ['minecraft:cyan_dye', 426], + ['minecraft:light_gray_dye', 427], + ['minecraft:gray_dye', 428], + ['minecraft:pink_dye', 429], + ['minecraft:lime_dye', 430], + ['minecraft:yellow_dye', 431], + ['minecraft:light_blue_dye', 432], + ['minecraft:magenta_dye', 433], + ['minecraft:orange_dye', 434], + ['minecraft:white_dye', 435], + ['minecraft:bone_meal', 436], + ['minecraft:cocoa_beans', 437], + ['minecraft:ink_sac', 438], + ['minecraft:lapis_lazuli', 439], + ['minecraft:bone', 440], + ['minecraft:sugar', 441], + ['minecraft:cake', 442], + ['minecraft:bed', 443], + ['minecraft:repeater', 444], + ['minecraft:filled_map', 445], + ['minecraft:shears', 446], + ['minecraft:ender_pearl', 447], + ['minecraft:blaze_rod', 448], + ['minecraft:ghast_tear', 450], + ['minecraft:gold_nugget', 451], + ['minecraft:potion', 452], + ['minecraft:glass_bottle', 453], + ['minecraft:fermented_spider_eye', 454], + ['minecraft:blaze_powder', 455], + ['minecraft:magma_cream', 456], + ['minecraft:brewing_stand', 457], + ['minecraft:cauldron', 458], + ['minecraft:ender_eye', 459], + ['minecraft:glistering_melon_slice', 460], + ['minecraft:chicken_spawn_egg', 461], + ['minecraft:cow_spawn_egg', 462], + ['minecraft:pig_spawn_egg', 463], + ['minecraft:sheep_spawn_egg', 464], + ['minecraft:wolf_spawn_egg', 465], + ['minecraft:mooshroom_spawn_egg', 466], + ['minecraft:creeper_spawn_egg', 467], + ['minecraft:enderman_spawn_egg', 468], + ['minecraft:silverfish_spawn_egg', 469], + ['minecraft:skeleton_spawn_egg', 470], + ['minecraft:slime_spawn_egg', 471], + ['minecraft:spider_spawn_egg', 472], + ['minecraft:zombie_spawn_egg', 473], + ['minecraft:zombie_pigman_spawn_egg', 474], + ['minecraft:villager_spawn_egg', 475], + ['minecraft:squid_spawn_egg', 476], + ['minecraft:ocelot_spawn_egg', 477], + ['minecraft:witch_spawn_egg', 478], + ['minecraft:bat_spawn_egg', 479], + ['minecraft:ghast_spawn_egg', 480], + ['minecraft:magma_cube_spawn_egg', 481], + ['minecraft:blaze_spawn_egg', 482], + ['minecraft:cave_spider_spawn_egg', 483], + ['minecraft:horse_spawn_egg', 484], + ['minecraft:rabbit_spawn_egg', 485], + ['minecraft:endermite_spawn_egg', 486], + ['minecraft:guardian_spawn_egg', 487], + ['minecraft:stray_spawn_egg', 488], + ['minecraft:bogged_spawn_egg', 489], + ['minecraft:husk_spawn_egg', 490], + ['minecraft:wither_skeleton_spawn_egg', 491], + ['minecraft:donkey_spawn_egg', 492], + ['minecraft:mule_spawn_egg', 493], + ['minecraft:skeleton_horse_spawn_egg', 494], + ['minecraft:zombie_horse_spawn_egg', 495], + ['minecraft:shulker_spawn_egg', 496], + ['minecraft:npc_spawn_egg', 497], + ['minecraft:elder_guardian_spawn_egg', 498], + ['minecraft:polar_bear_spawn_egg', 499], + ['minecraft:llama_spawn_egg', 500], + ['minecraft:vindicator_spawn_egg', 501], + ['minecraft:evoker_spawn_egg', 502], + ['minecraft:vex_spawn_egg', 503], + ['minecraft:zombie_villager_spawn_egg', 504], + ['minecraft:parrot_spawn_egg', 505], + ['minecraft:tropical_fish_spawn_egg', 506], + ['minecraft:cod_spawn_egg', 507], + ['minecraft:pufferfish_spawn_egg', 508], + ['minecraft:salmon_spawn_egg', 509], + ['minecraft:drowned_spawn_egg', 510], + ['minecraft:dolphin_spawn_egg', 511], + ['minecraft:turtle_spawn_egg', 512], + ['minecraft:phantom_spawn_egg', 513], + ['minecraft:agent_spawn_egg', 514], + ['minecraft:cat_spawn_egg', 515], + ['minecraft:panda_spawn_egg', 516], + ['minecraft:fox_spawn_egg', 517], + ['minecraft:pillager_spawn_egg', 518], + ['minecraft:wandering_trader_spawn_egg', 519], + ['minecraft:ravager_spawn_egg', 520], + ['minecraft:bee_spawn_egg', 521], + ['minecraft:strider_spawn_egg', 522], + ['minecraft:hoglin_spawn_egg', 523], + ['minecraft:piglin_spawn_egg', 524], + ['minecraft:zoglin_spawn_egg', 525], + ['minecraft:piglin_brute_spawn_egg', 526], + ['minecraft:sniffer_spawn_egg', 527], + ['minecraft:breeze_spawn_egg', 528], + ['minecraft:axolotl_spawn_egg', 529], + ['minecraft:goat_spawn_egg', 530], + ['minecraft:glow_squid_spawn_egg', 531], + ['minecraft:iron_golem_spawn_egg', 532], + ['minecraft:snow_golem_spawn_egg', 533], + ['minecraft:ender_dragon_spawn_egg', 534], + ['minecraft:wither_spawn_egg', 535], + ['minecraft:glow_ink_sac', 536], + ['minecraft:copper_ingot', 537], + ['minecraft:raw_iron', 538], + ['minecraft:raw_gold', 539], + ['minecraft:raw_copper', 540], + ['minecraft:experience_bottle', 541], + ['minecraft:fire_charge', 542], + ['minecraft:writable_book', 543], + ['minecraft:written_book', 544], + ['minecraft:emerald', 545], + ['minecraft:frame', 546], + ['minecraft:flower_pot', 547], + ['minecraft:empty_map', 548], + ['minecraft:carrot_on_a_stick', 549], + ['minecraft:nether_star', 550], + ['minecraft:firework_rocket', 551], + ['minecraft:firework_star', 552], + ['minecraft:enchanted_book', 553], + ['minecraft:comparator', 554], + ['minecraft:netherbrick', 555], + ['minecraft:quartz', 556], + ['minecraft:tnt_minecart', 557], + ['minecraft:hopper_minecart', 558], + ['minecraft:hopper', 559], + ['minecraft:rabbit_foot', 560], + ['minecraft:rabbit_hide', 561], + ['minecraft:leather_horse_armor', 562], + ['minecraft:iron_horse_armor', 563], + ['minecraft:golden_horse_armor', 564], + ['minecraft:diamond_horse_armor', 565], + ['minecraft:music_disc_13', 566], + ['minecraft:music_disc_cat', 567], + ['minecraft:music_disc_blocks', 568], + ['minecraft:music_disc_chirp', 569], + ['minecraft:music_disc_far', 570], + ['minecraft:music_disc_mall', 571], + ['minecraft:music_disc_mellohi', 572], + ['minecraft:music_disc_stal', 573], + ['minecraft:music_disc_strad', 574], + ['minecraft:music_disc_ward', 575], + ['minecraft:music_disc_11', 576], + ['minecraft:music_disc_wait', 577], + ['minecraft:trident', 578], + ['minecraft:lead', 579], + ['minecraft:name_tag', 580], + ['minecraft:prismarine_crystals', 581], + ['minecraft:mutton', 582], + ['minecraft:cooked_mutton', 583], + ['minecraft:armor_stand', 584], + ['minecraft:spruce_door', 585], + ['minecraft:birch_door', 586], + ['minecraft:jungle_door', 587], + ['minecraft:acacia_door', 588], + ['minecraft:dark_oak_door', 589], + ['minecraft:chorus_fruit', 590], + ['minecraft:popped_chorus_fruit', 591], + ['minecraft:dragon_breath', 592], + ['minecraft:splash_potion', 593], + ['minecraft:lingering_potion', 594], + ['minecraft:command_block_minecart', 595], + ['minecraft:elytra', 596], + ['minecraft:prismarine_shard', 597], + ['minecraft:shulker_shell', 598], + ['minecraft:banner', 599], + ['minecraft:totem_of_undying', 600], + ['minecraft:iron_nugget', 601], + ['minecraft:nautilus_shell', 602], + ['minecraft:heart_of_the_sea', 603], + ['minecraft:turtle_scute', 604], + ['minecraft:turtle_helmet', 605], + ['minecraft:phantom_membrane', 606], + ['minecraft:crossbow', 607], + ['minecraft:spruce_sign', 608], + ['minecraft:birch_sign', 609], + ['minecraft:jungle_sign', 610], + ['minecraft:acacia_sign', 611], + ['minecraft:dark_oak_sign', 612], + ['minecraft:flower_banner_pattern', 613], + ['minecraft:creeper_banner_pattern', 614], + ['minecraft:skull_banner_pattern', 615], + ['minecraft:mojang_banner_pattern', 616], + ['minecraft:field_masoned_banner_pattern', 617], + ['minecraft:bordure_indented_banner_pattern', 618], + ['minecraft:piglin_banner_pattern', 619], + ['minecraft:globe_banner_pattern', 620], + ['minecraft:flow_banner_pattern', 621], + ['minecraft:guster_banner_pattern', 622], + ['minecraft:campfire', 623], + ['minecraft:suspicious_stew', 624], + ['minecraft:honeycomb', 625], + ['minecraft:honey_bottle', 626], + ['minecraft:ominous_bottle', 627], + ['minecraft:chalkboard', 628], + ['minecraft:camera_block', 629], + ['minecraft:compound', 630], + ['minecraft:ice_bomb', 631], + ['minecraft:bleach', 632], + ['minecraft:rapid_fertilizer', 633], + ['minecraft:balloon', 634], + ['minecraft:medicine', 635], + ['minecraft:sparkler', 636], + ['minecraft:glow_stick', 637], + ['minecraft:lodestone_compass', 638], + ['minecraft:netherite_sword', 639], + ['minecraft:netherite_shovel', 640], + ['minecraft:netherite_pickaxe', 641], + ['minecraft:netherite_axe', 642], + ['minecraft:netherite_hoe', 643], + ['minecraft:netherite_ingot', 644], + ['minecraft:netherite_helmet', 645], + ['minecraft:netherite_chestplate', 646], + ['minecraft:netherite_leggings', 647], + ['minecraft:netherite_boots', 648], + ['minecraft:netherite_scrap', 649], + ['minecraft:crimson_sign', 650], + ['minecraft:warped_sign', 651], + ['minecraft:crimson_door', 652], + ['minecraft:warped_door', 653], + ['minecraft:warped_fungus_on_a_stick', 654], + ['minecraft:chain', 655], + ['minecraft:music_disc_pigstep', 656], + ['minecraft:nether_sprouts', 657], + ['minecraft:soul_campfire', 658], + ['minecraft:glow_frame', 659], + ['minecraft:amethyst_shard', 660], + ['minecraft:spyglass', 661], + ['minecraft:music_disc_otherside', 662], + ['minecraft:goat_horn', 663], + ['minecraft:frog_spawn_egg', 664], + ['minecraft:tadpole_spawn_egg', 665], + ['minecraft:tadpole_bucket', 666], + ['minecraft:allay_spawn_egg', 667], + ['minecraft:warden_spawn_egg', 668], + ['minecraft:mangrove_door', 669], + ['minecraft:mangrove_sign', 670], + ['minecraft:mangrove_boat', 671], + ['minecraft:music_disc_5', 672], + ['minecraft:disc_fragment_5', 673], + ['minecraft:oak_chest_boat', 674], + ['minecraft:birch_chest_boat', 675], + ['minecraft:jungle_chest_boat', 676], + ['minecraft:spruce_chest_boat', 677], + ['minecraft:acacia_chest_boat', 678], + ['minecraft:dark_oak_chest_boat', 679], + ['minecraft:mangrove_chest_boat', 680], + ['minecraft:recovery_compass', 682], + ['minecraft:echo_shard', 683], + ['minecraft:trader_llama_spawn_egg', 684], + ['minecraft:cherry_boat', 685], + ['minecraft:cherry_chest_boat', 686], + ['minecraft:cherry_sign', 687], + ['minecraft:bamboo_sign', 688], + ['minecraft:bamboo_raft', 689], + ['minecraft:bamboo_chest_raft', 690], + ['minecraft:camel_spawn_egg', 691], + ['minecraft:angler_pottery_sherd', 692], + ['minecraft:archer_pottery_sherd', 693], + ['minecraft:arms_up_pottery_sherd', 694], + ['minecraft:blade_pottery_sherd', 695], + ['minecraft:brewer_pottery_sherd', 696], + ['minecraft:burn_pottery_sherd', 697], + ['minecraft:danger_pottery_sherd', 698], + ['minecraft:explorer_pottery_sherd', 699], + ['minecraft:flow_pottery_sherd', 700], + ['minecraft:friend_pottery_sherd', 701], + ['minecraft:guster_pottery_sherd', 702], + ['minecraft:heart_pottery_sherd', 703], + ['minecraft:heartbreak_pottery_sherd', 704], + ['minecraft:howl_pottery_sherd', 705], + ['minecraft:miner_pottery_sherd', 706], + ['minecraft:mourner_pottery_sherd', 707], + ['minecraft:plenty_pottery_sherd', 708], + ['minecraft:prize_pottery_sherd', 709], + ['minecraft:scrape_pottery_sherd', 710], + ['minecraft:sheaf_pottery_sherd', 711], + ['minecraft:shelter_pottery_sherd', 712], + ['minecraft:skull_pottery_sherd', 713], + ['minecraft:snort_pottery_sherd', 714], + ['minecraft:brush', 715], + ['minecraft:netherite_upgrade_smithing_template', 716], + ['minecraft:sentry_armor_trim_smithing_template', 717], + ['minecraft:dune_armor_trim_smithing_template', 718], + ['minecraft:coast_armor_trim_smithing_template', 719], + ['minecraft:wild_armor_trim_smithing_template', 720], + ['minecraft:ward_armor_trim_smithing_template', 721], + ['minecraft:eye_armor_trim_smithing_template', 722], + ['minecraft:vex_armor_trim_smithing_template', 723], + ['minecraft:tide_armor_trim_smithing_template', 724], + ['minecraft:snout_armor_trim_smithing_template', 725], + ['minecraft:rib_armor_trim_smithing_template', 726], + ['minecraft:spire_armor_trim_smithing_template', 727], + ['minecraft:silence_armor_trim_smithing_template', 728], + ['minecraft:wayfinder_armor_trim_smithing_template', 729], + ['minecraft:raiser_armor_trim_smithing_template', 730], + ['minecraft:shaper_armor_trim_smithing_template', 731], + ['minecraft:host_armor_trim_smithing_template', 732], + ['minecraft:flow_armor_trim_smithing_template', 733], + ['minecraft:bolt_armor_trim_smithing_template', 734], + ['minecraft:music_disc_relic', 735], + ['minecraft:skull', 736], + ['minecraft:white_terracotta', 737], + ['minecraft:armadillo_spawn_egg', 738], + ['minecraft:armadillo_scute', 739], + ['minecraft:wolf_armor', 740], + ['minecraft:pale_oak_boat', 743], + ['minecraft:pale_oak_chest_boat', 744], + ['minecraft:pale_oak_sign', 745], + ['minecraft:creaking_spawn_egg', 746], + ['minecraft:resin_brick', 747], + ['minecraft:blue_egg', 748], + ['minecraft:brown_egg', 749], + ['minecraft:happy_ghast_spawn_egg', 750], + ['minecraft:black_harness', 751], + ['minecraft:blue_harness', 752], + ['minecraft:brown_harness', 753], + ['minecraft:cyan_harness', 754], + ['minecraft:gray_harness', 755], + ['minecraft:green_harness', 756], + ['minecraft:light_blue_harness', 757], + ['minecraft:light_gray_harness', 758], + ['minecraft:lime_harness', 759], + ['minecraft:magenta_harness', 760], + ['minecraft:orange_harness', 761], + ['minecraft:pink_harness', 762], + ['minecraft:purple_harness', 763], + ['minecraft:red_harness', 764], + ['minecraft:white_harness', 765], + ['minecraft:yellow_harness', 766], + ['minecraft:copper_golem_spawn_egg', 767], + ['minecraft:copper_sword', 768], + ['minecraft:copper_shovel', 769], + ['minecraft:copper_pickaxe', 770], + ['minecraft:copper_axe', 771], + ['minecraft:copper_hoe', 772], + ['minecraft:copper_helmet', 773], + ['minecraft:copper_chestplate', 774], + ['minecraft:copper_leggings', 775], + ['minecraft:copper_boots', 776], + ['minecraft:copper_nugget', 777], + ['minecraft:wool', 778], + ['minecraft:carpet', 779], + ['minecraft:log', 780], + ['minecraft:fence', 781], + ['minecraft:stonebrick', 782], + ['minecraft:coral_block', 783], + ['minecraft:stone_block_slab', 784], + ['minecraft:stone_block_slab2', 785], + ['minecraft:stone_block_slab3', 786], + ['minecraft:stone_block_slab4', 787], + ['minecraft:double_stone_block_slab', 788], + ['minecraft:double_stone_block_slab2', 789], + ['minecraft:double_stone_block_slab3', 790], + ['minecraft:double_stone_block_slab4', 791], + ['minecraft:coral_fan', 792], + ['minecraft:coral_fan_dead', 793], + ['minecraft:sapling', 794], + ['minecraft:leaves', 795], + ['minecraft:leaves2', 796], + ['minecraft:wooden_slab', 797], + ['minecraft:red_flower', 798], + ['minecraft:double_plant', 799], + ['minecraft:double_wooden_slab', 800], + ['minecraft:coral', 801], + ['minecraft:tallgrass', 802], + ['minecraft:log2', 803], + ['minecraft:monster_egg', 804], + ['minecraft:concrete', 805], + ['minecraft:concrete_powder', 806], + ['minecraft:stained_glass', 807], + ['minecraft:stained_glass_pane', 808], + ['minecraft:shulker_box', 809], + ['minecraft:wood', 810], + ['minecraft:music_disc_creator', 811], + ['minecraft:music_disc_creator_music_box', 812], + ['minecraft:music_disc_precipice', 813], + ['minecraft:music_disc_tears', 814], + ['minecraft:music_disc_lava_chicken', 815], + ['minecraft:chemistry_table', 816], + ['minecraft:hard_stained_glass', 817], + ['minecraft:hard_stained_glass_pane', 818], + ['minecraft:colored_torch_rg', 819], + ['minecraft:colored_torch_bp', 820], + ['minecraft:light_block', 821], + ['minecraft:boat', 822], + ['minecraft:dye', 823], + ['minecraft:banner_pattern', 824], + ['minecraft:spawn_egg', 825], + ['minecraft:end_crystal', 826], + ['minecraft:glow_berries', 827] +]); export const typeIdToDataId = new Map([ - ['minecraft:respawn_anchor_charge_0', -272], - ['minecraft:respawn_anchor_charge_1', -272 + 1 / 65536], - ['minecraft:respawn_anchor_charge_2', -272 + 2 / 65536], - ['minecraft:respawn_anchor_charge_3', -272 + 3 / 65536], - ['minecraft:respawn_anchor_charge_4', -272 + 4 / 65536], + ['minecraft:respawn_anchor_charge_0', -272], + ['minecraft:respawn_anchor_charge_1', -272 + (1 / 65536)], + ['minecraft:respawn_anchor_charge_2', -272 + (2 / 65536)], + ['minecraft:respawn_anchor_charge_3', -272 + (3 / 65536)], + ['minecraft:respawn_anchor_charge_4', -272 + (4 / 65536)], - ['minecraft:barrel_closed', -203], - ['minecraft:barrel_open', -203 + 1 / 65536], + ['minecraft:barrel_closed', -203], + ['minecraft:barrel_open', -203 + (1 / 65536)], - ['minecraft:redstone_wire_power_0', 55], - ['minecraft:redstone_wire_power_1', 55 + 1 / 65536], - ['minecraft:redstone_wire_power_2', 55 + 2 / 65536], - ['minecraft:redstone_wire_power_3', 55 + 3 / 65536], - ['minecraft:redstone_wire_power_4', 55 + 4 / 65536], - ['minecraft:redstone_wire_power_5', 55 + 5 / 65536], - ['minecraft:redstone_wire_power_6', 55 + 6 / 65536], - ['minecraft:redstone_wire_power_7', 55 + 7 / 65536], - ['minecraft:redstone_wire_power_8', 55 + 8 / 65536], - ['minecraft:redstone_wire_power_9', 55 + 9 / 65536], - ['minecraft:redstone_wire_power_10', 55 + 10 / 65536], - ['minecraft:redstone_wire_power_11', 55 + 11 / 65536], - ['minecraft:redstone_wire_power_12', 55 + 12 / 65536], - ['minecraft:redstone_wire_power_13', 55 + 13 / 65536], - ['minecraft:redstone_wire_power_14', 55 + 14 / 65536], - ['minecraft:redstone_wire_power_15', 55 + 15 / 65536], + ['minecraft:redstone_wire_power_0', 55], + ['minecraft:redstone_wire_power_1', 55 + (1 / 65536)], + ['minecraft:redstone_wire_power_2', 55 + (2 / 65536)], + ['minecraft:redstone_wire_power_3', 55 + (3 / 65536)], + ['minecraft:redstone_wire_power_4', 55 + (4 / 65536)], + ['minecraft:redstone_wire_power_5', 55 + (5 / 65536)], + ['minecraft:redstone_wire_power_6', 55 + (6 / 65536)], + ['minecraft:redstone_wire_power_7', 55 + (7 / 65536)], + ['minecraft:redstone_wire_power_8', 55 + (8 / 65536)], + ['minecraft:redstone_wire_power_9', 55 + (9 / 65536)], + ['minecraft:redstone_wire_power_10', 55 + (10 / 65536)], + ['minecraft:redstone_wire_power_11', 55 + (11 / 65536)], + ['minecraft:redstone_wire_power_12', 55 + (12 / 65536)], + ['minecraft:redstone_wire_power_13', 55 + (13 / 65536)], + ['minecraft:redstone_wire_power_14', 55 + (14 / 65536)], + ['minecraft:redstone_wire_power_15', 55 + (15 / 65536)], - ['minecraft:wheat_plant_stage_0', 59], - ['minecraft:wheat_plant_stage_1', 59 + 1 / 65536], - ['minecraft:wheat_plant_stage_2', 59 + 2 / 65536], - ['minecraft:wheat_plant_stage_3', 59 + 3 / 65536], - ['minecraft:wheat_plant_stage_4', 59 + 4 / 65536], - ['minecraft:wheat_plant_stage_5', 59 + 5 / 65536], - ['minecraft:wheat_plant_stage_6', 59 + 6 / 65536], - ['minecraft:wheat_plant_stage_7', 59 + 7 / 65536], + ['minecraft:wheat_plant_stage_0', 59], + ['minecraft:wheat_plant_stage_1', 59 + (1 / 65536)], + ['minecraft:wheat_plant_stage_2', 59 + (2 / 65536)], + ['minecraft:wheat_plant_stage_3', 59 + (3 / 65536)], + ['minecraft:wheat_plant_stage_4', 59 + (4 / 65536)], + ['minecraft:wheat_plant_stage_5', 59 + (5 / 65536)], + ['minecraft:wheat_plant_stage_6', 59 + (6 / 65536)], + ['minecraft:wheat_plant_stage_7', 59 + (7 / 65536)], - ['minecraft:wet_farmland', 60 + 1 / 65536], + ['minecraft:wet_farmland', 60 + (1 / 65536)], - ['minecraft:snow_layer_1', 78], - ['minecraft:snow_layer_2', 78 + 1 / 65536], - ['minecraft:snow_layer_3', 78 + 2 / 65536], - ['minecraft:snow_layer_4', 78 + 3 / 65536], - ['minecraft:snow_layer_5', 78 + 4 / 65536], - ['minecraft:snow_layer_6', 78 + 5 / 65536], - ['minecraft:snow_layer_7', 78 + 6 / 65536], - ['minecraft:snow_layer_8', 78 + 7 / 65536], + ['minecraft:snow_layer_1', 78], + ['minecraft:snow_layer_2', 78 + (1 / 65536)], + ['minecraft:snow_layer_3', 78 + (2 / 65536)], + ['minecraft:snow_layer_4', 78 + (3 / 65536)], + ['minecraft:snow_layer_5', 78 + (4 / 65536)], + ['minecraft:snow_layer_6', 78 + (5 / 65536)], + ['minecraft:snow_layer_7', 78 + (6 / 65536)], + ['minecraft:snow_layer_8', 78 + (7 / 65536)], - ['minecraft:cake_block_slice_0', 92], - ['minecraft:cake_block_slice_1', 92 + 1 / 65536], - ['minecraft:cake_block_slice_2', 92 + 2 / 65536], - ['minecraft:cake_block_slice_3', 92 + 3 / 65536], - ['minecraft:cake_block_slice_4', 92 + 4 / 65536], - ['minecraft:cake_block_slice_5', 92 + 5 / 65536], - ['minecraft:cake_block_slice_6', 92 + 6 / 65536], + ['minecraft:cake_block_slice_0', 92], + ['minecraft:cake_block_slice_1', 92 + (1 / 65536)], + ['minecraft:cake_block_slice_2', 92 + (2 / 65536)], + ['minecraft:cake_block_slice_3', 92 + (3 / 65536)], + ['minecraft:cake_block_slice_4', 92 + (4 / 65536)], + ['minecraft:cake_block_slice_5', 92 + (5 / 65536)], + ['minecraft:cake_block_slice_6', 92 + (6 / 65536)], - ['minecraft:brown_mushroom_block_bit_0', 99], - ['minecraft:brown_mushroom_block_bit_1', 99 + 1 / 65536], - ['minecraft:brown_mushroom_block_bit_2', 99 + 2 / 65536], - ['minecraft:brown_mushroom_block_bit_3', 99 + 3 / 65536], - ['minecraft:brown_mushroom_block_bit_4', 99 + 4 / 65536], - ['minecraft:brown_mushroom_block_bit_5', 99 + 5 / 65536], - ['minecraft:brown_mushroom_block_bit_6', 99 + 6 / 65536], - ['minecraft:brown_mushroom_block_bit_7', 99 + 7 / 65536], - ['minecraft:brown_mushroom_block_bit_8', 99 + 8 / 65536], - ['minecraft:brown_mushroom_block_bit_9', 99 + 9 / 65536], - ['minecraft:brown_mushroom_block_bit_10', 99 + 10 / 65536], - ['minecraft:brown_mushroom_block_bit_11', 99 + 11 / 65536], - ['minecraft:brown_mushroom_block_bit_12', 99 + 12 / 65536], - ['minecraft:brown_mushroom_block_bit_13', 99 + 13 / 65536], - ['minecraft:brown_mushroom_block_bit_14', 99 + 14 / 65536], - ['minecraft:brown_mushroom_block_bit_15', 99 + 15 / 65536], + ['minecraft:brown_mushroom_block_bit_0', 99], + ['minecraft:brown_mushroom_block_bit_1', 99 + (1 / 65536)], + ['minecraft:brown_mushroom_block_bit_2', 99 + (2 / 65536)], + ['minecraft:brown_mushroom_block_bit_3', 99 + (3 / 65536)], + ['minecraft:brown_mushroom_block_bit_4', 99 + (4 / 65536)], + ['minecraft:brown_mushroom_block_bit_5', 99 + (5 / 65536)], + ['minecraft:brown_mushroom_block_bit_6', 99 + (6 / 65536)], + ['minecraft:brown_mushroom_block_bit_7', 99 + (7 / 65536)], + ['minecraft:brown_mushroom_block_bit_8', 99 + (8 / 65536)], + ['minecraft:brown_mushroom_block_bit_9', 99 + (9 / 65536)], + ['minecraft:brown_mushroom_block_bit_10', 99 + (10 / 65536)], + ['minecraft:brown_mushroom_block_bit_11', 99 + (11 / 65536)], + ['minecraft:brown_mushroom_block_bit_12', 99 + (12 / 65536)], + ['minecraft:brown_mushroom_block_bit_13', 99 + (13 / 65536)], + ['minecraft:brown_mushroom_block_bit_14', 99 + (14 / 65536)], + ['minecraft:brown_mushroom_block_bit_15', 99 + (15 / 65536)], - ['minecraft:red_mushroom_block_bit_0', 100], - ['minecraft:red_mushroom_block_bit_1', 100 + 1 / 65536], - ['minecraft:red_mushroom_block_bit_2', 100 + 2 / 65536], - ['minecraft:red_mushroom_block_bit_3', 100 + 3 / 65536], - ['minecraft:red_mushroom_block_bit_4', 100 + 4 / 65536], - ['minecraft:red_mushroom_block_bit_5', 100 + 5 / 65536], - ['minecraft:red_mushroom_block_bit_6', 100 + 6 / 65536], - ['minecraft:red_mushroom_block_bit_7', 100 + 7 / 65536], - ['minecraft:red_mushroom_block_bit_8', 100 + 8 / 65536], - ['minecraft:red_mushroom_block_bit_9', 100 + 9 / 65536], - ['minecraft:red_mushroom_block_bit_10', 100 + 10 / 65536], - ['minecraft:red_mushroom_block_bit_11', 100 + 11 / 65536], - ['minecraft:red_mushroom_block_bit_12', 100 + 12 / 65536], - ['minecraft:red_mushroom_block_bit_13', 100 + 13 / 65536], - ['minecraft:red_mushroom_block_bit_14', 100 + 14 / 65536], - ['minecraft:red_mushroom_block_bit_15', 100 + 15 / 65536], + ['minecraft:red_mushroom_block_bit_0', 100], + ['minecraft:red_mushroom_block_bit_1', 100 + (1 / 65536)], + ['minecraft:red_mushroom_block_bit_2', 100 + (2 / 65536)], + ['minecraft:red_mushroom_block_bit_3', 100 + (3 / 65536)], + ['minecraft:red_mushroom_block_bit_4', 100 + (4 / 65536)], + ['minecraft:red_mushroom_block_bit_5', 100 + (5 / 65536)], + ['minecraft:red_mushroom_block_bit_6', 100 + (6 / 65536)], + ['minecraft:red_mushroom_block_bit_7', 100 + (7 / 65536)], + ['minecraft:red_mushroom_block_bit_8', 100 + (8 / 65536)], + ['minecraft:red_mushroom_block_bit_9', 100 + (9 / 65536)], + ['minecraft:red_mushroom_block_bit_10', 100 + (10 / 65536)], + ['minecraft:red_mushroom_block_bit_11', 100 + (11 / 65536)], + ['minecraft:red_mushroom_block_bit_12', 100 + (12 / 65536)], + ['minecraft:red_mushroom_block_bit_13', 100 + (13 / 65536)], + ['minecraft:red_mushroom_block_bit_14', 100 + (14 / 65536)], + ['minecraft:red_mushroom_block_bit_15', 100 + (15 / 65536)], - ['minecraft:attached_pumpkin_stem', 104 + 1 / 65536], - ['minecraft:attached_melon_stem', 105 + 1 / 65536], + ['minecraft:attached_pumpkin_stem', 104 + (1 / 65536)], + ['minecraft:attached_melon_stem', 105 + (1 / 65536)], - ['minecraft:nether_wart_plant_stage_0', 115], - ['minecraft:nether_wart_plant_stage_1', 115 + 1 / 65536], - ['minecraft:nether_wart_plant_stage_2', 115 + 2 / 65536], - ['minecraft:nether_wart_plant_stage_3', 115 + 3 / 65536], + ['minecraft:nether_wart_plant_stage_0', 115], + ['minecraft:nether_wart_plant_stage_1', 115 + (1 / 65536)], + ['minecraft:nether_wart_plant_stage_2', 115 + (2 / 65536)], + ['minecraft:nether_wart_plant_stage_3', 115 + (3 / 65536)], - ['minecraft:filled_end_portal_frame', 120 + 4 / 65536], + ['minecraft:filled_end_portal_frame', 120 + (4 / 65536)], - ['minecraft:cocoa_stage_0', 127], - ['minecraft:cocoa_stage_1', 127 + 1 / 65536], - ['minecraft:cocoa_stage_2', 127 + 2 / 65536], - ['minecraft:cocoa_stage_3', 127 + 3 / 65536], + ['minecraft:cocoa_stage_0', 127], + ['minecraft:cocoa_stage_1', 127 + (1 / 65536)], + ['minecraft:cocoa_stage_2', 127 + (2 / 65536)], + ['minecraft:cocoa_stage_3', 127 + (3 / 65536)], - ['minecraft:conditional_command_block', 137 + 8 / 65536], + ['minecraft:conditional_command_block', 137 + (8 / 65536)], - ['minecraft:carrots_stage_0', 141], - ['minecraft:carrots_stage_1', 141 + 1 / 65536], - ['minecraft:carrots_stage_2', 141 + 2 / 65536], - ['minecraft:carrots_stage_3', 141 + 3 / 65536], - ['minecraft:carrots_stage_4', 141 + 4 / 65536], - ['minecraft:carrots_stage_5', 141 + 5 / 65536], - ['minecraft:carrots_stage_6', 141 + 6 / 65536], - ['minecraft:carrots_stage_7', 141 + 7 / 65536], + ['minecraft:carrots_stage_0', 141], + ['minecraft:carrots_stage_1', 141 + (1 / 65536)], + ['minecraft:carrots_stage_2', 141 + (2 / 65536)], + ['minecraft:carrots_stage_3', 141 + (3 / 65536)], + ['minecraft:carrots_stage_4', 141 + (4 / 65536)], + ['minecraft:carrots_stage_5', 141 + (5 / 65536)], + ['minecraft:carrots_stage_6', 141 + (6 / 65536)], + ['minecraft:carrots_stage_7', 141 + (7 / 65536)], - ['minecraft:potatoes_stage_0', 142], - ['minecraft:potatoes_stage_1', 142 + 1 / 65536], - ['minecraft:potatoes_stage_2', 142 + 2 / 65536], - ['minecraft:potatoes_stage_3', 142 + 3 / 65536], - ['minecraft:potatoes_stage_4', 142 + 4 / 65536], - ['minecraft:potatoes_stage_5', 142 + 5 / 65536], - ['minecraft:potatoes_stage_6', 142 + 6 / 65536], - ['minecraft:potatoes_stage_7', 142 + 7 / 65536], + ['minecraft:potatoes_stage_0', 142], + ['minecraft:potatoes_stage_1', 142 + (1 / 65536)], + ['minecraft:potatoes_stage_2', 142 + (2 / 65536)], + ['minecraft:potatoes_stage_3', 142 + (3 / 65536)], + ['minecraft:potatoes_stage_4', 142 + (4 / 65536)], + ['minecraft:potatoes_stage_5', 142 + (5 / 65536)], + ['minecraft:potatoes_stage_6', 142 + (6 / 65536)], + ['minecraft:potatoes_stage_7', 142 + (7 / 65536)], - ['minecraft:black_standing_banner', 176], - ['minecraft:red_standing_banner', 176 + 1 / 65536], - ['minecraft:green_standing_banner', 176 + 2 / 65536], - ['minecraft:brown_standing_banner', 176 + 3 / 65536], - ['minecraft:blue_standing_banner', 176 + 4 / 65536], - ['minecraft:purple_standing_banner', 176 + 5 / 65536], - ['minecraft:cyan_standing_banner', 176 + 6 / 65536], - ['minecraft:light_gray_standing_banner', 176 + 7 / 65536], - ['minecraft:gray_standing_banner', 176 + 8 / 65536], - ['minecraft:pink_standing_banner', 176 + 9 / 65536], - ['minecraft:lime_standing_banner', 176 + 10 / 65536], - ['minecraft:yellow_standing_banner', 176 + 11 / 65536], - ['minecraft:light_blue_standing_banner', 176 + 12 / 65536], - ['minecraft:magenta_standing_banner', 176 + 13 / 65536], - ['minecraft:orange_standing_banner', 176 + 14 / 65536], - ['minecraft:white_standing_banner', 176 + 15 / 65536], + ['minecraft:black_standing_banner', 176], + ['minecraft:red_standing_banner', 176 + (1 / 65536)], + ['minecraft:green_standing_banner', 176 + (2 / 65536)], + ['minecraft:brown_standing_banner', 176 + (3 / 65536)], + ['minecraft:blue_standing_banner', 176 + (4 / 65536)], + ['minecraft:purple_standing_banner', 176 + (5 / 65536)], + ['minecraft:cyan_standing_banner', 176 + (6 / 65536)], + ['minecraft:light_gray_standing_banner', 176 + (7 / 65536)], + ['minecraft:gray_standing_banner', 176 + (8 / 65536)], + ['minecraft:pink_standing_banner', 176 + (9 / 65536)], + ['minecraft:lime_standing_banner', 176 + (10 / 65536)], + ['minecraft:yellow_standing_banner', 176 + (11 / 65536)], + ['minecraft:light_blue_standing_banner', 176 + (12 / 65536)], + ['minecraft:magenta_standing_banner', 176 + (13 / 65536)], + ['minecraft:orange_standing_banner', 176 + (14 / 65536)], + ['minecraft:white_standing_banner', 176 + (15 / 65536)], - ['minecraft:black_wall_banner', 177], - ['minecraft:red_wall_banner', 177 + 1 / 65536], - ['minecraft:green_wall_banner', 177 + 2 / 65536], - ['minecraft:brown_wall_banner', 177 + 3 / 65536], - ['minecraft:blue_wall_banner', 177 + 4 / 65536], - ['minecraft:purple_wall_banner', 177 + 5 / 65536], - ['minecraft:cyan_wall_banner', 177 + 6 / 65536], - ['minecraft:light_gray_wall_banner', 177 + 7 / 65536], - ['minecraft:gray_wall_banner', 177 + 8 / 65536], - ['minecraft:pink_wall_banner', 177 + 9 / 65536], - ['minecraft:lime_wall_banner', 177 + 10 / 65536], - ['minecraft:yellow_wall_banner', 177 + 11 / 65536], - ['minecraft:light_blue_wall_banner', 177 + 12 / 65536], - ['minecraft:magenta_wall_banner', 177 + 13 / 65536], - ['minecraft:orange_wall_banner', 177 + 14 / 65536], - ['minecraft:white_wall_banner', 177 + 15 / 65536], + ['minecraft:black_wall_banner', 177], + ['minecraft:red_wall_banner', 177 + (1 / 65536)], + ['minecraft:green_wall_banner', 177 + (2 / 65536)], + ['minecraft:brown_wall_banner', 177 + (3 / 65536)], + ['minecraft:blue_wall_banner', 177 + (4 / 65536)], + ['minecraft:purple_wall_banner', 177 + (5 / 65536)], + ['minecraft:cyan_wall_banner', 177 + (6 / 65536)], + ['minecraft:light_gray_wall_banner', 177 + (7 / 65536)], + ['minecraft:gray_wall_banner', 177 + (8 / 65536)], + ['minecraft:pink_wall_banner', 177 + (9 / 65536)], + ['minecraft:lime_wall_banner', 177 + (10 / 65536)], + ['minecraft:yellow_wall_banner', 177 + (11 / 65536)], + ['minecraft:light_blue_wall_banner', 177 + (12 / 65536)], + ['minecraft:magenta_wall_banner', 177 + (13 / 65536)], + ['minecraft:orange_wall_banner', 177 + (14 / 65536)], + ['minecraft:white_wall_banner', 177 + (15 / 65536)], - ['minecraft:conditional_repeating_command_block', 188 + 8 / 65536], - ['minecraft:conditional_chain_command_block', 189 + 8 / 65536], + ['minecraft:conditional_repeating_command_block', 188 + (8 / 65536)], + ['minecraft:conditional_chain_command_block', 189 + (8 / 65536)], - ['minecraft:beetroots_stage_0', 244], - ['minecraft:beetroots_stage_1', 244 + 1 / 65536], - ['minecraft:beetroots_stage_2', 244 + 2 / 65536], - ['minecraft:beetroots_stage_3', 244 + 3 / 65536], - ['minecraft:beetroots_stage_4', 244 + 4 / 65536], - ['minecraft:beetroots_stage_5', 244 + 5 / 65536], - ['minecraft:beetroots_stage_6', 244 + 6 / 65536], - ['minecraft:beetroots_stage_7', 244 + 7 / 65536], + ['minecraft:beetroots_stage_0', 244], + ['minecraft:beetroots_stage_1', 244 + (1 / 65536)], + ['minecraft:beetroots_stage_2', 244 + (2 / 65536)], + ['minecraft:beetroots_stage_3', 244 + (3 / 65536)], + ['minecraft:beetroots_stage_4', 244 + (4 / 65536)], + ['minecraft:beetroots_stage_5', 244 + (5 / 65536)], + ['minecraft:beetroots_stage_6', 244 + (6 / 65536)], + ['minecraft:beetroots_stage_7', 244 + (7 / 65536)], - ['minecraft:structure_block_data', 252], - ['minecraft:structure_block_save', 252 + 1 / 65536], - ['minecraft:structure_block_load', 252 + 2 / 65536], - ['minecraft:structure_block_corner', 252 + 3 / 65536], - ['minecraft:structure_block_invalid', 252 + 4 / 65536], - ['minecraft:structure_block_export', 252 + 5 / 65536], + ['minecraft:structure_block_data', 252], + ['minecraft:structure_block_save', 252 + (1 / 65536)], + ['minecraft:structure_block_load', 252 + (2 / 65536)], + ['minecraft:structure_block_corner', 252 + (3 / 65536)], + ['minecraft:structure_block_invalid', 252 + (4 / 65536)], + ['minecraft:structure_block_export', 252 + (5 / 65536)], - ['minecraft:splash_arrow', 325 + 1 / 65536], - ['minecraft:mundane_arrow', 325 + 2 / 65536], - ['minecraft:thick_arrow', 325 + 4 / 65536], - ['minecraft:awkward_arrow', 325 + 5 / 65536], - ['minecraft:night_vision_arrow', 325 + 6 / 65536], - ['minecraft:leaping_arrow', 325 + 9 / 65536], - ['minecraft:fire_resistance_arrow', 325 + 13 / 65536], - ['minecraft:swiftness_arrow', 325 + 15 / 65536], - ['minecraft:slowness_arrow', 325 + 18 / 65536], - ['minecraft:water_breathing_arrow', 325 + 20 / 65536], - ['minecraft:healing_arrow', 325 + 22 / 65536], - ['minecraft:harming_arrow', 325 + 24 / 65536], - ['minecraft:poison_arrow', 325 + 26 / 65536], - ['minecraft:regeneration_arrow', 325 + 29 / 65536], - ['minecraft:strength_arrow', 325 + 32 / 65536], - ['minecraft:weakness_arrow', 325 + 35 / 65536], - ['minecraft:decay_arrow', 325 + 37 / 65536], - ['minecraft:turtle_master_arrow', 325 + 38 / 65536], - ['minecraft:slow_falling_arrow', 325 + 41 / 65536], + ['minecraft:splash_arrow', 325 + (1 / 65536)], + ['minecraft:mundane_arrow', 325 + (2 / 65536)], + ['minecraft:thick_arrow', 325 + (4 / 65536)], + ['minecraft:awkward_arrow', 325 + (5 / 65536)], + ['minecraft:night_vision_arrow', 325 + (6 / 65536)], + ['minecraft:leaping_arrow', 325 + (9 / 65536)], + ['minecraft:fire_resistance_arrow', 325 + (13 / 65536)], + ['minecraft:swiftness_arrow', 325 + (15 / 65536)], + ['minecraft:slowness_arrow', 325 + (18 / 65536)], + ['minecraft:water_breathing_arrow', 325 + (20 / 65536)], + ['minecraft:healing_arrow', 325 + (22 / 65536)], + ['minecraft:harming_arrow', 325 + (24 / 65536)], + ['minecraft:poison_arrow', 325 + (26 / 65536)], + ['minecraft:regeneration_arrow', 325 + (29 / 65536)], + ['minecraft:strength_arrow', 325 + (32 / 65536)], + ['minecraft:weakness_arrow', 325 + (35 / 65536)], + ['minecraft:decay_arrow', 325 + (37 / 65536)], + ['minecraft:turtle_master_arrow', 325 + (38 / 65536)], + ['minecraft:slow_falling_arrow', 325 + (41 / 65536)], - ['minecraft:white_bed', 444], - ['minecraft:red_bed', 444 + 1 / 65536], - ['minecraft:green_bed', 444 + 2 / 65536], - ['minecraft:brown_bed', 444 + 3 / 65536], - ['minecraft:blue_bed', 444 + 4 / 65536], - ['minecraft:purple_bed', 444 + 5 / 65536], - ['minecraft:cyan_bed', 444 + 6 / 65536], - ['minecraft:light_gray_bed', 444 + 7 / 65536], - ['minecraft:gray_bed', 444 + 8 / 65536], - ['minecraft:pink_bed', 444 + 9 / 65536], - ['minecraft:lime_bed', 444 + 10 / 65536], - ['minecraft:yellow_bed', 444 + 11 / 65536], - ['minecraft:light_blue_bed', 444 + 12 / 65536], - ['minecraft:magenta_bed', 444 + 13 / 65536], - ['minecraft:orange_bed', 444 + 14 / 65536], - ['minecraft:black_bed', 444 + 15 / 65536], + ['minecraft:white_bed', 443], + ['minecraft:red_bed', 443 + (1 / 65536)], + ['minecraft:green_bed', 443 + (2 / 65536)], + ['minecraft:brown_bed', 443 + (3 / 65536)], + ['minecraft:blue_bed', 443 + (4 / 65536)], + ['minecraft:purple_bed', 443 + (5 / 65536)], + ['minecraft:cyan_bed', 443 + (6 / 65536)], + ['minecraft:light_gray_bed', 443 + (7 / 65536)], + ['minecraft:gray_bed', 443 + (8 / 65536)], + ['minecraft:pink_bed', 443 + (9 / 65536)], + ['minecraft:lime_bed', 443 + (10 / 65536)], + ['minecraft:yellow_bed', 443 + (11 / 65536)], + ['minecraft:light_blue_bed', 443 + (12 / 65536)], + ['minecraft:magenta_bed', 443 + (13 / 65536)], + ['minecraft:orange_bed', 443 + (14 / 65536)], + ['minecraft:black_bed', 443 + (15 / 65536)], - ['minecraft:locator_map', 446 + 2 / 65536], - ['minecraft:ocean_explorer_map', 446 + 3 / 65536], - ['minecraft:woodland_explorer_map', 446 + 4 / 65536], - ['minecraft:treasure_map', 446 + 5 / 65536], - ['minecraft:locked_map', 446 + 6 / 65536], - ['minecraft:snowy_village_map', 446 + 7 / 65536], - ['minecraft:taiga_village_map', 446 + 8 / 65536], - ['minecraft:plains_village_map', 446 + 9 / 65536], - ['minecraft:savanna_village_map', 446 + 10 / 65536], - ['minecraft:desert_village_map', 446 + 11 / 65536], - ['minecraft:jungle_village_map', 446 + 12 / 65536], - ['minecraft:swamp_village_map', 446 + 13 / 65536], + ['minecraft:locator_map', 445 + (2 / 65536)], + ['minecraft:ocean_explorer_map', 445 + (3 / 65536)], + ['minecraft:woodland_explorer_map', 445 + (4 / 65536)], + ['minecraft:treasure_map', 445 + (5 / 65536)], + ['minecraft:locked_map', 445 + (6 / 65536)], + ['minecraft:snowy_village_map', 445 + (7 / 65536)], + ['minecraft:taiga_village_map', 445 + (8 / 65536)], + ['minecraft:plains_village_map', 445 + (9 / 65536)], + ['minecraft:savanna_village_map', 445 + (10 / 65536)], + ['minecraft:desert_village_map', 445 + (11 / 65536)], + ['minecraft:jungle_village_map', 445 + (12 / 65536)], + ['minecraft:swamp_village_map', 445 + (13 / 65536)], - ['minecraft:mundane_potion', 453 + 1 / 65536], - ['minecraft:thick_potion', 453 + 3 / 65536], - ['minecraft:awkward_potion', 453 + 4 / 65536], - ['minecraft:night_vision_potion', 453 + 5 / 65536], - ['minecraft:leaping_potion', 453 + 8 / 65536], - ['minecraft:fire_resistance_potion', 453 + 12 / 65536], - ['minecraft:swiftness_potion', 453 + 14 / 65536], - ['minecraft:slowness_potion', 453 + 17 / 65536], - ['minecraft:water_breathing_potion', 453 + 19 / 65536], - ['minecraft:healing_potion', 453 + 21 / 65536], - ['minecraft:harming_potion', 453 + 23 / 65536], - ['minecraft:poison_potion', 453 + 25 / 65536], - ['minecraft:regeneration_potion', 453 + 28 / 65536], - ['minecraft:strength_potion', 453 + 31 / 65536], - ['minecraft:weakness_potion', 453 + 34 / 65536], - ['minecraft:decay_potion', 453 + 36 / 65536], - ['minecraft:turtle_master_potion', 453 + 37 / 65536], - ['minecraft:slow_falling_potion', 453 + 40 / 65536], + ['minecraft:mundane_potion', 452 + (1 / 65536)], + ['minecraft:thick_potion', 452 + (3 / 65536)], + ['minecraft:awkward_potion', 452 + (4 / 65536)], + ['minecraft:night_vision_potion', 452 + (5 / 65536)], + ['minecraft:leaping_potion', 452 + (8 / 65536)], + ['minecraft:fire_resistance_potion', 452 + (12 / 65536)], + ['minecraft:swiftness_potion', 452 + (14 / 65536)], + ['minecraft:slowness_potion', 452 + (17 / 65536)], + ['minecraft:water_breathing_potion', 452 + (19 / 65536)], + ['minecraft:healing_potion', 452 + (21 / 65536)], + ['minecraft:harming_potion', 452 + (23 / 65536)], + ['minecraft:poison_potion', 452 + (25 / 65536)], + ['minecraft:regeneration_potion', 452 + (28 / 65536)], + ['minecraft:strength_potion', 452 + (31 / 65536)], + ['minecraft:weakness_potion', 452 + (34 / 65536)], + ['minecraft:decay_potion', 452 + (36 / 65536)], + ['minecraft:turtle_master_potion', 452 + (37 / 65536)], + ['minecraft:slow_falling_potion', 452 + (40 / 65536)], + ['minecraft:wind_charged_potion', 452 + (43 / 65536)], + ['minecraft:weaving_potion', 452 + (44 / 65536)], + ['minecraft:oozing_potion', 452 + (45 / 65536)], + ['minecraft:infestation_potion', 452 + (46 / 65536)], - ['minecraft:mundane_splash_potion', 594 + 1 / 65536], - ['minecraft:thick_splash_potion', 594 + 3 / 65536], - ['minecraft:awkward_splash_potion', 594 + 4 / 65536], - ['minecraft:night_vision_splash_potion', 594 + 5 / 65536], - ['minecraft:leaping_splash_potion', 594 + 8 / 65536], - ['minecraft:fire_resistance_splash_potion', 594 + 12 / 65536], - ['minecraft:swiftness_splash_potion', 594 + 14 / 65536], - ['minecraft:slowness_splash_potion', 594 + 17 / 65536], - ['minecraft:water_breathing_splash_potion', 594 + 19 / 65536], - ['minecraft:healing_splash_potion', 594 + 21 / 65536], - ['minecraft:harming_splash_potion', 594 + 23 / 65536], - ['minecraft:poison_splash_potion', 594 + 25 / 65536], - ['minecraft:regeneration_splash_potion', 594 + 28 / 65536], - ['minecraft:strength_splash_potion', 594 + 31 / 65536], - ['minecraft:weakness_splash_potion', 594 + 34 / 65536], - ['minecraft:decay_splash_potion', 594 + 36 / 65536], - ['minecraft:turtle_master_splash_potion', 594 + 37 / 65536], - ['minecraft:slow_falling_splash_potion', 594 + 40 / 65536], + ['minecraft:mundane_splash_potion', 593 + (1 / 65536)], + ['minecraft:thick_splash_potion', 593 + (3 / 65536)], + ['minecraft:awkward_splash_potion', 593 + (4 / 65536)], + ['minecraft:night_vision_splash_potion', 593 + (5 / 65536)], + ['minecraft:leaping_splash_potion', 593 + (8 / 65536)], + ['minecraft:fire_resistance_splash_potion', 593 + (12 / 65536)], + ['minecraft:swiftness_splash_potion', 593 + (14 / 65536)], + ['minecraft:slowness_splash_potion', 593 + (17 / 65536)], + ['minecraft:water_breathing_splash_potion', 593 + (19 / 65536)], + ['minecraft:healing_splash_potion', 593 + (21 / 65536)], + ['minecraft:harming_splash_potion', 593 + (23 / 65536)], + ['minecraft:poison_splash_potion', 593 + (25 / 65536)], + ['minecraft:regeneration_splash_potion', 593 + (28 / 65536)], + ['minecraft:strength_splash_potion', 593 + (31 / 65536)], + ['minecraft:weakness_splash_potion', 593 + (34 / 65536)], + ['minecraft:decay_splash_potion', 593 + (36 / 65536)], + ['minecraft:turtle_master_splash_potion', 593 + (37 / 65536)], + ['minecraft:slow_falling_splash_potion', 593 + (40 / 65536)], + ['minecraft:wind_charged_splash_potion', 452 + (43 / 65536)], + ['minecraft:weaving_splash_potion', 452 + (44 / 65536)], + ['minecraft:oozing_splash_potion', 452 + (45 / 65536)], + ['minecraft:infestation_splash_potion', 452 + (46 / 65536)], - ['minecraft:mundane_lingering_potion', 595 + 1 / 65536], - ['minecraft:thick_lingering_potion', 595 + 3 / 65536], - ['minecraft:awkward_lingering_potion', 595 + 4 / 65536], - ['minecraft:night_vision_lingering_potion', 595 + 5 / 65536], - ['minecraft:leaping_lingering_potion', 595 + 8 / 65536], - ['minecraft:fire_resistance_lingering_potion', 595 + 12 / 65536], - ['minecraft:swiftness_lingering_potion', 595 + 14 / 65536], - ['minecraft:slowness_lingering_potion', 595 + 17 / 65536], - ['minecraft:water_breathing_lingering_potion', 595 + 19 / 65536], - ['minecraft:healing_lingering_potion', 595 + 21 / 65536], - ['minecraft:harming_lingering_potion', 595 + 23 / 65536], - ['minecraft:poison_lingering_potion', 595 + 25 / 65536], - ['minecraft:regeneration_lingering_potion', 595 + 28 / 65536], - ['minecraft:strength_lingering_potion', 595 + 31 / 65536], - ['minecraft:weakness_lingering_potion', 595 + 34 / 65536], - ['minecraft:decay_lingering_potion', 595 + 36 / 65536], - ['minecraft:turtle_master_lingering_potion', 595 + 37 / 65536], - ['minecraft:slow_falling_lingering_potion', 595 + 40 / 65536], + ['minecraft:mundane_lingering_potion', 594 + (1 / 65536)], + ['minecraft:thick_lingering_potion', 594 + (3 / 65536)], + ['minecraft:awkward_lingering_potion', 594 + (4 / 65536)], + ['minecraft:night_vision_lingering_potion', 594 + (5 / 65536)], + ['minecraft:leaping_lingering_potion', 594 + (8 / 65536)], + ['minecraft:fire_resistance_lingering_potion', 594 + (12 / 65536)], + ['minecraft:swiftness_lingering_potion', 594 + (14 / 65536)], + ['minecraft:slowness_lingering_potion', 594 + (17 / 65536)], + ['minecraft:water_breathing_lingering_potion', 594 + (19 / 65536)], + ['minecraft:healing_lingering_potion', 594 + (21 / 65536)], + ['minecraft:harming_lingering_potion', 594 + (23 / 65536)], + ['minecraft:poison_lingering_potion', 594 + (25 / 65536)], + ['minecraft:regeneration_lingering_potion', 594 + (28 / 65536)], + ['minecraft:strength_lingering_potion', 594 + (31 / 65536)], + ['minecraft:weakness_lingering_potion', 594 + (34 / 65536)], + ['minecraft:decay_lingering_potion', 594 + (36 / 65536)], + ['minecraft:turtle_master_lingering_potion', 594 + (37 / 65536)], + ['minecraft:slow_falling_lingering_potion', 594 + (40 / 65536)], + ['minecraft:wind_charged_lingering_potion', 452 + (43 / 65536)], + ['minecraft:weaving_lingering_potion', 452 + (44 / 65536)], + ['minecraft:oozing_lingering_potion', 452 + (45 / 65536)], + ['minecraft:infestation_lingering_potion', 452 + (46 / 65536)], - ['minecraft:black_banner', 600], - ['minecraft:red_banner', 600 + 1 / 65536], - ['minecraft:green_banner', 600 + 2 / 65536], - ['minecraft:brown_banner', 600 + 3 / 65536], - ['minecraft:blue_banner', 600 + 4 / 65536], - ['minecraft:purple_banner', 600 + 5 / 65536], - ['minecraft:cyan_banner', 600 + 6 / 65536], - ['minecraft:light_gray_banner', 600 + 7 / 65536], - ['minecraft:gray_banner', 600 + 8 / 65536], - ['minecraft:pink_banner', 600 + 9 / 65536], - ['minecraft:lime_banner', 600 + 10 / 65536], - ['minecraft:yellow_banner', 600 + 11 / 65536], - ['minecraft:light_blue_banner', 600 + 12 / 65536], - ['minecraft:magenta_banner', 600 + 13 / 65536], - ['minecraft:orange_banner', 600 + 14 / 65536], - ['minecraft:white_banner', 600 + 15 / 65536], + ['minecraft:black_banner', 599], + ['minecraft:red_banner', 599 + (1 / 65536)], + ['minecraft:green_banner', 599 + (2 / 65536)], + ['minecraft:brown_banner', 599 + (3 / 65536)], + ['minecraft:blue_banner', 599 + (4 / 65536)], + ['minecraft:purple_banner', 599 + (5 / 65536)], + ['minecraft:cyan_banner', 599 + (6 / 65536)], + ['minecraft:light_gray_banner', 599 + (7 / 65536)], + ['minecraft:gray_banner', 599 + (8 / 65536)], + ['minecraft:pink_banner', 599 + (9 / 65536)], + ['minecraft:lime_banner', 599 + (10 / 65536)], + ['minecraft:yellow_banner', 599 + (11 / 65536)], + ['minecraft:light_blue_banner', 599 + (12 / 65536)], + ['minecraft:magenta_banner', 599 + (13 / 65536)], + ['minecraft:orange_banner', 599 + (14 / 65536)], + ['minecraft:white_banner', 599 + (15 / 65536)], - ['minecraft:compound_salt', 630], - ['minecraft:compound_sodium_oxide', 630 + 1 / 65536], - ['minecraft:compound_sodium_hydroxide', 630 + 2 / 65536], - ['minecraft:compound_magnesium_nitrate', 630 + 3 / 65536], - ['minecraft:compound_iron_sulfide', 630 + 4 / 65536], - ['minecraft:compound_lithium_hydride', 630 + 5 / 65536], - ['minecraft:compound_sodium_hydride', 630 + 6 / 65536], - ['minecraft:compound_calcium_bromide', 630 + 7 / 65536], - ['minecraft:compound_magnesium_oxide', 630 + 8 / 65536], - ['minecraft:compound_sodium_acetate', 630 + 9 / 65536], - ['minecraft:compound_luminol', 630 + 10 / 65536], - ['minecraft:compound_charcoal', 630 + 11 / 65536], - ['minecraft:compound_sugar', 630 + 12 / 65536], - ['minecraft:compound_aluminum_oxide', 630 + 13 / 65536], - ['minecraft:compound_boron_trioxide', 630 + 14 / 65536], - ['minecraft:compound_soap', 630 + 15 / 65536], - ['minecraft:compound_polyethylene', 630 + 16 / 65536], - ['minecraft:compound_garbage', 630 + 17 / 65536], - ['minecraft:compound_blue_jar', 630 + 24 / 65536], - ['minecraft:compound_blue_beaker', 630 + 26 / 65536], - ['minecraft:compound_glue', 630 + 27 / 65536], - ['minecraft:compound_white_beaker', 630 + 28 / 65536], - ['minecraft:compound_black_beaker', 630 + 29 / 65536], - ['minecraft:compound_yellow_beaker', 630 + 31 / 65536], - ['minecraft:compound_clear_beaker', 630 + 35 / 65536], - ['minecraft:compound_blue_bottle', 630 + 38 / 65536], + ['minecraft:compound_salt', 630], + ['minecraft:compound_sodium_oxide', 630 + (1 / 65536)], + ['minecraft:compound_sodium_hydroxide', 630 + (2 / 65536)], + ['minecraft:compound_magnesium_nitrate', 630 + (3 / 65536)], + ['minecraft:compound_iron_sulfide', 630 + (4 / 65536)], + ['minecraft:compound_lithium_hydride', 630 + (5 / 65536)], + ['minecraft:compound_sodium_hydride', 630 + (6 / 65536)], + ['minecraft:compound_calcium_bromide', 630 + (7 / 65536)], + ['minecraft:compound_magnesium_oxide', 630 + (8 / 65536)], + ['minecraft:compound_sodium_acetate', 630 + (9 / 65536)], + ['minecraft:compound_luminol', 630 + (10 / 65536)], + ['minecraft:compound_charcoal', 630 + (11 / 65536)], + ['minecraft:compound_sugar', 630 + (12 / 65536)], + ['minecraft:compound_aluminum_oxide', 630 + (13 / 65536)], + ['minecraft:compound_boron_trioxide', 630 + (14 / 65536)], + ['minecraft:compound_soap', 630 + (15 / 65536)], + ['minecraft:compound_polyethylene', 630 + (16 / 65536)], + ['minecraft:compound_garbage', 630 + (17 / 65536)], + ['minecraft:compound_blue_jar', 630 + (24 / 65536)], + ['minecraft:compound_blue_beaker', 630 + (26 / 65536)], + ['minecraft:compound_glue', 630 + (27 / 65536)], + ['minecraft:compound_white_beaker', 630 + (28 / 65536)], + ['minecraft:compound_black_beaker', 630 + (29 / 65536)], + ['minecraft:compound_yellow_beaker', 630 + (31 / 65536)], + ['minecraft:compound_clear_beaker', 630 + (35 / 65536)], + ['minecraft:compound_blue_bottle', 630 + (38 / 65536)], - ['minecraft:white_balloon', 634], - ['minecraft:red_balloon', 634 + 1 / 65536], - ['minecraft:green_balloon', 634 + 2 / 65536], - ['minecraft:brown_balloon', 634 + 3 / 65536], - ['minecraft:blue_balloon', 634 + 4 / 65536], - ['minecraft:purple_balloon', 634 + 5 / 65536], - ['minecraft:cyan_balloon', 634 + 6 / 65536], - ['minecraft:light_gray_balloon', 634 + 7 / 65536], - ['minecraft:gray_balloon', 634 + 8 / 65536], - ['minecraft:pink_balloon', 634 + 9 / 65536], - ['minecraft:lime_balloon', 634 + 10 / 65536], - ['minecraft:yellow_balloon', 634 + 11 / 65536], - ['minecraft:light_blue_balloon', 634 + 12 / 65536], - ['minecraft:magenta_balloon', 634 + 13 / 65536], - ['minecraft:orange_balloon', 634 + 14 / 65536], - ['minecraft:black_balloon', 634 + 15 / 65536], + ['minecraft:white_balloon', 634], + ['minecraft:red_balloon', 634 + (1 / 65536)], + ['minecraft:green_balloon', 634 + (2 / 65536)], + ['minecraft:brown_balloon', 634 + (3 / 65536)], + ['minecraft:blue_balloon', 634 + (4 / 65536)], + ['minecraft:purple_balloon', 634 + (5 / 65536)], + ['minecraft:cyan_balloon', 634 + (6 / 65536)], + ['minecraft:light_gray_balloon', 634 + (7 / 65536)], + ['minecraft:gray_balloon', 634 + (8 / 65536)], + ['minecraft:pink_balloon', 634 + (9 / 65536)], + ['minecraft:lime_balloon', 634 + (10 / 65536)], + ['minecraft:yellow_balloon', 634 + (11 / 65536)], + ['minecraft:light_blue_balloon', 634 + (12 / 65536)], + ['minecraft:magenta_balloon', 634 + (13 / 65536)], + ['minecraft:orange_balloon', 634 + (14 / 65536)], + ['minecraft:black_balloon', 634 + (15 / 65536)], - ['minecraft:eye_drops', 635], - ['minecraft:tonic', 635 + 1 / 65536], - ['minecraft:antidote', 635 + 2 / 65536], - ['minecraft:elixir', 635 + 3 / 65536], + ['minecraft:eye_drops', 635], + ['minecraft:tonic', 635 + (1 / 65536)], + ['minecraft:antidote', 635 + (2 / 65536)], + ['minecraft:elixir', 635 + (3 / 65536)], - ['minecraft:blue_sparkler', 636], - ['minecraft:red_sparkler', 636 + 1 / 65536], - ['minecraft:green_sparkler', 636 + 2 / 65536], - ['minecraft:pink_sparker', 636 + 5 / 65536], - ['minecraft:orange_sparkler', 636 + 14 / 65536], - ['minecraft:lit_blue_sparkler', 636 + 32 / 65536], - ['minecraft:lit_red_sparkler', 636 + 33 / 65536], - ['minecraft:lit_green_sparkler', 636 + 34 / 65536], - ['minecraft:lit_pink_sparker', 636 + 37 / 65536], - ['minecraft:lit_orange_sparkler', 636 + 46 / 65536], + ['minecraft:blue_sparkler', 636], + ['minecraft:red_sparkler', 636 + (1 / 65536)], + ['minecraft:green_sparkler', 636 + (2 / 65536)], + ['minecraft:pink_sparker', 636 + (5 / 65536)], + ['minecraft:orange_sparkler', 636 + (14 / 65536)], + ['minecraft:lit_blue_sparkler', 636 + (32 / 65536)], + ['minecraft:lit_red_sparkler', 636 + (33 / 65536)], + ['minecraft:lit_green_sparkler', 636 + (34 / 65536)], + ['minecraft:lit_pink_sparker', 636 + (37 / 65536)], + ['minecraft:lit_orange_sparkler', 636 + (46 / 65536)], - ['minecraft:red_glowstick', 637 + 1 / 65536], - ['minecraft:green_glowstick', 637 + 2 / 65536], - ['minecraft:brown_glowstick', 637 + 3 / 65536], - ['minecraft:blue_glowstick', 637 + 4 / 65536], - ['minecraft:purple_glowstick', 637 + 5 / 65536], - ['minecraft:cyan_glowstick', 637 + 6 / 65536], - ['minecraft:red_glowstick', 637 + 7 / 65536], - ['minecraft:gray_glowstick', 637 + 8 / 65536], - ['minecraft:pink_glowstick', 637 + 9 / 65536], - ['minecraft:lime_glowstick', 637 + 10 / 65536], - ['minecraft:yellow_glowstick', 637 + 11 / 65536], - ['minecraft:light_blue_glowstick', 637 + 12 / 65536], - ['minecraft:magenta_glowstick', 637 + 13 / 65536], - ['minecraft:orange_glowstick', 637 + 14 / 65536], - ['minecraft:white_glowstick', 637 + 15 / 65536], - ['minecraft:lit_red_glowstick', 637 + 33 / 65536], - ['minecraft:lit_green_glowstick', 637 + 34 / 65536], - ['minecraft:lit_brown_glowstick', 637 + 35 / 65536], - ['minecraft:lit_blue_glowstick', 637 + 36 / 65536], - ['minecraft:lit_purple_glowstick', 637 + 37 / 65536], - ['minecraft:lit_cyan_glowstick', 637 + 38 / 65536], - ['minecraft:lit_red_glowstick', 637 + 39 / 65536], - ['minecraft:lit_gray_glowstick', 637 + 40 / 65536], - ['minecraft:lit_pink_glowstick', 637 + 41 / 65536], - ['minecraft:lit_lime_glowstick', 637 + 42 / 65536], - ['minecraft:lit_yellow_glowstick', 637 + 43 / 65536], - ['minecraft:lit_light_blue_glowstick', 637 + 44 / 65536], - ['minecraft:lit_magenta_glowstick', 637 + 45 / 65536], - ['minecraft:lit_orange_glowstick', 637 + 46 / 65536], - ['minecraft:lit_white_glowstick', 637 + 47 / 65536], -]) + ['minecraft:red_glowstick', 637 + (1 / 65536)], + ['minecraft:green_glowstick', 637 + (2 / 65536)], + ['minecraft:brown_glowstick', 637 + (3 / 65536)], + ['minecraft:blue_glowstick', 637 + (4 / 65536)], + ['minecraft:purple_glowstick', 637 + (5 / 65536)], + ['minecraft:cyan_glowstick', 637 + (6 / 65536)], + ['minecraft:red_glowstick', 637 + (7 / 65536)], + ['minecraft:gray_glowstick', 637 + (8 / 65536)], + ['minecraft:pink_glowstick', 637 + (9 / 65536)], + ['minecraft:lime_glowstick', 637 + (10 / 65536)], + ['minecraft:yellow_glowstick', 637 + (11 / 65536)], + ['minecraft:light_blue_glowstick', 637 + (12 / 65536)], + ['minecraft:magenta_glowstick', 637 + (13 / 65536)], + ['minecraft:orange_glowstick', 637 + (14 / 65536)], + ['minecraft:white_glowstick', 637 + (15 / 65536)], + ['minecraft:lit_red_glowstick', 637 + (33 / 65536)], + ['minecraft:lit_green_glowstick', 637 + (34 / 65536)], + ['minecraft:lit_brown_glowstick', 637 + (35 / 65536)], + ['minecraft:lit_blue_glowstick', 637 + (36 / 65536)], + ['minecraft:lit_purple_glowstick', 637 + (37 / 65536)], + ['minecraft:lit_cyan_glowstick', 637 + (38 / 65536)], + ['minecraft:lit_red_glowstick', 637 + (39 / 65536)], + ['minecraft:lit_gray_glowstick', 637 + (40 / 65536)], + ['minecraft:lit_pink_glowstick', 637 + (41 / 65536)], + ['minecraft:lit_lime_glowstick', 637 + (42 / 65536)], + ['minecraft:lit_yellow_glowstick', 637 + (43 / 65536)], + ['minecraft:lit_light_blue_glowstick', 637 + (44 / 65536)], + ['minecraft:lit_magenta_glowstick', 637 + (45 / 65536)], + ['minecraft:lit_orange_glowstick', 637 + (46 / 65536)], + ['minecraft:lit_white_glowstick', 637 + (47 / 65536)] +]); \ No newline at end of file diff --git a/src/lib/assets/custom-entity-types.ts b/src/lib/assets/custom-entity-types.ts index d47eb442..d36d72eb 100644 --- a/src/lib/assets/custom-entity-types.ts +++ b/src/lib/assets/custom-entity-types.ts @@ -1,6 +1,6 @@ // prettier-ignore /* eslint-disable */ -// This file is autogenerated by tools/build.ts. +// This file is autogenerated by tools/build-scripts.ts. // Do not modify manually. export enum CustomEntityTypes { diff --git a/src/lib/assets/custom-items.ts b/src/lib/assets/custom-items.ts index ced73960..015df007 100644 --- a/src/lib/assets/custom-items.ts +++ b/src/lib/assets/custom-items.ts @@ -1,6 +1,6 @@ // prettier-ignore /* eslint-disable */ -// This file is autogenerated by script. +// This file is autogenerated by tools/build-scripts.ts. // Do not modify manually. export enum Items { diff --git a/src/lib/assets/intl-global-object.ts b/src/lib/assets/intl-global-object.ts new file mode 100644 index 00000000..bff4140d --- /dev/null +++ b/src/lib/assets/intl-global-object.ts @@ -0,0 +1,3 @@ +//@ts-expect-error Define global intl if not defined +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +globalThis.Intl ??= {} \ No newline at end of file diff --git a/src/lib/assets/intl.ts b/src/lib/assets/intl.ts index 5ffc4d1b..18b2e9cd 100644 --- a/src/lib/assets/intl.ts +++ b/src/lib/assets/intl.ts @@ -4,31 +4,31 @@ // Do not modify manually. // intl-locale -import '@formatjs/intl-locale/polyfill-force'; +import '@formatjs/intl-locale/polyfill-force.js'; // intl-getcanonicallocales -import '@formatjs/intl-getcanonicallocales/polyfill-force'; +import '@formatjs/intl-getcanonicallocales/polyfill-force.js'; // intl-enumerator -import '@formatjs/intl-enumerator/polyfill-force'; +import '@formatjs/intl-enumerator'; // intl-pluralrules -import '@formatjs/intl-pluralrules/polyfill-force'; +import '@formatjs/intl-pluralrules/polyfill-force.js'; import '@formatjs/intl-pluralrules/locale-data/en'; import '@formatjs/intl-pluralrules/locale-data/ru'; // intl-listformat -import '@formatjs/intl-listformat/polyfill-force'; +import '@formatjs/intl-listformat/polyfill-force.js'; import '@formatjs/intl-listformat/locale-data/en'; import '@formatjs/intl-listformat/locale-data/ru'; // intl-numberformat -import '@formatjs/intl-numberformat/polyfill-force'; +import '@formatjs/intl-numberformat/polyfill-force.js'; import '@formatjs/intl-numberformat/locale-data/en'; import '@formatjs/intl-numberformat/locale-data/ru'; // intl-durationformat -import '@formatjs/intl-durationformat/polyfill-force'; +import '@formatjs/intl-durationformat/polyfill-force.js'; diff --git a/src/lib/assets/lang-big.ts b/src/lib/assets/lang-big.ts index 53f566b3..c66ad624 100644 --- a/src/lib/assets/lang-big.ts +++ b/src/lib/assets/lang-big.ts @@ -10,1383 +10,6 @@ type LangMap = Record type Langs = Record export const blockItemsLangJson: Record = { - "minecraft:acacia_boat": "item.boat.acacia.name", - "minecraft:acacia_button": "tile.acacia_button.name", - "minecraft:acacia_chest_boat": "item.chest_boat.acacia.name", - "minecraft:acacia_door": "item.acacia_door.name", - "minecraft:acacia_fence": "tile.acaciaFence.name", - "minecraft:acacia_fence_gate": "tile.acacia_fence_gate.name", - "minecraft:acacia_hanging_sign": "item.acacia_hanging_sign.name", - "minecraft:acacia_leaves": "tile.leaves.acacia.name", - "minecraft:acacia_log": "tile.log.acacia.name", - "minecraft:acacia_planks": "tile.planks.acacia.name", - "minecraft:acacia_pressure_plate": "tile.acacia_pressure_plate.name", - "minecraft:acacia_sapling": "tile.sapling.acacia.name", - "minecraft:acacia_sign": "item.acacia_sign.name", - "minecraft:acacia_slab": "tile.wooden_slab.acacia.name", - "minecraft:acacia_stairs": "tile.acacia_stairs.name", - "minecraft:acacia_trapdoor": "tile.acacia_trapdoor.name", - "minecraft:acacia_wood": "tile.wood.acacia.name", - "minecraft:activator_rail": "tile.activator_rail.name", - "minecraft:allay_spawn_egg": "item.spawn_egg.entity.allay.name", - "minecraft:allium": "tile.red_flower.allium.name", - "minecraft:allow": "tile.allow.name", - "minecraft:amethyst_block": "tile.amethyst_block.name", - "minecraft:amethyst_cluster": "tile.amethyst_cluster.name", - "minecraft:amethyst_shard": "item.amethyst_shard.name", - "minecraft:ancient_debris": "tile.ancient_debris.name", - "minecraft:andesite": "tile.stone.andesite.name", - "minecraft:andesite_slab": "tile.stone_slab3.andesite.name", - "minecraft:andesite_stairs": "tile.andesite_stairs.name", - "minecraft:andesite_wall": "tile.cobblestone_wall.andesite.name", - "minecraft:angler_pottery_sherd": "item.angler_pottery_sherd.name", - "minecraft:anvil": "tile.anvil.name", - "minecraft:apple": "item.apple.name", - "minecraft:archer_pottery_sherd": "item.archer_pottery_sherd.name", - "minecraft:armadillo_scute": "item.armadillo_scute.name", - "minecraft:armadillo_spawn_egg": "item.spawn_egg.entity.armadillo.name", - "minecraft:armor_stand": "item.armor_stand.name", - "minecraft:arms_up_pottery_sherd": "item.arms_up_pottery_sherd.name", - "minecraft:arrow": "item.arrow.name", - "minecraft:axolotl_bucket": "item.bucketAxolotl.name", - "minecraft:axolotl_spawn_egg": "item.spawn_egg.entity.axolotl.name", - "minecraft:azalea": "tile.azalea.name", - "minecraft:azalea_leaves": "tile.azalea_leaves.name", - "minecraft:azalea_leaves_flowered": "tile.azalea_leaves_flowered.name", - "minecraft:azure_bluet": "tile.red_flower.houstonia.name", - "minecraft:baked_potato": "item.baked_potato.name", - "minecraft:bamboo": "tile.bamboo.name", - "minecraft:bamboo_block": "tile.bamboo_block.name", - "minecraft:bamboo_button": "tile.bamboo_button.name", - "minecraft:bamboo_chest_raft": "item.chest_boat.bamboo.name", - "minecraft:bamboo_door": "item.bamboo_door.name", - "minecraft:bamboo_fence": "tile.bamboo_fence.name", - "minecraft:bamboo_fence_gate": "tile.bamboo_fence_gate.name", - "minecraft:bamboo_hanging_sign": "item.bamboo_hanging_sign.name", - "minecraft:bamboo_mosaic": "tile.bamboo_mosaic.name", - "minecraft:bamboo_mosaic_slab": "tile.bamboo_mosaic_slab.name", - "minecraft:bamboo_mosaic_stairs": "tile.bamboo_mosaic_stairs.name", - "minecraft:bamboo_planks": "tile.bamboo_planks.name", - "minecraft:bamboo_pressure_plate": "tile.bamboo_pressure_plate.name", - "minecraft:bamboo_raft": "item.boat.bamboo.name", - "minecraft:bamboo_sign": "item.bamboo_sign.name", - "minecraft:bamboo_slab": "tile.bamboo_slab.name", - "minecraft:bamboo_stairs": "tile.bamboo_stairs.name", - "minecraft:bamboo_trapdoor": "tile.bamboo_trapdoor.name", - "minecraft:banner": "tile.standing_banner.white.name", - "minecraft:barrel": "tile.barrel.name", - "minecraft:barrier": "tile.barrier.name", - "minecraft:basalt": "tile.basalt.name", - "minecraft:bat_spawn_egg": "item.spawn_egg.entity.bat.name", - "minecraft:beacon": "tile.beacon.name", - "minecraft:bed": "tile.bed.name", - "minecraft:bedrock": "tile.bedrock.name", - "minecraft:bee_nest": "tile.bee_nest.name", - "minecraft:bee_spawn_egg": "item.spawn_egg.entity.bee.name", - "minecraft:beef": "item.beef.name", - "minecraft:beehive": "tile.beehive.name", - "minecraft:beetroot": "item.beetroot.name", - "minecraft:beetroot_seeds": "item.beetroot_seeds.name", - "minecraft:beetroot_soup": "item.beetroot_soup.name", - "minecraft:bell": "item.bell.name", - "minecraft:big_dripleaf": "tile.big_dripleaf.name", - "minecraft:birch_boat": "item.boat.birch.name", - "minecraft:birch_button": "tile.birch_button.name", - "minecraft:birch_chest_boat": "item.chest_boat.birch.name", - "minecraft:birch_door": "item.birch_door.name", - "minecraft:birch_fence": "tile.birchFence.name", - "minecraft:birch_fence_gate": "tile.birch_fence_gate.name", - "minecraft:birch_hanging_sign": "item.birch_hanging_sign.name", - "minecraft:birch_leaves": "tile.leaves.birch.name", - "minecraft:birch_log": "tile.log.birch.name", - "minecraft:birch_planks": "tile.planks.birch.name", - "minecraft:birch_pressure_plate": "tile.birch_pressure_plate.name", - "minecraft:birch_sapling": "tile.sapling.birch.name", - "minecraft:birch_sign": "item.birch_sign.name", - "minecraft:birch_slab": "tile.wooden_slab.birch.name", - "minecraft:birch_stairs": "tile.birch_stairs.name", - "minecraft:birch_trapdoor": "tile.birch_trapdoor.name", - "minecraft:birch_wood": "tile.wood.birch.name", - "minecraft:black_bundle": "item.black_bundle", - "minecraft:black_candle": "tile.black_candle.name", - "minecraft:black_carpet": "tile.carpet.black.name", - "minecraft:black_concrete": "tile.concrete.black.name", - "minecraft:black_concrete_powder": "tile.concretePowder.black.name", - "minecraft:black_dye": "item.dye.black.name", - "minecraft:black_glazed_terracotta": "tile.glazedTerracotta.black.name", - "minecraft:black_shulker_box": "tile.shulkerBoxBlack.name", - "minecraft:black_stained_glass": "tile.stained_glass.black.name", - "minecraft:black_stained_glass_pane": "tile.stained_glass_pane.black.name", - "minecraft:black_terracotta": "tile.stained_hardened_clay.black.name", - "minecraft:black_wool": "tile.wool.black.name", - "minecraft:blackstone": "tile.blackstone.name", - "minecraft:blackstone_slab": "tile.blackstone_slab.name", - "minecraft:blackstone_stairs": "tile.blackstone_stairs.name", - "minecraft:blackstone_wall": "tile.blackstone_wall.name", - "minecraft:blade_pottery_sherd": "item.blade_pottery_sherd.name", - "minecraft:blast_furnace": "tile.blast_furnace.name", - "minecraft:blaze_powder": "item.blaze_powder.name", - "minecraft:blaze_rod": "item.blaze_rod.name", - "minecraft:blaze_spawn_egg": "item.spawn_egg.entity.blaze.name", - "minecraft:blue_bundle": "item.blue_bundle", - "minecraft:blue_candle": "tile.blue_candle.name", - "minecraft:blue_carpet": "tile.carpet.blue.name", - "minecraft:blue_concrete": "tile.concrete.blue.name", - "minecraft:blue_concrete_powder": "tile.concretePowder.blue.name", - "minecraft:blue_dye": "item.dye.blue.name", - "minecraft:blue_egg": "item.blue_egg.name", - "minecraft:blue_glazed_terracotta": "tile.glazedTerracotta.blue.name", - "minecraft:blue_ice": "tile.blue_ice.name", - "minecraft:blue_orchid": "tile.red_flower.blueOrchid.name", - "minecraft:blue_shulker_box": "tile.shulkerBoxBlue.name", - "minecraft:blue_stained_glass": "tile.stained_glass.blue.name", - "minecraft:blue_stained_glass_pane": "tile.stained_glass_pane.blue.name", - "minecraft:blue_terracotta": "tile.stained_hardened_clay.blue.name", - "minecraft:blue_wool": "tile.wool.blue.name", - "minecraft:bogged_spawn_egg": "item.spawn_egg.entity.bogged.name", - "minecraft:bolt_armor_trim_smithing_template": "item.bolt_armor_trim_smithing_template.name", - "minecraft:bone": "item.bone.name", - "minecraft:bone_block": "tile.bone_block.name", - "minecraft:bone_meal": "item.dye.white.name", - "minecraft:book": "item.book.name", - "minecraft:bookshelf": "tile.bookshelf.name", - "minecraft:border_block": "tile.border_block.name", - "minecraft:bordure_indented_banner_pattern": "item.bordure_indented_banner_pattern.name", - "minecraft:bow": "item.bow.name", - "minecraft:bowl": "item.bowl.name", - "minecraft:brain_coral": "tile.coral.pink.name", - "minecraft:brain_coral_block": "tile.coral_block.pink.name", - "minecraft:brain_coral_fan": "tile.coral_fan.pink_fan.name", - "minecraft:bread": "item.bread.name", - "minecraft:breeze_rod": "item.breeze_rod.name", - "minecraft:breeze_spawn_egg": "item.spawn_egg.entity.breeze.name", - "minecraft:brewer_pottery_sherd": "item.brewer_pottery_sherd.name", - "minecraft:brewing_stand": "item.brewing_stand.name", - "minecraft:brick": "item.brick.name", - "minecraft:brick_block": "tile.brick_block.name", - "minecraft:brick_slab": "tile.stone_slab.brick.name", - "minecraft:brick_stairs": "tile.brick_stairs.name", - "minecraft:brick_wall": "tile.cobblestone_wall.brick.name", - "minecraft:brown_bundle": "item.brown_bundle", - "minecraft:brown_candle": "tile.brown_candle.name", - "minecraft:brown_carpet": "tile.carpet.brown.name", - "minecraft:brown_concrete": "tile.concrete.brown.name", - "minecraft:brown_concrete_powder": "tile.concretePowder.brown.name", - "minecraft:brown_dye": "item.dye.brown.name", - "minecraft:brown_egg": "item.brown_egg.name", - "minecraft:brown_glazed_terracotta": "tile.glazedTerracotta.brown.name", - "minecraft:brown_mushroom": "tile.brown_mushroom.name", - "minecraft:brown_mushroom_block": "tile.brown_mushroom_block.cap.name", - "minecraft:brown_shulker_box": "tile.shulkerBoxBrown.name", - "minecraft:brown_stained_glass": "tile.stained_glass.brown.name", - "minecraft:brown_stained_glass_pane": "tile.stained_glass_pane.brown.name", - "minecraft:brown_terracotta": "tile.stained_hardened_clay.brown.name", - "minecraft:brown_wool": "tile.wool.brown.name", - "minecraft:brush": "item.brush.name", - "minecraft:bubble_coral": "tile.coral.purple.name", - "minecraft:bubble_coral_block": "tile.coral_block.purple.name", - "minecraft:bubble_coral_fan": "tile.coral_fan.purple_fan.name", - "minecraft:bucket": "item.bucket.name", - "minecraft:budding_amethyst": "tile.budding_amethyst.name", - "minecraft:bundle": "item.bundle", - "minecraft:burn_pottery_sherd": "item.burn_pottery_sherd.name", - "minecraft:bush": "tile.bush.name", - "minecraft:cactus": "tile.cactus.name", - "minecraft:cactus_flower": "tile.cactus_flower.name", - "minecraft:cake": "item.cake.name", - "minecraft:calcite": "tile.calcite.name", - "minecraft:calibrated_sculk_sensor": "tile.calibrated_sculk_sensor.name", - "minecraft:camel_spawn_egg": "item.spawn_egg.entity.camel.name", - "minecraft:campfire": "tile.campfire.name", - "minecraft:candle": "tile.candle.name", - "minecraft:carrot": "item.carrot.name", - "minecraft:carrot_on_a_stick": "item.carrotOnAStick.name", - "minecraft:cartography_table": "tile.cartography_table.name", - "minecraft:carved_pumpkin": "tile.carved_pumpkin.name", - "minecraft:cat_spawn_egg": "item.spawn_egg.entity.cat.name", - "minecraft:cauldron": "item.cauldron.name", - "minecraft:cave_spider_spawn_egg": "item.spawn_egg.entity.cave_spider.name", - "minecraft:chain": "tile.chain.name", - "minecraft:chain_command_block": "tile.chain_command_block.name", - "minecraft:chainmail_boots": "item.chainmail_boots.name", - "minecraft:chainmail_chestplate": "item.chainmail_chestplate.name", - "minecraft:chainmail_helmet": "item.chainmail_helmet.name", - "minecraft:chainmail_leggings": "item.chainmail_leggings.name", - "minecraft:charcoal": "item.charcoal.name", - "minecraft:cherry_boat": "item.boat.cherry.name", - "minecraft:cherry_button": "tile.cherry_button.name", - "minecraft:cherry_chest_boat": "item.chest_boat.cherry.name", - "minecraft:cherry_door": "item.cherry_door.name", - "minecraft:cherry_fence": "tile.cherry_fence.name", - "minecraft:cherry_fence_gate": "tile.cherry_fence_gate.name", - "minecraft:cherry_hanging_sign": "item.cherry_hanging_sign.name", - "minecraft:cherry_leaves": "tile.cherry_leaves.name", - "minecraft:cherry_log": "tile.cherry_log.name", - "minecraft:cherry_planks": "tile.cherry_planks.name", - "minecraft:cherry_pressure_plate": "tile.cherry_pressure_plate.name", - "minecraft:cherry_sapling": "tile.cherry_sapling.name", - "minecraft:cherry_sign": "item.cherry_sign.name", - "minecraft:cherry_slab": "tile.cherry_slab.name", - "minecraft:cherry_stairs": "tile.cherry_stairs.name", - "minecraft:cherry_trapdoor": "tile.cherry_trapdoor.name", - "minecraft:cherry_wood": "tile.cherry_wood.name", - "minecraft:chest": "tile.chest.name", - "minecraft:chest_minecart": "item.chest_minecart.name", - "minecraft:chicken": "item.chicken.name", - "minecraft:chicken_spawn_egg": "item.spawn_egg.entity.chicken.name", - "minecraft:chipped_anvil": "tile.anvil.slightlyDamaged.name", - "minecraft:chiseled_bookshelf": "tile.chiseled_bookshelf.name", - "minecraft:chiseled_copper": "tile.chiseled_copper.name", - "minecraft:chiseled_deepslate": "tile.chiseled_deepslate.name", - "minecraft:chiseled_nether_bricks": "tile.chiseled_nether_bricks.name", - "minecraft:chiseled_polished_blackstone": "tile.chiseled_polished_blackstone.name", - "minecraft:chiseled_quartz_block": "tile.quartz_block.chiseled.name", - "minecraft:chiseled_red_sandstone": "tile.red_sandstone.chiseled.name", - "minecraft:chiseled_resin_bricks": "tile.chiseled_resin_bricks.name", - "minecraft:chiseled_sandstone": "tile.sandstone.chiseled.name", - "minecraft:chiseled_stone_bricks": "tile.stonebrick.chiseled.name", - "minecraft:chiseled_tuff": "tile.chiseled_tuff.name", - "minecraft:chiseled_tuff_bricks": "tile.chiseled_tuff_bricks.name", - "minecraft:chorus_flower": "tile.chorus_flower.name", - "minecraft:chorus_fruit": "item.chorus_fruit.name", - "minecraft:chorus_plant": "tile.chorus_plant.name", - "minecraft:clay": "tile.clay.name", - "minecraft:clay_ball": "item.clay_ball.name", - "minecraft:clock": "item.clock.name", - "minecraft:closed_eyeblossom": "tile.closed_eyeblossom.name", - "minecraft:coal": "item.coal.name", - "minecraft:coal_block": "tile.coal_block.name", - "minecraft:coal_ore": "tile.coal_ore.name", - "minecraft:coarse_dirt": "tile.dirt.coarse.name", - "minecraft:coast_armor_trim_smithing_template": "item.coast_armor_trim_smithing_template.name", - "minecraft:cobbled_deepslate": "tile.cobbled_deepslate.name", - "minecraft:cobbled_deepslate_slab": "tile.cobbled_deepslate_slab.name", - "minecraft:cobbled_deepslate_stairs": "tile.cobbled_deepslate_stairs.name", - "minecraft:cobbled_deepslate_wall": "tile.cobbled_deepslate_wall.name", - "minecraft:cobblestone": "tile.cobblestone.name", - "minecraft:cobblestone_slab": "tile.stone_slab.cobble.name", - "minecraft:cobblestone_wall": "tile.cobblestone_wall.normal.name", - "minecraft:cocoa_beans": "item.dye.brown.name", - "minecraft:cod": "entity.cod.name", - "minecraft:cod_bucket": "item.bucketFish.name", - "minecraft:cod_spawn_egg": "item.spawn_egg.entity.cod.name", - "minecraft:command_block": "tile.command_block.name", - "minecraft:command_block_minecart": "item.command_block_minecart.name", - "minecraft:comparator": "item.comparator.name", - "minecraft:compass": "item.compass.name", - "minecraft:composter": "tile.composter.name", - "minecraft:conduit": "tile.conduit.name", - "minecraft:cooked_beef": "item.cooked_beef.name", - "minecraft:cooked_chicken": "item.cooked_chicken.name", - "minecraft:cooked_cod": "item.cooked_fish.name", - "minecraft:cooked_mutton": "item.muttonCooked.name", - "minecraft:cooked_porkchop": "item.cooked_porkchop.name", - "minecraft:cooked_rabbit": "item.cooked_rabbit.name", - "minecraft:cooked_salmon": "item.cooked_salmon.name", - "minecraft:cookie": "item.cookie.name", - "minecraft:copper_block": "tile.copper_block.name", - "minecraft:copper_bulb": "tile.copper_bulb.name", - "minecraft:copper_door": "item.copper_door.name", - "minecraft:copper_grate": "tile.copper_grate.name", - "minecraft:copper_ingot": "item.copper_ingot.name", - "minecraft:copper_ore": "tile.copper_ore.name", - "minecraft:copper_trapdoor": "tile.copper_trapdoor.name", - "minecraft:cornflower": "tile.red_flower.cornflower.name", - "minecraft:cow_spawn_egg": "item.spawn_egg.entity.cow.name", - "minecraft:cracked_deepslate_bricks": "tile.cracked_deepslate_bricks.name", - "minecraft:cracked_deepslate_tiles": "tile.cracked_deepslate_tiles.name", - "minecraft:cracked_nether_bricks": "tile.cracked_nether_bricks.name", - "minecraft:cracked_polished_blackstone_bricks": "tile.cracked_polished_blackstone_bricks.name", - "minecraft:cracked_stone_bricks": "tile.stonebrick.cracked.name", - "minecraft:crafter": "tile.crafter.name", - "minecraft:crafting_table": "tile.crafting_table.name", - "minecraft:creaking_heart": "tile.creaking_heart.name", - "minecraft:creaking_spawn_egg": "item.spawn_egg.entity.creaking.name", - "minecraft:creeper_banner_pattern": "item.banner_pattern.creeper", - "minecraft:creeper_head": "item.skull.creeper.name", - "minecraft:creeper_spawn_egg": "item.spawn_egg.entity.creeper.name", - "minecraft:crimson_button": "tile.crimson_button.name", - "minecraft:crimson_door": "item.crimson_door.name", - "minecraft:crimson_fence": "tile.crimson_fence.name", - "minecraft:crimson_fence_gate": "tile.crimson_fence_gate.name", - "minecraft:crimson_fungus": "tile.crimson_fungus.name", - "minecraft:crimson_hanging_sign": "item.crimson_hanging_sign.name", - "minecraft:crimson_hyphae": "tile.crimson_hyphae.name", - "minecraft:crimson_nylium": "tile.crimson_nylium.name", - "minecraft:crimson_planks": "tile.crimson_planks.name", - "minecraft:crimson_pressure_plate": "tile.crimson_pressure_plate.name", - "minecraft:crimson_roots": "tile.crimson_roots.crimsonRoots.name", - "minecraft:crimson_sign": "item.crimson_sign.name", - "minecraft:crimson_slab": "tile.crimson_slab.name", - "minecraft:crimson_stairs": "tile.crimson_stairs.name", - "minecraft:crimson_stem": "tile.crimson_stem.name", - "minecraft:crimson_trapdoor": "tile.crimson_trapdoor.name", - "minecraft:crossbow": "item.crossbow.name", - "minecraft:crying_obsidian": "tile.crying_obsidian.name", - "minecraft:cut_copper": "tile.cut_copper.name", - "minecraft:cut_copper_slab": "tile.cut_copper_slab.name", - "minecraft:cut_copper_stairs": "tile.cut_copper_stairs.name", - "minecraft:cut_red_sandstone": "tile.red_sandstone.cut.name", - "minecraft:cut_red_sandstone_slab": "tile.stone_slab4.cut_red_sandstone.name", - "minecraft:cut_sandstone": "tile.sandstone.cut.name", - "minecraft:cut_sandstone_slab": "tile.stone_slab4.cut_sandstone.name", - "minecraft:cyan_bundle": "item.cyan_bundle", - "minecraft:cyan_candle": "tile.cyan_candle.name", - "minecraft:cyan_carpet": "tile.carpet.cyan.name", - "minecraft:cyan_concrete": "tile.concrete.cyan.name", - "minecraft:cyan_concrete_powder": "tile.concretePowder.cyan.name", - "minecraft:cyan_dye": "item.dye.cyan.name", - "minecraft:cyan_glazed_terracotta": "tile.glazedTerracotta.cyan.name", - "minecraft:cyan_shulker_box": "tile.shulkerBoxCyan.name", - "minecraft:cyan_stained_glass": "tile.stained_glass.cyan.name", - "minecraft:cyan_stained_glass_pane": "tile.stained_glass_pane.cyan.name", - "minecraft:cyan_terracotta": "tile.stained_hardened_clay.cyan.name", - "minecraft:cyan_wool": "tile.wool.cyan.name", - "minecraft:damaged_anvil": "tile.anvil.veryDamaged.name", - "minecraft:dandelion": "tile.yellow_flower.dandelion.name", - "minecraft:danger_pottery_sherd": "item.danger_pottery_sherd.name", - "minecraft:dark_oak_boat": "item.boat.big_oak.name", - "minecraft:dark_oak_button": "tile.dark_oak_button.name", - "minecraft:dark_oak_chest_boat": "item.chest_boat.big_oak.name", - "minecraft:dark_oak_door": "item.dark_oak_door.name", - "minecraft:dark_oak_fence": "tile.darkOakFence.name", - "minecraft:dark_oak_fence_gate": "tile.dark_oak_fence_gate.name", - "minecraft:dark_oak_hanging_sign": "item.dark_oak_hanging_sign.name", - "minecraft:dark_oak_leaves": "tile.leaves2.big_oak.name", - "minecraft:dark_oak_log": "tile.log.big_oak.name", - "minecraft:dark_oak_planks": "tile.planks.big_oak.name", - "minecraft:dark_oak_pressure_plate": "tile.dark_oak_pressure_plate.name", - "minecraft:dark_oak_sapling": "tile.sapling.big_oak.name", - "minecraft:dark_oak_sign": "tile.darkoak_standing_sign.name", - "minecraft:dark_oak_slab": "tile.wooden_slab.big_oak.name", - "minecraft:dark_oak_stairs": "tile.dark_oak_stairs.name", - "minecraft:dark_oak_trapdoor": "tile.dark_oak_trapdoor.name", - "minecraft:dark_oak_wood": "tile.wood.dark_oak.name", - "minecraft:dark_prismarine": "tile.prismarine.dark.name", - "minecraft:dark_prismarine_slab": "tile.stone_slab2.prismarine.dark.name", - "minecraft:dark_prismarine_stairs": "tile.dark_prismarine_stairs.name", - "minecraft:daylight_detector": "tile.daylight_detector.name", - "minecraft:dead_brain_coral": "tile.coral.pink_dead.name", - "minecraft:dead_brain_coral_block": "tile.coral_block.pink_dead.name", - "minecraft:dead_brain_coral_fan": "tile.coral_fan_dead.pink_fan.name", - "minecraft:dead_bubble_coral": "tile.coral.purple_dead.name", - "minecraft:dead_bubble_coral_block": "tile.coral_block.purple_dead.name", - "minecraft:dead_bubble_coral_fan": "tile.coral_fan_dead.purple_fan.name", - "minecraft:dead_fire_coral": "tile.coral.red_dead.name", - "minecraft:dead_fire_coral_block": "tile.coral_block.red_dead.name", - "minecraft:dead_fire_coral_fan": "tile.coral_fan_dead.red_fan.name", - "minecraft:dead_horn_coral": "tile.coral.yellow_dead.name", - "minecraft:dead_horn_coral_block": "tile.coral_block.yellow_dead.name", - "minecraft:dead_horn_coral_fan": "tile.coral_fan_dead.yellow_fan.name", - "minecraft:dead_tube_coral": "tile.coral.blue_dead.name", - "minecraft:dead_tube_coral_block": "tile.coral_block.blue_dead.name", - "minecraft:dead_tube_coral_fan": "tile.coral_fan_dead.blue_fan.name", - "minecraft:deadbush": "tile.deadbush.name", - "minecraft:decorated_pot": "tile.decorated_pot.name", - "minecraft:deepslate": "tile.deepslate.name", - "minecraft:deepslate_brick_slab": "tile.deepslate_brick_slab.name", - "minecraft:deepslate_brick_stairs": "tile.deepslate_brick_stairs.name", - "minecraft:deepslate_brick_wall": "tile.deepslate_brick_wall.name", - "minecraft:deepslate_bricks": "tile.deepslate_bricks.name", - "minecraft:deepslate_coal_ore": "tile.deepslate_coal_ore.name", - "minecraft:deepslate_copper_ore": "tile.deepslate_copper_ore.name", - "minecraft:deepslate_diamond_ore": "tile.deepslate_diamond_ore.name", - "minecraft:deepslate_emerald_ore": "tile.deepslate_emerald_ore.name", - "minecraft:deepslate_gold_ore": "tile.deepslate_gold_ore.name", - "minecraft:deepslate_iron_ore": "tile.deepslate_iron_ore.name", - "minecraft:deepslate_lapis_ore": "tile.deepslate_lapis_ore.name", - "minecraft:deepslate_redstone_ore": "tile.deepslate_redstone_ore.name", - "minecraft:deepslate_tile_slab": "tile.deepslate_tile_slab.name", - "minecraft:deepslate_tile_stairs": "tile.deepslate_tile_stairs.name", - "minecraft:deepslate_tile_wall": "tile.deepslate_tile_wall.name", - "minecraft:deepslate_tiles": "tile.deepslate_tiles.name", - "minecraft:deny": "tile.deny.name", - "minecraft:detector_rail": "tile.detector_rail.name", - "minecraft:diamond": "item.diamond.name", - "minecraft:diamond_axe": "item.diamond_axe.name", - "minecraft:diamond_block": "tile.diamond_block.name", - "minecraft:diamond_boots": "item.diamond_boots.name", - "minecraft:diamond_chestplate": "item.diamond_chestplate.name", - "minecraft:diamond_helmet": "item.diamond_helmet.name", - "minecraft:diamond_hoe": "item.diamond_hoe.name", - "minecraft:diamond_horse_armor": "item.horsearmordiamond.name", - "minecraft:diamond_leggings": "item.diamond_leggings.name", - "minecraft:diamond_ore": "tile.diamond_ore.name", - "minecraft:diamond_pickaxe": "item.diamond_pickaxe.name", - "minecraft:diamond_shovel": "item.diamond_shovel.name", - "minecraft:diamond_sword": "item.diamond_sword.name", - "minecraft:diorite": "tile.stone.diorite.name", - "minecraft:diorite_slab": "tile.stone_slab3.diorite.name", - "minecraft:diorite_stairs": "tile.diorite_stairs.name", - "minecraft:diorite_wall": "tile.cobblestone_wall.diorite.name", - "minecraft:dirt": "tile.dirt.name", - "minecraft:dirt_with_roots": "tile.dirt_with_roots.name", - "minecraft:disc_fragment_5": "item.disc_fragment_5.desc", - "minecraft:dispenser": "tile.dispenser.name", - "minecraft:dolphin_spawn_egg": "item.spawn_egg.entity.dolphin.name", - "minecraft:donkey_spawn_egg": "item.spawn_egg.entity.donkey.name", - "minecraft:dragon_breath": "item.dragon_breath.name", - "minecraft:dragon_egg": "tile.dragon_egg.name", - "minecraft:dragon_head": "item.skull.dragon.name", - "minecraft:dried_kelp": "item.dried_kelp.name", - "minecraft:dried_kelp_block": "tile.dried_kelp_block.name", - "minecraft:dripstone_block": "tile.dripstone_block.name", - "minecraft:dropper": "tile.dropper.name", - "minecraft:drowned_spawn_egg": "item.spawn_egg.entity.drowned.name", - "minecraft:dune_armor_trim_smithing_template": "item.dune_armor_trim_smithing_template.name", - "minecraft:echo_shard": "item.echo_shard.name", - "minecraft:egg": "item.egg.name", - "minecraft:elder_guardian_spawn_egg": "item.spawn_egg.entity.elder_guardian.name", - "minecraft:elytra": "item.elytra.name", - "minecraft:emerald": "item.emerald.name", - "minecraft:emerald_block": "tile.emerald_block.name", - "minecraft:emerald_ore": "tile.emerald_ore.name", - "minecraft:empty_map": "item.emptyMap.name", - "minecraft:enchanted_book": "item.enchanted_book.name", - "minecraft:enchanted_golden_apple": "item.appleEnchanted.name", - "minecraft:enchanting_table": "tile.enchanting_table.name", - "minecraft:end_brick_stairs": "tile.end_brick_stairs.name", - "minecraft:end_bricks": "tile.end_bricks.name", - "minecraft:end_crystal": "item.end_crystal.name", - "minecraft:end_portal_frame": "tile.end_portal_frame.name", - "minecraft:end_rod": "tile.end_rod.name", - "minecraft:end_stone": "tile.end_stone.name", - "minecraft:end_stone_brick_slab": "tile.stone_slab3.end_brick.name", - "minecraft:end_stone_brick_wall": "tile.cobblestone_wall.end_brick.name", - "minecraft:ender_chest": "tile.ender_chest.name", - "minecraft:ender_dragon_spawn_egg": "item.spawn_egg.entity.ender_dragon.name", - "minecraft:ender_eye": "item.ender_eye.name", - "minecraft:ender_pearl": "item.ender_pearl.name", - "minecraft:enderman_spawn_egg": "item.spawn_egg.entity.enderman.name", - "minecraft:endermite_spawn_egg": "item.spawn_egg.entity.endermite.name", - "minecraft:evoker_spawn_egg": "item.spawn_egg.entity.evocation_illager.name", - "minecraft:experience_bottle": "item.experience_bottle.name", - "minecraft:explorer_pottery_sherd": "item.explorer_pottery_sherd.name", - "minecraft:exposed_chiseled_copper": "tile.exposed_chiseled_copper.name", - "minecraft:exposed_copper": "tile.exposed_copper.name", - "minecraft:exposed_copper_bulb": "tile.exposed_copper_bulb.name", - "minecraft:exposed_copper_door": "item.exposed_copper_door.name", - "minecraft:exposed_copper_grate": "tile.exposed_copper_grate.name", - "minecraft:exposed_copper_trapdoor": "tile.exposed_copper_trapdoor.name", - "minecraft:exposed_cut_copper": "tile.exposed_cut_copper.name", - "minecraft:exposed_cut_copper_slab": "tile.exposed_cut_copper_slab.name", - "minecraft:exposed_cut_copper_stairs": "tile.exposed_cut_copper_stairs.name", - "minecraft:eye_armor_trim_smithing_template": "item.eye_armor_trim_smithing_template.name", - "minecraft:farmland": "tile.farmland.name", - "minecraft:feather": "item.feather.name", - "minecraft:fence_gate": "tile.fence_gate.name", - "minecraft:fermented_spider_eye": "item.fermented_spider_eye.name", - "minecraft:fern": "tile.tallgrass.fern.name", - "minecraft:field_masoned_banner_pattern": "item.field_masoned_banner_pattern.name", - "minecraft:filled_map": "item.map.name", - "minecraft:fire_charge": "item.fireball.name", - "minecraft:fire_coral": "tile.coral.red.name", - "minecraft:fire_coral_block": "tile.coral_block.red.name", - "minecraft:fire_coral_fan": "tile.coral_fan.red_fan.name", - "minecraft:firefly_bush": "tile.firefly_bush.name", - "minecraft:firework_rocket": "item.fireworks.name", - "minecraft:firework_star": "item.fireworksCharge.name", - "minecraft:fishing_rod": "item.fishing_rod.name", - "minecraft:fletching_table": "tile.fletching_table.name", - "minecraft:flint": "item.flint.name", - "minecraft:flint_and_steel": "item.flint_and_steel.name", - "minecraft:flow_armor_trim_smithing_template": "item.flow_armor_trim_smithing_template.name", - "minecraft:flow_banner_pattern": "item.banner_pattern.flow", - "minecraft:flow_pottery_sherd": "item.flow_pottery_sherd.name", - "minecraft:flower_banner_pattern": "item.banner_pattern.flower", - "minecraft:flower_pot": "item.flower_pot.name", - "minecraft:flowering_azalea": "tile.flowering_azalea.name", - "minecraft:fox_spawn_egg": "item.spawn_egg.entity.fox.name", - "minecraft:frame": "item.frame.name", - "minecraft:friend_pottery_sherd": "item.friend_pottery_sherd.name", - "minecraft:frog_spawn": "tile.frog_spawn.name", - "minecraft:frog_spawn_egg": "item.spawn_egg.entity.frog.name", - "minecraft:frosted_ice": "tile.frosted_ice.name", - "minecraft:furnace": "tile.furnace.name", - "minecraft:ghast_spawn_egg": "item.spawn_egg.entity.ghast.name", - "minecraft:ghast_tear": "item.ghast_tear.name", - "minecraft:gilded_blackstone": "tile.gilded_blackstone.name", - "minecraft:glass": "tile.glass.name", - "minecraft:glass_bottle": "item.glass_bottle.name", - "minecraft:glass_pane": "tile.glass_pane.name", - "minecraft:glistering_melon_slice": "item.melon_slice.glistering.name", - "minecraft:globe_banner_pattern": "item.banner_pattern.globe", - "minecraft:glow_berries": "item.glow_berries.name", - "minecraft:glow_frame": "item.glow_frame.name", - "minecraft:glow_ink_sac": "item.glow_ink_sac.name", - "minecraft:glow_lichen": "tile.glow_lichen.name", - "minecraft:glow_squid_spawn_egg": "item.spawn_egg.entity.glow_squid.name", - "minecraft:glowstone": "tile.glowstone.name", - "minecraft:glowstone_dust": "item.glowstone_dust.name", - "minecraft:goat_horn": "item.goat_horn.name", - "minecraft:goat_spawn_egg": "item.spawn_egg.entity.goat.name", - "minecraft:gold_block": "tile.gold_block.name", - "minecraft:gold_ingot": "item.gold_ingot.name", - "minecraft:gold_nugget": "item.gold_nugget.name", - "minecraft:gold_ore": "tile.gold_ore.name", - "minecraft:golden_apple": "item.golden_apple.name", - "minecraft:golden_axe": "item.golden_axe.name", - "minecraft:golden_boots": "item.golden_boots.name", - "minecraft:golden_carrot": "item.golden_carrot.name", - "minecraft:golden_chestplate": "item.golden_chestplate.name", - "minecraft:golden_helmet": "item.golden_helmet.name", - "minecraft:golden_hoe": "item.golden_hoe.name", - "minecraft:golden_horse_armor": "item.horsearmorgold.name", - "minecraft:golden_leggings": "item.golden_leggings.name", - "minecraft:golden_pickaxe": "item.golden_pickaxe.name", - "minecraft:golden_rail": "tile.golden_rail.name", - "minecraft:golden_shovel": "item.golden_shovel.name", - "minecraft:golden_sword": "item.golden_sword.name", - "minecraft:granite": "tile.stone.granite.name", - "minecraft:granite_slab": "tile.stone_slab3.granite.name", - "minecraft:granite_stairs": "tile.granite_stairs.name", - "minecraft:granite_wall": "tile.cobblestone_wall.granite.name", - "minecraft:grass_block": "tile.grass.name", - "minecraft:grass_path": "tile.grass_path.name", - "minecraft:gravel": "tile.gravel.name", - "minecraft:gray_bundle": "item.gray_bundle", - "minecraft:gray_candle": "tile.gray_candle.name", - "minecraft:gray_carpet": "tile.carpet.gray.name", - "minecraft:gray_concrete": "tile.concrete.gray.name", - "minecraft:gray_concrete_powder": "tile.concretePowder.gray.name", - "minecraft:gray_dye": "item.dye.gray.name", - "minecraft:gray_glazed_terracotta": "tile.glazedTerracotta.gray.name", - "minecraft:gray_shulker_box": "tile.shulkerBoxGray.name", - "minecraft:gray_stained_glass": "tile.stained_glass.gray.name", - "minecraft:gray_stained_glass_pane": "tile.stained_glass_pane.gray.name", - "minecraft:gray_terracotta": "tile.stained_hardened_clay.gray.name", - "minecraft:gray_wool": "tile.wool.gray.name", - "minecraft:green_bundle": "item.green_bundle", - "minecraft:green_candle": "tile.green_candle.name", - "minecraft:green_carpet": "tile.carpet.green.name", - "minecraft:green_concrete": "tile.concrete.green.name", - "minecraft:green_concrete_powder": "tile.concretePowder.green.name", - "minecraft:green_dye": "item.dye.green.name", - "minecraft:green_glazed_terracotta": "tile.glazedTerracotta.green.name", - "minecraft:green_shulker_box": "tile.shulkerBoxGreen.name", - "minecraft:green_stained_glass": "tile.stained_glass.green.name", - "minecraft:green_stained_glass_pane": "tile.stained_glass_pane.green.name", - "minecraft:green_terracotta": "tile.stained_hardened_clay.green.name", - "minecraft:green_wool": "tile.wool.green.name", - "minecraft:grindstone": "tile.grindstone.name", - "minecraft:guardian_spawn_egg": "item.spawn_egg.entity.guardian.name", - "minecraft:gunpowder": "item.gunpowder.name", - "minecraft:guster_banner_pattern": "item.banner_pattern.guster", - "minecraft:guster_pottery_sherd": "item.guster_pottery_sherd.name", - "minecraft:hanging_roots": "tile.hanging_roots.name", - "minecraft:hardened_clay": "tile.hardened_clay.name", - "minecraft:hay_block": "tile.hay_block.name", - "minecraft:heart_of_the_sea": "item.heart_of_the_sea.name", - "minecraft:heart_pottery_sherd": "item.heart_pottery_sherd.name", - "minecraft:heartbreak_pottery_sherd": "item.heartbreak_pottery_sherd.name", - "minecraft:heavy_core": "tile.heavy_core.name", - "minecraft:heavy_weighted_pressure_plate": "tile.heavy_weighted_pressure_plate.name", - "minecraft:hoglin_spawn_egg": "item.spawn_egg.entity.hoglin.name", - "minecraft:honey_block": "tile.honey_block.name", - "minecraft:honey_bottle": "item.honey_bottle.name", - "minecraft:honeycomb": "item.honeycomb.name", - "minecraft:honeycomb_block": "tile.honeycomb_block.name", - "minecraft:hopper": "tile.hopper.name", - "minecraft:hopper_minecart": "item.hopper_minecart.name", - "minecraft:horn_coral": "tile.coral.yellow.name", - "minecraft:horn_coral_block": "tile.coral_block.yellow.name", - "minecraft:horn_coral_fan": "tile.coral_fan.yellow_fan.name", - "minecraft:horse_spawn_egg": "item.spawn_egg.entity.horse.name", - "minecraft:host_armor_trim_smithing_template": "item.host_armor_trim_smithing_template.name", - "minecraft:howl_pottery_sherd": "item.howl_pottery_sherd.name", - "minecraft:husk_spawn_egg": "item.spawn_egg.entity.husk.name", - "minecraft:ice": "tile.ice.name", - "minecraft:infested_chiseled_stone_bricks": "tile.monster_egg.chiseledbrick.name", - "minecraft:infested_cobblestone": "tile.monster_egg.cobble.name", - "minecraft:infested_cracked_stone_bricks": "tile.monster_egg.crackedbrick.name", - "minecraft:infested_deepslate": "tile.infested_deepslate.name", - "minecraft:infested_mossy_stone_bricks": "tile.monster_egg.mossybrick.name", - "minecraft:infested_stone": "tile.monster_egg.stone.name", - "minecraft:infested_stone_bricks": "tile.monster_egg.brick.name", - "minecraft:ink_sac": "item.dye.black.name", - "minecraft:iron_axe": "item.iron_axe.name", - "minecraft:iron_bars": "tile.iron_bars.name", - "minecraft:iron_block": "tile.iron_block.name", - "minecraft:iron_boots": "item.iron_boots.name", - "minecraft:iron_chestplate": "item.iron_chestplate.name", - "minecraft:iron_door": "item.iron_door.name", - "minecraft:iron_golem_spawn_egg": "item.spawn_egg.entity.iron_golem.name", - "minecraft:iron_helmet": "item.iron_helmet.name", - "minecraft:iron_hoe": "item.iron_hoe.name", - "minecraft:iron_horse_armor": "item.horsearmoriron.name", - "minecraft:iron_ingot": "item.iron_ingot.name", - "minecraft:iron_leggings": "item.iron_leggings.name", - "minecraft:iron_nugget": "item.iron_nugget.name", - "minecraft:iron_ore": "tile.iron_ore.name", - "minecraft:iron_pickaxe": "item.iron_pickaxe.name", - "minecraft:iron_shovel": "item.iron_shovel.name", - "minecraft:iron_sword": "item.iron_sword.name", - "minecraft:iron_trapdoor": "tile.iron_trapdoor.name", - "minecraft:jigsaw": "tile.jigsaw.name", - "minecraft:jukebox": "tile.jukebox.name", - "minecraft:jungle_boat": "item.boat.jungle.name", - "minecraft:jungle_button": "tile.jungle_button.name", - "minecraft:jungle_chest_boat": "item.chest_boat.jungle.name", - "minecraft:jungle_door": "item.jungle_door.name", - "minecraft:jungle_fence": "tile.jungleFence.name", - "minecraft:jungle_fence_gate": "tile.jungle_fence_gate.name", - "minecraft:jungle_hanging_sign": "item.jungle_hanging_sign.name", - "minecraft:jungle_leaves": "tile.leaves.jungle.name", - "minecraft:jungle_log": "tile.log.jungle.name", - "minecraft:jungle_planks": "tile.planks.jungle.name", - "minecraft:jungle_pressure_plate": "tile.jungle_pressure_plate.name", - "minecraft:jungle_sapling": "tile.sapling.jungle.name", - "minecraft:jungle_sign": "item.jungle_sign.name", - "minecraft:jungle_slab": "tile.wooden_slab.jungle.name", - "minecraft:jungle_stairs": "tile.jungle_stairs.name", - "minecraft:jungle_trapdoor": "tile.jungle_trapdoor.name", - "minecraft:jungle_wood": "tile.wood.jungle.name", - "minecraft:kelp": "item.kelp.name", - "minecraft:ladder": "tile.ladder.name", - "minecraft:lantern": "tile.lantern.name", - "minecraft:lapis_block": "tile.lapis_block.name", - "minecraft:lapis_lazuli": "item.dye.blue.name", - "minecraft:lapis_ore": "tile.lapis_ore.name", - "minecraft:large_amethyst_bud": "tile.large_amethyst_bud.name", - "minecraft:large_fern": "tile.double_plant.fern.name", - "minecraft:lava_bucket": "item.bucketLava.name", - "minecraft:lead": "item.lead.name", - "minecraft:leaf_litter": "tile.leaf_litter.name", - "minecraft:leather": "item.leather.name", - "minecraft:leather_boots": "item.leather_boots.name", - "minecraft:leather_chestplate": "item.leather_chestplate.name", - "minecraft:leather_helmet": "item.leather_helmet.name", - "minecraft:leather_horse_armor": "item.horsearmorleather.name", - "minecraft:leather_leggings": "item.leather_leggings.name", - "minecraft:lectern": "tile.lectern.name", - "minecraft:lever": "tile.lever.name", - "minecraft:light_block_0": "tile.light_block.name", - "minecraft:light_block_1": "tile.light_block.name", - "minecraft:light_block_10": "tile.light_block.name", - "minecraft:light_block_11": "tile.light_block.name", - "minecraft:light_block_12": "tile.light_block.name", - "minecraft:light_block_13": "tile.light_block.name", - "minecraft:light_block_14": "tile.light_block.name", - "minecraft:light_block_15": "tile.light_block.name", - "minecraft:light_block_2": "tile.light_block.name", - "minecraft:light_block_3": "tile.light_block.name", - "minecraft:light_block_4": "tile.light_block.name", - "minecraft:light_block_5": "tile.light_block.name", - "minecraft:light_block_6": "tile.light_block.name", - "minecraft:light_block_7": "tile.light_block.name", - "minecraft:light_block_8": "tile.light_block.name", - "minecraft:light_block_9": "tile.light_block.name", - "minecraft:light_blue_bundle": "item.light_blue_bundle", - "minecraft:light_blue_candle": "tile.light_blue_candle.name", - "minecraft:light_blue_carpet": "tile.carpet.lightBlue.name", - "minecraft:light_blue_concrete": "tile.concrete.lightBlue.name", - "minecraft:light_blue_concrete_powder": "tile.concretePowder.lightBlue.name", - "minecraft:light_blue_dye": "item.dye.lightBlue.name", - "minecraft:light_blue_glazed_terracotta": "tile.glazedTerracottaLightBlue.name", - "minecraft:light_blue_shulker_box": "tile.shulkerBoxLightBlue.name", - "minecraft:light_blue_stained_glass": "tile.stained_glass.light_blue.name", - "minecraft:light_blue_stained_glass_pane": "tile.stained_glass_pane.light_blue.name", - "minecraft:light_blue_terracotta": "tile.stained_hardened_clay.lightBlue.name", - "minecraft:light_blue_wool": "tile.wool.lightBlue.name", - "minecraft:light_gray_bundle": "item.light_gray_bundle", - "minecraft:light_gray_candle": "tile.light_gray_candle.name", - "minecraft:light_gray_carpet": "tile.carpet.silver.name", - "minecraft:light_gray_concrete": "tile.concrete.silver.name", - "minecraft:light_gray_concrete_powder": "tile.concretePowder.silver.name", - "minecraft:light_gray_dye": "item.dye.silver.name", - "minecraft:light_gray_shulker_box": "tile.shulkerBoxSilver.name", - "minecraft:light_gray_stained_glass": "tile.stained_glass.silver.name", - "minecraft:light_gray_stained_glass_pane": "tile.stained_glass_pane.silver.name", - "minecraft:light_gray_terracotta": "tile.stained_hardened_clay.silver.name", - "minecraft:light_gray_wool": "tile.wool.silver.name", - "minecraft:light_weighted_pressure_plate": "tile.light_weighted_pressure_plate.name", - "minecraft:lightning_rod": "tile.lightning_rod.name", - "minecraft:lilac": "tile.double_plant.syringa.name", - "minecraft:lily_of_the_valley": "tile.red_flower.lilyOfTheValley.name", - "minecraft:lime_bundle": "item.lime_bundle", - "minecraft:lime_candle": "tile.lime_candle.name", - "minecraft:lime_carpet": "tile.carpet.lime.name", - "minecraft:lime_concrete": "tile.concrete.lime.name", - "minecraft:lime_concrete_powder": "tile.concretePowder.lime.name", - "minecraft:lime_dye": "item.dye.lime.name", - "minecraft:lime_glazed_terracotta": "tile.glazedTerracotta.lime.name", - "minecraft:lime_shulker_box": "tile.shulkerBoxLime.name", - "minecraft:lime_stained_glass": "tile.stained_glass.lime.name", - "minecraft:lime_stained_glass_pane": "tile.stained_glass_pane.lime.name", - "minecraft:lime_terracotta": "tile.stained_hardened_clay.lime.name", - "minecraft:lime_wool": "tile.wool.lime.name", - "minecraft:lingering_potion": "entity.lingering_potion.name", - "minecraft:lit_pumpkin": "tile.lit_pumpkin.name", - "minecraft:llama_spawn_egg": "item.spawn_egg.entity.llama.name", - "minecraft:lodestone": "tile.lodestone.name", - "minecraft:lodestone_compass": "item.lodestonecompass.name", - "minecraft:loom": "tile.loom.name", - "minecraft:mace": "item.mace.name", - "minecraft:magenta_bundle": "item.magenta_bundle", - "minecraft:magenta_candle": "tile.magenta_candle.name", - "minecraft:magenta_carpet": "tile.carpet.magenta.name", - "minecraft:magenta_concrete": "tile.concrete.magenta.name", - "minecraft:magenta_concrete_powder": "tile.concretePowder.magenta.name", - "minecraft:magenta_dye": "item.dye.magenta.name", - "minecraft:magenta_glazed_terracotta": "tile.glazedTerracotta.magenta.name", - "minecraft:magenta_shulker_box": "tile.shulkerBoxMagenta.name", - "minecraft:magenta_stained_glass": "tile.stained_glass.magenta.name", - "minecraft:magenta_stained_glass_pane": "tile.stained_glass_pane.magenta.name", - "minecraft:magenta_terracotta": "tile.stained_hardened_clay.magenta.name", - "minecraft:magenta_wool": "tile.wool.magenta.name", - "minecraft:magma": "tile.magma.name", - "minecraft:magma_cream": "item.magma_cream.name", - "minecraft:magma_cube_spawn_egg": "item.spawn_egg.entity.magma_cube.name", - "minecraft:mangrove_boat": "item.boat.mangrove.name", - "minecraft:mangrove_button": "tile.mangrove_button.name", - "minecraft:mangrove_chest_boat": "item.chest_boat.mangrove.name", - "minecraft:mangrove_door": "item.mangrove_door.name", - "minecraft:mangrove_fence": "tile.mangrove_fence.name", - "minecraft:mangrove_fence_gate": "tile.mangrove_fence_gate.name", - "minecraft:mangrove_hanging_sign": "item.mangrove_hanging_sign.name", - "minecraft:mangrove_leaves": "tile.mangrove_leaves.name", - "minecraft:mangrove_log": "tile.mangrove_log.name", - "minecraft:mangrove_planks": "tile.mangrove_planks.name", - "minecraft:mangrove_pressure_plate": "tile.mangrove_pressure_plate.name", - "minecraft:mangrove_propagule": "tile.mangrove_propagule.name", - "minecraft:mangrove_roots": "tile.mangrove_roots.name", - "minecraft:mangrove_sign": "item.mangrove_sign.name", - "minecraft:mangrove_slab": "tile.mangrove_slab.name", - "minecraft:mangrove_stairs": "tile.mangrove_stairs.name", - "minecraft:mangrove_trapdoor": "tile.mangrove_trapdoor.name", - "minecraft:mangrove_wood": "tile.mangrove_wood.name", - "minecraft:medium_amethyst_bud": "tile.medium_amethyst_bud.name", - "minecraft:melon_block": "tile.melon_block.name", - "minecraft:melon_seeds": "item.melon_seeds.name", - "minecraft:melon_slice": "tile.melon_block.name", - "minecraft:milk_bucket": "item.milk.name", - "minecraft:minecart": "item.minecart.name", - "minecraft:miner_pottery_sherd": "item.miner_pottery_sherd.name", - "minecraft:mob_spawner": "tile.mob_spawner.name", - "minecraft:mojang_banner_pattern": "item.mojang_banner_pattern.name", - "minecraft:mooshroom_spawn_egg": "item.spawn_egg.entity.mooshroom.name", - "minecraft:moss_block": "tile.moss_block.name", - "minecraft:moss_carpet": "tile.moss_carpet.name", - "minecraft:mossy_cobblestone": "tile.mossy_cobblestone.name", - "minecraft:mossy_cobblestone_slab": "tile.stone_slab2.mossy_cobblestone.name", - "minecraft:mossy_cobblestone_stairs": "tile.mossy_cobblestone_stairs.name", - "minecraft:mossy_cobblestone_wall": "tile.cobblestone_wall.mossy.name", - "minecraft:mossy_stone_brick_slab": "tile.stone_slab4.mossy_stone_brick.name", - "minecraft:mossy_stone_brick_stairs": "tile.mossy_stone_brick_stairs.name", - "minecraft:mossy_stone_brick_wall": "tile.cobblestone_wall.mossy_stone_brick.name", - "minecraft:mossy_stone_bricks": "tile.stonebrick.mossy.name", - "minecraft:mourner_pottery_sherd": "item.mourner_pottery_sherd.name", - "minecraft:mud": "tile.mud.name", - "minecraft:mud_brick_slab": "tile.mud_brick_slab.name", - "minecraft:mud_brick_stairs": "tile.mud_brick_stairs.name", - "minecraft:mud_brick_wall": "tile.mud_brick_wall.name", - "minecraft:mud_bricks": "tile.mud_bricks.name", - "minecraft:muddy_mangrove_roots": "tile.muddy_mangrove_roots.name", - "minecraft:mule_spawn_egg": "item.spawn_egg.entity.mule.name", - "minecraft:mushroom_stem": "tile.brown_mushroom_block.stem.name", - "minecraft:mushroom_stew": "item.mushroom_stew.name", - "minecraft:music_disc_11": "item.record_11.desc", - "minecraft:music_disc_13": "item.record_13.desc", - "minecraft:music_disc_5": "item.record_5.desc", - "minecraft:music_disc_blocks": "item.record_blocks.desc", - "minecraft:music_disc_cat": "item.record_cat.desc", - "minecraft:music_disc_chirp": "item.record_chirp.desc", - "minecraft:music_disc_creator": "item.record_creator.desc", - "minecraft:music_disc_creator_music_box": "item.record_creator_music_box.desc", - "minecraft:music_disc_far": "item.record_far.desc", - "minecraft:music_disc_mall": "item.record_mall.desc", - "minecraft:music_disc_mellohi": "item.record_mellohi.desc", - "minecraft:music_disc_otherside": "item.record_otherside.desc", - "minecraft:music_disc_pigstep": "item.record_pigstep.desc", - "minecraft:music_disc_precipice": "item.record_precipice.desc", - "minecraft:music_disc_relic": "item.record_relic.desc", - "minecraft:music_disc_stal": "item.record_stal.desc", - "minecraft:music_disc_strad": "item.record_strad.desc", - "minecraft:music_disc_wait": "item.record_wait.desc", - "minecraft:music_disc_ward": "item.record_ward.desc", - "minecraft:mutton": "item.muttonRaw.name", - "minecraft:mycelium": "tile.mycelium.name", - "minecraft:name_tag": "item.name_tag.name", - "minecraft:nautilus_shell": "item.nautilus_shell.name", - "minecraft:nether_brick": "tile.nether_brick.name", - "minecraft:nether_brick_fence": "tile.nether_brick_fence.name", - "minecraft:nether_brick_slab": "tile.stone_slab.nether_brick.name", - "minecraft:nether_brick_stairs": "tile.nether_brick_stairs.name", - "minecraft:nether_brick_wall": "tile.cobblestone_wall.nether_brick.name", - "minecraft:nether_gold_ore": "tile.nether_gold_ore.name", - "minecraft:nether_sprouts": "tile.nether_sprouts.name", - "minecraft:nether_star": "item.netherStar.name", - "minecraft:nether_wart": "item.nether_wart.name", - "minecraft:nether_wart_block": "tile.nether_wart_block.name", - "minecraft:netherbrick": "item.netherbrick.name", - "minecraft:netherite_axe": "item.netherite_axe.name", - "minecraft:netherite_block": "tile.netherite_block.name", - "minecraft:netherite_boots": "item.netherite_boots.name", - "minecraft:netherite_chestplate": "item.netherite_chestplate.name", - "minecraft:netherite_helmet": "item.netherite_helmet.name", - "minecraft:netherite_hoe": "item.netherite_hoe.name", - "minecraft:netherite_ingot": "item.netherite_ingot.name", - "minecraft:netherite_leggings": "item.netherite_leggings.name", - "minecraft:netherite_pickaxe": "item.netherite_pickaxe.name", - "minecraft:netherite_scrap": "item.netherite_scrap.name", - "minecraft:netherite_shovel": "item.netherite_shovel.name", - "minecraft:netherite_sword": "item.netherite_sword.name", - "minecraft:netherite_upgrade_smithing_template": "item.netherite_upgrade_smithing_template.name", - "minecraft:netherrack": "tile.netherrack.name", - "minecraft:normal_stone_slab": "tile.stone_slab4.stone.name", - "minecraft:normal_stone_stairs": "tile.normal_stone_stairs.name", - "minecraft:noteblock": "tile.noteblock.name", - "minecraft:oak_boat": "item.boat.oak.name", - "minecraft:oak_chest_boat": "item.chest_boat.oak.name", - "minecraft:oak_fence": "tile.fence.name", - "minecraft:oak_hanging_sign": "item.oak_hanging_sign.name", - "minecraft:oak_leaves": "tile.leaves.oak.name", - "minecraft:oak_log": "tile.log.oak.name", - "minecraft:oak_planks": "tile.planks.oak.name", - "minecraft:oak_sapling": "tile.sapling.oak.name", - "minecraft:oak_sign": "item.sign.name", - "minecraft:oak_slab": "tile.wooden_slab.oak.name", - "minecraft:oak_stairs": "tile.oak_stairs.name", - "minecraft:oak_wood": "tile.wood.oak.name", - "minecraft:observer": "tile.observer.name", - "minecraft:obsidian": "tile.obsidian.name", - "minecraft:ocelot_spawn_egg": "item.spawn_egg.entity.ocelot.name", - "minecraft:ochre_froglight": "tile.ochre_froglight.name", - "minecraft:ominous_bottle": "item.ominous_bottle.name", - "minecraft:ominous_trial_key": "item.ominous_trial_key.name", - "minecraft:open_eyeblossom": "tile.open_eyeblossom.name", - "minecraft:orange_bundle": "item.orange_bundle", - "minecraft:orange_candle": "tile.orange_candle.name", - "minecraft:orange_carpet": "tile.carpet.orange.name", - "minecraft:orange_concrete": "tile.concrete.orange.name", - "minecraft:orange_concrete_powder": "tile.concretePowder.orange.name", - "minecraft:orange_dye": "item.dye.orange.name", - "minecraft:orange_glazed_terracotta": "tile.glazedTerracotta.orange.name", - "minecraft:orange_shulker_box": "tile.shulkerBoxOrange.name", - "minecraft:orange_stained_glass": "tile.stained_glass.orange.name", - "minecraft:orange_stained_glass_pane": "tile.stained_glass_pane.orange.name", - "minecraft:orange_terracotta": "tile.stained_hardened_clay.orange.name", - "minecraft:orange_tulip": "tile.red_flower.tulipOrange.name", - "minecraft:orange_wool": "tile.wool.orange.name", - "minecraft:oxeye_daisy": "tile.red_flower.oxeyeDaisy.name", - "minecraft:oxidized_chiseled_copper": "tile.oxidized_chiseled_copper.name", - "minecraft:oxidized_copper": "tile.oxidized_copper.name", - "minecraft:oxidized_copper_bulb": "tile.oxidized_copper_bulb.name", - "minecraft:oxidized_copper_door": "item.oxidized_copper_door.name", - "minecraft:oxidized_copper_grate": "tile.oxidized_copper_grate.name", - "minecraft:oxidized_copper_trapdoor": "tile.oxidized_copper_trapdoor.name", - "minecraft:oxidized_cut_copper": "tile.oxidized_cut_copper.name", - "minecraft:oxidized_cut_copper_slab": "tile.oxidized_cut_copper_slab.name", - "minecraft:oxidized_cut_copper_stairs": "tile.oxidized_cut_copper_stairs.name", - "minecraft:packed_ice": "tile.packed_ice.name", - "minecraft:packed_mud": "tile.packed_mud.name", - "minecraft:painting": "item.painting.name", - "minecraft:pale_hanging_moss": "tile.pale_hanging_moss.name", - "minecraft:pale_moss_block": "tile.pale_moss_block.name", - "minecraft:pale_moss_carpet": "tile.pale_moss_carpet.name", - "minecraft:pale_oak_boat": "item.boat.pale_oak.name", - "minecraft:pale_oak_button": "tile.pale_oak_button.name", - "minecraft:pale_oak_chest_boat": "item.chest_boat.pale_oak.name", - "minecraft:pale_oak_door": "item.pale_oak_door.name", - "minecraft:pale_oak_fence": "tile.pale_oak_fence.name", - "minecraft:pale_oak_fence_gate": "tile.pale_oak_fence_gate.name", - "minecraft:pale_oak_hanging_sign": "item.pale_oak_hanging_sign.name", - "minecraft:pale_oak_leaves": "tile.pale_oak_leaves.name", - "minecraft:pale_oak_log": "tile.pale_oak_log.name", - "minecraft:pale_oak_planks": "tile.pale_oak_planks.name", - "minecraft:pale_oak_pressure_plate": "tile.pale_oak_pressure_plate.name", - "minecraft:pale_oak_sapling": "tile.pale_oak_sapling.name", - "minecraft:pale_oak_sign": "item.pale_oak_sign.name", - "minecraft:pale_oak_slab": "tile.pale_oak_slab.name", - "minecraft:pale_oak_stairs": "tile.pale_oak_stairs.name", - "minecraft:pale_oak_trapdoor": "tile.pale_oak_trapdoor.name", - "minecraft:pale_oak_wood": "tile.pale_oak_wood.name", - "minecraft:panda_spawn_egg": "item.spawn_egg.entity.panda.name", - "minecraft:paper": "item.paper.name", - "minecraft:parrot_spawn_egg": "item.spawn_egg.entity.parrot.name", - "minecraft:pearlescent_froglight": "tile.pearlescent_froglight.name", - "minecraft:peony": "tile.double_plant.paeonia.name", - "minecraft:petrified_oak_slab": "tile.wooden_slab.oak.name", - "minecraft:phantom_membrane": "item.phantom_membrane.name", - "minecraft:phantom_spawn_egg": "item.spawn_egg.entity.phantom.name", - "minecraft:pig_spawn_egg": "item.spawn_egg.entity.pig.name", - "minecraft:piglin_banner_pattern": "item.banner_pattern.piglin", - "minecraft:piglin_brute_spawn_egg": "item.spawn_egg.entity.piglin_brute.name", - "minecraft:piglin_head": "item.skull.piglin.name", - "minecraft:piglin_spawn_egg": "item.spawn_egg.entity.piglin.name", - "minecraft:pillager_spawn_egg": "item.spawn_egg.entity.pillager.name", - "minecraft:pink_bundle": "item.pink_bundle", - "minecraft:pink_candle": "tile.pink_candle.name", - "minecraft:pink_carpet": "tile.carpet.pink.name", - "minecraft:pink_concrete": "tile.concrete.pink.name", - "minecraft:pink_concrete_powder": "tile.concretePowder.pink.name", - "minecraft:pink_dye": "item.dye.pink.name", - "minecraft:pink_glazed_terracotta": "tile.glazedTerracotta.pink.name", - "minecraft:pink_petals": "tile.pink_petals.name", - "minecraft:pink_shulker_box": "tile.shulkerBoxPink.name", - "minecraft:pink_stained_glass": "tile.stained_glass.pink.name", - "minecraft:pink_stained_glass_pane": "tile.stained_glass_pane.pink.name", - "minecraft:pink_terracotta": "tile.stained_hardened_clay.pink.name", - "minecraft:pink_tulip": "tile.red_flower.tulipPink.name", - "minecraft:pink_wool": "tile.wool.pink.name", - "minecraft:piston": "tile.piston.name", - "minecraft:pitcher_plant": "tile.pitcher_plant.name", - "minecraft:pitcher_pod": "item.pitcher_pod.name", - "minecraft:player_head": "item.skull.char.name", - "minecraft:plenty_pottery_sherd": "item.plenty_pottery_sherd.name", - "minecraft:podzol": "tile.podzol.name", - "minecraft:pointed_dripstone": "tile.pointed_dripstone.name", - "minecraft:poisonous_potato": "item.poisonous_potato.name", - "minecraft:polar_bear_spawn_egg": "item.spawn_egg.entity.polar_bear.name", - "minecraft:polished_andesite": "tile.stone.andesiteSmooth.name", - "minecraft:polished_andesite_slab": "tile.stone_slab3.andesite.smooth.name", - "minecraft:polished_andesite_stairs": "tile.polished_andesite_stairs.name", - "minecraft:polished_basalt": "tile.polished_basalt.name", - "minecraft:polished_blackstone": "tile.polished_blackstone.name", - "minecraft:polished_blackstone_brick_slab": "tile.polished_blackstone_brick_slab.name", - "minecraft:polished_blackstone_brick_stairs": "tile.polished_blackstone_brick_stairs.name", - "minecraft:polished_blackstone_brick_wall": "tile.polished_blackstone_brick_wall.name", - "minecraft:polished_blackstone_bricks": "tile.polished_blackstone_bricks.name", - "minecraft:polished_blackstone_button": "tile.polished_blackstone_button.name", - "minecraft:polished_blackstone_pressure_plate": "tile.polished_blackstone_pressure_plate.name", - "minecraft:polished_blackstone_slab": "tile.polished_blackstone_slab.name", - "minecraft:polished_blackstone_stairs": "tile.polished_blackstone_stairs.name", - "minecraft:polished_blackstone_wall": "tile.polished_blackstone_wall.name", - "minecraft:polished_deepslate": "tile.polished_deepslate.name", - "minecraft:polished_deepslate_slab": "tile.polished_deepslate_slab.name", - "minecraft:polished_deepslate_stairs": "tile.polished_deepslate_stairs.name", - "minecraft:polished_deepslate_wall": "tile.polished_deepslate_wall.name", - "minecraft:polished_diorite": "tile.stone.dioriteSmooth.name", - "minecraft:polished_diorite_slab": "tile.stone_slab3.diorite.smooth.name", - "minecraft:polished_diorite_stairs": "tile.polished_diorite_stairs.name", - "minecraft:polished_granite": "tile.stone.graniteSmooth.name", - "minecraft:polished_granite_slab": "tile.stone_slab3.granite.smooth.name", - "minecraft:polished_granite_stairs": "tile.polished_granite_stairs.name", - "minecraft:polished_tuff": "tile.polished_tuff.name", - "minecraft:polished_tuff_slab": "tile.polished_tuff_slab.name", - "minecraft:polished_tuff_stairs": "tile.polished_tuff_stairs.name", - "minecraft:polished_tuff_wall": "tile.polished_tuff_wall.name", - "minecraft:popped_chorus_fruit": "item.chorus_fruit_popped.name", - "minecraft:poppy": "tile.red_flower.poppy.name", - "minecraft:porkchop": "item.porkchop.name", - "minecraft:potato": "item.potato.name", - "minecraft:potion": "entity.splash_potion.name", - "minecraft:powder_snow_bucket": "item.bucketPowderSnow.name", - "minecraft:prismarine": "tile.prismarine.rough.name", - "minecraft:prismarine_brick_slab": "tile.stone_slab2.prismarine.bricks.name", - "minecraft:prismarine_bricks": "tile.prismarine.bricks.name", - "minecraft:prismarine_bricks_stairs": "tile.prismarine_bricks_stairs.name", - "minecraft:prismarine_crystals": "item.prismarine_crystals.name", - "minecraft:prismarine_shard": "item.prismarine_shard.name", - "minecraft:prismarine_slab": "tile.stone_slab2.prismarine.rough.name", - "minecraft:prismarine_stairs": "tile.prismarine_stairs.name", - "minecraft:prismarine_wall": "tile.cobblestone_wall.prismarine.name", - "minecraft:prize_pottery_sherd": "item.prize_pottery_sherd.name", - "minecraft:pufferfish": "item.pufferfish.name", - "minecraft:pufferfish_bucket": "item.bucketPuffer.name", - "minecraft:pufferfish_spawn_egg": "item.spawn_egg.entity.pufferfish.name", - "minecraft:pumpkin": "tile.pumpkin.name", - "minecraft:pumpkin_pie": "item.pumpkin_pie.name", - "minecraft:pumpkin_seeds": "item.pumpkin_seeds.name", - "minecraft:purple_bundle": "item.purple_bundle", - "minecraft:purple_candle": "tile.purple_candle.name", - "minecraft:purple_carpet": "tile.carpet.purple.name", - "minecraft:purple_concrete": "tile.concrete.purple.name", - "minecraft:purple_concrete_powder": "tile.concretePowder.purple.name", - "minecraft:purple_dye": "item.dye.purple.name", - "minecraft:purple_glazed_terracotta": "tile.glazedTerracotta.purple.name", - "minecraft:purple_shulker_box": "tile.shulkerBoxPurple.name", - "minecraft:purple_stained_glass": "tile.stained_glass.purple.name", - "minecraft:purple_stained_glass_pane": "tile.stained_glass_pane.purple.name", - "minecraft:purple_terracotta": "tile.stained_hardened_clay.purple.name", - "minecraft:purple_wool": "tile.wool.purple.name", - "minecraft:purpur_block": "tile.purpur_block.default.name", - "minecraft:purpur_pillar": "tile.purpur_block.lines.name", - "minecraft:purpur_slab": "tile.stone_slab2.purpur.name", - "minecraft:purpur_stairs": "tile.purpur_stairs.name", - "minecraft:quartz": "item.quartz.name", - "minecraft:quartz_block": "tile.quartz_block.name", - "minecraft:quartz_bricks": "tile.quartz_bricks.name", - "minecraft:quartz_ore": "tile.quartz_ore.name", - "minecraft:quartz_pillar": "tile.quartz_block.lines.name", - "minecraft:quartz_slab": "tile.stone_slab.quartz.name", - "minecraft:quartz_stairs": "tile.quartz_stairs.name", - "minecraft:rabbit": "item.rabbit.name", - "minecraft:rabbit_foot": "item.rabbit_foot.name", - "minecraft:rabbit_hide": "item.rabbit_hide.name", - "minecraft:rabbit_spawn_egg": "item.spawn_egg.entity.rabbit.name", - "minecraft:rabbit_stew": "item.rabbit_stew.name", - "minecraft:rail": "tile.rail.name", - "minecraft:raiser_armor_trim_smithing_template": "item.raiser_armor_trim_smithing_template.name", - "minecraft:ravager_spawn_egg": "item.spawn_egg.entity.ravager.name", - "minecraft:raw_copper": "item.raw_copper.name", - "minecraft:raw_copper_block": "tile.raw_copper_block.name", - "minecraft:raw_gold": "item.raw_gold.name", - "minecraft:raw_gold_block": "tile.raw_gold_block.name", - "minecraft:raw_iron": "item.raw_iron.name", - "minecraft:raw_iron_block": "tile.raw_iron_block.name", - "minecraft:recovery_compass": "item.recovery_compass.name", - "minecraft:red_bundle": "item.red_bundle", - "minecraft:red_candle": "tile.red_candle.name", - "minecraft:red_carpet": "tile.carpet.red.name", - "minecraft:red_concrete": "tile.concrete.red.name", - "minecraft:red_concrete_powder": "tile.concretePowder.red.name", - "minecraft:red_dye": "item.dye.red.name", - "minecraft:red_glazed_terracotta": "tile.glazedTerracotta.red.name", - "minecraft:red_mushroom": "tile.red_mushroom.name", - "minecraft:red_mushroom_block": "tile.red_mushroom_block.name", - "minecraft:red_nether_brick": "tile.red_nether_brick.name", - "minecraft:red_nether_brick_slab": "tile.stone_slab2.red_nether_brick.name", - "minecraft:red_nether_brick_stairs": "tile.red_nether_brick_stairs.name", - "minecraft:red_nether_brick_wall": "tile.cobblestone_wall.red_nether_brick.name", - "minecraft:red_sand": "tile.sand.red.name", - "minecraft:red_sandstone": "tile.red_sandstone.name", - "minecraft:red_sandstone_slab": "tile.stone_slab2.red_sandstone.name", - "minecraft:red_sandstone_stairs": "tile.red_sandstone_stairs.name", - "minecraft:red_sandstone_wall": "tile.cobblestone_wall.red_sandstone.name", - "minecraft:red_shulker_box": "tile.shulkerBoxRed.name", - "minecraft:red_stained_glass": "tile.stained_glass.red.name", - "minecraft:red_stained_glass_pane": "tile.stained_glass_pane.red.name", - "minecraft:red_terracotta": "tile.stained_hardened_clay.red.name", - "minecraft:red_tulip": "tile.red_flower.tulipRed.name", - "minecraft:red_wool": "tile.wool.red.name", - "minecraft:redstone": "item.redstone.name", - "minecraft:redstone_block": "tile.redstone_block.name", - "minecraft:redstone_lamp": "tile.redstone_lamp.name", - "minecraft:redstone_ore": "tile.redstone_ore.name", - "minecraft:redstone_torch": "tile.redstone_torch.name", - "minecraft:reinforced_deepslate": "tile.reinforced_deepslate.name", - "minecraft:repeater": "item.repeater.name", - "minecraft:repeating_command_block": "tile.repeating_command_block.name", - "minecraft:resin_block": "tile.resin_block.name", - "minecraft:resin_brick": "item.resin_brick.name", - "minecraft:resin_brick_slab": "tile.resin_brick_slab.name", - "minecraft:resin_brick_stairs": "tile.resin_brick_stairs.name", - "minecraft:resin_brick_wall": "tile.resin_brick_wall.name", - "minecraft:resin_bricks": "tile.resin_bricks.name", - "minecraft:resin_clump": "tile.resin_clump.name", - "minecraft:respawn_anchor": "tile.respawn_anchor.name", - "minecraft:rib_armor_trim_smithing_template": "item.rib_armor_trim_smithing_template.name", - "minecraft:rose_bush": "tile.double_plant.rose.name", - "minecraft:rotten_flesh": "item.rotten_flesh.name", - "minecraft:saddle": "item.saddle.name", - "minecraft:salmon": "item.salmon.name", - "minecraft:salmon_bucket": "item.bucketSalmon.name", - "minecraft:salmon_spawn_egg": "item.spawn_egg.entity.salmon.name", - "minecraft:sand": "tile.sand.name", - "minecraft:sandstone": "tile.sandstone.name", - "minecraft:sandstone_slab": "tile.stone_slab.sand.name", - "minecraft:sandstone_stairs": "tile.sandstone_stairs.name", - "minecraft:sandstone_wall": "tile.cobblestone_wall.sandstone.name", - "minecraft:scaffolding": "tile.scaffolding.name", - "minecraft:scrape_pottery_sherd": "item.scrape_pottery_sherd.name", - "minecraft:sculk": "tile.sculk.name", - "minecraft:sculk_catalyst": "tile.sculk_catalyst.name", - "minecraft:sculk_sensor": "tile.sculk_sensor.name", - "minecraft:sculk_shrieker": "tile.sculk_shrieker.name", - "minecraft:sculk_vein": "tile.sculk_vein.name", - "minecraft:sea_lantern": "tile.seaLantern.name", - "minecraft:sea_pickle": "tile.sea_pickle.name", - "minecraft:seagrass": "tile.seagrass.seagrass.name", - "minecraft:sentry_armor_trim_smithing_template": "item.sentry_armor_trim_smithing_template.name", - "minecraft:shaper_armor_trim_smithing_template": "item.shaper_armor_trim_smithing_template.name", - "minecraft:sheaf_pottery_sherd": "item.sheaf_pottery_sherd.name", - "minecraft:shears": "item.shears.name", - "minecraft:sheep_spawn_egg": "item.spawn_egg.entity.sheep.name", - "minecraft:shelter_pottery_sherd": "item.shelter_pottery_sherd.name", - "minecraft:shield": "item.shield.name", - "minecraft:short_dry_grass": "tile.short_dry_grass.name", - "minecraft:short_grass": "tile.tallgrass.grass.name", - "minecraft:shroomlight": "tile.shroomlight.name", - "minecraft:shulker_shell": "item.shulker_shell.name", - "minecraft:shulker_spawn_egg": "item.spawn_egg.entity.shulker.name", - "minecraft:silence_armor_trim_smithing_template": "item.silence_armor_trim_smithing_template.name", - "minecraft:silver_glazed_terracotta": "tile.glazedTerracotta.silver.name", - "minecraft:silverfish_spawn_egg": "item.spawn_egg.entity.silverfish.name", - "minecraft:skeleton_horse_spawn_egg": "item.spawn_egg.entity.skeleton_horse.name", - "minecraft:skeleton_skull": "item.skull.skeleton.name", - "minecraft:skeleton_spawn_egg": "item.spawn_egg.entity.skeleton.name", - "minecraft:skull_banner_pattern": "item.banner_pattern.skull", - "minecraft:skull_pottery_sherd": "item.skull_pottery_sherd.name", - "minecraft:slime": "tile.slime.name", - "minecraft:slime_ball": "item.slime_ball.name", - "minecraft:slime_spawn_egg": "item.spawn_egg.entity.slime.name", - "minecraft:small_amethyst_bud": "tile.small_amethyst_bud.name", - "minecraft:small_dripleaf_block": "tile.small_dripleaf_block.name", - "minecraft:smithing_table": "tile.smithing_table.name", - "minecraft:smoker": "tile.smoker.name", - "minecraft:smooth_basalt": "tile.smooth_basalt.name", - "minecraft:smooth_quartz": "tile.quartz_block.smooth.name", - "minecraft:smooth_quartz_slab": "tile.stone_slab4.smooth_quartz.name", - "minecraft:smooth_quartz_stairs": "tile.smooth_quartz_stairs.name", - "minecraft:smooth_red_sandstone": "tile.red_sandstone.smooth.name", - "minecraft:smooth_red_sandstone_slab": "tile.stone_slab3.red_sandstone.smooth.name", - "minecraft:smooth_red_sandstone_stairs": "tile.smooth_red_sandstone_stairs.name", - "minecraft:smooth_sandstone": "tile.sandstone.smooth.name", - "minecraft:smooth_sandstone_slab": "tile.stone_slab2.sandstone.smooth.name", - "minecraft:smooth_sandstone_stairs": "tile.smooth_sandstone_stairs.name", - "minecraft:smooth_stone": "tile.smooth_stone.name", - "minecraft:smooth_stone_slab": "tile.stone_slab.stone.name", - "minecraft:sniffer_egg": "tile.sniffer_egg.name", - "minecraft:sniffer_spawn_egg": "item.spawn_egg.entity.sniffer.name", - "minecraft:snort_pottery_sherd": "item.snort_pottery_sherd.name", - "minecraft:snout_armor_trim_smithing_template": "item.snout_armor_trim_smithing_template.name", - "minecraft:snow": "tile.snow.name", - "minecraft:snow_golem_spawn_egg": "item.spawn_egg.entity.snow_golem.name", - "minecraft:snow_layer": "tile.snow_layer.name", - "minecraft:snowball": "item.snowball.name", - "minecraft:soul_campfire": "tile.soul_campfire.name", - "minecraft:soul_lantern": "tile.soul_lantern.name", - "minecraft:soul_sand": "tile.soul_sand.name", - "minecraft:soul_soil": "tile.soul_soil.name", - "minecraft:soul_torch": "tile.soul_torch.name", - "minecraft:spider_eye": "item.spider_eye.name", - "minecraft:spider_spawn_egg": "item.spawn_egg.entity.spider.name", - "minecraft:spire_armor_trim_smithing_template": "item.spire_armor_trim_smithing_template.name", - "minecraft:splash_potion": "entity.splash_potion.name", - "minecraft:sponge": "tile.sponge.dry.name", - "minecraft:spore_blossom": "tile.spore_blossom.name", - "minecraft:spruce_boat": "item.boat.spruce.name", - "minecraft:spruce_button": "tile.spruce_button.name", - "minecraft:spruce_chest_boat": "item.chest_boat.spruce.name", - "minecraft:spruce_door": "item.spruce_door.name", - "minecraft:spruce_fence": "tile.spruceFence.name", - "minecraft:spruce_fence_gate": "tile.spruce_fence_gate.name", - "minecraft:spruce_hanging_sign": "item.spruce_hanging_sign.name", - "minecraft:spruce_leaves": "tile.leaves.spruce.name", - "minecraft:spruce_log": "tile.log.spruce.name", - "minecraft:spruce_planks": "tile.planks.spruce.name", - "minecraft:spruce_pressure_plate": "tile.spruce_pressure_plate.name", - "minecraft:spruce_sapling": "tile.sapling.spruce.name", - "minecraft:spruce_sign": "item.spruce_sign.name", - "minecraft:spruce_slab": "tile.wooden_slab.spruce.name", - "minecraft:spruce_stairs": "tile.spruce_stairs.name", - "minecraft:spruce_trapdoor": "tile.spruce_trapdoor.name", - "minecraft:spruce_wood": "tile.wood.spruce.name", - "minecraft:spyglass": "item.spyglass.name", - "minecraft:squid_spawn_egg": "item.spawn_egg.entity.squid.name", - "minecraft:stick": "item.stick.name", - "minecraft:sticky_piston": "tile.sticky_piston.name", - "minecraft:stone": "tile.stone.stone.name", - "minecraft:stone_axe": "item.stone_axe.name", - "minecraft:stone_brick_slab": "tile.stone_slab.smoothStoneBrick.name", - "minecraft:stone_brick_stairs": "tile.stone_brick_stairs.name", - "minecraft:stone_brick_wall": "tile.cobblestone_wall.stone_brick.name", - "minecraft:stone_bricks": "tile.stonebrick.name", - "minecraft:stone_button": "tile.stone_button.name", - "minecraft:stone_hoe": "item.stone_hoe.name", - "minecraft:stone_pickaxe": "item.stone_pickaxe.name", - "minecraft:stone_pressure_plate": "tile.stone_pressure_plate.name", - "minecraft:stone_shovel": "item.stone_shovel.name", - "minecraft:stone_stairs": "tile.stone_stairs.name", - "minecraft:stone_sword": "item.stone_sword.name", - "minecraft:stonecutter_block": "tile.stonecutter_block.name", - "minecraft:stray_spawn_egg": "item.spawn_egg.entity.stray.name", - "minecraft:strider_spawn_egg": "item.spawn_egg.entity.strider.name", - "minecraft:string": "item.string.name", - "minecraft:stripped_acacia_log": "tile.stripped_acacia_log.name", - "minecraft:stripped_acacia_wood": "tile.wood.stripped.acacia.name", - "minecraft:stripped_bamboo_block": "tile.stripped_bamboo_block.name", - "minecraft:stripped_birch_log": "tile.stripped_birch_log.name", - "minecraft:stripped_birch_wood": "tile.wood.stripped.birch.name", - "minecraft:stripped_cherry_log": "tile.stripped_cherry_log.name", - "minecraft:stripped_cherry_wood": "tile.stripped_cherry_wood.name", - "minecraft:stripped_crimson_hyphae": "tile.stripped_crimson_hyphae.name", - "minecraft:stripped_crimson_stem": "tile.stripped_crimson_stem.name", - "minecraft:stripped_dark_oak_log": "tile.stripped_dark_oak_log.name", - "minecraft:stripped_dark_oak_wood": "tile.wood.stripped.dark_oak.name", - "minecraft:stripped_jungle_log": "tile.stripped_jungle_log.name", - "minecraft:stripped_jungle_wood": "tile.wood.stripped.jungle.name", - "minecraft:stripped_mangrove_log": "tile.stripped_mangrove_log.name", - "minecraft:stripped_mangrove_wood": "tile.stripped_mangrove_wood.name", - "minecraft:stripped_oak_log": "tile.stripped_oak_log.name", - "minecraft:stripped_oak_wood": "tile.wood.stripped.oak.name", - "minecraft:stripped_pale_oak_log": "tile.stripped_pale_oak_log.name", - "minecraft:stripped_pale_oak_wood": "tile.stripped_pale_oak_wood.name", - "minecraft:stripped_spruce_log": "tile.stripped_spruce_log.name", - "minecraft:stripped_spruce_wood": "tile.wood.stripped.spruce.name", - "minecraft:stripped_warped_hyphae": "tile.stripped_warped_hyphae.name", - "minecraft:stripped_warped_stem": "tile.stripped_warped_stem.name", - "minecraft:structure_block": "tile.structure_block.name", - "minecraft:structure_void": "tile.structure_void.name", - "minecraft:sugar": "item.sugar.name", - "minecraft:sugar_cane": "tile.reeds.name", - "minecraft:sunflower": "tile.double_plant.sunflower.name", - "minecraft:suspicious_gravel": "tile.suspicious_gravel.name", - "minecraft:suspicious_sand": "tile.suspicious_sand.name", - "minecraft:suspicious_stew": "item.suspicious_stew.name", - "minecraft:sweet_berries": "item.sweet_berries.name", - "minecraft:tadpole_bucket": "item.bucketTadpole.name", - "minecraft:tadpole_spawn_egg": "item.spawn_egg.entity.tadpole.name", - "minecraft:tall_dry_grass": "tile.tall_dry_grass.name", - "minecraft:tall_grass": "tile.double_plant.grass.name", - "minecraft:target": "tile.target.name", - "minecraft:tide_armor_trim_smithing_template": "item.tide_armor_trim_smithing_template.name", - "minecraft:tinted_glass": "tile.tinted_glass.name", - "minecraft:tnt": "tile.tnt.name", - "minecraft:tnt_minecart": "item.tnt_minecart.name", - "minecraft:torch": "tile.torch.name", - "minecraft:torchflower": "tile.torchflower.name", - "minecraft:torchflower_seeds": "item.torchflower_seeds.name", - "minecraft:totem_of_undying": "item.totem.name", - "minecraft:trader_llama_spawn_egg": "item.spawn_egg.entity.trader_llama.name", - "minecraft:trapdoor": "tile.trapdoor.name", - "minecraft:trapped_chest": "tile.trapped_chest.name", - "minecraft:trial_key": "item.trial_key.name", - "minecraft:trial_spawner": "tile.trial_spawner.name", - "minecraft:trident": "item.trident.name", - "minecraft:tripwire_hook": "tile.tripwire_hook.name", - "minecraft:tropical_fish": "item.clownfish.name", - "minecraft:tropical_fish_bucket": "item.bucketTropical.name", - "minecraft:tropical_fish_spawn_egg": "item.spawn_egg.entity.tropicalfish.name", - "minecraft:tube_coral": "tile.coral.blue.name", - "minecraft:tube_coral_block": "tile.coral_block.blue.name", - "minecraft:tube_coral_fan": "tile.coral_fan.blue_fan.name", - "minecraft:tuff": "tile.tuff.name", - "minecraft:tuff_brick_slab": "tile.tuff_brick_slab.name", - "minecraft:tuff_brick_stairs": "tile.tuff_brick_stairs.name", - "minecraft:tuff_brick_wall": "tile.tuff_brick_wall.name", - "minecraft:tuff_bricks": "tile.tuff_bricks.name", - "minecraft:tuff_slab": "tile.tuff_slab.name", - "minecraft:tuff_stairs": "tile.tuff_stairs.name", - "minecraft:tuff_wall": "tile.tuff_wall.name", - "minecraft:turtle_egg": "tile.turtle_egg.name", - "minecraft:turtle_helmet": "item.turtle_helmet.name", - "minecraft:turtle_scute": "item.turtle_shell_piece.name", - "minecraft:turtle_spawn_egg": "item.spawn_egg.entity.turtle.name", - "minecraft:twisting_vines": "tile.twisting_vines.name", - "minecraft:undyed_shulker_box": "tile.shulkerBox.name", - "minecraft:vault": "tile.vault.name", - "minecraft:verdant_froglight": "tile.verdant_froglight.name", - "minecraft:vex_armor_trim_smithing_template": "item.vex_armor_trim_smithing_template.name", - "minecraft:vex_spawn_egg": "item.spawn_egg.entity.vex.name", - "minecraft:villager_spawn_egg": "item.spawn_egg.entity.villager.name", - "minecraft:vindicator_spawn_egg": "item.spawn_egg.entity.vindicator.name", - "minecraft:vine": "tile.vine.name", - "minecraft:wandering_trader_spawn_egg": "item.spawn_egg.entity.wandering_trader.name", - "minecraft:ward_armor_trim_smithing_template": "item.ward_armor_trim_smithing_template.name", - "minecraft:warden_spawn_egg": "item.spawn_egg.entity.warden.name", - "minecraft:warped_button": "tile.warped_button.name", - "minecraft:warped_door": "item.warped_door.name", - "minecraft:warped_fence": "tile.warped_fence.name", - "minecraft:warped_fence_gate": "tile.warped_fence_gate.name", - "minecraft:warped_fungus": "tile.warped_fungus.name", - "minecraft:warped_fungus_on_a_stick": "item.warped_fungus_on_a_stick.name", - "minecraft:warped_hanging_sign": "item.warped_hanging_sign.name", - "minecraft:warped_hyphae": "tile.warped_hyphae.name", - "minecraft:warped_nylium": "tile.warped_nylium.name", - "minecraft:warped_planks": "tile.warped_planks.name", - "minecraft:warped_pressure_plate": "tile.warped_pressure_plate.name", - "minecraft:warped_roots": "tile.warped_roots.warpedRoots.name", - "minecraft:warped_sign": "item.warped_sign.name", - "minecraft:warped_slab": "tile.warped_slab.name", - "minecraft:warped_stairs": "tile.warped_stairs.name", - "minecraft:warped_stem": "tile.warped_stem.name", - "minecraft:warped_trapdoor": "tile.warped_trapdoor.name", - "minecraft:warped_wart_block": "tile.warped_wart_block.name", - "minecraft:water_bucket": "item.bucketWater.name", - "minecraft:waterlily": "tile.waterlily.name", - "minecraft:waxed_chiseled_copper": "tile.waxed_chiseled_copper.name", - "minecraft:waxed_copper": "tile.waxed_copper.name", - "minecraft:waxed_copper_bulb": "tile.waxed_copper_bulb.name", - "minecraft:waxed_copper_door": "item.waxed_copper_door.name", - "minecraft:waxed_copper_grate": "tile.waxed_copper_grate.name", - "minecraft:waxed_copper_trapdoor": "tile.waxed_copper_trapdoor.name", - "minecraft:waxed_cut_copper": "tile.waxed_cut_copper.name", - "minecraft:waxed_cut_copper_slab": "tile.waxed_cut_copper_slab.name", - "minecraft:waxed_cut_copper_stairs": "tile.waxed_cut_copper_stairs.name", - "minecraft:waxed_exposed_chiseled_copper": "tile.waxed_exposed_chiseled_copper.name", - "minecraft:waxed_exposed_copper": "tile.waxed_exposed_copper.name", - "minecraft:waxed_exposed_copper_bulb": "tile.waxed_exposed_copper_bulb.name", - "minecraft:waxed_exposed_copper_door": "item.waxed_exposed_copper_door.name", - "minecraft:waxed_exposed_copper_grate": "tile.waxed_exposed_copper_grate.name", - "minecraft:waxed_exposed_copper_trapdoor": "tile.waxed_exposed_copper_trapdoor.name", - "minecraft:waxed_exposed_cut_copper": "tile.waxed_exposed_cut_copper.name", - "minecraft:waxed_exposed_cut_copper_slab": "tile.waxed_exposed_cut_copper_slab.name", - "minecraft:waxed_exposed_cut_copper_stairs": "tile.waxed_exposed_cut_copper_stairs.name", - "minecraft:waxed_oxidized_chiseled_copper": "tile.waxed_oxidized_chiseled_copper.name", - "minecraft:waxed_oxidized_copper": "tile.waxed_oxidized_copper.name", - "minecraft:waxed_oxidized_copper_bulb": "tile.waxed_oxidized_copper_bulb.name", - "minecraft:waxed_oxidized_copper_door": "item.waxed_oxidized_copper_door.name", - "minecraft:waxed_oxidized_copper_grate": "tile.waxed_oxidized_copper_grate.name", - "minecraft:waxed_oxidized_copper_trapdoor": "tile.waxed_oxidized_copper_trapdoor.name", - "minecraft:waxed_oxidized_cut_copper": "tile.waxed_oxidized_cut_copper.name", - "minecraft:waxed_oxidized_cut_copper_slab": "tile.waxed_oxidized_cut_copper_slab.name", - "minecraft:waxed_oxidized_cut_copper_stairs": "tile.waxed_oxidized_cut_copper_stairs.name", - "minecraft:waxed_weathered_chiseled_copper": "tile.waxed_weathered_chiseled_copper.name", - "minecraft:waxed_weathered_copper": "tile.waxed_weathered_copper.name", - "minecraft:waxed_weathered_copper_bulb": "tile.waxed_weathered_copper_bulb.name", - "minecraft:waxed_weathered_copper_door": "item.waxed_weathered_copper_door.name", - "minecraft:waxed_weathered_copper_grate": "tile.waxed_weathered_copper_grate.name", - "minecraft:waxed_weathered_copper_trapdoor": "tile.waxed_weathered_copper_trapdoor.name", - "minecraft:waxed_weathered_cut_copper": "tile.waxed_weathered_cut_copper.name", - "minecraft:waxed_weathered_cut_copper_slab": "tile.waxed_weathered_cut_copper_slab.name", - "minecraft:waxed_weathered_cut_copper_stairs": "tile.waxed_weathered_cut_copper_stairs.name", - "minecraft:wayfinder_armor_trim_smithing_template": "item.wayfinder_armor_trim_smithing_template.name", - "minecraft:weathered_chiseled_copper": "tile.weathered_chiseled_copper.name", - "minecraft:weathered_copper": "tile.weathered_copper.name", - "minecraft:weathered_copper_bulb": "tile.weathered_copper_bulb.name", - "minecraft:weathered_copper_door": "item.weathered_copper_door.name", - "minecraft:weathered_copper_grate": "tile.weathered_copper_grate.name", - "minecraft:weathered_copper_trapdoor": "tile.weathered_copper_trapdoor.name", - "minecraft:weathered_cut_copper": "tile.weathered_cut_copper.name", - "minecraft:weathered_cut_copper_slab": "tile.weathered_cut_copper_slab.name", - "minecraft:weathered_cut_copper_stairs": "tile.weathered_cut_copper_stairs.name", - "minecraft:web": "tile.web.name", - "minecraft:weeping_vines": "tile.weeping_vines.name", - "minecraft:wet_sponge": "tile.sponge.wet.name", - "minecraft:wheat": "item.wheat.name", - "minecraft:wheat_seeds": "item.wheat_seeds.name", - "minecraft:white_bundle": "item.white_bundle", - "minecraft:white_candle": "tile.white_candle.name", - "minecraft:white_carpet": "tile.carpet.white.name", - "minecraft:white_concrete": "tile.concrete.white.name", - "minecraft:white_concrete_powder": "tile.concretePowder.white.name", - "minecraft:white_dye": "item.dye.white.name", - "minecraft:white_glazed_terracotta": "tile.glazedTerracotta.white.name", - "minecraft:white_shulker_box": "tile.shulkerBoxWhite.name", - "minecraft:white_stained_glass": "tile.stained_glass.white.name", - "minecraft:white_stained_glass_pane": "tile.stained_glass_pane.white.name", - "minecraft:white_terracotta": "tile.stained_hardened_clay.white.name", - "minecraft:white_tulip": "tile.red_flower.tulipWhite.name", - "minecraft:white_wool": "tile.wool.white.name", - "minecraft:wild_armor_trim_smithing_template": "item.wild_armor_trim_smithing_template.name", - "minecraft:wildflowers": "tile.wildflowers.name", - "minecraft:wind_charge": "item.wind_charge.name", - "minecraft:witch_spawn_egg": "item.spawn_egg.entity.witch.name", - "minecraft:wither_rose": "tile.wither_rose.name", - "minecraft:wither_skeleton_skull": "item.skull.wither.name", - "minecraft:wither_skeleton_spawn_egg": "item.spawn_egg.entity.wither_skeleton.name", - "minecraft:wither_spawn_egg": "item.spawn_egg.entity.wither.name", - "minecraft:wolf_armor": "item.wolf_armor.name", - "minecraft:wolf_spawn_egg": "item.spawn_egg.entity.wolf.name", - "minecraft:wooden_axe": "item.wooden_axe.name", - "minecraft:wooden_button": "tile.wooden_button.name", - "minecraft:wooden_door": "item.wooden_door.name", - "minecraft:wooden_hoe": "item.wooden_hoe.name", - "minecraft:wooden_pickaxe": "item.wooden_pickaxe.name", - "minecraft:wooden_pressure_plate": "tile.wooden_pressure_plate.name", - "minecraft:wooden_shovel": "item.wooden_shovel.name", - "minecraft:wooden_sword": "item.wooden_sword.name", - "minecraft:writable_book": "item.writable_book.name", - "minecraft:yellow_bundle": "item.yellow_bundle", - "minecraft:yellow_candle": "tile.yellow_candle.name", - "minecraft:yellow_carpet": "tile.carpet.yellow.name", - "minecraft:yellow_concrete": "tile.concrete.yellow.name", - "minecraft:yellow_concrete_powder": "tile.concretePowder.yellow.name", - "minecraft:yellow_dye": "item.dye.yellow.name", - "minecraft:yellow_glazed_terracotta": "tile.glazedTerracotta.yellow.name", - "minecraft:yellow_shulker_box": "tile.shulkerBoxYellow.name", - "minecraft:yellow_stained_glass": "tile.stained_glass.yellow.name", - "minecraft:yellow_stained_glass_pane": "tile.stained_glass_pane.yellow.name", - "minecraft:yellow_terracotta": "tile.stained_hardened_clay.yellow.name", - "minecraft:yellow_wool": "tile.wool.yellow.name", - "minecraft:zoglin_spawn_egg": "item.spawn_egg.entity.zoglin.name", - "minecraft:zombie_head": "item.skull.zombie.name", - "minecraft:zombie_horse_spawn_egg": "item.spawn_egg.entity.zombie_horse.name", - "minecraft:zombie_pigman_spawn_egg": "item.spawn_egg.entity.zombie_pigman.name", - "minecraft:zombie_spawn_egg": "item.spawn_egg.entity.zombie.name", - "minecraft:zombie_villager_spawn_egg": "item.spawn_egg.entity.zombie_villager.name", "minecraft:aqua_affinity": "enchantment.waterWorker", "minecraft:bane_of_arthropods": "enchantment.damage.arthropods", "minecraft:binding": "enchantment.curse.binding", @@ -1436,67 +59,7 @@ export const blockItemsLangJson: Record = { "lw:key": "item.lw:key", "lw:menu": "item.lw:menu", "lw:money": "item.lw:money", - "lw:cannon_spawn_egg": "item.spawn_egg.entity.lw:cannon.name", - "minecraft:Lingering_FireResistance_potion": "potion.fireResistance.linger.name", - "minecraft:Regular_FireResistance_potion": "potion.fireResistance.name", - "minecraft:Splash_FireResistance_potion": "potion.fireResistance.splash.name", - "minecraft:Lingering_Harming_potion": "potion.harm.linger.name", - "minecraft:Regular_Harming_potion": "potion.harm.name", - "minecraft:Splash_Harming_potion": "potion.harm.splash.name", - "minecraft:Lingering_Healing_potion": "potion.regeneration.linger.name", - "minecraft:Regular_Healing_potion": "potion.regeneration.name", - "minecraft:Splash_Healing_potion": "potion.regeneration.splash.name", - "minecraft:Lingering_Infested_potion": "potion.infested.linger.name", - "minecraft:Regular_Infested_potion": "potion.infested.name", - "minecraft:Splash_Infested_potion": "potion.infested.splash.name", - "minecraft:Lingering_Invisibility_potion": "potion.invisibility.linger.name", - "minecraft:Regular_Invisibility_potion": "potion.invisibility.name", - "minecraft:Splash_Invisibility_potion": "potion.invisibility.splash.name", - "minecraft:Lingering_Leaping_potion": "potion.jump.linger.name", - "minecraft:Regular_Leaping_potion": "potion.jump.name", - "minecraft:Splash_Leaping_potion": "potion.jump.splash.name", - "minecraft:Lingering_NightVision_potion": "potion.nightVision.linger.name", - "minecraft:Regular_NightVision_potion": "potion.nightVision.name", - "minecraft:Splash_NightVision_potion": "potion.nightVision.splash.name", - "minecraft:Lingering_None_potion": "potion.awkward.linger.name", - "minecraft:Regular_None_potion": "potion.awkward.name", - "minecraft:Splash_None_potion": "potion.awkward.splash.name", - "minecraft:Lingering_Oozing_potion": "potion.oozing.linger.name", - "minecraft:Regular_Oozing_potion": "potion.oozing.name", - "minecraft:Splash_Oozing_potion": "potion.oozing.splash.name", - "minecraft:Lingering_Poison_potion": "potion.poison.linger.name", - "minecraft:Regular_Poison_potion": "potion.poison.name", - "minecraft:Splash_Poison_potion": "potion.poison.splash.name", - "minecraft:Lingering_SlowFalling_potion": "potion.slowFalling.linger.name", - "minecraft:Regular_SlowFalling_potion": "potion.slowFalling.name", - "minecraft:Splash_SlowFalling_potion": "potion.slowFalling.splash.name", - "minecraft:Lingering_Slowing_potion": "potion.moveSlowdown.linger.name", - "minecraft:Regular_Slowing_potion": "potion.moveSlowdown.name", - "minecraft:Splash_Slowing_potion": "potion.moveSlowdown.splash.name", - "minecraft:Lingering_Strength_potion": "potion.damageBoost.linger.name", - "minecraft:Regular_Strength_potion": "potion.damageBoost.name", - "minecraft:Splash_Strength_potion": "potion.damageBoost.splash.name", - "minecraft:Lingering_Swiftness_potion": "potion.moveSpeed.linger.name", - "minecraft:Regular_Swiftness_potion": "potion.moveSpeed.name", - "minecraft:Splash_Swiftness_potion": "potion.moveSpeed.splash.name", - "minecraft:Lingering_TurtleMaster_potion": "potion.turtleMaster.linger.name", - "minecraft:Regular_TurtleMaster_potion": "potion.turtleMaster.name", - "minecraft:Splash_TurtleMaster_potion": "potion.turtleMaster.splash.name", - "minecraft:Lingering_WaterBreath_potion": "potion.waterBreathing.linger.name", - "minecraft:Regular_WaterBreath_potion": "potion.waterBreathing.name", - "minecraft:Splash_WaterBreath_potion": "potion.waterBreathing.splash.name", - "minecraft:Lingering_Weakness_potion": "potion.weakness.linger.name", - "minecraft:Regular_Weakness_potion": "potion.weakness.name", - "minecraft:Splash_Weakness_potion": "potion.weakness.splash.name", - "minecraft:Lingering_Weaving_potion": "potion.weaving.linger.name", - "minecraft:Regular_Weaving_potion": "potion.weaving.name", - "minecraft:Splash_Weaving_potion": "potion.weaving.splash.name", - "minecraft:Lingering_WindCharged_potion": "potion.windCharged.linger.name", - "minecraft:Regular_WindCharged_potion": "potion.windCharged.name", - "minecraft:Splash_WindCharged_potion": "potion.windCharged.splash.name", - "minecraft:Lingering_Wither_potion": "potion.wither.linger.name", - "minecraft:Regular_Wither_potion": "potion.wither.name", - "minecraft:Splash_Wither_potion": "potion.wither.splash.name" + "lw:cannon_spawn_egg": "item.spawn_egg.entity.lw:cannon.name" } export const langs: Langs = { @@ -2673,6 +1236,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Diamond Horse Armor", "item.horsearmorgold.name": "Gold Horse Armor", "item.horsearmoriron.name": "Iron Horse Armor", + "item.copper_horse_armor.name": "Copper Horse Armor", "item.horsearmorleather.name": "Leather Horse Armor", "item.gold_ingot.name": "Gold Ingot", "item.iron_ingot.name": "Iron Ingot", @@ -2856,6 +1420,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Creator", "item.record_creator_music_box.desc": "Lena Raine - Creator (Music Box)", "item.record_precipice.desc": "Aaron Cherof - Precipice", + "item.record_tears.desc": "Amos Roddy - Tears", + "item.record_lava_chicken.desc": "Hyper Potions - Lava Chicken", "item.redstone.name": "Redstone Dust", "item.reeds.name": "Sugar Cane", "item.kelp.name": "Kelp", @@ -3655,6 +2221,13 @@ export const langs: Langs = { "tile.glowstone.name": "Glowstone", "tile.glow_lichen.name": "Glow Lichen", "tile.lightning_rod.name": "Lightning Rod", + "tile.exposed_lightning_rod.name": "Exposed Lightning Rod", + "tile.weathered_lightning_rod.name": "Weathered Lightning Rod", + "tile.oxidized_lightning_rod.name": "Oxidized Lightning Rod", + "tile.waxed_lightning_rod.name": "Waxed Lightning Rod", + "tile.waxed_exposed_lightning_rod.name": "Waxed Exposed Lightning Rod", + "tile.waxed_weathered_lightning_rod.name": "Waxed Weathered Lightning Rod", + "tile.waxed_oxidized_lightning_rod.name": "Waxed Oxidized Lightning Rod", "tile.lit_pumpkin.name": "Jack o'Lantern", "tile.lockedchest.name": "Locked chest", "tile.log.acacia.name": "Acacia Log", @@ -4270,7 +2843,92 @@ export const langs: Langs = { "item.brown_egg.name": "Brown Egg", "item.blue_egg.name": "Blue Egg", "tile.short_dry_grass.name": "Short Dry Grass", - "tile.tall_dry_grass.name": "Tall Dry Grass" + "tile.tall_dry_grass.name": "Tall Dry Grass", + "entity.happy_ghast.name": "Happy Ghast", + "item.spawn_egg.entity.happy_ghast.name": "Happy Ghast Spawn Egg", + "tile.dried_ghast.name": "Dried Ghast", + "item.black_harness.name": "Black Harness", + "item.blue_harness.name": "Blue Harness", + "item.brown_harness.name": "Brown Harness", + "item.cyan_harness.name": "Cyan Harness", + "item.gray_harness.name": "Gray Harness", + "item.green_harness.name": "Green Harness", + "item.light_blue_harness.name": "Light Blue Harness", + "item.light_gray_harness.name": "Light Gray Harness", + "item.lime_harness.name": "Lime Harness", + "item.magenta_harness.name": "Magenta Harness", + "item.orange_harness.name": "Orange Harness", + "item.pink_harness.name": "Pink Harness", + "item.purple_harness.name": "Purple Harness", + "item.red_harness.name": "Red Harness", + "item.white_harness.name": "White Harness", + "item.yellow_harness.name": "Yellow Harness", + "entity.copper_golem.name": "Copper Golem", + "item.spawn_egg.entity.copper_golem.name": "Copper Golem Spawn Egg", + "item.copper_nugget.name": "Copper Nugget", + "item.copper_sword.name": "Copper Sword", + "item.copper_pickaxe.name": "Copper Pickaxe", + "item.copper_axe.name": "Copper Axe", + "item.copper_shovel.name": "Copper Shovel", + "item.copper_hoe.name": "Copper Hoe", + "item.copper_boots.name": "Copper Boots", + "item.copper_leggings.name": "Copper Leggings", + "item.copper_chestplate.name": "Copper Chestplate", + "item.copper_helmet.name": "Copper Helmet", + "tile.copper_chest.name": "Copper Chest", + "tile.exposed_copper_chest.name": "Exposed Copper Chest", + "tile.weathered_copper_chest.name": "Weathered Copper Chest", + "tile.oxidized_copper_chest.name": "Oxidized Copper Chest", + "tile.waxed_copper_chest.name": "Waxed Copper Chest", + "tile.waxed_exposed_copper_chest.name": "Waxed Exposed Copper Chest", + "tile.waxed_weathered_copper_chest.name": "Waxed Weathered Copper Chest", + "tile.waxed_oxidized_copper_chest.name": "Waxed Oxidized Copper Chest", + "tile.acacia_shelf.name": "Acacia Shelf", + "tile.bamboo_shelf.name": "Bamboo Shelf", + "tile.birch_shelf.name": "Birch Shelf", + "tile.cherry_shelf.name": "Cherry Shelf", + "tile.crimson_shelf.name": "Crimson Shelf", + "tile.dark_oak_shelf.name": "Dark Oak Shelf", + "tile.jungle_shelf.name": "Jungle Shelf", + "tile.mangrove_shelf.name": "Mangrove Shelf", + "tile.oak_shelf.name": "Oak Shelf", + "tile.pale_oak_shelf.name": "Pale Oak Shelf", + "tile.spruce_shelf.name": "Spruce Shelf", + "tile.warped_shelf.name": "Warped Shelf", + "tile.copper_golem_statue.name": "Copper Golem Statue", + "tile.exposed_copper_golem_statue.name": "Exposed Copper Golem Statue", + "tile.weathered_copper_golem_statue.name": "Weathered Copper Golem Statue", + "tile.oxidized_copper_golem_statue.name": "Oxidized Copper Golem Statue", + "tile.waxed_copper_golem_statue.name": "Waxed Copper Golem Statue", + "tile.waxed_exposed_copper_golem_statue.name": "Waxed Exposed Copper Golem Statue", + "tile.waxed_weathered_copper_golem_statue.name": "Waxed Weathered Copper Golem Statue", + "tile.waxed_oxidized_copper_golem_statue.name": "Waxed Oxidized Copper Golem Statue", + "tile.copper_chain.name": "Copper Chain", + "tile.exposed_copper_chain.name": "Exposed Copper Chain", + "tile.weathered_copper_chain.name": "Weathered Copper Chain", + "tile.oxidized_copper_chain.name": "Oxidized Copper Chain", + "tile.waxed_copper_chain.name": "Waxed Copper Chain", + "tile.waxed_exposed_copper_chain.name": "Waxed Exposed Copper Chain", + "tile.waxed_weathered_copper_chain.name": "Waxed Weathered Copper Chain", + "tile.waxed_oxidized_copper_chain.name": "Waxed Oxidized Copper Chain", + "tile.copper_bars.name": "Copper Bars", + "tile.exposed_copper_bars.name": "Exposed Copper Bars", + "tile.weathered_copper_bars.name": "Weathered Copper Bars", + "tile.oxidized_copper_bars.name": "Oxidized Copper Bars", + "tile.waxed_copper_bars.name": "Waxed Copper Bars", + "tile.waxed_exposed_copper_bars.name": "Waxed Exposed Copper Bars", + "tile.waxed_weathered_copper_bars.name": "Waxed Weathered Copper Bars", + "tile.waxed_oxidized_copper_bars.name": "Waxed Oxidized Copper Bars", + "tile.copper_lantern.name": "Copper Lantern", + "tile.exposed_copper_lantern.name": "Exposed Copper Lantern", + "tile.weathered_copper_lantern.name": "Weathered Copper Lantern", + "tile.oxidized_copper_lantern.name": "Oxidized Copper Lantern", + "tile.waxed_copper_lantern.name": "Waxed Copper Lantern", + "tile.waxed_exposed_copper_lantern.name": "Waxed Exposed Copper Lantern", + "tile.waxed_weathered_copper_lantern.name": "Waxed Weathered Copper Lantern", + "tile.waxed_oxidized_copper_lantern.name": "Waxed Oxidized Copper Lantern", + "tile.copper_torch.name": "Copper Torch", + "tile.iron_chain.name": "Iron Chain" }, "ru_RU": { "item.lw:menu": "§b§lМеню§r~LINEBREAK~§7Использовать", @@ -4347,7 +3005,7 @@ export const langs: Langs = { "multiplayer.player.changeToPersona": "§7%s §8Скин сменён", "multiplayer.player.changeToSkin": "§7%s §8Скин сменён на внешний", "entity.area_effect_cloud.name": "Облако области эффекта", - "entity.armadillo.name": "«Армадильо»", + "entity.armadillo.name": "Броненосец", "entity.armor_stand.name": "Стойка для доспехов", "entity.arrow.name": "Стрела", "entity.bat.name": "Летучая мышь", @@ -4357,7 +3015,7 @@ export const langs: Langs = { "entity.bogged.name": "Увязнувший", "entity.breeze.name": "Вихрь", "entity.breeze_wind_charge_projectile.name": "Заряд ветра", - "entity.cat.name": "Кот", + "entity.cat.name": "Кошка", "entity.cave_spider.name": "Пещерный паук", "entity.chicken.name": "Курица", "entity.cow.name": "Корова", @@ -4391,7 +3049,7 @@ export const langs: Langs = { "entity.tropicalfish.name": "Тропическая рыба", "entity.axolotl.name": "Аксолотль", "entity.ghast.name": "Гаст", - "entity.glow_squid.name": "Сияющий спрут", + "entity.glow_squid.name": "Светящийся спрут", "entity.piglin_brute.name": "Пиглин-бестия", "entity.guardian.name": "Страж", "entity.hoglin.name": "Хоглин", @@ -5452,6 +4110,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Алмазные конские доспехи", "item.horsearmorgold.name": "Золотые конские доспехи", "item.horsearmoriron.name": "Железные конские доспехи", + "item.copper_horse_armor.name": "Медная конская броня", "item.horsearmorleather.name": "Кожаные конские доспехи", "item.gold_ingot.name": "Золотой слиток", "item.iron_ingot.name": "Железный слиток", @@ -5531,7 +4190,7 @@ export const langs: Langs = { "item.spawn_egg.entity.vindicator.name": "Яйцо призыва поборника", "item.spawn_egg.entity.mooshroom.name": "Яйцо призыва грибной коровы", "item.spawn_egg.entity.squid.name": "Яйцо призыва спрута", - "item.spawn_egg.entity.glow_squid.name": "Яйцо призыва сияющего спрута", + "item.spawn_egg.entity.glow_squid.name": "Яйцо призыва светящегося спрута", "item.spawn_egg.entity.rabbit.name": "Яйцо призыва кролика", "item.spawn_egg.entity.bat.name": "Яйцо призыва летучей мыши", "item.spawn_egg.entity.ravager.name": "Яйцо призыва разрушителя", @@ -5635,6 +4294,8 @@ export const langs: Langs = { "item.record_creator.desc": "Лена Райн — Creator", "item.record_creator_music_box.desc": "Лена Райн — Creator (Music Box)", "item.record_precipice.desc": "Аарон Шероф — Precipice", + "item.record_tears.desc": "Amos Roddy — Tears", + "item.record_lava_chicken.desc": "Гиперзелья — Лавовая курочка", "item.redstone.name": "Редстоуновая пыль", "item.reeds.name": "Сахарный тростник", "item.kelp.name": "Водоросли", @@ -5790,7 +4451,7 @@ export const langs: Langs = { "potion.digSpeed": "Проворство", "potion.effects.whenDrank": "После применения:", "potion.empty": "Без эффектов", - "potion.emptyPotion.name": "Пузырек воды", + "potion.emptyPotion.name": "Бутылка воды", "potion.emptyPotion.splash.name": "Взрывной пузырек воды", "potion.emptyPotion.linger.name": "Оседающий пузырек воды", "potion.fireResistance": "Огнестойкость", @@ -6064,7 +4725,7 @@ export const langs: Langs = { "trim_pattern.coast.name": "Отделка береговой брони", "trim_pattern.dune.name": "Отделка брони «Дюна»", "trim_pattern.eye.name": "Отделка брони «Глаз»", - "trim_pattern.host.name": "Отделка брони «Хранитель»", + "trim_pattern.host.name": "Отделка брони «Покровитель»", "trim_pattern.raiser.name": "Отделка брони «Собиратель»", "trim_pattern.rib.name": "Отделка брони «Ребра»", "trim_pattern.sentry.name": "Отделка брони «Страж»", @@ -6434,6 +5095,13 @@ export const langs: Langs = { "tile.glowstone.name": "Светящийся камень", "tile.glow_lichen.name": "Светящийся лишайник", "tile.lightning_rod.name": "Громоотвод", + "tile.exposed_lightning_rod.name": "Слегка окисленный громоотвод", + "tile.weathered_lightning_rod.name": "Полуокисленный громоотвод", + "tile.oxidized_lightning_rod.name": "Окисленный громоотвод", + "tile.waxed_lightning_rod.name": "Вощеный громоотвод", + "tile.waxed_exposed_lightning_rod.name": "Вощеный слегка окисленный громоотвод", + "tile.waxed_weathered_lightning_rod.name": "Вощеный полуокисленный громоотвод", + "tile.waxed_oxidized_lightning_rod.name": "Вощеный окисленный громоотвод", "tile.lit_pumpkin.name": "Светильник Джека", "tile.lockedchest.name": "Запертый сундук", "tile.log.acacia.name": "Акациевое бревно", @@ -6982,7 +5650,7 @@ export const langs: Langs = { "tile.waxed_copper_grate.name": "Вощеная медная решетка", "tile.waxed_exposed_copper_grate.name": "Вощеная слегка окисленная медная решетка", "tile.waxed_oxidized_copper_grate.name": "Вощеная окисленная медная решетка", - "tile.waxed_weathered_copper_grate.name": "Вощеный полуокисленная медная решетка", + "tile.waxed_weathered_copper_grate.name": "Вощёная состаренная медная решётка", "tile.weathered_copper_grate.name": "Полуокисленная медная решетка", "tile.copper_trapdoor.name": "Медный люк", "tile.exposed_copper_trapdoor.name": "Слегка окисленный медный люк", @@ -7042,14 +5710,99 @@ export const langs: Langs = { "tile.tinted_glass.name": "Тонированное стекло", "tile.smooth_basalt.name": "Гладкий базальт", "tile.wildflowers.name": "Полевые цветы", - "tile.firefly_bush.name": "Куст светлячка", + "tile.firefly_bush.name": "Куст со светлячками", "tile.bush.name": "Куст", "tile.leaf_litter.name": "Подстилка из листьев", "tile.cactus_flower.name": "Цветок кактуса", "item.brown_egg.name": "Коричневое яйцо", "item.blue_egg.name": "Синее яйцо", "tile.short_dry_grass.name": "Короткая сухая трава", - "tile.tall_dry_grass.name": "Высокая сухая трава" + "tile.tall_dry_grass.name": "Высокая сухая трава", + "entity.happy_ghast.name": "Счастливый гаст", + "item.spawn_egg.entity.happy_ghast.name": "Яйцо призыва счастливого гаста", + "tile.dried_ghast.name": "Высохший гаст", + "item.black_harness.name": "Черная упряжь", + "item.blue_harness.name": "Синяя упряжь", + "item.brown_harness.name": "Коричневая упряжь", + "item.cyan_harness.name": "Бирюзовая упряжь", + "item.gray_harness.name": "Серая упряжь", + "item.green_harness.name": "Зеленая упряжь", + "item.light_blue_harness.name": "Голубая упряжь", + "item.light_gray_harness.name": "Светло-серая упряжь", + "item.lime_harness.name": "Лаймовая упряжь", + "item.magenta_harness.name": "Пурпурная упряжь", + "item.orange_harness.name": "Оранжевая упряжь", + "item.pink_harness.name": "Розовая упряжь", + "item.purple_harness.name": "Фиолетовая упряжь", + "item.red_harness.name": "Красная упряжь", + "item.white_harness.name": "Белая упряжь", + "item.yellow_harness.name": "Желтая упряжь", + "entity.copper_golem.name": "Медный голем", + "item.spawn_egg.entity.copper_golem.name": "Яйцо призыва медного голема", + "item.copper_nugget.name": "Кусочек меди", + "item.copper_sword.name": "Медный меч", + "item.copper_pickaxe.name": "Медная кирка", + "item.copper_axe.name": "Медный топор", + "item.copper_shovel.name": "Медная лопата", + "item.copper_hoe.name": "Медная мотыга", + "item.copper_boots.name": "Медные ботинки", + "item.copper_leggings.name": "Медные поножи", + "item.copper_chestplate.name": "Медный нагрудник", + "item.copper_helmet.name": "Медный шлем", + "tile.copper_chest.name": "Медный сундук", + "tile.exposed_copper_chest.name": "Слегка окисленный медный сундук", + "tile.weathered_copper_chest.name": "Полуокисленный медный сундук", + "tile.oxidized_copper_chest.name": "Окисленный медный сундук", + "tile.waxed_copper_chest.name": "Вощеный медный сундук", + "tile.waxed_exposed_copper_chest.name": "Вощеный слегка окисленный медный сундук", + "tile.waxed_weathered_copper_chest.name": "Вощеный полуокисленный медный сундук", + "tile.waxed_oxidized_copper_chest.name": "Вощеный окисленный медный сундук", + "tile.acacia_shelf.name": "Полка из акации", + "tile.bamboo_shelf.name": "Бамбуковая полка", + "tile.birch_shelf.name": "Полка из березы", + "tile.cherry_shelf.name": "Вишневая полка", + "tile.crimson_shelf.name": "Багровая полка", + "tile.dark_oak_shelf.name": "Полка из темного дуба", + "tile.jungle_shelf.name": "Полка из тропического дерева", + "tile.mangrove_shelf.name": "Мангровая полка", + "tile.oak_shelf.name": "Полка из дуба", + "tile.pale_oak_shelf.name": "Полка из светлого дуба", + "tile.spruce_shelf.name": "Полка из сосны", + "tile.warped_shelf.name": "Искаженная полка", + "tile.copper_golem_statue.name": "Статуя медного голема", + "tile.exposed_copper_golem_statue.name": "Слегка окисленная статуя медного голема", + "tile.weathered_copper_golem_statue.name": "Полуокисленная статуя медного голема", + "tile.oxidized_copper_golem_statue.name": "Окисленная статуя медного голема", + "tile.waxed_copper_golem_statue.name": "Вощеная статуя медного голема", + "tile.waxed_exposed_copper_golem_statue.name": "Вощеная слегка окисленная статуя медного голема", + "tile.waxed_weathered_copper_golem_statue.name": "Вощеная полуокисленная статуя медного голема", + "tile.waxed_oxidized_copper_golem_statue.name": "Вощеная окисленная статуя медного голема", + "tile.copper_chain.name": "Медная цепь", + "tile.exposed_copper_chain.name": "Слегка окисленная медная цепь", + "tile.weathered_copper_chain.name": "Полуокисленная медная цепь", + "tile.oxidized_copper_chain.name": "Окисленная медная цепь", + "tile.waxed_copper_chain.name": "Вощеная медная цепь", + "tile.waxed_exposed_copper_chain.name": "Вощеная слегка окисленная медная цепь", + "tile.waxed_weathered_copper_chain.name": "Вощеная полуокисленная медная цепь", + "tile.waxed_oxidized_copper_chain.name": "Вощеная окисленная медная цепь", + "tile.copper_bars.name": "Медные прутья", + "tile.exposed_copper_bars.name": "Потемневшие медные прутья", + "tile.weathered_copper_bars.name": "Состаренные медные прутья", + "tile.oxidized_copper_bars.name": "Окисленные медные прутья", + "tile.waxed_copper_bars.name": "Вощёные медные прутья", + "tile.waxed_exposed_copper_bars.name": "Вощёные потемневшие медные прутья", + "tile.waxed_weathered_copper_bars.name": "Вощёные состаренные медные прутья", + "tile.waxed_oxidized_copper_bars.name": "Вощёные окисленные медные прутья", + "tile.copper_lantern.name": "Медный фонарь", + "tile.exposed_copper_lantern.name": "Слегка окисленный медный фонарь", + "tile.weathered_copper_lantern.name": "Полуокисленный медный фонарь", + "tile.oxidized_copper_lantern.name": "Окисленный медный фонарь", + "tile.waxed_copper_lantern.name": "Вощеный медный фонарь", + "tile.waxed_exposed_copper_lantern.name": "Вощеный слегка окисленный медный фонарь", + "tile.waxed_weathered_copper_lantern.name": "Вощеный полуокисленный медный фонарь", + "tile.waxed_oxidized_copper_lantern.name": "Вощеный окисленный медный фонарь", + "tile.copper_torch.name": "Медный факел", + "tile.iron_chain.name": "Железная цепь" }, "en_GB": { "enchantment.arrowDamage": "Power", @@ -7205,7 +5958,7 @@ export const langs: Langs = { "entity.unknown.name": "Unknown", "entity.vex.name": "Vex", "entity.villager.name": "Villager", - "entity.villager.armor": "Armorer", + "entity.villager.armor": "Armourer", "entity.villager.butcher": "Butcher", "entity.villager.cartographer": "Cartographer", "entity.villager.cleric": "Cleric", @@ -8040,14 +6793,14 @@ export const langs: Langs = { "item.tropicalSchoolClownfish.name": "Clownfish", "item.tropicalSchoolCottonCandyBetta.name": "Candyfloss Betta", "item.tropicalSchoolDottyback.name": "Dottyback", - "item.tropicalSchoolEmperorRedSnapper.name": "Emperor Red Snapper", + "item.tropicalSchoolEmperorRedSnapper.name": "Red Emperor", "item.tropicalSchoolGoatfish.name": "Goatfish", "item.tropicalSchoolMoorishIdol.name": "Moorish Idol", "item.tropicalSchoolOrnateButterfly.name": "Ornate Butterfly", "item.tropicalSchoolParrotfish.name": "Parrotfish", "item.tropicalSchoolQueenAngelFish.name": "Queen Angel Fish", "item.tropicalSchoolRedCichlid.name": "Red Cichlid", - "item.tropicalSchoolRedLippedBlenny.name": "Red-lipped Blenny", + "item.tropicalSchoolRedLippedBlenny.name": "Red Lipped Blenny", "item.tropicalSchoolRedSnapper.name": "Red Snapper", "item.tropicalSchoolThreadfin.name": "Threadfin", "item.tropicalSchoolTomatoClown.name": "Tomato Clown", @@ -8058,7 +6811,7 @@ export const langs: Langs = { "item.camera.name": "Camera", "item.canBreak": "Can break:", "item.canPlace": "Can be placed on:", - "item.customProperties": "Has Customised Properties", + "item.customProperties": "Has Custom Properties", "item.itemLock.cantDrop": ":hollow_star: Can't Drop Items can't be:", "item.itemLock.cantMove": ":solid_star: Can't Move Items can't be:", "item.itemLock.hoverText.cantBe.moved": "moved", @@ -8091,7 +6844,7 @@ export const langs: Langs = { "item.comparator.name": "Redstone Comparator", "item.compass.name": "Compass", "item.lodestonecompass.name": "Lodestone Compass", - "item.cookie.name": "Biscuit", + "item.cookie.name": "Cookie", "item.copper_door.name": "Copper Door", "item.crossbow.name": "Crossbow", "item.diamond.name": "Diamond", @@ -8209,6 +6962,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Diamond Horse Armour", "item.horsearmorgold.name": "Gold Horse Armour", "item.horsearmoriron.name": "Iron Horse Armour", + "item.copper_horse_armor.name": "Copper Horse Armour", "item.horsearmorleather.name": "Leather Horse Armour", "item.gold_ingot.name": "Gold Ingot", "item.iron_ingot.name": "Iron Ingot", @@ -8227,7 +6981,7 @@ export const langs: Langs = { "item.leather.name": "Leather", "item.leaves.name": "Leaves", "item.chainmail_leggings.name": "Chainmail Leggings", - "item.leather_leggings.name": "Leather Pants", + "item.leather_leggings.name": "Leather Trousers", "item.diamond_leggings.name": "Diamond Leggings", "item.golden_leggings.name": "Golden Leggings", "item.iron_leggings.name": "Iron Leggings", @@ -8243,7 +6997,7 @@ export const langs: Langs = { "item.map.exploration.village_snowy.name": "Snowy Village Map", "item.map.exploration.village_taiga.name": "Taiga Village Map", "item.map.exploration.village_plains.name": "Plains Village Map", - "item.map.exploration.village_savanna.name": "Savanna Village Map", + "item.map.exploration.village_savanna.name": "Savannah Village Map", "item.map.exploration.village_desert.name": "Desert Village Map", "item.map.exploration.jungle_temple.name": "Jungle Explorer Map", "item.map.exploration.swamp_hut.name": "Swamp Explorer Map", @@ -8363,7 +7117,7 @@ export const langs: Langs = { "item.porkchop.name": "Raw Porkchop", "item.portfolio.name": "Portfolio", "item.potato.name": "Potato", - "item.baked_potato.name": "Baked Potato", + "item.baked_potato.name": "Jacket Potato", "item.poisonous_potato.name": "Poisonous Potato", "item.prismarine_crystals.name": "Prismarine Crystals", "item.prismarine_shard.name": "Prismarine Shard", @@ -8373,25 +7127,27 @@ export const langs: Langs = { "item.rabbit_hide.name": "Rabbit Hide", "item.rabbit.name": "Raw Rabbit", "item.rabbit_stew.name": "Rabbit Stew", - "item.record_11.desc": "C418 - 11", - "item.record_13.desc": "C418 - 13", - "item.record_blocks.desc": "C418 - blocks", - "item.record_cat.desc": "C418 - cat", - "item.record_chirp.desc": "C418 - chirp", - "item.record_far.desc": "C418 - far", - "item.record_mall.desc": "C418 - mall", - "item.record_mellohi.desc": "C418 - mellohi", + "item.record_11.desc": "C418 – 11", + "item.record_13.desc": "C418 – 13", + "item.record_blocks.desc": "C418 – blocks", + "item.record_cat.desc": "C418 – cat", + "item.record_chirp.desc": "C418 – chirp", + "item.record_far.desc": "C418 – far", + "item.record_mall.desc": "C418 – mall", + "item.record_mellohi.desc": "C418 – mellohi", "item.record.name": "Music Disc", - "item.record_stal.desc": "C418 - stal", - "item.record_strad.desc": "C418 - strad", - "item.record_wait.desc": "C418 - wait", - "item.record_ward.desc": "C418 - ward", + "item.record_stal.desc": "C418 – stal", + "item.record_strad.desc": "C418 – strad", + "item.record_wait.desc": "C418 – wait", + "item.record_ward.desc": "C418 – ward", "item.record_pigstep.desc": "Lena Raine – Pigstep", - "item.record_otherside.desc": "Lena Raine - otherside", - "item.record_relic.desc": "Aaron Cherof – Relic", - "item.record_creator.desc": "Lena Raine – Creator", + "item.record_otherside.desc": "Lena Raine – otherside", + "item.record_relic.desc": "Aaron Cherof - Relic", + "item.record_creator.desc": "Lena Raine - Creator", "item.record_creator_music_box.desc": "Lena Raine – Creator (Music Box)", "item.record_precipice.desc": "Aaron Cherof – Precipice", + "item.record_tears.desc": "Amos Roddy – Tears", + "item.record_lava_chicken.desc": "Hyper Potions – Lava Chicken", "item.redstone.name": "Redstone Dust", "item.reeds.name": "Sugar Cane", "item.kelp.name": "Kelp", @@ -8662,7 +7418,7 @@ export const langs: Langs = { "entity.warden.name": "Warden", "entity.allay.name": "Allay", "item.spawn_egg.entity.allay.name": "Allay Spawn Egg", - "item.bucketTadpole.name": "Bucket of Tadpoles", + "item.bucketTadpole.name": "Bucket of Tadpole", "item.spawn_egg.entity.frog.name": "Frog Spawn Egg", "item.spawn_egg.entity.tadpole.name": "Tadpole Spawn Egg", "tile.frog_spawn.name": "Frogspawn", @@ -8911,7 +7667,7 @@ export const langs: Langs = { "tile.respawn_anchor.respawnSet": "Respawn point set", "tile.respawn_anchor.notValid": "Your respawn anchor was out of charges, missing or obstructed", "tile.spruce_button.name": "Spruce Button", - "tile.stone_button.name": "Button", + "tile.stone_button.name": "Stone Button", "tile.cactus.name": "Cactus", "tile.cake.name": "Cake", "tile.dried_kelp_block.name": "Dried Kelp Block", @@ -9168,7 +7924,7 @@ export const langs: Langs = { "tile.soul_sand.name": "Soul Sand", "tile.hopper.name": "Hopper", "tile.ice.name": "Ice", - "tile.packed_ice.name": "Packed Ice", + "tile.packed_ice.name": "Compressed Ice", "tile.blue_ice.name": "Blue Ice", "tile.frosted_ice.name": "Frosted Ice", "tile.iron_trapdoor.name": "Iron Trapdoor", @@ -9191,8 +7947,15 @@ export const langs: Langs = { "tile.glowstone.name": "Glowstone", "tile.glow_lichen.name": "Glow Lichen", "tile.lightning_rod.name": "Lightning Rod", + "tile.exposed_lightning_rod.name": "Exposed Lightning Rod", + "tile.weathered_lightning_rod.name": "Weathered Lightning Rod", + "tile.oxidized_lightning_rod.name": "Oxidised Lightning Rod", + "tile.waxed_lightning_rod.name": "Waxed Lightning Rod", + "tile.waxed_exposed_lightning_rod.name": "Waxed Exposed Lightning Rod", + "tile.waxed_weathered_lightning_rod.name": "Waxed Weathered Lightning Rod", + "tile.waxed_oxidized_lightning_rod.name": "Waxed Oxidised Lightning Rod", "tile.lit_pumpkin.name": "Jack o'Lantern", - "tile.lockedchest.name": "Locked chest", + "tile.lockedchest.name": "Locked Chest", "tile.log.acacia.name": "Acacia Log", "tile.log.big_oak.name": "Dark Oak Log", "tile.log.birch.name": "Birch Log", @@ -9273,7 +8036,7 @@ export const langs: Langs = { "tile.red_sandstone.cut.name": "Cut Red Sandstone", "tile.redstone_wire.name": "Redstone Dust", "tile.redstone_lamp.name": "Redstone Lamp", - "tile.reeds.name": "Sugar cane", + "tile.reeds.name": "Sugar Cane", "tile.sand.default.name": "Sand", "tile.sand.name": "Sand", "tile.sand.red.name": "Red Sand", @@ -9806,7 +8569,92 @@ export const langs: Langs = { "item.brown_egg.name": "Brown Egg", "item.blue_egg.name": "Blue Egg", "tile.short_dry_grass.name": "Short Dry Grass", - "tile.tall_dry_grass.name": "Tall Dry Grass" + "tile.tall_dry_grass.name": "Tall Dry Grass", + "entity.happy_ghast.name": "Happy Ghast", + "item.spawn_egg.entity.happy_ghast.name": "Happy Ghast Spawn Egg", + "tile.dried_ghast.name": "Dried Ghast", + "item.black_harness.name": "Black Harness", + "item.blue_harness.name": "Blue Harness", + "item.brown_harness.name": "Brown Harness", + "item.cyan_harness.name": "Cyan Harness", + "item.gray_harness.name": "Grey Harness", + "item.green_harness.name": "Green Harness", + "item.light_blue_harness.name": "Light Blue Harness", + "item.light_gray_harness.name": "Light Grey Harness", + "item.lime_harness.name": "Lime Harness", + "item.magenta_harness.name": "Magenta Harness", + "item.orange_harness.name": "Orange Harness", + "item.pink_harness.name": "Pink Harness", + "item.purple_harness.name": "Purple Harness", + "item.red_harness.name": "Red Harness", + "item.white_harness.name": "White Harness", + "item.yellow_harness.name": "Yellow Harness", + "entity.copper_golem.name": "Copper Golem", + "item.spawn_egg.entity.copper_golem.name": "Copper Golem Spawn Egg", + "item.copper_nugget.name": "Copper Nugget", + "item.copper_sword.name": "Copper Sword", + "item.copper_pickaxe.name": "Copper Pickaxe", + "item.copper_axe.name": "Copper Axe", + "item.copper_shovel.name": "Copper Shovel", + "item.copper_hoe.name": "Copper Hoe", + "item.copper_boots.name": "Copper Boots", + "item.copper_leggings.name": "Copper Leggings", + "item.copper_chestplate.name": "Copper Chestplate", + "item.copper_helmet.name": "Copper Helmet", + "tile.copper_chest.name": "Copper Chest", + "tile.exposed_copper_chest.name": "Exposed Copper Chest", + "tile.weathered_copper_chest.name": "Weathered Copper Chest", + "tile.oxidized_copper_chest.name": "Oxidised Copper Chest", + "tile.waxed_copper_chest.name": "Waxed Copper Chest", + "tile.waxed_exposed_copper_chest.name": "Waxed Exposed Copper Chest", + "tile.waxed_weathered_copper_chest.name": "Waxed Weathered Copper Chest", + "tile.waxed_oxidized_copper_chest.name": "Waxed Oxidised Copper Chest", + "tile.acacia_shelf.name": "Acacia Shelf", + "tile.bamboo_shelf.name": "Bamboo Shelf", + "tile.birch_shelf.name": "Birch Shelf", + "tile.cherry_shelf.name": "Cherry Shelf", + "tile.crimson_shelf.name": "Crimson Shelf", + "tile.dark_oak_shelf.name": "Dark Oak Shelf", + "tile.jungle_shelf.name": "Jungle Shelf", + "tile.mangrove_shelf.name": "Mangrove Shelf", + "tile.oak_shelf.name": "Oak Shelf", + "tile.pale_oak_shelf.name": "Pale Oak Shelf", + "tile.spruce_shelf.name": "Spruce Shelf", + "tile.warped_shelf.name": "Warped Shelf", + "tile.copper_golem_statue.name": "Copper Golem Statue", + "tile.exposed_copper_golem_statue.name": "Exposed Copper Golem Statue", + "tile.weathered_copper_golem_statue.name": "Weathered Copper Golem Statue", + "tile.oxidized_copper_golem_statue.name": "Oxidised Copper Golem Statue", + "tile.waxed_copper_golem_statue.name": "Waxed Copper Golem Statue", + "tile.waxed_exposed_copper_golem_statue.name": "Waxed Exposed Copper Golem Statue", + "tile.waxed_weathered_copper_golem_statue.name": "Waxed Weathered Copper Golem Statue", + "tile.waxed_oxidized_copper_golem_statue.name": "Waxed Oxidised Copper Golem Statue", + "tile.copper_chain.name": "Copper Chain", + "tile.exposed_copper_chain.name": "Exposed Copper Chain", + "tile.weathered_copper_chain.name": "Weathered Copper Chain", + "tile.oxidized_copper_chain.name": "Oxidised Copper Chain", + "tile.waxed_copper_chain.name": "Waxed Copper Chain", + "tile.waxed_exposed_copper_chain.name": "Waxed Exposed Copper Chain", + "tile.waxed_weathered_copper_chain.name": "Waxed Weathered Copper Chain", + "tile.waxed_oxidized_copper_chain.name": "Waxed Oxidised Copper Chain", + "tile.copper_bars.name": "Copper Bars", + "tile.exposed_copper_bars.name": "Exposed Copper Bars", + "tile.weathered_copper_bars.name": "Weathered Copper Bars", + "tile.oxidized_copper_bars.name": "Oxidised Copper Bars", + "tile.waxed_copper_bars.name": "Waxed Copper Bars", + "tile.waxed_exposed_copper_bars.name": "Waxed Exposed Copper Bars", + "tile.waxed_weathered_copper_bars.name": "Waxed Weathered Copper Bars", + "tile.waxed_oxidized_copper_bars.name": "Waxed Oxidised Copper Bars", + "tile.copper_lantern.name": "Copper Lantern", + "tile.exposed_copper_lantern.name": "Exposed Copper Lantern", + "tile.weathered_copper_lantern.name": "Weathered Copper Lantern", + "tile.oxidized_copper_lantern.name": "Oxidised Copper Lantern", + "tile.waxed_copper_lantern.name": "Waxed Copper Lantern", + "tile.waxed_exposed_copper_lantern.name": "Waxed Exposed Copper Lantern", + "tile.waxed_weathered_copper_lantern.name": "Waxed Weathered Copper Lantern", + "tile.waxed_oxidized_copper_lantern.name": "Waxed Oxidised Copper Lantern", + "tile.copper_torch.name": "Copper Torch", + "tile.iron_chain.name": "Iron Chain" }, "de_DE": { "enchantment.arrowDamage": "Kraft", @@ -9826,7 +8674,7 @@ export const langs: Langs = { "enchantment.fire": "Verbrennung", "enchantment.fishingSpeed": "Köder", "enchantment.frostwalker": "Eisläufer", - "enchantment.heavy_weapon.breach": "Durchbruch", + "enchantment.heavy_weapon.breach": "Bresche", "enchantment.heavy_weapon.density": "Dichte", "enchantment.heavy_weapon.windburst": "Windschuss", "enchantment.knockback": "Rückstoß", @@ -9849,7 +8697,7 @@ export const langs: Langs = { "enchantment.protect.explosion": "Explosionsschutz", "enchantment.protect.fall": "Federfall", "enchantment.protect.fire": "Feuerschutz", - "enchantment.protect.projectile": "Schusssicher", + "enchantment.protect.projectile": "Schussschutz", "enchantment.soul_speed": "Seelenläufer", "enchantment.swift_sneak": "Huschen", "enchantment.thorns": "Dornen", @@ -9869,7 +8717,7 @@ export const langs: Langs = { "entity.blaze.name": "Lohe", "entity.boat.name": "Boot", "entity.bogged.name": "Sumpfskelett", - "entity.breeze.name": "Brise", + "entity.breeze.name": "Böe", "entity.breeze_wind_charge_projectile.name": "Windkugel", "entity.cat.name": "Katze", "entity.cave_spider.name": "Höhlenspinne", @@ -9878,7 +8726,7 @@ export const langs: Langs = { "entity.creaking.name": "Knarz", "entity.creeper.name": "Creeper", "entity.dolphin.name": "Delfin", - "entity.goat.name": "Ziege", + "entity.goat.name": "Goat", "entity.panda.name": "Panda", "entity.donkey.name": "Esel", "entity.dragon_fireball.name": "Drachenfeuerball", @@ -9991,12 +8839,12 @@ export const langs: Langs = { "entity.zoglin.name": "Zoglin", "entity.zombie.name": "Zombie", "entity.zombie_horse.name": "Zombiepferd", - "entity.zombie_pigman.name": "Zombie-Piglin", - "entity.zombie_villager.name": "Zombie-Dorfbewohner", - "entity.zombie_villager_v2.name": "Zombie-Dorfbewohner", + "entity.zombie_pigman.name": "Zombifizierter Piglin", + "entity.zombie_villager.name": "Zombiedorfbewohner", + "entity.zombie_villager_v2.name": "Zombiedorfbewohner", "item.air.name": "Luft", "item.apple.name": "Apfel", - "item.axolotlAdultBodySingle.name": "Ausgewachsenes Axolotl (%1$s)", + "item.axolotlAdultBodySingle.name": "Ausgewachsener Axolotl (%1$s)", "item.axolotlBabyBodySingle.name": "Baby-Axolotl (%1$s)", "item.axolotlColorLucy.name": "Leuzistisch", "item.axolotlColorCyan.name": "Türkis", @@ -10255,22 +9103,22 @@ export const langs: Langs = { "item.banner.gradient_up.yellow": "Gelber Farbverlauf (Invertiert)", "item.banner.gray.name": "Graues Banner", "item.banner.green.name": "Grünes Banner", - "item.banner.guster.black": "Schwarzer Guster", - "item.banner.guster.blue": "Blauer Guster", - "item.banner.guster.brown": "Brauner Guster", - "item.banner.guster.cyan": "Türkiser Guster", - "item.banner.guster.gray": "Grauer Guster", - "item.banner.guster.green": "Grüner Guster", - "item.banner.guster.lightBlue": "Hellblauer Guster", - "item.banner.guster.lime": "Hellgrüner Guster", - "item.banner.guster.magenta": "Magenta Guster", - "item.banner.guster.orange": "Oranger Guster", - "item.banner.guster.pink": "Rosa Guster", - "item.banner.guster.purple": "Violetter Guster", - "item.banner.guster.red": "Roter Guster", - "item.banner.guster.silver": "Hellgrauer Guster", - "item.banner.guster.white": "Weißer Guster", - "item.banner.guster.yellow": "Gelber Guster", + "item.banner.guster.black": "Schwarzer Windstoßer", + "item.banner.guster.blue": "Blauer Windstoßer", + "item.banner.guster.brown": "Brauner Windstoßer", + "item.banner.guster.cyan": "Türkiser Windstoßer", + "item.banner.guster.gray": "Grauer Windstoßer", + "item.banner.guster.green": "Grüner Windstoßer", + "item.banner.guster.lightBlue": "Hellblauer Windstoßer", + "item.banner.guster.lime": "Hellgrüner Windstoßer", + "item.banner.guster.magenta": "Magenta Windstoßer", + "item.banner.guster.orange": "Oranger Windstoßer", + "item.banner.guster.pink": "Rosa Windstoßer", + "item.banner.guster.purple": "Violetter Windstoßer", + "item.banner.guster.red": "Roter Windstoßer", + "item.banner.guster.silver": "Hellgrauer Windstoßer", + "item.banner.guster.white": "Weißer Windstoßer", + "item.banner.guster.yellow": "Gelber Windstoßer", "item.banner.half_horizontal.black": "Oben schwarz geteilt", "item.banner.half_horizontal.blue": "Oben blau geteilt", "item.banner.half_horizontal.brown": "Oben braun geteilt", @@ -10408,22 +9256,22 @@ export const langs: Langs = { "item.banner.skull.silver": "Hellgrauer Schädel", "item.banner.skull.white": "Weißer Schädel", "item.banner.skull.yellow": "Gelber Schädel", - "item.banner.small_stripes.black": "Schwarze Streifen", - "item.banner.small_stripes.blue": "Blaue Streifen", - "item.banner.small_stripes.brown": "Braune Streifen", - "item.banner.small_stripes.cyan": "Türkise Streifen", - "item.banner.small_stripes.gray": "Graue Streifen", - "item.banner.small_stripes.green": "Grüne Streifen", - "item.banner.small_stripes.lightBlue": "Hellblaue Streifen", - "item.banner.small_stripes.lime": "Hellgrüne Streifen", - "item.banner.small_stripes.magenta": "Magenta Streifen", - "item.banner.small_stripes.orange": "Orange Streifen", - "item.banner.small_stripes.pink": "Rosa Streifen", - "item.banner.small_stripes.purple": "Violette Streifen", - "item.banner.small_stripes.red": "Rote Streifen", - "item.banner.small_stripes.silver": "Hellgraue Streifen", - "item.banner.small_stripes.white": "Weiße Streifen", - "item.banner.small_stripes.yellow": "Gelbe Streifen", + "item.banner.small_stripes.black": "Schwarze Pfähle", + "item.banner.small_stripes.blue": "Blaue Pfähle", + "item.banner.small_stripes.brown": "Braune Pfähle", + "item.banner.small_stripes.cyan": "Türkise Pfähle", + "item.banner.small_stripes.gray": "Graue Pfähle", + "item.banner.small_stripes.green": "Grüne Pfähle", + "item.banner.small_stripes.lightBlue": "Hellblaue Pfähle", + "item.banner.small_stripes.lime": "Hellgrüne Pfähle", + "item.banner.small_stripes.magenta": "Magenta Pfähle", + "item.banner.small_stripes.orange": "Orange Pfähle", + "item.banner.small_stripes.pink": "Rosa Pfähle", + "item.banner.small_stripes.purple": "Violette Pfähle", + "item.banner.small_stripes.red": "Rote Pfähle", + "item.banner.small_stripes.silver": "Hellgraue Pfähle", + "item.banner.small_stripes.white": "Weiße Pfähle", + "item.banner.small_stripes.yellow": "Gelbe Pfähle", "item.banner.square_bottom_left.black": "Schwarzes rechtes Untereck", "item.banner.square_bottom_left.blue": "Blaues rechtes Untereck", "item.banner.square_bottom_left.brown": "Braunes rechtes Untereck", @@ -10722,15 +9570,15 @@ export const langs: Langs = { "item.beetroot_soup.name": "Borschtsch", "item.blaze_powder.name": "Lohenstaub", "item.blaze_rod.name": "Lohenrute", - "item.boat.oak.name": "Eichenboot", + "item.boat.oak.name": "Eichenholzboot", "item.boat.spruce.name": "Fichtenboot", "item.boat.birch.name": "Birkenboot", "item.boat.jungle.name": "Tropenholzboot", "item.boat.acacia.name": "Akazienboot", - "item.boat.big_oak.name": "Schwarzeichenboot", + "item.boat.big_oak.name": "Schwarzeichenholzboot", "item.bone.name": "Knochen", "item.book.name": "Buch", - "item.breeze_rod.name": "Bö-Rute", + "item.breeze_rod.name": "Böenrute", "item.chainmail_boots.name": "Kettenhemd-Stiefel", "item.leather_boots.name": "Lederstiefel", "item.diamond_boots.name": "Diamantstiefel", @@ -10749,7 +9597,7 @@ export const langs: Langs = { "item.bucketTropical.name": "Eimer voll Tropenfisch", "item.bucketPuffer.name": "Eimer voll Kugelfisch", "item.bucketCustomFish.name": "Eimer voll ", - "item.bucketAxolotl.name": "Eimer voll Axolotl", + "item.bucketAxolotl.name": "Axolotleimer", "item.tropicalColorWhite.name": "Weiß", "item.tropicalColorOrange.name": "Orange", "item.tropicalColorMagenta.name": "Magenta", @@ -10832,7 +9680,7 @@ export const langs: Langs = { "item.cauldron.name": "Kessel", "item.charcoal.name": "Holzkohle", "item.chainmail_chestplate.name": "Kettenhemd-Harnisch", - "item.leather_chestplate.name": "Ledertunika", + "item.leather_chestplate.name": "Lederjacke", "item.diamond_chestplate.name": "Diamantharnisch", "item.golden_chestplate.name": "Goldharnisch", "item.iron_chestplate.name": "Eisenharnisch", @@ -10840,12 +9688,12 @@ export const langs: Langs = { "item.chorus_fruit_popped.name": "Geplatzte Chorusfrucht", "item.cooked_beef.name": "Steak", "item.cooked_chicken.name": "Gebratenes Hühnchen", - "item.cooked_porkchop.name": "Gebratenes Schweinekotelett", + "item.cooked_porkchop.name": "Gebratenes Schweinefleisch", "item.chicken.name": "Rohes Hühnchen", "item.clay_ball.name": "Tonkugel", "item.clock.name": "Uhr", "item.coal.name": "Kohle", - "item.comparator.name": "Redstone-Vergleicher", + "item.comparator.name": "Redstone-Komparator", "item.compass.name": "Kompass", "item.lodestonecompass.name": "Leitsteinkompass", "item.cookie.name": "Keks", @@ -10890,14 +9738,14 @@ export const langs: Langs = { "item.elytra.name": "Elytren", "item.emerald.name": "Smaragd", "item.emptyMap.name": "Leere Karte", - "item.emptyLocatorMap.name": "Leere Locator-Karte", - "item.enchanted_book.name": "Zauberbuch", + "item.emptyLocatorMap.name": "Leere Lokator-Karte", + "item.enchanted_book.name": "Verzaubertes Buch", "item.end_crystal.name": "Enderkristall", "tile.end_rod.name": "Endstab", "item.ender_eye.name": "Enderauge", "item.ender_pearl.name": "Enderperle", "item.experience_bottle.name": "Erfahrungsfläschchen", - "item.exposed_copper_door.name": "Freiliegende Kupfertür", + "item.exposed_copper_door.name": "Angelaufene Kupfertür", "item.feather.name": "Feder", "item.fermented_spider_eye.name": "Fermentiertes Spinnenauge", "item.fireball.name": "Feuerkugel", @@ -10966,6 +9814,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Diamant-Rossharnisch", "item.horsearmorgold.name": "Gold-Rossharnisch", "item.horsearmoriron.name": "Eisen-Rossharnisch", + "item.copper_horse_armor.name": "Kupferner Rossharnisch", "item.horsearmorleather.name": "Leder-Rossharnisch", "item.gold_ingot.name": "Goldbarren", "item.iron_ingot.name": "Eisenbarren", @@ -10977,17 +9826,17 @@ export const langs: Langs = { "item.netherite_shovel.name": "Netheritschaufel", "item.netherite_hoe.name": "Netherithacke", "item.netherite_boots.name": "Netheritstiefel", - "item.netherite_leggings.name": "Netherithose", + "item.netherite_leggings.name": "Netheritbeinschutz", "item.netherite_chestplate.name": "Netheritharnisch", "item.netherite_helmet.name": "Netherithelm", "item.lead.name": "Leine", "item.leather.name": "Leder", "item.leaves.name": "Laub", - "item.chainmail_leggings.name": "Kettenhemd-Hose", + "item.chainmail_leggings.name": "Kettenhemd-Beinschutz", "item.leather_leggings.name": "Lederhose", - "item.diamond_leggings.name": "Diamantbeinrüstungen", - "item.golden_leggings.name": "Goldhose", - "item.iron_leggings.name": "Eisenbeinrüstungen", + "item.diamond_leggings.name": "Diamantbeinschutz", + "item.golden_leggings.name": "Goldbeinschutz", + "item.iron_leggings.name": "Eisenbeinschutz", "item.nautilus_shell.name": "Nautilusschale", "item.heart_of_the_sea.name": "Herz des Meeres", "item.mace.name": "Streitkolben", @@ -11023,7 +9872,7 @@ export const langs: Langs = { "item.spawn_egg.entity.axolotl.name": "Axolotl-Spawn-Ei", "item.spawn_egg.entity.bee.name": "Bienen-Spawn-Ei", "item.spawn_egg.entity.bogged.name": "Sumpfskelett-Spawn-Ei", - "item.spawn_egg.entity.breeze.name": "Brisen-Spawn-Ei", + "item.spawn_egg.entity.breeze.name": "Böen-Spawn-Ei", "item.spawn_egg.entity.hoglin.name": "Hoglin-Spawn-Ei", "item.spawn_egg.entity.cat.name": "Katzen-Spawn-Ei", "item.spawn_egg.entity.chicken.name": "Hühner-Spawn-Ei", @@ -11066,7 +9915,7 @@ export const langs: Langs = { "item.spawn_egg.entity.creeper.name": "Creeper-Spawn-Ei", "item.spawn_egg.entity.skeleton.name": "Skelett-Spawn-Ei", "item.spawn_egg.entity.spider.name": "Spinnen-Spawn-Ei", - "item.spawn_egg.entity.zombie_pigman.name": "Zombie-Piglin-Spawn-Ei", + "item.spawn_egg.entity.zombie_pigman.name": "Zombifizierter-Piglin-Spawn-Ei", "item.spawn_egg.entity.strider.name": "Schreiter-Spawn-Ei", "item.spawn_egg.entity.slime.name": "Schleim-Spawn-Ei", "item.spawn_egg.entity.enderman.name": "Enderman-Spawn-Ei", @@ -11075,8 +9924,8 @@ export const langs: Langs = { "item.spawn_egg.entity.ghast.name": "Ghast-Spawn-Ei", "item.spawn_egg.entity.magma_cube.name": "Magmawürfel-Spawn-Ei", "item.spawn_egg.entity.blaze.name": "Lohen-Spawn-Ei", - "item.spawn_egg.entity.zombie_villager.name": "Zombie-Dorfbewohner-Spawn-Ei", - "item.spawn_egg.entity.zombie_villager_v2.name": "Zombie-Dorfbewohner-Spawn-Ei", + "item.spawn_egg.entity.zombie_villager.name": "Zombiedorfbewohner-Spawn-Ei", + "item.spawn_egg.entity.zombie_villager_v2.name": "Zombiedorfbewohner-Spawn-Ei", "item.spawn_egg.entity.witch.name": "Hexen-Spawn-Ei", "item.spawn_egg.entity.stray.name": "Eiswanderer-Spawn-Ei", "item.spawn_egg.entity.husk.name": "Wüstenzombie-Spawn-Ei", @@ -11116,8 +9965,8 @@ export const langs: Langs = { "item.iron_pickaxe.name": "Eisenspitzhacke", "item.stone_pickaxe.name": "Steinspitzhacke", "item.wooden_pickaxe.name": "Holzspitzhacke", - "item.porkchop_cooked.name": "Gebratenes Schweinekotelett", - "item.porkchop.name": "Rohes Schweinekotelett", + "item.porkchop_cooked.name": "Gebratenes Schweinefleisch", + "item.porkchop.name": "Rohes Schweinefleisch", "item.portfolio.name": "Portfolio", "item.potato.name": "Kartoffel", "item.baked_potato.name": "Ofenkartoffel", @@ -11149,6 +9998,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Creator", "item.record_creator_music_box.desc": "Lena Raine - Creator (Music Box)", "item.record_precipice.desc": "Aaron Cherof - Precipice", + "item.record_tears.desc": "Amos Roddy – Tears", + "item.record_lava_chicken.desc": "Hyper-Tränke: Lava-Huhn", "item.redstone.name": "Redstone-Staub", "item.reeds.name": "Zuckerrohr", "item.kelp.name": "Seetang", @@ -11188,7 +10039,7 @@ export const langs: Langs = { "item.stick.name": "Stock", "item.string.name": "Faden", "item.sugar.name": "Zucker", - "item.gunpowder.name": "Schießpulver", + "item.gunpowder.name": "Schwarzpulver", "item.diamond_sword.name": "Diamantschwert", "item.golden_sword.name": "Goldschwert", "item.iron_sword.name": "Eisenschwert", @@ -11196,7 +10047,7 @@ export const langs: Langs = { "item.wooden_sword.name": "Holzschwert", "item.unbreakable": "Unzerstörbar", "item.waxed_copper_door.name": "Gewachste Kupfertür", - "item.waxed_exposed_copper_door.name": "Gewachste freiliegende Kupfertür", + "item.waxed_exposed_copper_door.name": "Gewachste angelaufene Kupfertür", "item.waxed_oxidized_copper_door.name": "Gewachste oxidierte Kupfertür", "item.waxed_weathered_copper_door.name": "Gewachste verwitterte Kupfertür", "item.weathered_copper_door.name": "Verwitterte Kupfertür", @@ -11211,7 +10062,7 @@ export const langs: Langs = { "item.trial_key.name": "Prüfungsschlüssel", "item.turtle_helmet.name": "Schildkrötenpanzer", "item.turtle_shell_piece.name": "Schildkröten-Hornschild", - "item.phantom_membrane.name": "Phantommembran", + "item.phantom_membrane.name": "Phantomhaut", "item.sweet_berries.name": "Süßbeeren", "item.suspicious_stew.name": "Verdächtige Suppe", "item.field_masoned_banner_pattern.name": "Bannermuster: Feld und Mauer", @@ -11219,7 +10070,7 @@ export const langs: Langs = { "item.flow_banner_pattern.name": "Bannermuster: Fluss", "item.flower_banner_pattern.name": "Bannermuster: Flowerpower", "item.globe_banner_pattern.name": "Bannermuster: Globus", - "item.guster_banner_pattern.name": "Bannermuster: Guster", + "item.guster_banner_pattern.name": "Bannermuster: Windstoßer", "item.piglin_banner_pattern.name": "Bannermuster: Schnauze", "item.skull_banner_pattern.name": "Bannermuster: Schädel-Power", "item.mojang_banner_pattern.name": "Bannermuster: Ding", @@ -11229,7 +10080,7 @@ export const langs: Langs = { "item.banner_pattern.flow": "Fluss", "item.banner_pattern.flower": "Blume", "item.banner_pattern.globe": "Globus", - "item.banner_pattern.guster": "Guster", + "item.banner_pattern.guster": "Windstoßer", "item.banner_pattern.name": "Bannermuster", "item.banner_pattern.piglin": "Schnauze", "item.banner_pattern.skull": "Schädel", @@ -11241,8 +10092,8 @@ export const langs: Langs = { "item.pale_oak_sign.name": "Blasseichenschild", "tile.pale_oak_sapling.name": "Blasseichensetzling", "tile.pale_oak_leaves.name": "Blasseichenlaub", - "item.boat.pale_oak.name": "Blasseichenboot", - "item.chest_boat.pale_oak.name": "Blasseichen-Truhenboot", + "item.boat.pale_oak.name": "Blasseichenholzboot", + "item.chest_boat.pale_oak.name": "Blasseichenholz-Truhenboot", "item.resin_brick.name": "Harzziegel", "item.worldbuilder.block.failed": "Du benötigst Kreativ + Operator, um diesen Block zu platzieren", "item.shield.name": "Schild", @@ -11283,7 +10134,7 @@ export const langs: Langs = { "item.bundle.empty.description": "Kann einen gemischten Stapel von Gegenständen aufnehmen", "item.bundle.full": "Voll", "item.bundle.fullness": "%s übrig", - "item.goat_horn.name": "Ziegenhorn", + "item.goat_horn.name": "Bockshorn", "item.minecraft.goat_horn.sound.0": "Sinnieren", "item.minecraft.goat_horn.sound.1": "Singen", "item.minecraft.goat_horn.sound.2": "Suchen", @@ -11305,7 +10156,7 @@ export const langs: Langs = { "potion.effects.whenDrank": "Auswirkungen:", "potion.empty": "Wirkungslos", "potion.emptyPotion.name": "Wasserflasche", - "potion.emptyPotion.splash.name": "Wurf-Wasserflasche", + "potion.emptyPotion.splash.name": "Werfbare Wasserflasche", "potion.emptyPotion.linger.name": "Verweilende Wasserflasche", "potion.fireResistance": "Feuerresistenz", "potion.fireResistance.name": "Trank der Feuerresistenz", @@ -11411,7 +10262,7 @@ export const langs: Langs = { "tile.sculk.name": "Sculk", "tile.sculk_vein.name": "Sculk-Ader", "tile.sculk_catalyst.name": "Sculk-Katalysator", - "tile.sculk_shrieker.name": "Sculk-Heuler", + "tile.sculk_shrieker.name": "Sculk-Kreischer", "tile.reinforced_deepslate.name": "Verstärkter Tiefenschiefer", "entity.frog.name": "Frosch", "entity.tadpole.name": "Kaulquappe", @@ -11423,26 +10274,26 @@ export const langs: Langs = { "item.spawn_egg.entity.frog.name": "Frosch-Spawn-Ei", "item.spawn_egg.entity.tadpole.name": "Kaulquappen-Spawn-Ei", "tile.frog_spawn.name": "Froschlaich", - "tile.pearlescent_froglight.name": "Perlmuttfarbenes Froschlicht", + "tile.pearlescent_froglight.name": "Perlmuttenes Froschlicht", "tile.verdant_froglight.name": "Grünliches Froschlicht", "tile.ochre_froglight.name": "Ockergelbes Froschlicht", "tile.mud.name": "Schlamm", - "tile.packed_mud.name": "Kompakter Schlamm", + "tile.packed_mud.name": "Fester Schlamm", "tile.mud_bricks.name": "Schlammziegel", "tile.mud_brick_slab.name": "Schlammziegelstufe", "tile.mud_brick_double_slab": "Schlammziegel-Doppelstufe", "tile.mud_brick_stairs.name": "Schlammziegeltreppe", "tile.mud_brick_wall.name": "Schlammziegelmauer", "tile.mangrove_leaves.name": "Mangrovenlaub", - "tile.mangrove_propagule.name": "Mangroven-Diaspore", + "tile.mangrove_propagule.name": "Mangrovenkeimling", "tile.mangrove_roots.name": "Mangrovenwurzeln", "tile.muddy_mangrove_roots.name": "Schlammige Mangrovenwurzeln", - "item.chest_boat.oak.name": "Eichen-Truhenboot", + "item.chest_boat.oak.name": "Eichenholz-Truhenboot", "item.chest_boat.spruce.name": "Fichten-Truhenboot", "item.chest_boat.birch.name": "Birken-Truhenboot", "item.chest_boat.jungle.name": "Tropenholz-Truhenboot", "item.chest_boat.acacia.name": "Akazien-Truhenboot", - "item.chest_boat.big_oak.name": "Schwarzeichen-Truhenboot", + "item.chest_boat.big_oak.name": "Schwarzeichenholz-Truhenboot", "item.chest_boat.mangrove.name": "Mangroven-Truhenboot", "tile.mangrove_log.name": "Mangrovenstamm", "tile.stripped_mangrove_log.name": "Abgezogener Mangrovenstamm", @@ -11453,8 +10304,8 @@ export const langs: Langs = { "tile.mangrove_pressure_plate.name": "Mangrovendruckplatte", "tile.mangrove_fence.name": "Mangrovenzaun", "tile.mangrove_fence_gate.name": "Mangrovenzauntor", - "item.mangrove_door.name": "Mangroventür", - "item.mangrove_sign.name": "Mangrovenschild", + "item.mangrove_door.name": "Mangrovenholztür", + "item.mangrove_sign.name": "Mangrovenholzschild", "tile.mangrove_trapdoor.name": "Mangrovenfalltür", "tile.mangrove_wood.name": "Mangrovenholz", "tile.stripped_mangrove_wood.name": "Abgezogenes Mangrovenholz", @@ -11466,7 +10317,7 @@ export const langs: Langs = { "item.record_5.desc": "Samuel Åberg – 5", "entity.chest_boat.name": "Truhenboot", "entity.camel.name": "Dromedar", - "entity.chest_raft.name": "Floß mit Truhe", + "entity.chest_raft.name": "Truhenfloß", "item.acacia_hanging_sign.name": "Akazienhängeschild", "item.angler_pottery_sherd.name": "Angler-Keramikscherbe", "item.archer_pottery_sherd.name": "Bogenschützen-Keramikscherbe", @@ -11484,8 +10335,8 @@ export const langs: Langs = { "item.burn_pottery_sherd.name": "Brand-Keramikscherbe", "item.cherry_door.name": "Kirschholztür", "item.cherry_hanging_sign.name": "Kirschholz-Hängeschild", - "item.cherry_sign.name": "Kirschholz-Schild", - "item.chest_boat.bamboo.name": "Bambusfloß mit Truhe", + "item.cherry_sign.name": "Kirschholzschild", + "item.chest_boat.bamboo.name": "Bambus-Truhenfloß", "item.chest_boat.cherry.name": "Kirschholz-Truhenboot", "item.crimson_hanging_sign.name": "Karmesinhängeschild", "item.danger_pottery_sherd.name": "Gefahren-Keramikscherbe", @@ -11493,7 +10344,7 @@ export const langs: Langs = { "item.explorer_pottery_sherd.name": "Entdecker-Keramikscherbe", "item.flow_pottery_sherd.name": "Fluss-Keramikscherbe", "item.friend_pottery_sherd.name": "Freund-Keramikscherbe", - "item.guster_pottery_sherd.name": "Guster-Keramikscherbe", + "item.guster_pottery_sherd.name": "Windstoßer-Keramikscherbe", "item.heart_pottery_sherd.name": "Herz-Keramikscherbe", "item.heartbreak_pottery_sherd.name": "Herzschmerz-Keramikscherbe", "item.howl_pottery_sherd.name": "Heulen-Keramikscherbe", @@ -11512,7 +10363,7 @@ export const langs: Langs = { "item.smithing_template.applies_to": "Gilt für:", "item.smithing_template.armor_trim.applies_to": "Rüstung", "item.smithing_template.armor_trim.ingredients": "Barren und Kristalle", - "item.smithing_template.ingredients": "Zutaten:", + "item.smithing_template.ingredients": "Werkstoffe:", "item.smithing_template.name": "Schmiedevorlage", "item.smithing_template.netherite_upgrade.applies_to": "Diamant-Ausrüstung", "item.smithing_template.netherite_upgrade.ingredients": "Netheritbarren", @@ -11557,10 +10408,10 @@ export const langs: Langs = { "tile.cherry_fence_gate.name": "Kirschholz-Zauntor", "tile.cherry_fence.name": "Kirschholz-Zaun", "tile.cherry_leaves.name": "Kirschlaub", - "tile.cherry_log.name": "Kirschbaumstamm", + "tile.cherry_log.name": "Kirschstamm", "tile.cherry_planks.name": "Kirschholz-Bretter", "tile.cherry_pressure_plate.name": "Kirschholzdruckplatte", - "tile.cherry_sapling.name": "Kirschbaumsetzling", + "tile.cherry_sapling.name": "Kirschsetzling", "tile.cherry_slab.name": "Kirschholz-Stufe", "tile.cherry_stairs.name": "Kirschholz-Treppe", "tile.cherry_trapdoor.name": "Kirschholz-Falltür", @@ -11571,7 +10422,7 @@ export const langs: Langs = { "tile.decorated_pot.name": "Dekorierter Topf", "tile.pink_petals.name": "Rosa Blütenblätter", "tile.stripped_bamboo_block.name": "Abgestreifter Bambusblock", - "tile.stripped_cherry_log.name": "Abgezogener Kirschbaumstamm", + "tile.stripped_cherry_log.name": "Entrindeter Kirschstamm", "tile.stripped_cherry_wood.name": "Abgezogenes Kirschholz", "tile.suspicious_gravel.name": "Verdächtiger Kies", "tile.suspicious_sand.name": "Verdächtiger Sand", @@ -11603,7 +10454,7 @@ export const langs: Langs = { "tile.border_block.name": "Grenze", "tile.anvil.intact.name": "Amboss", "tile.anvil.name": "Amboss", - "tile.anvil.slightlyDamaged.name": "Abgenutzter Amboss", + "tile.anvil.slightlyDamaged.name": "Angeschlagener Amboss", "tile.anvil.veryDamaged.name": "Beschädigter Amboss", "tile.barrier.name": "Barriere", "tile.beacon.name": "Leuchtfeuer", @@ -11645,17 +10496,17 @@ export const langs: Langs = { "tile.moss_carpet.name": "Moosteppich", "tile.birchFence.name": "Birkenzaun", "tile.birch_fence_gate.name": "Birkenzauntor", - "tile.blast_furnace.name": "Hochofen", + "tile.blast_furnace.name": "Schmelzofen", "tile.bone_block.name": "Knochenblock", "tile.coal_block.name": "Kohleblock", "tile.diamond_block.name": "Diamantblock", "tile.emerald_block.name": "Smaragdblock", "tile.gold_block.name": "Goldblock", "tile.iron_block.name": "Eisenblock", - "tile.lapis_block.name": "Lapislazuli-Block", + "tile.lapis_block.name": "Lapislazuliblock", "tile.redstone_block.name": "Redstone-Block", "tile.bookshelf.name": "Bücherregal", - "tile.brick_block.name": "Ziegel", + "tile.brick_block.name": "Ziegelsteine", "tile.brown_mushroom.name": "Brauner Pilz", "tile.brown_mushroom_block.mushroom.name": "Pilz", "tile.brown_mushroom_block.stem.name": "Pilzstamm", @@ -11864,7 +10715,7 @@ export const langs: Langs = { "tile.repeating_command_block.name": "Wiederhol-Befehlsblock", "tile.chain_command_block.name": "Befehlsblock verketten", "tile.wheat.name": "Getreide", - "tile.darkOakFence.name": "Schwarzeichenzaun", + "tile.darkOakFence.name": "Schwarzeichenholzzaun", "tile.dark_oak_fence_gate.name": "Schwarzeichenzauntor", "tile.daylight_detector.name": "Tageslicht-Detektor", "tile.deadbush.name": "Abgestorbener Strauch", @@ -11893,7 +10744,7 @@ export const langs: Langs = { "tile.end_portal_frame.name": "Endportalrahmen", "tile.farmland.name": "Ackerboden", "tile.fletching_table.name": "Bognertisch", - "tile.fence.name": "Eichenzaun", + "tile.fence.name": "Eichenholzzaun", "tile.fence_gate.name": "Eichenzauntor", "tile.iron_bars.name": "Eisengitter", "tile.fire.name": "Feuer", @@ -11920,7 +10771,7 @@ export const langs: Langs = { "tile.grass.name": "Grasblock", "tile.grass_path.name": "Trampelpfad", "tile.gravel.name": "Kies", - "tile.hay_block.name": "Heuballen", + "tile.hay_block.name": "Strohballen", "tile.netherrack.name": "Netherstein", "tile.soul_sand.name": "Seelensand", "tile.hopper.name": "Trichter", @@ -11947,7 +10798,14 @@ export const langs: Langs = { "tile.lever.name": "Hebel", "tile.glowstone.name": "Leuchtstein", "tile.glow_lichen.name": "Leuchtflechte", - "tile.lightning_rod.name": "Blitzableiter", + "tile.lightning_rod.name": "Blitzstab", + "tile.exposed_lightning_rod.name": "Angelaufener Blitzstab", + "tile.weathered_lightning_rod.name": "Verwitterter Blitzstab", + "tile.oxidized_lightning_rod.name": "Oxidierter Blitzstab", + "tile.waxed_lightning_rod.name": "Gewachster Blitzstab", + "tile.waxed_exposed_lightning_rod.name": "Gewachster angelaufener Blitzstab", + "tile.waxed_weathered_lightning_rod.name": "Gewachster verwitterter Blitzstab", + "tile.waxed_oxidized_lightning_rod.name": "Gewachster oxidierter Blitzstab", "tile.lit_pumpkin.name": "Kürbislaterne", "tile.lockedchest.name": "Verschlossene Truhe", "tile.log.acacia.name": "Akazienstamm", @@ -11971,7 +10829,7 @@ export const langs: Langs = { "tile.noteblock.name": "Notenblock", "tile.mycelium.name": "Myzel", "tile.nether_brick.name": "Nether-Ziegel", - "tile.red_nether_brick.name": "Rote Nether-Ziegel", + "tile.red_nether_brick.name": "Rote Netherziegel", "tile.nether_brick_fence.name": "Netherziegelzaun", "tile.quartz_ore.name": "Netherquarzerz", "tile.netherreactor.active": "Aktiv!", @@ -12006,7 +10864,7 @@ export const langs: Langs = { "tile.acacia_pressure_plate.name": "Akaziendruckplatte", "tile.birch_pressure_plate.name": "Birkendruckplatte", "tile.dark_oak_pressure_plate.name": "Schwarzeichendruckplatte", - "tile.jungle_pressure_plate.name": "Tropenholzdruckplatte", + "tile.jungle_pressure_plate.name": "Tropenholz-Druckplatte", "tile.spruce_pressure_plate.name": "Fichtendruckplatte", "tile.prismarine.bricks.name": "Prismarinziegel", "tile.prismarine.dark.name": "Dunkler Prismarin", @@ -12147,7 +11005,7 @@ export const langs: Langs = { "tile.stone_slab2.purpur.name": "Purpurstufe", "tile.stone_slab2.prismarine.rough.name": "Prismarinstufe", "tile.stone_slab2.prismarine.dark.name": "Dunkle Prismarinstufe", - "tile.stone_slab2.prismarine.bricks.name": "Prismarinziegel-Stufe", + "tile.stone_slab2.prismarine.bricks.name": "Prismarinziegelstufe", "tile.stone_slab2.mossy_cobblestone.name": "Bemooste Bruchsteinstufe", "tile.stone_slab2.red_nether_brick.name": "Rote Netherziegelstufe", "tile.stone_slab2.sandstone.smooth.name": "Glatte Sandsteinstufe", @@ -12168,15 +11026,15 @@ export const langs: Langs = { "tile.coral_block.pink.name": "Hirnkorallenblock", "tile.coral_block.purple.name": "Blasenkorallenblock", "tile.coral_block.red.name": "Feuerkorallenblock", - "tile.coral_block.yellow.name": "Runzelkorallenblock", + "tile.coral_block.yellow.name": "Geweihkorallenblock", "tile.coral_block.blue_dead.name": "Abgestorbener Orgelkorallenblock", "tile.coral_block.pink_dead.name": "Abgestorbener Hirnkorallenblock", "tile.coral_block.purple_dead.name": "Abgestorbener Blasenkorallenblock", "tile.coral_block.red_dead.name": "Abgestorbener Feuerkorallenblock", - "tile.coral_block.yellow_dead.name": "Abgestorbener Runzelkorallenblock", + "tile.coral_block.yellow_dead.name": "Abgestorbener Geweihkorallenblock", "tile.tallgrass.fern.name": "Farn", - "tile.tallgrass.grass.name": "Kurzes Gras", - "tile.tallgrass.name": "Kurzes Gras", + "tile.tallgrass.grass.name": "Niedriges Gras", + "tile.tallgrass.name": "Niedriges Gras", "tile.tallgrass.shrub.name": "Strauch", "tile.tuff_brick_slab.name": "Tuffsteinziegelstufe", "tile.tuff_brick_stairs.name": "Tuffsteinziegeltreppe", @@ -12192,22 +11050,22 @@ export const langs: Langs = { "tile.coral.pink.name": "Hirnkoralle", "tile.coral.purple.name": "Blasenkoralle", "tile.coral.red.name": "Feuerkoralle", - "tile.coral.yellow.name": "Runzelkoralle", + "tile.coral.yellow.name": "Geweihkoralle", "tile.coral.blue_dead.name": "Abgestorbene Orgelkoralle", "tile.coral.pink_dead.name": "Abgestorbene Hirnkoralle", "tile.coral.purple_dead.name": "Abgestorbene Blasenkoralle", "tile.coral.red_dead.name": "Abgestorbene Feuerkoralle", - "tile.coral.yellow_dead.name": "Abgestorbene Runzelkoralle", + "tile.coral.yellow_dead.name": "Abgestorbene Geweihkoralle", "tile.coral_fan.blue_fan.name": "Orgelkorallenfächer", "tile.coral_fan.pink_fan.name": "Hirnkorallenfächer", "tile.coral_fan.purple_fan.name": "Blasenkorallenfächer", "tile.coral_fan.red_fan.name": "Feuerkorallenfächer", - "tile.coral_fan.yellow_fan.name": "Runzelkorallenfächer", + "tile.coral_fan.yellow_fan.name": "Geweihkorallenfächer", "tile.coral_fan_dead.blue_fan.name": "Abgestorbener Orgelkorallenfächer", "tile.coral_fan_dead.pink_fan.name": "Abgestorbener Hirnkorallenfächer", "tile.coral_fan_dead.purple_fan.name": "Abgestorbener Blasenkorallenfächer", "tile.coral_fan_dead.red_fan.name": "Abgestorbener Feuerkorallenfächer", - "tile.coral_fan_dead.yellow_fan.name": "Abgestorbener Runzelkorallenfächer", + "tile.coral_fan_dead.yellow_fan.name": "Abgestorbener Geweihkorallenfächer", "tile.glass_pane.name": "Glasscheibe", "tile.tnt.name": "TNT", "tile.snow_layer.name": "Schnee", @@ -12219,7 +11077,7 @@ export const langs: Langs = { "tile.jungle_trapdoor.name": "Tropenholz-Falltür", "tile.spruce_trapdoor.name": "Fichtenfalltür", "tile.tripWire.name": "Stolperdraht", - "tile.tripwire_hook.name": "Stolperdrahthaken", + "tile.tripwire_hook.name": "Haken", "tile.vine.name": "Ranken", "tile.weeping_vines.name": "Trauerranken", "tile.twisting_vines.name": "Zwirbelranken", @@ -12266,7 +11124,7 @@ export const langs: Langs = { "tile.crafting_table.name": "Werkbank", "tile.pale_oak_button.name": "Blasseichen-Schaltfläche", "tile.pale_oak_double_slab.name": "Blasseichen-Doppelstufe", - "tile.pale_oak_fence.name": "Blasseichenzaun", + "tile.pale_oak_fence.name": "Blasseichenholzzaun", "tile.pale_oak_fence_gate.name": "Blasseichenzauntor", "tile.pale_oak_log.name": "Blasseichenstamm", "tile.pale_oak_planks.name": "Blasseichenbretter", @@ -12386,7 +11244,7 @@ export const langs: Langs = { "tile.wood.stripped.jungle.name": "Abgezogenes Tropenholz", "tile.wood.stripped.acacia.name": "Abgezogenes Akazienholz", "tile.wood.stripped.dark_oak.name": "Abgezogenes Schwarzeichenholz", - "tile.netherite_block.name": "Netherit-Block", + "tile.netherite_block.name": "Netheritblock", "tile.ancient_debris.name": "Antiker Schrott", "tile.nether_gold_ore.name": "Nethergolderz", "tile.respawn_anchor.name": "Seelenanker", @@ -12397,21 +11255,21 @@ export const langs: Langs = { "tile.cobbled_deepslate.name": "Bruchtiefenschiefer", "tile.dripstone_block.name": "Tropfsteinblock", "tile.pointed_dripstone.name": "Spitzer Tropfstein", - "tile.cobbled_deepslate_slab.name": "Bruchtiefenschiefer-Stufe", - "tile.cobbled_deepslate_stairs.name": "Bruchtiefenschiefer-Treppe", - "tile.cobbled_deepslate_wall.name": "Bruchtiefenschiefer-Mauer", + "tile.cobbled_deepslate_slab.name": "Bruchtiefenschieferstufe", + "tile.cobbled_deepslate_stairs.name": "Bruchtiefenschiefertreppe", + "tile.cobbled_deepslate_wall.name": "Bruchtiefenschiefermauer", "tile.polished_deepslate.name": "Polierter Tiefenschiefer", "tile.polished_deepslate_slab.name": "Polierte Tiefenschieferstufe", "tile.polished_deepslate_stairs.name": "Polierte Tiefenschiefertreppe", "tile.polished_deepslate_wall.name": "Polierte Tiefenschiefermauer", "tile.deepslate_tiles.name": "Tiefenschieferfliesen", - "tile.deepslate_tile_slab.name": "Tiefenschiefer-Fliesenstufe", - "tile.deepslate_tile_stairs.name": "Tiefenschiefer-Fliesentreppe", - "tile.deepslate_tile_wall.name": "Tiefenschiefer-Fliesenmauer", + "tile.deepslate_tile_slab.name": "Tiefenschieferfliesenstufe", + "tile.deepslate_tile_stairs.name": "Tiefenschieferfliesentreppe", + "tile.deepslate_tile_wall.name": "Tiefenschieferfliesenmauer", "tile.deepslate_bricks.name": "Tiefenschieferziegel", - "tile.deepslate_brick_slab.name": "Tiefenschiefer-Ziegelstufe", - "tile.deepslate_brick_stairs.name": "Tiefenschiefer-Ziegeltreppe", - "tile.deepslate_brick_wall.name": "Tiefenschiefer-Ziegelmauer", + "tile.deepslate_brick_slab.name": "Tiefenschieferziegelstufe", + "tile.deepslate_brick_stairs.name": "Tiefenschieferziegeltreppe", + "tile.deepslate_brick_wall.name": "Tiefenschieferziegelmauer", "tile.chiseled_deepslate.name": "Gemeißelter Tiefenschiefer", "tile.cobbled_deepslate_double_slab.name": "Bruchtiefenschiefer-Doppelstufe", "tile.polished_deepslate_double_slab.name": "Polierte Tiefenschiefer-Doppelstufe", @@ -12435,74 +11293,74 @@ export const langs: Langs = { "item.raw_iron.name": "Roheisen", "item.raw_gold.name": "Rohgold", "tile.copper_block.name": "Kupferblock", - "tile.exposed_copper.name": "Freiliegendes Kupfer", + "tile.exposed_copper.name": "Angelaufenes Kupfer", "tile.weathered_copper.name": "Verwittertes Kupfer", "tile.oxidized_copper.name": "Oxidiertes Kupfer", "tile.waxed_copper.name": "Gewachster Kupferblock", - "tile.waxed_exposed_copper.name": "Gewachstes freiliegendes Kupfer", - "tile.waxed_weathered_copper.name": "Gewachstes verwittertes Kupfer", + "tile.waxed_exposed_copper.name": "Gewachstes angelaufenes Kupfer", + "tile.waxed_weathered_copper.name": "Gewachster verwitterter Kupferblock", "tile.waxed_oxidized_copper.name": "Gewachstes oxidiertes Kupfer", - "tile.cut_copper.name": "Geschliffenes Kupfer", - "tile.exposed_cut_copper.name": "Freiliegendes geschliffenes Kupfer", - "tile.weathered_cut_copper.name": "Verwittertes geschliffenes Kupfer", - "tile.oxidized_cut_copper.name": "Oxidiertes geschliffenes Kupfer", - "tile.waxed_cut_copper.name": "Gewachstes geschliffenes Kupfer", - "tile.waxed_exposed_cut_copper.name": "Gewachstes freiliegendes geschliffenes Kupfer", - "tile.waxed_weathered_cut_copper.name": "Gewachstes verwittertes geschliffenes Kupfer", - "tile.waxed_oxidized_cut_copper.name": "Gewachstes oxidiertes geschliffenes Kupfer", - "tile.cut_copper_stairs.name": "Geschliffene Kupfertreppe", - "tile.exposed_cut_copper_stairs.name": "Freiliegende geschliffene Kupfertreppe", - "tile.weathered_cut_copper_stairs.name": "Verwitterte geschliffene Kupfertreppe", - "tile.oxidized_cut_copper_stairs.name": "Oxidierte geschliffene Kupfertreppe", - "tile.waxed_cut_copper_stairs.name": "Gewachste geschliffene Kupfertreppe", - "tile.waxed_exposed_cut_copper_stairs.name": "Gewachste freiliegende geschliffene Kupfertreppe", - "tile.waxed_weathered_cut_copper_stairs.name": "Gewachste verwitterte geschliffene Kupfertreppe", - "tile.waxed_oxidized_cut_copper_stairs.name": "Gewachste oxidierte geschliffene Kupfertreppe", - "tile.cut_copper_slab.name": "Geschliffene Kupferstufe", - "tile.exposed_cut_copper_slab.name": "Freiliegende geschliffene Kupferstufe", - "tile.weathered_cut_copper_slab.name": "Verwitterte geschliffene Kupferstufe", - "tile.oxidized_cut_copper_slab.name": "Oxidierte geschliffene Kupferstufe", - "tile.waxed_cut_copper_slab.name": "Gewachste geschliffene Kupferstufe", - "tile.waxed_exposed_cut_copper_slab.name": "Gewachste freiliegende geschliffene Kupferstufe", - "tile.waxed_weathered_cut_copper_slab.name": "Gewachste verwitterte geschliffene Kupferstufe", - "tile.waxed_oxidized_cut_copper_slab.name": "Gewachste oxidierte geschliffene Kupferstufe", + "tile.cut_copper.name": "Geschnittener Kupferblock", + "tile.exposed_cut_copper.name": "Angelaufenes geschnittenes Kupfer", + "tile.weathered_cut_copper.name": "Verwitterter geschnittener Kupferblock", + "tile.oxidized_cut_copper.name": "Oxidierter geschnittener Kupferblock", + "tile.waxed_cut_copper.name": "Gewachster geschnittener Kupferblock", + "tile.waxed_exposed_cut_copper.name": "Gewachstes angelaufenes geschnittenes Kupfer", + "tile.waxed_weathered_cut_copper.name": "Gewachster verwitterter geschnittener Kupferblock", + "tile.waxed_oxidized_cut_copper.name": "Gewachster oxidierter geschnittener Kupferblock", + "tile.cut_copper_stairs.name": "Geschnittene Kupfertreppe", + "tile.exposed_cut_copper_stairs.name": "Angelaufene geschnittene Kupfertreppe", + "tile.weathered_cut_copper_stairs.name": "Verwitterte geschnittene Kupfertreppe", + "tile.oxidized_cut_copper_stairs.name": "Oxidierte geschnittene Kupfertreppe", + "tile.waxed_cut_copper_stairs.name": "Gewachste geschnittene Kupfertreppe", + "tile.waxed_exposed_cut_copper_stairs.name": "Gewachste angelaufene geschnittene Kupfertreppe", + "tile.waxed_weathered_cut_copper_stairs.name": "Gewachste verwitterte geschnittene Kupfertreppe", + "tile.waxed_oxidized_cut_copper_stairs.name": "Gewachste oxidierte geschnittene Kupfertreppe", + "tile.cut_copper_slab.name": "Geschnittene Kupferstufe", + "tile.exposed_cut_copper_slab.name": "Angelaufene geschnittene Kupferstufe", + "tile.weathered_cut_copper_slab.name": "Verwitterte geschnittene Kupferstufe", + "tile.oxidized_cut_copper_slab.name": "Oxidierte geschnittene Kupferstufe", + "tile.waxed_cut_copper_slab.name": "Gewachste geschnittene Kupferstufe", + "tile.waxed_exposed_cut_copper_slab.name": "Gewachste angelaufene geschnittene Kupferstufe", + "tile.waxed_weathered_cut_copper_slab.name": "Gewachste verwitterte geschnittene Kupferstufe", + "tile.waxed_oxidized_cut_copper_slab.name": "Gewachste oxidierte geschnittene Kupferstufe", "tile.chiseled_copper.name": "Gemeißeltes Kupfer", - "tile.exposed_chiseled_copper.name": "Freiliegendes gemeißeltes Kupfer", + "tile.exposed_chiseled_copper.name": "Angelaufenes gemeißeltes Kupfer", "tile.oxidized_chiseled_copper.name": "Oxidiertes gemeißeltes Kupfer", "tile.waxed_chiseled_copper.name": "Gewachstes gemeißeltes Kupfer", - "tile.waxed_exposed_chiseled_copper.name": "Gewachstes freiliegendes gemeißeltes Kupfer", + "tile.waxed_exposed_chiseled_copper.name": "Gewachstes angelaufenes gemeißeltes Kupfer", "tile.waxed_oxidized_chiseled_copper.name": "Gewachstes oxidiertes gemeißeltes Kupfer", "tile.waxed_weathered_chiseled_copper.name": "Gewachstes verwittertes gemeißeltes Kupfer", "tile.weathered_chiseled_copper.name": "Verwittertes gemeißeltes Kupfer", "tile.copper_bulb.name": "Kupferleuchte", - "tile.exposed_copper_bulb.name": "Freiliegende Kupferleuchte", + "tile.exposed_copper_bulb.name": "Angelaufene Kupferleuchte", "tile.oxidized_copper_bulb.name": "Oxidierte Kupferleuchte", "tile.waxed_copper_bulb.name": "Gewachste Kupferleuchte", - "tile.waxed_exposed_copper_bulb.name": "Gewachste freiliegende Kupferleuchte", + "tile.waxed_exposed_copper_bulb.name": "Gewachste angelaufene Kupferleuchte", "tile.waxed_oxidized_copper_bulb.name": "Gewachste oxidierte Kupferleuchte", "tile.waxed_weathered_copper_bulb.name": "Gewachste verwitterte Kupferleuchte", "tile.weathered_copper_bulb.name": "Verwitterte Kupferleuchte", "tile.copper_door.name": "Kupfertür", - "tile.exposed_copper_door.name": "Freiliegende Kupfertür", + "tile.exposed_copper_door.name": "Angelaufene Kupfertür", "tile.oxidized_copper_door.name": "Oxidierte Kupfertür", "tile.waxed_copper_door.name": "Gewachste Kupfertür", - "tile.waxed_exposed_copper_door.name": "Gewachste freiliegende Kupfertür", + "tile.waxed_exposed_copper_door.name": "Gewachste angelaufene Kupfertür", "tile.waxed_oxidized_copper_door.name": "Gewachste oxidierte Kupfertür", "tile.waxed_weathered_copper_door.name": "Gewachste verwitterte Kupfertür", "tile.weathered_copper_door.name": "Verwitterte Kupfertür", "tile.copper_grate.name": "Kupferrost", - "tile.exposed_copper_grate.name": "Freiliegender Kupferrost", + "tile.exposed_copper_grate.name": "Angelaufener Kupferrost", "tile.oxidized_copper_grate.name": "Oxidierter Kupferrost", "tile.waxed_copper_grate.name": "Gewachster Kupferrost", - "tile.waxed_exposed_copper_grate.name": "Gewachster freiliegender Kupferrost", + "tile.waxed_exposed_copper_grate.name": "Gewachster angelaufener Kupferrost", "tile.waxed_oxidized_copper_grate.name": "Gewachster oxidierter Kupferrost", "tile.waxed_weathered_copper_grate.name": "Gewachster verwitterter Kupferrost", "tile.weathered_copper_grate.name": "Verwitterter Kupferrost", "tile.copper_trapdoor.name": "Kupferfalltür", - "tile.exposed_copper_trapdoor.name": "Freiliegende Kupferfalltür", + "tile.exposed_copper_trapdoor.name": "Angelaufene Kupferfalltür", "tile.oxidized_copper_trapdoor.name": "Oxidierte Kupferfalltür", "tile.waxed_copper_trapdoor.name": "Gewachste Kupferfalltür", - "tile.waxed_exposed_copper_trapdoor.name": "Gewachste freiliegende Kupferfalltür", + "tile.waxed_exposed_copper_trapdoor.name": "Gewachste angelaufene Kupferfalltür", "tile.waxed_oxidized_copper_trapdoor.name": "Gewachste oxidierte Kupferfalltür", "tile.waxed_weathered_copper_trapdoor.name": "Gewachste verwitterte Kupferfalltür", "tile.weathered_copper_trapdoor.name": "Verwitterte Kupferfalltür", @@ -12544,7 +11402,7 @@ export const langs: Langs = { "tile.red_candle_cake.name": "Kuchen mit roter Kerze", "tile.black_candle_cake.name": "Kuchen mit schwarzer Kerze", "item.spyglass.name": "Fernrohr", - "item.amethyst_shard.name": "Amethystsplitter", + "item.amethyst_shard.name": "Amethystscherbe", "tile.amethyst_block.name": "Amethystblock", "tile.budding_amethyst.name": "Amethystknospenblock", "tile.amethyst_cluster.name": "Amethysthaufen", @@ -12563,7 +11421,92 @@ export const langs: Langs = { "item.brown_egg.name": "Braunes Ei", "item.blue_egg.name": "Blaues Ei", "tile.short_dry_grass.name": "Kurzes trockenes Gras", - "tile.tall_dry_grass.name": "Hohes trockenes Gras" + "tile.tall_dry_grass.name": "Hohes trockenes Gras", + "entity.happy_ghast.name": "Fröhlicher Ghast", + "item.spawn_egg.entity.happy_ghast.name": "Spawn-Ei mit fröhlichem Ghast", + "tile.dried_ghast.name": "Getrockneter Ghast", + "item.black_harness.name": "Schwarzer Harnisch", + "item.blue_harness.name": "Blauer Harnisch", + "item.brown_harness.name": "Brauner Harnisch", + "item.cyan_harness.name": "Türkiser Harnisch", + "item.gray_harness.name": "Grauer Harnisch", + "item.green_harness.name": "Grüner Harnisch", + "item.light_blue_harness.name": "Hellblauer Harnisch", + "item.light_gray_harness.name": "Hellgrauer Harnisch", + "item.lime_harness.name": "Hellgrüner Harnisch", + "item.magenta_harness.name": "Magentafarbener Harnisch", + "item.orange_harness.name": "Oranger Harnisch", + "item.pink_harness.name": "Rosa Harnisch", + "item.purple_harness.name": "Violetter Harnisch", + "item.red_harness.name": "Roter Harnisch", + "item.white_harness.name": "Weißer Harnisch", + "item.yellow_harness.name": "Gelber Harnisch", + "entity.copper_golem.name": "Kupfergolem", + "item.spawn_egg.entity.copper_golem.name": "Kupfergolem-Spawn-Ei", + "item.copper_nugget.name": "Kupferklumpen", + "item.copper_sword.name": "Kupferschwert", + "item.copper_pickaxe.name": "Kupferspitzhacke", + "item.copper_axe.name": "Kupferaxt", + "item.copper_shovel.name": "Kupferschaufel", + "item.copper_hoe.name": "Kupferhacke", + "item.copper_boots.name": "Kupferstiefel", + "item.copper_leggings.name": "Kupferbeinschutz", + "item.copper_chestplate.name": "Kupferharnisch", + "item.copper_helmet.name": "Kupferhelm", + "tile.copper_chest.name": "Kupfertruhe", + "tile.exposed_copper_chest.name": "Angelaufene Kupfertruhe", + "tile.weathered_copper_chest.name": "Verwitterte Kupfertruhe", + "tile.oxidized_copper_chest.name": "Oxidierte Kupfertruhe", + "tile.waxed_copper_chest.name": "Gewachste Kupfertruhe", + "tile.waxed_exposed_copper_chest.name": "Gewachste angelaufene Kupfertruhe", + "tile.waxed_weathered_copper_chest.name": "Gewachste verwitterte Kupfertruhe", + "tile.waxed_oxidized_copper_chest.name": "Gewachste oxidierte Kupfertruhe", + "tile.acacia_shelf.name": "Akazienregal", + "tile.bamboo_shelf.name": "Bambusregal", + "tile.birch_shelf.name": "Birkenregal", + "tile.cherry_shelf.name": "Kirschholzregal", + "tile.crimson_shelf.name": "Karmesinrotes Regal", + "tile.dark_oak_shelf.name": "Schwarzeichenregal", + "tile.jungle_shelf.name": "Tropenholzregal", + "tile.mangrove_shelf.name": "Mangrovenregal", + "tile.oak_shelf.name": "Eichenregal", + "tile.pale_oak_shelf.name": "Blasseiche-Regal", + "tile.spruce_shelf.name": "Fichtenregal", + "tile.warped_shelf.name": "Wirrholzregal", + "tile.copper_golem_statue.name": "Kupfergolemstatue", + "tile.exposed_copper_golem_statue.name": "Angelaufene Kupfergolemstatue", + "tile.weathered_copper_golem_statue.name": "Verwitterte Kupfergolemstatue", + "tile.oxidized_copper_golem_statue.name": "Oxidierte Kupfergolemstatue", + "tile.waxed_copper_golem_statue.name": "Gewachste Kupfergolemstatue", + "tile.waxed_exposed_copper_golem_statue.name": "Gewachste angelaufene Kupfergolemstatue", + "tile.waxed_weathered_copper_golem_statue.name": "Gewachste verwitterte Kupfergolemstatue", + "tile.waxed_oxidized_copper_golem_statue.name": "Gewachste oxidierte-Kupfergolemstatue", + "tile.copper_chain.name": "Kupferkette", + "tile.exposed_copper_chain.name": "Angelaufene Kupferkette", + "tile.weathered_copper_chain.name": "Verwitterte Kupferkette", + "tile.oxidized_copper_chain.name": "Oxidierte Kupferkette", + "tile.waxed_copper_chain.name": "Gewachste Kupferkette", + "tile.waxed_exposed_copper_chain.name": "Gewachste angelaufene Kupferkette", + "tile.waxed_weathered_copper_chain.name": "Gewachste verwitterte Kupferkette", + "tile.waxed_oxidized_copper_chain.name": "Gewachste oxidierte Kupferkette", + "tile.copper_bars.name": "Kupfergitterstäbe", + "tile.exposed_copper_bars.name": "Angelaufene Kupfergitterstäbe", + "tile.weathered_copper_bars.name": "Verwitterte Kupfergitterstäbe", + "tile.oxidized_copper_bars.name": "Oxidierte Kupfergitterstäbe", + "tile.waxed_copper_bars.name": "Gewachste Kupfergitterstäbe", + "tile.waxed_exposed_copper_bars.name": "Gewachste angelaufene Kupfergitterstäbe", + "tile.waxed_weathered_copper_bars.name": "Gewachste verwitterte Kupfergitterstäbe", + "tile.waxed_oxidized_copper_bars.name": "Gewachste oxidierte Kupfergitterstäbe", + "tile.copper_lantern.name": "Kupferlaterne", + "tile.exposed_copper_lantern.name": "Angelaufene Kupferlaterne", + "tile.weathered_copper_lantern.name": "Verwittertes Kupferlaterne", + "tile.oxidized_copper_lantern.name": "Oxidierte Kupferlaterne", + "tile.waxed_copper_lantern.name": "Gewachste Kupferlaterne", + "tile.waxed_exposed_copper_lantern.name": "Gewachste angelaufene Kupferlaterne", + "tile.waxed_weathered_copper_lantern.name": "Gewachstes verwittertes Kupferlaterne", + "tile.waxed_oxidized_copper_lantern.name": "Gewachste oxidierte Kupfergitterlaterne", + "tile.copper_torch.name": "Kupferfackel", + "tile.iron_chain.name": "Eisenkette" }, "es_ES": { "enchantment.arrowDamage": "Poder", @@ -12583,7 +11526,7 @@ export const langs: Langs = { "enchantment.fire": "Aspecto ígneo", "enchantment.fishingSpeed": "Atracción", "enchantment.frostwalker": "Paso helado", - "enchantment.heavy_weapon.breach": "Incumplimiento", + "enchantment.heavy_weapon.breach": "Brecha", "enchantment.heavy_weapon.density": "Densidad", "enchantment.heavy_weapon.windburst": "Ráfaga de viento", "enchantment.knockback": "Derribar", @@ -13482,7 +12425,7 @@ export const langs: Langs = { "item.boat.oak.name": "Barco de roble", "item.boat.spruce.name": "Barco de abeto", "item.boat.birch.name": "Barco de abedul", - "item.boat.jungle.name": "Barco de la jungla", + "item.boat.jungle.name": "Barco de jungla", "item.boat.acacia.name": "Barco de acacia", "item.boat.big_oak.name": "Barco de roble oscuro", "item.bone.name": "Hueso", @@ -13723,6 +12666,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Armadura de diamante para caballo", "item.horsearmorgold.name": "Armadura de oro para caballo", "item.horsearmoriron.name": "Armadura de hierro para caballo", + "item.copper_horse_armor.name": "Armadura de cobre para caballo", "item.horsearmorleather.name": "Armadura de cuero para caballo", "item.gold_ingot.name": "Lingote de oro", "item.iron_ingot.name": "Lingote de hierro", @@ -13759,7 +12703,7 @@ export const langs: Langs = { "item.map.exploration.village_plains.name": "Mapa de aldea de las llanuras", "item.map.exploration.village_savanna.name": "Mapa de aldea de la sabana", "item.map.exploration.village_desert.name": "Mapa de aldea del desierto", - "item.map.exploration.jungle_temple.name": "Mapa de explorador de la jungla", + "item.map.exploration.jungle_temple.name": "Mapa de explorador de jungla", "item.map.exploration.swamp_hut.name": "Mapa de explorador del pantano", "item.map.exploration.trial_chambers.name": "Mapa de explorador de la prueba", "item.melon.name": "Rodaja de sandía", @@ -13906,6 +12850,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine: creadora", "item.record_creator_music_box.desc": "Lena Raine: creadora (caja de música)", "item.record_precipice.desc": "Aaron Cherof: precipicio", + "item.record_tears.desc": "Amos Roddy: Tears", + "item.record_lava_chicken.desc": "Hiperpociones: pollo de lava", "item.redstone.name": "Polvo de redstone", "item.reeds.name": "Caña de azúcar", "item.kelp.name": "Alga marina", @@ -14183,7 +13129,7 @@ export const langs: Langs = { "tile.pearlescent_froglight.name": "Ranaluz purpúrea", "tile.verdant_froglight.name": "Ranaluz verdeante", "tile.ochre_froglight.name": "Ranaluz ocre", - "tile.mud.name": "Fango", + "tile.mud.name": "Lodo", "tile.packed_mud.name": "Barro compacto", "tile.mud_bricks.name": "Ladrillos de barro", "tile.mud_brick_slab.name": "Losa de ladrillos de barro", @@ -14197,7 +13143,7 @@ export const langs: Langs = { "item.chest_boat.oak.name": "Barco de roble con cofre", "item.chest_boat.spruce.name": "Barco de abeto con cofre", "item.chest_boat.birch.name": "Barco de abedul con cofre", - "item.chest_boat.jungle.name": "Barco de la jungla con cofre", + "item.chest_boat.jungle.name": "Barco de jungla con cofre", "item.chest_boat.acacia.name": "Barco de acacia con cofre", "item.chest_boat.big_oak.name": "Barco de roble oscuro con cofre", "item.chest_boat.mangrove.name": "Barco del manglar con cofre", @@ -14626,7 +13572,7 @@ export const langs: Langs = { "tile.daylight_detector.name": "Detector de luz diurna", "tile.deadbush.name": "Arbusto muerto", "tile.detector_rail.name": "Raíl detector", - "tile.dirt.coarse.name": "Tierra basta", + "tile.dirt.coarse.name": "Tierra estéril", "tile.dirt.default.name": "Tierra", "tile.dirt.name": "Tierra", "tile.podzol.name": "Podsol", @@ -14697,7 +13643,7 @@ export const langs: Langs = { "tile.leaves.big_oak.name": "Hojas de roble oscuro", "tile.leaves2.big_oak.name": "Hojas de roble oscuro", "tile.leaves.birch.name": "Hojas de abedul", - "tile.leaves.jungle.name": "Hojas de la jungla", + "tile.leaves.jungle.name": "Hojas de jungla", "tile.leaves.name": "Hojas", "tile.leaves.oak.name": "Hojas de roble", "tile.leaves.spruce.name": "Hojas de abeto", @@ -14705,12 +13651,19 @@ export const langs: Langs = { "tile.glowstone.name": "Piedra brillante", "tile.glow_lichen.name": "Liquen resplandeciente", "tile.lightning_rod.name": "Pararrayos", + "tile.exposed_lightning_rod.name": "Pararrayos expuesto", + "tile.weathered_lightning_rod.name": "Pararrayos erosionado", + "tile.oxidized_lightning_rod.name": "Pararrayos oxidado", + "tile.waxed_lightning_rod.name": "Pararrayos encerado", + "tile.waxed_exposed_lightning_rod.name": "Pararrayos expuesto y encerado", + "tile.waxed_weathered_lightning_rod.name": "Pararrayos erosionado y encerado", + "tile.waxed_oxidized_lightning_rod.name": "Pararrayos oxidado y encerado", "tile.lit_pumpkin.name": "Calabaza iluminada", "tile.lockedchest.name": "Cofre cerrado", "tile.log.acacia.name": "Tronco de acacia", "tile.log.big_oak.name": "Tronco de roble oscuro", "tile.log.birch.name": "Tronco de abedul", - "tile.log.jungle.name": "Tronco de la jungla", + "tile.log.jungle.name": "Tronco de jungla", "tile.log.name": "Tronco", "tile.log.oak.name": "Tronco de roble", "tile.log.spruce.name": "Tronco de abeto", @@ -14828,7 +13781,7 @@ export const langs: Langs = { "tile.acacia_stairs.name": "Escaleras de acacia", "tile.birch_stairs.name": "Escaleras de abedul", "tile.dark_oak_stairs.name": "Escaleras de roble oscuro", - "tile.jungle_stairs.name": "Escaleras de la jungla", + "tile.jungle_stairs.name": "Escaleras de jungla", "tile.spruce_stairs.name": "Escaleras de abeto", "tile.purpur_stairs.name": "Escaleras de púrpura", "tile.prismarine_stairs.name": "Escaleras de prismarina", @@ -14991,14 +13944,14 @@ export const langs: Langs = { "tile.planks.acacia.name": "Tablones de acacia", "tile.planks.big_oak.name": "Tablones de roble oscuro", "tile.planks.birch.name": "Tablones de abedul", - "tile.planks.jungle.name": "Tablones de la jungla", + "tile.planks.jungle.name": "Tablones de jungla", "tile.planks.name": "Tablones de madera", "tile.planks.oak.name": "Tablones de roble", "tile.planks.spruce.name": "Tablones de abeto", "tile.wooden_slab.acacia.name": "Losa de acacia", "tile.wooden_slab.big_oak.name": "Losa de roble oscuro", "tile.wooden_slab.birch.name": "Losa de abedul", - "tile.wooden_slab.jungle.name": "Losa de la jungla", + "tile.wooden_slab.jungle.name": "Losa de jungla", "tile.wooden_slab.name": "Losa de madera", "tile.wooden_slab.oak.name": "Losa de roble", "tile.wooden_slab.spruce.name": "Losa de abeto", @@ -15115,7 +14068,7 @@ export const langs: Langs = { "tile.stripped_spruce_log.name": "Tronco de abeto sin corteza", "tile.stripped_dark_oak_log.name": "Tronco de roble oscuro sin corteza", "tile.stripped_birch_log.name": "Tronco de abedul sin corteza", - "tile.stripped_jungle_log.name": "Tronco de la jungla sin corteza", + "tile.stripped_jungle_log.name": "Tronco de jungla sin corteza", "tile.stripped_oak_log.name": "Tronco de roble sin corteza", "tile.stripped_acacia_log.name": "Tronco de acacia sin corteza", "tile.bamboo.name": "Bambú", @@ -15134,13 +14087,13 @@ export const langs: Langs = { "tile.wood.oak.name": "Madera de roble", "tile.wood.spruce.name": "Madera de abeto", "tile.wood.birch.name": "Madera de abedul", - "tile.wood.jungle.name": "Madera de la jungla", + "tile.wood.jungle.name": "Madera de jungla", "tile.wood.acacia.name": "Madera de acacia", "tile.wood.dark_oak.name": "Madera de roble oscuro", "tile.wood.stripped.oak.name": "Madera de roble sin corteza", "tile.wood.stripped.spruce.name": "Madera de abeto sin corteza", "tile.wood.stripped.birch.name": "Madera de abedul sin corteza", - "tile.wood.stripped.jungle.name": "Madera de la jungla sin corteza", + "tile.wood.stripped.jungle.name": "Madera de jungla sin corteza", "tile.wood.stripped.acacia.name": "Madera de acacia sin corteza", "tile.wood.stripped.dark_oak.name": "Madera de roble oscuro sin corteza", "tile.netherite_block.name": "Bloque de inframundita", @@ -15189,7 +14142,7 @@ export const langs: Langs = { "tile.torchflower.name": "Bastón de emperador", "item.copper_ingot.name": "Lingote de cobre", "item.raw_copper.name": "Cobre bruto", - "item.raw_iron.name": "Hierro bruto", + "item.raw_iron.name": "Hierro en bruto", "item.raw_gold.name": "Oro bruto", "tile.copper_block.name": "Bloque de cobre", "tile.exposed_copper.name": "Cobre expuesto", @@ -15320,7 +14273,92 @@ export const langs: Langs = { "item.brown_egg.name": "Huevo marrón", "item.blue_egg.name": "Huevo azul", "tile.short_dry_grass.name": "Hierba corta seca", - "tile.tall_dry_grass.name": "Hierba alta seca" + "tile.tall_dry_grass.name": "Hierba alta seca", + "entity.happy_ghast.name": "Ghast feliz", + "item.spawn_egg.entity.happy_ghast.name": "Huevo generador de ghast feliz", + "tile.dried_ghast.name": "Ghast seco", + "item.black_harness.name": "Arnés negro", + "item.blue_harness.name": "Arnés azul", + "item.brown_harness.name": "Arnés marrón", + "item.cyan_harness.name": "Arnés cian", + "item.gray_harness.name": "Arnés gris", + "item.green_harness.name": "Arnés verde", + "item.light_blue_harness.name": "Arnés azul claro", + "item.light_gray_harness.name": "Arnés gris claro", + "item.lime_harness.name": "Arnés verde lima", + "item.magenta_harness.name": "Arnés magenta", + "item.orange_harness.name": "Arnés naranja", + "item.pink_harness.name": "Arnés rosa", + "item.purple_harness.name": "Arnés morado", + "item.red_harness.name": "Arnés rojo", + "item.white_harness.name": "Arnés blanco", + "item.yellow_harness.name": "Arnés amarillo", + "entity.copper_golem.name": "Gólem de cobre", + "item.spawn_egg.entity.copper_golem.name": "Huevo generador de gólem de cobre", + "item.copper_nugget.name": "Pepita de cobre", + "item.copper_sword.name": "Espada de cobre", + "item.copper_pickaxe.name": "Pico de cobre", + "item.copper_axe.name": "Hacha de cobre", + "item.copper_shovel.name": "Pala de cobre", + "item.copper_hoe.name": "Azada de cobre", + "item.copper_boots.name": "Botas de cobre", + "item.copper_leggings.name": "Grebas de cobre", + "item.copper_chestplate.name": "Peto de cobre", + "item.copper_helmet.name": "Casco de cobre", + "tile.copper_chest.name": "Cofre de cobre", + "tile.exposed_copper_chest.name": "Cofre de cobre expuesto", + "tile.weathered_copper_chest.name": "Cofre de cobre erosionado", + "tile.oxidized_copper_chest.name": "Cofre de cobre oxidado", + "tile.waxed_copper_chest.name": "Cofre de cobre encerado", + "tile.waxed_exposed_copper_chest.name": "Cofre de cobre expuesto encerado", + "tile.waxed_weathered_copper_chest.name": "Cofre de cobre erosionado encerado", + "tile.waxed_oxidized_copper_chest.name": "Cofre de cobre oxidado encerado", + "tile.acacia_shelf.name": "Estantería de acacia", + "tile.bamboo_shelf.name": "Estantería de bambú", + "tile.birch_shelf.name": "Estantería de abedul", + "tile.cherry_shelf.name": "Estantería de cerezo", + "tile.crimson_shelf.name": "Estantería carmesí", + "tile.dark_oak_shelf.name": "Estantería de roble oscuro", + "tile.jungle_shelf.name": "Estantería de jungla", + "tile.mangrove_shelf.name": "Estantería de manglar", + "tile.oak_shelf.name": "Estantería de roble", + "tile.pale_oak_shelf.name": "Estantería de roble pálido", + "tile.spruce_shelf.name": "Estantería de abeto", + "tile.warped_shelf.name": "Estantería deformada", + "tile.copper_golem_statue.name": "Estatua de gólem de cobre", + "tile.exposed_copper_golem_statue.name": "Estatua de gólem de cobre expuesto", + "tile.weathered_copper_golem_statue.name": "Estatua de gólem de cobre erosionado", + "tile.oxidized_copper_golem_statue.name": "Estatua de gólem de cobre oxidado", + "tile.waxed_copper_golem_statue.name": "Estatua de gólem de cobre encerado", + "tile.waxed_exposed_copper_golem_statue.name": "Estatua de gólem de cobre expuesto encerado", + "tile.waxed_weathered_copper_golem_statue.name": "Estatua de gólem de cobre erosionado encerado", + "tile.waxed_oxidized_copper_golem_statue.name": "Estatua de gólem de cobre oxidado encerado", + "tile.copper_chain.name": "Cadena de cobre", + "tile.exposed_copper_chain.name": "Cadena de cobre expuesto", + "tile.weathered_copper_chain.name": "Cadena de cobre erosionado", + "tile.oxidized_copper_chain.name": "Cadena de cobre oxidado", + "tile.waxed_copper_chain.name": "Cadena de cobre encerado", + "tile.waxed_exposed_copper_chain.name": "Cadena de cobre expuesto encerado", + "tile.waxed_weathered_copper_chain.name": "Cadena de cobre erosionado encerado", + "tile.waxed_oxidized_copper_chain.name": "Cadena de cobre oxidado encerado", + "tile.copper_bars.name": "Barrotes de cobre", + "tile.exposed_copper_bars.name": "Barrotes de cobre expuesto", + "tile.weathered_copper_bars.name": "Barrotes de cobre erosionado", + "tile.oxidized_copper_bars.name": "Barrotes de cobre oxidado", + "tile.waxed_copper_bars.name": "Barrotes de cobre encerado", + "tile.waxed_exposed_copper_bars.name": "Barrotes de cobre expuesto encerado", + "tile.waxed_weathered_copper_bars.name": "Barrotes de cobre erosionado encerado", + "tile.waxed_oxidized_copper_bars.name": "Barrotes de cobre oxidado encerado", + "tile.copper_lantern.name": "Farol de cobre", + "tile.exposed_copper_lantern.name": "Farol de cobre expuesto", + "tile.weathered_copper_lantern.name": "Farol de cobre erosionado", + "tile.oxidized_copper_lantern.name": "Farol de cobre oxidado", + "tile.waxed_copper_lantern.name": "Farol de cobre encerado", + "tile.waxed_exposed_copper_lantern.name": "Farol de cobre expuesto encerado", + "tile.waxed_weathered_copper_lantern.name": "Farol de cobre erosionado encerado", + "tile.waxed_oxidized_copper_lantern.name": "Farol de cobre oxidado encerado", + "tile.copper_torch.name": "Antorcha de cobre", + "tile.iron_chain.name": "Cadena de hierro" }, "es_MX": { "enchantment.arrowDamage": "Poder", @@ -15336,13 +14374,13 @@ export const langs: Langs = { "enchantment.damage.arthropods": "Daño de los artrópodos", "enchantment.damage.undead": "Castigo", "enchantment.digging": "Eficiencia", - "enchantment.durability": "Irrompibilidad", - "enchantment.fire": "Aspecto de fuego", - "enchantment.fishingSpeed": "Señuelo", + "enchantment.durability": "Irrompible", + "enchantment.fire": "Aspecto ígneo", + "enchantment.fishingSpeed": "Atracción", "enchantment.frostwalker": "Paso helado", - "enchantment.heavy_weapon.breach": "Invasión", + "enchantment.heavy_weapon.breach": "Brecha", "enchantment.heavy_weapon.density": "Densidad", - "enchantment.heavy_weapon.windburst": "Ráfaga ventosa", + "enchantment.heavy_weapon.windburst": "Ráfaga de viento", "enchantment.knockback": "Empuje", "enchantment.level.1": "I", "enchantment.level.10": "X", @@ -15360,14 +14398,14 @@ export const langs: Langs = { "enchantment.mending": "Reparación", "enchantment.oxygen": "Respiración", "enchantment.protect.all": "Protección", - "enchantment.protect.explosion": "Protección contra explosiones", + "enchantment.protect.explosion": "Protección de ráfagas", "enchantment.protect.fall": "Caída de pluma", "enchantment.protect.fire": "Protección del fuego", "enchantment.protect.projectile": "Protección contra proyectiles", - "enchantment.soul_speed": "Velocidad de alma", + "enchantment.soul_speed": "Velocidad de almas", "enchantment.swift_sneak": "Sigilo rápido", "enchantment.thorns": "Espinas", - "enchantment.untouching": "Toque de seda", + "enchantment.untouching": "Toque sedoso", "enchantment.waterWalker": "Agilidad acuática", "enchantment.waterWorker": "Afinidad al agua", "enchantment.tridentChanneling": "Canalización", @@ -15381,13 +14419,13 @@ export const langs: Langs = { "entity.bat.name": "Murciélago", "entity.bee.name": "Abeja", "entity.blaze.name": "Blaze", - "entity.boat.name": "Bote", + "entity.boat.name": "Barco", "entity.bogged.name": "Empantanado", "entity.breeze.name": "Brisa", - "entity.breeze_wind_charge_projectile.name": "Carga ventosa", + "entity.breeze_wind_charge_projectile.name": "carga ventosa", "entity.cat.name": "Gato", "entity.cave_spider.name": "Araña de las cuevas", - "entity.chicken.name": "Gallina", + "entity.chicken.name": "Pollo", "entity.cow.name": "Vaca", "entity.creaking.name": "Crepitante", "entity.creeper.name": "Creeper", @@ -15405,7 +14443,7 @@ export const langs: Langs = { "entity.endermite.name": "Endermite", "entity.ender_pearl.name": "Perla de Ender", "entity.evocation_illager.name": "Evocador", - "entity.evocation_fang.name": "Colmillo evocador", + "entity.evocation_fang.name": "Colmillo de evocador", "entity.eye_of_ender_signal.name": "Ojo de Ender", "entity.falling_block.name": "Bloque en caída", "entity.fireball.name": "Bola de fuego", @@ -15432,18 +14470,18 @@ export const langs: Langs = { "entity.lightning_bolt.name": "Rayo", "entity.lingering_potion.name": "Poción persistente", "entity.llama.name": "Llama", - "entity.trader_llama.name": "Comerciante llama", - "entity.llama_spit.name": "Escupitajo de llama", + "entity.trader_llama.name": "Llama de Comerciante", + "entity.llama_spit.name": "Saliva de llama", "entity.magma_cube.name": "Cubo de magma", "entity.minecart.name": "Vagoneta", "entity.chest_minecart.name": "Vagoneta con cofre", "entity.command_block_minecart.name": "Vagoneta con bloque de comandos", "entity.furnace_minecart.name": "Vagoneta con horno", - "entity.hopper_minecart.name": "Vagoneta con tolva", + "entity.hopper_minecart.name": "Vagoneta con embudo", "entity.tnt_minecart.name": "Vagoneta con dinamita", "entity.mule.name": "Mula", "entity.mooshroom.name": "Champiñaca", - "entity.moving_block.name": "Bloque móvil", + "entity.moving_block.name": "Bloque en movimiento", "entity.ocelot.name": "Ocelote", "entity.painting.name": "Cuadro", "entity.parrot.name": "Loro", @@ -15456,11 +14494,11 @@ export const langs: Langs = { "entity.sheep.name": "Oveja", "entity.shulker.name": "Shulker", "entity.shulker_bullet.name": "Bala de Shulker", - "entity.silverfish.name": "Pez de plata", + "entity.silverfish.name": "Pez plateado", "entity.skeleton.name": "Esqueleto", "entity.skeleton_horse.name": "Caballo esqueleto", "entity.stray.name": "Errante", - "entity.slime.name": "Slime", + "entity.slime.name": "Limo", "entity.small_fireball.name": "Bola de fuego pequeña", "entity.sniffer.name": "Rastreador", "entity.snowball.name": "Bola de nieve", @@ -15471,7 +14509,7 @@ export const langs: Langs = { "entity.strider.name": "Caminante", "entity.tnt.name": "Bloque de dinamita", "entity.thrown_trident.name": "Tridente", - "entity.tripod_camera.name": "Cámara con tripié", + "entity.tripod_camera.name": "Cámara con trípode", "entity.turtle.name": "Tortuga", "entity.unknown.name": "Desconocido", "entity.vex.name": "Vex", @@ -15489,15 +14527,15 @@ export const langs: Langs = { "entity.villager.tool": "Ferretero", "entity.villager.weapon": "Herrero de armas", "entity.villager.mason": "Albañil", - "entity.villager.unskilled": "Aldeano sin habilidades", + "entity.villager.unskilled": "Aldeano no cualificado", "entity.villager_v2.name": "Aldeano", "entity.vindicator.name": "Vindicador", - "entity.wandering_trader.name": "Comerciante errante", - "entity.wind_charge_projectile.name": "Carga ventosa", + "entity.wandering_trader.name": "comerciante errante", + "entity.wind_charge_projectile.name": "carga ventosa", "entity.witch.name": "Bruja", "entity.wither.name": "Wither", "entity.wither_skeleton.name": "Esqueleto de Wither", - "entity.wither_skull.name": "Calavera de esqueleto de Wither", + "entity.wither_skull.name": "Calavera de Wither", "entity.wither_skull_dangerous.name": "Calavera de esqueleto de Wither", "entity.wolf.name": "Lobo", "entity.xp_orb.name": "Orbe de experiencia", @@ -15531,7 +14569,7 @@ export const langs: Langs = { "item.banner.border.cyan": "Bordura cian", "item.banner.border.gray": "Bordura gris", "item.banner.border.green": "Bordura verde", - "item.banner.border.lightBlue": "Bordura celeste", + "item.banner.border.lightBlue": "Bordura azul claro", "item.banner.border.lime": "Bordura verde lima", "item.banner.border.magenta": "Bordura magenta", "item.banner.border.orange": "Bordura naranja", @@ -15541,22 +14579,22 @@ export const langs: Langs = { "item.banner.border.silver": "Bordura gris claro", "item.banner.border.white": "Bordura blanca", "item.banner.border.yellow": "Bordura amarilla", - "item.banner.bricks.black": "Mazonado negro", - "item.banner.bricks.blue": "Mazonado azul", - "item.banner.bricks.brown": "Mazonado marrón", - "item.banner.bricks.cyan": "Mazonado cian", - "item.banner.bricks.gray": "Mazonado gris", - "item.banner.bricks.green": "Mazonado verde", - "item.banner.bricks.lightBlue": "Mazonado celeste", - "item.banner.bricks.lime": "Mazonado verde lima", - "item.banner.bricks.magenta": "Mazonado magenta", - "item.banner.bricks.orange": "Mazonado naranja", - "item.banner.bricks.pink": "Mazonado rosa", - "item.banner.bricks.purple": "Mazonado morado", - "item.banner.bricks.red": "Mazonado rojo", - "item.banner.bricks.silver": "Mazonado gris claro", - "item.banner.bricks.white": "Mazonado blanco", - "item.banner.bricks.yellow": "Mazonado amarillo", + "item.banner.bricks.black": "Mazonado de campo negro", + "item.banner.bricks.blue": "Mazonado de campo azul", + "item.banner.bricks.brown": "Mazonado de campo marrón", + "item.banner.bricks.cyan": "Mazonado de campo cian", + "item.banner.bricks.gray": "Mazonado de campo gris", + "item.banner.bricks.green": "Mazonado de campo verde", + "item.banner.bricks.lightBlue": "Mazonado de campo azul claro", + "item.banner.bricks.lime": "Mazonado de campo verde lima", + "item.banner.bricks.magenta": "Mazonado de campo magenta", + "item.banner.bricks.orange": "Mazonado de campo naranja", + "item.banner.bricks.pink": "Mazonado de campo rosa", + "item.banner.bricks.purple": "Mazonado de campo morado", + "item.banner.bricks.red": "Mazonado de campo rojo", + "item.banner.bricks.silver": "Mazonado de campo gris claro", + "item.banner.bricks.white": "Mazonado de campo blanco", + "item.banner.bricks.yellow": "Mazonado de campo amarillo", "item.banner.brown.name": "Estandarte marrón", "item.banner.circle.black": "Roel negro", "item.banner.circle.blue": "Roel azul", @@ -15574,23 +14612,23 @@ export const langs: Langs = { "item.banner.circle.silver": "Roel gris claro", "item.banner.circle.white": "Roel blanco", "item.banner.circle.yellow": "Roel amarillo", - "item.banner.creeper.black": "Figura de Creeper negra", - "item.banner.creeper.blue": "Figura de Creeper azul", - "item.banner.creeper.brown": "Figura de Creeper marrón", - "item.banner.creeper.cyan": "Figura de Creeper cian", - "item.banner.creeper.gray": "Figura de Creeper gris", - "item.banner.creeper.green": "Figura de Creeper verde", - "item.banner.creeper.lightBlue": "Figura de Creeper celeste", - "item.banner.creeper.lime": "Figura de Creeper verde lima", - "item.banner.creeper.magenta": "Figura de Creeper magenta", - "item.banner.creeper.orange": "Figura de Creeper naranja", - "item.banner.creeper.pink": "Figura de Creeper rosa", - "item.banner.creeper.purple": "Figura de Creeper morada", - "item.banner.creeper.red": "Figura de Creeper roja", - "item.banner.creeper.silver": "Figura de Creeper gris claro", - "item.banner.creeper.white": "Figura de Creeper blanca", - "item.banner.creeper.yellow": "Figura de Creeper amarilla", - "item.banner.cross.black": "Sotuer negro", + "item.banner.creeper.black": "Estampado negro de Creeper", + "item.banner.creeper.blue": "Estampado azul de Creeper", + "item.banner.creeper.brown": "Estampado de Creeper marrón", + "item.banner.creeper.cyan": "Estampado cian de Creeper", + "item.banner.creeper.gray": "Estampado gris de Creeper", + "item.banner.creeper.green": "Estampado verde de Creeper", + "item.banner.creeper.lightBlue": "Estampado azul claro de Creeper", + "item.banner.creeper.lime": "Estampado verde lima de Creeper", + "item.banner.creeper.magenta": "Estampado magenta de Creeper", + "item.banner.creeper.orange": "Estampado naranja de Creeper", + "item.banner.creeper.pink": "Estampado rosa de Creeper", + "item.banner.creeper.purple": "Estampado morado de Creeper", + "item.banner.creeper.red": "Estampado rojo de Creeper", + "item.banner.creeper.silver": "Estampado gris claro de Creeper", + "item.banner.creeper.white": "Estampado blanco de Creeper", + "item.banner.creeper.yellow": "Estampado amarillo de Creeper", + "item.banner.cross.black": "Sotuer negra", "item.banner.cross.blue": "Sotuer azul", "item.banner.cross.brown": "Sotuer marrón", "item.banner.cross.cyan": "Sotuer cian", @@ -15604,23 +14642,23 @@ export const langs: Langs = { "item.banner.cross.purple": "Sotuer morado", "item.banner.cross.red": "Sotuer rojo", "item.banner.cross.silver": "Sotuer gris claro", - "item.banner.cross.white": "Sotuer blanco", + "item.banner.cross.white": "Sotuer blanca", "item.banner.cross.yellow": "Sotuer amarillo", "item.banner.curly_border.black": "Bordura dentada negra", "item.banner.curly_border.blue": "Bordura dentada azul", "item.banner.curly_border.brown": "Bordura dentada marrón", "item.banner.curly_border.cyan": "Bordura dentada cian", - "item.banner.curly_border.gray": "Bordura dentada gris", - "item.banner.curly_border.green": "Bordura dentada verde", - "item.banner.curly_border.lightBlue": "Bordura dentada celeste", - "item.banner.curly_border.lime": "Bordura dentada verde lima", - "item.banner.curly_border.magenta": "Bordura dentada magenta", + "item.banner.curly_border.gray": "Bordura gris dentada", + "item.banner.curly_border.green": "Bordura verde dentada", + "item.banner.curly_border.lightBlue": "Bordura azul claro dentada", + "item.banner.curly_border.lime": "Bordura verde lima dentada", + "item.banner.curly_border.magenta": "Bordura magenta dentada", "item.banner.curly_border.orange": "Bordura dentada naranja", - "item.banner.curly_border.pink": "Bordura dentada rosa", - "item.banner.curly_border.purple": "Bordura dentada morada", + "item.banner.curly_border.pink": "Bordura rosa dentada", + "item.banner.curly_border.purple": "Bordura morada dentada", "item.banner.curly_border.red": "Bordura dentada roja", "item.banner.curly_border.silver": "Bordura dentada gris claro", - "item.banner.curly_border.white": "Bordura dentada blanca", + "item.banner.curly_border.white": "Bordura blanca dentada", "item.banner.curly_border.yellow": "Bordura dentada amarilla", "item.banner.cyan.name": "Estandarte cian", "item.banner.diagonal_left.black": "Tajado negro", @@ -15725,7 +14763,7 @@ export const langs: Langs = { "item.banner.globe.cyan": "Planeta cian", "item.banner.globe.gray": "Planeta gris", "item.banner.globe.green": "Planeta verde", - "item.banner.globe.lightBlue": "Planeta azul claro", + "item.banner.globe.lightBlue": "Planeta celeste", "item.banner.globe.lime": "Planeta verde lima", "item.banner.globe.magenta": "Planeta magenta", "item.banner.globe.orange": "Planeta naranja", @@ -15807,7 +14845,7 @@ export const langs: Langs = { "item.banner.half_horizontal_bottom.cyan": "Cortado cian invertido", "item.banner.half_horizontal_bottom.gray": "Cortado gris invertido", "item.banner.half_horizontal_bottom.green": "Cortado verde invertido", - "item.banner.half_horizontal_bottom.lightBlue": "Cortado celeste invertido", + "item.banner.half_horizontal_bottom.lightBlue": "Cortado azul claro invertido", "item.banner.half_horizontal_bottom.lime": "Cortado verde lima invertido", "item.banner.half_horizontal_bottom.magenta": "Cortado magenta invertido", "item.banner.half_horizontal_bottom.orange": "Cortado naranja invertido", @@ -15938,13 +14976,13 @@ export const langs: Langs = { "item.banner.small_stripes.silver": "Vergetado gris claro", "item.banner.small_stripes.white": "Vergetado blanco", "item.banner.small_stripes.yellow": "Vergetado amarillo", - "item.banner.square_bottom_left.black": "Cantón diestro negro en campaña", - "item.banner.square_bottom_left.blue": "Cantón diestro azul en campaña", + "item.banner.square_bottom_left.black": "Cantón negro en campaña a diestra", + "item.banner.square_bottom_left.blue": "Cantón azul en campaña a diestra", "item.banner.square_bottom_left.brown": "Cantón marrón en campaña a diestra", "item.banner.square_bottom_left.cyan": "Cantón cian en campaña a diestra", "item.banner.square_bottom_left.gray": "Cantón gris en campaña a diestra", "item.banner.square_bottom_left.green": "Cantón verde en campaña a diestra", - "item.banner.square_bottom_left.lightBlue": "Cantón celeste en campaña a diestra", + "item.banner.square_bottom_left.lightBlue": "Cantón azul claro en campaña a diestra", "item.banner.square_bottom_left.lime": "Cantón verde lima en campaña a diestra", "item.banner.square_bottom_left.magenta": "Cantón magenta en campaña a diestra", "item.banner.square_bottom_left.orange": "Cantón naranja en campaña a diestra", @@ -15960,7 +14998,7 @@ export const langs: Langs = { "item.banner.square_bottom_right.cyan": "Cantón cian en campaña a siniestra", "item.banner.square_bottom_right.gray": "Cantón gris en campaña a siniestra", "item.banner.square_bottom_right.green": "Cantón verde en campaña a siniestra", - "item.banner.square_bottom_right.lightBlue": "Cantón celeste en campaña a siniestra", + "item.banner.square_bottom_right.lightBlue": "Cantón azul claro en campaña a siniestra", "item.banner.square_bottom_right.lime": "Cantón verde lima en campaña a siniestra", "item.banner.square_bottom_right.magenta": "Cantón magenta en campaña a siniestra", "item.banner.square_bottom_right.orange": "Cantón naranja en campaña a siniestra", @@ -15976,7 +15014,7 @@ export const langs: Langs = { "item.banner.square_top_left.cyan": "Cantón cian en jefe a diestra", "item.banner.square_top_left.gray": "Cantón gris en jefe a diestra", "item.banner.square_top_left.green": "Cantón verde en jefe a diestra", - "item.banner.square_top_left.lightBlue": "Cantón celeste en jefe a diestra", + "item.banner.square_top_left.lightBlue": "Cantón azul claro en jefe a diestra", "item.banner.square_top_left.lime": "Cantón verde lima en jefe a diestra", "item.banner.square_top_left.magenta": "Cantón magenta en jefe a diestra", "item.banner.square_top_left.orange": "Cantón naranja en jefe a diestra", @@ -15992,7 +15030,7 @@ export const langs: Langs = { "item.banner.square_top_right.cyan": "Cantón cian en jefe a siniestra", "item.banner.square_top_right.gray": "Cantón gris en jefe a siniestra", "item.banner.square_top_right.green": "Cantón verde en jefe a siniestra", - "item.banner.square_top_right.lightBlue": "Cantón celeste en jefe a siniestra", + "item.banner.square_top_right.lightBlue": "Cantón azul claro en jefe a siniestra", "item.banner.square_top_right.lime": "Cantón verde lima en jefe a siniestra", "item.banner.square_top_right.magenta": "Cantón magenta en jefe a siniestra", "item.banner.square_top_right.orange": "Cantón naranja en jefe a siniestra", @@ -16018,21 +15056,21 @@ export const langs: Langs = { "item.banner.straight_cross.silver": "Cruz gris claro", "item.banner.straight_cross.white": "Cruz blanca", "item.banner.straight_cross.yellow": "Cruz amarilla", - "item.banner.stripe_bottom.black": "Faja negra en campaña", - "item.banner.stripe_bottom.blue": "Faja azul en campaña", - "item.banner.stripe_bottom.brown": "Faja marrón en campaña", - "item.banner.stripe_bottom.cyan": "Faja cian en campaña", - "item.banner.stripe_bottom.gray": "Faja gris en campaña", - "item.banner.stripe_bottom.green": "Faja verde en campaña", - "item.banner.stripe_bottom.lightBlue": "Faja celeste en campaña", + "item.banner.stripe_bottom.black": "Franja negra en base", + "item.banner.stripe_bottom.blue": "Faja azul en base", + "item.banner.stripe_bottom.brown": "Franja marrón en base", + "item.banner.stripe_bottom.cyan": "Franja cian en base", + "item.banner.stripe_bottom.gray": "Franja gris en base", + "item.banner.stripe_bottom.green": "Franja verde en base", + "item.banner.stripe_bottom.lightBlue": "Franja azul claro en base", "item.banner.stripe_bottom.lime": "Faja verde lima en campaña", - "item.banner.stripe_bottom.magenta": "Faja magenta en campaña", - "item.banner.stripe_bottom.orange": "Faja naranja en campaña", + "item.banner.stripe_bottom.magenta": "Franja magenta en base", + "item.banner.stripe_bottom.orange": "Franja naranja en base", "item.banner.stripe_bottom.pink": "Faja rosa en campaña", - "item.banner.stripe_bottom.purple": "Faja morada en campaña", + "item.banner.stripe_bottom.purple": "Franja morada en base", "item.banner.stripe_bottom.red": "Faja roja en campaña", "item.banner.stripe_bottom.silver": "Faja gris claro en campaña", - "item.banner.stripe_bottom.white": "Faja blanca en campaña", + "item.banner.stripe_bottom.white": "Franja blanca en base", "item.banner.stripe_bottom.yellow": "Faja amarilla en campaña", "item.banner.stripe_center.black": "Palo negro", "item.banner.stripe_center.blue": "Palo azul", @@ -16040,7 +15078,7 @@ export const langs: Langs = { "item.banner.stripe_center.cyan": "Palo cian", "item.banner.stripe_center.gray": "Palo gris", "item.banner.stripe_center.green": "Palo verde", - "item.banner.stripe_center.lightBlue": "Palo celeste", + "item.banner.stripe_center.lightBlue": "Palo azul claro", "item.banner.stripe_center.lime": "Palo verde lima", "item.banner.stripe_center.magenta": "Palo magenta", "item.banner.stripe_center.orange": "Palo naranja", @@ -16053,18 +15091,18 @@ export const langs: Langs = { "item.banner.stripe_downleft.black": "Barra negra", "item.banner.stripe_downleft.blue": "Barra azul", "item.banner.stripe_downleft.brown": "Barra marrón", - "item.banner.stripe_downleft.cyan": "Barra cian", - "item.banner.stripe_downleft.gray": "Barra gris", - "item.banner.stripe_downleft.green": "Barra verde", - "item.banner.stripe_downleft.lightBlue": "Barra celeste", + "item.banner.stripe_downleft.cyan": "Banda cian a siniestra", + "item.banner.stripe_downleft.gray": "Banda gris a siniestra", + "item.banner.stripe_downleft.green": "Banda verde a siniestra", + "item.banner.stripe_downleft.lightBlue": "Banda azul claro a siniestra", "item.banner.stripe_downleft.lime": "Barra verde lima", - "item.banner.stripe_downleft.magenta": "Barra magenta", - "item.banner.stripe_downleft.orange": "Barra naranja", + "item.banner.stripe_downleft.magenta": "Banda magenta a siniestra", + "item.banner.stripe_downleft.orange": "Banda naranja a siniestra", "item.banner.stripe_downleft.pink": "Barra rosa", "item.banner.stripe_downleft.purple": "Barra morada", "item.banner.stripe_downleft.red": "Barra roja", "item.banner.stripe_downleft.silver": "Barra gris claro", - "item.banner.stripe_downleft.white": "Barra blanca", + "item.banner.stripe_downleft.white": "Banda blanca a siniestra", "item.banner.stripe_downleft.yellow": "Barra amarilla", "item.banner.stripe_downright.black": "Banda negra", "item.banner.stripe_downright.blue": "Banda azul", @@ -16082,22 +15120,22 @@ export const langs: Langs = { "item.banner.stripe_downright.silver": "Banda gris claro", "item.banner.stripe_downright.white": "Banda blanca", "item.banner.stripe_downright.yellow": "Banda amarilla", - "item.banner.stripe_left.black": "Palo negro a diestra", - "item.banner.stripe_left.blue": "Palo azul a diestra", - "item.banner.stripe_left.brown": "Palo marrón a diestra", - "item.banner.stripe_left.cyan": "Palo cian a diestra", + "item.banner.stripe_left.black": "Palo a diestra negro", + "item.banner.stripe_left.blue": "Palo a diestra azul", + "item.banner.stripe_left.brown": "Palo a diestra marrón", + "item.banner.stripe_left.cyan": "Palo a diestra cian", "item.banner.stripe_left.gray": "Palo gris a diestra", - "item.banner.stripe_left.green": "Palo verde a diestra", + "item.banner.stripe_left.green": "Palo a diestra verde", "item.banner.stripe_left.lightBlue": "Palo celeste a diestra", - "item.banner.stripe_left.lime": "Palo verde lima a diestra", + "item.banner.stripe_left.lime": "Palo a diestra verde lima", "item.banner.stripe_left.magenta": "Palo magenta a diestra", - "item.banner.stripe_left.orange": "Palo naranja a diestra", - "item.banner.stripe_left.pink": "Palo rosa a diestra", - "item.banner.stripe_left.purple": "Palo morado a diestra", - "item.banner.stripe_left.red": "Palo rojo a diestra", - "item.banner.stripe_left.silver": "Palo gris claro a diestra", - "item.banner.stripe_left.white": "Palo blanco a diestra", - "item.banner.stripe_left.yellow": "Palo amarillo a diestra", + "item.banner.stripe_left.orange": "Palo a diestra naranja", + "item.banner.stripe_left.pink": "Palo a diestra rosa", + "item.banner.stripe_left.purple": "Palo a diestra morado", + "item.banner.stripe_left.red": "Palo a diestra rojo", + "item.banner.stripe_left.silver": "Palo a diestra gris claro", + "item.banner.stripe_left.white": "Palo a diestra blanco", + "item.banner.stripe_left.yellow": "Palo a diestra amarillo", "item.banner.stripe_middle.black": "Faja negra", "item.banner.stripe_middle.blue": "Faja azul", "item.banner.stripe_middle.brown": "Faja marrón", @@ -16109,43 +15147,43 @@ export const langs: Langs = { "item.banner.stripe_middle.magenta": "Faja magenta", "item.banner.stripe_middle.orange": "Faja naranja", "item.banner.stripe_middle.pink": "Faja rosa", - "item.banner.stripe_middle.purple": "Faja morada", + "item.banner.stripe_middle.purple": "Franja morada", "item.banner.stripe_middle.red": "Faja roja", "item.banner.stripe_middle.silver": "Faja gris claro", - "item.banner.stripe_middle.white": "Faja blanca", - "item.banner.stripe_middle.yellow": "Faja amarilla", + "item.banner.stripe_middle.white": "Franja blanca", + "item.banner.stripe_middle.yellow": "Franja amarilla", "item.banner.stripe_right.black": "Palo negro a siniestra", "item.banner.stripe_right.blue": "Palo azul a siniestra", - "item.banner.stripe_right.brown": "Palo marrón a siniestra", - "item.banner.stripe_right.cyan": "Palo cian a siniestra", - "item.banner.stripe_right.gray": "Palo gris a siniestra", + "item.banner.stripe_right.brown": "Palo a siniestra marrón", + "item.banner.stripe_right.cyan": "Palo a siniestra cian", + "item.banner.stripe_right.gray": "Palo a siniestra gris", "item.banner.stripe_right.green": "Palo verde a siniestra", "item.banner.stripe_right.lightBlue": "Palo celeste a siniestra", - "item.banner.stripe_right.lime": "Palo verde lima a siniestra", - "item.banner.stripe_right.magenta": "Palo magenta a siniestra", - "item.banner.stripe_right.orange": "Palo naranja a siniestra", - "item.banner.stripe_right.pink": "Palo rosa a siniestra", - "item.banner.stripe_right.purple": "Palo morado a siniestra", - "item.banner.stripe_right.red": "Palo rojo a siniestra", - "item.banner.stripe_right.silver": "Palo gris claro a siniestra", - "item.banner.stripe_right.white": "Palo blanco a siniestra", - "item.banner.stripe_right.yellow": "Palo amarillo a siniestra", - "item.banner.stripe_top.black": "Faja negra en jefe", - "item.banner.stripe_top.blue": "Faja azul en jefe", - "item.banner.stripe_top.brown": "Faja marrón en jefe", - "item.banner.stripe_top.cyan": "Faja cian en jefe", - "item.banner.stripe_top.gray": "Faja gris en Jefe", - "item.banner.stripe_top.green": "Faja verde en jefe", - "item.banner.stripe_top.lightBlue": "Faja celeste en jefe", - "item.banner.stripe_top.lime": "Faja verde lima en jefe", - "item.banner.stripe_top.magenta": "Faja magenta en jefe", - "item.banner.stripe_top.orange": "Faja naranja en jefe", - "item.banner.stripe_top.pink": "Faja rosa en jefe", - "item.banner.stripe_top.purple": "Faja morada en jefe", - "item.banner.stripe_top.red": "Faja roja en jefe", - "item.banner.stripe_top.silver": "Faja gris claro en jefe", - "item.banner.stripe_top.white": "Faja blanca en jefe", - "item.banner.stripe_top.yellow": "Faja amarilla en jefe", + "item.banner.stripe_right.lime": "Palo a siniestra verde lima", + "item.banner.stripe_right.magenta": "Palo a siniestra magenta", + "item.banner.stripe_right.orange": "Palo a siniestra naranja", + "item.banner.stripe_right.pink": "Palo a siniestra rosa", + "item.banner.stripe_right.purple": "Palo a siniestra morado", + "item.banner.stripe_right.red": "Palo a siniestra rojo", + "item.banner.stripe_right.silver": "Palo a siniestra gris claro", + "item.banner.stripe_right.white": "Palo a siniestra blanco", + "item.banner.stripe_right.yellow": "Palo a siniestra amarillo", + "item.banner.stripe_top.black": "Faja en jefe negra", + "item.banner.stripe_top.blue": "Faja en jefe azul", + "item.banner.stripe_top.brown": "Faja en jefe marrón", + "item.banner.stripe_top.cyan": "Faja en jefe cian", + "item.banner.stripe_top.gray": "Faja en jefe gris", + "item.banner.stripe_top.green": "Faja en jefe verde", + "item.banner.stripe_top.lightBlue": "Faja en jefe celeste", + "item.banner.stripe_top.lime": "Faja en jefe verde lima", + "item.banner.stripe_top.magenta": "Faja en jefe magenta", + "item.banner.stripe_top.orange": "Faja en jefe naranja", + "item.banner.stripe_top.pink": "Faja en jefe rosa", + "item.banner.stripe_top.purple": "Faja en jefe morada", + "item.banner.stripe_top.red": "Faja en jefe roja", + "item.banner.stripe_top.silver": "Faja en jefe gris claro", + "item.banner.stripe_top.white": "Faja en jefe blanca", + "item.banner.stripe_top.yellow": "Faja en jefe amarilla", "item.banner.triangle_bottom.black": "Chevrón negro", "item.banner.triangle_bottom.blue": "Chevrón azul", "item.banner.triangle_bottom.brown": "Chevrón marrón", @@ -16162,22 +15200,22 @@ export const langs: Langs = { "item.banner.triangle_bottom.silver": "Chevrón gris claro", "item.banner.triangle_bottom.white": "Chevrón blanco", "item.banner.triangle_bottom.yellow": "Chevrón amarillo", - "item.banner.triangle_top.black": "Chevrón negro invertido", - "item.banner.triangle_top.blue": "Chevrón azul invertido", - "item.banner.triangle_top.brown": "Chevrón marrón invertido", - "item.banner.triangle_top.cyan": "Chevrón cian invertido", - "item.banner.triangle_top.gray": "Chevrón gris invertido", - "item.banner.triangle_top.green": "Chevrón verde invertido", - "item.banner.triangle_top.lightBlue": "Chevrón celeste invertido", - "item.banner.triangle_top.lime": "Chevrón verde lima invertido", - "item.banner.triangle_top.magenta": "Chevrón magenta invertido", - "item.banner.triangle_top.orange": "Chevrón naranja invertido", - "item.banner.triangle_top.pink": "Chevrón rosa invertido", - "item.banner.triangle_top.purple": "Chevrón morado invertido", - "item.banner.triangle_top.red": "Chevrón rojo invertido", - "item.banner.triangle_top.silver": "Chevrón gris claro invertido", - "item.banner.triangle_top.white": "Chevrón blanco invertido", - "item.banner.triangle_top.yellow": "Chevrón amarillo invertido", + "item.banner.triangle_top.black": "Chevrón invertido negro", + "item.banner.triangle_top.blue": "Chevrón invertido azul", + "item.banner.triangle_top.brown": "Chevrón invertido marrón", + "item.banner.triangle_top.cyan": "Chevrón invertido cian", + "item.banner.triangle_top.gray": "Chevrón invertido gris", + "item.banner.triangle_top.green": "Chevrón invertido verde", + "item.banner.triangle_top.lightBlue": "Chevrón invertido celeste", + "item.banner.triangle_top.lime": "Chevrón invertido verde lima", + "item.banner.triangle_top.magenta": "Chevrón invertido magenta", + "item.banner.triangle_top.orange": "Chevrón invertido naranja", + "item.banner.triangle_top.pink": "Chevrón invertido rosa", + "item.banner.triangle_top.purple": "Chevrón invertido morado", + "item.banner.triangle_top.red": "Chevrón invertido rojo", + "item.banner.triangle_top.silver": "Chevrón invertido gris claro", + "item.banner.triangle_top.white": "Chevrón invertido blanco", + "item.banner.triangle_top.yellow": "Chevrón invertido amarillo", "item.banner.triangles_bottom.black": "Campaña dentada negra", "item.banner.triangles_bottom.blue": "Campaña dentada azul", "item.banner.triangles_bottom.brown": "Campaña dentada marrón", @@ -16192,7 +15230,7 @@ export const langs: Langs = { "item.banner.triangles_bottom.purple": "Campaña dentada morada", "item.banner.triangles_bottom.red": "Campaña dentada roja", "item.banner.triangles_bottom.silver": "Campaña dentada gris claro", - "item.banner.triangles_bottom.white": "Cantón dentada blanca", + "item.banner.triangles_bottom.white": "Campaña dentada blanca", "item.banner.triangles_bottom.yellow": "Campaña dentada amarilla", "item.banner.triangles_top.black": "Jefe dentado negro", "item.banner.triangles_top.blue": "Jefe dentado azul", @@ -16212,7 +15250,7 @@ export const langs: Langs = { "item.banner.triangles_top.yellow": "Jefe dentado amarillo", "item.banner.white.name": "Estandarte blanco", "item.banner.yellow.name": "Estandarte amarillo", - "item.banner.illager": "Maldeano", + "item.banner.illager": "Illano", "item.bed.black.name": "Cama negra", "item.bed.red.name": "Cama roja", "item.bed.green.name": "Cama verde", @@ -16239,13 +15277,13 @@ export const langs: Langs = { "item.boat.oak.name": "Bote de roble", "item.boat.spruce.name": "Bote de abeto", "item.boat.birch.name": "Bote de abedul", - "item.boat.jungle.name": "Bote de jungla", + "item.boat.jungle.name": "Barco de jungla", "item.boat.acacia.name": "Bote de acacia", "item.boat.big_oak.name": "Bote de roble oscuro", "item.bone.name": "Hueso", "item.book.name": "Libro", "item.breeze_rod.name": "Vara de vorágine", - "item.chainmail_boots.name": "Botas de malla", + "item.chainmail_boots.name": "Botas de cota de malla", "item.leather_boots.name": "Botas de cuero", "item.diamond_boots.name": "Botas de diamante", "item.golden_boots.name": "Botas de oro", @@ -16267,7 +15305,7 @@ export const langs: Langs = { "item.tropicalColorWhite.name": "Blanco", "item.tropicalColorOrange.name": "Naranja", "item.tropicalColorMagenta.name": "Magenta", - "item.tropicalColorSky.name": "Azul cielo", + "item.tropicalColorSky.name": "Cielo", "item.tropicalColorYellow.name": "Amarillo", "item.tropicalColorLime.name": "Verde lima", "item.tropicalColorRose.name": "Rosa", @@ -16279,37 +15317,37 @@ export const langs: Langs = { "item.tropicalColorBrown.name": "Marrón", "item.tropicalColorGreen.name": "Verde", "item.tropicalColorRed.name": "Rojo", - "item.tropicalBodyKobSingle.name": "%1$s Kob", - "item.tropicalBodySunstreakSingle.name": "%1$s SunStreak", + "item.tropicalBodyKobSingle.name": "%1$s kob", + "item.tropicalBodySunstreakSingle.name": "%1$s quemado por el sol", "item.tropicalBodySnooperSingle.name": "%1$s Snooper", - "item.tropicalBodyDasherSingle.name": "%1$s Dasher", + "item.tropicalBodyDasherSingle.name": "%1$s alegre", "item.tropicalBodyBrinelySingle.name": "%1$s Brinely", "item.tropicalBodySpottySingle.name": "%1$s Puntos", - "item.tropicalBodyFlopperSingle.name": "%1$s Flopper", + "item.tropicalBodyFlopperSingle.name": "%1$s estafador", "item.tropicalBodyStripeySingle.name": "%1$s Franjas", "item.tropicalBodyGlitterSingle.name": "%1$s Brillo", - "item.tropicalBodyBlockfishSingle.name": "%1$s Pez bloque", + "item.tropicalBodyBlockfishSingle.name": "%1$s pez bloque", "item.tropicalBodyBettySingle.name": "%1$s Betty", - "item.tropicalBodyClayfishSingle.name": "%1$s Pez arcilla", - "item.tropicalBodyKobMulti.name": "%1$s-%2$s Kob", - "item.tropicalBodySunstreakMulti.name": "%1$s-%2$s SunStreak", + "item.tropicalBodyClayfishSingle.name": "%1$s pez de arcilla", + "item.tropicalBodyKobMulti.name": "%1$s-%2$s kob", + "item.tropicalBodySunstreakMulti.name": "%1$s-%2$s quemado por el sol", "item.tropicalBodySnooperMulti.name": "%1$s-%2$s Snooper", - "item.tropicalBodyDasherMulti.name": "%1$s-%2$s Dasher", + "item.tropicalBodyDasherMulti.name": "%1$s-%2$s alegre", "item.tropicalBodyBrinelyMulti.name": "%1$s-%2$s Brinely", "item.tropicalBodySpottyMulti.name": "%1$s-%2$s Puntos", - "item.tropicalBodyFlopperMulti.name": "%1$s-%2$s Flopper", + "item.tropicalBodyFlopperMulti.name": "%1$s-%2$s estafador", "item.tropicalBodyStripeyMulti.name": "%1$s-%2$s Franjas", "item.tropicalBodyGlitterMulti.name": "%1$s-%2$s Brillo", - "item.tropicalBodyBlockfishMulti.name": "%1$s-%2$s Pez bloque", + "item.tropicalBodyBlockfishMulti.name": "%1$s-%2$s pez bloque", "item.tropicalBodyBettyMulti.name": "%1$s-%2$s Betty", - "item.tropicalBodyClayfishMulti.name": "%1$s-%2$s Pez arcilla", + "item.tropicalBodyClayfishMulti.name": "%1$s-%2$s pez de arcilla", "item.tropicalSchoolAnemone.name": "Anémona", - "item.tropicalSchoolBlackTang.name": "Cirujano negro", + "item.tropicalSchoolBlackTang.name": "Pez cirujano negro", "item.tropicalSchoolBlueDory.name": "Cirujano regal", "item.tropicalSchoolButterflyFish.name": "Pez mariposa", "item.tropicalSchoolCichlid.name": "Cíclido", "item.tropicalSchoolClownfish.name": "Pez payaso", - "item.tropicalSchoolCottonCandyBetta.name": "Beta algodón de azúcar", + "item.tropicalSchoolCottonCandyBetta.name": "Beta de algodón de azúcar", "item.tropicalSchoolDottyback.name": "Dottyback", "item.tropicalSchoolEmperorRedSnapper.name": "Pargo emperador", "item.tropicalSchoolGoatfish.name": "Salmonete", @@ -16324,28 +15362,28 @@ export const langs: Langs = { "item.tropicalSchoolTomatoClown.name": "Payaso tomate", "item.tropicalSchoolTriggerfish.name": "Pez ballesta", "item.tropicalSchoolYellowTang.name": "Cirujano amarillo", - "item.tropicalSchoolYellowtailParrot.name": "Pez loro de cola amarilla", + "item.tropicalSchoolYellowtailParrot.name": "Loro de cola amarilla", "item.cake.name": "Pastel", "item.camera.name": "Cámara", "item.canBreak": "Puede romper:", "item.canPlace": "Puede ponerse sobre:", "item.customProperties": "Tiene propiedades personalizadas", - "item.itemLock.cantDrop": ":hollow_star: Objeto bloqueado. Imposible:", - "item.itemLock.cantMove": ":solid_star: Objeto bloqueado. Imposible:", + "item.itemLock.cantDrop": ":hollow_star: Los objetos que no se pueden soltar no se pueden:", + "item.itemLock.cantMove": ":solid_star: Los objetos que no se pueden mover no se pueden:", "item.itemLock.hoverText.cantBe.moved": "mover", "item.itemLock.hoverText.cantBe.dropped": "soltar", "item.itemLock.hoverText.cantBe.removed": "eliminar", - "item.itemLock.hoverText.cantBe.craftedWith": "fabricar con", + "item.itemLock.hoverText.cantBe.craftedWith": "usar para fabricar", "item.itemLock.keepOnDeath": "Este objeto no se pierde al morir", - "item.itemLock.popupNotice.cantDrop": ":hollow_star: Un objeto bloqueado no se puede: mover, soltar, quitar, usar para fabricar", - "item.itemLock.popupNotice.cantMove": ":solid_star: Un objeto bloqueado no se puede: mover, soltar, quitar, usar para fabricar", + "item.itemLock.popupNotice.cantDrop": ":hollow_star: Los objetos que no se pueden soltar no se pueden: soltar, borrar o usar para fabricar", + "item.itemLock.popupNotice.cantMove": ":solid_star: Los objetos que no se pueden mover no se pueden: mover, soltar, borrar o usar para fabricar", "item.golden_carrot.name": "Zanahoria de oro", "item.carrotOnAStick.name": "Caña con zanahoria", - "item.warped_fungus_on_a_stick.name": "Seta deformada en un palo", + "item.warped_fungus_on_a_stick.name": "Hongos deformados en un palo", "item.carrot.name": "Zanahoria", "item.cauldron.name": "Caldero", "item.charcoal.name": "Carbón vegetal", - "item.chainmail_chestplate.name": "Coraza de malla", + "item.chainmail_chestplate.name": "Coraza de cota de malla", "item.leather_chestplate.name": "Túnica de cuero", "item.diamond_chestplate.name": "Coraza de diamante", "item.golden_chestplate.name": "Coraza de oro", @@ -16353,9 +15391,9 @@ export const langs: Langs = { "item.chorus_fruit.name": "Fruta coral", "item.chorus_fruit_popped.name": "Fruta coral horneada", "item.cooked_beef.name": "Filete", - "item.cooked_chicken.name": "Pollo cocinado", + "item.cooked_chicken.name": "Gallina cocinada", "item.cooked_porkchop.name": "Chuleta de cerdo cocinada", - "item.chicken.name": "Pollo crudo", + "item.chicken.name": "Gallina cruda", "item.clay_ball.name": "Bola de arcilla", "item.clock.name": "Reloj", "item.coal.name": "Carbón", @@ -16384,17 +15422,17 @@ export const langs: Langs = { "item.dye.blue_new.name": "Tinte azul", "item.dye.brown.name": "Granos de cacao", "item.dye.brown_new.name": "Tinte marrón", - "item.dye.cyan.name": "Tintura cian", - "item.dye.gray.name": "Tintura gris", + "item.dye.cyan.name": "Tinte cian", + "item.dye.gray.name": "Tinte gris", "item.dye.green.name": "Tinte verde", - "item.dye.lightBlue.name": "Tintura celeste", - "item.dye.lime.name": "Tintura verde lima", - "item.dye.magenta.name": "Tintura magenta", - "item.dye.orange.name": "Tintura naranja", - "item.dye.pink.name": "Tintura rosa", - "item.dye.purple.name": "Tintura morada", + "item.dye.lightBlue.name": "Tinte celeste", + "item.dye.lime.name": "Tinte verde lima", + "item.dye.magenta.name": "Tinte magenta", + "item.dye.orange.name": "Tinte naranja", + "item.dye.pink.name": "Tinte rosa", + "item.dye.purple.name": "Tinte morado", "item.dye.red.name": "Tinte rojo", - "item.dye.silver.name": "Tintura gris claro", + "item.dye.silver.name": "Tinte gris claro", "item.dye.white.name": "Polvo de hueso", "item.dye.white_new.name": "Tinte blanco", "item.dye.yellow.name": "Tinte amarillo", @@ -16465,7 +15503,7 @@ export const langs: Langs = { "item.iron_axe.name": "Hacha de hierro", "item.stone_axe.name": "Hacha de piedra", "item.wooden_axe.name": "Hacha de madera", - "item.chainmail_helmet.name": "Casco de malla", + "item.chainmail_helmet.name": "Casco de cota de malla", "item.leather_helmet.name": "Gorra de cuero", "item.diamond_helmet.name": "Casco de diamante", "item.golden_helmet.name": "Casco de oro", @@ -16474,32 +15512,33 @@ export const langs: Langs = { "item.golden_hoe.name": "Azadón de oro", "item.iron_hoe.name": "Azadón de hierro", "item.stone_hoe.name": "Azadón de piedra", - "item.wooden_hoe.name": "Azadón de madera", + "item.wooden_hoe.name": "Azada de madera", "item.honey_bottle.name": "Botella de miel", "item.honeycomb.name": "Panal", "item.horsearmordiamond.name": "Armadura de diamante para caballo", - "item.horsearmorgold.name": "Armadura de oro para caballos", - "item.horsearmoriron.name": "Armadura de hierro para caballos", - "item.horsearmorleather.name": "Armadura de cuero para caballos", + "item.horsearmorgold.name": "Armadura de oro para caballo", + "item.horsearmoriron.name": "Armadura de hierro para caballo", + "item.copper_horse_armor.name": "Armadura de cobre para caballo", + "item.horsearmorleather.name": "Armadura de cuero para caballo", "item.gold_ingot.name": "Lingote de oro", "item.iron_ingot.name": "Lingote de hierro", - "item.netherite_ingot.name": "Lingote de netherita", + "item.netherite_ingot.name": "Lingote de inframundita", "item.netherite_scrap.name": "Pedazo de netherita", - "item.netherite_sword.name": "Espada de netherita", - "item.netherite_pickaxe.name": "Pico de netherita", - "item.netherite_axe.name": "Hacha de netherita", - "item.netherite_shovel.name": "Pala de netherita", - "item.netherite_hoe.name": "Azadón de netherita", - "item.netherite_boots.name": "Botas de netherita", - "item.netherite_leggings.name": "Mallas de netherita", - "item.netherite_chestplate.name": "Coraza de netherita", - "item.netherite_helmet.name": "Casco de netherita", + "item.netherite_sword.name": "Espada de inframundita", + "item.netherite_pickaxe.name": "Pico de inframundita", + "item.netherite_axe.name": "Hacha de inframundita", + "item.netherite_shovel.name": "Pala de inframundita", + "item.netherite_hoe.name": "Azadón de inframundita", + "item.netherite_boots.name": "Botas de inframundita", + "item.netherite_leggings.name": "Mallas de inframundita", + "item.netherite_chestplate.name": "Coraza de inframundita", + "item.netherite_helmet.name": "Casco de inframundita", "item.lead.name": "Correa", "item.leather.name": "Cuero", "item.leaves.name": "Hojas", - "item.chainmail_leggings.name": "Leggings de malla", + "item.chainmail_leggings.name": "Musleras de cota de malla", "item.leather_leggings.name": "Pantalones de cuero", - "item.diamond_leggings.name": "Mallas de diamante", + "item.diamond_leggings.name": "Musleras de diamante", "item.golden_leggings.name": "Musleras de oro", "item.iron_leggings.name": "Musleras de hierro", "item.nautilus_shell.name": "Concha de Nautilus", @@ -16512,11 +15551,11 @@ export const langs: Langs = { "item.map.exploration.treasure.name": "Mapa del tesoro", "item.map.exploration.buried_treasure.name": "Mapa del tesoro", "item.map.exploration.village_snowy.name": "Mapa de aldea nevada", - "item.map.exploration.village_taiga.name": "Mapa de aldea de taiga", + "item.map.exploration.village_taiga.name": "Mapa de aldea de la taiga", "item.map.exploration.village_plains.name": "Mapa de aldea de las llanuras", "item.map.exploration.village_savanna.name": "Mapa de aldea de la sabana", "item.map.exploration.village_desert.name": "Mapa de aldea del desierto", - "item.map.exploration.jungle_temple.name": "Mapa de explorador de la jungla", + "item.map.exploration.jungle_temple.name": "Mapa de explorador de jungla", "item.map.exploration.swamp_hut.name": "Mapa de explorador del pantano", "item.map.exploration.trial_chambers.name": "Mapa de explorador de la prueba", "item.melon.name": "Rodaja de sandía", @@ -16527,7 +15566,7 @@ export const langs: Langs = { "item.minecartFurnace.name": "Vagoneta con horno", "item.hopper_minecart.name": "Vagoneta con tolva", "item.ominous_bottle.name": "Botella ominosa", - "item.ominous_trial_key.name": "Llave de desafío ominosa", + "item.ominous_trial_key.name": "Llave de prueba ominosa", "item.oxidized_copper_door.name": "Puerta de cobre oxidado", "item.tnt_minecart.name": "Vagoneta con dinamita", "item.pitcher_pod.name": "Semilla jarra", @@ -16537,7 +15576,7 @@ export const langs: Langs = { "item.spawn_egg.entity.axolotl.name": "Huevo generador de ajolote", "item.spawn_egg.entity.bee.name": "Huevo generador de abeja", "item.spawn_egg.entity.bogged.name": "Huevo generador de empantanado", - "item.spawn_egg.entity.breeze.name": "Huevo generador de vorágine", + "item.spawn_egg.entity.breeze.name": "Huevo generador de brisa", "item.spawn_egg.entity.hoglin.name": "Huevo generador de hoglin", "item.spawn_egg.entity.cat.name": "Huevo generador de gato", "item.spawn_egg.entity.chicken.name": "Huevo generador de gallina", @@ -16551,7 +15590,7 @@ export const langs: Langs = { "item.spawn_egg.entity.tropicalfish.name": "Huevo generador de pez tropical", "item.spawn_egg.entity.pig.name": "Huevo generador de cerdo", "item.spawn_egg.entity.sheep.name": "Huevo generador de oveja", - "item.spawn_egg.entity.npc.name": "Huevo generador de NPC", + "item.spawn_egg.entity.npc.name": "Huevo generador de PNJ", "item.spawn_egg.entity.npc.failed": "Necesitas creativo + operador para generar a un PNJ", "item.spawn_egg.entity.wolf.name": "Huevo generador de lobo", "item.spawn_egg.entity.villager.name": "Huevo generador de aldeano", @@ -16581,7 +15620,7 @@ export const langs: Langs = { "item.spawn_egg.entity.skeleton.name": "Huevo generador de esqueleto", "item.spawn_egg.entity.spider.name": "Huevo generador de araña", "item.spawn_egg.entity.zombie_pigman.name": "Huevo generador de piglin zombi", - "item.spawn_egg.entity.strider.name": "Huevo generador de lavagante", + "item.spawn_egg.entity.strider.name": "Huevo generador de caminante", "item.spawn_egg.entity.slime.name": "Huevo generador de slime", "item.spawn_egg.entity.enderman.name": "Huevo generador de Enderman", "item.spawn_egg.entity.silverfish.name": "Huevo generador de pez plateado", @@ -16610,7 +15649,7 @@ export const langs: Langs = { "item.spawn_egg.entity.piglin.name": "Huevo generador de piglin", "item.spawn_egg.entity.fox.name": "Huevo generador de zorro", "item.spawn_egg.entity.unknown.name": "Huevo generador", - "item.spawn_egg.entity.wandering_trader.name": "Huevo generador de vendedor errante", + "item.spawn_egg.entity.wandering_trader.name": "Huevo generador de comerciante errante", "item.spawn_egg.entity.wither.name": "Huevo generador de Wither", "item.spawn_egg.entity.zoglin.name": "Huevo generador de zoglin", "item.spawn_egg.entity.sniffer.name": "Huevo generador de rastreador", @@ -16618,9 +15657,9 @@ export const langs: Langs = { "item.mushroom_stew.name": "Sopa de hongos", "item.muttonCooked.name": "Cordero cocinado", "item.muttonRaw.name": "Cordero crudo", - "item.name_tag.name": "Etiqueta", - "item.netherbrick.name": "Ladrillo del inframundo", - "item.quartz.name": "Cuarzo del inframundo", + "item.name_tag.name": "Etiqueta de nombre", + "item.netherbrick.name": "Ladrillo de inframundo", + "item.quartz.name": "Cuarzo de inframundo", "item.nether_wart.name": "Verruga del inframundo", "item.netherStar.name": "Estrella del inframundo", "item.painting.name": "Cuadro", @@ -16632,7 +15671,7 @@ export const langs: Langs = { "item.wooden_pickaxe.name": "Pico de madera", "item.porkchop_cooked.name": "Chuleta de cerdo cocinada", "item.porkchop.name": "Chuleta de cerdo cruda", - "item.portfolio.name": "Album", + "item.portfolio.name": "Portafolio", "item.potato.name": "Papa", "item.baked_potato.name": "Papa asada", "item.poisonous_potato.name": "Papa venenosa", @@ -16643,33 +15682,35 @@ export const langs: Langs = { "item.rabbit_foot.name": "Pata de conejo", "item.rabbit_hide.name": "Piel de conejo", "item.rabbit.name": "Conejo crudo", - "item.rabbit_stew.name": "Sopa de conejo", + "item.rabbit_stew.name": "Estofado de conejo", "item.record_11.desc": "C418 - 11", "item.record_13.desc": "C418 - 13", - "item.record_blocks.desc": "C418 - blocks", - "item.record_cat.desc": "C418 - cat", + "item.record_blocks.desc": "C418 - bloques", + "item.record_cat.desc": "C418 - gato", "item.record_chirp.desc": "C418 - chirp", - "item.record_far.desc": "C418 - far", - "item.record_mall.desc": "C418 - mall", + "item.record_far.desc": "C418 - lejos", + "item.record_mall.desc": "C418 - explanada", "item.record_mellohi.desc": "C418 - mellohi", - "item.record.name": "Disco", + "item.record.name": "Disco de música", "item.record_stal.desc": "C418 - stal", "item.record_strad.desc": "C418 - strad", - "item.record_wait.desc": "C418 - wait", + "item.record_wait.desc": "C418 - esperar", "item.record_ward.desc": "C418 - ward", "item.record_pigstep.desc": "Lena Raine - Pigstep", - "item.record_otherside.desc": "Lena Raine - otherside", - "item.record_relic.desc": "Aaron Cherof - Relic", + "item.record_otherside.desc": "Lena Raine - otro lado", + "item.record_relic.desc": "Aaron Cherof - Reliquia", "item.record_creator.desc": "Lena Raine: creadora", "item.record_creator_music_box.desc": "Lena Raine: creadora (caja de música)", "item.record_precipice.desc": "Aaron Cherof: precipicio", + "item.record_tears.desc": "Amos Roddy: Tears", + "item.record_lava_chicken.desc": "Hiperpociones: pollo de lava", "item.redstone.name": "Polvo de redstone", "item.reeds.name": "Caña de azúcar", "item.kelp.name": "Alga parda", "item.dried_kelp.name": "Alga parda seca", "item.rotten_flesh.name": "Carne podrida", "item.ruby.name": "Rubí", - "item.saddle.name": "Montura", + "item.saddle.name": "Silla de montar", "item.wheat_seeds.name": "Semillas de trigo", "item.beetroot_seeds.name": "Semillas de betabel", "item.melon_seeds.name": "Semillas de sandía", @@ -16684,7 +15725,7 @@ export const langs: Langs = { "item.spruce_sign.name": "Letrero de abeto", "item.birch_sign.name": "Letrero de abedul", "item.jungle_sign.name": "Letrero de jungla", - "item.acacia_sign.name": "Letrero de acacia", + "item.acacia_sign.name": "Señal de acacia", "item.darkoak_sign.name": "Letrero de roble oscuro", "item.crimson_sign.name": "Letrero escarlata", "item.warped_sign.name": "Letrero deformado", @@ -16693,14 +15734,14 @@ export const langs: Langs = { "item.skull.dragon.name": "Cabeza de dragón", "item.skull.player.name": "Cabeza de %s", "item.skull.skeleton.name": "Calavera de esqueleto", - "item.skull.wither.name": "Calavera de esqueleto de Wither", + "item.skull.wither.name": "Calavera de esqueleto Wither", "item.skull.zombie.name": "Cabeza de zombi", - "item.slime_ball.name": "Bola de Slime", + "item.slime_ball.name": "Bola de slime", "item.snowball.name": "Bola de nieve", "item.speckled_melon.name": "Rodaja de sandía resplandeciente", "item.spider_eye.name": "Ojo de araña", "item.stick.name": "Palo", - "item.string.name": "Hilo", + "item.string.name": "Cuerda", "item.sugar.name": "Azúcar", "item.gunpowder.name": "Pólvora", "item.diamond_sword.name": "Espada de diamante", @@ -16710,11 +15751,11 @@ export const langs: Langs = { "item.wooden_sword.name": "Espada de madera", "item.unbreakable": "Irrompible", "item.waxed_copper_door.name": "Puerta de cobre encerado", - "item.waxed_exposed_copper_door.name": "Puerta de cobre expuesto y encerado", - "item.waxed_oxidized_copper_door.name": "Puerta de cobre oxidado y encerado", - "item.waxed_weathered_copper_door.name": "Puerta de cobre desgastado y encerado", - "item.weathered_copper_door.name": "Puerta de cobre desgastado", - "item.wind_charge.name": "Carga ventosa", + "item.waxed_exposed_copper_door.name": "Puerta de cobre expuesto encerado", + "item.waxed_oxidized_copper_door.name": "Puerta de cobre oxidado encerado", + "item.waxed_weathered_copper_door.name": "Puerta de cobre erosionado encerado", + "item.weathered_copper_door.name": "Puerta de cobre erosionado", + "item.wind_charge.name": "Carga de viento", "item.wheat.name": "Trigo", "item.wolf_armor.name": "Armadura para lobo", "item.writable_book.name": "Libro y pluma", @@ -16722,24 +15763,24 @@ export const langs: Langs = { "item.glowstone_dust.name": "Polvo de piedra luminosa", "item.shulker_shell.name": "Coraza de Shulker", "item.totem.name": "Tótem de la inmortalidad", - "item.trial_key.name": "Llave de desafío", + "item.trial_key.name": "llave de desafío", "item.turtle_helmet.name": "Caparazón de tortuga", "item.turtle_shell_piece.name": "Escama de tortuga", "item.phantom_membrane.name": "Membrana de fantasma", "item.sweet_berries.name": "Bayas dulces", "item.suspicious_stew.name": "Estofado sospechoso", - "item.field_masoned_banner_pattern.name": "Patrón de estandarte de albañil", - "item.creeper_banner_pattern.name": "Patrón de estandarte de carga de Creeper", + "item.field_masoned_banner_pattern.name": "Patrón de estandarte mazonado de campo", + "item.creeper_banner_pattern.name": "Patrón de estandarte de estampado de Creeper", "item.flow_banner_pattern.name": "Patrón de estandarte de flujo", - "item.flower_banner_pattern.name": "Patrón de estandarte de carga de flores", - "item.globe_banner_pattern.name": "Patrón de estandarte de globos", + "item.flower_banner_pattern.name": "Patrón de estandarte de figura de flor", + "item.globe_banner_pattern.name": "Patrón de estandarte de globo terráqueo", "item.guster_banner_pattern.name": "Patrón de estandarte de Guster", "item.piglin_banner_pattern.name": "Patrón de estandarte de trompa", "item.skull_banner_pattern.name": "Patrón de estandarte de carga de calaveras", "item.mojang_banner_pattern.name": "Patrón de estandarte de cosas", "item.bordure_indented_banner_pattern.name": "Patrón de estandarte de bordura dentada", "item.banner_pattern.bricks": "Mazonado de campo", - "item.banner_pattern.creeper": "Figura de Creeper", + "item.banner_pattern.creeper": "Estampado de Creeper", "item.banner_pattern.flow": "Flujo", "item.banner_pattern.flower": "Figura de flor", "item.banner_pattern.globe": "Globo terráqueo", @@ -16755,8 +15796,8 @@ export const langs: Langs = { "item.pale_oak_sign.name": "Señal de roble pálido", "tile.pale_oak_sapling.name": "Brote de roble pálido", "tile.pale_oak_leaves.name": "Hojas de roble pálido", - "item.boat.pale_oak.name": "Barco de roble pálido", - "item.chest_boat.pale_oak.name": "Barco de roble pálido con cofre", + "item.boat.pale_oak.name": "Bote de roble pálido", + "item.chest_boat.pale_oak.name": "Bote de roble pálido con cofre", "item.resin_brick.name": "Bloque de resina", "item.worldbuilder.block.failed": "Necesitas creativo + operador para colocar este bloque", "item.shield.name": "Escudo", @@ -16768,7 +15809,7 @@ export const langs: Langs = { "item.shield.purple.name": "Escudo morado", "item.shield.red.name": "Escudo rojo", "item.shield.orange.name": "Escudo naranja", - "item.shield.lightBlue.name": "Escudo azul claro", + "item.shield.lightBlue.name": "Escudo celeste", "item.shield.magenta.name": "Escudo magenta", "item.shield.gray.name": "Escudo gris", "item.shield.green.name": "Escudo verde", @@ -16786,7 +15827,7 @@ export const langs: Langs = { "item.lime_bundle": "Lote verde lima", "item.brown_bundle": "Lote marrón", "item.light_gray_bundle": "Lote gris claro", - "item.light_blue_bundle": "Lote azul claro", + "item.light_blue_bundle": "Lote celeste", "item.blue_bundle": "Lote azul", "item.gray_bundle": "Lote gris", "item.pink_bundle": "Lote rosa", @@ -16798,32 +15839,32 @@ export const langs: Langs = { "item.bundle.full": "Lleno", "item.bundle.fullness": "Queda(n): %s", "item.goat_horn.name": "Cuerno de cabra", - "item.minecraft.goat_horn.sound.0": "Reflexión", + "item.minecraft.goat_horn.sound.0": "Reflexionar", "item.minecraft.goat_horn.sound.1": "Cantar", - "item.minecraft.goat_horn.sound.2": "Búsqueda", - "item.minecraft.goat_horn.sound.3": "Sentimiento", - "item.minecraft.goat_horn.sound.4": "Admiración", - "item.minecraft.goat_horn.sound.5": "Llamada", - "item.minecraft.goat_horn.sound.6": "Anhelo", - "item.minecraft.goat_horn.sound.7": "Sueño", + "item.minecraft.goat_horn.sound.2": "Buscar", + "item.minecraft.goat_horn.sound.3": "Sentir", + "item.minecraft.goat_horn.sound.4": "Admirar", + "item.minecraft.goat_horn.sound.5": "Llamar", + "item.minecraft.goat_horn.sound.6": "Anhelar", + "item.minecraft.goat_horn.sound.7": "Soñar", "potion.absorption": "Absorción", "potion.blindness": "Ceguera", - "potion.conduitPower": "Poder de conducto", + "potion.conduitPower": "Poder del conducto", "potion.confusion": "Náuseas", "potion.damageBoost": "Fuerza", "potion.damageBoost.name": "Poción de fuerza", - "potion.damageBoost.splash.name": "Poción de salpicadura de fuerza", - "potion.damageBoost.linger.name": "Poción persistente de fuerza", + "potion.damageBoost.splash.name": "Poción de fuerza de salpicadura", + "potion.damageBoost.linger.name": "Poción de fuerza persistente", "potion.digSlowDown": "Fatiga de extracción", "potion.digSpeed": "Apuro", - "potion.effects.whenDrank": "Cuando se aplica:", + "potion.effects.whenDrank": "Al aplicarse:", "potion.empty": "Sin efectos", "potion.emptyPotion.name": "Botella de agua", "potion.emptyPotion.splash.name": "Botella de agua de salpicadura", "potion.emptyPotion.linger.name": "Botella de agua persistente", - "potion.fireResistance": "Resistencia al fuego", - "potion.fireResistance.name": "Poción de resistencia al fuego", - "potion.fireResistance.splash.name": "Poción de salpicadura de resistencia al fuego", + "potion.fireResistance": "Resistente al fuego", + "potion.fireResistance.name": "Poción ignífuga", + "potion.fireResistance.splash.name": "Poción ignífuga de resistencia al fuego", "potion.fireResistance.linger.name": "Poción persistente de resistencia al fuego", "potion.harm": "Daño instantáneo", "potion.harm.name": "Poción de daño", @@ -16841,37 +15882,37 @@ export const langs: Langs = { "potion.infested": "Infestado", "potion.invisibility": "Invisibilidad", "potion.invisibility.name": "Poción de invisibilidad", - "potion.invisibility.splash.name": "Poción de salpicadura de invisibilidad", - "potion.invisibility.linger.name": "Poción persistente de invisibilidad", + "potion.invisibility.splash.name": "Poción de invisibilidad de salpicadura", + "potion.invisibility.linger.name": "Poción de invisibilidad persistente", "potion.jump": "Impulso en salto", "potion.jump.name": "Poción de salto", - "potion.jump.splash.name": "Poción de salpicadura de salto", - "potion.jump.linger.name": "Poción persistente de salto", + "potion.jump.splash.name": "Poción de salto de salpicadura", + "potion.jump.linger.name": "Poción de salto persistente", "potion.levitation": "Levitación", "potion.moveSlowdown": "Lentitud", "potion.moveSlowdown.name": "Poción de lentitud", - "potion.moveSlowdown.splash.name": "Poción de salpicadura de lentitud", - "potion.moveSlowdown.linger.name": "Poción persistente de lentitud", + "potion.moveSlowdown.splash.name": "Poción de lentitud de salpicadura", + "potion.moveSlowdown.linger.name": "Poción de lentitud persistente", "potion.slowFalling": "Caída lenta", "potion.slowFalling.name": "Poción de caída lenta", - "potion.slowFalling.splash.name": "Poción de salpicadura de caída lenta", - "potion.slowFalling.linger.name": "Poción persistente de caída lenta", + "potion.slowFalling.splash.name": "Poción de caída lenta de salpicadura", + "potion.slowFalling.linger.name": "Poción de caída lenta persistente", "potion.moveSpeed": "Velocidad", - "potion.moveSpeed.name": "Poción de velocidad", - "potion.moveSpeed.splash.name": "Poción de salpicadura de velocidad", - "potion.moveSpeed.linger.name": "Poción persistente de velocidad", + "potion.moveSpeed.name": "Poción de rapidez", + "potion.moveSpeed.splash.name": "Poción de rapidez de salpicadura", + "potion.moveSpeed.linger.name": "Poción de rapidez persistente", "potion.nightVision": "Visión nocturna", "potion.nightVision.name": "Poción de visión nocturna", - "potion.nightVision.splash.name": "Poción de salpicadura de visión nocturna", - "potion.nightVision.linger.name": "Poción persistente de visión nocturna", + "potion.nightVision.splash.name": "Poción de visión nocturna de salpicadura", + "potion.nightVision.linger.name": "Poción de visión nocturna persistente", "potion.oozing.linger.name": "Poción persistente de exudación", "potion.oozing.name": "Poción de exudación", "potion.oozing.splash.name": "Poción de salpicadura de exudación", "potion.oozing": "Exudación", "potion.poison": "Veneno", "potion.poison.name": "Poción de veneno", - "potion.poison.splash.name": "Poción de salpicadura de veneno", - "potion.poison.linger.name": "Poción persistente de veneno", + "potion.poison.splash.name": "Poción de veneno de salpicadura", + "potion.poison.linger.name": "Poción de veneno persistente", "potion.potency.0": "", "potion.potency.1": "II", "potion.potency.2": "III", @@ -16879,60 +15920,60 @@ export const langs: Langs = { "potion.potency.4": "V", "potion.potency.5": "VI", "potion.awkward.name": "Poción rara", - "potion.awkward.splash.name": "Poción de salpicadura rara", - "potion.awkward.linger.name": "Poción persistente rara", + "potion.awkward.splash.name": "Poción rara de salpicadura", + "potion.awkward.linger.name": "Poción rara persistente", "potion.mundane.name": "Poción mundana", - "potion.mundane.splash.name": "Poción de salpicadura mundana", - "potion.mundane.linger.name": "Poción persistente mundana", - "potion.mundane.extended.name": "Poción mundana larga", - "potion.mundane.extended.splash.name": "Poción de salpicadura mundana larga", - "potion.mundane.extended.linger.name": "Poción persistente mundana larga", - "potion.thick.name": "Poción espesa", - "potion.thick.splash.name": "Poción de salpicadura espesa", - "potion.thick.linger.name": "Poción persistente espesa", + "potion.mundane.splash.name": "Poción mundana de salpicadura", + "potion.mundane.linger.name": "Poción mundana persistente", + "potion.mundane.extended.name": "Poción mundana grande", + "potion.mundane.extended.splash.name": "Poción mundana grande de salpicadura", + "potion.mundane.extended.linger.name": "Poción mundana grande persistente", + "potion.thick.name": "Poción gruesa", + "potion.thick.splash.name": "Poción gruesa de salpicadura", + "potion.thick.linger.name": "Poción gruesa persistente", "potion.regeneration": "Regeneración", "potion.regeneration.name": "Poción de regeneración", - "potion.regeneration.splash.name": "Poción de salpicadura de regeneración", - "potion.regeneration.linger.name": "Poción persistente de regeneración", + "potion.regeneration.splash.name": "Poción de regeneración de salpicadura", + "potion.regeneration.linger.name": "Poción de regeneración persistente", "potion.resistance": "Resistencia", "potion.saturation": "Saturación", "potion.turtleMaster": "Lentitud", "potion.turtleMaster2": "Resistencia", - "potion.turtleMaster.name": "Poción del maestro de tortugas", - "potion.turtleMaster.splash.name": "Poción de salpicadura del maestro de tortugas", - "potion.turtleMaster.linger.name": "Poción persistente del maestro de tortugas", + "potion.turtleMaster.name": "Poción de la tortuga maestra", + "potion.turtleMaster.splash.name": "Poción de salpicadura de la tortuga maestra", + "potion.turtleMaster.linger.name": "Poción persistente de la tortuga maestra", "potion.waterBreathing": "Respiración acuática", "potion.waterBreathing.name": "Poción de respiración acuática", - "potion.waterBreathing.splash.name": "Poción de salpicadura de respiración acuática", - "potion.waterBreathing.linger.name": "Poción persistente de respiración acuática", + "potion.waterBreathing.splash.name": "Poción de respiración acuática de salpicadura", + "potion.waterBreathing.linger.name": "Poción de respiración acuática persistente", "potion.weakness": "Debilidad", "potion.weakness.name": "Poción de debilidad", - "potion.weakness.splash.name": "Poción de salpicadura de debilidad", - "potion.weakness.linger.name": "Poción persistente de debilidad", + "potion.weakness.splash.name": "Poción de debilidad de salpicadura", + "potion.weakness.linger.name": "Poción de debilidad persistente", "potion.weaving.linger.name": "Poción persistente de tejido", "potion.weaving.name": "Poción de tejido", "potion.weaving.splash.name": "Poción de salpicadura de tejido", "potion.weaving": "Tejer", - "potion.windCharged.linger.name": "Poción persistente de carga ventosa", - "potion.windCharged.name": "Poción de carga ventosa", - "potion.windCharged.splash.name": "Poción de salpicadura de carga ventosa", + "potion.windCharged.linger.name": "Poción persistente de carga de viento", + "potion.windCharged.name": "Poción de carga de viento", + "potion.windCharged.splash.name": "Poción de salpicadura de carga de viento", "potion.windCharged": "Con carga de viento", "potion.wither": "Wither", "potion.wither.name": "Poción de deterioro", - "potion.wither.splash.name": "Poción de salpicadura de deterioro", - "potion.wither.linger.name": "Poción persistente de deterioro", + "potion.wither.splash.name": "Poción de deterioro de salpicadura", + "potion.wither.linger.name": "Poción de deterioro persistente", "tile.sculk_sensor.name": "Sensor sculk", "tile.sculk.name": "Sculk", "tile.sculk_vein.name": "Vena de sculk", "tile.sculk_catalyst.name": "Catalizador de sculk", - "tile.sculk_shrieker.name": "Chillador de sculk", + "tile.sculk_shrieker.name": "Aullador sculk", "tile.reinforced_deepslate.name": "Pizarra abismal reforzada", "entity.frog.name": "Rana", "entity.tadpole.name": "Renacuajo", "item.spawn_egg.entity.warden.name": "Huevo generador de guardia", "entity.warden.name": "Guardia", "entity.allay.name": "Aliado", - "item.spawn_egg.entity.allay.name": "Huevo generador de ayudante", + "item.spawn_egg.entity.allay.name": "Huevo generador de aliado", "item.bucketTadpole.name": "Cubeta de renacuajo", "item.spawn_egg.entity.frog.name": "Huevo generador de rana", "item.spawn_egg.entity.tadpole.name": "Huevo generador de renacuajo", @@ -16940,13 +15981,13 @@ export const langs: Langs = { "tile.pearlescent_froglight.name": "Foco de rana nacarado", "tile.verdant_froglight.name": "Foco de rana verdoso", "tile.ochre_froglight.name": "Foco de rana ocre", - "tile.mud.name": "Lodo", + "tile.mud.name": "Barro", "tile.packed_mud.name": "Barro empaquetado", "tile.mud_bricks.name": "Ladrillos de barro", - "tile.mud_brick_slab.name": "Losa de ladrillo de barro", - "tile.mud_brick_double_slab": "Losa doble de ladrillo de barro", - "tile.mud_brick_stairs.name": "Escaleras de ladrillo de barro", - "tile.mud_brick_wall.name": "Pared de ladrillo de barro", + "tile.mud_brick_slab.name": "Losa de ladrillos de barro", + "tile.mud_brick_double_slab": "Losa doble de ladrillos de barro", + "tile.mud_brick_stairs.name": "Escaleras de ladrillos de barro", + "tile.mud_brick_wall.name": "Pared de ladrillos de barro", "tile.mangrove_leaves.name": "Hojas de manglar", "tile.mangrove_propagule.name": "Propágulo de manglar", "tile.mangrove_roots.name": "Raíces de manglar", @@ -16954,7 +15995,7 @@ export const langs: Langs = { "item.chest_boat.oak.name": "Bote de roble con cofre", "item.chest_boat.spruce.name": "Bote de abeto con cofre", "item.chest_boat.birch.name": "Bote de abedul con cofre", - "item.chest_boat.jungle.name": "Bote de jungla con cofre", + "item.chest_boat.jungle.name": "Bote de la jungla con cofre", "item.chest_boat.acacia.name": "Bote de acacia con cofre", "item.chest_boat.big_oak.name": "Bote de roble oscuro con cofre", "item.chest_boat.mangrove.name": "Bote de manglar con cofre", @@ -16972,27 +16013,27 @@ export const langs: Langs = { "tile.mangrove_trapdoor.name": "Escotilla de manglar", "tile.mangrove_wood.name": "Madera de manglar", "tile.stripped_mangrove_wood.name": "Madera de manglar pelada", - "item.boat.mangrove.name": "Bote de manglar", + "item.boat.mangrove.name": "Barco de manglar", "item.echo_shard.name": "Fragmento de eco", "item.recovery_compass.name": "Brújula de recuperación", "item.disc_fragment.name": "Fragmento de disco", "item.disc_fragment_5.desc": "Disco - 5", "item.record_5.desc": "Samuel Åberg - 5", - "entity.chest_boat.name": "Bote con cofre", + "entity.chest_boat.name": "Barco con cofre", "entity.camel.name": "Camello", "entity.chest_raft.name": "Balsa con cofre", - "item.acacia_hanging_sign.name": "Letrero colgante de acacia", + "item.acacia_hanging_sign.name": "Señal colgante de acacia", "item.angler_pottery_sherd.name": "Fragmento de cerámica con pescador", "item.archer_pottery_sherd.name": "Fragmento de cerámica con arquero", "item.armor.upgrade": "Mejorar:", "item.arms_up_pottery_sherd.name": "Fragmento de cerámica con brazos hacia arriba", "item.bamboo_door.name": "Puerta de bambú", - "item.bamboo_hanging_sign.name": "Letrero colgante de bambú", - "item.bamboo_sign.name": "Letrero de bambú", + "item.bamboo_hanging_sign.name": "Señal colgante de bambú", + "item.bamboo_sign.name": "Señal de bambú", "item.birch_hanging_sign.name": "Letrero colgante de abedul", "item.blade_pottery_sherd.name": "Fragmento de cerámica con hoja", "item.boat.bamboo.name": "Balsa de bambú", - "item.boat.cherry.name": "Barco de cerezo", + "item.boat.cherry.name": "Bote de cerezo", "item.brewer_pottery_sherd.name": "Fragmento de cerámica con destilería", "item.brush.name": "Pincel", "item.burn_pottery_sherd.name": "Fragmento de cerámica con quemadura", @@ -17000,7 +16041,7 @@ export const langs: Langs = { "item.cherry_hanging_sign.name": "Letrero colgante de cerezo", "item.cherry_sign.name": "Letrero de cerezo", "item.chest_boat.bamboo.name": "Balsa de bambú con cofre", - "item.chest_boat.cherry.name": "Barco de cerezo con cofre", + "item.chest_boat.cherry.name": "Bote de cerezo con cofre", "item.crimson_hanging_sign.name": "Letrero colgante carmesí", "item.danger_pottery_sherd.name": "Fragmento de cerámica con peligro", "item.dark_oak_hanging_sign.name": "Letrero colgante de roble oscuro", @@ -17026,7 +16067,7 @@ export const langs: Langs = { "item.smithing_template.applies_to": "Se aplica a:", "item.smithing_template.armor_trim.applies_to": "Armadura", "item.smithing_template.armor_trim.ingredients": "Lingotes y cristales", - "item.smithing_template.ingredients": "Componentes:", + "item.smithing_template.ingredients": "Ingredientes:", "item.smithing_template.name": "Plantilla de herrería", "item.smithing_template.netherite_upgrade.applies_to": "Equipamiento de diamante", "item.smithing_template.netherite_upgrade.ingredients": "Lingote de inframundita", @@ -17102,7 +16143,7 @@ export const langs: Langs = { "trim_pattern.spire.name": "Acabado de armadura de torre", "trim_pattern.tide.name": "Acabado de armadura de marea", "trim_pattern.vex.name": "Acabado de armadura de vex", - "trim_pattern.ward.name": "Acabado de armadura de guardia", + "trim_pattern.ward.name": "Acabado de armadura de guarda", "trim_pattern.wayfinder.name": "Acabado de armadura de buscador de caminos", "trim_pattern.wild.name": "Acabado de armadura salvaje", "trim_pattern.bolt.name": "Acabado de armadura de rayo", @@ -17129,13 +16170,13 @@ export const langs: Langs = { "tile.bee_nest.name": "Nido de abejas", "tile.target.name": "Objetivo", "tile.bed.name": "Cama", - "tile.bed.noSleep": "Solo puedes dormir por la noche y durante las tormentas", - "tile.bed.notSafe": "No puedes dormir ahora, hay monstruos cerca", + "tile.bed.noSleep": "Solo puedes dormir por la noche y durante las tormentas eléctricas", + "tile.bed.notSafe": "No puedes acostarte ahora, hay monstruos cerca", "tile.bed.notValid": "Tu cama ya no está o se encuentra obstruida", "tile.bed.occupied": "Esta cama está ocupada", "tile.bed.respawnSet": "Punto de regeneración establecido", "tile.bed.tooFar": "La cama está demasiado lejos", - "tile.bed.obstructed": "La cama está bloqueada", + "tile.bed.obstructed": "La cama está obstruida", "tile.bedrock.name": "Roca madre", "tile.bell.name": "Campana", "tile.camera.name": "Cámara", @@ -17168,7 +16209,7 @@ export const langs: Langs = { "tile.iron_block.name": "Bloque de hierro", "tile.lapis_block.name": "Bloque de lapislázuli", "tile.redstone_block.name": "Bloque de redstone", - "tile.bookshelf.name": "Librero", + "tile.bookshelf.name": "Estantería", "tile.brick_block.name": "Ladrillos", "tile.brown_mushroom.name": "Hongo marrón", "tile.brown_mushroom_block.mushroom.name": "Hongo", @@ -17189,9 +16230,9 @@ export const langs: Langs = { "tile.carrots.name": "Zanahorias", "tile.carved_pumpkin.name": "Calabaza tallada", "tile.cauldron.name": "Caldero", - "tile.chalkboard.oneByOne.name": "Pizarra", + "tile.chalkboard.oneByOne.name": "Pizarrón", "tile.chalkboard.twoByOne.name": "Póster", - "tile.chalkboard.threeByTwo.name": "Pizarrón", + "tile.chalkboard.threeByTwo.name": "Tablero", "tile.chest.name": "Cofre", "tile.ender_chest.name": "Cofre de Ender", "tile.jigsaw.name": "Bloque rompecabezas", @@ -17202,7 +16243,7 @@ export const langs: Langs = { "tile.nether_sprouts.name": "Retoños del inframundo", "tile.crimson_stem.name": "Tallo escarlata", "tile.warped_stem.name": "Tallo deformado", - "tile.stripped_crimson_stem.name": "Tallo escarlata pelado", + "tile.stripped_crimson_stem.name": "Tallo escarlata sin corteza", "tile.stripped_warped_stem.name": "Tallo deformado pelado", "tile.crimson_hyphae.name": "Hifas escarlata", "tile.warped_hyphae.name": "Hifas deformadas", @@ -17248,7 +16289,7 @@ export const langs: Langs = { "tile.gilded_blackstone.name": "Piedra negra dorada", "tile.blackstone_slab.name": "Losa de piedra negra", "tile.polished_blackstone_brick_slab.name": "Losa de ladrillo de piedra negra pulida", - "tile.chain.name": "Cota de malla", + "tile.chain.name": "Cadena", "tile.soul_soil.name": "Tierra de almas", "tile.soul_fire.name": "Fuego de almas", "tile.polished_blackstone.name": "Piedra negra pulida", @@ -17337,7 +16378,7 @@ export const langs: Langs = { "tile.stained_hardened_clay.white.name": "Terracota blanca", "tile.stained_hardened_clay.yellow.name": "Terracota amarilla", "tile.structure_block.name": "Bloque de estructuras", - "tile.structure_void.name": "Vacío de estructuras", + "tile.structure_void.name": "Vacío estructural", "tile.trial_spawner.name": "Generador de prueba", "tile.vault.name": "Bóveda", "tile.wool.black.name": "Lana negra", @@ -17358,24 +16399,24 @@ export const langs: Langs = { "tile.wool.white.name": "Lana blanca", "tile.wool.yellow.name": "Lana amarilla", "tile.cobblestone_wall.mossy.name": "Pared de adoquines musgosa", - "tile.cobblestone_wall.normal.name": "Pared de adoquín ", + "tile.cobblestone_wall.normal.name": "Pared de adoquines ", "tile.cobblestone_wall.granite.name": "Pared de granito", "tile.cobblestone_wall.diorite.name": "Pared de diorita", "tile.cobblestone_wall.andesite.name": "Pared de andesita", "tile.cobblestone_wall.sandstone.name": "Pared de arenisca", - "tile.cobblestone_wall.brick.name": "Pared de ladrillo", - "tile.cobblestone_wall.stone_brick.name": "Pared de ladrillo de piedra", - "tile.cobblestone_wall.mossy_stone_brick.name": "Pared de ladrillo de piedra musgosa", - "tile.cobblestone_wall.nether_brick.name": "Pared de ladrillo del inframundo", - "tile.cobblestone_wall.end_brick.name": "Pared de ladrillo de piedra de End", + "tile.cobblestone_wall.brick.name": "Pared de ladrillos", + "tile.cobblestone_wall.stone_brick.name": "Pared de ladrillos de piedra", + "tile.cobblestone_wall.mossy_stone_brick.name": "Pared de ladrillos de piedra musgosa", + "tile.cobblestone_wall.nether_brick.name": "Pared de ladrillos del inframundo", + "tile.cobblestone_wall.end_brick.name": "Pared de ladrillos de piedra de End", "tile.cobblestone_wall.prismarine.name": "Pared de prismarina", "tile.cobblestone_wall.red_sandstone.name": "Pared de arenisca roja", - "tile.cobblestone_wall.red_nether_brick.name": "Pared de ladrillo del inframundo rojo", + "tile.cobblestone_wall.red_nether_brick.name": "Pared de ladrillos del inframundo rojo", "tile.cocoa.name": "Cacao", "tile.command_block.name": "Bloque de comandos", "tile.composter.name": "Compostador", "tile.light_block.name": "Claro", - "tile.repeating_command_block.name": "Bloque de comandos que se repite", + "tile.repeating_command_block.name": "Bloque de comandos repetido", "tile.chain_command_block.name": "Bloque de comandos en cadena", "tile.wheat.name": "Cultivos", "tile.darkOakFence.name": "Valla de roble oscuro", @@ -17394,7 +16435,7 @@ export const langs: Langs = { "tile.iron_door.name": "Puerta de hierro", "tile.doorWood.name": "Puerta de madera", "tile.double_plant.fern.name": "Helecho alto", - "tile.double_plant.grass.name": "Hierba alta", + "tile.double_plant.grass.name": "Pasto alto", "tile.double_plant.name": "Planta", "tile.double_plant.paeonia.name": "Peonía", "tile.double_plant.rose.name": "Rosal", @@ -17405,7 +16446,7 @@ export const langs: Langs = { "tile.enchanting_table.name": "Mesa de encantamientos", "tile.enderChest.name": "Cofre de Ender", "tile.end_portal_frame.name": "Estructura de portal de End", - "tile.farmland.name": "Tierra de cultivo", + "tile.farmland.name": "Granja", "tile.fletching_table.name": "Mesa de arquería", "tile.fence.name": "Valla de roble", "tile.fence_gate.name": "Puerta de valla de roble", @@ -17427,7 +16468,7 @@ export const langs: Langs = { "tile.red_flower.tulipPink.name": "Tulipán rosa", "tile.red_flower.tulipRed.name": "Tulipán rojo", "tile.red_flower.tulipWhite.name": "Tulipán blanco", - "tile.wither_rose.name": "Rosa de Wither", + "tile.wither_rose.name": "Rosa del Wither", "tile.furnace.name": "Horno", "tile.glass.name": "Cristal", "tile.golden_rail.name": "Riel propulsado", @@ -17462,30 +16503,37 @@ export const langs: Langs = { "tile.glowstone.name": "Piedra luminosa", "tile.glow_lichen.name": "Liquen luminoso", "tile.lightning_rod.name": "Pararrayos", + "tile.exposed_lightning_rod.name": "Pararrayos expuesto", + "tile.weathered_lightning_rod.name": "Pararrayos erosionado", + "tile.oxidized_lightning_rod.name": "Pararrayos oxidado", + "tile.waxed_lightning_rod.name": "Pararrayos encerado", + "tile.waxed_exposed_lightning_rod.name": "Pararrayos expuesto y encerado", + "tile.waxed_weathered_lightning_rod.name": "Pararrayos erosionado y encerado", + "tile.waxed_oxidized_lightning_rod.name": "Pararrayos oxidado y encerado", "tile.lit_pumpkin.name": "Calabaza iluminada", "tile.lockedchest.name": "Cofre cerrado", "tile.log.acacia.name": "Tronco de acacia", "tile.log.big_oak.name": "Tronco de roble oscuro", "tile.log.birch.name": "Tronco de abedul", "tile.log.jungle.name": "Tronco de la jungla", - "tile.log.name": "Tronco", + "tile.log.name": "Leño", "tile.log.oak.name": "Tronco de roble", "tile.log.spruce.name": "Tronco de abeto", "tile.magma.name": "Bloque de magma", "tile.melon_block.name": "Sandía", "tile.mob_spawner.name": "Generador de monstruos", "tile.monster_egg.brick.name": "Ladrillos de piedra infestada", - "tile.monster_egg.chiseledbrick.name": "Ladrillo de piedra cincelada infestado", + "tile.monster_egg.chiseledbrick.name": "Ladrillo de piedra cincelada infestada", "tile.monster_egg.cobble.name": "Adoquín infestado", - "tile.monster_egg.crackedbrick.name": "Ladrillo de piedra roto infestado", - "tile.monster_egg.mossybrick.name": "Ladrillo de piedra musgosa infestado", + "tile.monster_egg.crackedbrick.name": "Ladrillo de piedra agrietada infestada", + "tile.monster_egg.mossybrick.name": "Ladrillo de piedra musgosa infestada", "tile.monster_egg.name": "Piedra infestada", "tile.monster_egg.stone.name": "Piedra infestada", "tile.mushroom.name": "Hongo", - "tile.noteblock.name": "Bloque musical", + "tile.noteblock.name": "Bloque de nota", "tile.mycelium.name": "Micelio", - "tile.nether_brick.name": "Ladrillos de Inframundo", - "tile.red_nether_brick.name": "Ladrillos de Inframundo rojos", + "tile.nether_brick.name": "Ladrillos del inframundo", + "tile.red_nether_brick.name": "Ladrillos del inframundo rojos", "tile.nether_brick_fence.name": "Valla de ladrillos del inframundo", "tile.quartz_ore.name": "Mineral de cuarzo del mundo inferior", "tile.netherreactor.active": "¡Activo!", @@ -17566,13 +16614,13 @@ export const langs: Langs = { "tile.jungle_standing_sign.name": "Letrero de jungla", "tile.acacia_standing_sign.name": "Letrero de acacia", "tile.darkoak_standing_sign.name": "Letrero de roble oscuro", - "tile.slime.name": "Bloque de Slime", + "tile.slime.name": "Bloque de slime", "tile.snow.name": "Bloque de nieve", "tile.sponge.dry.name": "Esponja", "tile.sponge.wet.name": "Esponja mojada", "tile.spruceFence.name": "Valla de abeto", "tile.spruce_fence_gate.name": "Puerta de valla de abeto", - "tile.brick_stairs.name": "Escaleras de ladrillo", + "tile.brick_stairs.name": "Escaleras de ladrillos", "tile.nether_brick_stairs.name": "Escaleras de ladrillos del inframundo", "tile.quartz_stairs.name": "Escaleras de cuarzo", "tile.smooth_quartz_stairs.name": "Escaleras de cuarzo liso", @@ -17588,20 +16636,20 @@ export const langs: Langs = { "tile.jungle_stairs.name": "Escaleras de la jungla", "tile.spruce_stairs.name": "Escaleras de abeto", "tile.purpur_stairs.name": "Escaleras de púrpura", - "tile.prismarine_stairs.name": "Estrellas de prismarina", - "tile.dark_prismarine_stairs.name": "Estrellas de prismarina oscura", - "tile.prismarine_bricks_stairs.name": "Escaleras de ladrillo de prismarina", + "tile.prismarine_stairs.name": "Escaleras de prismarina", + "tile.dark_prismarine_stairs.name": "Escaleras de prismarina oscura", + "tile.prismarine_bricks_stairs.name": "Escaleras de ladrillos de prismarina", "tile.granite_stairs.name": "Escaleras de granito", "tile.diorite_stairs.name": "Escaleras de diorita", "tile.andesite_stairs.name": "Escaleras de andesita", "tile.polished_granite_stairs.name": "Escaleras de granito pulido", "tile.polished_diorite_stairs.name": "Escaleras de diorita pulida", "tile.polished_andesite_stairs.name": "Escaleras de andesita pulida", - "tile.mossy_stone_brick_stairs.name": "Escaleras de ladrillo de piedra musgosa", + "tile.mossy_stone_brick_stairs.name": "Escaleras de ladrillos de piedra musgosa", "tile.smooth_red_sandstone_stairs.name": "Escaleras de arenisca roja lisa", "tile.smooth_sandstone_stairs.name": "Escaleras de arenisca lisa", - "tile.end_brick_stairs.name": "Escaleras de ladrillo de piedra de End", - "tile.mossy_cobblestone_stairs.name": "Escaleras de adoquín musgoso", + "tile.end_brick_stairs.name": "Escaleras de ladrillos de piedra de End", + "tile.mossy_cobblestone_stairs.name": "Escaleras de adoquines musgosos", "tile.red_nether_brick_stairs.name": "Escaleras de ladrillo del inframundo rojo", "tile.smooth_stone.name": "Piedra lisa", "tile.standing_banner.black.name": "Estandarte negro", @@ -17635,9 +16683,9 @@ export const langs: Langs = { "tile.stonebrick.mossy.name": "Ladrillos de piedra musgosa", "tile.stonebrick.name": "Ladrillos de piedra", "tile.stonebrick.smooth.name": "Ladrillos de piedra lisa", - "tile.stonecutter.name": "Cortapiedra", - "tile.stonecutter_block.name": "Cortapiedra", - "tile.mossy_cobblestone.name": "Adoquín musgoso", + "tile.stonecutter.name": "Cortapiedras", + "tile.stonecutter_block.name": "Cortapiedras", + "tile.mossy_cobblestone.name": "Adoquines musgosos", "tile.double_stone_slab.brick.name": "Losa de ladrillos", "tile.double_stone_slab.cobble.name": "Losa de adoquines", "tile.double_stone_slab.name": "Losa de piedra", @@ -17662,10 +16710,10 @@ export const langs: Langs = { "tile.stone_slab2.prismarine.rough.name": "Losa de prismarina", "tile.stone_slab2.prismarine.dark.name": "Losa de prismarina oscura", "tile.stone_slab2.prismarine.bricks.name": "Losa de ladrillos de prismarina", - "tile.stone_slab2.mossy_cobblestone.name": "Losa de adoquín musgoso", + "tile.stone_slab2.mossy_cobblestone.name": "Losa de adoquines musgosos", "tile.stone_slab2.red_nether_brick.name": "Losa de ladrillo del inframundo rojo", "tile.stone_slab2.sandstone.smooth.name": "Losa de arenisca lisa", - "tile.stone_slab3.end_brick.name": "Losa de ladrillo de piedra de End", + "tile.stone_slab3.end_brick.name": "Losa de ladrillos de piedra de End", "tile.stone_slab3.red_sandstone.smooth.name": "Losa de arenisca roja lisa", "tile.stone_slab3.andesite.smooth.name": "Losa de andesita pulida", "tile.stone_slab3.andesite.name": "Losa de andesita", @@ -17673,21 +16721,21 @@ export const langs: Langs = { "tile.stone_slab3.diorite.smooth.name": "Losa de diorita pulida", "tile.stone_slab3.granite.name": "Losa de granito", "tile.stone_slab3.granite.smooth.name": "Losa de granito pulido", - "tile.stone_slab4.mossy_stone_brick.name": "Losa de ladrillo de piedra musgosa", + "tile.stone_slab4.mossy_stone_brick.name": "Losa de ladrillos de piedra musgosa", "tile.stone_slab4.smooth_quartz.name": "Losa de cuarzo liso", "tile.stone_slab4.stone.name": "Losa de piedra", "tile.stone_slab4.cut_sandstone.name": "Losa de arenisca cortada", "tile.stone_slab4.cut_red_sandstone.name": "Losa de arenisca roja cortada", "tile.coral_block.blue.name": "Bloque de coral tubo", "tile.coral_block.pink.name": "Bloque de coral cerebro", - "tile.coral_block.purple.name": "Bloque de coral burbuja", + "tile.coral_block.purple.name": "Bloque de coral burbujas", "tile.coral_block.red.name": "Bloque de coral de fuego", "tile.coral_block.yellow.name": "Bloque de coral rugoso", "tile.coral_block.blue_dead.name": "Bloque de coral tubo muerto", "tile.coral_block.pink_dead.name": "Bloque de coral cerebro muerto", "tile.coral_block.purple_dead.name": "Bloque de coral burbuja muerto", "tile.coral_block.red_dead.name": "Bloque de coral de fuego muerto", - "tile.coral_block.yellow_dead.name": "Bloque de coral rugoso muerto", + "tile.coral_block.yellow_dead.name": "Bloque de coral de cuerno muerto", "tile.tallgrass.fern.name": "Helecho", "tile.tallgrass.grass.name": "Pasto corto", "tile.tallgrass.name": "Pasto corto", @@ -17784,25 +16832,25 @@ export const langs: Langs = { "tile.pale_oak_fence_gate.name": "Puerta de valla de roble pálido", "tile.pale_oak_log.name": "Tronco de roble pálido", "tile.pale_oak_planks.name": "Tablones de roble pálido", - "tile.pale_oak_pressure_plate.name": "Plato de presión de roble pálido", + "tile.pale_oak_pressure_plate.name": "Placa de presión de roble oscuro", "tile.pale_oak_slab.name": "Losa de roble pálido", "tile.pale_oak_stairs.name": "Escaleras de roble pálido", "tile.pale_oak_trapdoor.name": "Escotilla de roble pálido", "tile.pale_oak_wood.name": "Madera de roble pálido", "tile.stripped_pale_oak_log.name": "Tronco de roble pálido sin corteza", "tile.stripped_pale_oak_wood.name": "Madera de roble pálido sin corteza", - "tile.pale_hanging_moss.name": "Musgo colgante pálido", + "tile.pale_hanging_moss.name": "Musgo pálido colgante", "tile.pale_moss_block.name": "Bloque de musgo pálido", "tile.pale_moss_carpet.name": "Alfombra de musgo pálido", "tile.creaking_heart.name": "Corazón de crepitante", "tile.open_eyeblossom.name": "Flor ojo abierta", "tile.closed_eyeblossom.name": "Flor ojo cerrada", - "tile.resin_bricks.name": "Ladrillos de resina", - "tile.resin_brick_double_slab.name": "Losa doble de ladrillos de resina", - "tile.resin_brick_slab.name": "Losa de ladrillos de resina", + "tile.resin_bricks.name": "Bloques de resina", + "tile.resin_brick_double_slab.name": "Losa doble de bloques de resina", + "tile.resin_brick_slab.name": "Losa de bloques de resina", "tile.resin_brick_stairs.name": "Escaleras de ladrillos de resina", "tile.resin_brick_wall.name": "Pared de ladrillos de resina", - "tile.chiseled_resin_bricks.name": "Ladrillos de resina cincelados", + "tile.chiseled_resin_bricks.name": "Bloques de resina cincelados", "tile.resin_block.name": "Bloque de resina", "tile.resin_clump.name": "Grumo de resina", "tile.glazedTerracotta.white.name": "Terracota vidriada blanca", @@ -17828,7 +16876,7 @@ export const langs: Langs = { "tile.concrete.blue.name": "Concreto azul", "tile.concrete.purple.name": "Concreto morado", "tile.concrete.cyan.name": "Concreto cian", - "tile.concrete.silver.name": "Concreto gris claro", + "tile.concrete.silver.name": "Concreto gris", "tile.concrete.gray.name": "Concreto gris", "tile.concrete.pink.name": "Concreto rosa", "tile.concrete.lime.name": "Concreto verde lima", @@ -17865,14 +16913,14 @@ export const langs: Langs = { "tile.concretePowder.pink.name": "Polvo de concreto rosa", "tile.concretePowder.lime.name": "Polvo de concreto verde lima", "tile.concretePowder.yellow.name": "Polvo de concreto amarillo", - "tile.concretePowder.lightBlue.name": "Polvo de concreto celeste", + "tile.concretePowder.lightBlue.name": "Polvo de concreto azul claro", "tile.concretePowder.magenta.name": "Polvo de concreto magenta", "tile.concretePowder.orange.name": "Polvo de concreto naranja", "tile.concretePowder.white.name": "Polvo de concreto blanco", "tile.stripped_spruce_log.name": "Tronco de abeto descortezado", "tile.stripped_dark_oak_log.name": "Tronco de roble oscuro descortezado", "tile.stripped_birch_log.name": "Tronco de abedul descortezado", - "tile.stripped_jungle_log.name": "Tronco de la jungla descortezado", + "tile.stripped_jungle_log.name": "Tronco de la jungla sin corteza", "tile.stripped_oak_log.name": "Tronco de roble descortezado", "tile.stripped_acacia_log.name": "Tronco de acacia descortezado", "tile.bamboo.name": "Bambú", @@ -17891,20 +16939,20 @@ export const langs: Langs = { "tile.wood.oak.name": "Madera de roble", "tile.wood.spruce.name": "Madera de abeto", "tile.wood.birch.name": "Madera de abedul", - "tile.wood.jungle.name": "Madera de la jungla", + "tile.wood.jungle.name": "Leño de jungla", "tile.wood.acacia.name": "Madera de acacia", "tile.wood.dark_oak.name": "Madera de roble oscuro", "tile.wood.stripped.oak.name": "Madera de roble descortezada", "tile.wood.stripped.spruce.name": "Madera de abeto descortezada", "tile.wood.stripped.birch.name": "Madera de abedul descortezada", - "tile.wood.stripped.jungle.name": "Madera de la jungla descortezada", + "tile.wood.stripped.jungle.name": "Leño de jungla sin corteza", "tile.wood.stripped.acacia.name": "Madera de acacia descortezada", "tile.wood.stripped.dark_oak.name": "Madera de roble oscuro descortezada", - "tile.netherite_block.name": "Bloque de netherita", + "tile.netherite_block.name": "Bloque de inframundita", "tile.ancient_debris.name": "Escombros ancestrales", "tile.nether_gold_ore.name": "Mineral de oro del inframundo", "tile.respawn_anchor.name": "Ancla de regeneración", - "tile.crying_obsidian.name": "Obsidiana llorona", + "tile.crying_obsidian.name": "Obsidiana llorosa", "tile.powder_snow.name": "Nieve en polvo", "tile.deepslate.name": "Pizarra abismal", "tile.infested_deepslate.name": "Pizarra abismal infestada", @@ -17923,14 +16971,14 @@ export const langs: Langs = { "tile.deepslate_tile_stairs.name": "Escaleras de mosaico de pizarra abismal", "tile.deepslate_tile_wall.name": "Pared de mosaico de pizarra abismal", "tile.deepslate_bricks.name": "Ladrillos de pizarra abismal", - "tile.deepslate_brick_slab.name": "Losa de ladrillo de pizarra abismal", - "tile.deepslate_brick_stairs.name": "Escaleras de ladrillo de pizarra abismal", - "tile.deepslate_brick_wall.name": "Pared de ladrillo de pizarra abismal", + "tile.deepslate_brick_slab.name": "Losa de ladrillos de pizarra abismal", + "tile.deepslate_brick_stairs.name": "Escaleras de ladrillos de pizarra abismal", + "tile.deepslate_brick_wall.name": "Pared de ladrillos de pizarra abismal", "tile.chiseled_deepslate.name": "Pizarra abismal cincelada", "tile.cobbled_deepslate_double_slab.name": "Losa doble de pizarra abismal empedrada", "tile.polished_deepslate_double_slab.name": "Losa doble de pizarra abismal pulida", - "tile.deepslate_tile_double_slab.name": "Losa doble de mosaico de pizarra abismal", - "tile.deepslate_brick_double_slab.name": "Losa doble de ladrillo de pizarra abismal", + "tile.deepslate_tile_double_slab.name": "Losa doble de baldosas de pizarra abismal", + "tile.deepslate_brick_double_slab.name": "Losa doble de ladrillos de pizarra abismal", "tile.deepslate_lapis_ore.name": "Mineral de lapislázuli de pizarra abismal", "tile.deepslate_iron_ore.name": "Mineral de hierro de pizarra abismal", "tile.deepslate_gold_ore.name": "Mineral de oro de pizarra abismal", @@ -17939,8 +16987,8 @@ export const langs: Langs = { "tile.deepslate_coal_ore.name": "Mineral de carbón de pizarra abismal", "tile.deepslate_emerald_ore.name": "Mineral de esmeralda de pizarra abismal", "tile.deepslate_copper_ore.name": "Mineral de cobre de pizarra abismal", - "tile.cracked_deepslate_tiles.name": "Mosaicos de pizarra abismal agrietada", - "tile.cracked_deepslate_bricks.name": "Ladrillos de pizarra abismal agrietada", + "tile.cracked_deepslate_tiles.name": "Mosaicos de pizarra abismal agrietadas", + "tile.cracked_deepslate_bricks.name": "Ladrillos de pizarra abismal agrietados", "tile.pitcher_plant.name": "Planta jarra", "tile.sniffer_egg.name": "Huevo de rastreador", "tile.torchflower.name": "Bastón de emperador", @@ -17961,41 +17009,41 @@ export const langs: Langs = { "tile.weathered_cut_copper.name": "Cobre cortado desgastado", "tile.oxidized_cut_copper.name": "Cobre cortado oxidado", "tile.waxed_cut_copper.name": "Cobre cortado encerado", - "tile.waxed_exposed_cut_copper.name": "Cobre cortado expuesto encerado", - "tile.waxed_weathered_cut_copper.name": "Cobre cortado desgastado encerado", - "tile.waxed_oxidized_cut_copper.name": "Cobre cortado oxidado encerado", + "tile.waxed_exposed_cut_copper.name": "Cobre cortado, expuesto y encerado", + "tile.waxed_weathered_cut_copper.name": "Cobre cortado, desgastado y encerado", + "tile.waxed_oxidized_cut_copper.name": "Cobre cortado, oxidado y encerado", "tile.cut_copper_stairs.name": "Escaleras de cobre cortado", "tile.exposed_cut_copper_stairs.name": "Escaleras de cobre cortado expuesto", "tile.weathered_cut_copper_stairs.name": "Escaleras de cobre cortado desgastado", "tile.oxidized_cut_copper_stairs.name": "Escaleras de cobre cortado oxidado", - "tile.waxed_cut_copper_stairs.name": "Escaleras de cobre cortado enceradas", - "tile.waxed_exposed_cut_copper_stairs.name": "Escaleras de cobre cortado expuesto encerado", - "tile.waxed_weathered_cut_copper_stairs.name": "Escaleras de cobre cortado desgastado encerado", - "tile.waxed_oxidized_cut_copper_stairs.name": "Escaleras de cobre cortado oxidado encerado", + "tile.waxed_cut_copper_stairs.name": "Escaleras de cobre cortado encerado", + "tile.waxed_exposed_cut_copper_stairs.name": "Escaleras de cobre cortado, expuesto y encerado", + "tile.waxed_weathered_cut_copper_stairs.name": "Escaleras de cobre cortado, desgastado y encerado", + "tile.waxed_oxidized_cut_copper_stairs.name": "Escaleras de cobre cortado, oxidado y encerado", "tile.cut_copper_slab.name": "Losa de cobre cortado", "tile.exposed_cut_copper_slab.name": "Losa de cobre cortado expuesto", - "tile.weathered_cut_copper_slab.name": "Losa de cobre cortado desgastado", + "tile.weathered_cut_copper_slab.name": "Losa de cobre cortado erosionado", "tile.oxidized_cut_copper_slab.name": "Losa de cobre cortado oxidado", "tile.waxed_cut_copper_slab.name": "Losa de cobre cortado encerado", - "tile.waxed_exposed_cut_copper_slab.name": "Losa de cobre cortado expuesto encerado", - "tile.waxed_weathered_cut_copper_slab.name": "Losa de cobre cortado desgastado encerado", - "tile.waxed_oxidized_cut_copper_slab.name": "Losa de cobre cortado oxidado encerado", + "tile.waxed_exposed_cut_copper_slab.name": "Losa de cobre cortado, expuesto y encerado", + "tile.waxed_weathered_cut_copper_slab.name": "Losa de cobre cortado, desgastado y encerado", + "tile.waxed_oxidized_cut_copper_slab.name": "Losa de cobre cortado, oxidado y encerado", "tile.chiseled_copper.name": "Cobre cincelado", "tile.exposed_chiseled_copper.name": "Cobre cincelado expuesto", "tile.oxidized_chiseled_copper.name": "Cobre cincelado oxidado", "tile.waxed_chiseled_copper.name": "Cobre cincelado encerado", "tile.waxed_exposed_chiseled_copper.name": "Cobre cincelado, expuesto y encerado", "tile.waxed_oxidized_chiseled_copper.name": "Cobre cincelado, oxidado y encerado", - "tile.waxed_weathered_chiseled_copper.name": "Cobre cincelado, erosionado y encerado", + "tile.waxed_weathered_chiseled_copper.name": "Cobre cincelado, desgastado y encerado", "tile.weathered_chiseled_copper.name": "Cobre cincelado desgastado", "tile.copper_bulb.name": "Lámpara de cobre", - "tile.exposed_copper_bulb.name": "Lámpara de cobre expuesto", - "tile.oxidized_copper_bulb.name": "Lámpara de cobre oxidado", - "tile.waxed_copper_bulb.name": "Lámpara de cobre encerado", - "tile.waxed_exposed_copper_bulb.name": "Lámpara de cobre expuesto encerado", - "tile.waxed_oxidized_copper_bulb.name": "Lámpara de cobre oxidado encerado", - "tile.waxed_weathered_copper_bulb.name": "Lámpara de cobre erosionado encerado", - "tile.weathered_copper_bulb.name": "Lámpara de cobre desgastado", + "tile.exposed_copper_bulb.name": "Foco de cobre expuesto", + "tile.oxidized_copper_bulb.name": "Bombilla de cobre oxidado", + "tile.waxed_copper_bulb.name": "Bombilla de cobre encerado", + "tile.waxed_exposed_copper_bulb.name": "Bombilla de cobre expuesto encerado", + "tile.waxed_oxidized_copper_bulb.name": "Foco de cobre oxidado encerado", + "tile.waxed_weathered_copper_bulb.name": "Bombilla de cobre desgastado encerado", + "tile.weathered_copper_bulb.name": "Bombilla de cobre desgastado", "tile.copper_door.name": "Puerta de cobre", "tile.exposed_copper_door.name": "Puerta de cobre expuesto", "tile.oxidized_copper_door.name": "Puerta de cobre oxidado", @@ -18008,17 +17056,17 @@ export const langs: Langs = { "tile.exposed_copper_grate.name": "Rejilla de cobre expuesto", "tile.oxidized_copper_grate.name": "Rejilla de cobre oxidado", "tile.waxed_copper_grate.name": "Rejilla de cobre encerado", - "tile.waxed_exposed_copper_grate.name": "Rejilla de cobre expuesto y encerado", - "tile.waxed_oxidized_copper_grate.name": "Rejilla de cobre oxidado y encerado", - "tile.waxed_weathered_copper_grate.name": "Rejilla de cobre desgastado y encerado", + "tile.waxed_exposed_copper_grate.name": "Rejilla de cobre expuesto encerado", + "tile.waxed_oxidized_copper_grate.name": "Rejilla de cobre oxidado encerado", + "tile.waxed_weathered_copper_grate.name": "Rejilla de cobre desgastado encerado", "tile.weathered_copper_grate.name": "Rejilla de cobre desgastado", "tile.copper_trapdoor.name": "Escotilla de cobre", "tile.exposed_copper_trapdoor.name": "Escotilla de cobre expuesto", "tile.oxidized_copper_trapdoor.name": "Escotilla de cobre oxidado", "tile.waxed_copper_trapdoor.name": "Escotilla de cobre encerado", - "tile.waxed_exposed_copper_trapdoor.name": "Escotilla de cobre expuesto y encerado", - "tile.waxed_oxidized_copper_trapdoor.name": "Escotilla de cobre oxidado y encerado", - "tile.waxed_weathered_copper_trapdoor.name": "Escotilla de cobre desgastado y encerado", + "tile.waxed_exposed_copper_trapdoor.name": "Escotilla de cobre expuesto encerado", + "tile.waxed_oxidized_copper_trapdoor.name": "Escotilla de cobre oxidado encerado", + "tile.waxed_weathered_copper_trapdoor.name": "Escotilla de cobre desgastado encerado", "tile.weathered_copper_trapdoor.name": "Escotilla de cobre desgastado", "tile.raw_copper_block.name": "Bloque de cobre crudo", "tile.raw_iron_block.name": "Bloque de hierro crudo", @@ -18059,7 +17107,7 @@ export const langs: Langs = { "tile.black_candle_cake.name": "Pastel con vela negra", "item.spyglass.name": "Catalejo", "item.amethyst_shard.name": "Fragmento de amatista", - "tile.amethyst_block.name": "Bloque de Amatista", + "tile.amethyst_block.name": "Bloque de amatista", "tile.budding_amethyst.name": "Germinador de amatista", "tile.amethyst_cluster.name": "Racimo de amatista", "tile.large_amethyst_bud.name": "Capullo de amatista grande", @@ -18077,15 +17125,100 @@ export const langs: Langs = { "item.brown_egg.name": "Huevo marrón", "item.blue_egg.name": "Huevo azul", "tile.short_dry_grass.name": "Hierba corta seca", - "tile.tall_dry_grass.name": "Hierba alta seca" + "tile.tall_dry_grass.name": "Hierba alta seca", + "entity.happy_ghast.name": "Ghast feliz", + "item.spawn_egg.entity.happy_ghast.name": "Huevo generador de ghast feliz", + "tile.dried_ghast.name": "Ghast seco", + "item.black_harness.name": "Arnés negro", + "item.blue_harness.name": "Arnés azul", + "item.brown_harness.name": "Arnés marrón", + "item.cyan_harness.name": "Arnés cian", + "item.gray_harness.name": "Arnés gris", + "item.green_harness.name": "Arnés verde", + "item.light_blue_harness.name": "Arnés azul claro", + "item.light_gray_harness.name": "Arnés gris claro", + "item.lime_harness.name": "Arnés verde lima", + "item.magenta_harness.name": "Arnés magenta", + "item.orange_harness.name": "Arnés naranja", + "item.pink_harness.name": "Arnés rosa", + "item.purple_harness.name": "Arnés morado", + "item.red_harness.name": "Arnés rojo", + "item.white_harness.name": "Arnés blanco", + "item.yellow_harness.name": "Arnés amarillo", + "entity.copper_golem.name": "Gólem de cobre", + "item.spawn_egg.entity.copper_golem.name": "Huevo generador de gólem de cobre", + "item.copper_nugget.name": "Pepita de cobre", + "item.copper_sword.name": "Espada de cobre", + "item.copper_pickaxe.name": "Pico de cobre", + "item.copper_axe.name": "Hacha de cobre", + "item.copper_shovel.name": "Pala de cobre", + "item.copper_hoe.name": "Azada de cobre", + "item.copper_boots.name": "Botas de cobre", + "item.copper_leggings.name": "Grebas de cobre", + "item.copper_chestplate.name": "Pechera de cobre", + "item.copper_helmet.name": "Yelmo de cobre", + "tile.copper_chest.name": "Cofre de cobre", + "tile.exposed_copper_chest.name": "Cofre de cobre expuesto", + "tile.weathered_copper_chest.name": "Cofre de cobre erosionado", + "tile.oxidized_copper_chest.name": "Cofre de cobre oxidado", + "tile.waxed_copper_chest.name": "Cofre de cobre encerado", + "tile.waxed_exposed_copper_chest.name": "Cofre de cobre expuesto encerado", + "tile.waxed_weathered_copper_chest.name": "Cofre de cobre erosionado encerado", + "tile.waxed_oxidized_copper_chest.name": "Cofre de cobre oxidado encerado", + "tile.acacia_shelf.name": "Repisa de acacia", + "tile.bamboo_shelf.name": "Repisa de bambú", + "tile.birch_shelf.name": "Repisa de abedul", + "tile.cherry_shelf.name": "Repisa de cerezo", + "tile.crimson_shelf.name": "Repisa carmesí", + "tile.dark_oak_shelf.name": "Repisa de roble oscuro", + "tile.jungle_shelf.name": "Repisa de jungla", + "tile.mangrove_shelf.name": "Repisa de manglar", + "tile.oak_shelf.name": "Repisa de roble", + "tile.pale_oak_shelf.name": "Repisa de roble pálido", + "tile.spruce_shelf.name": "Repisa de abeto", + "tile.warped_shelf.name": "Repisa distorsionada", + "tile.copper_golem_statue.name": "Estatua de gólem de cobre", + "tile.exposed_copper_golem_statue.name": "Estatua de gólem de cobre expuesto", + "tile.weathered_copper_golem_statue.name": "Estatua de gólem de cobre degradado", + "tile.oxidized_copper_golem_statue.name": "Estatua de gólem de cobre oxidado", + "tile.waxed_copper_golem_statue.name": "Estatua de gólem de cobre encerado", + "tile.waxed_exposed_copper_golem_statue.name": "Estatua de gólem de cobre expuesto encerado", + "tile.waxed_weathered_copper_golem_statue.name": "Estatua de gólem de cobre degradado encerado", + "tile.waxed_oxidized_copper_golem_statue.name": "Estatua de gólem de cobre oxidado encerado", + "tile.copper_chain.name": "Cadena de cobre", + "tile.exposed_copper_chain.name": "Cadena de cobre expuesto", + "tile.weathered_copper_chain.name": "Cadena de cobre degradado", + "tile.oxidized_copper_chain.name": "Cadena de cobre oxidado", + "tile.waxed_copper_chain.name": "Cadena de cobre encerado", + "tile.waxed_exposed_copper_chain.name": "Cadena de cobre expuesto encerado", + "tile.waxed_weathered_copper_chain.name": "Cadena de cobre degradado encerado", + "tile.waxed_oxidized_copper_chain.name": "Cadena de cobre oxidado encerado", + "tile.copper_bars.name": "Barras de cobre", + "tile.exposed_copper_bars.name": "Barras de cobre expuesto", + "tile.weathered_copper_bars.name": "Barras de cobre degradado", + "tile.oxidized_copper_bars.name": "Barras de cobre oxidado", + "tile.waxed_copper_bars.name": "Barras de cobre encerado", + "tile.waxed_exposed_copper_bars.name": "Barras de cobre expuesto encerado", + "tile.waxed_weathered_copper_bars.name": "Barras de cobre degradado encerado", + "tile.waxed_oxidized_copper_bars.name": "Barras de cobre oxidado encerado", + "tile.copper_lantern.name": "Farol de cobre", + "tile.exposed_copper_lantern.name": "Farol de cobre expuesto", + "tile.weathered_copper_lantern.name": "Farol de cobre degradado", + "tile.oxidized_copper_lantern.name": "Farol de cobre oxidado", + "tile.waxed_copper_lantern.name": "Farol de cobre encerado", + "tile.waxed_exposed_copper_lantern.name": "Farol de cobre expuesto encerado", + "tile.waxed_weathered_copper_lantern.name": "Farol de cobre degradado encerado", + "tile.waxed_oxidized_copper_lantern.name": "Farol de cobre oxidado encerado", + "tile.copper_torch.name": "Antorcha de cobre", + "tile.iron_chain.name": "Cadena de hierro" }, "fr_FR": { "enchantment.arrowDamage": "Puissance", "enchantment.arrowFire": "Flamme", "enchantment.arrowInfinite": "Infinité", - "enchantment.arrowKnockback": "Repoussoir", + "enchantment.arrowKnockback": "Frappe", "enchantment.crossbowMultishot": "Tir multiple", - "enchantment.crossbowPiercing": "Perçant", + "enchantment.crossbowPiercing": "Perforation", "enchantment.crossbowQuickCharge": "Salve rapide", "enchantment.curse.binding": "Malédiction du lien éternel", "enchantment.curse.vanishing": "Malédiction de disparition", @@ -18097,7 +17230,7 @@ export const langs: Langs = { "enchantment.fire": "Aura de Feu", "enchantment.fishingSpeed": "Appât", "enchantment.frostwalker": "Semelles givrantes", - "enchantment.heavy_weapon.breach": "Infraction", + "enchantment.heavy_weapon.breach": "Brèche", "enchantment.heavy_weapon.density": "Densité", "enchantment.heavy_weapon.windburst": "Rafale de vent", "enchantment.knockback": "Recul", @@ -18121,17 +17254,17 @@ export const langs: Langs = { "enchantment.protect.fall": "Chute amortie", "enchantment.protect.fire": "Protection contre le feu", "enchantment.protect.projectile": "Protection contre les projectiles", - "enchantment.soul_speed": "Agilité des âmes", - "enchantment.swift_sneak": "Faufilement rapide", + "enchantment.soul_speed": "Rapidité des âmes", + "enchantment.swift_sneak": "Furtivité rapide", "enchantment.thorns": "Épines", - "enchantment.untouching": "Délicatesse", + "enchantment.untouching": "Toucher de soie", "enchantment.waterWalker": "Agilité aquatique", - "enchantment.waterWorker": "Aisance aquatique", + "enchantment.waterWorker": "Affinité aquatique", "enchantment.tridentChanneling": "Canalisation", "enchantment.tridentLoyalty": "Loyauté", "enchantment.tridentRiptide": "Impulsion", "enchantment.tridentImpaling": "Empalement", - "entity.area_effect_cloud.name": "Nuage effet de zone", + "entity.area_effect_cloud.name": "Nuage d’effet persistant", "entity.armadillo.name": "Tatou", "entity.armor_stand.name": "Porte-armure", "entity.arrow.name": "Flèche", @@ -18141,10 +17274,10 @@ export const langs: Langs = { "entity.boat.name": "Bateau", "entity.bogged.name": "Embourbé", "entity.breeze.name": "Breeze", - "entity.breeze_wind_charge_projectile.name": "Charge de vent", + "entity.breeze_wind_charge_projectile.name": "Souffle", "entity.cat.name": "Chat", "entity.cave_spider.name": "Araignée venimeuse", - "entity.chicken.name": "Poulet", + "entity.chicken.name": "Poule", "entity.cow.name": "Vache", "entity.creaking.name": "Grinceur", "entity.creeper.name": "Creeper", @@ -18153,17 +17286,17 @@ export const langs: Langs = { "entity.panda.name": "Panda", "entity.donkey.name": "Âne", "entity.dragon_fireball.name": "Boule de feu de dragon", - "entity.drowned.name": "Zombie noyé", + "entity.drowned.name": "Noyé", "entity.egg.name": "Œuf", - "entity.elder_guardian.name": "Ancien gardien", - "entity.ender_crystal.name": "Cristel de l'Ender", - "entity.ender_dragon.name": "Dragon de l'Ender", - "entity.enderman.name": "Enderman", - "entity.endermite.name": "Endermite", - "entity.ender_pearl.name": "Perle de l'Ender", + "entity.elder_guardian.name": "Grand gardien", + "entity.ender_crystal.name": "Cristel de l'End", + "entity.ender_dragon.name": "Dragon de l'End", + "entity.enderman.name": "Endman", + "entity.endermite.name": "Endmite", + "entity.ender_pearl.name": "Perle de l'End", "entity.evocation_illager.name": "Évocateur", "entity.evocation_fang.name": "Mâchoire d'Évocateur", - "entity.eye_of_ender_signal.name": "Œil de l'Ender", + "entity.eye_of_ender_signal.name": "Œil de l'End", "entity.falling_block.name": "Bloc soumis à la gravité", "entity.fireball.name": "Boule de feu", "entity.fireworks_rocket.name": "Fusée de feu d'artifice", @@ -18176,8 +17309,8 @@ export const langs: Langs = { "entity.tropicalfish.name": "Poisson tropical", "entity.axolotl.name": "Axolotl", "entity.ghast.name": "Ghast", - "entity.glow_squid.name": "Pieuvre luisante", - "entity.piglin_brute.name": "Brute piglin", + "entity.glow_squid.name": "Poulpe lumineux", + "entity.piglin_brute.name": "Piglin barbare", "entity.guardian.name": "Gardien", "entity.hoglin.name": "Hoglin", "entity.horse.name": "Cheval", @@ -18195,14 +17328,14 @@ export const langs: Langs = { "entity.minecart.name": "Wagonnet", "entity.chest_minecart.name": "Wagonnet de stockage", "entity.command_block_minecart.name": "Wagonnet avec bloc de commande", - "entity.furnace_minecart.name": "Wagonnet motorisé", + "entity.furnace_minecart.name": "Wagonnet motorisé avec fourneau", "entity.hopper_minecart.name": "Wagonnet à entonnoir", "entity.tnt_minecart.name": "Wagonnet à TNT", "entity.mule.name": "Mule", "entity.mooshroom.name": "Mooshroom", "entity.moving_block.name": "Déplacement de bloc", "entity.ocelot.name": "Ocelot", - "entity.painting.name": "Peinture", + "entity.painting.name": "Tableau", "entity.parrot.name": "Perroquet", "entity.phantom.name": "Phantom", "entity.pig.name": "Cochon", @@ -18211,11 +17344,11 @@ export const langs: Langs = { "entity.polar_bear.name": "Ours polaire", "entity.rabbit.name": "Lapin", "entity.sheep.name": "Mouton", - "entity.shulker.name": "Carapace de shulker", - "entity.shulker_bullet.name": "Projectile du shulker", + "entity.shulker.name": "Shulker", + "entity.shulker_bullet.name": "Projectile de shulker", "entity.silverfish.name": "Poisson d'argent", "entity.skeleton.name": "Squelette", - "entity.skeleton_horse.name": "Cheval squelette", + "entity.skeleton_horse.name": "Cheval-squelette", "entity.stray.name": "Vagabond", "entity.slime.name": "Slime", "entity.small_fireball.name": "Petite boule de feu", @@ -18224,7 +17357,7 @@ export const langs: Langs = { "entity.snow_golem.name": "Golem de neige", "entity.spider.name": "Araignée", "entity.splash_potion.name": "Potion", - "entity.squid.name": "Pieuvre", + "entity.squid.name": "Poulpe", "entity.strider.name": "Arpenteur", "entity.tnt.name": "TNT amorcé", "entity.thrown_trident.name": "Trident", @@ -18236,7 +17369,7 @@ export const langs: Langs = { "entity.villager.armor": "Armurier", "entity.villager.butcher": "Boucher", "entity.villager.cartographer": "Cartographe", - "entity.villager.cleric": "Curé", + "entity.villager.cleric": "Prêtre", "entity.villager.farmer": "Fermier", "entity.villager.fisherman": "Pêcheur", "entity.villager.fletcher": "Fléchier", @@ -18249,29 +17382,29 @@ export const langs: Langs = { "entity.villager.unskilled": "Villageois non qualifié", "entity.villager_v2.name": "Villageois", "entity.vindicator.name": "Vindicateur", - "entity.wandering_trader.name": "Marchand voyageur", - "entity.wind_charge_projectile.name": "Charge de vent", + "entity.wandering_trader.name": "Marchand ambulant", + "entity.wind_charge_projectile.name": "Souffle", "entity.witch.name": "Sorcière", "entity.wither.name": "Wither", "entity.wither_skeleton.name": "Wither squelette", - "entity.wither_skull.name": "Crâne de wither squelette", - "entity.wither_skull_dangerous.name": "Crâne de wither squelette", + "entity.wither_skull.name": "Crâne de wither", + "entity.wither_skull_dangerous.name": "Crâne de wither", "entity.wolf.name": "Loup", "entity.xp_orb.name": "Orbe d'expérience", "entity.xp_bottle.name": "Fiole d'expérience", "entity.zoglin.name": "Zoglin", "entity.zombie.name": "Zombie", - "entity.zombie_horse.name": "Cheval zombie", + "entity.zombie_horse.name": "Cheval-zombie", "entity.zombie_pigman.name": "Piglin zombifié", - "entity.zombie_villager.name": "Villageois zombie", - "entity.zombie_villager_v2.name": "Villageois zombie", + "entity.zombie_villager.name": "Zombie-villageois", + "entity.zombie_villager_v2.name": "Zombie-villageois", "item.air.name": "Air", "item.apple.name": "Pomme", "item.axolotlAdultBodySingle.name": "Axolotl adulte %1$s", "item.axolotlBabyBodySingle.name": "Bébé axolotl %1$s", "item.axolotlColorLucy.name": "Leucique", "item.axolotlColorCyan.name": "Cyan", - "item.axolotlColorGold.name": "Doré", + "item.axolotlColorGold.name": "Or", "item.axolotlColorWild.name": "Marron", "item.axolotlColorBlue.name": "Bleu", "item.golden_apple.name": "Pomme dorée", @@ -18288,7 +17421,7 @@ export const langs: Langs = { "item.banner.border.cyan": "Bordure de cyan", "item.banner.border.gray": "Bordure d'acier", "item.banner.border.green": "Bordure de sinople", - "item.banner.border.lightBlue": "Bordure d'azur de Bavière", + "item.banner.border.lightBlue": "Bordure bleu clair", "item.banner.border.lime": "Bordure de sinople clair", "item.banner.border.magenta": "Bordure de pourpre", "item.banner.border.orange": "Bordure d'orangé", @@ -18304,7 +17437,7 @@ export const langs: Langs = { "item.banner.bricks.cyan": "Champ maçonné de cyan", "item.banner.bricks.gray": "Champ maçonné d'acier", "item.banner.bricks.green": "Champ maçonné de sinople", - "item.banner.bricks.lightBlue": "Champ maçonné d'azur de Bavière", + "item.banner.bricks.lightBlue": "Champ maçonné bleu clair", "item.banner.bricks.lime": "Champ maçonné sinople clair", "item.banner.bricks.magenta": "Champ maçonné de pourpre", "item.banner.bricks.orange": "Champ maçonné d'orangé", @@ -18321,7 +17454,7 @@ export const langs: Langs = { "item.banner.circle.cyan": "Tourteau de cyan", "item.banner.circle.gray": "Tourteau d'acier", "item.banner.circle.green": "Tourteau de sinople", - "item.banner.circle.lightBlue": "Tourteau d'azur de Bavière", + "item.banner.circle.lightBlue": "Tourteau bleu clair", "item.banner.circle.lime": "Tourteau de sinople clair", "item.banner.circle.magenta": "Tourteau de pourpre", "item.banner.circle.orange": "Tourteau d'orangé", @@ -18331,29 +17464,29 @@ export const langs: Langs = { "item.banner.circle.silver": "Tourteau d'argent grisé", "item.banner.circle.white": "Tourteau d'argent", "item.banner.circle.yellow": "Tourteau d'or", - "item.banner.creeper.black": "Visage de creeper de sable", - "item.banner.creeper.blue": "Visage de creeper d'azur", - "item.banner.creeper.brown": "Visage de creeper de tanné", - "item.banner.creeper.cyan": "Visage de creeper de cyan", - "item.banner.creeper.gray": "Visage de creeper d'acier", - "item.banner.creeper.green": "Visage de creeper de sinople", - "item.banner.creeper.lightBlue": "Visage de creeper d'azur de Bavière", - "item.banner.creeper.lime": "Visage de creeper de sinople clair", - "item.banner.creeper.magenta": "Visage de creeper de pourpre", - "item.banner.creeper.orange": "Visage de creeper d'orangé", - "item.banner.creeper.pink": "Visage de creeper de carnation", - "item.banner.creeper.purple": "Visage de creeper de mûre", - "item.banner.creeper.red": "Visage de creeper de gueules", - "item.banner.creeper.silver": "Visage de creeper d'argent grisé", - "item.banner.creeper.white": "Visage de creeper d'argent", - "item.banner.creeper.yellow": "Visage de creeper d'or", + "item.banner.creeper.black": "Tête de creeper de sable", + "item.banner.creeper.blue": "Tête de creeper d'azur", + "item.banner.creeper.brown": "Tête de creeper de tanné", + "item.banner.creeper.cyan": "Tête de creeper de cyan", + "item.banner.creeper.gray": "Tête de creeper d'acier", + "item.banner.creeper.green": "Tête de creeper de sinople", + "item.banner.creeper.lightBlue": "Tête de creeper d'azur de Bavière", + "item.banner.creeper.lime": "Tête de creeper de sinople clair", + "item.banner.creeper.magenta": "Tête de creeper de pourpre", + "item.banner.creeper.orange": "Tête de creeper d'orangé", + "item.banner.creeper.pink": "Tête de creeper de carnation", + "item.banner.creeper.purple": "Tête de creeper de mûre", + "item.banner.creeper.red": "Tête de creeper de gueules", + "item.banner.creeper.silver": "Tête de creeper d'argent grisé", + "item.banner.creeper.white": "Tête de creeper d'argent", + "item.banner.creeper.yellow": "Tête de creeper d'or", "item.banner.cross.black": "Sautoir de sable", "item.banner.cross.blue": "Sautoir d'azur", "item.banner.cross.brown": "Sautoir de tanné", "item.banner.cross.cyan": "Sautoir de cyan", "item.banner.cross.gray": "Sautoir d'acier", "item.banner.cross.green": "Sautoir de sinople", - "item.banner.cross.lightBlue": "Sautoir d'azur de Bavière", + "item.banner.cross.lightBlue": "Sautoir bleu clair", "item.banner.cross.lime": "Sautoir de sinople clair", "item.banner.cross.magenta": "Sautoir de pourpre", "item.banner.cross.orange": "Sautoir d'orangé", @@ -18369,7 +17502,7 @@ export const langs: Langs = { "item.banner.curly_border.cyan": "Bordure cannelée de cyan", "item.banner.curly_border.gray": "Bordure cannelée d'acier", "item.banner.curly_border.green": "Bordure cannelée de sinople", - "item.banner.curly_border.lightBlue": "Bordure cannelée d'azur de Bavière", + "item.banner.curly_border.lightBlue": "Bordure cannelée bleu clair", "item.banner.curly_border.lime": "Bordure cannelée de sinople clair", "item.banner.curly_border.magenta": "Bordure cannelée de pourpre", "item.banner.curly_border.orange": "Bordure cannelée d'orangé", @@ -18386,7 +17519,7 @@ export const langs: Langs = { "item.banner.diagonal_left.cyan": "Taillé, au premier de cyan", "item.banner.diagonal_left.gray": "Taillé, au premier d'acier", "item.banner.diagonal_left.green": "Taillé, au premier de sinople", - "item.banner.diagonal_left.lightBlue": "Taillé, au premier d'azur de Bavière", + "item.banner.diagonal_left.lightBlue": "Taillé, au premier bleu clair", "item.banner.diagonal_left.lime": "Taillé, au premier de sinople clair", "item.banner.diagonal_left.magenta": "Taillé, au premier de pourpre", "item.banner.diagonal_left.orange": "Taillé, au premier d'orangé", @@ -18402,7 +17535,7 @@ export const langs: Langs = { "item.banner.diagonal_right.cyan": "Tranché, au premier de cyan", "item.banner.diagonal_right.gray": "Tranché, au premier d'acier", "item.banner.diagonal_right.green": "Tranché, au premier de sinople", - "item.banner.diagonal_right.lightBlue": "Tranché, au premier d'azur de Bavière", + "item.banner.diagonal_right.lightBlue": "Tranché, au premier bleu clair", "item.banner.diagonal_right.lime": "Tranché, au premier de sinople clair", "item.banner.diagonal_right.magenta": "Tranché, au premier de pourpre", "item.banner.diagonal_right.orange": "Tranché, au premier d'orangé", @@ -18418,7 +17551,7 @@ export const langs: Langs = { "item.banner.diagonal_up_left.cyan": "Tranché, au second de cyan", "item.banner.diagonal_up_left.gray": "Tranché, au second d'acier", "item.banner.diagonal_up_left.green": "Tranché, au second de sinople", - "item.banner.diagonal_up_left.lightBlue": "Tranché, au second d'azur de Bavière", + "item.banner.diagonal_up_left.lightBlue": "Tranché, au second bleu clair", "item.banner.diagonal_up_left.lime": "Tranché, au second de sinople clair", "item.banner.diagonal_up_left.magenta": "Tranché, au second de pourpre", "item.banner.diagonal_up_left.orange": "Tranché, au second d'orangé", @@ -18434,7 +17567,7 @@ export const langs: Langs = { "item.banner.diagonal_up_right.cyan": "Taillé, au second de cyan", "item.banner.diagonal_up_right.gray": "Taillé, au second d'acier", "item.banner.diagonal_up_right.green": "Taillé, au second de sinople", - "item.banner.diagonal_up_right.lightBlue": "Taillé, au second d'azur de Bavière", + "item.banner.diagonal_up_right.lightBlue": "Taillé, au second bleu clair", "item.banner.diagonal_up_right.lime": "Taillé, au second de sinople clair", "item.banner.diagonal_up_right.magenta": "Taillé, au second de pourpre", "item.banner.diagonal_up_right.orange": "Taillé, au second d'orangé", @@ -18450,7 +17583,7 @@ export const langs: Langs = { "item.banner.flow.cyan": "Flux cyan", "item.banner.flow.gray": "Flux gris", "item.banner.flow.green": "Flux vert", - "item.banner.flow.lightBlue": "Flux bleu ciel", + "item.banner.flow.lightBlue": "Flux bleu clair", "item.banner.flow.lime": "Flux vert clair", "item.banner.flow.magenta": "Flux magenta", "item.banner.flow.orange": "Flux orange", @@ -18466,7 +17599,7 @@ export const langs: Langs = { "item.banner.flower.cyan": "Fleur de cyan", "item.banner.flower.gray": "Fleur d'acier", "item.banner.flower.green": "Fleur de sinople", - "item.banner.flower.lightBlue": "Fleur d'azur de Bavière", + "item.banner.flower.lightBlue": "Fleur bleu clair", "item.banner.flower.lime": "Fleur de sinople clair", "item.banner.flower.magenta": "Fleur de pourpre", "item.banner.flower.orange": "Fleur d'orangé", @@ -18482,7 +17615,7 @@ export const langs: Langs = { "item.banner.globe.cyan": "Globe de cyan", "item.banner.globe.gray": "Globe d'acier", "item.banner.globe.green": "Globe de sinople", - "item.banner.globe.lightBlue": "Globe de bleu céleste", + "item.banner.globe.lightBlue": "Globe de bleu clair", "item.banner.globe.lime": "Globe de sinople clair", "item.banner.globe.magenta": "Magenta de pourpre", "item.banner.globe.orange": "Globe d'orangé", @@ -18498,7 +17631,7 @@ export const langs: Langs = { "item.banner.gradient.cyan": "Dégradé de cyan", "item.banner.gradient.gray": "Dégradé d'acier", "item.banner.gradient.green": "Dégradé de sinople", - "item.banner.gradient.lightBlue": "Dégradé d'azur de Bavière", + "item.banner.gradient.lightBlue": "Dégradé bleu clair", "item.banner.gradient.lime": "Dégradé de sinople clair", "item.banner.gradient.magenta": "Dégradé de pourpre", "item.banner.gradient.orange": "Dégradé d'orangé", @@ -18514,7 +17647,7 @@ export const langs: Langs = { "item.banner.gradient_up.cyan": "Dégradé de cyan en pointe", "item.banner.gradient_up.gray": "Dégradé d'acier en pointe", "item.banner.gradient_up.green": "Dégradé de sinople en pointe", - "item.banner.gradient_up.lightBlue": "Dégradé d'azur de Bavière en pointe", + "item.banner.gradient_up.lightBlue": "Dégradé bleu clair en pointe", "item.banner.gradient_up.lime": "Dégradé de sinople clair en pointe", "item.banner.gradient_up.magenta": "Dégradé de pourpre en pointe", "item.banner.gradient_up.orange": "Dégradé d'orangé en pointe", @@ -18526,29 +17659,29 @@ export const langs: Langs = { "item.banner.gradient_up.yellow": "Dégradé d'or en pointe", "item.banner.gray.name": "Bannière grise", "item.banner.green.name": "Bannière verte", - "item.banner.guster.black": "Tornade noire", - "item.banner.guster.blue": "Tornade bleue", - "item.banner.guster.brown": "Tornade marron", - "item.banner.guster.cyan": "Tornade cyan", - "item.banner.guster.gray": "Tornade grise", - "item.banner.guster.green": "Tornade verte", - "item.banner.guster.lightBlue": "Tornade bleu ciel", - "item.banner.guster.lime": "Tornade vert clair", - "item.banner.guster.magenta": "Tornade magenta", - "item.banner.guster.orange": "Tornade orange", - "item.banner.guster.pink": "Tornade rose", - "item.banner.guster.purple": "Tornade violette", - "item.banner.guster.red": "Tornade rouge", - "item.banner.guster.silver": "Tornade gris clair", - "item.banner.guster.white": "Tornade blanche", - "item.banner.guster.yellow": "Tornade jaune", + "item.banner.guster.black": "Rafaleur noir", + "item.banner.guster.blue": "Rafaleur bleu", + "item.banner.guster.brown": "Rafaleur marron", + "item.banner.guster.cyan": "Rafaleur cyan", + "item.banner.guster.gray": "Rafaleur gris", + "item.banner.guster.green": "Rafaleur vert", + "item.banner.guster.lightBlue": "Rafaleur bleu ciel", + "item.banner.guster.lime": "Rafaleur vert clair", + "item.banner.guster.magenta": "Rafaleur magenta", + "item.banner.guster.orange": "Rafaleur orange", + "item.banner.guster.pink": "Rafaleur rose", + "item.banner.guster.purple": "Rafaleur violet", + "item.banner.guster.red": "Rafaleur rouge", + "item.banner.guster.silver": "Rafaleur gris clair", + "item.banner.guster.white": "Rafaleur blanc", + "item.banner.guster.yellow": "Rafaleur jaune", "item.banner.half_horizontal.black": "Coupé, au premier de sable", "item.banner.half_horizontal.blue": "Coupé, au premier d'azur", "item.banner.half_horizontal.brown": "Coupé, au premier de tanné", "item.banner.half_horizontal.cyan": "Coupé, au premier de cyan", "item.banner.half_horizontal.gray": "Coupé, au premier d'acier", "item.banner.half_horizontal.green": "Coupé, au premier de sinople", - "item.banner.half_horizontal.lightBlue": "Coupé, au premier d'azur de Bavière", + "item.banner.half_horizontal.lightBlue": "Coupé, au premier bleu clair", "item.banner.half_horizontal.lime": "Coupé, au premier de sinople clair", "item.banner.half_horizontal.magenta": "Coupé, au premier de pourpre", "item.banner.half_horizontal.orange": "Coupé, au premier d'orangé", @@ -18564,7 +17697,7 @@ export const langs: Langs = { "item.banner.half_horizontal_bottom.cyan": "Coupé, au second de cyan", "item.banner.half_horizontal_bottom.gray": "Coupé, au second d'acier", "item.banner.half_horizontal_bottom.green": "Coupé, au second de sinople", - "item.banner.half_horizontal_bottom.lightBlue": "Coupé, au second d'azur de Bavière", + "item.banner.half_horizontal_bottom.lightBlue": "Coupé, au second bleu clair", "item.banner.half_horizontal_bottom.lime": "Coupé, au second de sinople clair", "item.banner.half_horizontal_bottom.magenta": "Coupé, au second de pourpre", "item.banner.half_horizontal_bottom.orange": "Coupé, au second d'orangé", @@ -18580,7 +17713,7 @@ export const langs: Langs = { "item.banner.half_vertical.cyan": "Parti, au premier de cyan", "item.banner.half_vertical.gray": "Parti, au premier d'acier", "item.banner.half_vertical.green": "Parti, au premier de sinople", - "item.banner.half_vertical.lightBlue": "Parti, au premier d'azur de Bavière", + "item.banner.half_vertical.lightBlue": "Parti, au premier bleu clair", "item.banner.half_vertical.lime": "Parti, au premier de sinople clair", "item.banner.half_vertical.magenta": "Parti, au premier de pourpre", "item.banner.half_vertical.orange": "Parti, au premier d'orangé", @@ -18596,7 +17729,7 @@ export const langs: Langs = { "item.banner.half_vertical_right.cyan": "Parti, au second de cyan", "item.banner.half_vertical_right.gray": "Parti, au second d'acier", "item.banner.half_vertical_right.green": "Parti, au second de sinople", - "item.banner.half_vertical_right.lightBlue": "Parti, au second d'azur de Bavière", + "item.banner.half_vertical_right.lightBlue": "Parti, au second bleu clair", "item.banner.half_vertical_right.lime": "Parti, au second de sinople clair", "item.banner.half_vertical_right.magenta": "Parti, au second de pourpre", "item.banner.half_vertical_right.orange": "Parti, au second d'orangé", @@ -18606,7 +17739,7 @@ export const langs: Langs = { "item.banner.half_vertical_right.silver": "Parti, au second d'argent grisé", "item.banner.half_vertical_right.white": "Parti, au second d'argent", "item.banner.half_vertical_right.yellow": "Parti, au second d'or", - "item.banner.illager_captain.name": "Bannière sinistre", + "item.banner.illager_captain.name": "Bannière funeste", "item.banner.lightBlue.name": "Bannière bleu clair", "item.banner.lime.name": "Bannière vert clair", "item.banner.magenta.name": "Bannière magenta", @@ -18616,7 +17749,7 @@ export const langs: Langs = { "item.banner.mojang.cyan": "Symbole de cyan", "item.banner.mojang.gray": "Symbole d'acier", "item.banner.mojang.green": "Symbole de sinople", - "item.banner.mojang.lightBlue": "Symbole d'azur de Bavière", + "item.banner.mojang.lightBlue": "Symbole bleu clair", "item.banner.mojang.lime": "Symbole de sinople clair", "item.banner.mojang.magenta": "Symbole de pourpre", "item.banner.mojang.orange": "Symbole d'orangé", @@ -18633,7 +17766,7 @@ export const langs: Langs = { "item.banner.piglin.cyan": "Groin cyan", "item.banner.piglin.gray": "Groin gris", "item.banner.piglin.green": "Groin vert", - "item.banner.piglin.lightBlue": "Groin bleu ciel", + "item.banner.piglin.lightBlue": "Groin bleu clair", "item.banner.piglin.lime": "Groin vert clair", "item.banner.piglin.magenta": "Groin magenta", "item.banner.piglin.orange": "Groin orange", @@ -18652,7 +17785,7 @@ export const langs: Langs = { "item.banner.rhombus.cyan": "Losange de cyan", "item.banner.rhombus.gray": "Losange d'acier", "item.banner.rhombus.green": "Losange de sinople", - "item.banner.rhombus.lightBlue": "Losange d'azur de Bavière", + "item.banner.rhombus.lightBlue": "Losange bleu clair", "item.banner.rhombus.lime": "Losange de sinople clair", "item.banner.rhombus.magenta": "Losange de pourpre", "item.banner.rhombus.orange": "Losange d'orangé", @@ -18669,7 +17802,7 @@ export const langs: Langs = { "item.banner.skull.cyan": "Crâne de cyan", "item.banner.skull.gray": "Crâne d'acier", "item.banner.skull.green": "Crâne de sinople", - "item.banner.skull.lightBlue": "Crâne d'azur de Bavière", + "item.banner.skull.lightBlue": "Crâne bleu clair", "item.banner.skull.lime": "Crâne de sinople clair", "item.banner.skull.magenta": "Crâne de pourpre", "item.banner.skull.orange": "Crâne d'orangé", @@ -18685,7 +17818,7 @@ export const langs: Langs = { "item.banner.small_stripes.cyan": "Quatre pals de cyan", "item.banner.small_stripes.gray": "Quatre pals d'acier", "item.banner.small_stripes.green": "Quatre pals de sinople", - "item.banner.small_stripes.lightBlue": "Quatre pals d'azur de Bavière", + "item.banner.small_stripes.lightBlue": "Quatre pals bleu clair", "item.banner.small_stripes.lime": "Quatre pals de sinople clair", "item.banner.small_stripes.magenta": "Quatre pals de pourpre", "item.banner.small_stripes.orange": "Quatre pals d'orangé", @@ -18701,7 +17834,7 @@ export const langs: Langs = { "item.banner.square_bottom_left.cyan": "Canton de cyan en pointe à dextre", "item.banner.square_bottom_left.gray": "Canton d'acier en pointe à dextre", "item.banner.square_bottom_left.green": "Canton de sinople en pointe à dextre", - "item.banner.square_bottom_left.lightBlue": "Canton d'azur de Bavière en pointe à dextre", + "item.banner.square_bottom_left.lightBlue": "Canton bleu clair en pointe à dextre", "item.banner.square_bottom_left.lime": "Canton de sinople clair en pointe à dextre", "item.banner.square_bottom_left.magenta": "Canton de pourpre en pointe à dextre", "item.banner.square_bottom_left.orange": "Canton d'orangé en pointe à dextre", @@ -18717,7 +17850,7 @@ export const langs: Langs = { "item.banner.square_bottom_right.cyan": "Canton de cyan en pointe à sénestre", "item.banner.square_bottom_right.gray": "Canton d'acier en pointe à sénestre", "item.banner.square_bottom_right.green": "Canton de sinople en pointe à sénestre", - "item.banner.square_bottom_right.lightBlue": "Canton d'azur de Bavière en pointe à sénestre", + "item.banner.square_bottom_right.lightBlue": "Canton bleu clair en pointe à sénestre", "item.banner.square_bottom_right.lime": "Canton de sinople clair en pointe à sénestre", "item.banner.square_bottom_right.magenta": "Canton de pourpre en pointe à sénestre", "item.banner.square_bottom_right.orange": "Canton d'orangé en pointe à sénestre", @@ -18733,7 +17866,7 @@ export const langs: Langs = { "item.banner.square_top_left.cyan": "Canton de cyan en chef à dextre", "item.banner.square_top_left.gray": "Canton d'acier en chef à dextre", "item.banner.square_top_left.green": "Canton de sinople en chef à dextre", - "item.banner.square_top_left.lightBlue": "Canton d'azur de Bavière en chef à dextre", + "item.banner.square_top_left.lightBlue": "Canton bleu clair en chef à dextre", "item.banner.square_top_left.lime": "Canton de sinople clair en chef à dextre", "item.banner.square_top_left.magenta": "Canton de pourpre en chef à dextre", "item.banner.square_top_left.orange": "Canton d'orangé en chef à dextre", @@ -18749,7 +17882,7 @@ export const langs: Langs = { "item.banner.square_top_right.cyan": "Canton de cyan en chef à sénestre", "item.banner.square_top_right.gray": "Canton d'acier en chef à sénestre", "item.banner.square_top_right.green": "Canton de sinople en chef à sénestre", - "item.banner.square_top_right.lightBlue": "Canton d'azur de Bavière en chef à sénestre", + "item.banner.square_top_right.lightBlue": "Canton bleu clair en chef à sénestre", "item.banner.square_top_right.lime": "Canton de sinople clair en chef à sénestre", "item.banner.square_top_right.magenta": "Canton de pourpre en chef à sénestre", "item.banner.square_top_right.orange": "Canton d'orangé en chef à sénestre", @@ -18765,7 +17898,7 @@ export const langs: Langs = { "item.banner.straight_cross.cyan": "Croix de cyan", "item.banner.straight_cross.gray": "Croix d'acier", "item.banner.straight_cross.green": "Croix de sinople", - "item.banner.straight_cross.lightBlue": "Croix d'azur de Bavière", + "item.banner.straight_cross.lightBlue": "Croix bleu clair", "item.banner.straight_cross.lime": "Croix de sinople clair", "item.banner.straight_cross.magenta": "Croix de pourpre", "item.banner.straight_cross.orange": "Croix d'orangé", @@ -18781,7 +17914,7 @@ export const langs: Langs = { "item.banner.stripe_bottom.cyan": "Fasce de cyan en pointe", "item.banner.stripe_bottom.gray": "Fasce d'acier en pointe", "item.banner.stripe_bottom.green": "Fasce de sinople en pointe", - "item.banner.stripe_bottom.lightBlue": "Fasce d'azur de Bavière en pointe", + "item.banner.stripe_bottom.lightBlue": "Fasce bleu clair en pointe", "item.banner.stripe_bottom.lime": "Fasce de sinople clair en pointe", "item.banner.stripe_bottom.magenta": "Fasce de pourpre en pointe", "item.banner.stripe_bottom.orange": "Fasce d'orangé en pointe", @@ -18797,7 +17930,7 @@ export const langs: Langs = { "item.banner.stripe_center.cyan": "Pal de cyan", "item.banner.stripe_center.gray": "Pal d'acier", "item.banner.stripe_center.green": "Pal de sinople", - "item.banner.stripe_center.lightBlue": "Pal d'azur de Bavière", + "item.banner.stripe_center.lightBlue": "Pal bleu clair", "item.banner.stripe_center.lime": "Pal de sinople clair", "item.banner.stripe_center.magenta": "Pal de pourpre", "item.banner.stripe_center.orange": "Pal d'orangé", @@ -18813,7 +17946,7 @@ export const langs: Langs = { "item.banner.stripe_downleft.cyan": "Barre de cyan à sénestre", "item.banner.stripe_downleft.gray": "Barre d'acier à sénestre", "item.banner.stripe_downleft.green": "Barre de sinople à sénestre", - "item.banner.stripe_downleft.lightBlue": "Barre d'azur de Bavière à sénestre", + "item.banner.stripe_downleft.lightBlue": "Barre bleu clair à sénestre", "item.banner.stripe_downleft.lime": "Barre de sinople clair à sénestre", "item.banner.stripe_downleft.magenta": "Barre de pourpre à sénestre", "item.banner.stripe_downleft.orange": "Barre d'orangé à sénestre", @@ -18829,7 +17962,7 @@ export const langs: Langs = { "item.banner.stripe_downright.cyan": "Bande de cyan", "item.banner.stripe_downright.gray": "Bande d'acier", "item.banner.stripe_downright.green": "Bande de sinople", - "item.banner.stripe_downright.lightBlue": "Bande d'azur de Bavière", + "item.banner.stripe_downright.lightBlue": "Bande bleu clair", "item.banner.stripe_downright.lime": "Bande de sinople clair", "item.banner.stripe_downright.magenta": "Bande de pourpre", "item.banner.stripe_downright.orange": "Bande d'orangé", @@ -18845,7 +17978,7 @@ export const langs: Langs = { "item.banner.stripe_left.cyan": "Pal de cyan à dextre", "item.banner.stripe_left.gray": "Pal d'acier à dextre", "item.banner.stripe_left.green": "Pal de sinople à dextre", - "item.banner.stripe_left.lightBlue": "Pal d'azur de Bavière à dextre", + "item.banner.stripe_left.lightBlue": "Pal bleu clair à dextre", "item.banner.stripe_left.lime": "Pal de sinople clair à dextre", "item.banner.stripe_left.magenta": "Pal de pourpre à dextre", "item.banner.stripe_left.orange": "Pal d'orangé à dextre", @@ -18861,7 +17994,7 @@ export const langs: Langs = { "item.banner.stripe_middle.cyan": "Fasce de cyan", "item.banner.stripe_middle.gray": "Fasce d'acier", "item.banner.stripe_middle.green": "Fasce de sinople", - "item.banner.stripe_middle.lightBlue": "Fasce d'azur de Bavière", + "item.banner.stripe_middle.lightBlue": "Fasce bleu clair", "item.banner.stripe_middle.lime": "Fasce de sinople clair", "item.banner.stripe_middle.magenta": "Fasce de pourpre", "item.banner.stripe_middle.orange": "Fasce d'orangé", @@ -18877,7 +18010,7 @@ export const langs: Langs = { "item.banner.stripe_right.cyan": "Pal de cyan à sénestre", "item.banner.stripe_right.gray": "Pal d'acier à sénestre", "item.banner.stripe_right.green": "Pal de sinople à sénestre", - "item.banner.stripe_right.lightBlue": "Pal d'azur de Bavière à sénestre", + "item.banner.stripe_right.lightBlue": "Pal bleu clair à sénestre", "item.banner.stripe_right.lime": "Pal de sinople clair à sénestre", "item.banner.stripe_right.magenta": "Pal de pourpre à sénestre", "item.banner.stripe_right.orange": "Pal d'orangé à sénestre", @@ -18893,7 +18026,7 @@ export const langs: Langs = { "item.banner.stripe_top.cyan": "Fasce de cyan en chef", "item.banner.stripe_top.gray": "Fasce d'acier en chef", "item.banner.stripe_top.green": "Fasce de sinople en chef", - "item.banner.stripe_top.lightBlue": "Fasce d'azur de Bavière en chef", + "item.banner.stripe_top.lightBlue": "Fasce bleu clair en chef", "item.banner.stripe_top.lime": "Fasce de sinople clair en chef", "item.banner.stripe_top.magenta": "Fasce de pourpre en chef", "item.banner.stripe_top.orange": "Fasce d'orangé en chef", @@ -18909,7 +18042,7 @@ export const langs: Langs = { "item.banner.triangle_bottom.cyan": "Mantelé de cyan", "item.banner.triangle_bottom.gray": "Mantelé d'acier", "item.banner.triangle_bottom.green": "Mantelé de sinople", - "item.banner.triangle_bottom.lightBlue": "Mantelé d'azur de Bavière", + "item.banner.triangle_bottom.lightBlue": "Mantelé bleu clair", "item.banner.triangle_bottom.lime": "Mantelé de sinople clair", "item.banner.triangle_bottom.magenta": "Mantelé de pourpre", "item.banner.triangle_bottom.orange": "Mantelé d'orangé", @@ -18925,7 +18058,7 @@ export const langs: Langs = { "item.banner.triangle_top.cyan": "Mantelé renversé de cyan", "item.banner.triangle_top.gray": "Mantelé renversé d'acier", "item.banner.triangle_top.green": "Mantelé renversé de sinople", - "item.banner.triangle_top.lightBlue": "Mantelé renversé d'azur de Bavière", + "item.banner.triangle_top.lightBlue": "Mantelé renversé bleu clair", "item.banner.triangle_top.lime": "Mantelé renversé de sinople clair", "item.banner.triangle_top.magenta": "Mantelé renversé de pourpre", "item.banner.triangle_top.orange": "Mantelé renversé d'orangé", @@ -18941,7 +18074,7 @@ export const langs: Langs = { "item.banner.triangles_bottom.cyan": "Émanchures de cyan en pointe", "item.banner.triangles_bottom.gray": "Émanchures d'acier en pointe", "item.banner.triangles_bottom.green": "Émanchures de sinople en pointe", - "item.banner.triangles_bottom.lightBlue": "Émanchures d'azur de Bavière en pointe", + "item.banner.triangles_bottom.lightBlue": "Émanchures bleu clair en pointe", "item.banner.triangles_bottom.lime": "Émanchures de sinople clair en pointe", "item.banner.triangles_bottom.magenta": "Émanchures de pourpre en pointe", "item.banner.triangles_bottom.orange": "Émanchures d'orangé en pointe", @@ -18957,7 +18090,7 @@ export const langs: Langs = { "item.banner.triangles_top.cyan": "Émanchures de cyan en chef", "item.banner.triangles_top.gray": "Émanchures d'acier en chef", "item.banner.triangles_top.green": "Émanchures de sinople en chef", - "item.banner.triangles_top.lightBlue": "Émanchures d'azur de Bavière en chef", + "item.banner.triangles_top.lightBlue": "Émanchures bleu clair en chef", "item.banner.triangles_top.lime": "Émanchures de sinople clair en chef", "item.banner.triangles_top.magenta": "Émanchures de pourpre en chef", "item.banner.triangles_top.orange": "Émanchures d'orangé en chef", @@ -18982,7 +18115,7 @@ export const langs: Langs = { "item.bed.pink.name": "Lit rose", "item.bed.lime.name": "Lit vert clair", "item.bed.yellow.name": "Lit jaune", - "item.bed.lightBlue.name": "Lit bleu ciel", + "item.bed.lightBlue.name": "Lit bleu clair", "item.bed.magenta.name": "Lit magenta", "item.bed.orange.name": "Lit orange", "item.bed.white.name": "Lit blanc", @@ -18996,7 +18129,7 @@ export const langs: Langs = { "item.boat.oak.name": "Bateau en chêne", "item.boat.spruce.name": "Bateau en sapin", "item.boat.birch.name": "Bateau en bouleau", - "item.boat.jungle.name": "Bateau en bois tropical", + "item.boat.jungle.name": "Bateau en acajou", "item.boat.acacia.name": "Bateau en acacia", "item.boat.big_oak.name": "Bateau en chêne noir", "item.bone.name": "Os", @@ -19015,12 +18148,12 @@ export const langs: Langs = { "item.bucket.name": "Seau", "item.bucketLava.name": "Seau de lave", "item.bucketWater.name": "Seau d'eau", - "item.bucketFish.name": "Seau de morues", - "item.bucketSalmon.name": "Seau de saumons", - "item.bucketTropical.name": "Seau de poissons tropicaux", - "item.bucketPuffer.name": "Seau de poissons-globes", + "item.bucketFish.name": "Morue dans un seau", + "item.bucketSalmon.name": "Saumon dans un seau", + "item.bucketTropical.name": "Poisson tropical dans un seau", + "item.bucketPuffer.name": "Poisson-globe dans un seau", "item.bucketCustomFish.name": "Seau de ", - "item.bucketAxolotl.name": "Seau d’axolotl", + "item.bucketAxolotl.name": "Axolotl dans un seau", "item.tropicalColorWhite.name": "Blanc", "item.tropicalColorOrange.name": "Orange", "item.tropicalColorMagenta.name": "Magenta", @@ -19036,7 +18169,7 @@ export const langs: Langs = { "item.tropicalColorBrown.name": "Marron", "item.tropicalColorGreen.name": "Vert", "item.tropicalColorRed.name": "Rouge", - "item.tropicalBodyKobSingle.name": "Kob %1$s", + "item.tropicalBodyKobSingle.name": "Téraglin %1$s", "item.tropicalBodySunstreakSingle.name": "Héliorai %1$s", "item.tropicalBodySnooperSingle.name": "Fouineur %1$s", "item.tropicalBodyDasherSingle.name": "Fonceur %1$s", @@ -19048,7 +18181,7 @@ export const langs: Langs = { "item.tropicalBodyBlockfishSingle.name": "Cubécaille %1$s", "item.tropicalBodyBettySingle.name": "Betty %1$s", "item.tropicalBodyClayfishSingle.name": "Argilécaille %1$s", - "item.tropicalBodyKobMulti.name": "Kob %1$s-%2$s", + "item.tropicalBodyKobMulti.name": "Téraglin %1$s-%2$s", "item.tropicalBodySunstreakMulti.name": "Héliorai %1$s-%2$s", "item.tropicalBodySnooperMulti.name": "Fouineur %1$s-%2$s", "item.tropicalBodyDasherMulti.name": "Fonceur %1$s-%2$s", @@ -19066,18 +18199,18 @@ export const langs: Langs = { "item.tropicalSchoolButterflyFish.name": "Poisson-papillon", "item.tropicalSchoolCichlid.name": "Cichlidé", "item.tropicalSchoolClownfish.name": "Poisson-clown", - "item.tropicalSchoolCottonCandyBetta.name": "Combattant", - "item.tropicalSchoolDottyback.name": "Pseudochromis", - "item.tropicalSchoolEmperorRedSnapper.name": "Vivaneau empereur rouge", - "item.tropicalSchoolGoatfish.name": "Rouget", + "item.tropicalSchoolCottonCandyBetta.name": "Combattant barbe à papa", + "item.tropicalSchoolDottyback.name": "Poisson vanille-fraise", + "item.tropicalSchoolEmperorRedSnapper.name": "Vivaneau bourgeois", + "item.tropicalSchoolGoatfish.name": "Capucin jaune", "item.tropicalSchoolMoorishIdol.name": "Zancle cornu", "item.tropicalSchoolOrnateButterfly.name": "Poisson-papillon orné", "item.tropicalSchoolParrotfish.name": "Poisson-perroquet", "item.tropicalSchoolQueenAngelFish.name": "Poisson-ange royal", - "item.tropicalSchoolRedCichlid.name": "Zebra rouge", - "item.tropicalSchoolRedLippedBlenny.name": "Blennie à lèvre rouge", - "item.tropicalSchoolRedSnapper.name": "Vivaneau", - "item.tropicalSchoolThreadfin.name": "Alectis", + "item.tropicalSchoolRedCichlid.name": "Cichlidé rouge", + "item.tropicalSchoolRedLippedBlenny.name": "Blennie à lèvres rouges", + "item.tropicalSchoolRedSnapper.name": "Vivaneau rouge", + "item.tropicalSchoolThreadfin.name": "Cordonnier bossu", "item.tropicalSchoolTomatoClown.name": "Poisson-clown rouge", "item.tropicalSchoolTriggerfish.name": "Baliste", "item.tropicalSchoolYellowTang.name": "Chirurgien jaune", @@ -19111,7 +18244,7 @@ export const langs: Langs = { "item.chorus_fruit_popped.name": "Chorus éclaté", "item.cooked_beef.name": "Steak", "item.cooked_chicken.name": "Poulet rôti", - "item.cooked_porkchop.name": "Viande de porc cuite", + "item.cooked_porkchop.name": "Côtelette de porc cuite", "item.chicken.name": "Poulet cru", "item.clay_ball.name": "Boule d’argile", "item.clock.name": "Montre", @@ -19128,7 +18261,7 @@ export const langs: Langs = { "item.birch_door.name": "Porte en bouleau", "item.dark_oak_door.name": "Porte en chêne noir", "item.iron_door.name": "Porte en fer", - "item.jungle_door.name": "Porte en bois tropical", + "item.jungle_door.name": "Porte acajou", "item.wooden_door.name": "Porte en chêne", "item.spruce_door.name": "Porte en sapin", "item.crimson_door.name": "Porte carmin", @@ -19136,25 +18269,25 @@ export const langs: Langs = { "item.dragon_breath.name": "Souffle de dragon", "item.dyed": "Teint", "item.dye.black.name": "Poche d'encre", - "item.dye.black_new.name": "Colorant noir", + "item.dye.black_new.name": "Teinture noire", "item.dye.blue.name": "Lapis-lazuli", - "item.dye.blue_new.name": "Colorant bleu", + "item.dye.blue_new.name": "Teinture bleue", "item.dye.brown.name": "Fèves de cacao", - "item.dye.brown_new.name": "Colorant marron", - "item.dye.cyan.name": "Colorant bleu cyan", - "item.dye.gray.name": "Colorant gris", - "item.dye.green.name": "Colorant vert", - "item.dye.lightBlue.name": "Colorant bleu ciel", - "item.dye.lime.name": "Colorant vert clair", - "item.dye.magenta.name": "Colorant magenta", - "item.dye.orange.name": "Colorant orange", - "item.dye.pink.name": "Colorant rose", - "item.dye.purple.name": "Colorant violet", - "item.dye.red.name": "Colorant rouge", - "item.dye.silver.name": "Colorant gris clair", + "item.dye.brown_new.name": "Teinture marron", + "item.dye.cyan.name": "Teinture bleu cyan", + "item.dye.gray.name": "Teinture grise", + "item.dye.green.name": "Teinture verte", + "item.dye.lightBlue.name": "Teinture bleu ciel", + "item.dye.lime.name": "Teinture vert clair", + "item.dye.magenta.name": "Teinture magenta", + "item.dye.orange.name": "Teinture orange", + "item.dye.pink.name": "Teinture rose", + "item.dye.purple.name": "Teinture violette", + "item.dye.red.name": "Teinture rouge", + "item.dye.silver.name": "Teinture gris clair", "item.dye.white.name": "Poudre d'os", - "item.dye.white_new.name": "Colorant blanc", - "item.dye.yellow.name": "Colorant jaune", + "item.dye.white_new.name": "Teinture blanche", + "item.dye.yellow.name": "Teinture jaune", "item.glow_ink_sac.name": "Poche d'encre luisante", "item.glow_frame.name": "Cadre luisant", "item.egg.name": "Œuf", @@ -19163,15 +18296,15 @@ export const langs: Langs = { "item.emptyMap.name": "Carte vide", "item.emptyLocatorMap.name": "Carte de localisation vide", "item.enchanted_book.name": "Livre enchanté", - "item.end_crystal.name": "Cristal de l'Ender", - "tile.end_rod.name": "Barre de l'Ender", - "item.ender_eye.name": "Œil de l'Ender", - "item.ender_pearl.name": "Perle de l'Ender", + "item.end_crystal.name": "Cristal de l'End", + "tile.end_rod.name": "Barre de l'End", + "item.ender_eye.name": "Œil de l'End", + "item.ender_pearl.name": "Perle de l'End", "item.experience_bottle.name": "Fiole d'expérience", - "item.exposed_copper_door.name": "Porte en cuivre peu oxydé", + "item.exposed_copper_door.name": "Porte en cuivre exposé", "item.feather.name": "Plume", "item.fermented_spider_eye.name": "Œil d'araignée fermenté", - "item.fireball.name": "Salve de feu", + "item.fireball.name": "Charge de feu", "item.fireworks.flight": "Durée de vol :", "item.fireworks.name": "Fusée de feu d'artifice", "item.fireworksCharge.black": "Noir", @@ -19183,7 +18316,7 @@ export const langs: Langs = { "item.fireworksCharge.flicker": "Scintillement", "item.fireworksCharge.gray": "Gris", "item.fireworksCharge.green": "Vert", - "item.fireworksCharge.lightBlue": "Bleu ciel", + "item.fireworksCharge.lightBlue": "Bleu clair", "item.fireworksCharge.lime": "Vert clair", "item.fireworksCharge.magenta": "Magenta", "item.fireworksCharge.name": "Étoile de feu d'artifice", @@ -19192,7 +18325,7 @@ export const langs: Langs = { "item.fireworksCharge.purple": "Violet", "item.fireworksCharge.red": "Rouge", "item.fireworksCharge.silver": "Gris clair", - "item.fireworksCharge.trail": "Traînée", + "item.fireworksCharge.trail": "Traînées", "item.fireworksCharge.type": "Forme inconnue", "item.fireworksCharge.type.0": "Petite boule", "item.fireworksCharge.type.1": "Grande boule", @@ -19210,7 +18343,7 @@ export const langs: Langs = { "item.salmon.name": "Saumon cru", "item.fishing_rod.name": "Canne à pêche", "item.flint.name": "Silex", - "item.flint_and_steel.name": "Briquet à silex", + "item.flint_and_steel.name": "Briquet", "item.flower_pot.name": "Pot de fleurs", "item.frame.name": "Cadre", "item.ghast_tear.name": "Larme de ghast", @@ -19232,16 +18365,17 @@ export const langs: Langs = { "item.iron_hoe.name": "Houe en fer", "item.stone_hoe.name": "Houe en pierre", "item.wooden_hoe.name": "Houe en bois", - "item.honey_bottle.name": "Pot de miel", + "item.honey_bottle.name": "Fiole de miel", "item.honeycomb.name": "Rayon de miel", - "item.horsearmordiamond.name": "Caparaçon en diamant", - "item.horsearmorgold.name": "Caparaçon en or", - "item.horsearmoriron.name": "Caparaçon en fer", - "item.horsearmorleather.name": "Caparaçon en cuir", + "item.horsearmordiamond.name": "Armure pour cheval en diamant", + "item.horsearmorgold.name": "Armure pour cheval en or", + "item.horsearmoriron.name": "Armure pour cheval en fer", + "item.copper_horse_armor.name": "Armure pour cheval en cuivre", + "item.horsearmorleather.name": "Armure pour cheval en cuir", "item.gold_ingot.name": "Lingot d'or", "item.iron_ingot.name": "Lingot de fer", "item.netherite_ingot.name": "Lingot de Netherite", - "item.netherite_scrap.name": "Fragment de Netherite", + "item.netherite_scrap.name": "Fragments de Netherite", "item.netherite_sword.name": "Épée en Netherite", "item.netherite_pickaxe.name": "Pioche en Netherite", "item.netherite_axe.name": "Hache en Netherite", @@ -19253,14 +18387,14 @@ export const langs: Langs = { "item.netherite_helmet.name": "Casque en Netherite", "item.lead.name": "Laisse", "item.leather.name": "Cuir", - "item.leaves.name": "Feuillage", + "item.leaves.name": "Feuilles", "item.chainmail_leggings.name": "Jambières en cotte de mailles", "item.leather_leggings.name": "Pantalon en cuir", "item.diamond_leggings.name": "Jambières en diamant", "item.golden_leggings.name": "Jambières en or", "item.iron_leggings.name": "Jambières en fer", "item.nautilus_shell.name": "Coquille de nautile", - "item.heart_of_the_sea.name": "Cœur de l'océan", + "item.heart_of_the_sea.name": "Cœur de la mer", "item.mace.name": "Masse d'armes", "item.magma_cream.name": "Crème de magma", "item.map.name": "Carte", @@ -19281,14 +18415,14 @@ export const langs: Langs = { "item.minecart.name": "Wagonnet", "item.chest_minecart.name": "Wagonnet de stockage", "item.command_block_minecart.name": "Wagonnet avec bloc de commande", - "item.minecartFurnace.name": "Wagonnet motorisé", + "item.minecartFurnace.name": "Wagonnet motorisé avec fourneau", "item.hopper_minecart.name": "Wagonnet à entonnoir", - "item.ominous_bottle.name": "Fiole sinistre", - "item.ominous_trial_key.name": "Clé des épreuves sinistre", + "item.ominous_bottle.name": "Fiole funeste", + "item.ominous_trial_key.name": "Clé des épreuves funestes", "item.oxidized_copper_door.name": "Porte en cuivre oxydé", "item.tnt_minecart.name": "Wagonnet à TNT", - "item.pitcher_pod.name": "Graine de sarracénie", - "item.torchflower_seeds.name": "Graines de rose de porcelaine", + "item.pitcher_pod.name": "Gousse de planturne", + "item.torchflower_seeds.name": "Graines de torche-fleur", "item.spawn_egg.entity.agent.name": "Œuf d'apparition d'agent", "item.spawn_egg.entity.armadillo.name": "Œuf d'apparition de tatou", "item.spawn_egg.entity.axolotl.name": "Œuf d'apparition d'axolotl", @@ -19301,7 +18435,7 @@ export const langs: Langs = { "item.spawn_egg.entity.cow.name": "Œuf d'apparition de vache", "item.spawn_egg.entity.cod.name": "Œuf d'apparition de morue", "item.spawn_egg.entity.creaking.name": "Œuf d'apparition de grinceur", - "item.spawn_egg.entity.ender_dragon.name": "Œuf d'apparition de dragon de l'Ender", + "item.spawn_egg.entity.ender_dragon.name": "Œuf d'apparition de dragon de l'End", "item.spawn_egg.entity.goat.name": "Œuf d'apparition de chèvre", "item.spawn_egg.entity.pufferfish.name": "Œuf d'apparition de poisson-globe", "item.spawn_egg.entity.salmon.name": "Œuf d'apparition de saumon", @@ -19315,8 +18449,8 @@ export const langs: Langs = { "item.spawn_egg.entity.villager_v2.name": "Œuf d'apparition de villageois", "item.spawn_egg.entity.vindicator.name": "Œuf d'apparition de vindicateur", "item.spawn_egg.entity.mooshroom.name": "Œuf d'apparition de mooshroom", - "item.spawn_egg.entity.squid.name": "Œuf d'apparition de pieuvre", - "item.spawn_egg.entity.glow_squid.name": "Œuf d'apparition de pieuvre luisante", + "item.spawn_egg.entity.squid.name": "Œuf d'apparition de poulpe", + "item.spawn_egg.entity.glow_squid.name": "Œuf d'apparition de poulpe lumineux", "item.spawn_egg.entity.rabbit.name": "Œuf d'apparition de lapin", "item.spawn_egg.entity.bat.name": "Œuf d'apparition de chauve-souris", "item.spawn_egg.entity.ravager.name": "Œuf d'apparition de ravageur", @@ -19330,32 +18464,32 @@ export const langs: Langs = { "item.spawn_egg.entity.polar_bear.name": "Œuf d'apparition d'ours polaire", "item.spawn_egg.entity.donkey.name": "Œuf d'apparition d'âne", "item.spawn_egg.entity.mule.name": "Œuf d'apparition de mule", - "item.spawn_egg.entity.skeleton_horse.name": "Œuf d'apparition de cheval squelette", - "item.spawn_egg.entity.zombie_horse.name": "Œuf d'apparition de cheval zombie", + "item.spawn_egg.entity.skeleton_horse.name": "Œuf d'apparition de cheval-squelette", + "item.spawn_egg.entity.zombie_horse.name": "Œuf d'apparition de cheval-zombie", "item.spawn_egg.entity.zombie.name": "Œuf d'apparition de zombie", - "item.spawn_egg.entity.drowned.name": "Œuf d'apparition de zombie noyé", + "item.spawn_egg.entity.drowned.name": "Œuf d'apparition Noyé", "item.spawn_egg.entity.creeper.name": "Œuf d'apparition de creeper", "item.spawn_egg.entity.skeleton.name": "Œuf d'apparition de squelette", "item.spawn_egg.entity.spider.name": "Œuf d'apparition d'araignée", "item.spawn_egg.entity.zombie_pigman.name": "Œuf d'apparition de piglin zombifié", "item.spawn_egg.entity.strider.name": "Œuf d'apparition d'arpenteur", "item.spawn_egg.entity.slime.name": "Œuf d'apparition de slime", - "item.spawn_egg.entity.enderman.name": "Œuf d'apparition d'enderman", + "item.spawn_egg.entity.enderman.name": "Œuf d'apparition d'Endman", "item.spawn_egg.entity.silverfish.name": "Œuf d'apparition de poisson d'argent", "item.spawn_egg.entity.cave_spider.name": "Œuf d'apparition d'araignée venimeuse", "item.spawn_egg.entity.ghast.name": "Œuf d'apparition de ghast", "item.spawn_egg.entity.magma_cube.name": "Œuf d'apparition de cube de magma", "item.spawn_egg.entity.blaze.name": "Œuf d'apparition de blaze", - "item.spawn_egg.entity.zombie_villager.name": "Œuf d'apparition de villageois zombie", - "item.spawn_egg.entity.zombie_villager_v2.name": "Œuf d'apparition de villageois zombie", + "item.spawn_egg.entity.zombie_villager.name": "Œuf d'apparition de zombie-villageois", + "item.spawn_egg.entity.zombie_villager_v2.name": "Œuf d'apparition de zombie-villageois", "item.spawn_egg.entity.witch.name": "Œuf d'apparition de sorcière", "item.spawn_egg.entity.stray.name": "Œuf d'apparition de vagabond", "item.spawn_egg.entity.husk.name": "Œuf d'apparition de zombie momifié", "item.spawn_egg.entity.wither_skeleton.name": "Œuf d'apparition de wither squelette", "item.spawn_egg.entity.guardian.name": "Œuf d'apparition de gardien", - "item.spawn_egg.entity.elder_guardian.name": "Œuf d'apparition d'ancien gardien", + "item.spawn_egg.entity.elder_guardian.name": "Œuf d'apparition de grand gardien", "item.spawn_egg.entity.shulker.name": "Œuf d'apparition de shulker", - "item.spawn_egg.entity.endermite.name": "Œuf d'apparition d'endermite", + "item.spawn_egg.entity.endermite.name": "Œuf d'apparition d'Endmite", "item.spawn_egg.entity.evocation_illager.name": "Œuf d'apparition d'évocateur", "item.spawn_egg.entity.vex.name": "Œuf d'apparition de vex", "item.spawn_egg.entity.turtle.name": "Œuf d’apparition de tortue", @@ -19363,16 +18497,16 @@ export const langs: Langs = { "item.spawn_egg.entity.phantom.name": "Œuf d'apparition de phantom", "item.spawn_egg.entity.panda.name": "Œuf d'apparition de panda", "item.spawn_egg.entity.pillager.name": "Œuf d'apparition de pillard", - "item.spawn_egg.entity.piglin_brute.name": "Œuf d'apparition de brute piglin", + "item.spawn_egg.entity.piglin_brute.name": "Œuf d'apparition de piglin barbare", "item.spawn_egg.entity.piglin.name": "Œuf d'apparition de piglin", "item.spawn_egg.entity.fox.name": "Œuf d'apparition de renard", "item.spawn_egg.entity.unknown.name": "Œuf d'apparition", - "item.spawn_egg.entity.wandering_trader.name": "Œuf d'apparition de marchand voyageur", + "item.spawn_egg.entity.wandering_trader.name": "Œuf d'apparition de marchand ambulant", "item.spawn_egg.entity.wither.name": "Œuf d'apparition de wither", "item.spawn_egg.entity.zoglin.name": "Œuf d'apparition de zoglin", "item.spawn_egg.entity.sniffer.name": "Œuf d'apparition de renifleur", "item.trident.name": "Trident", - "item.mushroom_stew.name": "Ragoût de champignons", + "item.mushroom_stew.name": "Soupe de champignons", "item.muttonCooked.name": "Mouton cuit", "item.muttonRaw.name": "Mouton cru", "item.name_tag.name": "Badge", @@ -19380,15 +18514,15 @@ export const langs: Langs = { "item.quartz.name": "Quartz du Nether", "item.nether_wart.name": "Verrue du Nether", "item.netherStar.name": "Étoile du Nether", - "item.painting.name": "Peinture", + "item.painting.name": "Tableau", "item.paper.name": "Papier", "item.diamond_pickaxe.name": "Pioche en diamant", "item.golden_pickaxe.name": "Pioche en or", "item.iron_pickaxe.name": "Pioche en fer", "item.stone_pickaxe.name": "Pioche en pierre", "item.wooden_pickaxe.name": "Pioche en bois", - "item.porkchop_cooked.name": "Viande de porc cuite", - "item.porkchop.name": "Viande de porc crue", + "item.porkchop_cooked.name": "Côtelette de porc cuite", + "item.porkchop.name": "Côtelette de porc crue", "item.portfolio.name": "Album photo", "item.potato.name": "Pomme de terre", "item.baked_potato.name": "Pomme de terre cuite", @@ -19420,10 +18554,12 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Creator", "item.record_creator_music_box.desc": "Lena Raine - Creator (boîte à musique)", "item.record_precipice.desc": "Aaron Cherof - Precipice", + "item.record_tears.desc": "Amos Roddy - Larmes", + "item.record_lava_chicken.desc": "Hyper potions - Poulet de lave", "item.redstone.name": "Poudre de redstone", "item.reeds.name": "Canne à sucre", - "item.kelp.name": "Varech", - "item.dried_kelp.name": "Varech séché", + "item.kelp.name": "Algue", + "item.dried_kelp.name": "Algue séchée", "item.rotten_flesh.name": "Chair putréfiée", "item.ruby.name": "Rubis", "item.saddle.name": "Selle", @@ -19437,14 +18573,14 @@ export const langs: Langs = { "item.iron_shovel.name": "Pelle en fer", "item.stone_shovel.name": "Pelle en pierre", "item.wooden_shovel.name": "Pelle en bois", - "item.sign.name": "Panneau en chêne", - "item.spruce_sign.name": "Panneau en sapin", - "item.birch_sign.name": "Panneau en bouleau", - "item.jungle_sign.name": "Panneau en bois tropical", - "item.acacia_sign.name": "Panneau en acacia", - "item.darkoak_sign.name": "Panneau en chêne noir", - "item.crimson_sign.name": "Panneau carmin", - "item.warped_sign.name": "Panneau biscornu", + "item.sign.name": "Pancarte en chêne", + "item.spruce_sign.name": "Pancarte en sapin", + "item.birch_sign.name": "Pancarte en bouleau", + "item.jungle_sign.name": "Pancarte en acajou", + "item.acacia_sign.name": "Pancarte en acacia", + "item.darkoak_sign.name": "Pancarte en chêne noir", + "item.crimson_sign.name": "Pancarte carmin", + "item.warped_sign.name": "Pancarte biscornue", "item.skull.char.name": "Tête de joueur", "item.skull.creeper.name": "Tête de creeper", "item.skull.dragon.name": "Tête de dragon", @@ -19467,40 +18603,40 @@ export const langs: Langs = { "item.wooden_sword.name": "Épée en bois", "item.unbreakable": "Incassable", "item.waxed_copper_door.name": "Porte en cuivre ciré", - "item.waxed_exposed_copper_door.name": "Porte en cuivre peu oxydé ciré", + "item.waxed_exposed_copper_door.name": "Porte en cuivre exposé ciré", "item.waxed_oxidized_copper_door.name": "Porte en cuivre oxydé ciré", - "item.waxed_weathered_copper_door.name": "Porte en cuivre semi-oxydé ciré", - "item.weathered_copper_door.name": "Porte en cuivre semi-oxydé", - "item.wind_charge.name": "Charge de vent", + "item.waxed_weathered_copper_door.name": "Porte en cuivre érodé ciré", + "item.weathered_copper_door.name": "Porte en cuivre érodé", + "item.wind_charge.name": "Souffle", "item.wheat.name": "Blé", - "item.wolf_armor.name": "Armure de loup", + "item.wolf_armor.name": "Armure pour loup", "item.writable_book.name": "Livre vierge", "item.written_book.name": "Livre édité", - "item.glowstone_dust.name": "Poudre de pierre lumineuse", + "item.glowstone_dust.name": "Pierre lumineuse en poudre", "item.shulker_shell.name": "Carapace de shulker", "item.totem.name": "Totem d'immortalité", - "item.trial_key.name": "Clé d'épreuve", + "item.trial_key.name": "Clé des épreuves", "item.turtle_helmet.name": "Carapace de tortue", "item.turtle_shell_piece.name": "Écaille de tortue", "item.phantom_membrane.name": "Membrane de Phantom", "item.sweet_berries.name": "Baies sucrées", "item.suspicious_stew.name": "Ragoût suspect", "item.field_masoned_banner_pattern.name": "Motif de bannière Champ maçonné", - "item.creeper_banner_pattern.name": "Motif de bannière Visage de creeper", + "item.creeper_banner_pattern.name": "Motif de bannière Tête de creeper", "item.flow_banner_pattern.name": "Motif de bannière Flux", "item.flower_banner_pattern.name": "Motif de bannière Fleur", "item.globe_banner_pattern.name": "Motif de bannière Globe", - "item.guster_banner_pattern.name": "Motif de bannière Tornade", + "item.guster_banner_pattern.name": "Motif de bannière Rafaleur", "item.piglin_banner_pattern.name": "Motif de bannière Groin", "item.skull_banner_pattern.name": "Motif de bannière Crâne", "item.mojang_banner_pattern.name": "Motif de bannière Chose", "item.bordure_indented_banner_pattern.name": "Motif de bannière Bordure cannelée", "item.banner_pattern.bricks": "Champ maçonné", - "item.banner_pattern.creeper": "Visage de creeper", + "item.banner_pattern.creeper": "Tête de creeper", "item.banner_pattern.flow": "Flux", - "item.banner_pattern.flower": "Fleur", + "item.banner_pattern.flower": "Visage de fleur", "item.banner_pattern.globe": "Globe", - "item.banner_pattern.guster": "Tornade", + "item.banner_pattern.guster": "Rafaleur", "item.banner_pattern.name": "Motif de bannière", "item.banner_pattern.piglin": "Groin", "item.banner_pattern.skull": "Crâne", @@ -19508,12 +18644,12 @@ export const langs: Langs = { "item.banner_pattern.vines": "Bordure cannelée", "item.bucketPowderSnow.name": "Seau de neige poudreuse", "item.pale_oak_door.name": "Porte en chêne pâle", - "item.pale_oak_hanging_sign.name": "Panneau suspendu en chêne pâle", - "item.pale_oak_sign.name": "Panneau en chêne pâle", + "item.pale_oak_hanging_sign.name": "Pancarte suspendue en chêne pâle", + "item.pale_oak_sign.name": "Pancarte en chêne pâle", "tile.pale_oak_sapling.name": "Pousse de chêne pâle", "tile.pale_oak_leaves.name": "Feuilles de chêne pâle", "item.boat.pale_oak.name": "Bateau en chêne pâle", - "item.chest_boat.pale_oak.name": "Bateau en chêne pâle avec coffre", + "item.chest_boat.pale_oak.name": "Bateau de stockage en chêne pâle", "item.resin_brick.name": "Brique de résine", "item.worldbuilder.block.failed": "Vous avez besoin de Créatif + Opérateur pour placer ce bloc", "item.shield.name": "Bouclier", @@ -19533,23 +18669,23 @@ export const langs: Langs = { "item.shield.brown.name": "Bouclier marron", "item.shield.black.name": "Bouclier noir", "item.shield.blue.name": "Bouclier bleu", - "item.bundle": "Lot", - "item.black_bundle": "Lot noir", - "item.white_bundle": "Lot blanc", - "item.red_bundle": "Lot rouge", - "item.orange_bundle": "Lot orange", - "item.yellow_bundle": "Lot jaune", - "item.green_bundle": "Lot vert", - "item.lime_bundle": "Lot vert clair", - "item.brown_bundle": "Lot marron", - "item.light_gray_bundle": "Lot gris clair", - "item.light_blue_bundle": "Lot bleu ciel", - "item.blue_bundle": "Lot bleu", - "item.gray_bundle": "Lot gris", - "item.pink_bundle": "Lot rose", - "item.magenta_bundle": "Lot magenta", - "item.purple_bundle": "Lot violet", - "item.cyan_bundle": "Lot cyan", + "item.bundle": "Sac", + "item.black_bundle": "Sac noir", + "item.white_bundle": "Sac blanc", + "item.red_bundle": "Sac rouge", + "item.orange_bundle": "Sac orange", + "item.yellow_bundle": "Sac jaune", + "item.green_bundle": "Sac vert", + "item.lime_bundle": "Sac vert clair", + "item.brown_bundle": "Sac marron", + "item.light_gray_bundle": "Sac gris clair", + "item.light_blue_bundle": "Lot bleu clair", + "item.blue_bundle": "Sac bleu", + "item.gray_bundle": "Sac gris", + "item.pink_bundle": "Sac rose", + "item.magenta_bundle": "Sac magenta", + "item.purple_bundle": "Sac violet", + "item.cyan_bundle": "Sac cyan", "item.bundle.empty": "Vide", "item.bundle.empty.description": "Peut contenir une pile d'objets mixtes", "item.bundle.full": "Plein", @@ -19565,14 +18701,14 @@ export const langs: Langs = { "item.minecraft.goat_horn.sound.7": "Rêve", "potion.absorption": "Absorption", "potion.blindness": "Cécité", - "potion.conduitPower": "Puissance de conduit", + "potion.conduitPower": "Force de conduit", "potion.confusion": "Nausée", "potion.damageBoost": "Force", "potion.damageBoost.name": "Potion de force", - "potion.damageBoost.splash.name": "Potion volatile de force", + "potion.damageBoost.splash.name": "Potion jetable de force", "potion.damageBoost.linger.name": "Potion persistante de force", - "potion.digSlowDown": "Fatigue de mineur", - "potion.digSpeed": "Hâte", + "potion.digSlowDown": "Fatigue de minage", + "potion.digSpeed": "Célérité", "potion.effects.whenDrank": "Si consommée :", "potion.empty": "Sans effet", "potion.emptyPotion.name": "Fiole d'eau", @@ -19580,54 +18716,54 @@ export const langs: Langs = { "potion.emptyPotion.linger.name": "Fiole d'eau persistante", "potion.fireResistance": "Résist. au feu", "potion.fireResistance.name": "Potion de résistance au feu", - "potion.fireResistance.splash.name": "Potion volatile de résistance au feu", + "potion.fireResistance.splash.name": "Potion jetable de résistance au feu", "potion.fireResistance.linger.name": "Potion persistante de résistance au feu", "potion.harm": "Dégâts instantanés", "potion.harm.name": "Potion de dégâts", - "potion.harm.splash.name": "Potion volatile de dégâts", + "potion.harm.splash.name": "Potion jetable de dégâts", "potion.harm.linger.name": "Potion persistante de dégâts", "potion.heal": "Soin instantané", "potion.heal.name": "Potion de soin", - "potion.heal.splash.name": "Potion volatile de soin", + "potion.heal.splash.name": "Potion jetable de soin", "potion.heal.linger.name": "Potion persistante de soin", "potion.healthBoost": "Bonus de vie", "potion.hunger": "Faim", "potion.infested.linger.name": "Potion persistante d'infestation", "potion.infested.name": "Potion d'infestation", "potion.infested.splash.name": "Potion jetable d'infestation", - "potion.infested": "Infesté", + "potion.infested": "Infestation", "potion.invisibility": "Invisibilité", "potion.invisibility.name": "Potion d'invisibilité", - "potion.invisibility.splash.name": "Potion volatile d'invisibilité", + "potion.invisibility.splash.name": "Potion jetable d'invisibilité", "potion.invisibility.linger.name": "Potion persistante d'invisibilité", "potion.jump": "Sauts améliorés", "potion.jump.name": "Potion de saut", - "potion.jump.splash.name": "Potion volatile de saut", + "potion.jump.splash.name": "Potion jetable de saut", "potion.jump.linger.name": "Potion persistante de saut", "potion.levitation": "Lévitation", "potion.moveSlowdown": "Lenteur", "potion.moveSlowdown.name": "Potion de lenteur", - "potion.moveSlowdown.splash.name": "Potion volatile de lenteur", + "potion.moveSlowdown.splash.name": "Potion jetable de lenteur", "potion.moveSlowdown.linger.name": "Potion persistante de lenteur", "potion.slowFalling": "Chute lente", "potion.slowFalling.name": "Potion de chute lente", - "potion.slowFalling.splash.name": "Potion volatile de chute lente", + "potion.slowFalling.splash.name": "Potion jetable de chute lente", "potion.slowFalling.linger.name": "Potion persistante de chute lente", - "potion.moveSpeed": "Vitesse", + "potion.moveSpeed": "Rapidité", "potion.moveSpeed.name": "Potion de rapidité", - "potion.moveSpeed.splash.name": "Potion volatile de rapidité", + "potion.moveSpeed.splash.name": "Potion jetable de rapidité", "potion.moveSpeed.linger.name": "Potion persistante de rapidité", "potion.nightVision": "Vision nocturne", "potion.nightVision.name": "Potion de vision nocturne", - "potion.nightVision.splash.name": "Potion volatile de vision nocturne", + "potion.nightVision.splash.name": "Potion jetable de vision nocturne", "potion.nightVision.linger.name": "Potion persistante de vision nocturne", - "potion.oozing.linger.name": "Potion persistante de suintement", - "potion.oozing.name": "Potion de suintement", - "potion.oozing.splash.name": "Potion jetable de suintement", - "potion.oozing": "Suintant", + "potion.oozing.linger.name": "Potion persistante de viscosité", + "potion.oozing.name": "Potion de viscosité", + "potion.oozing.splash.name": "Potion jetable de viscosité", + "potion.oozing": "Viscosité", "potion.poison": "Poison", "potion.poison.name": "Potion de poison", - "potion.poison.splash.name": "Potion volatile de poison", + "potion.poison.splash.name": "Potion jetable de poison", "potion.poison.linger.name": "Potion persistante de poison", "potion.potency.0": "", "potion.potency.1": "II", @@ -19649,39 +18785,39 @@ export const langs: Langs = { "potion.thick.linger.name": "Potion persistante épaisse", "potion.regeneration": "Régénération", "potion.regeneration.name": "Potion de régénération", - "potion.regeneration.splash.name": "Potion volatile de régénération", + "potion.regeneration.splash.name": "Potion jetable de régénération", "potion.regeneration.linger.name": "Potion persistante de régénération", "potion.resistance": "Résistance", "potion.saturation": "Saturation", "potion.turtleMaster": "Lenteur", "potion.turtleMaster2": "Résistance", "potion.turtleMaster.name": "Potion du Maître Tortue", - "potion.turtleMaster.splash.name": "Potion volatile du Maître Tortue", + "potion.turtleMaster.splash.name": "Potion jetable du Maître Tortue", "potion.turtleMaster.linger.name": "Potion persistante du Maître Tortue", "potion.waterBreathing": "Respiration aquatique", "potion.waterBreathing.name": "Potion de respiration aquatique", - "potion.waterBreathing.splash.name": "Potion volatile de respiration aquatique", + "potion.waterBreathing.splash.name": "Potion jetable de respiration aquatique", "potion.waterBreathing.linger.name": "Potion persistante de respiration aquatique", "potion.weakness": "Faiblesse", "potion.weakness.name": "Potion de faiblesse", - "potion.weakness.splash.name": "Potion volatile de faiblesse", + "potion.weakness.splash.name": "Potion jetable de faiblesse", "potion.weakness.linger.name": "Potion persistante de faiblesse", "potion.weaving.linger.name": "Potion persistante de tissage", "potion.weaving.name": "Potion de tissage", "potion.weaving.splash.name": "Potion jetable de tissage", "potion.weaving": "Tissage", - "potion.windCharged.linger.name": "Potion persistante de charge du vent", - "potion.windCharged.name": "Potion de charge du vent", - "potion.windCharged.splash.name": "Potion jetable de charge du vent", - "potion.windCharged": "Charge de vent", - "potion.wither": "Wither", + "potion.windCharged.linger.name": "Potion de souffle persistante", + "potion.windCharged.name": "Potion de souffle", + "potion.windCharged.splash.name": "Potion de souffle jetable", + "potion.windCharged": "Souffle", + "potion.wither": "Décomposition", "potion.wither.name": "Potion de flétrissure", - "potion.wither.splash.name": "Potion volatile de flétrissure", + "potion.wither.splash.name": "Potion jetable de flétrissure", "potion.wither.linger.name": "Potion persistante de flétrissure", "tile.sculk_sensor.name": "Capteur Sculk", "tile.sculk.name": "Sculk", "tile.sculk_vein.name": "Veine de Sculk", - "tile.sculk_catalyst.name": "Catalyseur Sculk", + "tile.sculk_catalyst.name": "Catalyseur de sculk", "tile.sculk_shrieker.name": "Hurleur Sculk", "tile.reinforced_deepslate.name": "Ardoise des abîmes renforcée", "entity.frog.name": "Grenouille", @@ -19694,38 +18830,38 @@ export const langs: Langs = { "item.spawn_egg.entity.frog.name": "Œuf d'apparition de grenouille", "item.spawn_egg.entity.tadpole.name": "Œuf d'apparition de têtard", "tile.frog_spawn.name": "Œufs de grenouille", - "tile.pearlescent_froglight.name": "Froglight nacré", - "tile.verdant_froglight.name": "Froglight verdoyant", - "tile.ochre_froglight.name": "Froglight ocre", + "tile.pearlescent_froglight.name": "Grelampe nacrée", + "tile.verdant_froglight.name": "Grelampe verdoyante", + "tile.ochre_froglight.name": "Grelampe ocrée", "tile.mud.name": "Boue", - "tile.packed_mud.name": "Boue compacte", - "tile.mud_bricks.name": "Briques de boue", - "tile.mud_brick_slab.name": "Dalle en briques de boue", - "tile.mud_brick_double_slab": "Double dalle en briques de boue", - "tile.mud_brick_stairs.name": "Escalier en briques de boue", - "tile.mud_brick_wall.name": "Muret en briques de boue", + "tile.packed_mud.name": "Terre crue", + "tile.mud_bricks.name": "Briques de terre crue", + "tile.mud_brick_slab.name": "Dalle de briques de terre crue", + "tile.mud_brick_double_slab": "Double dalle en briques de terre crue", + "tile.mud_brick_stairs.name": "Escalier en briques de terre crue", + "tile.mud_brick_wall.name": "Muret en briques de terre crue", "tile.mangrove_leaves.name": "Feuilles de palétuvier", - "tile.mangrove_propagule.name": "Propagule de mangrove", + "tile.mangrove_propagule.name": "Pousse de palétuvier", "tile.mangrove_roots.name": "Racines de palétuvier", "tile.muddy_mangrove_roots.name": "Racines de palétuvier boueuses", - "item.chest_boat.oak.name": "Bateau en chêne avec coffre", - "item.chest_boat.spruce.name": "Bateau en sapin avec coffre", - "item.chest_boat.birch.name": "Bateau en bouleau avec coffre", - "item.chest_boat.jungle.name": "Bateau en bois tropical avec coffre", - "item.chest_boat.acacia.name": "Bateau en acacia avec coffre", - "item.chest_boat.big_oak.name": "Bateau en chêne noir avec coffre", - "item.chest_boat.mangrove.name": "Bateau en palétuvier avec coffre", - "tile.mangrove_log.name": "Tronc de palétuvier", - "tile.stripped_mangrove_log.name": "Tronc de palétuvier écorcé", + "item.chest_boat.oak.name": "Bateau de stockage en chêne", + "item.chest_boat.spruce.name": "Bateau de stockage en sapin", + "item.chest_boat.birch.name": "Bateau de stockage en bouleau", + "item.chest_boat.jungle.name": "Bateau en acajou avec coffre", + "item.chest_boat.acacia.name": "Bateau de stockage en acacia", + "item.chest_boat.big_oak.name": "Bateau de stockage en chêne noir", + "item.chest_boat.mangrove.name": "Bateau de stockage en palétuvier", + "tile.mangrove_log.name": "Bûche de palétuvier", + "tile.stripped_mangrove_log.name": "Bûche de palétuvier écorcée", "tile.mangrove_planks.name": "Planches de palétuvier", "tile.mangrove_button.name": "Bouton en palétuvier", - "tile.mangrove_stairs.name": "Escaliers en palétuvier", + "tile.mangrove_stairs.name": "Escalier en palétuvier", "tile.mangrove_slab.name": "Dalle en palétuvier", "tile.mangrove_pressure_plate.name": "Plaque de pression en palétuvier", - "tile.mangrove_fence.name": "Clôture en palétuvier", - "tile.mangrove_fence_gate.name": "Portail en palétuvier", + "tile.mangrove_fence.name": "Barrière en palétuvier", + "tile.mangrove_fence_gate.name": "Portillon en palétuvier", "item.mangrove_door.name": "Porte en palétuvier", - "item.mangrove_sign.name": "Panneau en palétuvier", + "item.mangrove_sign.name": "Pancarte en palétuvier", "tile.mangrove_trapdoor.name": "Trappe en palétuvier", "tile.mangrove_wood.name": "Bois de palétuvier", "tile.stripped_mangrove_wood.name": "Bois de palétuvier écorcé", @@ -19735,18 +18871,18 @@ export const langs: Langs = { "item.disc_fragment.name": "Fragment de disque", "item.disc_fragment_5.desc": "Disque - 5", "item.record_5.desc": "Samuel Åberg - 5", - "entity.chest_boat.name": "Bateau avec coffre", - "entity.camel.name": "Chameau", - "entity.chest_raft.name": "Radeau avec coffre", - "item.acacia_hanging_sign.name": "Panneau suspendu en acacia", + "entity.chest_boat.name": "Bateau de stockage", + "entity.camel.name": "Dromadaire", + "entity.chest_raft.name": "Radeau de stockage", + "item.acacia_hanging_sign.name": "Pancarte suspendue en acacia", "item.angler_pottery_sherd.name": "Tesson de poterie Pêcheur", "item.archer_pottery_sherd.name": "Tesson de poterie Archer", "item.armor.upgrade": "Amélioration :", "item.arms_up_pottery_sherd.name": "Tesson de poterie Bras en l'air", "item.bamboo_door.name": "Porte en bambou", - "item.bamboo_hanging_sign.name": "Panneau suspendu en bambou", - "item.bamboo_sign.name": "Panneau en bambou", - "item.birch_hanging_sign.name": "Panneau suspendu en bouleau", + "item.bamboo_hanging_sign.name": "Pancarte suspendue en bambou", + "item.bamboo_sign.name": "Pancarte en bambou", + "item.birch_hanging_sign.name": "Pancarte suspendue en bouleau", "item.blade_pottery_sherd.name": "Tesson de poterie Lame", "item.boat.bamboo.name": "Radeau en bambou", "item.boat.cherry.name": "Bateau en cerisier", @@ -19754,25 +18890,25 @@ export const langs: Langs = { "item.brush.name": "Pinceau", "item.burn_pottery_sherd.name": "Tesson de poterie Flamme", "item.cherry_door.name": "Porte en cerisier", - "item.cherry_hanging_sign.name": "Panneau suspendu en cerisier", - "item.cherry_sign.name": "Panneau en cerisier", - "item.chest_boat.bamboo.name": "Radeau en bambou avec coffre", - "item.chest_boat.cherry.name": "Bateau en cerisier avec coffre", - "item.crimson_hanging_sign.name": "Panneau suspendu carmin", + "item.cherry_hanging_sign.name": "Pancarte suspendue en cerisier", + "item.cherry_sign.name": "Pancarte en cerisier", + "item.chest_boat.bamboo.name": "Radeau de stockage en bambou", + "item.chest_boat.cherry.name": "Bateau de stockage en cerisier", + "item.crimson_hanging_sign.name": "Pancarte suspendue carmin", "item.danger_pottery_sherd.name": "Tesson de poterie Danger", - "item.dark_oak_hanging_sign.name": "Panneau suspendu en chêne noir", + "item.dark_oak_hanging_sign.name": "Pancarte suspendue en chêne noir", "item.explorer_pottery_sherd.name": "Tesson de poterie Explorateur", "item.flow_pottery_sherd.name": "Tesson de poterie Flux", "item.friend_pottery_sherd.name": "Tesson de poterie Ami", - "item.guster_pottery_sherd.name": "Tesson de poterie Tornade", + "item.guster_pottery_sherd.name": "Tesson de poterie Rafaleur", "item.heart_pottery_sherd.name": "Tesson de poterie Cœur", "item.heartbreak_pottery_sherd.name": "Tesson de poterie Cœur brisé", "item.howl_pottery_sherd.name": "Tesson de poterie Hurlement", - "item.jungle_hanging_sign.name": "Panneau suspendu en bois tropical", - "item.mangrove_hanging_sign.name": "Panneau suspendu en palétuvier", + "item.jungle_hanging_sign.name": "Pancarte suspendue en acajou", + "item.mangrove_hanging_sign.name": "Pancarte suspendue en palétuvier", "item.miner_pottery_sherd.name": "Tesson de poterie Mineur", "item.mourner_pottery_sherd.name": "Tesson de poterie Deuil", - "item.oak_hanging_sign.name": "Panneau suspendu en chêne", + "item.oak_hanging_sign.name": "Pancarte suspendue en chêne", "item.plenty_pottery_sherd.name": "Tesson de poterie Abondance", "item.prize_pottery_sherd.name": "Tesson de poterie Prix", "item.scrape_pottery_sherd.name": "Tesson de poterie Éraflure", @@ -19807,28 +18943,28 @@ export const langs: Langs = { "item.flow_armor_trim_smithing_template.name": "Coupe d'armure Flux", "item.bolt_armor_trim_smithing_template.name": "Coupe d'armure Boulon", "item.snort_pottery_sherd.name": "Tesson de poterie Grognement", - "item.spawn_egg.entity.camel.name": "Œuf d'apparition de chameau", - "item.spruce_hanging_sign.name": "Panneau suspendu en sapin", - "item.warped_hanging_sign.name": "Panneau suspendu biscornu", + "item.spawn_egg.entity.camel.name": "Œuf d'apparition de dromadaire", + "item.spruce_hanging_sign.name": "Pancarte suspendue en sapin", + "item.warped_hanging_sign.name": "Pancarte suspendue biscornue", "tile.bamboo_block.name": "Bloc de bambou", "tile.bamboo_button.name": "Bouton en bambou", - "tile.bamboo_fence_gate.name": "Portail en bambou", - "tile.bamboo_fence.name": "Clôture en bambou", - "tile.bamboo_mosaic_slab.name": "Dalle en bambou mosaïque", - "tile.bamboo_mosaic_stairs.name": "Escaliers en bambou mosaïque", + "tile.bamboo_fence_gate.name": "Portillon en bambou", + "tile.bamboo_fence.name": "Barrière en bambou", + "tile.bamboo_mosaic_slab.name": "Dalle de mosaïque de bambou", + "tile.bamboo_mosaic_stairs.name": "Escalier en bambou mosaïque", "tile.bamboo_mosaic.name": "Mosaïque de bambou", "tile.bamboo_planks.name": "Planches de bambou", "tile.bamboo_pressure_plate.name": "Plaque de pression en bambou", "tile.bamboo_slab.name": "Dalle en bambou", - "tile.bamboo_stairs.name": "Escaliers en bambou", + "tile.bamboo_stairs.name": "Escalier en bambou", "tile.bamboo_trapdoor.name": "Trappe en bambou", "tile.calibrated_sculk_sensor.name": "Capteur Sculk calibré", "tile.cherry_button.name": "Bouton en cerisier", "tile.cherry_double_slab.name": "Double dalle en cerisier", - "tile.cherry_fence_gate.name": "Portail en cerisier", - "tile.cherry_fence.name": "Clôture en cerisier", + "tile.cherry_fence_gate.name": "Portillon en cerisier", + "tile.cherry_fence.name": "Barrière en cerisier", "tile.cherry_leaves.name": "Feuilles de cerisier", - "tile.cherry_log.name": "Tronc de cerisier", + "tile.cherry_log.name": "Bûche de cerisier", "tile.cherry_planks.name": "Planches de cerisier", "tile.cherry_pressure_plate.name": "Plaque de pression en cerisier", "tile.cherry_sapling.name": "Pousse de cerisier", @@ -19837,12 +18973,12 @@ export const langs: Langs = { "tile.cherry_trapdoor.name": "Trappe en cerisier", "tile.cherry_wood.name": "Bois de cerisier", "tile.chiseled_bookshelf.name": "Bibliothèque sculptée", - "tile.chiseled_tuff.name": "Tuf ciselé", + "tile.chiseled_tuff.name": "Tuf sculpté", "tile.chiseled_tuff_bricks.name": "Briques de tuf ciselé", - "tile.decorated_pot.name": "Pot décoré", + "tile.decorated_pot.name": "Vase décoré", "tile.pink_petals.name": "Pétales roses", "tile.stripped_bamboo_block.name": "Bloc de bambou écorcé", - "tile.stripped_cherry_log.name": "Tronc de cerisier écorcé", + "tile.stripped_cherry_log.name": "Bûche de cerisier écorcée", "tile.stripped_cherry_wood.name": "Bois de cerisier écorcé", "tile.suspicious_gravel.name": "Gravier suspect", "tile.suspicious_sand.name": "Sable suspect", @@ -19864,9 +19000,9 @@ export const langs: Langs = { "trim_pattern.wild.name": "Coupe d'armure Sauvage", "trim_pattern.bolt.name": "Coupe d'armure Boulon", "trim_pattern.flow.name": "Coupe d'armure Flux", - "tile.acaciaFence.name": "Clôture en acacia", - "tile.acacia_fence_gate.name": "Portail en acacia", - "tile.activator_rail.name": "Rail activateur", + "tile.acaciaFence.name": "Barrière en acacia", + "tile.acacia_fence_gate.name": "Portillon en acacia", + "tile.activator_rail.name": "Rails déclencheurs", "tile.allow.name": "Autoriser", "tile.air.name": "Air", "tile.unknown.name": "Inconnu", @@ -19878,7 +19014,7 @@ export const langs: Langs = { "tile.anvil.veryDamaged.name": "Enclume endommagée", "tile.barrier.name": "Barrière invisible", "tile.beacon.name": "Balise", - "tile.beacon.primary": "Pouvoir principal", + "tile.beacon.primary": "Pouvoir primaire", "tile.beacon.secondary": "Pouvoir secondaire", "tile.beacon.primary.pocket": "Principal", "tile.beacon.secondary.pocket": "Secondaire", @@ -19893,29 +19029,29 @@ export const langs: Langs = { "tile.bed.respawnSet": "Définition du point d'apparition", "tile.bed.tooFar": "Le lit est trop loin", "tile.bed.obstructed": "Le lit est obstrué", - "tile.bedrock.name": "Soubassement", + "tile.bedrock.name": "Bedrock", "tile.bell.name": "Cloche", "tile.camera.name": "Appareil photo", "tile.conduit.name": "Conduit", "tile.invisibleBedrock.name": "Bedrock invisible", "tile.beetroot.name": "Betterave", - "tile.big_dripleaf.name": "Grandes feuilles ruisselantes", - "tile.small_dripleaf_block.name": "Petites feuilles ruisselantes", + "tile.big_dripleaf.name": "Grandes foliogouttes", + "tile.small_dripleaf_block.name": "Petites foliogouttes", "tile.hanging_roots.name": "Racines suspendues", - "tile.dirt_with_roots.name": "Terre avec racines", - "tile.spore_blossom.name": "Fleur de spores", + "tile.dirt_with_roots.name": "Terre racineuse", + "tile.spore_blossom.name": "Fleur sporifère", "tile.azalea_leaves.name": "Feuilles d'azalée", - "tile.azalea_leaves_flowered.name": "Feuilles d’azalée en fleurs", + "tile.azalea_leaves_flowered.name": "Feuilles d’azalée fleurie", "tile.azalea.name": "Azalée", - "tile.flowering_azalea.name": "Azalée en fleurs", - "tile.cave_vines.name": "Lierre de caverne", - "tile.cave_vines_body_with_berries.name": "Lierre de caverne", - "tile.cave_vines_head_with_berries.name": "Lierre de caverne", - "item.glow_berries.name": "Baies luisantes", + "tile.flowering_azalea.name": "Azalée fleurie", + "tile.cave_vines.name": "Lianes des caverne", + "tile.cave_vines_body_with_berries.name": "Lianes des caverne", + "tile.cave_vines_head_with_berries.name": "Lianes des caverne", + "item.glow_berries.name": "Baies lumineuses", "tile.moss_block.name": "Bloc de mousse", "tile.moss_carpet.name": "Tapis de mousse", - "tile.birchFence.name": "Clôture en bouleau", - "tile.birch_fence_gate.name": "Portail en bouleau", + "tile.birchFence.name": "Barrière en bouleau", + "tile.birch_fence_gate.name": "Portillon en bouleau", "tile.blast_furnace.name": "Haut fourneau", "tile.bone_block.name": "Bloc d'os", "tile.coal_block.name": "Bloc de charbon", @@ -19930,19 +19066,19 @@ export const langs: Langs = { "tile.brown_mushroom.name": "Champignon brun", "tile.brown_mushroom_block.mushroom.name": "Champignon", "tile.brown_mushroom_block.stem.name": "Tige de champignon", - "tile.brown_mushroom_block.cap.name": "Bloc de champignons bruns", + "tile.brown_mushroom_block.cap.name": "Bloc de champignon brun", "tile.wooden_button.name": "Bouton en chêne", "tile.acacia_button.name": "Bouton en acacia", "tile.birch_button.name": "Bouton en bouleau", "tile.dark_oak_button.name": "Bouton en chêne noir", - "tile.jungle_button.name": "Bouton en bois tropical", + "tile.jungle_button.name": "Bouton en acajou", "tile.respawn_anchor.respawnSet": "Point d'apparition défini", "tile.respawn_anchor.notValid": "Votre ancre de réapparition n'avait plus de charges ou était obstruée.", "tile.spruce_button.name": "Bouton en sapin", "tile.stone_button.name": "Bouton en pierre", "tile.cactus.name": "Cactus", "tile.cake.name": "Gâteau", - "tile.dried_kelp_block.name": "Bloc de varech séché", + "tile.dried_kelp_block.name": "Bloc d’algue séchée", "tile.carrots.name": "Carottes", "tile.carved_pumpkin.name": "Citrouille sculptée", "tile.cauldron.name": "Chaudron", @@ -19950,17 +19086,17 @@ export const langs: Langs = { "tile.chalkboard.twoByOne.name": "Affiche", "tile.chalkboard.threeByTwo.name": "Tableau", "tile.chest.name": "Coffre", - "tile.ender_chest.name": "Coffre de l'Ender", - "tile.jigsaw.name": "Bloc casse-tête", - "tile.heavy_core.name": "Cœur lourd", + "tile.ender_chest.name": "Coffre de l'End", + "tile.jigsaw.name": "Bloc de puzzle", + "tile.heavy_core.name": "Noyau lourd", "tile.honey_block.name": "Bloc de miel", - "tile.honeycomb_block.name": "Bloc Rayon de miel", + "tile.honeycomb_block.name": "Bloc de rayon de miel", "tile.lodestone.name": "Magnétite", - "tile.nether_sprouts.name": "Pousses du Nether", + "tile.nether_sprouts.name": "Germes du Nether", "tile.crimson_stem.name": "Tige carmin", "tile.warped_stem.name": "Tige biscornue", - "tile.stripped_crimson_stem.name": "Tige carmin dépouillée", - "tile.stripped_warped_stem.name": "Tige biscornue dépouillée", + "tile.stripped_crimson_stem.name": "Tige carmin dénudée", + "tile.stripped_warped_stem.name": "Tige biscornue dénudée", "tile.crimson_hyphae.name": "Hyphes carmin", "tile.warped_hyphae.name": "Hyphes biscornues", "tile.stripped_crimson_hyphae.name": "Hyphes carmin dénudées", @@ -19971,16 +19107,16 @@ export const langs: Langs = { "tile.warped_door.name": "Porte biscornue", "tile.crimson_trapdoor.name": "Trappe carmin", "tile.warped_trapdoor.name": "Trappe biscornue", - "tile.crimson_standing_sign.name": "Panneau carmin", - "tile.warped_standing_sign.name": "Panneau biscornu", - "tile.crimson_wall_sign.name": "Panneau carmin", - "tile.warped_wall_sign.name": "Panneau biscornu", - "tile.crimson_stairs.name": "Escaliers carmin", - "tile.warped_stairs.name": "Escaliers biscornus", - "tile.crimson_fence.name": "Clôture carmin", - "tile.warped_fence.name": "Clôture biscornue", - "tile.crimson_fence_gate.name": "Portail carmin", - "tile.warped_fence_gate.name": "Portail biscornu", + "tile.crimson_standing_sign.name": "Pancarte carmin", + "tile.warped_standing_sign.name": "Pancarte biscornue", + "tile.crimson_wall_sign.name": "Pancarte carmin", + "tile.warped_wall_sign.name": "Pancarte biscornue", + "tile.crimson_stairs.name": "Escalier carmin", + "tile.warped_stairs.name": "Escalier biscornu", + "tile.crimson_fence.name": "Barrière carmin", + "tile.warped_fence.name": "Barrière biscornue", + "tile.crimson_fence_gate.name": "Portillon carmin", + "tile.warped_fence_gate.name": "Portillon biscornu", "tile.crimson_button.name": "Bouton carmin", "tile.warped_button.name": "Bouton biscornu", "tile.crimson_pressure_plate.name": "Plaque de pression carmin", @@ -19995,28 +19131,28 @@ export const langs: Langs = { "tile.basalt.name": "Basalte", "tile.polished_basalt.name": "Basalte poli", "tile.blackstone.name": "Roche noire", - "tile.polished_blackstone_bricks.name": "Briques de roche noire taillée", - "tile.cracked_polished_blackstone_bricks.name": "Roche noire taillée craquelée", - "tile.polished_blackstone_brick_stairs.name": "Escaliers en briques de roche noire taillée", - "tile.blackstone_stairs.name": "Escaliers de roche noire", + "tile.polished_blackstone_bricks.name": "Roche noire taillée polie", + "tile.cracked_polished_blackstone_bricks.name": "Roche noire polie craquelée", + "tile.polished_blackstone_brick_stairs.name": "Escalier en roche noire taillée polie", + "tile.blackstone_stairs.name": "Escalier en roche noire", "tile.blackstone_wall.name": "Muret de roche noire", - "tile.polished_blackstone_brick_wall.name": "Muret en briques de roche noire taillée", - "tile.chiseled_polished_blackstone.name": "Roche noire sculptée", + "tile.polished_blackstone_brick_wall.name": "Muret de roche noire taillée polie", + "tile.chiseled_polished_blackstone.name": "Roche noire polie ciselée", "tile.gilded_blackstone.name": "Roche noire dorée", "tile.blackstone_slab.name": "Dalle de roche noire", - "tile.polished_blackstone_brick_slab.name": "Dalle en briques de roche noire taillée", + "tile.polished_blackstone_brick_slab.name": "Dalle de roche noire taillée polie", "tile.chain.name": "Chaîne", "tile.soul_soil.name": "Terre des âmes", "tile.soul_fire.name": "Feu des âmes", - "tile.polished_blackstone.name": "Roche noire taillée", - "tile.polished_blackstone_stairs.name": "Escaliers en roche noire taillée", - "tile.polished_blackstone_slab.name": "Dalle en roche noire taillée", - "tile.polished_blackstone_pressure_plate.name": "Plaque de pression en roche noire taillée", - "tile.polished_blackstone_button.name": "Bouton en roche noire taillée", - "tile.polished_blackstone_wall.name": "Muret en roche noire taillée", + "tile.polished_blackstone.name": "Roche noire polie", + "tile.polished_blackstone_stairs.name": "Escalier en roche noire polie", + "tile.polished_blackstone_slab.name": "Dalle de roche noire taillée polie", + "tile.polished_blackstone_pressure_plate.name": "Plaque de pression en roche noire polie", + "tile.polished_blackstone_button.name": "Bouton en roche noire polie", + "tile.polished_blackstone_wall.name": "Muret de roche noire polie", "tile.polished_tuff.name": "Tuf poli", - "tile.polished_tuff_slab.name": "Dalle en tuf poli", - "tile.polished_tuff_stairs.name": "Escaliers en tuf poli", + "tile.polished_tuff_slab.name": "Dalle de tuf poli", + "tile.polished_tuff_stairs.name": "Escalier en tuf poli", "tile.polished_tuff_wall.name": "Muret en tuf poli", "tile.soul_campfire.name": "Feu de camp des âmes", "tile.chiseled_nether_bricks.name": "Briques du Nether sculptées", @@ -20026,7 +19162,7 @@ export const langs: Langs = { "tile.shulkerBoxWhite.name": "Boîte de shulker blanche", "tile.shulkerBoxOrange.name": "Boîte de shulker orange", "tile.shulkerBoxMagenta.name": "Boîte de shulker magenta", - "tile.shulkerBoxLightBlue.name": "Boîte de shulker bleu ciel", + "tile.shulkerBoxLightBlue.name": "Boîte de shulker bleu clair", "tile.shulkerBoxYellow.name": "Boîte de shulker jaune", "tile.shulkerBoxLime.name": "Boîte de shulker vert clair", "tile.shulkerBoxPink.name": "Boîte de shulker rose", @@ -20053,7 +19189,7 @@ export const langs: Langs = { "tile.stained_glass.lime.name": "Verre vert clair", "tile.stained_glass.green.name": "Verre vert", "tile.stained_glass.cyan.name": "Verre cyan", - "tile.stained_glass.light_blue.name": "Verre bleu ciel", + "tile.stained_glass.light_blue.name": "Verre bleu clair", "tile.stained_glass.blue.name": "Verre bleu", "tile.stained_glass.purple.name": "Verre violet", "tile.stained_glass.magenta.name": "Verre magenta", @@ -20069,7 +19205,7 @@ export const langs: Langs = { "tile.stained_glass_pane.lime.name": "Vitre vert clair", "tile.stained_glass_pane.green.name": "Vitre verte", "tile.stained_glass_pane.cyan.name": "Vitre cyan", - "tile.stained_glass_pane.light_blue.name": "Vitre bleu ciel", + "tile.stained_glass_pane.light_blue.name": "Vitre bleu clair", "tile.stained_glass_pane.blue.name": "Vitre bleue", "tile.stained_glass_pane.purple.name": "Vitre violette", "tile.stained_glass_pane.magenta.name": "Vitre magenta", @@ -20082,7 +19218,7 @@ export const langs: Langs = { "tile.stained_hardened_clay.cyan.name": "Terre cuite cyan", "tile.stained_hardened_clay.gray.name": "Terre cuite grise", "tile.stained_hardened_clay.green.name": "Terre cuite verte", - "tile.stained_hardened_clay.lightBlue.name": "Terre cuite bleu ciel", + "tile.stained_hardened_clay.lightBlue.name": "Terre cuite bleu clair", "tile.stained_hardened_clay.lime.name": "Terre cuite vert clair", "tile.stained_hardened_clay.magenta.name": "Terre cuite magenta", "tile.stained_hardened_clay.name": "Terre cuite", @@ -20095,15 +19231,15 @@ export const langs: Langs = { "tile.stained_hardened_clay.yellow.name": "Terre cuite jaune", "tile.structure_block.name": "Bloc de structure", "tile.structure_void.name": "Vide de structure", - "tile.trial_spawner.name": "Générateur d'épreuve", - "tile.vault.name": "Cache", + "tile.trial_spawner.name": "Générateur des épreuves", + "tile.vault.name": "Coffre-fort", "tile.wool.black.name": "Laine noire", "tile.wool.blue.name": "Laine bleue", "tile.wool.brown.name": "Laine marron", "tile.wool.cyan.name": "Laine cyan", "tile.wool.gray.name": "Laine grise", "tile.wool.green.name": "Laine verte", - "tile.wool.lightBlue.name": "Laine bleu ciel", + "tile.wool.lightBlue.name": "Laine bleu clair", "tile.wool.lime.name": "Laine vert clair", "tile.wool.magenta.name": "Laine magenta", "tile.wool.name": "Laine", @@ -20114,20 +19250,20 @@ export const langs: Langs = { "tile.wool.silver.name": "Laine gris clair", "tile.wool.white.name": "Laine blanche", "tile.wool.yellow.name": "Laine jaune", - "tile.cobblestone_wall.mossy.name": "Muret moussu", - "tile.cobblestone_wall.normal.name": "Muret de pierres ", + "tile.cobblestone_wall.mossy.name": "Muret de pavés moussus", + "tile.cobblestone_wall.normal.name": "Muret de pavés", "tile.cobblestone_wall.granite.name": "Muret de granite", "tile.cobblestone_wall.diorite.name": "Muret de diorite", "tile.cobblestone_wall.andesite.name": "Muret d'andésite", "tile.cobblestone_wall.sandstone.name": "Muret de grès", - "tile.cobblestone_wall.brick.name": "Muret en briques", - "tile.cobblestone_wall.stone_brick.name": "Muret en pierre taillée", - "tile.cobblestone_wall.mossy_stone_brick.name": "Muret en pierre taillée moussue", - "tile.cobblestone_wall.nether_brick.name": "Muret en briques du Nether", - "tile.cobblestone_wall.end_brick.name": "Muret en pierre taillée de l'Ender", - "tile.cobblestone_wall.prismarine.name": "Muret en prismarine", - "tile.cobblestone_wall.red_sandstone.name": "Muret en grès rouge", - "tile.cobblestone_wall.red_nether_brick.name": "Muret en briques rouges du Nether", + "tile.cobblestone_wall.brick.name": "Muret de briques", + "tile.cobblestone_wall.stone_brick.name": "Muret de pierre taillée", + "tile.cobblestone_wall.mossy_stone_brick.name": "Muret de pierre taillée moussue", + "tile.cobblestone_wall.nether_brick.name": "Muret de briques du Nether", + "tile.cobblestone_wall.end_brick.name": "Muret de pierre taillée de l'End", + "tile.cobblestone_wall.prismarine.name": "Muret de prismarine", + "tile.cobblestone_wall.red_sandstone.name": "Muret de grès rouge", + "tile.cobblestone_wall.red_nether_brick.name": "Muret de briques rouges du Nether", "tile.cocoa.name": "Cacao", "tile.command_block.name": "Bloc de commande", "tile.composter.name": "Composteur", @@ -20135,24 +19271,24 @@ export const langs: Langs = { "tile.repeating_command_block.name": "Bloc de commande à répétition", "tile.chain_command_block.name": "Bloc de commande en chaîne", "tile.wheat.name": "Cultures", - "tile.darkOakFence.name": "Clôture en chêne noir", - "tile.dark_oak_fence_gate.name": "Portail en chêne noir", - "tile.daylight_detector.name": "Détecteur de lumière", - "tile.deadbush.name": "Arbuste mort", - "tile.detector_rail.name": "Rail de détection", + "tile.darkOakFence.name": "Barrière en chêne noir", + "tile.dark_oak_fence_gate.name": "Portillon en chêne noir", + "tile.daylight_detector.name": "Capteur de lumière", + "tile.deadbush.name": "Buisson mort", + "tile.detector_rail.name": "Rails détecteurs", "tile.dirt.coarse.name": "Terre stérile", "tile.dirt.default.name": "Terre", "tile.dirt.name": "Terre", "tile.podzol.name": "Podzol", "tile.purpur_block.default.name": "Bloc de purpur", - "tile.purpur_block.lines.name": "Bloc de purpur sculpté", - "tile.purpur_block.chiseled.name": "Purpur ciselé", + "tile.purpur_block.lines.name": "Pilier de purpur", + "tile.purpur_block.chiseled.name": "Purpur sculpté", "tile.dispenser.name": "Distributeur", "tile.iron_door.name": "Porte en fer", "tile.doorWood.name": "Porte en bois", "tile.double_plant.fern.name": "Grande fougère", "tile.double_plant.grass.name": "Hautes herbes", - "tile.double_plant.name": "Grandes plantes", + "tile.double_plant.name": "Plante", "tile.double_plant.paeonia.name": "Pivoine", "tile.double_plant.rose.name": "Rosier", "tile.double_plant.sunflower.name": "Tournesol", @@ -20160,12 +19296,12 @@ export const langs: Langs = { "tile.dragon_egg.name": "Œuf de dragon", "tile.dropper.name": "Dropper", "tile.enchanting_table.name": "Table d'enchantement", - "tile.enderChest.name": "Coffre de l'Ender", - "tile.end_portal_frame.name": "Structure de portail de l'Ender", + "tile.enderChest.name": "Coffre de l'End", + "tile.end_portal_frame.name": "Structure de portail de l'End", "tile.farmland.name": "Terre labourée", "tile.fletching_table.name": "Table d'archerie", - "tile.fence.name": "Clôture en chêne", - "tile.fence_gate.name": "Portail en chêne", + "tile.fence.name": "Barrière en chêne", + "tile.fence_gate.name": "Portillon en chêne", "tile.iron_bars.name": "Barreaux de fer", "tile.fire.name": "Feu", "tile.yellow_flower.dandelion.name": "Pissenlit", @@ -20175,7 +19311,7 @@ export const langs: Langs = { "tile.red_flower.allium.name": "Allium", "tile.red_flower.blueOrchid.name": "Orchidée bleue", "tile.red_flower.cornflower.name": "Bleuet", - "tile.red_flower.houstonia.name": "Houstonie", + "tile.red_flower.houstonia.name": "Houstonie bleue", "tile.red_flower.name": "Fleur", "tile.red_flower.lilyOfTheValley.name": "Muguet", "tile.red_flower.oxeyeDaisy.name": "Marguerite", @@ -20185,24 +19321,24 @@ export const langs: Langs = { "tile.red_flower.tulipRed.name": "Tulipe rouge", "tile.red_flower.tulipWhite.name": "Tulipe blanche", "tile.wither_rose.name": "Rose de Wither", - "tile.furnace.name": "Four", + "tile.furnace.name": "Fourneau", "tile.glass.name": "Verre", - "tile.golden_rail.name": "Rail de propulsion", + "tile.golden_rail.name": "Rails de propulsion", "tile.grass.name": "Bloc d'herbe", "tile.grass_path.name": "Chemin de terre", "tile.gravel.name": "Gravier", - "tile.hay_block.name": "Botte de foin", - "tile.netherrack.name": "Roche du Nether", + "tile.hay_block.name": "Botte de paille", + "tile.netherrack.name": "Netherrack", "tile.soul_sand.name": "Sable des âmes", "tile.hopper.name": "Entonnoir", "tile.ice.name": "Glace", "tile.packed_ice.name": "Glace compactée", "tile.blue_ice.name": "Glace bleue", - "tile.frosted_ice.name": "Glace gelée", + "tile.frosted_ice.name": "Glace givrée", "tile.iron_trapdoor.name": "Trappe en fer", - "tile.jukebox.name": "Juke-box", - "tile.jungleFence.name": "Clôture en bois tropical", - "tile.jungle_fence_gate.name": "Portail en bois tropical", + "tile.jukebox.name": "Jukebox", + "tile.jungleFence.name": "Barrière en acajou", + "tile.jungle_fence_gate.name": "Portillon en bois tropical", "tile.ladder.name": "Échelle", "tile.flowing_lava.name": "Lave", "tile.lava.name": "Lave", @@ -20211,29 +19347,36 @@ export const langs: Langs = { "tile.leaves.big_oak.name": "Feuilles de chêne noir", "tile.leaves2.big_oak.name": "Feuilles de chêne noir", "tile.leaves.birch.name": "Feuilles de bouleau", - "tile.leaves.jungle.name": "Feuilles tropicales", - "tile.leaves.name": "Feuillage", + "tile.leaves.jungle.name": "Feuilles d’acajou", + "tile.leaves.name": "Feuilles", "tile.leaves.oak.name": "Feuilles de chêne", "tile.leaves.spruce.name": "Feuilles de sapin", "tile.lever.name": "Levier", "tile.glowstone.name": "Pierre lumineuse", - "tile.glow_lichen.name": "Lichen luisant", + "tile.glow_lichen.name": "Lichen lumineux", "tile.lightning_rod.name": "Paratonnerre", + "tile.exposed_lightning_rod.name": "Paratonnerre exposé", + "tile.weathered_lightning_rod.name": "Paratonnerre érodé", + "tile.oxidized_lightning_rod.name": "Paratonnerre oxydé", + "tile.waxed_lightning_rod.name": "Paratonnerre ciré", + "tile.waxed_exposed_lightning_rod.name": "Paratonnerre exposé ciré", + "tile.waxed_weathered_lightning_rod.name": "Paratonnerre érodé ciré", + "tile.waxed_oxidized_lightning_rod.name": "Paratonnerre oxydé ciré", "tile.lit_pumpkin.name": "Citrouille-lanterne", "tile.lockedchest.name": "Coffre verrouillé", - "tile.log.acacia.name": "Tronc d'acacia", - "tile.log.big_oak.name": "Tronc de chêne noir", - "tile.log.birch.name": "Tronc de bouleau", - "tile.log.jungle.name": "Tronc de bois tropical", - "tile.log.name": "Tronc", - "tile.log.oak.name": "Tronc de chêne", - "tile.log.spruce.name": "Tronc de sapin", + "tile.log.acacia.name": "Bûche d'acacia", + "tile.log.big_oak.name": "Bûche de chêne noir", + "tile.log.birch.name": "Bûche de bouleau", + "tile.log.jungle.name": "Bûche d’acajou", + "tile.log.name": "Bûche", + "tile.log.oak.name": "Bûche de chêne", + "tile.log.spruce.name": "Bûche de sapin", "tile.magma.name": "Bloc de magma", "tile.melon_block.name": "Pastèque", - "tile.mob_spawner.name": "Générateur de monstres", - "tile.monster_egg.brick.name": "Briques de pierre infestées", + "tile.mob_spawner.name": "Générateur de créatures", + "tile.monster_egg.brick.name": "Pierre taillée infestée", "tile.monster_egg.chiseledbrick.name": "Pierre sculptée infestée", - "tile.monster_egg.cobble.name": "Pierres infestées", + "tile.monster_egg.cobble.name": "Pavés infestés", "tile.monster_egg.crackedbrick.name": "Pierre taillée craquelée infestée", "tile.monster_egg.mossybrick.name": "Pierre taillée moussue infestée", "tile.monster_egg.name": "Pierre infestée", @@ -20242,8 +19385,8 @@ export const langs: Langs = { "tile.noteblock.name": "Bloc musical", "tile.mycelium.name": "Mycélium", "tile.nether_brick.name": "Briques du Nether", - "tile.red_nether_brick.name": "Briques du Nether rouges", - "tile.nether_brick_fence.name": "Clôture en brique du Nether", + "tile.red_nether_brick.name": "Briques rouges du Nether", + "tile.nether_brick_fence.name": "Barrière en brique du Nether", "tile.quartz_ore.name": "Minerai de quartz du Nether", "tile.netherreactor.active": "Activé !", "tile.netherreactor.builtTooHigh": "Le réacteur du Nether doit être construit plus bas.", @@ -20277,13 +19420,13 @@ export const langs: Langs = { "tile.acacia_pressure_plate.name": "Plaque de pression en acacia", "tile.birch_pressure_plate.name": "Plaque de pression en bouleau", "tile.dark_oak_pressure_plate.name": "Plaque de pression en chêne noir", - "tile.jungle_pressure_plate.name": "Plaque de pression en bois tropical", + "tile.jungle_pressure_plate.name": "Plaque de pression en acajou", "tile.spruce_pressure_plate.name": "Plaque de pression en sapin", "tile.prismarine.bricks.name": "Briques de prismarine", "tile.prismarine.dark.name": "Prismarine sombre", "tile.prismarine.rough.name": "Prismarine", "tile.pumpkin.name": "Citrouille", - "tile.pumpkin_stem.name": "Queue de citrouille", + "tile.pumpkin_stem.name": "Tige de citrouille", "tile.quartz_block.chiseled.name": "Bloc de quartz sculpté", "tile.quartz_block.default.name": "Bloc de quartz", "tile.quartz_block.lines.name": "Pilier de quartz", @@ -20293,14 +19436,14 @@ export const langs: Langs = { "tile.red_mushroom.name": "Champignon rouge", "tile.crimson_fungus.name": "Champignon carmin", "tile.warped_fungus.name": "Champignon biscornu", - "tile.red_mushroom_block.name": "Bloc de champignons rouges", + "tile.red_mushroom_block.name": "Bloc de champignon rouge", "tile.red_sandstone.chiseled.name": "Grès rouge sculpté", "tile.red_sandstone.default.name": "Grès rouge", "tile.red_sandstone.name": "Grès rouge", - "tile.red_sandstone.smooth.name": "Grès rouge poli", + "tile.red_sandstone.smooth.name": "Grès rouge lisse", "tile.red_sandstone.cut.name": "Grès rouge taillé", "tile.redstone_wire.name": "Poudre de redstone", - "tile.redstone_lamp.name": "Lampe de redstone", + "tile.redstone_lamp.name": "Lampe à redstone", "tile.reeds.name": "Canne à sucre", "tile.sand.default.name": "Sable", "tile.sand.name": "Sable", @@ -20308,46 +19451,46 @@ export const langs: Langs = { "tile.sandstone.chiseled.name": "Grès sculpté", "tile.sandstone.default.name": "Grès", "tile.sandstone.name": "Grès", - "tile.sandstone.smooth.name": "Grès poli", + "tile.sandstone.smooth.name": "Grès lisse", "tile.sandstone.cut.name": "Grès taillé", "tile.sapling.acacia.name": "Pousse d'acacia", "tile.sapling.big_oak.name": "Pousse de chêne noir", "tile.sapling.birch.name": "Pousse de bouleau", - "tile.sapling.jungle.name": "Pousse tropicale", + "tile.sapling.jungle.name": "Pousse d’acajou", "tile.sapling.oak.name": "Pousse de chêne", "tile.sapling.spruce.name": "Pousse de sapin", "tile.seaLantern.name": "Lanterne aquatique", - "tile.standing_sign.name": "Panneau", - "tile.spruce_standing_sign.name": "Panneau en sapin", - "tile.birch_standing_sign.name": "Panneau en bouleau", - "tile.jungle_standing_sign.name": "Panneau en bois tropical", - "tile.acacia_standing_sign.name": "Panneau en acacia", - "tile.darkoak_standing_sign.name": "Panneau en chêne noir", + "tile.standing_sign.name": "Pancarte", + "tile.spruce_standing_sign.name": "Pancarte en sapin", + "tile.birch_standing_sign.name": "Pancarte en bouleau", + "tile.jungle_standing_sign.name": "Pancarte en acajou", + "tile.acacia_standing_sign.name": "Pancarte en acacia", + "tile.darkoak_standing_sign.name": "Pancarte en chêne noir", "tile.slime.name": "Bloc de slime", "tile.snow.name": "Bloc de neige", "tile.sponge.dry.name": "Éponge", "tile.sponge.wet.name": "Éponge mouillée", - "tile.spruceFence.name": "Clôture en sapin", - "tile.spruce_fence_gate.name": "Portail en sapin", + "tile.spruceFence.name": "Barrière en sapin", + "tile.spruce_fence_gate.name": "Portillon en sapin", "tile.brick_stairs.name": "Escalier en briques", - "tile.nether_brick_stairs.name": "Escalier en brique du Nether", + "tile.nether_brick_stairs.name": "Escalier en briques du Nether", "tile.quartz_stairs.name": "Escalier en quartz", "tile.smooth_quartz_stairs.name": "Escalier en quartz lisse", "tile.red_sandstone_stairs.name": "Escalier en grès rouge", "tile.sandstone_stairs.name": "Escalier en grès", - "tile.stone_stairs.name": "Escalier en pierres", + "tile.stone_stairs.name": "Escalier en pavés", "tile.normal_stone_stairs.name": "Escalier en pierre", "tile.stone_brick_stairs.name": "Escalier en pierre taillée", "tile.oak_stairs.name": "Escalier en chêne", "tile.acacia_stairs.name": "Escalier en acacia", "tile.birch_stairs.name": "Escalier en bouleau", "tile.dark_oak_stairs.name": "Escalier en chêne noir", - "tile.jungle_stairs.name": "Escalier en bois tropical", + "tile.jungle_stairs.name": "Escalier en acajou", "tile.spruce_stairs.name": "Escalier en sapin", "tile.purpur_stairs.name": "Escalier en purpur", - "tile.prismarine_stairs.name": "Escaliers en prismarine", - "tile.dark_prismarine_stairs.name": "Escaliers en prismarine sombre", - "tile.prismarine_bricks_stairs.name": "Escaliers en prismarine taillée", + "tile.prismarine_stairs.name": "Escalier en prismarine", + "tile.dark_prismarine_stairs.name": "Escalier en prismarine sombre", + "tile.prismarine_bricks_stairs.name": "Escalier en briques prismarine", "tile.granite_stairs.name": "Escalier en granite", "tile.diorite_stairs.name": "Escalier en diorite", "tile.andesite_stairs.name": "Escalier en andésite", @@ -20355,10 +19498,10 @@ export const langs: Langs = { "tile.polished_diorite_stairs.name": "Escalier en diorite polie", "tile.polished_andesite_stairs.name": "Escalier en andésite polie", "tile.mossy_stone_brick_stairs.name": "Escalier en pierre taillée moussue", - "tile.smooth_red_sandstone_stairs.name": "Escalier en grès rouge poli", - "tile.smooth_sandstone_stairs.name": "Escalier en grès poli", - "tile.end_brick_stairs.name": "Escalier en pierre taillée de l'Ender", - "tile.mossy_cobblestone_stairs.name": "Escalier en pierre moussue", + "tile.smooth_red_sandstone_stairs.name": "Escalier en grès rouge lisse", + "tile.smooth_sandstone_stairs.name": "Escalier en grès lisse", + "tile.end_brick_stairs.name": "Escalier en pierre taillée de l'End", + "tile.mossy_cobblestone_stairs.name": "Escalier en pavés moussus", "tile.red_nether_brick_stairs.name": "Escalier en briques rouges du Nether", "tile.smooth_stone.name": "Pierre lisse", "tile.standing_banner.black.name": "Bannière noire", @@ -20367,7 +19510,7 @@ export const langs: Langs = { "tile.standing_banner.cyan.name": "Bannière cyan", "tile.standing_banner.gray.name": "Bannière grise", "tile.standing_banner.green.name": "Bannière verte", - "tile.standing_banner.lightBlue.name": "Bannière bleu ciel", + "tile.standing_banner.lightBlue.name": "Bannière bleu clair", "tile.standing_banner.lime.name": "Bannière vert clair", "tile.standing_banner.magenta.name": "Bannière magenta", "tile.standing_banner.name": "Bannière", @@ -20385,100 +19528,100 @@ export const langs: Langs = { "tile.stone.granite.name": "Granite", "tile.stone.graniteSmooth.name": "Granite poli", "tile.stone.stone.name": "Pierre", - "tile.cobblestone.name": "Pierres", + "tile.cobblestone.name": "Pavés", "tile.stonebrick.chiseled.name": "Pierre sculptée", "tile.stonebrick.cracked.name": "Pierre taillée craquelée", "tile.stonebrick.default.name": "Pierre taillée", "tile.stonebrick.mossy.name": "Pierre taillée moussue", "tile.stonebrick.name": "Pierre taillée", "tile.stonebrick.smooth.name": "Pierre taillée lisse", - "tile.stonecutter.name": "Scie à pierre", - "tile.stonecutter_block.name": "Scie à pierre", - "tile.mossy_cobblestone.name": "Pierre moussue", - "tile.double_stone_slab.brick.name": "Dalle en briques", - "tile.double_stone_slab.cobble.name": "Dalle de pierres", + "tile.stonecutter.name": "Tailleur de pierre", + "tile.stonecutter_block.name": "Tailleur de pierre", + "tile.mossy_cobblestone.name": "Pavés moussus", + "tile.double_stone_slab.brick.name": "Dalle de briques", + "tile.double_stone_slab.cobble.name": "Dalle de pavés", "tile.double_stone_slab.name": "Dalle de pierre", - "tile.double_stone_slab.nether_brick.name": "Dalle en briques du Nether", + "tile.double_stone_slab.nether_brick.name": "Dalle de briques du Nether", "tile.double_stone_slab.quartz.name": "Dalle de quartz", "tile.double_stone_slab.sand.name": "Dalle de grès", - "tile.double_stone_slab.smoothStoneBrick.name": "Dalle en briques de pierre", + "tile.double_stone_slab.smoothStoneBrick.name": "Dalle de pierre taillée", "tile.double_stone_slab.stone.name": "Dalle de pierre", "tile.double_stone_slab.wood.name": "Dalle de bois", "tile.stone_slab.name": "Dalle de pierre", - "tile.stone_slab.brick.name": "Dalle en briques", - "tile.stone_slab.cobble.name": "Dalle de pierres", + "tile.stone_slab.brick.name": "Dalle de briques", + "tile.stone_slab.cobble.name": "Dalle de pavés", "tile.stone_slab.stone.name": "Dalle de pierre lisse", - "tile.stone_slab.nether_brick.name": "Dalle en briques du Nether", + "tile.stone_slab.nether_brick.name": "Dalle de briques du Nether", "tile.stone_slab.quartz.name": "Dalle de quartz", "tile.stone_slab.sand.name": "Dalle de grès", - "tile.stone_slab.smoothStoneBrick.name": "Dalle en briques de pierre", + "tile.stone_slab.smoothStoneBrick.name": "Dalle de pierre taillée", "tile.stone_slab.wood.name": "Dalle de bois", - "tile.double_stone_slab2.red_sandstone.name": "Dalle en grès rouge", - "tile.stone_slab2.red_sandstone.name": "Dalle en grès rouge", + "tile.double_stone_slab2.red_sandstone.name": "Dalle de grès rouge", + "tile.stone_slab2.red_sandstone.name": "Dalle de grès rouge", "tile.stone_slab2.purpur.name": "Dalle de purpur", "tile.stone_slab2.prismarine.rough.name": "Dalle de prismarine", "tile.stone_slab2.prismarine.dark.name": "Dalle de prismarine sombre", - "tile.stone_slab2.prismarine.bricks.name": "Dalle de prismarine taillée", - "tile.stone_slab2.mossy_cobblestone.name": "Dalle de pierre moussue", - "tile.stone_slab2.red_nether_brick.name": "Dalle en briques rouges du Nether", - "tile.stone_slab2.sandstone.smooth.name": "Dalle de grès poli", - "tile.stone_slab3.end_brick.name": "Dalle en pierre taillée de l'Ender", - "tile.stone_slab3.red_sandstone.smooth.name": "Dalle de grès rouge poli", - "tile.stone_slab3.andesite.smooth.name": "Dalle en andésite polie", - "tile.stone_slab3.andesite.name": "Dalle en andésite", - "tile.stone_slab3.diorite.name": "Dalle en diorite", - "tile.stone_slab3.diorite.smooth.name": "Dalle en diorite polie", - "tile.stone_slab3.granite.name": "Dalle en granite", - "tile.stone_slab3.granite.smooth.name": "Dalle en granite poli", - "tile.stone_slab4.mossy_stone_brick.name": "Dalle en pierre taillée moussue", + "tile.stone_slab2.prismarine.bricks.name": "Dalle de briques de prismarine", + "tile.stone_slab2.mossy_cobblestone.name": "Dalle de pavés moussus", + "tile.stone_slab2.red_nether_brick.name": "Dalle de briques rouges du Nether", + "tile.stone_slab2.sandstone.smooth.name": "Dalle de grès lisse", + "tile.stone_slab3.end_brick.name": "Dalle de pierre taillée de l'Ender", + "tile.stone_slab3.red_sandstone.smooth.name": "Dalle de grès rouge lisse", + "tile.stone_slab3.andesite.smooth.name": "Dalle d’andésite polie", + "tile.stone_slab3.andesite.name": "Dalle d’andésite", + "tile.stone_slab3.diorite.name": "Dalle de diorite", + "tile.stone_slab3.diorite.smooth.name": "Dalle de diorite polie", + "tile.stone_slab3.granite.name": "Dalle de granite", + "tile.stone_slab3.granite.smooth.name": "Dalle de granite poli", + "tile.stone_slab4.mossy_stone_brick.name": "Dalle de pierre taillée moussue", "tile.stone_slab4.smooth_quartz.name": "Dalle de quartz lisse", "tile.stone_slab4.stone.name": "Dalle de pierre", "tile.stone_slab4.cut_sandstone.name": "Dalle de grès taillé", "tile.stone_slab4.cut_red_sandstone.name": "Dalle de grès rouge taillé", - "tile.coral_block.blue.name": "Bloc de corail tube", + "tile.coral_block.blue.name": "Bloc de corail tubulaire", "tile.coral_block.pink.name": "Bloc de corail cerveau", "tile.coral_block.purple.name": "Bloc de corail bulles", "tile.coral_block.red.name": "Bloc de corail de feu", - "tile.coral_block.yellow.name": "Bloc de corne de coraux", - "tile.coral_block.blue_dead.name": "Bloc de corail tube mort", + "tile.coral_block.yellow.name": "Bloc de corail corné", + "tile.coral_block.blue_dead.name": "Bloc de corail tubulaire mort", "tile.coral_block.pink_dead.name": "Bloc de corail cerveau mort", "tile.coral_block.purple_dead.name": "Bloc de corail bulles mort", "tile.coral_block.red_dead.name": "Bloc de corail de feu mort", - "tile.coral_block.yellow_dead.name": "Bloc de corne de coraux mort", + "tile.coral_block.yellow_dead.name": "Gorgone de corail corné morte", "tile.tallgrass.fern.name": "Fougère", - "tile.tallgrass.grass.name": "Herbes basses", - "tile.tallgrass.name": "Herbes basses", + "tile.tallgrass.grass.name": "Herbe courte", + "tile.tallgrass.name": "Herbe courte", "tile.tallgrass.shrub.name": "Arbuste", - "tile.tuff_brick_slab.name": "Dalle en briques de tuf", - "tile.tuff_brick_stairs.name": "Escaliers en briques de tuf", - "tile.tuff_brick_wall.name": "Muret en briques de tuf", - "tile.tuff_bricks.name": "Briques de tuf", - "tile.tuff_slab.name": "Dalle en tuf", - "tile.tuff_stairs.name": "Escaliers en tuf", - "tile.tuff_wall.name": "Muret en tuf", - "tile.seagrass.seagrass.name": "Herbe marine", - "tile.sea_pickle.name": "Concombre de mer", + "tile.tuff_brick_slab.name": "Dalle de tuf taillé", + "tile.tuff_brick_stairs.name": "Escaliers de tuf taillé", + "tile.tuff_brick_wall.name": "Muret de tuf taillé", + "tile.tuff_bricks.name": "Tuf taillé", + "tile.tuff_slab.name": "Dalle de tuf", + "tile.tuff_stairs.name": "Escalier en tuf", + "tile.tuff_wall.name": "Muret de tuf", + "tile.seagrass.seagrass.name": "Herbe aquatique", + "tile.sea_pickle.name": "Cornichon de mer", "tile.turtle_egg.name": "Œuf de tortue", - "tile.coral.blue.name": "Corail tube", + "tile.coral.blue.name": "Corail tubulaire", "tile.coral.pink.name": "Corail cerveau", "tile.coral.purple.name": "Corail bulles", "tile.coral.red.name": "Corail de feu", - "tile.coral.yellow.name": "Corne de coraux", - "tile.coral.blue_dead.name": "Corail tube mort", + "tile.coral.yellow.name": "Corail corné", + "tile.coral.blue_dead.name": "Corail tubulaire mort", "tile.coral.pink_dead.name": "Corail cerveau mort", "tile.coral.purple_dead.name": "Corail bulles mort", "tile.coral.red_dead.name": "Corail de feu mort", - "tile.coral.yellow_dead.name": "Corne de coraux morts", - "tile.coral_fan.blue_fan.name": "Colonie de corail tube", - "tile.coral_fan.pink_fan.name": "Colonie de corail cerveau", - "tile.coral_fan.purple_fan.name": "Colonie de corail bulles", - "tile.coral_fan.red_fan.name": "Colonie de corail de feu", - "tile.coral_fan.yellow_fan.name": "Colonie de corne de coraux", - "tile.coral_fan_dead.blue_fan.name": "Colonie de corail tube mort", - "tile.coral_fan_dead.pink_fan.name": "Colonie de corail cerveau mort", - "tile.coral_fan_dead.purple_fan.name": "Colonie de corail bulles mort", - "tile.coral_fan_dead.red_fan.name": "Colonie de corail de feu mort", - "tile.coral_fan_dead.yellow_fan.name": "Colonie de corne de coraux mort", + "tile.coral.yellow_dead.name": "Corail corné mort", + "tile.coral_fan.blue_fan.name": "Gorgone de corail tubulaire", + "tile.coral_fan.pink_fan.name": "Gorgone de corail cerveau", + "tile.coral_fan.purple_fan.name": "Gorgone de corail bulles", + "tile.coral_fan.red_fan.name": "Gorgone de corail de feu", + "tile.coral_fan.yellow_fan.name": "Gorgone de corail corné", + "tile.coral_fan_dead.blue_fan.name": "Gorgone de corail tubulaire morte", + "tile.coral_fan_dead.pink_fan.name": "Gorgone de corail cerveau morte", + "tile.coral_fan_dead.purple_fan.name": "Gorgone de corail bulles morte", + "tile.coral_fan_dead.red_fan.name": "Gorgone de corail de feu morte", + "tile.coral_fan_dead.yellow_fan.name": "Gorgone de corail corné morte", "tile.glass_pane.name": "Vitre", "tile.tnt.name": "TNT", "tile.snow_layer.name": "Neige", @@ -20487,35 +19630,35 @@ export const langs: Langs = { "tile.acacia_trapdoor.name": "Trappe en acacia", "tile.birch_trapdoor.name": "Trappe en bouleau", "tile.dark_oak_trapdoor.name": "Trappe en chêne noir", - "tile.jungle_trapdoor.name": "Trappe en bois tropical", + "tile.jungle_trapdoor.name": "Trappe en acajou", "tile.spruce_trapdoor.name": "Trappe en sapin", - "tile.tripWire.name": "Fil de détente", - "tile.tripwire_hook.name": "Crochet", - "tile.vine.name": "Lierre", + "tile.tripWire.name": "Fil de déclenchement", + "tile.tripwire_hook.name": "Crochet de déclenchement", + "tile.vine.name": "Lianes", "tile.weeping_vines.name": "Lianes pleureuses", "tile.twisting_vines.name": "Lianes tortueuses", "tile.flowing_water.name": "Eau", "tile.water.name": "Eau", "tile.waterlily.name": "Nénuphar", "tile.web.name": "Toile d'araignée", - "tile.heavy_weighted_pressure_plate.name": "Plaque de pression lestée lourde", - "tile.light_weighted_pressure_plate.name": "Plaque de pression lestée légère", - "tile.end_stone.name": "Pierre de l'Ender", - "tile.end_bricks.name": "Pierre taillée de l'Ender", + "tile.heavy_weighted_pressure_plate.name": "Plaque de pression pondérée lourde", + "tile.light_weighted_pressure_plate.name": "Plaque de pression pondérée légère", + "tile.end_stone.name": "Pierre de l'End", + "tile.end_bricks.name": "Pierre taillée de l'End", "tile.planks.acacia.name": "Planches d'acacia", "tile.planks.big_oak.name": "Planches de chêne noir", "tile.planks.birch.name": "Planches de bouleau", - "tile.planks.jungle.name": "Planches de bois tropical", + "tile.planks.jungle.name": "Planches d’acajou", "tile.planks.name": "Planches", - "tile.planks.oak.name": "Planches en chêne", + "tile.planks.oak.name": "Planches de chêne", "tile.planks.spruce.name": "Planches de sapin", - "tile.wooden_slab.acacia.name": "Dalle d'acacia", - "tile.wooden_slab.big_oak.name": "Dalle de chêne noir", - "tile.wooden_slab.birch.name": "Dalle de bouleau", - "tile.wooden_slab.jungle.name": "Dalle de bois tropical", + "tile.wooden_slab.acacia.name": "Dalle en acacia", + "tile.wooden_slab.big_oak.name": "Dalle en chêne noir", + "tile.wooden_slab.birch.name": "Dalle en bouleau", + "tile.wooden_slab.jungle.name": "Dalle en acajou", "tile.wooden_slab.name": "Dalle en bois", - "tile.wooden_slab.oak.name": "Dalle de chêne", - "tile.wooden_slab.spruce.name": "Dalle de sapin", + "tile.wooden_slab.oak.name": "Dalle en chêne", + "tile.wooden_slab.spruce.name": "Dalle en sapin", "tile.carpet.black.name": "Tapis noir", "tile.carpet.blue.name": "Tapis bleu", "tile.carpet.brown.name": "Tapis marron", @@ -20537,35 +19680,35 @@ export const langs: Langs = { "tile.crafting_table.name": "Établi", "tile.pale_oak_button.name": "Bouton en chêne pâle", "tile.pale_oak_double_slab.name": "Double dalle en chêne pâle", - "tile.pale_oak_fence.name": "Clôture en chêne pâle", - "tile.pale_oak_fence_gate.name": "Portail en chêne pâle", - "tile.pale_oak_log.name": "Tronc de chêne pâle", + "tile.pale_oak_fence.name": "Barrière en chêne pâle", + "tile.pale_oak_fence_gate.name": "Portillon en chêne pâle", + "tile.pale_oak_log.name": "Bûche de chêne pâle", "tile.pale_oak_planks.name": "Planches de chêne pâle", "tile.pale_oak_pressure_plate.name": "Plaque de pression en chêne pâle", "tile.pale_oak_slab.name": "Dalle en chêne pâle", "tile.pale_oak_stairs.name": "Escalier en chêne pâle", "tile.pale_oak_trapdoor.name": "Trappe en chêne pâle", "tile.pale_oak_wood.name": "Bois de chêne pâle", - "tile.stripped_pale_oak_log.name": "Tronc de chêne pâle écorcé", + "tile.stripped_pale_oak_log.name": "Bûche de chêne pâle écorcée", "tile.stripped_pale_oak_wood.name": "Bois de chêne pâle écorcé", "tile.pale_hanging_moss.name": "Mousse pâle suspendue", "tile.pale_moss_block.name": "Bloc de mousse pâle", "tile.pale_moss_carpet.name": "Tapis de mousse pâle", "tile.creaking_heart.name": "Cœur de grinceur", - "tile.open_eyeblossom.name": "Eyeblossom ouvert", - "tile.closed_eyeblossom.name": "Eyeblossom fermé", + "tile.open_eyeblossom.name": "Œilchidée ouverte", + "tile.closed_eyeblossom.name": "Œilchidée fermée", "tile.resin_bricks.name": "Briques de résine", "tile.resin_brick_double_slab.name": "Double dalle en briques de résine", - "tile.resin_brick_slab.name": "Dalle en briques de résine", + "tile.resin_brick_slab.name": "Dalle de briques de résine", "tile.resin_brick_stairs.name": "Escalier en briques de résine", - "tile.resin_brick_wall.name": "Muret en briques de résine", - "tile.chiseled_resin_bricks.name": "Briques de résine ciselées", + "tile.resin_brick_wall.name": "Muret de briques de résine", + "tile.chiseled_resin_bricks.name": "Briques de résine sculptées", "tile.resin_block.name": "Bloc de résine", "tile.resin_clump.name": "Amas de résine", "tile.glazedTerracotta.white.name": "Terre cuite émaillée blanche", "tile.glazedTerracotta.orange.name": "Terre cuite émaillée orange", "tile.glazedTerracotta.magenta.name": "Terre cuite émaillée magenta", - "tile.glazedTerracotta.light_blue.name": "Terre cuite émaillée bleu ciel", + "tile.glazedTerracotta.light_blue.name": "Terre cuite émaillée bleu clair", "tile.glazedTerracotta.yellow.name": "Terre cuite émaillée jaune", "tile.glazedTerracotta.lime.name": "Terre cuite émaillée vert clair", "tile.glazedTerracotta.pink.name": "Terre cuite émaillée rose", @@ -20590,14 +19733,14 @@ export const langs: Langs = { "tile.concrete.pink.name": "Béton rose", "tile.concrete.lime.name": "Béton vert clair", "tile.concrete.yellow.name": "Béton jaune", - "tile.concrete.lightBlue.name": "Béton bleu ciel", + "tile.concrete.lightBlue.name": "Béton bleu clair", "tile.concrete.magenta.name": "Béton magenta", "tile.concrete.orange.name": "Béton orange", "tile.concrete.white.name": "Béton blanc", "tile.glazedTerracottaWhite.name": "Terre cuite émaillée blanche", "tile.glazedTerracottaOrange.name": "Terre cuite émaillée orange", "tile.glazedTerracottaMagenta.name": "Terre cuite émaillée magenta", - "tile.glazedTerracottaLightBlue.name": "Terre cuite émaillée bleu ciel", + "tile.glazedTerracottaLightBlue.name": "Terre cuite émaillée bleu clair", "tile.glazedTerracottaYellow.name": "Terre cuite émaillée jaune", "tile.glazedTerracottaLime.name": "Terre cuite émaillée vert clair", "tile.glazedTerracottaPink.name": "Terre cuite émaillée rose", @@ -20610,28 +19753,28 @@ export const langs: Langs = { "tile.glazedTerracottaGreen.name": "Terre cuite émaillée verte", "tile.glazedTerracottaRed.name": "Terre cuite émaillée rouge", "tile.glazedTerracottaBlack.name": "Terre cuite émaillée noire", - "tile.concretePowder.black.name": "Poudre de béton noire", - "tile.concretePowder.red.name": "Poudre de béton rouge", - "tile.concretePowder.green.name": "Poudre de béton verte", - "tile.concretePowder.brown.name": "Poudre de béton marron", - "tile.concretePowder.blue.name": "Poudre de béton bleue", - "tile.concretePowder.purple.name": "Poudre de béton violette", - "tile.concretePowder.cyan.name": "Poudre de béton cyan", - "tile.concretePowder.silver.name": "Poudre de béton gris clair", - "tile.concretePowder.gray.name": "Poudre de béton grise", - "tile.concretePowder.pink.name": "Poudre de béton rose", - "tile.concretePowder.lime.name": "Poudre de béton vert clair", - "tile.concretePowder.yellow.name": "Poudre de béton jaune", - "tile.concretePowder.lightBlue.name": "Poudre de béton bleu ciel", - "tile.concretePowder.magenta.name": "Poudre de béton magenta", - "tile.concretePowder.orange.name": "Poudre de béton orange", - "tile.concretePowder.white.name": "Poudre de béton blanche", - "tile.stripped_spruce_log.name": "Tronc de sapin écorcé", - "tile.stripped_dark_oak_log.name": "Tronc de chêne noir écorcé", - "tile.stripped_birch_log.name": "Tronc de bouleau écorcé", - "tile.stripped_jungle_log.name": "Tronc de bois tropical écorcé", - "tile.stripped_oak_log.name": "Tronc de chêne écorcé", - "tile.stripped_acacia_log.name": "Tronc d'acacia écorcé", + "tile.concretePowder.black.name": "Béton noir en poudre", + "tile.concretePowder.red.name": "Béton rouge en poudre", + "tile.concretePowder.green.name": "Béton vert en poudre", + "tile.concretePowder.brown.name": "Béton marron en poudre", + "tile.concretePowder.blue.name": "Béton bleu en poudre", + "tile.concretePowder.purple.name": "Béton violet en poudre", + "tile.concretePowder.cyan.name": "Béton cyan en poudre", + "tile.concretePowder.silver.name": "Béton gris clair en poudre", + "tile.concretePowder.gray.name": "Béton gris en poudre", + "tile.concretePowder.pink.name": "Béton rose en poudre", + "tile.concretePowder.lime.name": "Béton vert clair en poudre", + "tile.concretePowder.yellow.name": "Béton jaune en poudre", + "tile.concretePowder.lightBlue.name": "Béton bleu clair en poudre", + "tile.concretePowder.magenta.name": "Béton magenta en poudre", + "tile.concretePowder.orange.name": "Béton orange en poudre", + "tile.concretePowder.white.name": "Béton blanc en poudre", + "tile.stripped_spruce_log.name": "Bûche de sapin écorcée", + "tile.stripped_dark_oak_log.name": "Bûche de chêne noir écorcée", + "tile.stripped_birch_log.name": "Bûche de bouleau écorcée", + "tile.stripped_jungle_log.name": "Bûche de acajou écorcée", + "tile.stripped_oak_log.name": "Bûche de chêne écorcée", + "tile.stripped_acacia_log.name": "Bûche d'acacia écorcée", "tile.bamboo.name": "Bambou", "tile.scaffolding.name": "Échafaudage", "tile.grindstone.name": "Meule", @@ -20648,13 +19791,13 @@ export const langs: Langs = { "tile.wood.oak.name": "Bois de chêne", "tile.wood.spruce.name": "Bois de sapin", "tile.wood.birch.name": "Bois de bouleau", - "tile.wood.jungle.name": "Bois tropical", + "tile.wood.jungle.name": "Bois d’acajou", "tile.wood.acacia.name": "Bois d'acacia", "tile.wood.dark_oak.name": "Bois de chêne noir", "tile.wood.stripped.oak.name": "Bois de chêne écorcé", "tile.wood.stripped.spruce.name": "Bois de sapin écorcé", "tile.wood.stripped.birch.name": "Bois de bouleau écorcé", - "tile.wood.stripped.jungle.name": "Bois tropical écorcé", + "tile.wood.stripped.jungle.name": "Bois d’acajou écorcé", "tile.wood.stripped.acacia.name": "Bois d'acacia écorcé", "tile.wood.stripped.dark_oak.name": "Bois de chêne noir écorcé", "tile.netherite_block.name": "Bloc de Netherite", @@ -20672,22 +19815,22 @@ export const langs: Langs = { "tile.cobbled_deepslate_stairs.name": "Escalier en pierres des abîmes", "tile.cobbled_deepslate_wall.name": "Muret de pierres des abîmes", "tile.polished_deepslate.name": "Ardoise des abîmes polie", - "tile.polished_deepslate_slab.name": "Dalle en ardoise des abîmes polie", + "tile.polished_deepslate_slab.name": "Dalle d’ardoise des abîmes polie", "tile.polished_deepslate_stairs.name": "Escalier en ardoise des abîmes polie", - "tile.polished_deepslate_wall.name": "Muret en ardoise des abîmes", - "tile.deepslate_tiles.name": "Tuiles des abîmes", - "tile.deepslate_tile_slab.name": "Dalle en tuiles des abîmes", - "tile.deepslate_tile_stairs.name": "Escaliers en tuiles des abîmes", - "tile.deepslate_tile_wall.name": "Muret en tuiles des abîmes", - "tile.deepslate_bricks.name": "Briques des abîmes", - "tile.deepslate_brick_slab.name": "Dalle en briques des abîmes", - "tile.deepslate_brick_stairs.name": "Escaliers en briques des abîmes", - "tile.deepslate_brick_wall.name": "Muret en briques des abîmes", - "tile.chiseled_deepslate.name": "Ardoise des abîmes ciselée", + "tile.polished_deepslate_wall.name": "Muret en ardoise des abîmes polie", + "tile.deepslate_tiles.name": "Ardoise des abîmes carrelée", + "tile.deepslate_tile_slab.name": "Muret d’ardoise des abîmes carrelée", + "tile.deepslate_tile_stairs.name": "Escalier en ardoise des abîmes carrelée", + "tile.deepslate_tile_wall.name": "Muret d’ardoise des abîmes carrelée", + "tile.deepslate_bricks.name": "Ardoise des abîmes taillée", + "tile.deepslate_brick_slab.name": "Dalle d’ardoise des abîmes taillée", + "tile.deepslate_brick_stairs.name": "Escalier en ardoise des abîmes taillée", + "tile.deepslate_brick_wall.name": "Muret d’ardoise des abîmes taillée", + "tile.chiseled_deepslate.name": "Ardoise des abîmes sculptée", "tile.cobbled_deepslate_double_slab.name": "Double dalle de pierres des abîmes", "tile.polished_deepslate_double_slab.name": "Double dalle en ardoise des abîmes polie", - "tile.deepslate_tile_double_slab.name": "Double dalle en tuiles des abîmes", - "tile.deepslate_brick_double_slab.name": "Double dalle en briques des abîmes", + "tile.deepslate_tile_double_slab.name": "Double dalle d’ardoise des abîmes carrelée", + "tile.deepslate_brick_double_slab.name": "Double dalle d’ardoise des abîmes taillée", "tile.deepslate_lapis_ore.name": "Minerai de lapis-lazuli des abîmes", "tile.deepslate_iron_ore.name": "Minerai de fer des abîmes", "tile.deepslate_gold_ore.name": "Minerai d'or des abîmes", @@ -20696,87 +19839,87 @@ export const langs: Langs = { "tile.deepslate_coal_ore.name": "Minerai de charbon des abîmes", "tile.deepslate_emerald_ore.name": "Minerai d'émeraude des abîmes", "tile.deepslate_copper_ore.name": "Minerai de cuivre des abîmes", - "tile.cracked_deepslate_tiles.name": "Tuiles des abîmes craquelées", - "tile.cracked_deepslate_bricks.name": "Briques des abîmes craquelées", - "tile.pitcher_plant.name": "Sarracénie", + "tile.cracked_deepslate_tiles.name": "Ardoise des abîmes carrelée craquelée", + "tile.cracked_deepslate_bricks.name": "Ardoise des abîmes taillée craquelée", + "tile.pitcher_plant.name": "Planturne", "tile.sniffer_egg.name": "Œuf de Renifleur", - "tile.torchflower.name": "Rose de porcelaine", + "tile.torchflower.name": "Torche-fleur", "item.copper_ingot.name": "Lingot de cuivre", "item.raw_copper.name": "Cuivre brut", "item.raw_iron.name": "Fer brut", "item.raw_gold.name": "Or brut", "tile.copper_block.name": "Bloc de cuivre", - "tile.exposed_copper.name": "Cuivre peu oxydé", - "tile.weathered_copper.name": "Cuivre semi-oxydé", + "tile.exposed_copper.name": "Cuivre exposé", + "tile.weathered_copper.name": "Cuivre érodé", "tile.oxidized_copper.name": "Cuivre oxydé", "tile.waxed_copper.name": "Bloc de cuivre ciré", - "tile.waxed_exposed_copper.name": "Cuivre peu oxydé ciré", - "tile.waxed_weathered_copper.name": "Cuivre semi-oxydé ciré", + "tile.waxed_exposed_copper.name": "Cuivre exposé ciré", + "tile.waxed_weathered_copper.name": "Cuivre érodé ciré", "tile.waxed_oxidized_copper.name": "Cuivre oxydé ciré", "tile.cut_copper.name": "Cuivre taillé", - "tile.exposed_cut_copper.name": "Cuivre taillé peu oxydé", - "tile.weathered_cut_copper.name": "Cuivre taillé semi-oxydé", + "tile.exposed_cut_copper.name": "Cuivre taillé exposé", + "tile.weathered_cut_copper.name": "Cuivre taillé érodé", "tile.oxidized_cut_copper.name": "Cuivre taillé oxydé", "tile.waxed_cut_copper.name": "Cuivre taillé ciré", - "tile.waxed_exposed_cut_copper.name": "Cuivre taillé peu oxydé ciré", - "tile.waxed_weathered_cut_copper.name": "Cuivre taillé semi-oxydé ciré", + "tile.waxed_exposed_cut_copper.name": "Cuivre taillé exposé ciré", + "tile.waxed_weathered_cut_copper.name": "Cuivre taillé érodé ciré", "tile.waxed_oxidized_cut_copper.name": "Cuivre taillé oxydé ciré", - "tile.cut_copper_stairs.name": "Escaliers en cuivre taillé", - "tile.exposed_cut_copper_stairs.name": "Escaliers en cuivre taillé peu oxydé", - "tile.weathered_cut_copper_stairs.name": "Escaliers en cuivre taillé semi-oxydé", - "tile.oxidized_cut_copper_stairs.name": "Escaliers en cuivre taillé oxydé", - "tile.waxed_cut_copper_stairs.name": "Escaliers en cuivre taillé ciré", - "tile.waxed_exposed_cut_copper_stairs.name": "Escaliers en cuivre taillé peu oxydé ciré", - "tile.waxed_weathered_cut_copper_stairs.name": "Escaliers en cuivre taillé semi-oxydé ciré", - "tile.waxed_oxidized_cut_copper_stairs.name": "Escaliers en cuivre taillé oxydé ciré", - "tile.cut_copper_slab.name": "Dalle en cuivre taillé", - "tile.exposed_cut_copper_slab.name": "Dalle en cuivre taillé peu oxydé", - "tile.weathered_cut_copper_slab.name": "Dalle en cuivre taillé semi-oxydé", - "tile.oxidized_cut_copper_slab.name": "Dalle en cuivre taillé oxydé", - "tile.waxed_cut_copper_slab.name": "Dalle en cuivre taillé ciré", - "tile.waxed_exposed_cut_copper_slab.name": "Dalle en cuivre taillé peu oxydé ciré", - "tile.waxed_weathered_cut_copper_slab.name": "Dalle en cuivre taillé semi-oxydé ciré", - "tile.waxed_oxidized_cut_copper_slab.name": "Dalle en cuivre taillé oxydé ciré", - "tile.chiseled_copper.name": "Cuivre ciselé", - "tile.exposed_chiseled_copper.name": "Cuivre ciselé peu oxydé", - "tile.oxidized_chiseled_copper.name": "Cuivre ciselé oxydé", - "tile.waxed_chiseled_copper.name": "Cuivre ciselé ciré", - "tile.waxed_exposed_chiseled_copper.name": "Cuivre ciselé peu oxydé ciré", - "tile.waxed_oxidized_chiseled_copper.name": "Cuivre ciselé oxydé ciré", - "tile.waxed_weathered_chiseled_copper.name": "Cuivre ciselé semi-oxydé ciré", - "tile.weathered_chiseled_copper.name": "Cuivre ciselé semi-oxydé", + "tile.cut_copper_stairs.name": "Escalier en cuivre taillé", + "tile.exposed_cut_copper_stairs.name": "Escalier en cuivre taillé exposé", + "tile.weathered_cut_copper_stairs.name": "Escalier en cuivre taillé érodé", + "tile.oxidized_cut_copper_stairs.name": "Escalier en cuivre taillé oxydé", + "tile.waxed_cut_copper_stairs.name": "Escalier en cuivre taillé ciré", + "tile.waxed_exposed_cut_copper_stairs.name": "Escalier en cuivre taillé exposé ciré", + "tile.waxed_weathered_cut_copper_stairs.name": "Escalier en cuivre taillé érodé ciré", + "tile.waxed_oxidized_cut_copper_stairs.name": "Escalier en cuivre taillé oxydé ciré", + "tile.cut_copper_slab.name": "Dalle de cuivre taillé", + "tile.exposed_cut_copper_slab.name": "Dalle de cuivre taillé exposé", + "tile.weathered_cut_copper_slab.name": "Dalle de cuivre taillé érodé", + "tile.oxidized_cut_copper_slab.name": "Dalle de cuivre taillé oxydé", + "tile.waxed_cut_copper_slab.name": "Dalle de cuivre taillé ciré", + "tile.waxed_exposed_cut_copper_slab.name": "Dalle de cuivre taillé exposé ciré", + "tile.waxed_weathered_cut_copper_slab.name": "Dalle de cuivre taillé érodé ciré", + "tile.waxed_oxidized_cut_copper_slab.name": "Dalle de cuivre taillé oxydé ciré", + "tile.chiseled_copper.name": "Cuivre sculpté", + "tile.exposed_chiseled_copper.name": "Cuivre sculpté exposé", + "tile.oxidized_chiseled_copper.name": "Cuivre sculpté oxydé", + "tile.waxed_chiseled_copper.name": "Cuivre sculpté ciré", + "tile.waxed_exposed_chiseled_copper.name": "Cuivre sculpté exposé ciré", + "tile.waxed_oxidized_chiseled_copper.name": "Cuivre sculpté oxydé ciré", + "tile.waxed_weathered_chiseled_copper.name": "Cuivre ciselé érodé ciré", + "tile.weathered_chiseled_copper.name": "Cuivre ciselé érodé", "tile.copper_bulb.name": "Ampoule en cuivre", - "tile.exposed_copper_bulb.name": "Ampoule en cuivre peu oxydé", + "tile.exposed_copper_bulb.name": "Ampoule en cuivre exposé", "tile.oxidized_copper_bulb.name": "Ampoule en cuivre oxydé", "tile.waxed_copper_bulb.name": "Ampoule en cuivre ciré", - "tile.waxed_exposed_copper_bulb.name": "Ampoule en cuivre peu oxydé ciré", + "tile.waxed_exposed_copper_bulb.name": "Ampoule en cuivre exposé ciré", "tile.waxed_oxidized_copper_bulb.name": "Ampoule en cuivre oxydé ciré", - "tile.waxed_weathered_copper_bulb.name": "Ampoule en cuivre semi-oxydé ciré", - "tile.weathered_copper_bulb.name": "Ampoule en cuivre semi-oxydé", + "tile.waxed_weathered_copper_bulb.name": "Ampoule en cuivre érodé ciré", + "tile.weathered_copper_bulb.name": "Ampoule en cuivre érodé", "tile.copper_door.name": "Porte en cuivre", - "tile.exposed_copper_door.name": "Porte en cuivre peu oxydé", + "tile.exposed_copper_door.name": "Porte en cuivre exposé", "tile.oxidized_copper_door.name": "Porte en cuivre oxydé", "tile.waxed_copper_door.name": "Porte en cuivre ciré", - "tile.waxed_exposed_copper_door.name": "Porte en cuivre peu oxydé ciré", + "tile.waxed_exposed_copper_door.name": "Porte en cuivre exposé ciré", "tile.waxed_oxidized_copper_door.name": "Porte en cuivre oxydé ciré", - "tile.waxed_weathered_copper_door.name": "Porte en cuivre semi-oxydé ciré", - "tile.weathered_copper_door.name": "Porte en cuivre semi-oxydé", + "tile.waxed_weathered_copper_door.name": "Porte en cuivre érodé ciré", + "tile.weathered_copper_door.name": "Porte en cuivre érodé", "tile.copper_grate.name": "Grille en cuivre", - "tile.exposed_copper_grate.name": "Grille en cuivre peu oxydé", + "tile.exposed_copper_grate.name": "Grille en cuivre exposé", "tile.oxidized_copper_grate.name": "Grille en cuivre oxydé", "tile.waxed_copper_grate.name": "Grille en cuivre ciré", - "tile.waxed_exposed_copper_grate.name": "Grille en cuivre peu oxydé ciré", + "tile.waxed_exposed_copper_grate.name": "Grille en cuivre exposé ciré", "tile.waxed_oxidized_copper_grate.name": "Grille en cuivre oxydé ciré", - "tile.waxed_weathered_copper_grate.name": "Grille en cuivre semi-oxydé ciré", - "tile.weathered_copper_grate.name": "Grille en cuivre semi-oxydé", + "tile.waxed_weathered_copper_grate.name": "Grille en cuivre érodé ciré", + "tile.weathered_copper_grate.name": "Grille en cuivre érodé", "tile.copper_trapdoor.name": "Trappe en cuivre", - "tile.exposed_copper_trapdoor.name": "Trappe en cuivre peu oxydé", + "tile.exposed_copper_trapdoor.name": "Trappe en cuivre exposé", "tile.oxidized_copper_trapdoor.name": "Trappe en cuivre oxydé", "tile.waxed_copper_trapdoor.name": "Trappe en cuivre ciré", - "tile.waxed_exposed_copper_trapdoor.name": "Trappe en cuivre peu oxydé ciré", + "tile.waxed_exposed_copper_trapdoor.name": "Trappe en cuivre exposé ciré", "tile.waxed_oxidized_copper_trapdoor.name": "Trappe en cuivre oxydé ciré", - "tile.waxed_weathered_copper_trapdoor.name": "Trappe en cuivre semi-oxydé ciré", - "tile.weathered_copper_trapdoor.name": "Trappe en cuivre semi-oxydé", + "tile.waxed_weathered_copper_trapdoor.name": "Trappe en cuivre érodé ciré", + "tile.weathered_copper_trapdoor.name": "Trappe en cuivre érodé", "tile.raw_copper_block.name": "Bloc de cuivre brut", "tile.raw_iron_block.name": "Bloc de fer brut", "tile.raw_gold_block.name": "Bloc d'or brut", @@ -20797,23 +19940,23 @@ export const langs: Langs = { "tile.green_candle.name": "Bougie verte", "tile.red_candle.name": "Bougie rouge", "tile.black_candle.name": "Bougie noire", - "tile.candle_cake.name": "Gâteau avec bougie", - "tile.white_candle_cake.name": "Gâteau avec bougie blanche", - "tile.orange_candle_cake.name": "Gâteau avec bougie orange", - "tile.magenta_candle_cake.name": "Gâteau avec bougie magenta", - "tile.light_blue_candle_cake.name": "Gâteau avec bougie bleu clair", - "tile.yellow_candle_cake.name": "Gâteau avec bougie jaune", - "tile.lime_candle_cake.name": "Gâteau avec bougie vert clair", - "tile.pink_candle_cake.name": "Gâteau avec bougie rose", - "tile.gray_candle_cake.name": "Gâteau avec bougie grise", - "tile.light_gray_candle_cake.name": "Gâteau avec bougie gris clair", - "tile.cyan_candle_cake.name": "Gâteau avec bougie cyan", - "tile.purple_candle_cake.name": "Gâteau avec bougie violette", - "tile.blue_candle_cake.name": "Gâteau avec bougie bleue", - "tile.brown_candle_cake.name": "Gâteau avec bougie marron", - "tile.green_candle_cake.name": "Gâteau avec bougie verte", - "tile.red_candle_cake.name": "Gâteau avec bougie rouge", - "tile.black_candle_cake.name": "Gâteau avec bougie noire", + "tile.candle_cake.name": "Gâteau à bougie", + "tile.white_candle_cake.name": "Gâteau à bougie blanche", + "tile.orange_candle_cake.name": "Gâteau à bougie orange", + "tile.magenta_candle_cake.name": "Gâteau à bougie magenta", + "tile.light_blue_candle_cake.name": "Gâteau à bougie bleu clair", + "tile.yellow_candle_cake.name": "Gâteau à bougie jaune", + "tile.lime_candle_cake.name": "Gâteau à bougie vert clair", + "tile.pink_candle_cake.name": "Gâteau à bougie rose", + "tile.gray_candle_cake.name": "Gâteau à bougie grise", + "tile.light_gray_candle_cake.name": "Gâteau à bougie gris clair", + "tile.cyan_candle_cake.name": "Gâteau à bougie cyan", + "tile.purple_candle_cake.name": "Gâteau à bougie violette", + "tile.blue_candle_cake.name": "Gâteau à bougie bleue", + "tile.brown_candle_cake.name": "Gâteau à bougie marron", + "tile.green_candle_cake.name": "Gâteau à bougie verte", + "tile.red_candle_cake.name": "Gâteau à bougie rouge", + "tile.black_candle_cake.name": "Gâteau à bougie noire", "item.spyglass.name": "Longue-vue", "item.amethyst_shard.name": "Éclat d'améthyste", "tile.amethyst_block.name": "Bloc d’améthyste", @@ -20827,14 +19970,99 @@ export const langs: Langs = { "tile.tinted_glass.name": "Verre teinté", "tile.smooth_basalt.name": "Basalte lisse", "tile.wildflowers.name": "Fleurs sauvages", - "tile.firefly_bush.name": "Buisson de lucioles", - "tile.bush.name": "Arbuste", - "tile.leaf_litter.name": "Couche de feuilles", + "tile.firefly_bush.name": "Buisson à lucioles", + "tile.bush.name": "Buisson", + "tile.leaf_litter.name": "Tas de feuilles", "tile.cactus_flower.name": "Fleur de cactus", "item.brown_egg.name": "Œuf marron", "item.blue_egg.name": "Œuf bleu", "tile.short_dry_grass.name": "Herbes courtes sèches", - "tile.tall_dry_grass.name": "Herbes hautes sèches" + "tile.tall_dry_grass.name": "Hautes herbes sèches", + "entity.happy_ghast.name": "Ghast joyeux", + "item.spawn_egg.entity.happy_ghast.name": "Œuf d'apparition de ghast joyeux", + "tile.dried_ghast.name": "Ghast desséché", + "item.black_harness.name": "Harnais noir", + "item.blue_harness.name": "Harnais bleu", + "item.brown_harness.name": "Harnais marron", + "item.cyan_harness.name": "Harnais cyan", + "item.gray_harness.name": "Harnais gris", + "item.green_harness.name": "Harnais vert", + "item.light_blue_harness.name": "Harnais bleu clair", + "item.light_gray_harness.name": "Harnais gris clair", + "item.lime_harness.name": "Harnais vert clair", + "item.magenta_harness.name": "Harnais magenta", + "item.orange_harness.name": "Harnais orange", + "item.pink_harness.name": "Harnais rose", + "item.purple_harness.name": "Harnais violet", + "item.red_harness.name": "Harnais rouge", + "item.white_harness.name": "Harnais blanc", + "item.yellow_harness.name": "Harnais jaune", + "entity.copper_golem.name": "Golem de cuivre", + "item.spawn_egg.entity.copper_golem.name": "Œuf d'apparition de golem de cuivre", + "item.copper_nugget.name": "Pépite de cuivre", + "item.copper_sword.name": "Épée en cuivre", + "item.copper_pickaxe.name": "Pioche en cuivre", + "item.copper_axe.name": "Hache en cuivre", + "item.copper_shovel.name": "Pelle en cuivre", + "item.copper_hoe.name": "Houe en cuivre", + "item.copper_boots.name": "Bottes en cuivre", + "item.copper_leggings.name": "Jambières en cuivre", + "item.copper_chestplate.name": "Plastron en cuivre", + "item.copper_helmet.name": "Casque en cuivre", + "tile.copper_chest.name": "Coffre en cuivre", + "tile.exposed_copper_chest.name": "Coffre en cuivre exposé", + "tile.weathered_copper_chest.name": "Coffre en cuivre érodé", + "tile.oxidized_copper_chest.name": "Coffre en cuivre oxydé", + "tile.waxed_copper_chest.name": "Coffre en cuivre ciré", + "tile.waxed_exposed_copper_chest.name": "Coffre en cuivre exposé ciré", + "tile.waxed_weathered_copper_chest.name": "Coffre en cuivre érodé ciré", + "tile.waxed_oxidized_copper_chest.name": "Coffre en cuivre oxydé ciré", + "tile.acacia_shelf.name": "Étagère en acacia", + "tile.bamboo_shelf.name": "Étagère en bambou", + "tile.birch_shelf.name": "Étagère en bouleau", + "tile.cherry_shelf.name": "Étagère en cerisier", + "tile.crimson_shelf.name": "Étagère carmin", + "tile.dark_oak_shelf.name": "Étagère en chêne noir", + "tile.jungle_shelf.name": "Étagère en acajou", + "tile.mangrove_shelf.name": "Étagère en palétuvier", + "tile.oak_shelf.name": "Étagère en chêne", + "tile.pale_oak_shelf.name": "Étagère en chêne pâle", + "tile.spruce_shelf.name": "Étagère en sapin", + "tile.warped_shelf.name": "Étagère biscornue", + "tile.copper_golem_statue.name": "Statue de golem de cuivre", + "tile.exposed_copper_golem_statue.name": "Statue de golem de cuivre exposé", + "tile.weathered_copper_golem_statue.name": "Statue de golem de cuivre érodé", + "tile.oxidized_copper_golem_statue.name": "Statue de golem de cuivre oxydé", + "tile.waxed_copper_golem_statue.name": "Statue de golem de cuivre ciré", + "tile.waxed_exposed_copper_golem_statue.name": "Statue de golem de cuivre exposé ciré", + "tile.waxed_weathered_copper_golem_statue.name": "Statue de golem de cuivre érodé ciré", + "tile.waxed_oxidized_copper_golem_statue.name": "Statue de golem de cuivre oxydé ciré", + "tile.copper_chain.name": "Chaîne en cuivre", + "tile.exposed_copper_chain.name": "Chaîne en cuivre exposé", + "tile.weathered_copper_chain.name": "Chaîne en cuivre érodé", + "tile.oxidized_copper_chain.name": "Chaîne en cuivre oxydé", + "tile.waxed_copper_chain.name": "Chaîne en cuivre ciré", + "tile.waxed_exposed_copper_chain.name": "Chaîne en cuivre exposé ciré", + "tile.waxed_weathered_copper_chain.name": "Chaîne en cuivre érodé ciré", + "tile.waxed_oxidized_copper_chain.name": "Chaîne en cuivre oxydé ciré", + "tile.copper_bars.name": "Barreaux de cuivre", + "tile.exposed_copper_bars.name": "Barreaux en cuivre exposé", + "tile.weathered_copper_bars.name": "Barreaux en cuivre érodé", + "tile.oxidized_copper_bars.name": "Barreaux de cuivre oxydé", + "tile.waxed_copper_bars.name": "Barreaux de cuivre ciré", + "tile.waxed_exposed_copper_bars.name": "Barreaux en cuivre exposé ciré", + "tile.waxed_weathered_copper_bars.name": "Barreaux en cuivre érodé ciré", + "tile.waxed_oxidized_copper_bars.name": "Barreaux de cuivre oxydé ciré", + "tile.copper_lantern.name": "Lanterne en cuivre", + "tile.exposed_copper_lantern.name": "Lanterne en cuivre exposé", + "tile.weathered_copper_lantern.name": "Lanterne en cuivre érodé", + "tile.oxidized_copper_lantern.name": "Lanterne en cuivre oxydé", + "tile.waxed_copper_lantern.name": "Lanterne en cuivre ciré", + "tile.waxed_exposed_copper_lantern.name": "Lanterne en cuivre exposé ciré", + "tile.waxed_weathered_copper_lantern.name": "Lanterne en cuivre érodé ciré", + "tile.waxed_oxidized_copper_lantern.name": "Lanterne en cuivre oxydé ciré", + "tile.copper_torch.name": "Torche de cuivre", + "tile.iron_chain.name": "Chaîne en fer" }, "fr_CA": { "enchantment.arrowDamage": "Puissance", @@ -20843,18 +20071,18 @@ export const langs: Langs = { "enchantment.arrowKnockback": "Frappe", "enchantment.crossbowMultishot": "Tir multiple", "enchantment.crossbowPiercing": "Transpercer", - "enchantment.crossbowQuickCharge": "Recharge rapide", + "enchantment.crossbowQuickCharge": "Salve rapide", "enchantment.curse.binding": "Malédiction du lien éternel", "enchantment.curse.vanishing": "Malédiction de disparition", - "enchantment.damage.all": "Affûtage", + "enchantment.damage.all": "Tranchant", "enchantment.damage.arthropods": "Fléau des arthropodes", "enchantment.damage.undead": "Châtiment", "enchantment.digging": "Efficacité", "enchantment.durability": "Solidité", - "enchantment.fire": "Aura de feu", + "enchantment.fire": "Aura de Feu", "enchantment.fishingSpeed": "Appât", "enchantment.frostwalker": "Semelles givrantes", - "enchantment.heavy_weapon.breach": "Infraction", + "enchantment.heavy_weapon.breach": "Brèche", "enchantment.heavy_weapon.density": "Densité", "enchantment.heavy_weapon.windburst": "Rafale de vent", "enchantment.knockback": "Recul", @@ -20868,7 +20096,7 @@ export const langs: Langs = { "enchantment.level.7": "VII", "enchantment.level.8": "VIII", "enchantment.level.9": "IX", - "enchantment.lootBonus": "Dépouillage", + "enchantment.lootBonus": "Butin", "enchantment.lootBonusDigger": "Fortune", "enchantment.lootBonusFishing": "Chance de la mer", "enchantment.mending": "Raccommodage", @@ -20886,7 +20114,7 @@ export const langs: Langs = { "enchantment.waterWorker": "Affinité aquatique", "enchantment.tridentChanneling": "Grand canal", "enchantment.tridentLoyalty": "Loyauté", - "enchantment.tridentRiptide": "Contre-courant", + "enchantment.tridentRiptide": "Impulsion", "enchantment.tridentImpaling": "Empalement", "entity.area_effect_cloud.name": "Zone d'effet nuage", "entity.armadillo.name": "Tatou", @@ -20896,8 +20124,8 @@ export const langs: Langs = { "entity.bee.name": "Abeille", "entity.blaze.name": "Blaze", "entity.boat.name": "Bateau", - "entity.bogged.name": "Embourbé", - "entity.breeze.name": "Breeze", + "entity.bogged.name": "Envasé", + "entity.breeze.name": "Souffleur", "entity.breeze_wind_charge_projectile.name": "Charge de vent", "entity.cat.name": "Chat", "entity.cave_spider.name": "Araignée venimeuse", @@ -20913,13 +20141,13 @@ export const langs: Langs = { "entity.drowned.name": "Noyé", "entity.egg.name": "Œuf", "entity.elder_guardian.name": "Ancien gardien", - "entity.ender_crystal.name": "Cristal Ender", + "entity.ender_crystal.name": "Cristel de l'Ender", "entity.ender_dragon.name": "Dragon Ender", "entity.enderman.name": "Enderman", "entity.endermite.name": "Endermite", "entity.ender_pearl.name": "Perle de l'Ender", "entity.evocation_illager.name": "Évocateur", - "entity.evocation_fang.name": "Croc d'évocateur", + "entity.evocation_fang.name": "Mâchoire d'Évocateur", "entity.eye_of_ender_signal.name": "Œil de Ender", "entity.falling_block.name": "Bloc qui tombe", "entity.fireball.name": "Boule de feu", @@ -20935,7 +20163,7 @@ export const langs: Langs = { "entity.ghast.name": "Ghast", "entity.glow_squid.name": "Poulpe luisant", "entity.piglin_brute.name": "Brute piglin", - "entity.guardian.name": "Gardien", + "entity.guardian.name": "Veilleur", "entity.hoglin.name": "Hoglin", "entity.horse.name": "Cheval", "entity.husk.name": "Incarnation", @@ -20950,7 +20178,7 @@ export const langs: Langs = { "entity.llama_spit.name": "Crachat de lama", "entity.magma_cube.name": "Cube de magma", "entity.minecart.name": "Wagonnet", - "entity.chest_minecart.name": "Wagonnet avec coffre", + "entity.chest_minecart.name": "Wagonnet de stockage", "entity.command_block_minecart.name": "Wagonnet avec bloc de commande", "entity.furnace_minecart.name": "Wagonnet à vapeur", "entity.hopper_minecart.name": "Wagonnet à entonnoir", @@ -21025,10 +20253,10 @@ export const langs: Langs = { "item.air.name": "Air", "item.apple.name": "Pomme", "item.axolotlAdultBodySingle.name": "Axolotl adulte %1$s", - "item.axolotlBabyBodySingle.name": "Axolotl bébé %1$s", + "item.axolotlBabyBodySingle.name": "Bébé axolotl %1$s", "item.axolotlColorLucy.name": "Leucique", "item.axolotlColorCyan.name": "Cyan", - "item.axolotlColorGold.name": "Doré", + "item.axolotlColorGold.name": "Or", "item.axolotlColorWild.name": "Brun", "item.axolotlColorBlue.name": "Bleu", "item.golden_apple.name": "Pomme dorée", @@ -21055,175 +20283,175 @@ export const langs: Langs = { "item.banner.border.silver": "Bordure gris pâle", "item.banner.border.white": "Bordure blanche", "item.banner.border.yellow": "Bordure jaune", - "item.banner.bricks.black": "Champ maçonné noir", - "item.banner.bricks.blue": "Champ maçonné bleu", - "item.banner.bricks.brown": "Champ maçonné brun", - "item.banner.bricks.cyan": "Champ maçonné cyan", - "item.banner.bricks.gray": "Champ maçonné gris", - "item.banner.bricks.green": "Champ maçonné vert", - "item.banner.bricks.lightBlue": "Champ maçonné bleu pâle", - "item.banner.bricks.lime": "Champ maçonné vert lime", - "item.banner.bricks.magenta": "Champ maçonné magenta", - "item.banner.bricks.orange": "Champ maçonné orange", - "item.banner.bricks.pink": "Champ maçonné rose", - "item.banner.bricks.purple": "Champ maçonné violet", - "item.banner.bricks.red": "Champ maçonné rouge", - "item.banner.bricks.silver": "Champ maçonné gris pâle", - "item.banner.bricks.white": "Champ maçonné blanc", - "item.banner.bricks.yellow": "Champ maçonné jaune", + "item.banner.bricks.black": "Déploiement de maçonnerie noir", + "item.banner.bricks.blue": "Déploiement de maçonnerie bleu", + "item.banner.bricks.brown": "Déploiement de maçonnerie brun", + "item.banner.bricks.cyan": "Déploiement de maçonnerie cyan", + "item.banner.bricks.gray": "Déploiement de maçonnerie gris", + "item.banner.bricks.green": "Déploiement de maçonnerie vert", + "item.banner.bricks.lightBlue": "Déploiement de maçonnerie bleu pâle", + "item.banner.bricks.lime": "Déploiement de maçonnerie vert lime", + "item.banner.bricks.magenta": "Déploiement de maçonnerie magenta", + "item.banner.bricks.orange": "Déploiement de maçonnerie orange", + "item.banner.bricks.pink": "Déploiement de maçonnerie rose", + "item.banner.bricks.purple": "Déploiement de maçonnerie violet", + "item.banner.bricks.red": "Déploiement de maçonnerie rouge", + "item.banner.bricks.silver": "Déploiement de maçonnerie gris pâle", + "item.banner.bricks.white": "Déploiement de maçonnerie blanc", + "item.banner.bricks.yellow": "Déploiement de maçonnerie jaune", "item.banner.brown.name": "Bannière brune", - "item.banner.circle.black": "Tourteau noir", - "item.banner.circle.blue": "Tourteau bleu", - "item.banner.circle.brown": "Tourteau brun", - "item.banner.circle.cyan": "Tourteau cyan", - "item.banner.circle.gray": "Tourteau gris", - "item.banner.circle.green": "Tourteau vert", + "item.banner.circle.black": "Rondelle noire", + "item.banner.circle.blue": "Rondelle bleue", + "item.banner.circle.brown": "Rondelle brune", + "item.banner.circle.cyan": "Rondelle cyan", + "item.banner.circle.gray": "Rondelle grise", + "item.banner.circle.green": "Rondelle verte", "item.banner.circle.lightBlue": "Tourteau bleu pâle", - "item.banner.circle.lime": "Tourteau vert lime", - "item.banner.circle.magenta": "Tourteau magenta", - "item.banner.circle.orange": "Tourteau orange", - "item.banner.circle.pink": "Tourteau rose", - "item.banner.circle.purple": "Tourteau violet", - "item.banner.circle.red": "Tourteau rouge", - "item.banner.circle.silver": "Tourteau gris pâle", - "item.banner.circle.white": "Tourteau blanc", - "item.banner.circle.yellow": "Tourteau jaune", - "item.banner.creeper.black": "Charge de Creeper noire", - "item.banner.creeper.blue": "Charge de Creeper bleu", - "item.banner.creeper.brown": "Charge de Creeper brune", - "item.banner.creeper.cyan": "Charge de Creeper cyan", - "item.banner.creeper.gray": "Charge de Creeper grise", - "item.banner.creeper.green": "Charge de Creeper verte", - "item.banner.creeper.lightBlue": "Charge de Creeper bleu pâle", - "item.banner.creeper.lime": "Charge de Creeper vert lime", - "item.banner.creeper.magenta": "Charge de Creeper magenta", - "item.banner.creeper.orange": "Charge de Creeper orange", - "item.banner.creeper.pink": "Charge de Creeper rose", - "item.banner.creeper.purple": "Charge de Creeper violet", - "item.banner.creeper.red": "Charge de Creeper rouge", - "item.banner.creeper.silver": "Charge de Creeper gris pâle", - "item.banner.creeper.white": "Charge de Creeper blanche", - "item.banner.creeper.yellow": "Charge de Creeper jaune", - "item.banner.cross.black": "Sautoir noir", - "item.banner.cross.blue": "Sautoir bleu", - "item.banner.cross.brown": "Sautoir brun", - "item.banner.cross.cyan": "Sautoir cyan", - "item.banner.cross.gray": "Sautoir gris", - "item.banner.cross.green": "Sautoir vert", - "item.banner.cross.lightBlue": "Sautoir bleu pâle", - "item.banner.cross.lime": "Sautoir vert lime", - "item.banner.cross.magenta": "Sautoir magenta", - "item.banner.cross.orange": "Sautoir orange", - "item.banner.cross.pink": "Sautoir rose", - "item.banner.cross.purple": "Sautoir violet", - "item.banner.cross.red": "Sautoir rouge", - "item.banner.cross.silver": "Sautoir gris pâle", - "item.banner.cross.white": "Sautoir blanc", - "item.banner.cross.yellow": "Sautoir jaune", - "item.banner.curly_border.black": "Bordure noire dentelée", + "item.banner.circle.lime": "Rondelle vert lime", + "item.banner.circle.magenta": "Rondelle magenta", + "item.banner.circle.orange": "Rondelle orange", + "item.banner.circle.pink": "Rondelle rose", + "item.banner.circle.purple": "Rondelle violette", + "item.banner.circle.red": "Rondelle rouge", + "item.banner.circle.silver": "Rondelle gris pâle", + "item.banner.circle.white": "Rondelle blanche", + "item.banner.circle.yellow": "Rondelle jaune", + "item.banner.creeper.black": "Visage de creeper noir", + "item.banner.creeper.blue": "Visage de creeper bleu", + "item.banner.creeper.brown": "Visage de creeper brun", + "item.banner.creeper.cyan": "Visage de creeper cyan", + "item.banner.creeper.gray": "Visage de creeper gris", + "item.banner.creeper.green": "Visage de creeper vert", + "item.banner.creeper.lightBlue": "Visage de creeper bleu pâle", + "item.banner.creeper.lime": "Visage de creeper vert lime", + "item.banner.creeper.magenta": "Visage de creeper magenta", + "item.banner.creeper.orange": "Visage de creeper orange", + "item.banner.creeper.pink": "Visage de creeper rose", + "item.banner.creeper.purple": "Visage de creeper violet", + "item.banner.creeper.red": "Visage de creeper rouge", + "item.banner.creeper.silver": "Visage de creeper gris pâle", + "item.banner.creeper.white": "Visage de creeper blanc", + "item.banner.creeper.yellow": "Visage de creeper jaune", + "item.banner.cross.black": "Saltire noir", + "item.banner.cross.blue": "Saltire bleu", + "item.banner.cross.brown": "Saltire brun", + "item.banner.cross.cyan": "Saltire cyan", + "item.banner.cross.gray": "Saltire gris", + "item.banner.cross.green": "Saltire verte", + "item.banner.cross.lightBlue": "Saltire bleu pâle", + "item.banner.cross.lime": "Saltire vert lime", + "item.banner.cross.magenta": "Saltire magenta", + "item.banner.cross.orange": "Saltire orange", + "item.banner.cross.pink": "Saltire rose", + "item.banner.cross.purple": "Saltire violet", + "item.banner.cross.red": "Saltire rouge", + "item.banner.cross.silver": "Saltire gris pâle", + "item.banner.cross.white": "Saltire blanche", + "item.banner.cross.yellow": "Saltire jaune", + "item.banner.curly_border.black": "Bordure dentelée noire", "item.banner.curly_border.blue": "Bordure dentelée bleue", "item.banner.curly_border.brown": "Bordure dentelée brune", "item.banner.curly_border.cyan": "Bordure dentelée cyan", - "item.banner.curly_border.gray": "Bordure grise dentelée", - "item.banner.curly_border.green": "Bordure verte dentelé", + "item.banner.curly_border.gray": "Bordure dentelée grise", + "item.banner.curly_border.green": "Bordure dentelée verte", "item.banner.curly_border.lightBlue": "Bordure dentelée bleu pâle", "item.banner.curly_border.lime": "Bordure dentelée vert lime", "item.banner.curly_border.magenta": "Bordure dentelée magenta", - "item.banner.curly_border.orange": "Bordure orange dentelé", + "item.banner.curly_border.orange": "Bordure dentelée orange", "item.banner.curly_border.pink": "Bordure dentelée rose", "item.banner.curly_border.purple": "Bordure dentelée violette", "item.banner.curly_border.red": "Bordure dentelée rouge", "item.banner.curly_border.silver": "Bordure dentelée gris pâle", "item.banner.curly_border.white": "Bordure dentelée blanche", - "item.banner.curly_border.yellow": "Bordure dentelé jaune", - "item.banner.cyan.name": "Bannière de cyan", - "item.banner.diagonal_left.black": "Noir par tranché senestre", - "item.banner.diagonal_left.blue": "Bleu par tranché senestre", - "item.banner.diagonal_left.brown": "Brun par tranché senestre", - "item.banner.diagonal_left.cyan": "Cyan par tranché senestre", - "item.banner.diagonal_left.gray": "Gris par tranché senestre", - "item.banner.diagonal_left.green": "Vert par tranché senestre", - "item.banner.diagonal_left.lightBlue": "Bleu pâle par tranché senestre", - "item.banner.diagonal_left.lime": "Vert lime par tranché senestre", - "item.banner.diagonal_left.magenta": "Magenta par tranché senestre", - "item.banner.diagonal_left.orange": "Orange par tranché senestre", - "item.banner.diagonal_left.pink": "Pal par tranché senestre", - "item.banner.diagonal_left.purple": "Violet par tranché senestre", - "item.banner.diagonal_left.red": "Rouge par tranché senestre", - "item.banner.diagonal_left.silver": "Gris pâle par tranché senestre", - "item.banner.diagonal_left.white": "Blanc par tranché senestre", - "item.banner.diagonal_left.yellow": "Jaune part tranché senestre", - "item.banner.diagonal_right.black": "Noir par tranché", - "item.banner.diagonal_right.blue": "Bleu par tranché", - "item.banner.diagonal_right.brown": "Brun par tranché", - "item.banner.diagonal_right.cyan": "Cyan par tranché", - "item.banner.diagonal_right.gray": "Gris par tranché", - "item.banner.diagonal_right.green": "Vert par tranché", - "item.banner.diagonal_right.lightBlue": "Bleu pâle par tranché", - "item.banner.diagonal_right.lime": "Vert lime par tranché", - "item.banner.diagonal_right.magenta": "Magenta par tranché", - "item.banner.diagonal_right.orange": "Orange par tranché", - "item.banner.diagonal_right.pink": "Pal par tranché", - "item.banner.diagonal_right.purple": "Violet par tranché", - "item.banner.diagonal_right.red": "Rouge par tranché", - "item.banner.diagonal_right.silver": "Gris pâle par tranché", - "item.banner.diagonal_right.white": "Blanc par tranché", - "item.banner.diagonal_right.yellow": "Jaune part tranché", - "item.banner.diagonal_up_left.black": "Noir par tranché inversé", - "item.banner.diagonal_up_left.blue": "Bleu par tranché inversé", - "item.banner.diagonal_up_left.brown": "Brun par tranché inversé", - "item.banner.diagonal_up_left.cyan": "Cyan par tranché inversé", - "item.banner.diagonal_up_left.gray": "Gris par tranché inversé", - "item.banner.diagonal_up_left.green": "Vert par tranché inversé", - "item.banner.diagonal_up_left.lightBlue": "Bleu pâle par tranché inversé", - "item.banner.diagonal_up_left.lime": "Vert lime par tranché inversé", - "item.banner.diagonal_up_left.magenta": "Magenta par tranché inversé", - "item.banner.diagonal_up_left.orange": "Orange par tranché inversé", - "item.banner.diagonal_up_left.pink": "Pal par tranché inversé", - "item.banner.diagonal_up_left.purple": "Violet par tranché inversé", - "item.banner.diagonal_up_left.red": "Rouge par tranché inversé", - "item.banner.diagonal_up_left.silver": "Gris pâle par tranché inversé", - "item.banner.diagonal_up_left.white": "Blanc par tranché inversé", - "item.banner.diagonal_up_left.yellow": "Jaune part tranché inversé", - "item.banner.diagonal_up_right.black": "Noir par tranché senestre inversé", - "item.banner.diagonal_up_right.blue": "Bleu par tranché senestre inversé", - "item.banner.diagonal_up_right.brown": "Brun par tranché senestre inversé", - "item.banner.diagonal_up_right.cyan": "Cyan par tranché senestre inversé", - "item.banner.diagonal_up_right.gray": "Gris par tranché senestre inversé", - "item.banner.diagonal_up_right.green": "Vert par tranché senestre inversé", - "item.banner.diagonal_up_right.lightBlue": "Bleu pâle par tranché senestre inversé", - "item.banner.diagonal_up_right.lime": "Vert lime par tranché senestre inversé", - "item.banner.diagonal_up_right.magenta": "Magenta par tranché senestre inversé", - "item.banner.diagonal_up_right.orange": "Orange par tranché senestre inversé", - "item.banner.diagonal_up_right.pink": "Pal par tranché senestre inversé", - "item.banner.diagonal_up_right.purple": "Violet par tranché senestre inversée", - "item.banner.diagonal_up_right.red": "Rouge par tranché senestre inversé", - "item.banner.diagonal_up_right.silver": "Gris pâle par tranché senestre inversé", - "item.banner.diagonal_up_right.white": "Blanc par tranché senestre inversé", - "item.banner.diagonal_up_right.yellow": "Jaune part tranché senestre inversé", - "item.banner.flow.black": "Flux noir", - "item.banner.flow.blue": "Flux bleu", - "item.banner.flow.brown": "Flux marron", - "item.banner.flow.cyan": "Flux cyan", - "item.banner.flow.gray": "Flux gris", - "item.banner.flow.green": "Flux vert", - "item.banner.flow.lightBlue": "Flux bleu ciel", - "item.banner.flow.lime": "Flux vert clair", - "item.banner.flow.magenta": "Flux magenta", - "item.banner.flow.orange": "Flux orange", - "item.banner.flow.pink": "Flux rose", - "item.banner.flow.purple": "Flux violet", - "item.banner.flow.red": "Flux rouge", - "item.banner.flow.silver": "Flux gris clair", - "item.banner.flow.white": "Flux blanc", - "item.banner.flow.yellow": "Flot jaune", + "item.banner.curly_border.yellow": "Bordure dentelée jaune", + "item.banner.cyan.name": "Bannière cyan", + "item.banner.diagonal_left.black": "Mi-pli senestre noir", + "item.banner.diagonal_left.blue": "Mi-pli senestre bleu", + "item.banner.diagonal_left.brown": "Mi-pli senestre brun", + "item.banner.diagonal_left.cyan": "Mi-pli senestre cyan", + "item.banner.diagonal_left.gray": "Mi-pli senestre gris", + "item.banner.diagonal_left.green": "Mi-pli senestre vert", + "item.banner.diagonal_left.lightBlue": "Mi-pli senestre bleu pâle", + "item.banner.diagonal_left.lime": "Mi-pli senestre vert lime", + "item.banner.diagonal_left.magenta": "Mi-pli senestre magenta", + "item.banner.diagonal_left.orange": "Mi-pli senestre orange", + "item.banner.diagonal_left.pink": "Mi-pli senestre rose", + "item.banner.diagonal_left.purple": "Mi-pli senestre violet", + "item.banner.diagonal_left.red": "Mi-pli senestre rouge", + "item.banner.diagonal_left.silver": "Mi-pli senestre gris pâle", + "item.banner.diagonal_left.white": "Mi-pli senestre blanc", + "item.banner.diagonal_left.yellow": "Mi-pli senestre jaune", + "item.banner.diagonal_right.black": "Mi-pli noir", + "item.banner.diagonal_right.blue": "Mi-pli bleu", + "item.banner.diagonal_right.brown": "Mi-pli brun", + "item.banner.diagonal_right.cyan": "Mi-pli cyan", + "item.banner.diagonal_right.gray": "Mi-pli gris", + "item.banner.diagonal_right.green": "Mi-pli vert", + "item.banner.diagonal_right.lightBlue": "Mi-pli bleu pâle", + "item.banner.diagonal_right.lime": "Mi-pli vert lime", + "item.banner.diagonal_right.magenta": "Mi-pli magenta", + "item.banner.diagonal_right.orange": "Mi-pli orange", + "item.banner.diagonal_right.pink": "Mi-pli rose", + "item.banner.diagonal_right.purple": "Mi-pli violet", + "item.banner.diagonal_right.red": "Mi-pli rouge", + "item.banner.diagonal_right.silver": "Mi-pli gris pâle", + "item.banner.diagonal_right.white": "Mi-pli blanc", + "item.banner.diagonal_right.yellow": "Mi-pli jaune", + "item.banner.diagonal_up_left.black": "Mi-pli inversé noir", + "item.banner.diagonal_up_left.blue": "Mi-pli inversé bleu", + "item.banner.diagonal_up_left.brown": "Mi-pli inversé brun", + "item.banner.diagonal_up_left.cyan": "Mi-pli inversé cyan", + "item.banner.diagonal_up_left.gray": "Mi-pli inversé gris", + "item.banner.diagonal_up_left.green": "Mi-pli inversé vert", + "item.banner.diagonal_up_left.lightBlue": "Mi-pli inversé bleu pâle", + "item.banner.diagonal_up_left.lime": "Mi-pli inversé vert lime", + "item.banner.diagonal_up_left.magenta": "Mi-pli inversé magenta", + "item.banner.diagonal_up_left.orange": "Mi-pli inversé orange", + "item.banner.diagonal_up_left.pink": "Mi-pli inversé rose", + "item.banner.diagonal_up_left.purple": "Mi-pli inversé violet", + "item.banner.diagonal_up_left.red": "Mi-pli inversé rouge", + "item.banner.diagonal_up_left.silver": "Mi-pli inversé gris pâle", + "item.banner.diagonal_up_left.white": "Mi-pli inversé blanc", + "item.banner.diagonal_up_left.yellow": "Mi-pli inversé jaune", + "item.banner.diagonal_up_right.black": "Mi-pli senestre inversé noir", + "item.banner.diagonal_up_right.blue": "Mi-pli senestre inversé bleu", + "item.banner.diagonal_up_right.brown": "Mi-pli senestre inversé brun", + "item.banner.diagonal_up_right.cyan": "Mi-pli senestre inversé cyan", + "item.banner.diagonal_up_right.gray": "Mi-pli senestre inversé gris", + "item.banner.diagonal_up_right.green": "Mi-pli senestre inversé vert", + "item.banner.diagonal_up_right.lightBlue": "Mi-pli senestre inversé bleu pâle", + "item.banner.diagonal_up_right.lime": "Mi-pli senestre inversé vert lime", + "item.banner.diagonal_up_right.magenta": "Mi-pli senestre inversé magenta", + "item.banner.diagonal_up_right.orange": "Mi-pli senestre inversé orange", + "item.banner.diagonal_up_right.pink": "Mi-pli senestre inversé rose", + "item.banner.diagonal_up_right.purple": "Mi-pli senestre inversé violet", + "item.banner.diagonal_up_right.red": "Mi-pli senestre inversé rouge", + "item.banner.diagonal_up_right.silver": "Mi-pli senestre inversé gris pâle", + "item.banner.diagonal_up_right.white": "Mi-pli senestre inversé blanc", + "item.banner.diagonal_up_right.yellow": "Mi-pli senestre inversé jaune", + "item.banner.flow.black": "Tourbillon noir", + "item.banner.flow.blue": "Tourbillon bleu", + "item.banner.flow.brown": "Tourbillon brun", + "item.banner.flow.cyan": "Tourbillon cyan", + "item.banner.flow.gray": "Tourbillon gris", + "item.banner.flow.green": "Tourbillon vert", + "item.banner.flow.lightBlue": "Flot bleu pâle", + "item.banner.flow.lime": "Tourbillon vert lime", + "item.banner.flow.magenta": "Tourbillon magenta", + "item.banner.flow.orange": "Tourbillon orange", + "item.banner.flow.pink": "Tourbillon rose", + "item.banner.flow.purple": "Tourbillon violet", + "item.banner.flow.red": "Tourbillon rouge", + "item.banner.flow.silver": "Tourbillon gris pâle", + "item.banner.flow.white": "Tourbillon blanc", + "item.banner.flow.yellow": "Tourbillon jaune", "item.banner.flower.black": "Charge de fleur noire", "item.banner.flower.blue": "Charge de fleur bleue", "item.banner.flower.brown": "Charge de fleur brune", - "item.banner.flower.cyan": "Charge de fleur de cyan", + "item.banner.flower.cyan": "Charge de fleur cyan", "item.banner.flower.gray": "Charge de fleur grise", "item.banner.flower.green": "Charge de fleur verte", - "item.banner.flower.lightBlue": "Fleur bleu pâle", + "item.banner.flower.lightBlue": "Charge de fleur bleu pâle", "item.banner.flower.lime": "Charge de fleur vert lime", "item.banner.flower.magenta": "Charge de fleur magenta", "item.banner.flower.orange": "Charge de fleur orange", @@ -21249,127 +20477,127 @@ export const langs: Langs = { "item.banner.globe.silver": "Globe gris pâle", "item.banner.globe.white": "Globe blanc", "item.banner.globe.yellow": "Globe jaune", - "item.banner.gradient.black": "Dégradé de noir", - "item.banner.gradient.blue": "Dégradé de bleu", - "item.banner.gradient.brown": "Dégradé de brun", - "item.banner.gradient.cyan": "Dégradé de cyan", - "item.banner.gradient.gray": "Dégradé de gris", - "item.banner.gradient.green": "Dégradé de vert", - "item.banner.gradient.lightBlue": "Dégradé de bleu pâle", - "item.banner.gradient.lime": "Dégradé de vert lime", - "item.banner.gradient.magenta": "Dégradé de magenta", - "item.banner.gradient.orange": "Dégradé d'orange", - "item.banner.gradient.pink": "Dégradé de rose", - "item.banner.gradient.purple": "Dégradé de violet", - "item.banner.gradient.red": "Dégradé de rouge", - "item.banner.gradient.silver": "Dégradé de gris pâle", - "item.banner.gradient.white": "Dégradé de blanc", - "item.banner.gradient.yellow": "Dégradé de jaune", - "item.banner.gradient_up.black": "Base noire en dégradé", - "item.banner.gradient_up.blue": "Base bleue en dégradé", - "item.banner.gradient_up.brown": "Base brune en dégradé", - "item.banner.gradient_up.cyan": "Base cyan en dégradé", - "item.banner.gradient_up.gray": "Base grise en dégradé", - "item.banner.gradient_up.green": "Base verte en dégradé", - "item.banner.gradient_up.lightBlue": "Base bleu pâle en dégradé", - "item.banner.gradient_up.lime": "Base vert lime en dégradé", - "item.banner.gradient_up.magenta": "Dégradé de base magenta", - "item.banner.gradient_up.orange": "Dégradé de base orange", - "item.banner.gradient_up.pink": "Dégradé de base rose", - "item.banner.gradient_up.purple": "Dégradé de base violette", - "item.banner.gradient_up.red": "Dégradé de base rouge", - "item.banner.gradient_up.silver": "Base gris pâle en dégradé", - "item.banner.gradient_up.white": "Dégradé de base blanche", - "item.banner.gradient_up.yellow": "Dégradé de base jaune", + "item.banner.gradient.black": "Dégradés de noir", + "item.banner.gradient.blue": "Dégradés de bleu", + "item.banner.gradient.brown": "Dégradés de brun", + "item.banner.gradient.cyan": "Dégradés de cyan", + "item.banner.gradient.gray": "Dégradés de gris", + "item.banner.gradient.green": "Dégradés de vert", + "item.banner.gradient.lightBlue": "Dégradés de bleu pâle", + "item.banner.gradient.lime": "Dégradés de vert lime", + "item.banner.gradient.magenta": "Dégradés de magenta", + "item.banner.gradient.orange": "Dégradés d'orange", + "item.banner.gradient.pink": "Dégradés de rose", + "item.banner.gradient.purple": "Dégradés de violet", + "item.banner.gradient.red": "Dégradés de rouge", + "item.banner.gradient.silver": "Dégradés de gris pâle", + "item.banner.gradient.white": "Dégradés de blanc", + "item.banner.gradient.yellow": "Dégradés de jaune", + "item.banner.gradient_up.black": "Dégradés en pointe noirs", + "item.banner.gradient_up.blue": "Dégradés en pointe bleus", + "item.banner.gradient_up.brown": "Dégradés en pointe bruns", + "item.banner.gradient_up.cyan": "Dégradés en pointe cyan", + "item.banner.gradient_up.gray": "Dégradés en pointe gris", + "item.banner.gradient_up.green": "Dégradés en pointe verts", + "item.banner.gradient_up.lightBlue": "Base en gradient bleu pâle", + "item.banner.gradient_up.lime": "Dégradés en pointe vert lime", + "item.banner.gradient_up.magenta": "Dégradés en pointe magenta", + "item.banner.gradient_up.orange": "Dégradés en pointe orange", + "item.banner.gradient_up.pink": "Dégradés en pointe roses", + "item.banner.gradient_up.purple": "Dégradés en pointe violets", + "item.banner.gradient_up.red": "Dégradés en pointe rouges", + "item.banner.gradient_up.silver": "Dégradés en pointe gris pâle", + "item.banner.gradient_up.white": "Dégradés en pointe blancs", + "item.banner.gradient_up.yellow": "Dégradés en pointe jaunes", "item.banner.gray.name": "Bannière grise", "item.banner.green.name": "Bannière verte", "item.banner.guster.black": "Tornade noire", "item.banner.guster.blue": "Tornade bleue", - "item.banner.guster.brown": "Tornade marron", + "item.banner.guster.brown": "Tornade brune", "item.banner.guster.cyan": "Tornade cyan", "item.banner.guster.gray": "Tornade grise", "item.banner.guster.green": "Tornade verte", "item.banner.guster.lightBlue": "Tornade bleu pâle", - "item.banner.guster.lime": "Tornade vert clair", + "item.banner.guster.lime": "Tornade vert lime", "item.banner.guster.magenta": "Tornade magenta", "item.banner.guster.orange": "Tornade orange", "item.banner.guster.pink": "Tornade rose", "item.banner.guster.purple": "Tornade violette", "item.banner.guster.red": "Tornade rouge", - "item.banner.guster.silver": "Tornade gris clair", + "item.banner.guster.silver": "Tornade gris pâle", "item.banner.guster.white": "Tornade blanche", "item.banner.guster.yellow": "Tornade jaune", - "item.banner.half_horizontal.black": "Noir par fasce", - "item.banner.half_horizontal.blue": "Bleu par fasce", - "item.banner.half_horizontal.brown": "Brun par fasce", - "item.banner.half_horizontal.cyan": "Cyan par fasce", - "item.banner.half_horizontal.gray": "Gris par fasce", - "item.banner.half_horizontal.green": "Vert par fasce", - "item.banner.half_horizontal.lightBlue": "Bleu pâle par fasce", - "item.banner.half_horizontal.lime": "Vert lime par fasce", - "item.banner.half_horizontal.magenta": "Magenta par fasce", - "item.banner.half_horizontal.orange": "Orange par fasce", - "item.banner.half_horizontal.pink": "Rose par fasce", - "item.banner.half_horizontal.purple": "Violet par fasce", - "item.banner.half_horizontal.red": "Rouge par fasce", - "item.banner.half_horizontal.silver": "Gris pâle par fasce", - "item.banner.half_horizontal.white": "Blanc par fasce", - "item.banner.half_horizontal.yellow": "Jaune par fasce", - "item.banner.half_horizontal_bottom.black": "Noir par fasce inversée", - "item.banner.half_horizontal_bottom.blue": "Bleu par fasce inversée", - "item.banner.half_horizontal_bottom.brown": "Brun par fasce inversée", - "item.banner.half_horizontal_bottom.cyan": "Cyan par fasce inversée", - "item.banner.half_horizontal_bottom.gray": "Gris par fasce inversée", - "item.banner.half_horizontal_bottom.green": "Vert par fasce inversé", - "item.banner.half_horizontal_bottom.lightBlue": "Bleu pâle par fasce inversé", - "item.banner.half_horizontal_bottom.lime": "Vert lime par fasce inversée", - "item.banner.half_horizontal_bottom.magenta": "Magenta par fasce inversée", - "item.banner.half_horizontal_bottom.orange": "Orange par fasce inversé", - "item.banner.half_horizontal_bottom.pink": "Rose par fasce inversée", - "item.banner.half_horizontal_bottom.purple": "Violet par fasce inversée", - "item.banner.half_horizontal_bottom.red": "Rouge par fasce inversée", - "item.banner.half_horizontal_bottom.silver": "Gris pâle par fasce inversée", - "item.banner.half_horizontal_bottom.white": "Blanc par fasce inversé", - "item.banner.half_horizontal_bottom.yellow": "Jaune par fasce inversée", - "item.banner.half_vertical.black": "Noir par pal", - "item.banner.half_vertical.blue": "Bleu par pal", - "item.banner.half_vertical.brown": "Brun par pal", - "item.banner.half_vertical.cyan": "Cyan par pal", - "item.banner.half_vertical.gray": "Gris par pal", - "item.banner.half_vertical.green": "Vert par pal", - "item.banner.half_vertical.lightBlue": "Bleu pâle par pal", - "item.banner.half_vertical.lime": "Vert lime par pal", - "item.banner.half_vertical.magenta": "Magenta par pal", - "item.banner.half_vertical.orange": "Orange par pal", - "item.banner.half_vertical.pink": "Rose par pal", - "item.banner.half_vertical.purple": "Violet par pal", - "item.banner.half_vertical.red": "Rouge par pal", - "item.banner.half_vertical.silver": "Gris pâle par pal", - "item.banner.half_vertical.white": "Blanc par pal", - "item.banner.half_vertical.yellow": "Jaune par pal", - "item.banner.half_vertical_right.black": "Noir par pal inversé", - "item.banner.half_vertical_right.blue": "Bleu par pal inversé", - "item.banner.half_vertical_right.brown": "Brun par pal inversé", - "item.banner.half_vertical_right.cyan": "Cyan par pal inversé", - "item.banner.half_vertical_right.gray": "Gris par pal inversé", - "item.banner.half_vertical_right.green": "Vert par pal inversé", - "item.banner.half_vertical_right.lightBlue": "Bleu pâle par pal inversé", - "item.banner.half_vertical_right.lime": "Vert lime par pal inversé", - "item.banner.half_vertical_right.magenta": "Magenta par pal inversé", - "item.banner.half_vertical_right.orange": "Orange par pal inversé", - "item.banner.half_vertical_right.pink": "Rose par pal inversé", - "item.banner.half_vertical_right.purple": "Violet par pal inversé", - "item.banner.half_vertical_right.red": "Rouge par pal inversé", - "item.banner.half_vertical_right.silver": "Gris pâle par pal inversé", - "item.banner.half_vertical_right.white": "Blanc par pal inversé", - "item.banner.half_vertical_right.yellow": "Jaune par pal inversé", + "item.banner.half_horizontal.black": "Mi-fasce noir", + "item.banner.half_horizontal.blue": "Mi-fasce bleu", + "item.banner.half_horizontal.brown": "Mi-fasce brun", + "item.banner.half_horizontal.cyan": "Mi-fasce cyan", + "item.banner.half_horizontal.gray": "Mi-fasce gris", + "item.banner.half_horizontal.green": "Mi-fasce vert", + "item.banner.half_horizontal.lightBlue": "Mi-fasce bleu pâle", + "item.banner.half_horizontal.lime": "Mi-fasce vert lime", + "item.banner.half_horizontal.magenta": "Mi-fasce magenta", + "item.banner.half_horizontal.orange": "Mi-fasce orange", + "item.banner.half_horizontal.pink": "Mi-fasce rose", + "item.banner.half_horizontal.purple": "Mi-fasce violet", + "item.banner.half_horizontal.red": "Mi-fasce rouge", + "item.banner.half_horizontal.silver": "Mi-fasce gris pâle", + "item.banner.half_horizontal.white": "Mi-fasce blanc", + "item.banner.half_horizontal.yellow": "Mi-fasce jaune", + "item.banner.half_horizontal_bottom.black": "Mi-fasce inverse noir", + "item.banner.half_horizontal_bottom.blue": "Mi-fasce inverse bleu", + "item.banner.half_horizontal_bottom.brown": "Mi-fasce inverse brun", + "item.banner.half_horizontal_bottom.cyan": "Mi-fasce inverse cyan", + "item.banner.half_horizontal_bottom.gray": "Mi-fasce inverse gris", + "item.banner.half_horizontal_bottom.green": "Mi-fasce inverse vert", + "item.banner.half_horizontal_bottom.lightBlue": "Mi-fasce inverse bleu pâle", + "item.banner.half_horizontal_bottom.lime": "Mi-fasce inverse vert lime", + "item.banner.half_horizontal_bottom.magenta": "Mi-fasce inverse magenta", + "item.banner.half_horizontal_bottom.orange": "Mi-fasce inverse orange", + "item.banner.half_horizontal_bottom.pink": "Mi-fasce inverse rose", + "item.banner.half_horizontal_bottom.purple": "Mi-fasce inverse violet", + "item.banner.half_horizontal_bottom.red": "Mi-fasce inverse rouge", + "item.banner.half_horizontal_bottom.silver": "Mi-fasce inverse gris pâle", + "item.banner.half_horizontal_bottom.white": "Mi-fasce inverse blanc", + "item.banner.half_horizontal_bottom.yellow": "Mi-fasce inverse jaune", + "item.banner.half_vertical.black": "Mi-pâle noir", + "item.banner.half_vertical.blue": "Mi-pâle bleu", + "item.banner.half_vertical.brown": "Mi-pâle brun", + "item.banner.half_vertical.cyan": "Mi-pâle cyan", + "item.banner.half_vertical.gray": "Mi-pâle gris", + "item.banner.half_vertical.green": "Mi-pâle vert", + "item.banner.half_vertical.lightBlue": "Mi-pâle bleu pâle", + "item.banner.half_vertical.lime": "Mi-pâle vert lime", + "item.banner.half_vertical.magenta": "Mi-pâle magenta", + "item.banner.half_vertical.orange": "Mi-pâle orange", + "item.banner.half_vertical.pink": "Mi-pâle rose", + "item.banner.half_vertical.purple": "Mi-pâle violet", + "item.banner.half_vertical.red": "Mi-pâle rouge", + "item.banner.half_vertical.silver": "Mi-pâle gris pâle", + "item.banner.half_vertical.white": "Mi-pâle blanc", + "item.banner.half_vertical.yellow": "Mi-pâle jaune", + "item.banner.half_vertical_right.black": "Mi-pâle inversé noir", + "item.banner.half_vertical_right.blue": "Mi-pâle inversé bleu", + "item.banner.half_vertical_right.brown": "Mi-pâle inversé brun", + "item.banner.half_vertical_right.cyan": "Mi-pâle inversé cyan", + "item.banner.half_vertical_right.gray": "Mi-pâle inversé gris", + "item.banner.half_vertical_right.green": "Mi-pâle inversé vert", + "item.banner.half_vertical_right.lightBlue": "Mi-pâle inversé bleu pâle", + "item.banner.half_vertical_right.lime": "Mi-pâle inversé vert lime", + "item.banner.half_vertical_right.magenta": "Mi-pâle inversé magenta", + "item.banner.half_vertical_right.orange": "Mi-pâle inversé orange", + "item.banner.half_vertical_right.pink": "Mi-pâle inversé rose", + "item.banner.half_vertical_right.purple": "Mi-pâle inversé violet", + "item.banner.half_vertical_right.red": "Mi-pâle inversé rouge", + "item.banner.half_vertical_right.silver": "Mi-pâle inversé gris pâle", + "item.banner.half_vertical_right.white": "Mi-pâle inversé blanc", + "item.banner.half_vertical_right.yellow": "Mi-pâle inversé jaune", "item.banner.illager_captain.name": "Bannière sinistre", "item.banner.lightBlue.name": "Bannière bleu pâle", "item.banner.lime.name": "Bannière vert lime", "item.banner.magenta.name": "Bannière magenta", - "item.banner.mojang.black": "chose noire", + "item.banner.mojang.black": "Chose noire", "item.banner.mojang.blue": "Chose bleue", - "item.banner.mojang.brown": "Logo brun", + "item.banner.mojang.brown": "Chose brune", "item.banner.mojang.cyan": "Chose cyan", "item.banner.mojang.gray": "Chose grise", "item.banner.mojang.green": "Chose verte", @@ -21420,102 +20648,102 @@ export const langs: Langs = { "item.banner.rhombus.white": "Losange blanc", "item.banner.rhombus.yellow": "Losange jaune", "item.banner.silver.name": "Bannière gris pâle", - "item.banner.skull.black": "Tête de mort noire", - "item.banner.skull.blue": "Tête de mort bleue", - "item.banner.skull.brown": "Tête de mort brune", - "item.banner.skull.cyan": "Tête de mort cyan", - "item.banner.skull.gray": "Tête de mort gris", - "item.banner.skull.green": "Tête de mort verte", - "item.banner.skull.lightBlue": "Tête de mort bleu pâle", - "item.banner.skull.lime": "Tête de mort vert lime", - "item.banner.skull.magenta": "Tête de mort magenta", - "item.banner.skull.orange": "Tête de mort orange", - "item.banner.skull.pink": "Tête de mort rose", - "item.banner.skull.purple": "Tête de mort violette", - "item.banner.skull.red": "Tête de mort rouge", - "item.banner.skull.silver": "Tête de mort gris pâle", - "item.banner.skull.white": "Tête de mort blanche", - "item.banner.skull.yellow": "Tête de mort jaune", - "item.banner.small_stripes.black": "Palé noir", - "item.banner.small_stripes.blue": "Palé bleu", - "item.banner.small_stripes.brown": "Palé brun", - "item.banner.small_stripes.cyan": "Palé cyan", - "item.banner.small_stripes.gray": "Palé gris", - "item.banner.small_stripes.green": "Palé vert", - "item.banner.small_stripes.lightBlue": "Palé bleu pâle", - "item.banner.small_stripes.lime": "Palé vert lime", - "item.banner.small_stripes.magenta": "Palé magenta", - "item.banner.small_stripes.orange": "Palé orange", - "item.banner.small_stripes.pink": "Palé rose", - "item.banner.small_stripes.purple": "Palé violet", - "item.banner.small_stripes.red": "Palé rouge", - "item.banner.small_stripes.silver": "Palé gris pâle", - "item.banner.small_stripes.white": "Palé blanc", - "item.banner.small_stripes.yellow": "Palé jaune", - "item.banner.square_bottom_left.black": "Canton dextre de base noire", - "item.banner.square_bottom_left.blue": "Canton dextre de la pointe bleue", - "item.banner.square_bottom_left.brown": "Canton dextre de base brune", - "item.banner.square_bottom_left.cyan": "Canton dextre de base cyan", - "item.banner.square_bottom_left.gray": "Canton dextre de base grise", - "item.banner.square_bottom_left.green": "Canton dextre de base verte", - "item.banner.square_bottom_left.lightBlue": "Canton dextre de base bleu pâle", - "item.banner.square_bottom_left.lime": "Canton dextre de base vert lime", - "item.banner.square_bottom_left.magenta": "Canton dextre de base magenta", - "item.banner.square_bottom_left.orange": "Canton dextre de base orange", - "item.banner.square_bottom_left.pink": "Canton dextre de base rose", - "item.banner.square_bottom_left.purple": "Canton dextre de base violette", - "item.banner.square_bottom_left.red": "Canton dextre de base rouge", - "item.banner.square_bottom_left.silver": "Canton dextre de base gris pâle", - "item.banner.square_bottom_left.white": "Canton dextre de base blanche", - "item.banner.square_bottom_left.yellow": "Canton dextre de base jaune", - "item.banner.square_bottom_right.black": "Canton senestre de base noire", - "item.banner.square_bottom_right.blue": "Canton senestre de base bleue", - "item.banner.square_bottom_right.brown": "Canton senestre de base brune", - "item.banner.square_bottom_right.cyan": "Canton senestre de base cyan", - "item.banner.square_bottom_right.gray": "Canton senestre de base grise", - "item.banner.square_bottom_right.green": "Canton senestre de base verte", - "item.banner.square_bottom_right.lightBlue": "Canton senestre de base bleu pâle", - "item.banner.square_bottom_right.lime": "Canton senestre de base vert lime", - "item.banner.square_bottom_right.magenta": "Canton senestre de base magenta", - "item.banner.square_bottom_right.orange": "Canton senestre de base orange", - "item.banner.square_bottom_right.pink": "Canton senestre de base rose", - "item.banner.square_bottom_right.purple": "Canton senestre de base violette", - "item.banner.square_bottom_right.red": "Canton senestre de base rouge", - "item.banner.square_bottom_right.silver": "Canton senestre de base gris pâle", - "item.banner.square_bottom_right.white": "Canton senestre de base blanche", - "item.banner.square_bottom_right.yellow": "Canton senestre de base jaune", - "item.banner.square_top_left.black": "Canton dextre de chef noir", - "item.banner.square_top_left.blue": "Canton dextre de chef bleu", - "item.banner.square_top_left.brown": "Canton dextre de chef brun", - "item.banner.square_top_left.cyan": "Canton dextre de chef cyan", - "item.banner.square_top_left.gray": "Canton dextre de chef gris", - "item.banner.square_top_left.green": "Canton dextre de chef vert", - "item.banner.square_top_left.lightBlue": "Canton dextre de chef bleu pâle", - "item.banner.square_top_left.lime": "Canton dextre de chef vert lime", - "item.banner.square_top_left.magenta": "Canton dextre de chef magenta", - "item.banner.square_top_left.orange": "Canton dextre de chef orange", - "item.banner.square_top_left.pink": "Canton dextre de chef rose", - "item.banner.square_top_left.purple": "Canton dextre de chef violet", - "item.banner.square_top_left.red": "Canton dextre de chef rouge", - "item.banner.square_top_left.silver": "Canton dextre de chef gris pâle", - "item.banner.square_top_left.white": "Canton dextre de chef blanc", - "item.banner.square_top_left.yellow": "Canton dextre de chef jaune", - "item.banner.square_top_right.black": "Canton senestre de chef noir", - "item.banner.square_top_right.blue": "Canton senestre de chef bleu", - "item.banner.square_top_right.brown": "Canton senestre de chef brun", - "item.banner.square_top_right.cyan": "Canton senestre de chef cyan", - "item.banner.square_top_right.gray": "Canton senestre de chef gris", - "item.banner.square_top_right.green": "Canton senestre de chef vert", - "item.banner.square_top_right.lightBlue": "Canton senestre de chef bleu pâle", - "item.banner.square_top_right.lime": "Canton senestre de chef vert lime", - "item.banner.square_top_right.magenta": "Canton senestre de chef magenta", - "item.banner.square_top_right.orange": "Canton senestre de chef orange", - "item.banner.square_top_right.pink": "Canton senestre de chef rose", - "item.banner.square_top_right.purple": "Canton senestre de chef violet", - "item.banner.square_top_right.red": "Canton senestre de chef rouge", - "item.banner.square_top_right.silver": "Canton senestre de chef gris pâle", - "item.banner.square_top_right.white": "Canton senestre de chef blanc", - "item.banner.square_top_right.yellow": "Canton senestre de chef jaune", + "item.banner.skull.black": "Charge de crâne noire", + "item.banner.skull.blue": "Charge de crâne bleue", + "item.banner.skull.brown": "Charge de crâne brune", + "item.banner.skull.cyan": "Charge de crâne cyan", + "item.banner.skull.gray": "Charge de crâne grise", + "item.banner.skull.green": "Charge de crâne verte", + "item.banner.skull.lightBlue": "Charge de crâne bleu pâle", + "item.banner.skull.lime": "Charge de crâne vert lime", + "item.banner.skull.magenta": "Charge de crâne magenta", + "item.banner.skull.orange": "Charge de crâne orange", + "item.banner.skull.pink": "Charge de crâne rose", + "item.banner.skull.purple": "Charge de crâne violette", + "item.banner.skull.red": "Charge de crâne rouge", + "item.banner.skull.silver": "Charge de crâne gris pâle", + "item.banner.skull.white": "Charge de crâne blanche", + "item.banner.skull.yellow": "Charge de crâne jaune", + "item.banner.small_stripes.black": "Strié vertical noir", + "item.banner.small_stripes.blue": "Strié vertical bleu", + "item.banner.small_stripes.brown": "Strié vertical brun", + "item.banner.small_stripes.cyan": "Strié vertical cyan", + "item.banner.small_stripes.gray": "Strié vertical gris", + "item.banner.small_stripes.green": "Strié vertical vert", + "item.banner.small_stripes.lightBlue": "Strié vertical bleu pâle", + "item.banner.small_stripes.lime": "Strié vertical vert lime", + "item.banner.small_stripes.magenta": "Strié vertical magenta", + "item.banner.small_stripes.orange": "Strié vertical orange", + "item.banner.small_stripes.pink": "Strié vertical rose", + "item.banner.small_stripes.purple": "Strié vertical violet", + "item.banner.small_stripes.red": "Strié vertical rouge", + "item.banner.small_stripes.silver": "Strié vertical gris pâle", + "item.banner.small_stripes.white": "Strié vertical blanc", + "item.banner.small_stripes.yellow": "Strié vertical jaune", + "item.banner.square_bottom_left.black": "Base, canton dextre, noir", + "item.banner.square_bottom_left.blue": "Base, canton dextre, bleu", + "item.banner.square_bottom_left.brown": "Base, canton dextre, brun", + "item.banner.square_bottom_left.cyan": "Base, canton dextre, cyan", + "item.banner.square_bottom_left.gray": "Base, canton dextre, gris", + "item.banner.square_bottom_left.green": "Base, canton dextre, vert", + "item.banner.square_bottom_left.lightBlue": "Base, canton dextre, bleu pâle", + "item.banner.square_bottom_left.lime": "Base, canton dextre, vert lime", + "item.banner.square_bottom_left.magenta": "Base, canton dextre, magenta", + "item.banner.square_bottom_left.orange": "Base, canton dextre, orange", + "item.banner.square_bottom_left.pink": "Base, canton dextre, rose", + "item.banner.square_bottom_left.purple": "Base, canton dextre, violet", + "item.banner.square_bottom_left.red": "Base, canton dextre, rouge", + "item.banner.square_bottom_left.silver": "Base, canton dextre, gris pâle", + "item.banner.square_bottom_left.white": "Base, canton dextre, blanc", + "item.banner.square_bottom_left.yellow": "Base, canton dextre, jaune", + "item.banner.square_bottom_right.black": "Base, canton senestre, noir", + "item.banner.square_bottom_right.blue": "Base, canton senestre, bleu", + "item.banner.square_bottom_right.brown": "Base, canton senestre, brun", + "item.banner.square_bottom_right.cyan": "Base, canton senestre, cyan", + "item.banner.square_bottom_right.gray": "Base, canton senestre, gris", + "item.banner.square_bottom_right.green": "Base, canton senestre, vert", + "item.banner.square_bottom_right.lightBlue": "Base, canton senestre, bleu pâle", + "item.banner.square_bottom_right.lime": "Base, canton senestre, vert lime", + "item.banner.square_bottom_right.magenta": "Base, canton senestre, magenta", + "item.banner.square_bottom_right.orange": "Base, canton senestre, orange", + "item.banner.square_bottom_right.pink": "Base, canton senestre, rose", + "item.banner.square_bottom_right.purple": "Base, canton senestre, violet", + "item.banner.square_bottom_right.red": "Base, canton senestre, rouge", + "item.banner.square_bottom_right.silver": "Base, canton senestre, gris pâle", + "item.banner.square_bottom_right.white": "Base, canton senestre, blanc", + "item.banner.square_bottom_right.yellow": "Base, canton senestre, jaune", + "item.banner.square_top_left.black": "Chef canton dextre noir", + "item.banner.square_top_left.blue": "Chef canton dextre bleu", + "item.banner.square_top_left.brown": "Chef canton dextre brun", + "item.banner.square_top_left.cyan": "Chef canton dextre cyan", + "item.banner.square_top_left.gray": "Chef canton dextre gris", + "item.banner.square_top_left.green": "Chef canton dextre vert", + "item.banner.square_top_left.lightBlue": "Chef canton dextre bleu pâle", + "item.banner.square_top_left.lime": "Chef canton dextre vert lime", + "item.banner.square_top_left.magenta": "Chef canton dextre magenta", + "item.banner.square_top_left.orange": "Chef canton dextre orange", + "item.banner.square_top_left.pink": "Chef canton dextre rose", + "item.banner.square_top_left.purple": "Chef canton dextre violet", + "item.banner.square_top_left.red": "Chef canton dextre rouge", + "item.banner.square_top_left.silver": "Chef canton dextre gris pâle", + "item.banner.square_top_left.white": "Chef canton dextre blanc", + "item.banner.square_top_left.yellow": "Chef canton dextre jaune", + "item.banner.square_top_right.black": "Chef canton senestre noir", + "item.banner.square_top_right.blue": "Chef canton senestre bleu", + "item.banner.square_top_right.brown": "Chef canton senestre brun", + "item.banner.square_top_right.cyan": "Chef canton senestre cyan", + "item.banner.square_top_right.gray": "Chef canton senestre gris", + "item.banner.square_top_right.green": "Chef canton senestre vert", + "item.banner.square_top_right.lightBlue": "Chef canton senestre bleu pâle", + "item.banner.square_top_right.lime": "Chef canton senestre vert lime", + "item.banner.square_top_right.magenta": "Chef canton senestre magenta", + "item.banner.square_top_right.orange": "Chef canton senestre orange", + "item.banner.square_top_right.pink": "Chef canton senestre rose", + "item.banner.square_top_right.purple": "Chef canton senestre violet", + "item.banner.square_top_right.red": "Chef canton senestre rouge", + "item.banner.square_top_right.silver": "Chef canton senestre gris pâle", + "item.banner.square_top_right.white": "Chef canton senestre blanc", + "item.banner.square_top_right.yellow": "Chef canton senestre jaune", "item.banner.straight_cross.black": "Croix noire", "item.banner.straight_cross.blue": "Croix bleue", "item.banner.straight_cross.brown": "Croix brune", @@ -21548,71 +20776,71 @@ export const langs: Langs = { "item.banner.stripe_bottom.silver": "Fasce de base gris pâle", "item.banner.stripe_bottom.white": "Fasce de base blanche", "item.banner.stripe_bottom.yellow": "Fasce de base jaune", - "item.banner.stripe_center.black": "Pal noir", - "item.banner.stripe_center.blue": "Pal bleu", - "item.banner.stripe_center.brown": "Pal brun", + "item.banner.stripe_center.black": "Pâle noir", + "item.banner.stripe_center.blue": "Pâle bleu", + "item.banner.stripe_center.brown": "Pâle brun", "item.banner.stripe_center.cyan": "Pal cyan", - "item.banner.stripe_center.gray": "Pal gris", + "item.banner.stripe_center.gray": "Pâle gris", "item.banner.stripe_center.green": "Pal vert", - "item.banner.stripe_center.lightBlue": "Pal bleu pâle", + "item.banner.stripe_center.lightBlue": "Pâle bleu pâle", "item.banner.stripe_center.lime": "Pal vert lime", - "item.banner.stripe_center.magenta": "Pal magenta", + "item.banner.stripe_center.magenta": "Pâle magenta", "item.banner.stripe_center.orange": "Pal orange", - "item.banner.stripe_center.pink": "Pal rose", - "item.banner.stripe_center.purple": "Pal violet", + "item.banner.stripe_center.pink": "Pâle rose", + "item.banner.stripe_center.purple": "Pâle violet", "item.banner.stripe_center.red": "Pal rouge", "item.banner.stripe_center.silver": "Pal gris pâle", - "item.banner.stripe_center.white": "Pal blanc", + "item.banner.stripe_center.white": "Pâle blanc", "item.banner.stripe_center.yellow": "Pal jaune", - "item.banner.stripe_downleft.black": "Senestre de bande noire", - "item.banner.stripe_downleft.blue": "Bande senestre de bleu", - "item.banner.stripe_downleft.brown": "bande senestre brune", - "item.banner.stripe_downleft.cyan": "Bande senestre cyan", - "item.banner.stripe_downleft.gray": "Bande grise senestre", - "item.banner.stripe_downleft.green": "Bande verte senestre", - "item.banner.stripe_downleft.lightBlue": "Bande senestre bleu pâle", - "item.banner.stripe_downleft.lime": "Bande senestre vert lime", - "item.banner.stripe_downleft.magenta": "Bande senestre magenta", - "item.banner.stripe_downleft.orange": "Bande senestre orange", - "item.banner.stripe_downleft.pink": "Bande senestre rose", - "item.banner.stripe_downleft.purple": "Bande senestre violette", - "item.banner.stripe_downleft.red": "Bande senestre rouge", - "item.banner.stripe_downleft.silver": "Bande senestre gris pâle", - "item.banner.stripe_downleft.white": "Bande senestre blanche", - "item.banner.stripe_downleft.yellow": "Bande senestre jaune", - "item.banner.stripe_downright.black": "Bande noire", - "item.banner.stripe_downright.blue": "Bande bleue", - "item.banner.stripe_downright.brown": "Bande brune", - "item.banner.stripe_downright.cyan": "Bande cyan", - "item.banner.stripe_downright.gray": "Bande grise", - "item.banner.stripe_downright.green": "Bande verte", - "item.banner.stripe_downright.lightBlue": "Bande bleu pâle", - "item.banner.stripe_downright.lime": "Bande vert lime", - "item.banner.stripe_downright.magenta": "Bande magenta", - "item.banner.stripe_downright.orange": "Bande orange", - "item.banner.stripe_downright.pink": "Bande rose", - "item.banner.stripe_downright.purple": "Bande violette", - "item.banner.stripe_downright.red": "Bande rouge", - "item.banner.stripe_downright.silver": "Bande gris pâle", - "item.banner.stripe_downright.white": "Bande blanche", - "item.banner.stripe_downright.yellow": "Bande jaune", - "item.banner.stripe_left.black": "Pal dextre noir", - "item.banner.stripe_left.blue": "Pal dextre bleu", - "item.banner.stripe_left.brown": "Pal dextre brun", - "item.banner.stripe_left.cyan": "Pal dextre cyan", - "item.banner.stripe_left.gray": "Pal dextre gris", - "item.banner.stripe_left.green": "Pal dextre vert", + "item.banner.stripe_downleft.black": "Pli senestre noir", + "item.banner.stripe_downleft.blue": "Pli senestre bleu", + "item.banner.stripe_downleft.brown": "Pli senestre brun", + "item.banner.stripe_downleft.cyan": "Pli senestre cyan", + "item.banner.stripe_downleft.gray": "Pli senestre gris", + "item.banner.stripe_downleft.green": "Pli senestre vert", + "item.banner.stripe_downleft.lightBlue": "Pli senestre bleu pâle", + "item.banner.stripe_downleft.lime": "Pli senestre vert lime", + "item.banner.stripe_downleft.magenta": "Pli senestre magenta", + "item.banner.stripe_downleft.orange": "Pli senestre orange", + "item.banner.stripe_downleft.pink": "Pli senestre rose", + "item.banner.stripe_downleft.purple": "Pli senestre violet", + "item.banner.stripe_downleft.red": "Pli senestre rouge", + "item.banner.stripe_downleft.silver": "Pli senestre gris pâle", + "item.banner.stripe_downleft.white": "Pli senestre blanc", + "item.banner.stripe_downleft.yellow": "Pli senestre jaune", + "item.banner.stripe_downright.black": "Pli noir", + "item.banner.stripe_downright.blue": "Pli bleu", + "item.banner.stripe_downright.brown": "Pli brun", + "item.banner.stripe_downright.cyan": "Pli cyan", + "item.banner.stripe_downright.gray": "Pli gris", + "item.banner.stripe_downright.green": "Pli vert", + "item.banner.stripe_downright.lightBlue": "Pli bleu pâle", + "item.banner.stripe_downright.lime": "Pli vert lime", + "item.banner.stripe_downright.magenta": "Pli magenta", + "item.banner.stripe_downright.orange": "Pli orange", + "item.banner.stripe_downright.pink": "Pli rose", + "item.banner.stripe_downright.purple": "Pli violet", + "item.banner.stripe_downright.red": "Pli rouge", + "item.banner.stripe_downright.silver": "Pli gris pâle", + "item.banner.stripe_downright.white": "Pli blanc", + "item.banner.stripe_downright.yellow": "Pli jaune", + "item.banner.stripe_left.black": "Pâle dextre noir", + "item.banner.stripe_left.blue": "Pâle dextre bleu", + "item.banner.stripe_left.brown": "Pâle dextre brun", + "item.banner.stripe_left.cyan": "Pâle dextre cyan", + "item.banner.stripe_left.gray": "Pal à dextre gris", + "item.banner.stripe_left.green": "Pâle dextre vert", "item.banner.stripe_left.lightBlue": "Pal dextre bleu pâle", - "item.banner.stripe_left.lime": "Pal dextre vert lime", - "item.banner.stripe_left.magenta": "Pal dextre magenta", - "item.banner.stripe_left.orange": "Pal dextre orange", - "item.banner.stripe_left.pink": "Pal dextre rose", - "item.banner.stripe_left.purple": "Pal dextre violet", - "item.banner.stripe_left.red": "Pal dextre rouge", - "item.banner.stripe_left.silver": "Pal dextre gris pâle", - "item.banner.stripe_left.white": "Pal dextre blanc", - "item.banner.stripe_left.yellow": "Pal dextre jaune", - "item.banner.stripe_middle.black": "Fasce noire", + "item.banner.stripe_left.lime": "Pâle dextre vert lime", + "item.banner.stripe_left.magenta": "Pal à dextre magenta", + "item.banner.stripe_left.orange": "Pâle dextre orange", + "item.banner.stripe_left.pink": "Pâle dextre rose", + "item.banner.stripe_left.purple": "Pâle dextre violet", + "item.banner.stripe_left.red": "Pâle dextre rouge", + "item.banner.stripe_left.silver": "Pâle dextre gris pâle", + "item.banner.stripe_left.white": "Pâle dextre blanc", + "item.banner.stripe_left.yellow": "Pâle dextre jaune", + "item.banner.stripe_middle.black": "Fasce noir", "item.banner.stripe_middle.blue": "Fasce bleue", "item.banner.stripe_middle.brown": "Fasce brune", "item.banner.stripe_middle.cyan": "Fasce cyan", @@ -21623,40 +20851,40 @@ export const langs: Langs = { "item.banner.stripe_middle.magenta": "Fasce magenta", "item.banner.stripe_middle.orange": "Fasce orange", "item.banner.stripe_middle.pink": "Fasce rose", - "item.banner.stripe_middle.purple": "Fasce violette", + "item.banner.stripe_middle.purple": "Fasce violet", "item.banner.stripe_middle.red": "Fasce rouge", "item.banner.stripe_middle.silver": "Fasce gris pâle", - "item.banner.stripe_middle.white": "Fasce blanche", + "item.banner.stripe_middle.white": "Fasce blanc", "item.banner.stripe_middle.yellow": "Fasce jaune", - "item.banner.stripe_right.black": "Pal senestre noir", - "item.banner.stripe_right.blue": "Pal senestre bleu", - "item.banner.stripe_right.brown": "Pal senestre brun", - "item.banner.stripe_right.cyan": "Pal senestre cyan", - "item.banner.stripe_right.gray": "Pal senestre gris", - "item.banner.stripe_right.green": "Pal senestre vert", - "item.banner.stripe_right.lightBlue": "Pal senestre bleu pâle", - "item.banner.stripe_right.lime": "Pal senestre vert lime", - "item.banner.stripe_right.magenta": "Pal senestre magenta", - "item.banner.stripe_right.orange": "Pal senestre orange", - "item.banner.stripe_right.pink": "Pal senestre rose", - "item.banner.stripe_right.purple": "Pal senestre violet", - "item.banner.stripe_right.red": "Pal senestre rouge", - "item.banner.stripe_right.silver": "Pal senestre gris pâle", - "item.banner.stripe_right.white": "Pal senestre blanc", - "item.banner.stripe_right.yellow": "Pal senestre jaune", - "item.banner.stripe_top.black": "Fasce de chef noir", - "item.banner.stripe_top.blue": "Fasces de chef bleu", - "item.banner.stripe_top.brown": "Fasce de chef brun", + "item.banner.stripe_right.black": "Pal à senestre noir", + "item.banner.stripe_right.blue": "Pal à senestre bleu", + "item.banner.stripe_right.brown": "Pâle senestre brun", + "item.banner.stripe_right.cyan": "Pâle senestre cyan", + "item.banner.stripe_right.gray": "Pâle senestre gris", + "item.banner.stripe_right.green": "Pal à senestre vert", + "item.banner.stripe_right.lightBlue": "Pâle senestre bleu pâle", + "item.banner.stripe_right.lime": "Pâle senestre vert lime", + "item.banner.stripe_right.magenta": "Pâle senestre magenta", + "item.banner.stripe_right.orange": "Pâle senestre orange", + "item.banner.stripe_right.pink": "Pâle senestre rose", + "item.banner.stripe_right.purple": "Pâle senestre violet", + "item.banner.stripe_right.red": "Pâle senestre rouge", + "item.banner.stripe_right.silver": "Pâle senestre gris pâle", + "item.banner.stripe_right.white": "Pâle senestre blanc", + "item.banner.stripe_right.yellow": "Pâle senestre jaune", + "item.banner.stripe_top.black": "Fasce de chef noire", + "item.banner.stripe_top.blue": "Fasce de chef bleue", + "item.banner.stripe_top.brown": "Fasce de chef brune", "item.banner.stripe_top.cyan": "Fasce de chef cyan", - "item.banner.stripe_top.gray": "Fasce de chef gris", - "item.banner.stripe_top.green": "Fasce de chef vert", + "item.banner.stripe_top.gray": "Fasce de chef grise", + "item.banner.stripe_top.green": "Fasce de chef verte", "item.banner.stripe_top.lightBlue": "Fasce de chef bleu pâle", "item.banner.stripe_top.lime": "Fasce de chef vert lime", "item.banner.stripe_top.magenta": "Fasce de chef magenta", "item.banner.stripe_top.orange": "Fasce de chef orange", "item.banner.stripe_top.pink": "Fasce de chef rose", - "item.banner.stripe_top.purple": "Fasce de chef violet", - "item.banner.stripe_top.red": "Chef de fasce rouge", + "item.banner.stripe_top.purple": "Fasce de chef violette", + "item.banner.stripe_top.red": "Fasce de chef rouge", "item.banner.stripe_top.silver": "Fasce de chef gris pâle", "item.banner.stripe_top.white": "Fasce de chef blanche", "item.banner.stripe_top.yellow": "Fasce de chef jaune", @@ -21676,13 +20904,13 @@ export const langs: Langs = { "item.banner.triangle_bottom.silver": "Chevron gris pâle", "item.banner.triangle_bottom.white": "Chevron blanc", "item.banner.triangle_bottom.yellow": "Chevron jaune", - "item.banner.triangle_top.black": "Chevron noir inversé", - "item.banner.triangle_top.blue": "Chevron dentelé bleu", + "item.banner.triangle_top.black": "Chevron inversé noir", + "item.banner.triangle_top.blue": "Chevron inversé bleu", "item.banner.triangle_top.brown": "Chevron inversé brun", - "item.banner.triangle_top.cyan": "Chevron cyan inversé", - "item.banner.triangle_top.gray": "Chevron gris inversé", + "item.banner.triangle_top.cyan": "Chevron inversé cyan", + "item.banner.triangle_top.gray": "Chevron inversé gris", "item.banner.triangle_top.green": "Chevron inversé vert", - "item.banner.triangle_top.lightBlue": "Chevron bleu pâle inversé", + "item.banner.triangle_top.lightBlue": "Chevron inversé bleu pâle", "item.banner.triangle_top.lime": "Chevron inversé vert lime", "item.banner.triangle_top.magenta": "Chevron inversé magenta", "item.banner.triangle_top.orange": "Chevron inversé orange", @@ -21692,38 +20920,38 @@ export const langs: Langs = { "item.banner.triangle_top.silver": "Chevron inversé gris pâle", "item.banner.triangle_top.white": "Chevron inversé blanc", "item.banner.triangle_top.yellow": "Chevron inversé jaune", - "item.banner.triangles_bottom.black": "Base noire dentelée", - "item.banner.triangles_bottom.blue": "Base bleue dentelée", - "item.banner.triangles_bottom.brown": "Base brune dentelée", - "item.banner.triangles_bottom.cyan": "Base de cyan dentelée", - "item.banner.triangles_bottom.gray": "Base grise dentelée", - "item.banner.triangles_bottom.green": "Base verte inversé", - "item.banner.triangles_bottom.lightBlue": "Base bleu pâle dentelée", - "item.banner.triangles_bottom.lime": "Base vert lime dentelée", - "item.banner.triangles_bottom.magenta": "Base magenta dentelée", - "item.banner.triangles_bottom.orange": "Base orange dentelé", - "item.banner.triangles_bottom.pink": "Base rose dentelé", - "item.banner.triangles_bottom.purple": "Base violette dentelé", - "item.banner.triangles_bottom.red": "Base rouge dentelée", - "item.banner.triangles_bottom.silver": "Base gris pâle inversée", - "item.banner.triangles_bottom.white": "Base blanche dentelée", - "item.banner.triangles_bottom.yellow": "Base jaune dentelée", - "item.banner.triangles_top.black": "Chef noir dentelé", - "item.banner.triangles_top.blue": "Chef bleu dentelé", - "item.banner.triangles_top.brown": "Chef brun dentelé", - "item.banner.triangles_top.cyan": "Chef cyan dentelé", - "item.banner.triangles_top.gray": "Chef gris dentelé", - "item.banner.triangles_top.green": "Chef vert dentelé", + "item.banner.triangles_bottom.black": "Base dentelée noire", + "item.banner.triangles_bottom.blue": "Base dentelée bleue", + "item.banner.triangles_bottom.brown": "Base dentelée brune", + "item.banner.triangles_bottom.cyan": "Base dentelée cyan", + "item.banner.triangles_bottom.gray": "Base dentelée grise", + "item.banner.triangles_bottom.green": "Base dentelée verte", + "item.banner.triangles_bottom.lightBlue": "Base dentelée bleu pâle", + "item.banner.triangles_bottom.lime": "Base dentelée vert lime", + "item.banner.triangles_bottom.magenta": "Base dentelée magenta", + "item.banner.triangles_bottom.orange": "Base dentelée orange", + "item.banner.triangles_bottom.pink": "Base dentelée rose", + "item.banner.triangles_bottom.purple": "Base dentelée violette", + "item.banner.triangles_bottom.red": "Base dentelée rouge", + "item.banner.triangles_bottom.silver": "Base dentelée gris pâle", + "item.banner.triangles_bottom.white": "Base dentelée blanche", + "item.banner.triangles_bottom.yellow": "Base dentelée jaune", + "item.banner.triangles_top.black": "Chef dentelé noir", + "item.banner.triangles_top.blue": "Chef dentelé bleu", + "item.banner.triangles_top.brown": "Chef dentelé brun", + "item.banner.triangles_top.cyan": "Chef dentelé cyan", + "item.banner.triangles_top.gray": "Chef dentelé gris", + "item.banner.triangles_top.green": "Chef dentelé vert", "item.banner.triangles_top.lightBlue": "Chef dentelé bleu pâle", "item.banner.triangles_top.lime": "Chef dentelé vert lime", "item.banner.triangles_top.magenta": "Chef dentelé magenta", - "item.banner.triangles_top.orange": "Chef orange dentelé", + "item.banner.triangles_top.orange": "Chef dentelé orange", "item.banner.triangles_top.pink": "Chef dentelé rose", "item.banner.triangles_top.purple": "Chef dentelé violet", "item.banner.triangles_top.red": "Chef dentelé rouge", "item.banner.triangles_top.silver": "Chef dentelé gris pâle", - "item.banner.triangles_top.white": "Chef blanc dentelé", - "item.banner.triangles_top.yellow": "Chef jaune dentelé", + "item.banner.triangles_top.white": "Chef dentelé blanc", + "item.banner.triangles_top.yellow": "Chef dentelé jaune", "item.banner.white.name": "Bannière blanche", "item.banner.yellow.name": "Bannière jaune", "item.banner.illager": "Illageois", @@ -21751,14 +20979,14 @@ export const langs: Langs = { "item.blaze_powder.name": "Poudre de Blaze", "item.blaze_rod.name": "Bâton de Blaze", "item.boat.oak.name": "Bateau en chêne", - "item.boat.spruce.name": "Bateau en sapin", + "item.boat.spruce.name": "Bateau en épinette", "item.boat.birch.name": "Bateau en bouleau", "item.boat.jungle.name": "Bateau en bois tropical", "item.boat.acacia.name": "Bateau en acacia", "item.boat.big_oak.name": "Bateau en chêne noir", "item.bone.name": "Os", "item.book.name": "Livre", - "item.breeze_rod.name": "Bâton de Breeze", + "item.breeze_rod.name": "Bâton de souffleur", "item.chainmail_boots.name": "Bottes en cotte de mailles", "item.leather_boots.name": "Bottes en cuir", "item.diamond_boots.name": "Bottes en diamant", @@ -21808,7 +21036,7 @@ export const langs: Langs = { "item.tropicalBodyKobMulti.name": "Cabillaud %1$s-%2$s", "item.tropicalBodySunstreakMulti.name": "Poisson zébré %1$s-%2$s", "item.tropicalBodySnooperMulti.name": "Poisson fouineur %1$s-%2$s", - "item.tropicalBodyDasherMulti.name": "Poisson tornade %1$s-%2$s", + "item.tropicalBodyDasherMulti.name": "Fonceur %1$s-%2$s", "item.tropicalBodyBrinelyMulti.name": "Poisson de mer %1$s-%2$s", "item.tropicalBodySpottyMulti.name": "Poisson à pois %1$s-%2$s", "item.tropicalBodyFlopperMulti.name": "Poisson feinteur %1$s-%2$s", @@ -21822,7 +21050,7 @@ export const langs: Langs = { "item.tropicalSchoolBlueDory.name": "Poisson-chirurgien bleu", "item.tropicalSchoolButterflyFish.name": "Poisson papillon", "item.tropicalSchoolCichlid.name": "Cichlidé", - "item.tropicalSchoolClownfish.name": "Poisson clown", + "item.tropicalSchoolClownfish.name": "Poisson-clown", "item.tropicalSchoolCottonCandyBetta.name": "Betta barbe à papa", "item.tropicalSchoolDottyback.name": "Pseudochromidae", "item.tropicalSchoolEmperorRedSnapper.name": "Vivaneau bourgeois", @@ -21841,18 +21069,18 @@ export const langs: Langs = { "item.tropicalSchoolYellowtailParrot.name": "Poisson-perroquet à queue jaune", "item.cake.name": "Gâteau", "item.camera.name": "Appareil photo", - "item.canBreak": "Peut détruire:", - "item.canPlace": "Peut être placé(e) sur:", + "item.canBreak": "Peut détruire :", + "item.canPlace": "Peut être placé(e) sur :", "item.customProperties": "Possède des propriétés personnalisées", "item.itemLock.cantDrop": ":hollow_star: Les objets non largables ne peuvent être :", "item.itemLock.cantMove": ":solid_star: Les objets non déplaçables ne peuvent être :", "item.itemLock.hoverText.cantBe.moved": "déplacé", "item.itemLock.hoverText.cantBe.dropped": "lâché", "item.itemLock.hoverText.cantBe.removed": "retiré", - "item.itemLock.hoverText.cantBe.craftedWith": "utilisés en fabrication", - "item.itemLock.keepOnDeath": "Cet objet n'est pas perdu en cas de mort", - "item.itemLock.popupNotice.cantDrop": ":hollow_star: Les objets non largables ne peuvent être : abandonnés, retirés, utilisés en fabrication", - "item.itemLock.popupNotice.cantMove": ":solid_star: Les objets non déplaçables ne peuvent être : déplacés, abandonnés, retirés, utilisés en fabrication", + "item.itemLock.hoverText.cantBe.craftedWith": "utilisé en fabrication", + "item.itemLock.keepOnDeath": "Cet objet n'est pas perdu lors de la mort", + "item.itemLock.popupNotice.cantDrop": ":hollow_star: Les objets non largables ne peuvent être : lâchés, retirés, utilisés en fabrication", + "item.itemLock.popupNotice.cantMove": ":solid_star: Les objets non déplaçables ne peuvent être : déplacés, lâchés, retirés, utilisés en fabrication", "item.golden_carrot.name": "Carotte dorée", "item.carrotOnAStick.name": "Carotte sur un bâton", "item.warped_fungus_on_a_stick.name": "Champignon altéré sur un bâton", @@ -21917,29 +21145,29 @@ export const langs: Langs = { "item.egg.name": "Œuf", "item.elytra.name": "Élytres", "item.emerald.name": "Émeraude", - "item.emptyMap.name": "Carte vierge", - "item.emptyLocatorMap.name": "Localisateur de cartes vide", + "item.emptyMap.name": "Carte vide", + "item.emptyLocatorMap.name": "Carte de localisation vide", "item.enchanted_book.name": "Livre enchanté", "item.end_crystal.name": "Cristal de l'Ender", "tile.end_rod.name": "Barre de l'Ender", - "item.ender_eye.name": "Œil de l'Ender", + "item.ender_eye.name": "Œil de Ender", "item.ender_pearl.name": "Perle de l'Ender", "item.experience_bottle.name": "Fiole d'expérience", - "item.exposed_copper_door.name": "Porte en cuivre peu oxydé", + "item.exposed_copper_door.name": "Porte en cuivre exposé", "item.feather.name": "Plume", "item.fermented_spider_eye.name": "Œil d'araignée fermenté", "item.fireball.name": "Charge de feu", - "item.fireworks.flight": "Durée de vol:", + "item.fireworks.flight": "Durée de vol :", "item.fireworks.name": "Fusée de feu d'artifice", - "item.fireworksCharge.black": "Noire", - "item.fireworksCharge.blue": "Bleue", - "item.fireworksCharge.brown": "Brune", - "item.fireworksCharge.customColor": "Personnalisée", + "item.fireworksCharge.black": "Noir", + "item.fireworksCharge.blue": "Bleu", + "item.fireworksCharge.brown": "Brun", + "item.fireworksCharge.customColor": "Personnalisé", "item.fireworksCharge.cyan": "Cyan", "item.fireworksCharge.fadeTo": "Fondu vers", "item.fireworksCharge.flicker": "Scintillement", - "item.fireworksCharge.gray": "Grise", - "item.fireworksCharge.green": "Verte", + "item.fireworksCharge.gray": "Gris", + "item.fireworksCharge.green": "Vert", "item.fireworksCharge.lightBlue": "Bleu pâle", "item.fireworksCharge.lime": "Vert lime", "item.fireworksCharge.magenta": "Magenta", @@ -21956,7 +21184,7 @@ export const langs: Langs = { "item.fireworksCharge.type.2": "En forme d'étoile", "item.fireworksCharge.type.3": "En forme de Creeper", "item.fireworksCharge.type.4": "Explosion", - "item.fireworksCharge.white": "Blanche", + "item.fireworksCharge.white": "Blanc", "item.fireworksCharge.yellow": "Jaune", "item.clownfish.name": "Poisson tropical", "item.cooked_fish.name": "Morue cuite", @@ -21991,10 +21219,11 @@ export const langs: Langs = { "item.wooden_hoe.name": "Houe en bois", "item.honey_bottle.name": "Bouteille de miel", "item.honeycomb.name": "Rayon de miel", - "item.horsearmordiamond.name": "Armure pour cheval en diamant", - "item.horsearmorgold.name": "Armure pour cheval en or", - "item.horsearmoriron.name": "Armure pour cheval en fer", - "item.horsearmorleather.name": "Armure pour cheval en cuir", + "item.horsearmordiamond.name": "Armure de cheval en diamant", + "item.horsearmorgold.name": "Armure de cheval en or", + "item.horsearmoriron.name": "Armure de cheval en fer", + "item.copper_horse_armor.name": "Armure de cheval en cuivre", + "item.horsearmorleather.name": "Armure de cheval en cuir", "item.gold_ingot.name": "Lingot d'or", "item.iron_ingot.name": "Lingot de fer", "item.netherite_ingot.name": "Lingot de netherite", @@ -22016,13 +21245,13 @@ export const langs: Langs = { "item.diamond_leggings.name": "Jambières en diamant", "item.golden_leggings.name": "Jambières en or", "item.iron_leggings.name": "Jambières en fer", - "item.nautilus_shell.name": "Coque de nautile", + "item.nautilus_shell.name": "Coquille de nautile", "item.heart_of_the_sea.name": "Au cœur de la mer", - "item.mace.name": "Masse d'armes", + "item.mace.name": "Massue", "item.magma_cream.name": "Crème de magma", "item.map.name": "Carte", "item.map.exploration.mansion.name": "Carte d'exploration des bois", - "item.map.exploration.monument.name": "Carte d'exploration des océans", + "item.map.exploration.monument.name": "Carte d'exploration de l’océan", "item.map.exploration.treasure.name": "Carte au trésor", "item.map.exploration.buried_treasure.name": "Carte au trésor", "item.map.exploration.village_snowy.name": "Carte du village enneigé", @@ -22030,13 +21259,13 @@ export const langs: Langs = { "item.map.exploration.village_plains.name": "Carte du village des plaines", "item.map.exploration.village_savanna.name": "Carte du village de la savane", "item.map.exploration.village_desert.name": "Carte du village du désert", - "item.map.exploration.jungle_temple.name": "Carte d'exploration de la Jungle", + "item.map.exploration.jungle_temple.name": "Carte d'exploration de la jungle", "item.map.exploration.swamp_hut.name": "Carte d'exploration des marais", "item.map.exploration.trial_chambers.name": "Carte d'exploration de l'épreuve", "item.melon.name": "Tranche de melon", "item.milk.name": "Seau de lait", "item.minecart.name": "Wagonnet", - "item.chest_minecart.name": "Wagonnet de stockage", + "item.chest_minecart.name": "Wagonnet avec coffre", "item.command_block_minecart.name": "Wagonnet avec bloc de commande", "item.minecartFurnace.name": "Wagonnet à vapeur", "item.hopper_minecart.name": "Wagonnet à entonnoir", @@ -22050,8 +21279,8 @@ export const langs: Langs = { "item.spawn_egg.entity.armadillo.name": "Œuf d'apparition de tatou", "item.spawn_egg.entity.axolotl.name": "Œuf d'apparition d'axolotl", "item.spawn_egg.entity.bee.name": "Œuf d'apparition d'abeille", - "item.spawn_egg.entity.bogged.name": "Œuf d'apparition d'embourbé", - "item.spawn_egg.entity.breeze.name": "Œuf d'apparition de Breeze", + "item.spawn_egg.entity.bogged.name": "Œuf d'apparition d'envasé", + "item.spawn_egg.entity.breeze.name": "Œuf d'apparition de souffleur", "item.spawn_egg.entity.hoglin.name": "Œuf d'apparition de hoglin", "item.spawn_egg.entity.cat.name": "Œuf d'apparition de chat", "item.spawn_egg.entity.chicken.name": "Œuf d'apparition de poulet", @@ -22083,7 +21312,7 @@ export const langs: Langs = { "item.spawn_egg.entity.parrot.name": "Œuf d'apparition de perroquet", "item.spawn_egg.entity.horse.name": "Œuf d'apparition de cheval", "item.spawn_egg.entity.llama.name": "Œuf d'apparition de lama", - "item.spawn_egg.entity.trader_llama.name": "Œuf de génération de commerçant lama", + "item.spawn_egg.entity.trader_llama.name": "Œuf d'apparition de lama marchand", "item.spawn_egg.entity.polar_bear.name": "Œuf d'apparition d'ours polaire", "item.spawn_egg.entity.donkey.name": "Œuf d'apparition d'âne", "item.spawn_egg.entity.mule.name": "Œuf d'apparition de mule", @@ -22094,7 +21323,7 @@ export const langs: Langs = { "item.spawn_egg.entity.creeper.name": "Œuf d'apparition de creeper", "item.spawn_egg.entity.skeleton.name": "Œuf d'apparition de squelette", "item.spawn_egg.entity.spider.name": "Œuf d'apparition d'araignée", - "item.spawn_egg.entity.zombie_pigman.name": "Œuf d'apparition de Piglin zombifié", + "item.spawn_egg.entity.zombie_pigman.name": "Œuf d'apparition de piglin zombifié", "item.spawn_egg.entity.strider.name": "Œuf d'apparition d'arpenteur", "item.spawn_egg.entity.slime.name": "Œuf d'apparition de gélatine", "item.spawn_egg.entity.enderman.name": "Œuf d'apparition d'enderman", @@ -22107,21 +21336,21 @@ export const langs: Langs = { "item.spawn_egg.entity.zombie_villager_v2.name": "Œuf d'apparition de villageois zombie", "item.spawn_egg.entity.witch.name": "Œuf d'apparition de sorcière", "item.spawn_egg.entity.stray.name": "Œuf d'apparition de vagabond", - "item.spawn_egg.entity.husk.name": "Œuf d'apparition de zombie momifié", + "item.spawn_egg.entity.husk.name": "Œuf d'apparition d'incarnation", "item.spawn_egg.entity.wither_skeleton.name": "Œuf d'apparition de wither squelette", "item.spawn_egg.entity.guardian.name": "Œuf d'apparition de veilleur", "item.spawn_egg.entity.elder_guardian.name": "Œuf d'apparition d'ancien gardien", "item.spawn_egg.entity.shulker.name": "Œuf d'apparition de shulker", "item.spawn_egg.entity.endermite.name": "Œuf d'apparition d'endermite", "item.spawn_egg.entity.evocation_illager.name": "Œuf d'apparition d'évocateur", - "item.spawn_egg.entity.vex.name": "Œuf de génération de vexe", + "item.spawn_egg.entity.vex.name": "Œuf d'apparition de vexe", "item.spawn_egg.entity.turtle.name": "Œuf d’apparition de tortue", "item.spawn_egg.entity.dolphin.name": "Œuf d'apparition de dauphin", "item.spawn_egg.entity.phantom.name": "Œuf d'apparition de revenant", "item.spawn_egg.entity.panda.name": "Œuf d'apparition de panda", "item.spawn_egg.entity.pillager.name": "Œuf d'apparition de pillard", "item.spawn_egg.entity.piglin_brute.name": "Œuf d'apparition de brute piglin", - "item.spawn_egg.entity.piglin.name": "Œuf d'apparition de Piglin", + "item.spawn_egg.entity.piglin.name": "Œuf d'apparition de piglin", "item.spawn_egg.entity.fox.name": "Œuf d'apparition de renard", "item.spawn_egg.entity.unknown.name": "Œuf d'apparition", "item.spawn_egg.entity.wandering_trader.name": "Œuf d'apparition de commerçant ambulant", @@ -22161,7 +21390,7 @@ export const langs: Langs = { "item.record_11.desc": "C418 - 11", "item.record_13.desc": "C418 - 13", "item.record_blocks.desc": "C418 - Blocks", - "item.record_cat.desc": "C418 - Chat", + "item.record_cat.desc": "C418 - chat", "item.record_chirp.desc": "C418 - Chirp", "item.record_far.desc": "C418 - Far", "item.record_mall.desc": "C418 - Mall", @@ -22172,11 +21401,13 @@ export const langs: Langs = { "item.record_wait.desc": "C418 - Wait", "item.record_ward.desc": "C418 - Ward", "item.record_pigstep.desc": "Lena Raine – Pigstep", - "item.record_otherside.desc": "Lena Raine – otherside", + "item.record_otherside.desc": "Lena Raine - otherside", "item.record_relic.desc": "Aaron Cherof – Relic", "item.record_creator.desc": "Lena Raine – Creator", - "item.record_creator_music_box.desc": "Lena Raine – Creator (Music Box)", + "item.record_creator_music_box.desc": "Lena Raine - Creator (boîte à musique)", "item.record_precipice.desc": "Aaron Cherof – Precipice", + "item.record_tears.desc": "Amos Roddy - Larmes", + "item.record_lava_chicken.desc": "Hyper potions - Poulet de lave", "item.redstone.name": "Poudre de redstone", "item.reeds.name": "Canne à sucre", "item.kelp.name": "Varech", @@ -22203,9 +21434,9 @@ export const langs: Langs = { "item.crimson_sign.name": "Panneau carmin", "item.warped_sign.name": "Panneau altéré", "item.skull.char.name": "Tête de joueur", - "item.skull.creeper.name": "Tête de Creeper", + "item.skull.creeper.name": "Tête de creeper", "item.skull.dragon.name": "Tête de dragon", - "item.skull.player.name": "Tête de/d' %s", + "item.skull.player.name": "Tête de %s", "item.skull.skeleton.name": "Crâne de squelette", "item.skull.wither.name": "Crâne de squelette de Wither", "item.skull.zombie.name": "Tête de zombie", @@ -22224,10 +21455,10 @@ export const langs: Langs = { "item.wooden_sword.name": "Épée en bois", "item.unbreakable": "Incassable", "item.waxed_copper_door.name": "Porte en cuivre ciré", - "item.waxed_exposed_copper_door.name": "Porte en cuivre peu oxydé ciré", + "item.waxed_exposed_copper_door.name": "Porte en cuivre exposé ciré", "item.waxed_oxidized_copper_door.name": "Porte en cuivre oxydé ciré", - "item.waxed_weathered_copper_door.name": "Porte en cuivre semi-oxydé ciré", - "item.weathered_copper_door.name": "Porte en cuivre semi-oxydé", + "item.waxed_weathered_copper_door.name": "Porte en cuivre érodé ciré", + "item.weathered_copper_door.name": "Porte en cuivre érodé", "item.wind_charge.name": "Charge de vent", "item.wheat.name": "Blé", "item.wolf_armor.name": "Armure de loup", @@ -22236,7 +21467,7 @@ export const langs: Langs = { "item.glowstone_dust.name": "Poudre lumineuse", "item.shulker_shell.name": "Carapace de shulker", "item.totem.name": "Totem d'immortalité", - "item.trial_key.name": "Clé d'épreuve", + "item.trial_key.name": "Clé des épreuves", "item.turtle_helmet.name": "Carapace de tortue", "item.turtle_shell_piece.name": "Scutelle de tortue", "item.phantom_membrane.name": "Membrane de revenant", @@ -22253,8 +21484,8 @@ export const langs: Langs = { "item.mojang_banner_pattern.name": "Motif de bannière Chose", "item.bordure_indented_banner_pattern.name": "Motif de bannière Bordure dentelée", "item.banner_pattern.bricks": "Déploiement de maçonnerie", - "item.banner_pattern.creeper": "Charge de Creeper", - "item.banner_pattern.flow": "Flux", + "item.banner_pattern.creeper": "Visage de creeper", + "item.banner_pattern.flow": "Flot", "item.banner_pattern.flower": "Charge de fleur", "item.banner_pattern.globe": "Globe", "item.banner_pattern.guster": "Tornade", @@ -22290,27 +21521,27 @@ export const langs: Langs = { "item.shield.brown.name": "Bouclier brun", "item.shield.black.name": "Bouclier noir", "item.shield.blue.name": "Bouclier bleu", - "item.bundle": "Sac", - "item.black_bundle": "Sac noir", - "item.white_bundle": "Sac blanc", - "item.red_bundle": "Sac rouge", - "item.orange_bundle": "Sac orange", - "item.yellow_bundle": "Sac jaune", - "item.green_bundle": "Sac vert", - "item.lime_bundle": "Sac vert lime", - "item.brown_bundle": "Sac brun", - "item.light_gray_bundle": "Sac gris pâle", - "item.light_blue_bundle": "Sac bleu pâle", - "item.blue_bundle": "Sac bleu", - "item.gray_bundle": "Sac gris", - "item.pink_bundle": "Sac rose", - "item.magenta_bundle": "Sac magenta", - "item.purple_bundle": "Sac violet", - "item.cyan_bundle": "Sac cyan", + "item.bundle": "Lot", + "item.black_bundle": "Lot noir", + "item.white_bundle": "Lot blanc", + "item.red_bundle": "Lot rouge", + "item.orange_bundle": "Lot orange", + "item.yellow_bundle": "Lot jaune", + "item.green_bundle": "Lot vert", + "item.lime_bundle": "Lot vert lime", + "item.brown_bundle": "Lot marron", + "item.light_gray_bundle": "Lot gris pâle", + "item.light_blue_bundle": "Lot bleu pâle", + "item.blue_bundle": "Lot bleu", + "item.gray_bundle": "Lot gris", + "item.pink_bundle": "Lot rose", + "item.magenta_bundle": "Lot magenta", + "item.purple_bundle": "Lot violet", + "item.cyan_bundle": "Lot cyan", "item.bundle.empty": "Vide", "item.bundle.empty.description": "Peut contenir une pile d'objets mixtes", "item.bundle.full": "Plein", - "item.bundle.fullness": "%s d'espace restant", + "item.bundle.fullness": "%s restant(e)s", "item.goat_horn.name": "Corne de chèvre", "item.minecraft.goat_horn.sound.0": "Réflexion", "item.minecraft.goat_horn.sound.1": "Chant", @@ -22318,7 +21549,7 @@ export const langs: Langs = { "item.minecraft.goat_horn.sound.3": "Sentiment", "item.minecraft.goat_horn.sound.4": "Admiration", "item.minecraft.goat_horn.sound.5": "Appel", - "item.minecraft.goat_horn.sound.6": "Langueur", + "item.minecraft.goat_horn.sound.6": "Languissant", "item.minecraft.goat_horn.sound.7": "Rêve", "potion.absorption": "Absorption", "potion.blindness": "Cécité", @@ -22330,12 +21561,12 @@ export const langs: Langs = { "potion.damageBoost.linger.name": "Potion de force persistante", "potion.digSlowDown": "Épuisement", "potion.digSpeed": "Célérité", - "potion.effects.whenDrank": "Effet appliqué:", + "potion.effects.whenDrank": "Effet appliqué :", "potion.empty": "Sans effet", "potion.emptyPotion.name": "Bouteille d'eau", - "potion.emptyPotion.splash.name": "Bouteille d'eau jetable", + "potion.emptyPotion.splash.name": "Bouteille d’eau jetable", "potion.emptyPotion.linger.name": "Bouteille d’eau persistante", - "potion.fireResistance": "Résist. au feu", + "potion.fireResistance": "Résistance au feu", "potion.fireResistance.name": "Potion de résistance au feu", "potion.fireResistance.splash.name": "Potion de résistance au feu jetable", "potion.fireResistance.linger.name": "Potion de résistance au feu persistante", @@ -22347,7 +21578,7 @@ export const langs: Langs = { "potion.heal.name": "Potion de guérison", "potion.heal.splash.name": "Potion de guérison jetable", "potion.heal.linger.name": "Potion de guérison persistante", - "potion.healthBoost": "Concentré de santé", + "potion.healthBoost": "Amélioration de santé", "potion.hunger": "Faim", "potion.infested.linger.name": "Potion persistante d'infestation", "potion.infested.name": "Potion d'infestation", @@ -22357,7 +21588,7 @@ export const langs: Langs = { "potion.invisibility.name": "Potion d'invisibilité", "potion.invisibility.splash.name": "Potion d'invisibilité jetable", "potion.invisibility.linger.name": "Potion d'invisibilité persistante", - "potion.jump": "Élan pour le saut", + "potion.jump": "Sauts améliorés", "potion.jump.name": "Potion de saut", "potion.jump.splash.name": "Potion de saut jetable", "potion.jump.linger.name": "Potion de saut persistante", @@ -22427,13 +21658,13 @@ export const langs: Langs = { "potion.weaving.name": "Potion de tissage", "potion.weaving.splash.name": "Potion jetable de tissage", "potion.weaving": "Tissage", - "potion.windCharged.linger.name": "Potion persistante de charge du vent", - "potion.windCharged.name": "Potion de charge du vent", - "potion.windCharged.splash.name": "Potion jetable de charge du vent", - "potion.windCharged": "Charge de vent", - "potion.wither": "Wither", + "potion.windCharged.linger.name": "Potion persistante de charge de vent", + "potion.windCharged.name": "Potion de charge de vent", + "potion.windCharged.splash.name": "Potion jetable de charge de vent", + "potion.windCharged": "Chargé de vent", + "potion.wither": "Décomposition", "potion.wither.name": "Potion de décomposition", - "potion.wither.splash.name": "Potion jetable de décomposition", + "potion.wither.splash.name": "Potion de décomposition jetable", "potion.wither.linger.name": "Potion persistante de décomposition", "tile.sculk_sensor.name": "Capteur Sculk", "tile.sculk.name": "Sculk", @@ -22444,7 +21675,7 @@ export const langs: Langs = { "entity.frog.name": "Grenouille", "entity.tadpole.name": "Têtard", "item.spawn_egg.entity.warden.name": "Œuf d'apparition de gardien", - "entity.warden.name": "Veilleur", + "entity.warden.name": "Gardien", "entity.allay.name": "Allay", "item.spawn_egg.entity.allay.name": "Œuf d'apparition d'Allay", "item.bucketTadpole.name": "Seau de têtards", @@ -22507,7 +21738,7 @@ export const langs: Langs = { "item.blade_pottery_sherd.name": "Tesson de poterie Lame", "item.boat.bamboo.name": "Radeau en bambou", "item.boat.cherry.name": "Bateau en cerisier", - "item.brewer_pottery_sherd.name": "Tesson de poterie Potion", + "item.brewer_pottery_sherd.name": "Tesson de poterie Alchimiste", "item.brush.name": "Pinceau", "item.burn_pottery_sherd.name": "Tesson de poterie Flamme", "item.cherry_door.name": "Porte en cerisier", @@ -22519,7 +21750,7 @@ export const langs: Langs = { "item.danger_pottery_sherd.name": "Tesson de poterie Danger", "item.dark_oak_hanging_sign.name": "Panneau suspendu en chêne noir", "item.explorer_pottery_sherd.name": "Tesson de poterie Explorateur", - "item.flow_pottery_sherd.name": "Tesson de poterie Flux", + "item.flow_pottery_sherd.name": "Tesson de poterie Flot", "item.friend_pottery_sherd.name": "Tesson de poterie Ami", "item.guster_pottery_sherd.name": "Tesson de poterie Tornade", "item.heart_pottery_sherd.name": "Tesson de poterie Cœur", @@ -22539,14 +21770,14 @@ export const langs: Langs = { "item.skull.piglin.name": "Tête de piglin", "item.smithing_template.applies_to": "S’applique à :", "item.smithing_template.armor_trim.applies_to": "Armure", - "item.smithing_template.armor_trim.ingredients": "Lingots & Cristaux", + "item.smithing_template.armor_trim.ingredients": "Lingots et cristaux", "item.smithing_template.ingredients": "Ingrédients :", "item.smithing_template.name": "Modèle de forge", "item.smithing_template.netherite_upgrade.applies_to": "Équipement en diamant", - "item.smithing_template.netherite_upgrade.ingredients": "Lingot de Netherite", + "item.smithing_template.netherite_upgrade.ingredients": "Lingot de netherite", "item.netherite_upgrade_smithing_template.name": "Amélioration de netherite", "item.sentry_armor_trim_smithing_template.name": "Coupe d'armure Sentinelle", - "item.vex_armor_trim_smithing_template.name": "Coupe d'armure Vex", + "item.vex_armor_trim_smithing_template.name": "Coupe d'armure Vexe", "item.wild_armor_trim_smithing_template.name": "Coupe d'armure Sauvage", "item.coast_armor_trim_smithing_template.name": "Coupe d'armure Rivage", "item.dune_armor_trim_smithing_template.name": "Coupe d'armure Dune", @@ -22557,18 +21788,18 @@ export const langs: Langs = { "item.ward_armor_trim_smithing_template.name": "Coupe d'armure Pupille", "item.silence_armor_trim_smithing_template.name": "Coupe d'armure Silence", "item.tide_armor_trim_smithing_template.name": "Coupe d'armure Marée", - "item.snout_armor_trim_smithing_template.name": "Coupe d'armure Groin", + "item.snout_armor_trim_smithing_template.name": "Coupe d'armure Museau", "item.rib_armor_trim_smithing_template.name": "Coupe d'armure Côtes", "item.eye_armor_trim_smithing_template.name": "Coupe d'armure Œil", "item.spire_armor_trim_smithing_template.name": "Coupe d'armure Flèche", "item.flow_armor_trim_smithing_template.name": "Coupe d'armure Flot", "item.bolt_armor_trim_smithing_template.name": "Coupe d'armure Boulon", - "item.snort_pottery_sherd.name": "Tesson de poterie Reniflement", + "item.snort_pottery_sherd.name": "Tesson de poterie Grognement", "item.spawn_egg.entity.camel.name": "Œuf d'apparition de chameau", "item.spruce_hanging_sign.name": "Panneau suspendu en sapin", "item.warped_hanging_sign.name": "Panneau suspendu biscornu", "tile.bamboo_block.name": "Bloc de bambou", - "tile.bamboo_button.name": "Bouton de bambou", + "tile.bamboo_button.name": "Bouton en bambou", "tile.bamboo_fence_gate.name": "Porte de clôture en bambou", "tile.bamboo_fence.name": "Clôture en bambou", "tile.bamboo_mosaic_slab.name": "Dalle en bambou mosaïque", @@ -22581,7 +21812,7 @@ export const langs: Langs = { "tile.bamboo_trapdoor.name": "Trappe en bambou", "tile.calibrated_sculk_sensor.name": "Capteur Sculk calibré", "tile.cherry_button.name": "Bouton de cerisier", - "tile.cherry_double_slab.name": "Double dalle en cerisier", + "tile.cherry_double_slab.name": "Dalle double en cerisier", "tile.cherry_fence_gate.name": "Porte de clôture en cerisier", "tile.cherry_fence.name": "Clôture en cerisier", "tile.cherry_leaves.name": "Feuilles de cerisier", @@ -22616,11 +21847,11 @@ export const langs: Langs = { "trim_pattern.spire.name": "Coupe d'armure Flèche", "trim_pattern.tide.name": "Coupe d'armure Marée", "trim_pattern.vex.name": "Coupe d'armure Vex", - "trim_pattern.ward.name": "Coupe d'armure Garde", + "trim_pattern.ward.name": "Coupe d'armure Protection", "trim_pattern.wayfinder.name": "Coupe d'armure Boussole", "trim_pattern.wild.name": "Coupe d'armure Sauvage", "trim_pattern.bolt.name": "Coupe d'armure Boulon", - "trim_pattern.flow.name": "Coupe d'armure Flot", + "trim_pattern.flow.name": "Coupe d'armure Flux", "tile.acaciaFence.name": "Clôture en acacia", "tile.acacia_fence_gate.name": "Porte de clôture en acacia", "tile.activator_rail.name": "Rails déclencheurs", @@ -22633,21 +21864,21 @@ export const langs: Langs = { "tile.anvil.name": "Enclume", "tile.anvil.slightlyDamaged.name": "Enclume ébréchée", "tile.anvil.veryDamaged.name": "Enclume endommagée", - "tile.barrier.name": "Barrière", + "tile.barrier.name": "Barrière invisible", "tile.beacon.name": "Balise", "tile.beacon.primary": "Pouvoir primaire", "tile.beacon.secondary": "Pouvoir secondaire", - "tile.beacon.primary.pocket": "Pouvoir primaire", - "tile.beacon.secondary.pocket": "Pouvoir secondaire", + "tile.beacon.primary.pocket": "Principal", + "tile.beacon.secondary.pocket": "Secondaire", "tile.beehive.name": "Ruche", "tile.bee_nest.name": "Nid d'abeilles", "tile.target.name": "Cible", "tile.bed.name": "Lit", "tile.bed.noSleep": "Vous ne pouvez dormir que la nuit et pendant les orages", - "tile.bed.notSafe": "Vous ne pouvez pas fermer l'œil, il y a des monstres tout près", - "tile.bed.notValid": "Votre lit a été détruit ou est obstrué", + "tile.bed.notSafe": "Vous ne pouvez pas dormir pour l'instant, il y a des monstres à proximité", + "tile.bed.notValid": "Le lit de votre refuge est absent ou inaccessible", "tile.bed.occupied": "Ce lit est occupé", - "tile.bed.respawnSet": "Point d'apparition défini", + "tile.bed.respawnSet": "Définition du point d'apparition", "tile.bed.tooFar": "Le lit est trop loin", "tile.bed.obstructed": "Le lit est obstrué", "tile.bedrock.name": "Bedrock", @@ -22694,7 +21925,7 @@ export const langs: Langs = { "tile.dark_oak_button.name": "Bouton de chêne noir", "tile.jungle_button.name": "Bouton de bois tropical", "tile.respawn_anchor.respawnSet": "Point d'apparition défini", - "tile.respawn_anchor.notValid": "Votre ancre de réapparition était déchargée, manquante ou obstruée", + "tile.respawn_anchor.notValid": "Votre ancre de réapparition n'avait plus de charges ou était obstruée.", "tile.spruce_button.name": "Bouton de sapin", "tile.stone_button.name": "Bouton de pierre", "tile.cactus.name": "Cactus", @@ -22716,7 +21947,7 @@ export const langs: Langs = { "tile.nether_sprouts.name": "Pousses du Nether", "tile.crimson_stem.name": "Tige carmin", "tile.warped_stem.name": "Tige altérée", - "tile.stripped_crimson_stem.name": "Tige carmin dénudée", + "tile.stripped_crimson_stem.name": "Tige carmin dépouillée", "tile.stripped_warped_stem.name": "Tige altérée dénudée", "tile.crimson_hyphae.name": "Hyphe carmin", "tile.warped_hyphae.name": "Hyphe altérée", @@ -22756,7 +21987,7 @@ export const langs: Langs = { "tile.cracked_polished_blackstone_bricks.name": "Briques de roche noire polie craquelée", "tile.polished_blackstone_brick_stairs.name": "Escaliers en briques de roche noire polie", "tile.blackstone_stairs.name": "Escaliers en roche noire", - "tile.blackstone_wall.name": "Mur de roche noire", + "tile.blackstone_wall.name": "Muret de roche noire", "tile.polished_blackstone_brick_wall.name": "Mur en briques de roche noire polie", "tile.chiseled_polished_blackstone.name": "Briques de roche noire ciselée", "tile.gilded_blackstone.name": "Roche noire dorée", @@ -22774,7 +22005,7 @@ export const langs: Langs = { "tile.polished_tuff.name": "Tuf poli", "tile.polished_tuff_slab.name": "Dalle en tuf poli", "tile.polished_tuff_stairs.name": "Escaliers en tuf poli", - "tile.polished_tuff_wall.name": "Muret en tuf poli", + "tile.polished_tuff_wall.name": "Mur en tuf poli", "tile.soul_campfire.name": "Feu de camp des âmes", "tile.chiseled_nether_bricks.name": "Briques du Nether ciselées", "tile.cracked_nether_bricks.name": "Briques du Nether craquelées", @@ -22799,35 +22030,35 @@ export const langs: Langs = { "tile.shulkerBox.name": "Boîte de Shulker", "tile.chorus_flower.name": "Fleur de chorus", "tile.chorus_plant.name": "Plante de chorus", - "tile.stained_glass.white.name": "Verre blanc", - "tile.stained_glass.silver.name": "Verre gris clair", - "tile.stained_glass.gray.name": "Verre gris", - "tile.stained_glass.black.name": "Verre noir", - "tile.stained_glass.brown.name": "Verre marron", - "tile.stained_glass.red.name": "Verre rouge", - "tile.stained_glass.orange.name": "Verre orange", - "tile.stained_glass.yellow.name": "Verre jaune", - "tile.stained_glass.lime.name": "Verre vert clair", - "tile.stained_glass.green.name": "Verre vert", - "tile.stained_glass.cyan.name": "Verre cyan", + "tile.stained_glass.white.name": "Verre teinté blanc", + "tile.stained_glass.silver.name": "Verre teinté gris pâle", + "tile.stained_glass.gray.name": "Verre teinté gris", + "tile.stained_glass.black.name": "Verre teinté noir", + "tile.stained_glass.brown.name": "Verre teinté brun", + "tile.stained_glass.red.name": "Verre teinté rouge", + "tile.stained_glass.orange.name": "Verre teinté orange", + "tile.stained_glass.yellow.name": "Verre teinté jaune", + "tile.stained_glass.lime.name": "Verre teinté vert lime", + "tile.stained_glass.green.name": "Verre teinté vert", + "tile.stained_glass.cyan.name": "Verre teinté cyan", "tile.stained_glass.light_blue.name": "Verre teinté bleu pâle", - "tile.stained_glass.blue.name": "Verre bleu", - "tile.stained_glass.purple.name": "Verre violet", - "tile.stained_glass.magenta.name": "Verre magenta", - "tile.stained_glass.pink.name": "Verre rose", + "tile.stained_glass.blue.name": "Verre teinté bleu", + "tile.stained_glass.purple.name": "Verre teinté violet", + "tile.stained_glass.magenta.name": "Verre teinté magenta", + "tile.stained_glass.pink.name": "Verre teinté rose", "tile.stained_glass_pane.white.name": "Vitre blanche", - "tile.stained_glass_pane.silver.name": "Vitre gris pâle", - "tile.stained_glass_pane.gray.name": "Vitre grise", + "tile.stained_glass_pane.silver.name": "Vitre teintée en verre gris pâle", + "tile.stained_glass_pane.gray.name": "Vitre teintée en verre gris", "tile.stained_glass_pane.black.name": "Vitre noire", "tile.stained_glass_pane.brown.name": "Vitre marron", "tile.stained_glass_pane.red.name": "Vitre rouge", "tile.stained_glass_pane.orange.name": "Vitre orange", "tile.stained_glass_pane.yellow.name": "Vitre jaune", - "tile.stained_glass_pane.lime.name": "Vitre vert pâle", + "tile.stained_glass_pane.lime.name": "Vitre vert lime", "tile.stained_glass_pane.green.name": "Vitre verte", "tile.stained_glass_pane.cyan.name": "Vitre cyan", - "tile.stained_glass_pane.light_blue.name": "Vitre bleu pâle", - "tile.stained_glass_pane.blue.name": "Vitre bleue", + "tile.stained_glass_pane.light_blue.name": "Vitre teintée en verre bleu pâle", + "tile.stained_glass_pane.blue.name": "Vitre teintée en verre bleu", "tile.stained_glass_pane.purple.name": "Vitre violette", "tile.stained_glass_pane.magenta.name": "Vitre magenta", "tile.stained_glass_pane.pink.name": "Vitre rose", @@ -22851,8 +22082,8 @@ export const langs: Langs = { "tile.stained_hardened_clay.white.name": "Terre cuite blanche", "tile.stained_hardened_clay.yellow.name": "Terre cuite jaune", "tile.structure_block.name": "Bloc de structure", - "tile.structure_void.name": "Vide de structure", - "tile.trial_spawner.name": "Générateur d'épreuve", + "tile.structure_void.name": "Structure nulle", + "tile.trial_spawner.name": "Générateur des épreuves", "tile.vault.name": "Coffre-fort", "tile.wool.black.name": "Laine noire", "tile.wool.blue.name": "Laine bleue", @@ -22873,15 +22104,15 @@ export const langs: Langs = { "tile.wool.yellow.name": "Laine jaune", "tile.cobblestone_wall.mossy.name": "Mur en fragments de pierres moussus", "tile.cobblestone_wall.normal.name": "Mur en fragments de pierres ", - "tile.cobblestone_wall.granite.name": "Mur en granite", + "tile.cobblestone_wall.granite.name": "Muret en granite", "tile.cobblestone_wall.diorite.name": "Mur en diorite", "tile.cobblestone_wall.andesite.name": "Mur en andésite", - "tile.cobblestone_wall.sandstone.name": "Mur en grès", + "tile.cobblestone_wall.sandstone.name": "Mure en grès", "tile.cobblestone_wall.brick.name": "Mur en briques", "tile.cobblestone_wall.stone_brick.name": "Mur en briques de pierre", "tile.cobblestone_wall.mossy_stone_brick.name": "Mur en briques de pierre moussue", "tile.cobblestone_wall.nether_brick.name": "Mur en briques du Nether", - "tile.cobblestone_wall.end_brick.name": "Mur en briques de pierre de l'End", + "tile.cobblestone_wall.end_brick.name": "Mur en briques de pierre de l'Ender", "tile.cobblestone_wall.prismarine.name": "Mur en prismarine", "tile.cobblestone_wall.red_sandstone.name": "Mur en grès rouge", "tile.cobblestone_wall.red_nether_brick.name": "Mur en briques du Nether rouges", @@ -22889,7 +22120,7 @@ export const langs: Langs = { "tile.command_block.name": "Bloc de commande", "tile.composter.name": "Composteur", "tile.light_block.name": "Lumière", - "tile.repeating_command_block.name": "Répétition du bloc de commande", + "tile.repeating_command_block.name": "Répétition", "tile.chain_command_block.name": "Chaîne du bloc de commande", "tile.wheat.name": "Cultures", "tile.darkOakFence.name": "Clôture en chêne noir", @@ -22917,7 +22148,7 @@ export const langs: Langs = { "tile.dragon_egg.name": "Œuf de Dragon", "tile.dropper.name": "Droppeur", "tile.enchanting_table.name": "Table d'enchantement", - "tile.enderChest.name": "Coffre Ender", + "tile.enderChest.name": "Coffre de l'Ender", "tile.end_portal_frame.name": "Cadre de portail de l'Ender", "tile.farmland.name": "Terre labourée", "tile.fletching_table.name": "Table d'archerie", @@ -22976,6 +22207,13 @@ export const langs: Langs = { "tile.glowstone.name": "Pierre lumineuse", "tile.glow_lichen.name": "Lichen luisant", "tile.lightning_rod.name": "Paratonnerre", + "tile.exposed_lightning_rod.name": "Paratonnerre exposé", + "tile.weathered_lightning_rod.name": "Paratonnerre érodé", + "tile.oxidized_lightning_rod.name": "Paratonnerre oxydé", + "tile.waxed_lightning_rod.name": "Paratonnerre ciré", + "tile.waxed_exposed_lightning_rod.name": "Paratonnerre exposé ciré", + "tile.waxed_weathered_lightning_rod.name": "Paratonnerre érodé ciré", + "tile.waxed_oxidized_lightning_rod.name": "Paratonnerre oxydé ciré", "tile.lit_pumpkin.name": "Citrouille d'Halloween", "tile.lockedchest.name": "Coffre verrouillé", "tile.log.acacia.name": "Tronc d'acacia", @@ -23002,11 +22240,11 @@ export const langs: Langs = { "tile.red_nether_brick.name": "Briques du Nether rouges", "tile.nether_brick_fence.name": "Clôture en briques du Nether", "tile.quartz_ore.name": "Minerai de quartz du Nether", - "tile.netherreactor.active": "Actif!", + "tile.netherreactor.active": "Activé!", "tile.netherreactor.builtTooHigh": "Le réacteur du Nether doit être construit plus bas.", "tile.netherreactor.builtTooLow": "Le réacteur du Nether doit être construit plus haut.", "tile.netherreactor.name": "Cœur du réacteur du Nether", - "tile.netherreactor.playersTooFar": "Tous les joueurs doivent être près du réacteur.", + "tile.netherreactor.playersTooFar": "Tous les joueurs doivent se trouver à proximité du réacteur.", "tile.netherreactor.wrongPattern": "Pas le bon modèle!", "tile.nether_wart.name": "Verrues du Nether", "tile.nether_wart_block.name": "Bloc de verrues du Nether", @@ -23028,7 +22266,7 @@ export const langs: Langs = { "tile.piston.name": "Piston", "tile.sticky_piston.name": "Piston collant", "tile.portal.name": "Portail", - "tile.potatoes.name": "Patates", + "tile.potatoes.name": "Pommes de terre", "tile.stone_pressure_plate.name": "Plaque de pression en pierre", "tile.wooden_pressure_plate.name": "Plaque de pression en chêne", "tile.acacia_pressure_plate.name": "Plaque de pression en acacia", @@ -23086,7 +22324,7 @@ export const langs: Langs = { "tile.sponge.wet.name": "Éponge mouillée", "tile.spruceFence.name": "Clôture en sapin", "tile.spruce_fence_gate.name": "Porte de clôture en sapin", - "tile.brick_stairs.name": "Escaliers en briques", + "tile.brick_stairs.name": "Escalier en briques", "tile.nether_brick_stairs.name": "Escaliers en briques du Nether", "tile.quartz_stairs.name": "Escaliers en quartz", "tile.smooth_quartz_stairs.name": "Escaliers en quartz lisse", @@ -23114,14 +22352,14 @@ export const langs: Langs = { "tile.mossy_stone_brick_stairs.name": "Escaliers en briques de pierre moussue", "tile.smooth_red_sandstone_stairs.name": "Escaliers en grès rouge lisse", "tile.smooth_sandstone_stairs.name": "Escaliers en grès lisse", - "tile.end_brick_stairs.name": "Escaliers en briques de pierre de l'End", + "tile.end_brick_stairs.name": "Escaliers en briques de pierre de l'Ender", "tile.mossy_cobblestone_stairs.name": "Escaliers en fragments de pierres moussus", "tile.red_nether_brick_stairs.name": "Escaliers en briques du Nether rouges", "tile.smooth_stone.name": "Pierre lisse", "tile.standing_banner.black.name": "Bannière noire", "tile.standing_banner.blue.name": "Bannière bleue", "tile.standing_banner.brown.name": "Bannière brune", - "tile.standing_banner.cyan.name": "Bannière cyan", + "tile.standing_banner.cyan.name": "Bannière de cyan", "tile.standing_banner.gray.name": "Bannière grise", "tile.standing_banner.green.name": "Bannière verte", "tile.standing_banner.lightBlue.name": "Bannière bleu pâle", @@ -23143,7 +22381,7 @@ export const langs: Langs = { "tile.stone.graniteSmooth.name": "Granite poli", "tile.stone.stone.name": "Pierre", "tile.cobblestone.name": "Fragments de pierres", - "tile.stonebrick.chiseled.name": "Pierre ciselée", + "tile.stonebrick.chiseled.name": "Pierre sculptée", "tile.stonebrick.cracked.name": "Briques de pierre craquelée", "tile.stonebrick.default.name": "Briques de pierre", "tile.stonebrick.mossy.name": "Briques de pierre moussue", @@ -23160,7 +22398,7 @@ export const langs: Langs = { "tile.double_stone_slab.sand.name": "Dalle de grès", "tile.double_stone_slab.smoothStoneBrick.name": "Dalle de briques de pierre", "tile.double_stone_slab.stone.name": "Dalle en pierre", - "tile.double_stone_slab.wood.name": "Dalle en bois", + "tile.double_stone_slab.wood.name": "Dalle de bois", "tile.stone_slab.name": "Dalle en pierre", "tile.stone_slab.brick.name": "Dalle de briques", "tile.stone_slab.cobble.name": "Dalle de fragments de pierres", @@ -23169,7 +22407,7 @@ export const langs: Langs = { "tile.stone_slab.quartz.name": "Dalle de quartz", "tile.stone_slab.sand.name": "Dalle de grès", "tile.stone_slab.smoothStoneBrick.name": "Dalle de briques de pierre", - "tile.stone_slab.wood.name": "Dalle en bois", + "tile.stone_slab.wood.name": "Dalle de bois", "tile.double_stone_slab2.red_sandstone.name": "Dalle de grès rouge", "tile.stone_slab2.red_sandstone.name": "Dalle de grès rouge", "tile.stone_slab2.purpur.name": "Dalle de purpur", @@ -23179,7 +22417,7 @@ export const langs: Langs = { "tile.stone_slab2.mossy_cobblestone.name": "Dalle en fragments de pierres moussus", "tile.stone_slab2.red_nether_brick.name": "Dalle en briques du Nether rouges", "tile.stone_slab2.sandstone.smooth.name": "Dalle de grès lisse", - "tile.stone_slab3.end_brick.name": "Dalle en briques de pierre de l'End", + "tile.stone_slab3.end_brick.name": "Dalle en briques de pierre de l'Ender", "tile.stone_slab3.red_sandstone.smooth.name": "Dalle de grès rouge lisse", "tile.stone_slab3.andesite.smooth.name": "Dalle en andésite polie", "tile.stone_slab3.andesite.name": "Dalle en andésite", @@ -23208,11 +22446,11 @@ export const langs: Langs = { "tile.tallgrass.shrub.name": "Arbuste", "tile.tuff_brick_slab.name": "Dalle en briques de tuf", "tile.tuff_brick_stairs.name": "Escaliers en briques de tuf", - "tile.tuff_brick_wall.name": "Muret en briques de tuf", + "tile.tuff_brick_wall.name": "Mur en briques de tuf", "tile.tuff_bricks.name": "Briques de tuf", - "tile.tuff_slab.name": "Dalle de tuf", + "tile.tuff_slab.name": "Dalle en tuf", "tile.tuff_stairs.name": "Escaliers en tuf", - "tile.tuff_wall.name": "Muret en tuf", + "tile.tuff_wall.name": "Mur en tuf", "tile.seagrass.seagrass.name": "Herbier marin", "tile.sea_pickle.name": "Concombre de mer", "tile.turtle_egg.name": "Œuf de tortue", @@ -23236,7 +22474,7 @@ export const langs: Langs = { "tile.coral_fan_dead.purple_fan.name": "Gorgone de corail bulles morte", "tile.coral_fan_dead.red_fan.name": "Gorgone de corail de feu morte", "tile.coral_fan_dead.yellow_fan.name": "Gorgone de corail tétracoralliaire morte", - "tile.glass_pane.name": "Panneau en verre", + "tile.glass_pane.name": "Vitre", "tile.tnt.name": "TNT", "tile.snow_layer.name": "Neige", "tile.torch.name": "Torche", @@ -23257,13 +22495,13 @@ export const langs: Langs = { "tile.web.name": "Toile d'araignée", "tile.heavy_weighted_pressure_plate.name": "Plaque de pression pondérée lourde", "tile.light_weighted_pressure_plate.name": "Plaque de pression pondérée légère", - "tile.end_stone.name": "Pierre End", + "tile.end_stone.name": "Pierre de l'Ender", "tile.end_bricks.name": "Briques de pierre de l'Ender", "tile.planks.acacia.name": "Planches d'acacia", "tile.planks.big_oak.name": "Planches de chêne noir", "tile.planks.birch.name": "Planches de bouleau", "tile.planks.jungle.name": "Planches en bois tropical", - "tile.planks.name": "Planches de bois", + "tile.planks.name": "Planche de bois", "tile.planks.oak.name": "Planches de chêne", "tile.planks.spruce.name": "Planches d'épinette", "tile.wooden_slab.acacia.name": "Dalle en acacia", @@ -23430,7 +22668,7 @@ export const langs: Langs = { "tile.cobbled_deepslate_wall.name": "Mur en fragments d'ardoise des abîmes", "tile.polished_deepslate.name": "Ardoise des abîmes polie", "tile.polished_deepslate_slab.name": "Dalle en ardoise des abîmes polie", - "tile.polished_deepslate_stairs.name": "Escaliers en ardoise des abîmes polie", + "tile.polished_deepslate_stairs.name": "Escalier en ardoise des abîmes polie", "tile.polished_deepslate_wall.name": "Mur en ardoise des abîmes polie", "tile.deepslate_tiles.name": "Tuiles d'ardoise des abîmes", "tile.deepslate_tile_slab.name": "Dalle de tuiles d'ardoise des abîmes", @@ -23477,16 +22715,16 @@ export const langs: Langs = { "tile.waxed_cut_copper.name": "Cuivre taillé ciré", "tile.waxed_exposed_cut_copper.name": "Cuivre taillé, exposé, ciré", "tile.waxed_weathered_cut_copper.name": "Cuivre taillé, érodé, ciré", - "tile.waxed_oxidized_cut_copper.name": "Cuivre taillé, oxydé, ciré", + "tile.waxed_oxidized_cut_copper.name": "Cuivre taillé oxydé, ciré", "tile.cut_copper_stairs.name": "Escaliers en cuivre coupé", "tile.exposed_cut_copper_stairs.name": "Escaliers en cuivre taillé exposé", "tile.weathered_cut_copper_stairs.name": "Escaliers en cuivre taillé érodé", "tile.oxidized_cut_copper_stairs.name": "Escaliers en cuivre taillé oxydé", "tile.waxed_cut_copper_stairs.name": "Escaliers en cuivre taillé ciré", - "tile.waxed_exposed_cut_copper_stairs.name": "Escaliers en cuivre taillé, exposé, ciré", + "tile.waxed_exposed_cut_copper_stairs.name": "Escaliers en cuivre taillé exposé, ciré", "tile.waxed_weathered_cut_copper_stairs.name": "Escaliers en cuivre taillé, érodé, ciré", - "tile.waxed_oxidized_cut_copper_stairs.name": "Escaliers en cuivre taillé, oxydé, ciré", - "tile.cut_copper_slab.name": "Dalle en cuivre", + "tile.waxed_oxidized_cut_copper_stairs.name": "Escaliers en cuivre taillé oxydé ciré", + "tile.cut_copper_slab.name": "Dalle en cuivre taillé", "tile.exposed_cut_copper_slab.name": "Dalle en cuivre taillé exposé", "tile.weathered_cut_copper_slab.name": "Dalle en cuivre taillé érodé", "tile.oxidized_cut_copper_slab.name": "Dalle en cuivre taillé oxydé", @@ -23503,13 +22741,13 @@ export const langs: Langs = { "tile.waxed_weathered_chiseled_copper.name": "Cuivre ciselé érodé ciré", "tile.weathered_chiseled_copper.name": "Cuivre ciselé érodé", "tile.copper_bulb.name": "Ampoule en cuivre", - "tile.exposed_copper_bulb.name": "Ampoule de cuivre exposé", - "tile.oxidized_copper_bulb.name": "Ampoule de cuivre oxydé", - "tile.waxed_copper_bulb.name": "Ampoule de cuivre ciré", - "tile.waxed_exposed_copper_bulb.name": "Ampoule de cuivre exposé ciré", - "tile.waxed_oxidized_copper_bulb.name": "Ampoule de cuivre oxydé ciré", - "tile.waxed_weathered_copper_bulb.name": "Ampoule de cuivre érodé ciré", - "tile.weathered_copper_bulb.name": "Ampoule de cuivre érodé", + "tile.exposed_copper_bulb.name": "Ampoule en cuivre exposé", + "tile.oxidized_copper_bulb.name": "Ampoule en cuivre oxydé", + "tile.waxed_copper_bulb.name": "Ampoule en cuivre ciré", + "tile.waxed_exposed_copper_bulb.name": "Ampoule en cuivre exposé ciré", + "tile.waxed_oxidized_copper_bulb.name": "Ampoule en cuivre oxydé ciré", + "tile.waxed_weathered_copper_bulb.name": "Ampoule en cuivre érodé ciré", + "tile.weathered_copper_bulb.name": "Ampoule en cuivre érodé", "tile.copper_door.name": "Porte en cuivre", "tile.exposed_copper_door.name": "Porte en cuivre exposé", "tile.oxidized_copper_door.name": "Porte en cuivre oxydé", @@ -23584,14 +22822,99 @@ export const langs: Langs = { "tile.tinted_glass.name": "Verre teinté", "tile.smooth_basalt.name": "Basalte lisse", "tile.wildflowers.name": "Fleurs sauvages", - "tile.firefly_bush.name": "Buisson de lucioles", + "tile.firefly_bush.name": "Buisson à lucioles", "tile.bush.name": "Buisson", - "tile.leaf_litter.name": "Couche de feuilles", + "tile.leaf_litter.name": "Feuilles mortes", "tile.cactus_flower.name": "Fleur de cactus", - "item.brown_egg.name": "Œuf marron", + "item.brown_egg.name": "Œuf brun", "item.blue_egg.name": "Œuf bleu", "tile.short_dry_grass.name": "Herbes courtes sèches", - "tile.tall_dry_grass.name": "Herbes hautes sèches" + "tile.tall_dry_grass.name": "Herbes hautes sèches", + "entity.happy_ghast.name": "Ghast joyeux", + "item.spawn_egg.entity.happy_ghast.name": "Œuf d'apparition de ghast joyeux", + "tile.dried_ghast.name": "Ghast desséché", + "item.black_harness.name": "Harnais noir", + "item.blue_harness.name": "Harnais bleu", + "item.brown_harness.name": "Harnais marron", + "item.cyan_harness.name": "Harnais cyan", + "item.gray_harness.name": "Harnais gris", + "item.green_harness.name": "Harnais vert", + "item.light_blue_harness.name": "Harnais bleu pâle", + "item.light_gray_harness.name": "Harnais gris pâle", + "item.lime_harness.name": "Harnais vert lime", + "item.magenta_harness.name": "Harnais magenta", + "item.orange_harness.name": "Harnais orange", + "item.pink_harness.name": "Harnais rose", + "item.purple_harness.name": "Harnais violet", + "item.red_harness.name": "Harnais rouge", + "item.white_harness.name": "Harnais blanc", + "item.yellow_harness.name": "Harnais jaune", + "entity.copper_golem.name": "Golem de cuivre", + "item.spawn_egg.entity.copper_golem.name": "Œuf d'apparition de golem de cuivre", + "item.copper_nugget.name": "Pépite de cuivre", + "item.copper_sword.name": "Épée en cuivre", + "item.copper_pickaxe.name": "Pioche en cuivre", + "item.copper_axe.name": "Hache en cuivre", + "item.copper_shovel.name": "Pelle en cuivre", + "item.copper_hoe.name": "Houe en cuivre", + "item.copper_boots.name": "Bottes en cuivre", + "item.copper_leggings.name": "Jambières en cuivre", + "item.copper_chestplate.name": "Plastron en cuivre", + "item.copper_helmet.name": "Casque en cuivre", + "tile.copper_chest.name": "Coffre en cuivre", + "tile.exposed_copper_chest.name": "Coffre en cuivre exposé", + "tile.weathered_copper_chest.name": "Coffre en cuivre érodé", + "tile.oxidized_copper_chest.name": "Coffre en cuivre oxydé", + "tile.waxed_copper_chest.name": "Coffre en cuivre ciré", + "tile.waxed_exposed_copper_chest.name": "Coffre en cuivre exposé ciré", + "tile.waxed_weathered_copper_chest.name": "Coffre en cuivre érodé ciré", + "tile.waxed_oxidized_copper_chest.name": "Coffre en cuivre oxydé ciré", + "tile.acacia_shelf.name": "Étagère en acacia", + "tile.bamboo_shelf.name": "Étagère en bambou", + "tile.birch_shelf.name": "Étagère en bouleau", + "tile.cherry_shelf.name": "Étagère en cerisier", + "tile.crimson_shelf.name": "Étagère carmin", + "tile.dark_oak_shelf.name": "Étagère en chêne noir", + "tile.jungle_shelf.name": "Étagère en bois tropical", + "tile.mangrove_shelf.name": "Étagère en palétuvier", + "tile.oak_shelf.name": "Étagère en chêne", + "tile.pale_oak_shelf.name": "Étagère en chêne pâle", + "tile.spruce_shelf.name": "Étagère en épinette", + "tile.warped_shelf.name": "Étagère altérée", + "tile.copper_golem_statue.name": "Statue de golem de cuivre", + "tile.exposed_copper_golem_statue.name": "Statue de golem de cuivre exposé", + "tile.weathered_copper_golem_statue.name": "Statue de golem de cuivre érodé", + "tile.oxidized_copper_golem_statue.name": "Statue de golem de cuivre oxydé", + "tile.waxed_copper_golem_statue.name": "Statue de golem de cuivre ciré", + "tile.waxed_exposed_copper_golem_statue.name": "Statue de golem de cuivre exposé ciré", + "tile.waxed_weathered_copper_golem_statue.name": "Statue de golem de cuivre érodé ciré", + "tile.waxed_oxidized_copper_golem_statue.name": "Statue de golem de cuivre oxydé ciré", + "tile.copper_chain.name": "Chaîne en cuivre", + "tile.exposed_copper_chain.name": "Chaîne en cuivre exposé", + "tile.weathered_copper_chain.name": "Chaîne en cuivre érodé", + "tile.oxidized_copper_chain.name": "Chaîne en cuivre oxydé", + "tile.waxed_copper_chain.name": "Chaîne en cuivre ciré", + "tile.waxed_exposed_copper_chain.name": "Chaîne en cuivre exposé ciré", + "tile.waxed_weathered_copper_chain.name": "Chaîne en cuivre érodé ciré", + "tile.waxed_oxidized_copper_chain.name": "Chaîne en cuivre oxydé ciré", + "tile.copper_bars.name": "Barreaux de cuivre", + "tile.exposed_copper_bars.name": "Barreaux en cuivre exposé", + "tile.weathered_copper_bars.name": "Barreaux de cuivre érodé", + "tile.oxidized_copper_bars.name": "Barreaux de cuivre oxydé", + "tile.waxed_copper_bars.name": "Barreaux de cuivre ciré", + "tile.waxed_exposed_copper_bars.name": "Barreaux de cuivre exposé ciré", + "tile.waxed_weathered_copper_bars.name": "Barreaux de cuivre érodé ciré", + "tile.waxed_oxidized_copper_bars.name": "Barreaux de cuivre oxydé ciré", + "tile.copper_lantern.name": "Lanterne en cuivre", + "tile.exposed_copper_lantern.name": "Lanterne en cuivre exposé", + "tile.weathered_copper_lantern.name": "Lanterne en cuivre érodé", + "tile.oxidized_copper_lantern.name": "Lanterne en cuivre oxydé", + "tile.waxed_copper_lantern.name": "Lanterne en cuivre ciré", + "tile.waxed_exposed_copper_lantern.name": "Lanterne en cuivre exposé ciré", + "tile.waxed_weathered_copper_lantern.name": "Lanterne en cuivre érodé ciré", + "tile.waxed_oxidized_copper_lantern.name": "Lanterne en cuivre oxydé ciré", + "tile.copper_torch.name": "Torche de cuivre", + "tile.iron_chain.name": "Chaîne en fer" }, "it_IT": { "enchantment.arrowDamage": "Potenza", @@ -23611,7 +22934,7 @@ export const langs: Langs = { "enchantment.fire": "Aspetto di fuoco", "enchantment.fishingSpeed": "Esca", "enchantment.frostwalker": "Camminatore dei ghiacci", - "enchantment.heavy_weapon.breach": "Violazione", + "enchantment.heavy_weapon.breach": "Sfondare", "enchantment.heavy_weapon.density": "Densità", "enchantment.heavy_weapon.windburst": "Raffica di vento", "enchantment.knockback": "Contraccolpo", @@ -23663,7 +22986,7 @@ export const langs: Langs = { "entity.creaking.name": "Creaking", "entity.creeper.name": "Creeper", "entity.dolphin.name": "Delfino", - "entity.goat.name": "Capra", + "entity.goat.name": "Goat", "entity.panda.name": "Panda", "entity.donkey.name": "Asino", "entity.dragon_fireball.name": "Palla di fuoco del drago", @@ -23781,8 +23104,8 @@ export const langs: Langs = { "entity.zombie_villager_v2.name": "Abitante zombi", "item.air.name": "Aria", "item.apple.name": "Mela", - "item.axolotlAdultBodySingle.name": "%1$s axolotl adulti", - "item.axolotlBabyBodySingle.name": "%1$s piccoli di axolotl", + "item.axolotlAdultBodySingle.name": "Axolotl %1$s adulto", + "item.axolotlBabyBodySingle.name": "Axolotl %1$s cucciolo", "item.axolotlColorLucy.name": "Leucistico", "item.axolotlColorCyan.name": "Ciano", "item.axolotlColorGold.name": "Oro", @@ -24751,6 +24074,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Bardatura di diamante", "item.horsearmorgold.name": "Bardatura d'oro", "item.horsearmoriron.name": "Bardatura di ferro", + "item.copper_horse_armor.name": "Bardatura di rame", "item.horsearmorleather.name": "Bardatura di cuoio", "item.gold_ingot.name": "Lingotto d'oro", "item.iron_ingot.name": "Lingotto di ferro", @@ -24934,6 +24258,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Creator", "item.record_creator_music_box.desc": "Lena Raine - Creator (Music Box)", "item.record_precipice.desc": "Aaron Cherof - Precipice", + "item.record_tears.desc": "Amos Roddy - Lacrime", + "item.record_lava_chicken.desc": "Hyper Potions - Pollo lavico", "item.redstone.name": "Polvere di pietrarossa", "item.reeds.name": "Canna da zucchero", "item.kelp.name": "Alga", @@ -25243,7 +24569,7 @@ export const langs: Langs = { "tile.mangrove_trapdoor.name": "Botola di mangrovia", "tile.mangrove_wood.name": "Legno di mangrovia", "tile.stripped_mangrove_wood.name": "Legno di mangrovia spoglia", - "item.boat.mangrove.name": "Barca in mangrovia", + "item.boat.mangrove.name": "Barca di mangrovia", "item.echo_shard.name": "Frammento di eco", "item.recovery_compass.name": "Bussola di recupero", "item.disc_fragment.name": "Frammento di disco", @@ -25733,6 +25059,13 @@ export const langs: Langs = { "tile.glowstone.name": "Luminite", "tile.glow_lichen.name": "Lichene luminoso", "tile.lightning_rod.name": "Parafulmini", + "tile.exposed_lightning_rod.name": "Parafulmini scoperto", + "tile.weathered_lightning_rod.name": "Parafulmini corroso", + "tile.oxidized_lightning_rod.name": "Parafulmini ossidato", + "tile.waxed_lightning_rod.name": "Parafulmini cerato", + "tile.waxed_exposed_lightning_rod.name": "Parafulmini scoperto cerato", + "tile.waxed_weathered_lightning_rod.name": "Parafulmini corroso cerato", + "tile.waxed_oxidized_lightning_rod.name": "Parafulmini ossidato cerato", "tile.lit_pumpkin.name": "Zucca di Halloween", "tile.lockedchest.name": "Cassa chiusa", "tile.log.acacia.name": "Tronco di acacia", @@ -26340,7 +25673,7 @@ export const langs: Langs = { "tile.calcite.name": "Calcite", "tile.tinted_glass.name": "Vetro opaco", "tile.smooth_basalt.name": "Basalto liscio", - "tile.wildflowers.name": "Fiori di campo", + "tile.wildflowers.name": "Fiori selvatici", "tile.firefly_bush.name": "Cespuglio con lucciole", "tile.bush.name": "Cespuglio", "tile.leaf_litter.name": "Strato di foglie", @@ -26348,7 +25681,92 @@ export const langs: Langs = { "item.brown_egg.name": "Uovo marrone", "item.blue_egg.name": "Uovo blu", "tile.short_dry_grass.name": "Erba bassa secca", - "tile.tall_dry_grass.name": "Erba alta secca" + "tile.tall_dry_grass.name": "Erba alta secca", + "entity.happy_ghast.name": "Ghast felice", + "item.spawn_egg.entity.happy_ghast.name": "Uovo di generazione del Ghast felice", + "tile.dried_ghast.name": "Ghast essiccato", + "item.black_harness.name": "Imbracatura nera", + "item.blue_harness.name": "Imbracatura blu", + "item.brown_harness.name": "Imbracatura marrone", + "item.cyan_harness.name": "Imbracatura ciano", + "item.gray_harness.name": "Imbracatura grigia", + "item.green_harness.name": "Imbracatura verde", + "item.light_blue_harness.name": "Imbracatura azzurra", + "item.light_gray_harness.name": "Imbracatura grigio chiaro", + "item.lime_harness.name": "Imbracatura lime", + "item.magenta_harness.name": "Imbracatura magenta", + "item.orange_harness.name": "Imbracatura arancione", + "item.pink_harness.name": "Imbracatura rosa", + "item.purple_harness.name": "Imbracatura viola", + "item.red_harness.name": "Imbracatura rossa", + "item.white_harness.name": "Imbracatura bianca", + "item.yellow_harness.name": "Imbracatura gialla", + "entity.copper_golem.name": "Golem di rame", + "item.spawn_egg.entity.copper_golem.name": "Uovo di generazione del Golem di rame", + "item.copper_nugget.name": "Pepita di rame", + "item.copper_sword.name": "Spada di rame", + "item.copper_pickaxe.name": "Piccone di rame", + "item.copper_axe.name": "Ascia di rame", + "item.copper_shovel.name": "Pala di rame", + "item.copper_hoe.name": "Zappa di rame", + "item.copper_boots.name": "Stivali di rame", + "item.copper_leggings.name": "Gambiere di rame", + "item.copper_chestplate.name": "Corazza di rame", + "item.copper_helmet.name": "Elmo di rame", + "tile.copper_chest.name": "Baule di rame", + "tile.exposed_copper_chest.name": "Baule di rame scoperto", + "tile.weathered_copper_chest.name": "Baule di rame corroso", + "tile.oxidized_copper_chest.name": "Baule di rame ossidato", + "tile.waxed_copper_chest.name": "Baule di rame cerato", + "tile.waxed_exposed_copper_chest.name": "Baule di rame scoperto cerato", + "tile.waxed_weathered_copper_chest.name": "Baule di rame corroso cerato", + "tile.waxed_oxidized_copper_chest.name": "Baule di rame ossidato cerato", + "tile.acacia_shelf.name": "Scaffale in acacia", + "tile.bamboo_shelf.name": "Scaffale in bambù", + "tile.birch_shelf.name": "Scaffale in betulla", + "tile.cherry_shelf.name": "Scaffale in ciliegio", + "tile.crimson_shelf.name": "Scaffale cremisi", + "tile.dark_oak_shelf.name": "Scaffale in rovere", + "tile.jungle_shelf.name": "Scaffale della giungla", + "tile.mangrove_shelf.name": "Scaffale di mangrovia", + "tile.oak_shelf.name": "Scaffale in quercia", + "tile.pale_oak_shelf.name": "Scaffale in quercia pallida", + "tile.spruce_shelf.name": "Scaffale in abete", + "tile.warped_shelf.name": "Scaffale deformato", + "tile.copper_golem_statue.name": "Statua di golem di rame", + "tile.exposed_copper_golem_statue.name": "Statua di golem di rame scoperto", + "tile.weathered_copper_golem_statue.name": "Statua di golem di rame corroso", + "tile.oxidized_copper_golem_statue.name": "Statua di golem di rame ossidato", + "tile.waxed_copper_golem_statue.name": "Statua di golem di rame cerato", + "tile.waxed_exposed_copper_golem_statue.name": "Statua di golem di rame cerato scoperto", + "tile.waxed_weathered_copper_golem_statue.name": "Statua di golem di rame corroso cerato", + "tile.waxed_oxidized_copper_golem_statue.name": "Statua di golem di rame cerato ossidato", + "tile.copper_chain.name": "Catena di rame", + "tile.exposed_copper_chain.name": "Catena di rame scoperto", + "tile.weathered_copper_chain.name": "Catena di rame corroso", + "tile.oxidized_copper_chain.name": "Catena di rame ossidato", + "tile.waxed_copper_chain.name": "Catena di rame cerato", + "tile.waxed_exposed_copper_chain.name": "Catena di rame scoperto cerato", + "tile.waxed_weathered_copper_chain.name": "Catena di rame corroso cerato", + "tile.waxed_oxidized_copper_chain.name": "Catena di rame ossidato cerato", + "tile.copper_bars.name": "Sbarre di rame", + "tile.exposed_copper_bars.name": "Sbarre di rame scoperto", + "tile.weathered_copper_bars.name": "Sbarre di rame corroso", + "tile.oxidized_copper_bars.name": "Sbarre di rame ossidato", + "tile.waxed_copper_bars.name": "Sbarre di rame cerato", + "tile.waxed_exposed_copper_bars.name": "Sbarre di rame scoperto cerato", + "tile.waxed_weathered_copper_bars.name": "Sbarre di rame corroso cerato", + "tile.waxed_oxidized_copper_bars.name": "Sbarre di rame ossidato cerato", + "tile.copper_lantern.name": "Lanterna di rame", + "tile.exposed_copper_lantern.name": "Lanterna di rame scoperto", + "tile.weathered_copper_lantern.name": "Lanterna di rame corroso", + "tile.oxidized_copper_lantern.name": "Lanterna di rame ossidato", + "tile.waxed_copper_lantern.name": "Lanterna di rame cerato", + "tile.waxed_exposed_copper_lantern.name": "Lanterna di rame scoperto cerato", + "tile.waxed_weathered_copper_lantern.name": "Lanterna di rame corroso cerato", + "tile.waxed_oxidized_copper_lantern.name": "Lanterna di rame ossidato cerato", + "tile.copper_torch.name": "Torcia di rame", + "tile.iron_chain.name": "Catena di ferro" }, "ja_JP": { "enchantment.arrowDamage": "射撃ダメージ増加", @@ -26420,7 +25838,7 @@ export const langs: Langs = { "entity.creaking.name": "クリーキング", "entity.creeper.name": "クリーパー", "entity.dolphin.name": "イルカ", - "entity.goat.name": "ヤギ", + "entity.goat.name": "山羊", "entity.panda.name": "パンダ", "entity.donkey.name": "ロバ", "entity.dragon_fireball.name": "ドラゴンの火の玉", @@ -26479,18 +25897,18 @@ export const langs: Langs = { "entity.pig.name": "ブタ", "entity.piglin.name": "ピグリン", "entity.pillager.name": "ピリジャー", - "entity.polar_bear.name": "シロクマ", + "entity.polar_bear.name": "ホッキョクグマ", "entity.rabbit.name": "ウサギ", "entity.sheep.name": "ヒツジ", "entity.shulker.name": "シュルカー", "entity.shulker_bullet.name": "シュルカーの弾", "entity.silverfish.name": "シルバーフィッシュ", "entity.skeleton.name": "スケルトン", - "entity.skeleton_horse.name": "スケルトン ウマ", + "entity.skeleton_horse.name": "スケルトンホース", "entity.stray.name": "ストレイ", "entity.slime.name": "スライム", "entity.small_fireball.name": "小さな火の玉", - "entity.sniffer.name": "スニファー", + "entity.sniffer.name": "スニッファー", "entity.snowball.name": "雪玉", "entity.snow_golem.name": "スノウゴーレム", "entity.spider.name": "クモ", @@ -26547,7 +25965,7 @@ export const langs: Langs = { "item.axolotlColorBlue.name": "青色", "item.golden_apple.name": "金のリンゴ", "item.appleEnchanted.name": "エンチャントされた金のリンゴ", - "item.armadillo_scute.name": "アルマジロの甲羅", + "item.armadillo_scute.name": "アルマジロのウロコ", "item.armor_stand.name": "防具立て", "item.arrow.name": "矢", "item.tipped_arrow.name": "効能付きの矢", @@ -27055,8 +26473,8 @@ export const langs: Langs = { "item.banner.stripe_bottom.lightBlue": "下に空色の横帯入り", "item.banner.stripe_bottom.lime": "下に黄緑の横帯入り", "item.banner.stripe_bottom.magenta": "下に赤紫の横帯入り", - "item.banner.stripe_bottom.orange": "下にオレンジの横帯入り", - "item.banner.stripe_bottom.pink": "下に桃色の横帯入り", + "item.banner.stripe_bottom.orange": "下に橙色の横帯入り", + "item.banner.stripe_bottom.pink": "下にピンクの横帯入り", "item.banner.stripe_bottom.purple": "下に紫の横帯入り", "item.banner.stripe_bottom.red": "下に赤の横帯入り", "item.banner.stripe_bottom.silver": "下に薄灰色の横帯入り", @@ -27167,8 +26585,8 @@ export const langs: Langs = { "item.banner.stripe_top.lightBlue": "上に空色の横帯入り", "item.banner.stripe_top.lime": "上に黄緑の横帯入り", "item.banner.stripe_top.magenta": "上に赤紫の横帯入り", - "item.banner.stripe_top.orange": "上にオレンジの横帯入り", - "item.banner.stripe_top.pink": "上に桃色の横帯入り", + "item.banner.stripe_top.orange": "上に橙色の横帯入り", + "item.banner.stripe_top.pink": "上にピンクの横帯入り", "item.banner.stripe_top.purple": "上に紫の横帯入り", "item.banner.stripe_top.red": "上に赤の横帯入り", "item.banner.stripe_top.silver": "上に薄灰色の横帯入り", @@ -27266,7 +26684,7 @@ export const langs: Langs = { "item.blaze_rod.name": "ブレイズロッド", "item.boat.oak.name": "オークのボート", "item.boat.spruce.name": "トウヒのボート", - "item.boat.birch.name": "樺のボート", + "item.boat.birch.name": "シラカバのボート", "item.boat.jungle.name": "ジャングルのボート", "item.boat.acacia.name": "アカシアのボート", "item.boat.big_oak.name": "ダークオークのボート", @@ -27342,7 +26760,7 @@ export const langs: Langs = { "item.tropicalSchoolEmperorRedSnapper.name": "センネンダイ", "item.tropicalSchoolGoatfish.name": "ヒメジ", "item.tropicalSchoolMoorishIdol.name": "ツノダシ", - "item.tropicalSchoolOrnateButterfly.name": "豪華なチョウチョウウオ", + "item.tropicalSchoolOrnateButterfly.name": "豪華なハナグロチョウチョウウオ", "item.tropicalSchoolParrotfish.name": "ブダイ", "item.tropicalSchoolQueenAngelFish.name": "クイーン エンゼルフィッシュ", "item.tropicalSchoolRedCichlid.name": "レッドシクリッド", @@ -27391,12 +26809,12 @@ export const langs: Langs = { "item.compass.name": "コンパス", "item.lodestonecompass.name": "ロードストーンコンパス", "item.cookie.name": "クッキー", - "item.copper_door.name": "銅の扉", + "item.copper_door.name": "銅のドア", "item.crossbow.name": "クロスボウ", "item.diamond.name": "ダイヤモンド", "item.repeater.name": "レッドストーンリピーター", "item.acacia_door.name": "アカシアのドア", - "item.birch_door.name": "樺のドア", + "item.birch_door.name": "シラカバのドア", "item.dark_oak_door.name": "ダークオークのドア", "item.iron_door.name": "鉄のドア", "item.jungle_door.name": "ジャングルのドア", @@ -27439,7 +26857,7 @@ export const langs: Langs = { "item.ender_eye.name": "エンダーアイ", "item.ender_pearl.name": "エンダーパール", "item.experience_bottle.name": "エンチャントの瓶", - "item.exposed_copper_door.name": "露出した銅の扉", + "item.exposed_copper_door.name": "風化した銅のドア", "item.feather.name": "羽根", "item.fermented_spider_eye.name": "発酵したクモの目", "item.fireball.name": "ファイヤーチャージ", @@ -27508,6 +26926,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "ダイヤモンドの馬鎧", "item.horsearmorgold.name": "金の馬鎧", "item.horsearmoriron.name": "鉄の馬鎧", + "item.copper_horse_armor.name": "銅の馬鎧", "item.horsearmorleather.name": "革の馬鎧", "item.gold_ingot.name": "金インゴット", "item.iron_ingot.name": "鉄インゴット", @@ -27524,7 +26943,7 @@ export const langs: Langs = { "item.netherite_helmet.name": "ネザライトのヘルメット", "item.lead.name": "リード", "item.leather.name": "革", - "item.leaves.name": "葉", + "item.leaves.name": "葉っぱ", "item.chainmail_leggings.name": "チェーンメイルのレギンス", "item.leather_leggings.name": "革のズボン", "item.diamond_leggings.name": "ダイヤモンドのレギンス", @@ -27541,11 +26960,11 @@ export const langs: Langs = { "item.map.exploration.buried_treasure.name": "宝の地図", "item.map.exploration.village_snowy.name": "雪の村の地図", "item.map.exploration.village_taiga.name": "タイガの村の地図", - "item.map.exploration.village_plains.name": "草原の村の地図", + "item.map.exploration.village_plains.name": "平原の村の地図", "item.map.exploration.village_savanna.name": "サバンナの村の地図", "item.map.exploration.village_desert.name": "砂漠の村の地図", "item.map.exploration.jungle_temple.name": "ジャングル探検家の地図", - "item.map.exploration.swamp_hut.name": "湿地帯探検家の地図", + "item.map.exploration.swamp_hut.name": "沼地探検家の地図", "item.map.exploration.trial_chambers.name": "試練の間の地図", "item.melon.name": "切ったスイカ", "item.milk.name": "ミルク バケツ", @@ -27555,93 +26974,93 @@ export const langs: Langs = { "item.minecartFurnace.name": "かまど付きトロッコ", "item.hopper_minecart.name": "ホッパー付きトロッコ", "item.ominous_bottle.name": "不吉な瓶", - "item.ominous_trial_key.name": "不吉な試練のカギ", - "item.oxidized_copper_door.name": "酸化した銅の扉", + "item.ominous_trial_key.name": "不吉な試練の鍵", + "item.oxidized_copper_door.name": "酸化した銅のドア", "item.tnt_minecart.name": "TNT付きのトロッコ", "item.pitcher_pod.name": "ウツボカズラのさや", "item.torchflower_seeds.name": "トーチフラワーの種", - "item.spawn_egg.entity.agent.name": "エージェントのスポーン エッグ", - "item.spawn_egg.entity.armadillo.name": "アルマジロのスポーン エッグ", - "item.spawn_egg.entity.axolotl.name": "ウーパールーパーのスポーン エッグ", - "item.spawn_egg.entity.bee.name": "ハチのスポーン エッグ", + "item.spawn_egg.entity.agent.name": "エージェントのスポーンエッグ", + "item.spawn_egg.entity.armadillo.name": "アルマジロのスポーンエッグ", + "item.spawn_egg.entity.axolotl.name": "ウーパールーパーのスポーンエッグ", + "item.spawn_egg.entity.bee.name": "ハチのスポーンエッグ", "item.spawn_egg.entity.bogged.name": "ボグドのスポーンエッグ", "item.spawn_egg.entity.breeze.name": "ブリーズのスポーンエッグ", - "item.spawn_egg.entity.hoglin.name": "ホグリンのスポーン エッグ", - "item.spawn_egg.entity.cat.name": "ネコのスポーン エッグ", - "item.spawn_egg.entity.chicken.name": "ニワトリのスポーン エッグ", - "item.spawn_egg.entity.cow.name": "ウシのスポーン エッグ", - "item.spawn_egg.entity.cod.name": "タラのスポーン エッグ", - "item.spawn_egg.entity.creaking.name": "クリーキングのスポーン エッグ", - "item.spawn_egg.entity.ender_dragon.name": "エンダー ドラゴンのスポーン エッグ", - "item.spawn_egg.entity.goat.name": "ヤギのスポーン エッグ", - "item.spawn_egg.entity.pufferfish.name": "フグのスポーン エッグ", - "item.spawn_egg.entity.salmon.name": "鮭のスポーン エッグ", - "item.spawn_egg.entity.tropicalfish.name": "熱帯魚のスポーン エッグ", - "item.spawn_egg.entity.pig.name": "ブタのスポーン エッグ", - "item.spawn_egg.entity.sheep.name": "羊のスポーン エッグ", - "item.spawn_egg.entity.npc.name": "NPC のスポーン エッグ", + "item.spawn_egg.entity.hoglin.name": "ホグリンのスポーンエッグ", + "item.spawn_egg.entity.cat.name": "ネコのスポーンエッグ", + "item.spawn_egg.entity.chicken.name": "ニワトリのスポーンエッグ", + "item.spawn_egg.entity.cow.name": "ウシのスポーンエッグ", + "item.spawn_egg.entity.cod.name": "タラのスポーンエッグ", + "item.spawn_egg.entity.creaking.name": "クリーキングのスポーンエッグ", + "item.spawn_egg.entity.ender_dragon.name": "エンダードラゴンのスポーンエッグ", + "item.spawn_egg.entity.goat.name": "ヤギのスポーンエッグ", + "item.spawn_egg.entity.pufferfish.name": "フグのスポーンエッグ", + "item.spawn_egg.entity.salmon.name": "鮭のスポーンエッグ", + "item.spawn_egg.entity.tropicalfish.name": "熱帯魚のスポーンエッグ", + "item.spawn_egg.entity.pig.name": "ブタのスポーンエッグ", + "item.spawn_egg.entity.sheep.name": "羊のスポーンエッグ", + "item.spawn_egg.entity.npc.name": "NPC のスポーンエッグ", "item.spawn_egg.entity.npc.failed": "NPC をスポーンするにはクリエイティブ モード + オペレーター権限が必要です", - "item.spawn_egg.entity.wolf.name": "オオカミのスポーン エッグ", - "item.spawn_egg.entity.villager.name": "村人のスポーン エッグ", - "item.spawn_egg.entity.villager_v2.name": "村人のスポーン エッグ", - "item.spawn_egg.entity.vindicator.name": "ヴィンディケーターのスポーン エッグ", - "item.spawn_egg.entity.mooshroom.name": "ムーシュルームのスポーン エッグ", - "item.spawn_egg.entity.squid.name": "イカのスポーン エッグ", - "item.spawn_egg.entity.glow_squid.name": "発光するイカのスポーン エッグ", - "item.spawn_egg.entity.rabbit.name": "ウサギのスポーン エッグ", - "item.spawn_egg.entity.bat.name": "コウモリのスポーン エッグ", - "item.spawn_egg.entity.ravager.name": "ラヴェジャーのスポーン エッグ", - "item.spawn_egg.entity.iron_golem.name": "アイアン ゴーレムのスポーン エッグ", - "item.spawn_egg.entity.snow_golem.name": "スノー ゴーレムのスポーン エッグ", - "item.spawn_egg.entity.ocelot.name": "ヤマネコのスポーン エッグ", - "item.spawn_egg.entity.parrot.name": "オウムのスポーン エッグ", - "item.spawn_egg.entity.horse.name": "ウマのスポーン エッグ", - "item.spawn_egg.entity.llama.name": "ラマのスポーン エッグ", - "item.spawn_egg.entity.trader_llama.name": "商人ラマのスポーン エッグ", - "item.spawn_egg.entity.polar_bear.name": "ホッキョクグマのスポーン エッグ", - "item.spawn_egg.entity.donkey.name": "ロバのスポーン エッグ", - "item.spawn_egg.entity.mule.name": "ラバのスポーン エッグ", - "item.spawn_egg.entity.skeleton_horse.name": "スケルトン ウマのスポーン エッグ", - "item.spawn_egg.entity.zombie_horse.name": "ゾンビ ウマのスポーン エッグ", - "item.spawn_egg.entity.zombie.name": "ゾンビのスポーン エッグ", - "item.spawn_egg.entity.drowned.name": "溺死ゾンビのスポーン エッグ", - "item.spawn_egg.entity.creeper.name": "クリーパーのスポーン エッグ", - "item.spawn_egg.entity.skeleton.name": "スケルトンのスポーン エッグ", - "item.spawn_egg.entity.spider.name": "クモのスポーン エッグ", - "item.spawn_egg.entity.zombie_pigman.name": "ゾンビ化したピグリンのスポーン エッグ", - "item.spawn_egg.entity.strider.name": "ストライダーのスポーン エッグ", - "item.spawn_egg.entity.slime.name": "スライムのスポーン エッグ", - "item.spawn_egg.entity.enderman.name": "エンダーマンのスポーン エッグ", - "item.spawn_egg.entity.silverfish.name": "シルバーフィッシュのスポーン エッグ", - "item.spawn_egg.entity.cave_spider.name": "洞窟グモのスポーン エッグ", - "item.spawn_egg.entity.ghast.name": "ガストのスポーン エッグ", - "item.spawn_egg.entity.magma_cube.name": "マグマ キューブのスポーン エッグ", - "item.spawn_egg.entity.blaze.name": "ブレイズのスポーン エッグ", - "item.spawn_egg.entity.zombie_villager.name": "村人ゾンビのスポーン エッグ", - "item.spawn_egg.entity.zombie_villager_v2.name": "村人ゾンビのスポーン エッグ", - "item.spawn_egg.entity.witch.name": "ウィッチのスポーン エッグ", - "item.spawn_egg.entity.stray.name": "ストレイのスポーン エッグ", - "item.spawn_egg.entity.husk.name": "ハスクのスポーン エッグ", - "item.spawn_egg.entity.wither_skeleton.name": "ウィザー スケルトンのスポーン エッグ", - "item.spawn_egg.entity.guardian.name": "ガーディアンのスポーン エッグ", - "item.spawn_egg.entity.elder_guardian.name": "エルダー ガーディアンのスポーン エッグ", - "item.spawn_egg.entity.shulker.name": "シュルカーのスポーン エッグ", - "item.spawn_egg.entity.endermite.name": "エンダーマイトのスポーン エッグ", - "item.spawn_egg.entity.evocation_illager.name": "エヴォーカーのスポーン エッグ", - "item.spawn_egg.entity.vex.name": "ヴェックスのスポーン エッグ", - "item.spawn_egg.entity.turtle.name": "カメのスポーン エッグ", - "item.spawn_egg.entity.dolphin.name": "イルカのスポーン エッグ", - "item.spawn_egg.entity.phantom.name": "ファントムのスポーン エッグ", - "item.spawn_egg.entity.panda.name": "パンダのスポーン エッグ", - "item.spawn_egg.entity.pillager.name": "略奪者のスポーン エッグ", - "item.spawn_egg.entity.piglin_brute.name": "ピグリン ブルートのスポーン エッグ", - "item.spawn_egg.entity.piglin.name": "ピグリンのスポーン エッグ", - "item.spawn_egg.entity.fox.name": "キツネのスポーン エッグ", - "item.spawn_egg.entity.unknown.name": "スポーン エッグ", - "item.spawn_egg.entity.wandering_trader.name": "行商人のスポーン エッグ", - "item.spawn_egg.entity.wither.name": "ウィザーのスポーン エッグ", - "item.spawn_egg.entity.zoglin.name": "ゾグリンのスポーン エッグ", - "item.spawn_egg.entity.sniffer.name": "スニッファーのスポーン エッグ", + "item.spawn_egg.entity.wolf.name": "オオカミのスポーンエッグ", + "item.spawn_egg.entity.villager.name": "村人のスポーンエッグ", + "item.spawn_egg.entity.villager_v2.name": "村人のスポーンエッグ", + "item.spawn_egg.entity.vindicator.name": "ヴィンディケーターのスポーンエッグ", + "item.spawn_egg.entity.mooshroom.name": "ムーシュルームのスポーンエッグ", + "item.spawn_egg.entity.squid.name": "イカのスポーンエッグ", + "item.spawn_egg.entity.glow_squid.name": "発光するイカのスポーンエッグ", + "item.spawn_egg.entity.rabbit.name": "ウサギのスポーンエッグ", + "item.spawn_egg.entity.bat.name": "コウモリのスポーンエッグ", + "item.spawn_egg.entity.ravager.name": "ラヴェジャーのスポーンエッグ", + "item.spawn_egg.entity.iron_golem.name": "アイアンゴーレムのスポーンエッグ", + "item.spawn_egg.entity.snow_golem.name": "スノー ゴーレムのスポーンエッグ", + "item.spawn_egg.entity.ocelot.name": "ヤマネコのスポーンエッグ", + "item.spawn_egg.entity.parrot.name": "オウムのスポーンエッグ", + "item.spawn_egg.entity.horse.name": "ウマのスポーンエッグ", + "item.spawn_egg.entity.llama.name": "ラマのスポーンエッグ", + "item.spawn_egg.entity.trader_llama.name": "商人ラマのスポーンエッグ", + "item.spawn_egg.entity.polar_bear.name": "ホッキョクグマのスポーンエッグ", + "item.spawn_egg.entity.donkey.name": "ロバのスポーンエッグ", + "item.spawn_egg.entity.mule.name": "ラバのスポーンエッグ", + "item.spawn_egg.entity.skeleton_horse.name": "スケルトンホースのスポーンエッグ", + "item.spawn_egg.entity.zombie_horse.name": "ゾンビ ウマのスポーンエッグ", + "item.spawn_egg.entity.zombie.name": "ゾンビのスポーンエッグ", + "item.spawn_egg.entity.drowned.name": "ドラウンドのスポーンエッグ", + "item.spawn_egg.entity.creeper.name": "クリーパーのスポーンエッグ", + "item.spawn_egg.entity.skeleton.name": "スケルトンのスポーンエッグ", + "item.spawn_egg.entity.spider.name": "クモのスポーンエッグ", + "item.spawn_egg.entity.zombie_pigman.name": "ゾンビ化したピグリンのスポーンエッグ", + "item.spawn_egg.entity.strider.name": "ストライダーのスポーンエッグ", + "item.spawn_egg.entity.slime.name": "スライムのスポーンエッグ", + "item.spawn_egg.entity.enderman.name": "エンダーマンのスポーンエッグ", + "item.spawn_egg.entity.silverfish.name": "シルバーフィッシュのスポーンエッグ", + "item.spawn_egg.entity.cave_spider.name": "洞窟グモのスポーンエッグ", + "item.spawn_egg.entity.ghast.name": "ガストのスポーンエッグ", + "item.spawn_egg.entity.magma_cube.name": "マグマキューブのスポーンエッグ", + "item.spawn_egg.entity.blaze.name": "ブレイズのスポーンエッグ", + "item.spawn_egg.entity.zombie_villager.name": "村人ゾンビのスポーンエッグ", + "item.spawn_egg.entity.zombie_villager_v2.name": "村人ゾンビのスポーンエッグ", + "item.spawn_egg.entity.witch.name": "ウィッチのスポーンエッグ", + "item.spawn_egg.entity.stray.name": "ストレイのスポーンエッグ", + "item.spawn_egg.entity.husk.name": "ハスクのスポーンエッグ", + "item.spawn_egg.entity.wither_skeleton.name": "ウィザー スケルトンのスポーンエッグ", + "item.spawn_egg.entity.guardian.name": "ガーディアンのスポーンエッグ", + "item.spawn_egg.entity.elder_guardian.name": "エルダーガーディアンのスポーンエッグ", + "item.spawn_egg.entity.shulker.name": "シュルカーのスポーンエッグ", + "item.spawn_egg.entity.endermite.name": "エンダーマイトのスポーンエッグ", + "item.spawn_egg.entity.evocation_illager.name": "エヴォーカーのスポーンエッグ", + "item.spawn_egg.entity.vex.name": "ヴェックスのスポーンエッグ", + "item.spawn_egg.entity.turtle.name": "カメのスポーンエッグ", + "item.spawn_egg.entity.dolphin.name": "イルカのスポーンエッグ", + "item.spawn_egg.entity.phantom.name": "ファントムのスポーンエッグ", + "item.spawn_egg.entity.panda.name": "パンダのスポーンエッグ", + "item.spawn_egg.entity.pillager.name": "略奪者のスポーンエッグ", + "item.spawn_egg.entity.piglin_brute.name": "ピグリンブルートのスポーンエッグ", + "item.spawn_egg.entity.piglin.name": "ピグリンのスポーンエッグ", + "item.spawn_egg.entity.fox.name": "キツネのスポーンエッグ", + "item.spawn_egg.entity.unknown.name": "スポーンエッグ", + "item.spawn_egg.entity.wandering_trader.name": "行商人のスポーンエッグ", + "item.spawn_egg.entity.wither.name": "ウィザーのスポーンエッグ", + "item.spawn_egg.entity.zoglin.name": "ゾグリンのスポーンエッグ", + "item.spawn_egg.entity.sniffer.name": "スニッファーのスポーンエッグ", "item.trident.name": "トライデント", "item.mushroom_stew.name": "キノコシチュー", "item.muttonCooked.name": "焼き羊肉", @@ -27691,6 +27110,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Creator", "item.record_creator_music_box.desc": "Lena Raine - Creator (オルゴール)", "item.record_precipice.desc": "Aaron Cherof - Precipice", + "item.record_tears.desc": "エイモス・ロディ - 涙", + "item.record_lava_chicken.desc": "Hyper Potions - 溶岩チキン", "item.redstone.name": "レッドストーンダスト", "item.reeds.name": "サトウキビ", "item.kelp.name": "コンブ", @@ -27710,13 +27131,13 @@ export const langs: Langs = { "item.wooden_shovel.name": "木のシャベル", "item.sign.name": "オークの看板", "item.spruce_sign.name": "トウヒの看板", - "item.birch_sign.name": "樺の看板", + "item.birch_sign.name": "シラカバの看板", "item.jungle_sign.name": "ジャングルの看板", "item.acacia_sign.name": "アカシアの看板", "item.darkoak_sign.name": "ダークオークの看板", "item.crimson_sign.name": "真紅の看板", "item.warped_sign.name": "歪んだ看板", - "item.skull.char.name": "プレイヤー ヘッド", + "item.skull.char.name": "プレイヤーの頭", "item.skull.creeper.name": "クリーパーの頭", "item.skull.dragon.name": "ドラゴンの頭", "item.skull.player.name": "%sの頭", @@ -27737,22 +27158,22 @@ export const langs: Langs = { "item.stone_sword.name": "石の剣", "item.wooden_sword.name": "木の剣", "item.unbreakable": "不可壊", - "item.waxed_copper_door.name": "磨いた銅の扉", - "item.waxed_exposed_copper_door.name": "磨いた露出した銅の扉", - "item.waxed_oxidized_copper_door.name": "磨いた酸化した銅の扉", - "item.waxed_weathered_copper_door.name": "磨いた風化した銅の扉", - "item.weathered_copper_door.name": "風化した銅の扉", + "item.waxed_copper_door.name": "錆止めされた銅のドア", + "item.waxed_exposed_copper_door.name": "錆止めされた風化した銅のドア", + "item.waxed_oxidized_copper_door.name": "錆止めされた酸化した銅のドア", + "item.waxed_weathered_copper_door.name": "錆止めされた錆びた銅のドア", + "item.weathered_copper_door.name": "錆びた銅のドア", "item.wind_charge.name": "ウィンドチャージ", "item.wheat.name": "小麦", - "item.wolf_armor.name": "オオカミの防具", - "item.writable_book.name": "本と羽ペン", + "item.wolf_armor.name": "オオカミの鎧", + "item.writable_book.name": "本と羽根ペン", "item.written_book.name": "記入済みの本", "item.glowstone_dust.name": "グロウストーンダスト", "item.shulker_shell.name": "シュルカーの殻", "item.totem.name": "不死のトーテム", "item.trial_key.name": "試練の鍵", "item.turtle_helmet.name": "カメの甲羅", - "item.turtle_shell_piece.name": "カメの甲羅", + "item.turtle_shell_piece.name": "カメのウロコ", "item.phantom_membrane.name": "ファントムの皮膜", "item.sweet_berries.name": "スイートベリー", "item.suspicious_stew.name": "怪しげなシチュー", @@ -27761,7 +27182,7 @@ export const langs: Langs = { "item.flow_banner_pattern.name": "流れる旗の模様", "item.flower_banner_pattern.name": "花の旗の模様", "item.globe_banner_pattern.name": "地球の旗の模様", - "item.guster_banner_pattern.name": "ガスターの旗の模様", + "item.guster_banner_pattern.name": "風巻く者の旗の模様", "item.piglin_banner_pattern.name": "ブタの鼻の旗の模様", "item.skull_banner_pattern.name": "骸骨の旗の模様", "item.mojang_banner_pattern.name": "何かの旗の模様", @@ -27792,10 +27213,10 @@ export const langs: Langs = { "item.shield.lime.name": "黄緑の盾", "item.shield.yellow.name": "黄色の盾", "item.shield.silver.name": "薄灰色の盾", - "item.shield.pink.name": "桃色の盾", + "item.shield.pink.name": "ピンクの盾", "item.shield.purple.name": "紫の盾", "item.shield.red.name": "赤い盾", - "item.shield.orange.name": "オレンジの盾", + "item.shield.orange.name": "橙色の盾", "item.shield.lightBlue.name": "空色の盾", "item.shield.magenta.name": "赤紫の盾", "item.shield.gray.name": "灰色の盾", @@ -27808,7 +27229,7 @@ export const langs: Langs = { "item.black_bundle": "黒色のバンドル", "item.white_bundle": "白色のバンドル", "item.red_bundle": "赤色のバンドル", - "item.orange_bundle": "オレンジのバンドル", + "item.orange_bundle": "橙色のバンドル", "item.yellow_bundle": "黄色のバンドル", "item.green_bundle": "緑色のバンドル", "item.lime_bundle": "黄緑色のバンドル", @@ -27833,9 +27254,9 @@ export const langs: Langs = { "item.minecraft.goat_horn.sound.4": "称賛", "item.minecraft.goat_horn.sound.5": "号令", "item.minecraft.goat_horn.sound.6": "憧憬", - "item.minecraft.goat_horn.sound.7": "夢想", + "item.minecraft.goat_horn.sound.7": "夢", "potion.absorption": "衝撃吸収", - "potion.blindness": "盲目", + "potion.blindness": "暗闇", "potion.conduitPower": "コンジットパワー", "potion.confusion": "吐き気", "potion.damageBoost": "攻撃力上昇", @@ -27865,7 +27286,7 @@ export const langs: Langs = { "potion.hunger": "空腹", "potion.infested.linger.name": "虫食いの残留ポーション", "potion.infested.name": "虫食いのポーション", - "potion.infested.splash.name": "虫食いのスプラッシュ ポーション", + "potion.infested.splash.name": "虫食いのスプラッシュポーション", "potion.infested": "虫食い", "potion.invisibility": "透明化", "potion.invisibility.name": "透明化のポーション", @@ -27894,7 +27315,7 @@ export const langs: Langs = { "potion.nightVision.linger.name": "暗視の残留ポーション", "potion.oozing.linger.name": "滲出の残留ポーション", "potion.oozing.name": "滲出のポーション", - "potion.oozing.splash.name": "滲出のスプラッシュ ポーション", + "potion.oozing.splash.name": "滲出のスプラッシュポーション", "potion.oozing": "滲出", "potion.poison": "毒", "potion.poison.name": "毒のポーション", @@ -27939,15 +27360,15 @@ export const langs: Langs = { "potion.weakness.linger.name": "弱化の残留ポーション", "potion.weaving.linger.name": "巣張りの残留ポーション", "potion.weaving.name": "巣張りのポーション", - "potion.weaving.splash.name": "巣張りのスプラッシュ ポーション", + "potion.weaving.splash.name": "巣張りのスプラッシュポーション", "potion.weaving": "巣張り", "potion.windCharged.linger.name": "蓄風の残留ポーション", "potion.windCharged.name": "蓄風のポーション", - "potion.windCharged.splash.name": "蓄風のスプラッシュ ポーション", + "potion.windCharged.splash.name": "蓄風のスプラッシュポーション", "potion.windCharged": "蓄風", "potion.wither": "ウィザー", "potion.wither.name": "衰弱のポーション", - "potion.wither.splash.name": "衰弱のスプラッシュ ポーション", + "potion.wither.splash.name": "衰弱のスプラッシュポーション", "potion.wither.linger.name": "衰弱の残留ポーション", "tile.sculk_sensor.name": "スカルクセンサー", "tile.sculk.name": "スカルク", @@ -27957,19 +27378,19 @@ export const langs: Langs = { "tile.reinforced_deepslate.name": "強化された深層岩", "entity.frog.name": "カエル", "entity.tadpole.name": "オタマジャクシ", - "item.spawn_egg.entity.warden.name": "ウォーデンのスポーン エッグ", + "item.spawn_egg.entity.warden.name": "ウォーデンのスポーンエッグ", "entity.warden.name": "ウォーデン", "entity.allay.name": "アレイ", - "item.spawn_egg.entity.allay.name": "アレイのスポーン エッグ", + "item.spawn_egg.entity.allay.name": "アレイのスポーンエッグ", "item.bucketTadpole.name": "オタマジャクシ入りバケツ", - "item.spawn_egg.entity.frog.name": "カエルのスポーン エッグ", - "item.spawn_egg.entity.tadpole.name": "オタマジャクシのスポーン エッグ", + "item.spawn_egg.entity.frog.name": "カエルのスポーンエッグ", + "item.spawn_egg.entity.tadpole.name": "オタマジャクシのスポーンエッグ", "tile.frog_spawn.name": "カエルの卵", "tile.pearlescent_froglight.name": "真珠色のフロッグライト", "tile.verdant_froglight.name": "新緑色のフロッグライト", "tile.ochre_froglight.name": "黄土色のフロッグライト", "tile.mud.name": "泥", - "tile.packed_mud.name": "泥塊", + "tile.packed_mud.name": "固めた泥", "tile.mud_bricks.name": "泥レンガ", "tile.mud_brick_slab.name": "泥レンガのハーフブロック", "tile.mud_brick_double_slab": "泥レンガのダブル ハーフブロック", @@ -27981,7 +27402,7 @@ export const langs: Langs = { "tile.muddy_mangrove_roots.name": "泥だらけのマングローブの根", "item.chest_boat.oak.name": "チェスト付きのオークのボート", "item.chest_boat.spruce.name": "チェスト付きのトウヒのボート", - "item.chest_boat.birch.name": "チェスト付きの樺のボート", + "item.chest_boat.birch.name": "チェスト付きのシラカバのボート", "item.chest_boat.jungle.name": "チェスト付きのジャングルのボート", "item.chest_boat.acacia.name": "チェスト付きのアカシアのボート", "item.chest_boat.big_oak.name": "チェスト付きのダークオークのボート", @@ -28008,7 +27429,7 @@ export const langs: Langs = { "item.record_5.desc": "Samuel Åberg - 5", "entity.chest_boat.name": "チェスト付きのボート", "entity.camel.name": "ラクダ", - "entity.chest_raft.name": "チェスト付きイカダ", + "entity.chest_raft.name": "チェスト付きのイカダ", "item.acacia_hanging_sign.name": "アカシアの吊り看板", "item.angler_pottery_sherd.name": "釣り人の壺の欠片", "item.archer_pottery_sherd.name": "射手の壺の欠片", @@ -28017,7 +27438,7 @@ export const langs: Langs = { "item.bamboo_door.name": "竹のドア", "item.bamboo_hanging_sign.name": "竹の吊り看板", "item.bamboo_sign.name": "竹の看板", - "item.birch_hanging_sign.name": "樺の吊り看板", + "item.birch_hanging_sign.name": "シラカバの吊り看板", "item.blade_pottery_sherd.name": "剣の壺の欠片", "item.boat.bamboo.name": "竹のイカダ", "item.boat.cherry.name": "サクラのボート", @@ -28055,7 +27476,7 @@ export const langs: Langs = { "item.smithing_template.armor_trim.applies_to": "防具", "item.smithing_template.armor_trim.ingredients": "インゴットとクリスタル", "item.smithing_template.ingredients": "材料:", - "item.smithing_template.name": "鍛冶テンプレート", + "item.smithing_template.name": "鍛冶型", "item.smithing_template.netherite_upgrade.applies_to": "ダイヤモンドの装備", "item.smithing_template.netherite_upgrade.ingredients": "ネザライト インゴット", "item.netherite_upgrade_smithing_template.name": "ネザライト強化", @@ -28078,7 +27499,7 @@ export const langs: Langs = { "item.flow_armor_trim_smithing_template.name": "旋風の装飾", "item.bolt_armor_trim_smithing_template.name": "ネジ止め風の装飾", "item.snort_pottery_sherd.name": "鼻を鳴らす動物の壺の欠片", - "item.spawn_egg.entity.camel.name": "ラクダのスポーン エッグ", + "item.spawn_egg.entity.camel.name": "ラクダのスポーンエッグ", "item.spruce_hanging_sign.name": "トウヒの吊り看板", "item.warped_hanging_sign.name": "歪んだ吊り看板", "tile.bamboo_block.name": "竹ブロック", @@ -28101,7 +27522,7 @@ export const langs: Langs = { "tile.cherry_leaves.name": "サクラの葉", "tile.cherry_log.name": "サクラの原木", "tile.cherry_planks.name": "サクラの板材", - "tile.cherry_pressure_plate.name": "サクラの感圧版", + "tile.cherry_pressure_plate.name": "サクラの感圧板", "tile.cherry_sapling.name": "さくらの苗木", "tile.cherry_slab.name": "サクラのハーフブロック", "tile.cherry_stairs.name": "サクラの階段", @@ -28109,9 +27530,9 @@ export const langs: Langs = { "tile.cherry_wood.name": "サクラの木", "tile.chiseled_bookshelf.name": "模様入りの本棚", "tile.chiseled_tuff.name": "模様入りの凝灰岩", - "tile.chiseled_tuff_bricks.name": "模様入りの凝灰岩のレンガ", + "tile.chiseled_tuff_bricks.name": "模様入りの凝灰岩レンガ", "tile.decorated_pot.name": "飾り壺", - "tile.pink_petals.name": "桃色の花びら", + "tile.pink_petals.name": "桜色の花びら", "tile.stripped_bamboo_block.name": "表皮を剥いだ竹ブロック", "tile.stripped_cherry_log.name": "樹皮を剥いだサクラの原木", "tile.stripped_cherry_wood.name": "樹皮を剥いだサクラの木", @@ -28122,10 +27543,10 @@ export const langs: Langs = { "trim_pattern.eye.name": "要塞風の装飾", "trim_pattern.host.name": "主人風の装飾", "trim_pattern.raiser.name": "牧者風の装飾", - "trim_pattern.rib.name": "あばら模様の装飾", + "trim_pattern.rib.name": "あばら模様風の装飾", "trim_pattern.sentry.name": "略奪者風の装飾", "trim_pattern.shaper.name": "職人風の装飾", - "trim_pattern.silence.name": "静寂の装飾", + "trim_pattern.silence.name": "静寂風の装飾", "trim_pattern.snout.name": "ブタの鼻風の装飾", "trim_pattern.spire.name": "尖塔風の装飾", "trim_pattern.tide.name": "潮流風の装飾", @@ -28146,7 +27567,7 @@ export const langs: Langs = { "tile.anvil.intact.name": "金床", "tile.anvil.name": "金床", "tile.anvil.slightlyDamaged.name": "欠けた金床", - "tile.anvil.veryDamaged.name": "壊れた金床", + "tile.anvil.veryDamaged.name": "壊れかけの金床", "tile.barrier.name": "バリアブロック", "tile.beacon.name": "ビーコン", "tile.beacon.primary": "主効果", @@ -28185,8 +27606,8 @@ export const langs: Langs = { "item.glow_berries.name": "グロウベリー", "tile.moss_block.name": "苔ブロック", "tile.moss_carpet.name": "苔のカーペット", - "tile.birchFence.name": "樺のフェンス", - "tile.birch_fence_gate.name": "樺のフェンスゲート", + "tile.birchFence.name": "シラカバのフェンス", + "tile.birch_fence_gate.name": "シラカバのフェンスゲート", "tile.blast_furnace.name": "溶鉱炉", "tile.bone_block.name": "骨ブロック", "tile.coal_block.name": "石炭ブロック", @@ -28204,11 +27625,11 @@ export const langs: Langs = { "tile.brown_mushroom_block.cap.name": "茶色のキノコブロック", "tile.wooden_button.name": "オークのボタン", "tile.acacia_button.name": "アカシアのボタン", - "tile.birch_button.name": "樺のボタン", + "tile.birch_button.name": "シラカバのボタン", "tile.dark_oak_button.name": "ダークオークのボタン", "tile.jungle_button.name": "ジャングルのボタン", "tile.respawn_anchor.respawnSet": "リスポーン地点が設定されました", - "tile.respawn_anchor.notValid": "あなたのリスポーン アンカーは、残量切れとなったか、破壊されたか、もしくは何かにふさがりました", + "tile.respawn_anchor.notValid": "あなたのリスポーンアンカーは、残量切れとなったか、破壊されたか、もしくは何かにふさがりました", "tile.spruce_button.name": "トウヒのボタン", "tile.stone_button.name": "石のボタン", "tile.cactus.name": "サボテン", @@ -28267,7 +27688,7 @@ export const langs: Langs = { "tile.polished_basalt.name": "磨かれた玄武岩", "tile.blackstone.name": "ブラックストーン", "tile.polished_blackstone_bricks.name": "磨かれたブラックストーンレンガ", - "tile.cracked_polished_blackstone_bricks.name": "ひび割れたブラックストーンレンガ", + "tile.cracked_polished_blackstone_bricks.name": "ひび割れた磨かれたブラックストーンレンガ", "tile.polished_blackstone_brick_stairs.name": "磨かれたブラックストーンレンガの階段", "tile.blackstone_stairs.name": "ブラックストーンの階段", "tile.blackstone_wall.name": "ブラックストーンの塀", @@ -28278,7 +27699,7 @@ export const langs: Langs = { "tile.polished_blackstone_brick_slab.name": "磨かれたブラックストーンレンガのハーフブロック", "tile.chain.name": "鎖", "tile.soul_soil.name": "ソウルソイル", - "tile.soul_fire.name": "ソウル ファイア", + "tile.soul_fire.name": "魂の炎", "tile.polished_blackstone.name": "磨かれたブラックストーン", "tile.polished_blackstone_stairs.name": "磨かれたブラックストーンの階段", "tile.polished_blackstone_slab.name": "磨かれたブラックストーンのハーフブロック", @@ -28288,7 +27709,7 @@ export const langs: Langs = { "tile.polished_tuff.name": "磨かれた凝灰岩", "tile.polished_tuff_slab.name": "磨かれた凝灰岩のハーフブロック", "tile.polished_tuff_stairs.name": "磨かれた凝灰岩の階段", - "tile.polished_tuff_wall.name": "磨かれた凝灰岩の壁", + "tile.polished_tuff_wall.name": "磨かれた凝灰岩の塀", "tile.soul_campfire.name": "魂の焚き火", "tile.chiseled_nether_bricks.name": "模様入りのネザーレンガ", "tile.cracked_nether_bricks.name": "ひび割れたネザーレンガ", @@ -28366,7 +27787,7 @@ export const langs: Langs = { "tile.stained_hardened_clay.yellow.name": "黄色のテラコッタ", "tile.structure_block.name": "ストラクチャーブロック", "tile.structure_void.name": "ストラクチャーヴォイド", - "tile.trial_spawner.name": "トライアルスポナー", + "tile.trial_spawner.name": "試練のスポナー", "tile.vault.name": "宝物庫", "tile.wool.black.name": "黒色の羊毛", "tile.wool.blue.name": "青色の羊毛", @@ -28386,7 +27807,7 @@ export const langs: Langs = { "tile.wool.white.name": "白色の羊毛", "tile.wool.yellow.name": "黄色の羊毛", "tile.cobblestone_wall.mossy.name": "苔むした丸石の塀", - "tile.cobblestone_wall.normal.name": "丸石の壁 ", + "tile.cobblestone_wall.normal.name": "丸石の塀 ", "tile.cobblestone_wall.granite.name": "花崗岩の塀", "tile.cobblestone_wall.diorite.name": "閃緑岩の塀", "tile.cobblestone_wall.andesite.name": "安山岩の塀", @@ -28408,7 +27829,7 @@ export const langs: Langs = { "tile.wheat.name": "作物", "tile.darkOakFence.name": "ダークオークのフェンス", "tile.dark_oak_fence_gate.name": "ダークオークのフェンスゲート", - "tile.daylight_detector.name": "日光検出器", + "tile.daylight_detector.name": "日照センサー", "tile.deadbush.name": "枯れ木", "tile.detector_rail.name": "ディテクターレール", "tile.dirt.coarse.name": "粗い土", @@ -28438,7 +27859,7 @@ export const langs: Langs = { "tile.fence.name": "オークのフェンス", "tile.fence_gate.name": "オークのフェンスゲート", "tile.iron_bars.name": "鉄格子", - "tile.fire.name": "炎", + "tile.fire.name": "火", "tile.yellow_flower.dandelion.name": "タンポポ", "tile.yellow_flower.name": "花", "tile.crimson_roots.crimsonRoots.name": "真紅の根", @@ -28479,29 +27900,36 @@ export const langs: Langs = { "tile.lava.name": "溶岩", "tile.leaves.acacia.name": "アカシアの葉", "tile.leaves2.acacia.name": "アカシアの葉", - "tile.leaves.big_oak.name": "黒樫の葉", - "tile.leaves2.big_oak.name": "黒樫の葉", - "tile.leaves.birch.name": "樺の葉", + "tile.leaves.big_oak.name": "ダークオークの葉", + "tile.leaves2.big_oak.name": "ダークオークの葉", + "tile.leaves.birch.name": "シラカバの葉", "tile.leaves.jungle.name": "ジャングルの葉", - "tile.leaves.name": "葉", - "tile.leaves.oak.name": "樫の葉", + "tile.leaves.name": "葉っぱ", + "tile.leaves.oak.name": "オークの葉", "tile.leaves.spruce.name": "トウヒの葉", "tile.lever.name": "レバー", "tile.glowstone.name": "グロウストーン", "tile.glow_lichen.name": "ヒカリゴケ", "tile.lightning_rod.name": "避雷針", + "tile.exposed_lightning_rod.name": "風化した避雷針", + "tile.weathered_lightning_rod.name": "錆びた避雷針", + "tile.oxidized_lightning_rod.name": "酸化した避雷針", + "tile.waxed_lightning_rod.name": "錆止めされた避雷針", + "tile.waxed_exposed_lightning_rod.name": "錆止めされた風化した避雷針", + "tile.waxed_weathered_lightning_rod.name": "錆止めされた錆びた避雷針", + "tile.waxed_oxidized_lightning_rod.name": "錆止めされた酸化した避雷針", "tile.lit_pumpkin.name": "ジャック・オ・ランタン", "tile.lockedchest.name": "鍵つきチェスト", "tile.log.acacia.name": "アカシアの原木", "tile.log.big_oak.name": "ダークオークの原木", - "tile.log.birch.name": "樺の原木", + "tile.log.birch.name": "シラカバの原木", "tile.log.jungle.name": "ジャングルの原木", - "tile.log.name": "原木", + "tile.log.name": "丸太", "tile.log.oak.name": "オークの原木", "tile.log.spruce.name": "トウヒの原木", "tile.magma.name": "マグマブロック", "tile.melon_block.name": "スイカ", - "tile.mob_spawner.name": "モンスター スポーナー", + "tile.mob_spawner.name": "モンスタースポナー", "tile.monster_egg.brick.name": "虫食い石レンガ", "tile.monster_egg.chiseledbrick.name": "虫食いの模様入り石レンガ", "tile.monster_egg.cobble.name": "虫食い丸石", @@ -28527,7 +27955,7 @@ export const langs: Langs = { "tile.warped_wart_block.name": "歪んだウォートブロック", "tile.unlit_redstone_torch.name": "レッドストーントーチ", "tile.redstone_torch.name": "レッドストーントーチ", - "tile.soul_torch.name": "魂の松明", + "tile.soul_torch.name": "魂のたいまつ", "tile.obsidian.name": "黒曜石", "tile.coal_ore.name": "石炭鉱石", "tile.diamond_ore.name": "ダイヤモンド鉱石", @@ -28546,7 +27974,7 @@ export const langs: Langs = { "tile.stone_pressure_plate.name": "石の感圧板", "tile.wooden_pressure_plate.name": "オークの感圧板", "tile.acacia_pressure_plate.name": "アカシアの感圧板", - "tile.birch_pressure_plate.name": "樺の感圧板", + "tile.birch_pressure_plate.name": "シラカバの感圧板", "tile.dark_oak_pressure_plate.name": "ダークオークの感圧板", "tile.jungle_pressure_plate.name": "ジャングルの感圧板", "tile.spruce_pressure_plate.name": "トウヒの感圧板", @@ -28583,14 +28011,14 @@ export const langs: Langs = { "tile.sandstone.cut.name": "研がれた砂岩", "tile.sapling.acacia.name": "アカシアの苗木", "tile.sapling.big_oak.name": "ダークオークの苗木", - "tile.sapling.birch.name": "樺の苗木", + "tile.sapling.birch.name": "シラカバの苗木", "tile.sapling.jungle.name": "ジャングルの苗木", "tile.sapling.oak.name": "オークの苗木", "tile.sapling.spruce.name": "トウヒの苗木", "tile.seaLantern.name": "シーランタン", "tile.standing_sign.name": "署名", "tile.spruce_standing_sign.name": "トウヒの看板", - "tile.birch_standing_sign.name": "樺の看板", + "tile.birch_standing_sign.name": "シラカバの看板", "tile.jungle_standing_sign.name": "ジャングルの看板", "tile.acacia_standing_sign.name": "アカシアの看板", "tile.darkoak_standing_sign.name": "ダークオークの看板", @@ -28611,7 +28039,7 @@ export const langs: Langs = { "tile.stone_brick_stairs.name": "石レンガの階段", "tile.oak_stairs.name": "オークの階段", "tile.acacia_stairs.name": "アカシアの階段", - "tile.birch_stairs.name": "樺の階段", + "tile.birch_stairs.name": "シラカバの階段", "tile.dark_oak_stairs.name": "ダークオークの階段", "tile.jungle_stairs.name": "ジャングルの階段", "tile.spruce_stairs.name": "トウヒの階段", @@ -28689,7 +28117,7 @@ export const langs: Langs = { "tile.stone_slab2.purpur.name": "プルプァのハーフブロック", "tile.stone_slab2.prismarine.rough.name": "プリズマリンのハーフブロック", "tile.stone_slab2.prismarine.dark.name": "ダークプリズマリンのハーフブロック", - "tile.stone_slab2.prismarine.bricks.name": "プリズマリン レンガのハーフブロック", + "tile.stone_slab2.prismarine.bricks.name": "プリズマリンレンガのハーフブロック", "tile.stone_slab2.mossy_cobblestone.name": "苔むした丸石のハーフブロック", "tile.stone_slab2.red_nether_brick.name": "赤いネザーレンガのハーフブロック", "tile.stone_slab2.sandstone.smooth.name": "滑らかな砂岩のハーフブロック", @@ -28722,11 +28150,11 @@ export const langs: Langs = { "tile.tallgrass.shrub.name": "低木", "tile.tuff_brick_slab.name": "凝灰岩レンガのハーフブロック", "tile.tuff_brick_stairs.name": "凝灰岩レンガの階段", - "tile.tuff_brick_wall.name": "凝灰岩レンガの壁", + "tile.tuff_brick_wall.name": "凝灰岩レンガの塀", "tile.tuff_bricks.name": "凝灰岩レンガ", "tile.tuff_slab.name": "凝灰岩のハーフブロック", "tile.tuff_stairs.name": "凝灰岩の階段", - "tile.tuff_wall.name": "凝灰岩の壁", + "tile.tuff_wall.name": "凝灰岩の塀", "tile.seagrass.seagrass.name": "海草", "tile.sea_pickle.name": "シーピクルス", "tile.turtle_egg.name": "カメの卵", @@ -28753,10 +28181,10 @@ export const langs: Langs = { "tile.glass_pane.name": "ガラス板", "tile.tnt.name": "TNT", "tile.snow_layer.name": "雪", - "tile.torch.name": "松明", + "tile.torch.name": "たいまつ", "tile.trapdoor.name": "オークのトラップドア", "tile.acacia_trapdoor.name": "アカシアのトラップドア", - "tile.birch_trapdoor.name": "樺のトラップドア", + "tile.birch_trapdoor.name": "シラカバのトラップドア", "tile.dark_oak_trapdoor.name": "ダークオークのトラップドア", "tile.jungle_trapdoor.name": "ジャングルのトラップドア", "tile.spruce_trapdoor.name": "トウヒのトラップドア", @@ -28769,20 +28197,20 @@ export const langs: Langs = { "tile.water.name": "水", "tile.waterlily.name": "スイレンの葉", "tile.web.name": "クモの巣", - "tile.heavy_weighted_pressure_plate.name": "重い感圧版", - "tile.light_weighted_pressure_plate.name": "軽い感圧版", + "tile.heavy_weighted_pressure_plate.name": "重量用感圧板", + "tile.light_weighted_pressure_plate.name": "軽量用感圧板", "tile.end_stone.name": "エンドストーン", "tile.end_bricks.name": "エンドストーンレンガ", "tile.planks.acacia.name": "アカシアの板材", "tile.planks.big_oak.name": "ダークオークの板材", - "tile.planks.birch.name": "樺の板材", + "tile.planks.birch.name": "シラカバの板材", "tile.planks.jungle.name": "ジャングルの板材", "tile.planks.name": "木材", "tile.planks.oak.name": "オークの板材", "tile.planks.spruce.name": "トウヒの板材", "tile.wooden_slab.acacia.name": "アカシアのハーフブロック", "tile.wooden_slab.big_oak.name": "ダークオークのハーフブロック", - "tile.wooden_slab.birch.name": "樺のハーフブロック", + "tile.wooden_slab.birch.name": "シラカバのハーフブロック", "tile.wooden_slab.jungle.name": "ジャングルのハーフブロック", "tile.wooden_slab.name": "木のハーフブロック", "tile.wooden_slab.oak.name": "オークのハーフブロック", @@ -28823,14 +28251,14 @@ export const langs: Langs = { "tile.pale_moss_block.name": "色あせた苔ブロック", "tile.pale_moss_carpet.name": "色あせた苔のカーペット", "tile.creaking_heart.name": "クリーキングの心臓", - "tile.open_eyeblossom.name": "開いたアイブロッサム", - "tile.closed_eyeblossom.name": "閉じたアイブロッサム", + "tile.open_eyeblossom.name": "開いたヒトミソウ", + "tile.closed_eyeblossom.name": "閉じたヒトミソウ", "tile.resin_bricks.name": "樹脂レンガ", "tile.resin_brick_double_slab.name": "樹脂レンガ ダブル ハーフブロック", - "tile.resin_brick_slab.name": "樹脂レンガ ハーフブロック", + "tile.resin_brick_slab.name": "樹脂レンガのハーフブロック", "tile.resin_brick_stairs.name": "樹脂レンガの階段", - "tile.resin_brick_wall.name": "樹脂レンガの壁", - "tile.chiseled_resin_bricks.name": "模様入り樹脂レンガ", + "tile.resin_brick_wall.name": "樹脂レンガの塀", + "tile.chiseled_resin_bricks.name": "模様入りの樹脂レンガ", "tile.resin_block.name": "樹脂ブロック", "tile.resin_clump.name": "樹脂の塊", "tile.glazedTerracotta.white.name": "白色の彩釉テラコッタ", @@ -28899,7 +28327,7 @@ export const langs: Langs = { "tile.concretePowder.white.name": "白色のコンクリートパウダー", "tile.stripped_spruce_log.name": "樹皮を剥いだトウヒの原木", "tile.stripped_dark_oak_log.name": "樹皮を剥いだダークオークの原木", - "tile.stripped_birch_log.name": "樹皮を剥いだ樺の原木", + "tile.stripped_birch_log.name": "樹皮を剥いだシラカバの原木", "tile.stripped_jungle_log.name": "樹皮を剥いだジャングルの原木", "tile.stripped_oak_log.name": "樹皮を剥いだオークの原木", "tile.stripped_acacia_log.name": "樹皮を剥いだアカシアの原木", @@ -28918,13 +28346,13 @@ export const langs: Langs = { "tile.sweet_berry_bush.name": "スイートベリーの低木", "tile.wood.oak.name": "オークの木", "tile.wood.spruce.name": "トウヒの木", - "tile.wood.birch.name": "樺の木", + "tile.wood.birch.name": "シラカバの木", "tile.wood.jungle.name": "ジャングルの木", "tile.wood.acacia.name": "アカシアの木", "tile.wood.dark_oak.name": "ダークオークの木", "tile.wood.stripped.oak.name": "樹皮を剥いだオークの木", "tile.wood.stripped.spruce.name": "樹皮を剥いだトウヒの木", - "tile.wood.stripped.birch.name": "樹皮を剥いだ樺の木", + "tile.wood.stripped.birch.name": "樹皮を剥いだシラカバの木", "tile.wood.stripped.jungle.name": "樹皮を剥いだジャングルの木", "tile.wood.stripped.acacia.name": "樹皮を剥いだアカシアの木", "tile.wood.stripped.dark_oak.name": "樹皮を剥いだダークオークの木", @@ -28959,95 +28387,95 @@ export const langs: Langs = { "tile.polished_deepslate_double_slab.name": "滑らかな深層岩ダブル ハーフブロック", "tile.deepslate_tile_double_slab.name": "深層岩タイル ダブル ハーフブロック", "tile.deepslate_brick_double_slab.name": "深層岩レンガ ダブル ハーフブロック", - "tile.deepslate_lapis_ore.name": "深層岩ラピスラズリ鉱石", - "tile.deepslate_iron_ore.name": "深層岩鉄鉱石", - "tile.deepslate_gold_ore.name": "深層岩金鉱石", - "tile.deepslate_redstone_ore.name": "深層岩レッドストーン鉱石", - "tile.deepslate_diamond_ore.name": "深層岩ダイヤモンド鉱石", - "tile.deepslate_coal_ore.name": "深層岩炭鉱石", - "tile.deepslate_emerald_ore.name": "深層岩エメラルド鉱石", - "tile.deepslate_copper_ore.name": "深層岩銅鉱石", + "tile.deepslate_lapis_ore.name": "深層ラピスラズリ鉱石", + "tile.deepslate_iron_ore.name": "深層鉄鉱石", + "tile.deepslate_gold_ore.name": "深層金鉱石", + "tile.deepslate_redstone_ore.name": "深層レッドストーン鉱石", + "tile.deepslate_diamond_ore.name": "深層ダイヤモンド鉱石", + "tile.deepslate_coal_ore.name": "深層石炭鉱石", + "tile.deepslate_emerald_ore.name": "深層エメラルド鉱石", + "tile.deepslate_copper_ore.name": "深層銅鉱石", "tile.cracked_deepslate_tiles.name": "ひび割れた深層岩タイル", "tile.cracked_deepslate_bricks.name": "ひび割れた深層岩レンガ", "tile.pitcher_plant.name": "ウツボカズラ", - "tile.sniffer_egg.name": "スニファーの卵", + "tile.sniffer_egg.name": "スニッファーの卵", "tile.torchflower.name": "トーチフラワー", "item.copper_ingot.name": "銅インゴット", "item.raw_copper.name": "銅の原石", "item.raw_iron.name": "鉄の原石", "item.raw_gold.name": "金の原石", "tile.copper_block.name": "銅ブロック", - "tile.exposed_copper.name": "露出した銅", - "tile.weathered_copper.name": "風化した銅", + "tile.exposed_copper.name": "風化した銅", + "tile.weathered_copper.name": "錆びた銅", "tile.oxidized_copper.name": "酸化した銅", - "tile.waxed_copper.name": "磨いた銅ブロック", - "tile.waxed_exposed_copper.name": "磨いた露出した銅", - "tile.waxed_weathered_copper.name": "磨いた風化した銅", - "tile.waxed_oxidized_copper.name": "磨いた酸化した銅", + "tile.waxed_copper.name": "錆止めされた銅ブロック", + "tile.waxed_exposed_copper.name": "錆止めされた風化した銅", + "tile.waxed_weathered_copper.name": "錆止めされた錆びた銅", + "tile.waxed_oxidized_copper.name": "錆止めされた酸化した銅", "tile.cut_copper.name": "切り込み入りの銅", - "tile.exposed_cut_copper.name": "露出した切り込み入りの銅", - "tile.weathered_cut_copper.name": "風化した切り込み入りの銅", + "tile.exposed_cut_copper.name": "風化した切り込み入りの銅", + "tile.weathered_cut_copper.name": "錆びた切り込み入りの銅", "tile.oxidized_cut_copper.name": "酸化した切り込み入りの銅", - "tile.waxed_cut_copper.name": "磨いた切り込み入りの銅", - "tile.waxed_exposed_cut_copper.name": "磨いた露出した切り込み入りの銅", - "tile.waxed_weathered_cut_copper.name": "磨いた風化した切り込み入りの銅", - "tile.waxed_oxidized_cut_copper.name": "磨いた酸化した切り込み入りの銅", + "tile.waxed_cut_copper.name": "錆止めされた切り込み入りの銅", + "tile.waxed_exposed_cut_copper.name": "錆止めされた風化した切り込み入りの銅", + "tile.waxed_weathered_cut_copper.name": "錆止めされた錆びた切り込み入りの銅", + "tile.waxed_oxidized_cut_copper.name": "錆止めされた酸化した切り込み入りの銅", "tile.cut_copper_stairs.name": "切り込み入りの銅の階段", - "tile.exposed_cut_copper_stairs.name": "露出した切り込み入りの銅の階段", - "tile.weathered_cut_copper_stairs.name": "風化した切り込み入りの銅の階段", + "tile.exposed_cut_copper_stairs.name": "風化した切り込み入りの銅の階段", + "tile.weathered_cut_copper_stairs.name": "錆びた切り込み入りの銅の階段", "tile.oxidized_cut_copper_stairs.name": "酸化した切り込み入りの銅の階段", - "tile.waxed_cut_copper_stairs.name": "磨いた切り込み入りの銅の階段", - "tile.waxed_exposed_cut_copper_stairs.name": "磨いた露出した切り込み入りの銅の階段", - "tile.waxed_weathered_cut_copper_stairs.name": "磨いた風化した切り込み入りの銅の階段", - "tile.waxed_oxidized_cut_copper_stairs.name": "磨いた酸化した切り込み入りの銅の階段", + "tile.waxed_cut_copper_stairs.name": "錆止めされた切り込み入りの銅の階段", + "tile.waxed_exposed_cut_copper_stairs.name": "錆止めされた風化した切り込み入りの銅の階段", + "tile.waxed_weathered_cut_copper_stairs.name": "錆止めされた錆びた切り込み入りの銅の階段", + "tile.waxed_oxidized_cut_copper_stairs.name": "錆止めされた酸化した切り込み入りの銅の階段", "tile.cut_copper_slab.name": "切り込み入りの銅のハーフブロック", - "tile.exposed_cut_copper_slab.name": "露出した切り込み入りの銅のハーフブロック", - "tile.weathered_cut_copper_slab.name": "風化した切り込み入りの銅のハーフブロック", + "tile.exposed_cut_copper_slab.name": "風化した切り込み入りの銅のハーフブロック", + "tile.weathered_cut_copper_slab.name": "錆びた切り込み入りの銅のハーフブロック", "tile.oxidized_cut_copper_slab.name": "酸化した切り込み入りの銅のハーフブロック", - "tile.waxed_cut_copper_slab.name": "磨いた切り込み入りの銅のハーフブロック", - "tile.waxed_exposed_cut_copper_slab.name": "磨いた露出した切り込み入りの銅のハーフブロック", - "tile.waxed_weathered_cut_copper_slab.name": "磨いた風化した切り込み入りの銅のハーフブロック", - "tile.waxed_oxidized_cut_copper_slab.name": "磨いた酸化した切り込み入りの銅のハーフブロック", + "tile.waxed_cut_copper_slab.name": "錆止めされた切り込み入りの銅のハーフブロック", + "tile.waxed_exposed_cut_copper_slab.name": "錆止めされた風化した切り込み入りの銅のハーフブロック", + "tile.waxed_weathered_cut_copper_slab.name": "錆止めされた錆びた切り込み入りの銅のハーフブロック", + "tile.waxed_oxidized_cut_copper_slab.name": "錆止めされた酸化した切り込み入りの銅のハーフブロック", "tile.chiseled_copper.name": "模様入りの銅", - "tile.exposed_chiseled_copper.name": "露出した模様入りの銅", + "tile.exposed_chiseled_copper.name": "風化した模様入りの銅", "tile.oxidized_chiseled_copper.name": "酸化した模様入りの銅", - "tile.waxed_chiseled_copper.name": "磨いた模様入りの銅", - "tile.waxed_exposed_chiseled_copper.name": "磨いた露出した模様入りの銅", - "tile.waxed_oxidized_chiseled_copper.name": "磨いた酸化した模様入りの銅", - "tile.waxed_weathered_chiseled_copper.name": "磨いた風化した模様入りの銅", - "tile.weathered_chiseled_copper.name": "風化した模様入りの銅", + "tile.waxed_chiseled_copper.name": "錆止めされた模様入りの銅", + "tile.waxed_exposed_chiseled_copper.name": "錆止めされた風化した模様入りの銅", + "tile.waxed_oxidized_chiseled_copper.name": "錆止めされた酸化した模様入りの銅", + "tile.waxed_weathered_chiseled_copper.name": "錆止めされた錆びた模様入りの銅", + "tile.weathered_chiseled_copper.name": "錆びた模様入りの銅", "tile.copper_bulb.name": "銅の電球", - "tile.exposed_copper_bulb.name": "露出した銅の電球", + "tile.exposed_copper_bulb.name": "風化した銅の電球", "tile.oxidized_copper_bulb.name": "酸化した銅の電球", - "tile.waxed_copper_bulb.name": "磨いた銅の電球", - "tile.waxed_exposed_copper_bulb.name": "磨いた露出した銅の電球", - "tile.waxed_oxidized_copper_bulb.name": "磨いた酸化した銅の電球", - "tile.waxed_weathered_copper_bulb.name": "磨いた風化した銅の電球", - "tile.weathered_copper_bulb.name": "風化した銅の電球", - "tile.copper_door.name": "銅の扉", - "tile.exposed_copper_door.name": "露出した銅の扉", - "tile.oxidized_copper_door.name": "酸化した銅の扉", - "tile.waxed_copper_door.name": "磨いた銅の扉", - "tile.waxed_exposed_copper_door.name": "磨いた露出した銅の扉", - "tile.waxed_oxidized_copper_door.name": "磨いた酸化した銅の扉", - "tile.waxed_weathered_copper_door.name": "磨いた風化した銅の扉", - "tile.weathered_copper_door.name": "風化した銅の扉", + "tile.waxed_copper_bulb.name": "錆止めされた銅の電球", + "tile.waxed_exposed_copper_bulb.name": "錆止めされた風化した銅の電球", + "tile.waxed_oxidized_copper_bulb.name": "錆止めされた酸化した銅の電球", + "tile.waxed_weathered_copper_bulb.name": "錆止めされた錆びた銅の電球", + "tile.weathered_copper_bulb.name": "錆びた銅の電球", + "tile.copper_door.name": "銅のドア", + "tile.exposed_copper_door.name": "風化した銅のドア", + "tile.oxidized_copper_door.name": "酸化した銅のドア", + "tile.waxed_copper_door.name": "錆止めされた銅のドア", + "tile.waxed_exposed_copper_door.name": "錆止めされた風化した銅のドア", + "tile.waxed_oxidized_copper_door.name": "錆止めされた酸化した銅のドア", + "tile.waxed_weathered_copper_door.name": "錆止めされた錆びた銅のドア", + "tile.weathered_copper_door.name": "錆びた銅のドア", "tile.copper_grate.name": "銅の格子", - "tile.exposed_copper_grate.name": "露出した銅の格子", + "tile.exposed_copper_grate.name": "風化した銅の格子", "tile.oxidized_copper_grate.name": "酸化した銅の格子", - "tile.waxed_copper_grate.name": "磨いた銅の格子", - "tile.waxed_exposed_copper_grate.name": "磨いた露出した銅の格子", - "tile.waxed_oxidized_copper_grate.name": "磨いた酸化した銅の格子", - "tile.waxed_weathered_copper_grate.name": "磨いた風化した銅の格子", - "tile.weathered_copper_grate.name": "風化した銅の格子", + "tile.waxed_copper_grate.name": "錆止めされた銅の格子", + "tile.waxed_exposed_copper_grate.name": "錆止めされた風化した銅の格子", + "tile.waxed_oxidized_copper_grate.name": "錆止めされた酸化した銅の格子", + "tile.waxed_weathered_copper_grate.name": "錆止めされた錆びた銅の格子", + "tile.weathered_copper_grate.name": "錆びた銅の格子", "tile.copper_trapdoor.name": "銅のトラップドア", - "tile.exposed_copper_trapdoor.name": "露出した銅のトラップドア", + "tile.exposed_copper_trapdoor.name": "風化した銅のトラップドア", "tile.oxidized_copper_trapdoor.name": "酸化した銅のトラップドア", - "tile.waxed_copper_trapdoor.name": "磨いた銅のトラップドア", - "tile.waxed_exposed_copper_trapdoor.name": "磨いた露出した銅のトラップドア", - "tile.waxed_oxidized_copper_trapdoor.name": "磨いた酸化した銅のトラップドア", - "tile.waxed_weathered_copper_trapdoor.name": "磨いた風化した銅のトラップドア", - "tile.weathered_copper_trapdoor.name": "風化した銅のトラップドア", + "tile.waxed_copper_trapdoor.name": "錆止めされた銅のトラップドア", + "tile.waxed_exposed_copper_trapdoor.name": "錆止めされた風化した銅のトラップドア", + "tile.waxed_oxidized_copper_trapdoor.name": "錆止めされた酸化した銅のトラップドア", + "tile.waxed_weathered_copper_trapdoor.name": "錆止めされた錆びた銅のトラップドア", + "tile.weathered_copper_trapdoor.name": "錆びた銅のトラップドア", "tile.raw_copper_block.name": "銅の原石ブロック", "tile.raw_iron_block.name": "鉄の原石ブロック", "tile.raw_gold_block.name": "金の原石ブロック", @@ -29069,22 +28497,22 @@ export const langs: Langs = { "tile.red_candle.name": "赤色のろうそく", "tile.black_candle.name": "黒色のろうそく", "tile.candle_cake.name": "ろうそくが立てられたケーキ", - "tile.white_candle_cake.name": "白色のろうそく付きケーキ", - "tile.orange_candle_cake.name": "橙色のろうそく付きケーキ", - "tile.magenta_candle_cake.name": "赤紫色のろうそく付きケーキ", - "tile.light_blue_candle_cake.name": "空色のろうそく付きケーキ", - "tile.yellow_candle_cake.name": "黄色のろうそく付きケーキ", - "tile.lime_candle_cake.name": "黄緑色のろうそく付きケーキ", - "tile.pink_candle_cake.name": "桃色のろうそく付きケーキ", - "tile.gray_candle_cake.name": "灰色のろうそく付きケーキ", - "tile.light_gray_candle_cake.name": "薄灰色のろうそく付きケーキ", - "tile.cyan_candle_cake.name": "青緑色のろうそく付きケーキ", - "tile.purple_candle_cake.name": "紫色のろうそく付きケーキ", - "tile.blue_candle_cake.name": "青色のろうそく付きケーキ", - "tile.brown_candle_cake.name": "茶色のろうそく付きケーキ", - "tile.green_candle_cake.name": "緑色のろうそく付きケーキ", - "tile.red_candle_cake.name": "赤色のろうそく付きケーキ", - "tile.black_candle_cake.name": "黒色のろうそく付きケーキ", + "tile.white_candle_cake.name": "白色のろうそくが立てられたケーキ", + "tile.orange_candle_cake.name": "橙色のろうそくが立てられたケーキ", + "tile.magenta_candle_cake.name": "赤紫色のろうそくが立てられたケーキ", + "tile.light_blue_candle_cake.name": "空色のろうそくが立てられたケーキ", + "tile.yellow_candle_cake.name": "黄色のろうそくが立てられたケーキ", + "tile.lime_candle_cake.name": "黄緑色のろうそくが立てられたケーキ", + "tile.pink_candle_cake.name": "桃色のろうそくが立てられたケーキ", + "tile.gray_candle_cake.name": "灰色のろうそくが立てられたケーキ", + "tile.light_gray_candle_cake.name": "薄灰色のろうそくが立てられたケーキ", + "tile.cyan_candle_cake.name": "青緑色のろうそくが立てられたケーキ", + "tile.purple_candle_cake.name": "紫色のろうそくが立てられたケーキ", + "tile.blue_candle_cake.name": "青色のろうそくが立てられたケーキ", + "tile.brown_candle_cake.name": "茶色のろうそくが立てられたケーキ", + "tile.green_candle_cake.name": "緑色のろうそくが立てられたケーキ", + "tile.red_candle_cake.name": "赤色のろうそくが立てられたケーキ", + "tile.black_candle_cake.name": "黒色のろうそくが立てられたケーキ", "item.spyglass.name": "望遠鏡", "item.amethyst_shard.name": "アメジストの欠片", "tile.amethyst_block.name": "アメジストブロック", @@ -29105,7 +28533,92 @@ export const langs: Langs = { "item.brown_egg.name": "茶色の卵", "item.blue_egg.name": "青色の卵", "tile.short_dry_grass.name": "背の低い乾いた草", - "tile.tall_dry_grass.name": "背の高い乾いた草" + "tile.tall_dry_grass.name": "背の高い乾いた草", + "entity.happy_ghast.name": "ハッピーガスト", + "item.spawn_egg.entity.happy_ghast.name": "ハッピーガストのスポーンエッグ", + "tile.dried_ghast.name": "乾燥したガスト", + "item.black_harness.name": "黒のハーネス", + "item.blue_harness.name": "青のハーネス", + "item.brown_harness.name": "茶色のハーネス", + "item.cyan_harness.name": "青緑色のハーネス", + "item.gray_harness.name": "灰色のハーネス", + "item.green_harness.name": "緑色のハーネス", + "item.light_blue_harness.name": "空色のハーネス", + "item.light_gray_harness.name": "薄灰色のハーネス", + "item.lime_harness.name": "黄緑色のハーネス", + "item.magenta_harness.name": "赤紫色のハーネス", + "item.orange_harness.name": "橙色のハーネス", + "item.pink_harness.name": "桃色のハーネス", + "item.purple_harness.name": "紫のハーネス", + "item.red_harness.name": "赤のハーネス", + "item.white_harness.name": "白のハーネス", + "item.yellow_harness.name": "黄色のハーネス", + "entity.copper_golem.name": "銅ゴーレム", + "item.spawn_egg.entity.copper_golem.name": "銅ゴーレムのスポーン エッグ", + "item.copper_nugget.name": "銅塊", + "item.copper_sword.name": "銅の剣", + "item.copper_pickaxe.name": "銅のツルハシ", + "item.copper_axe.name": "銅の斧", + "item.copper_shovel.name": "銅のシャベル", + "item.copper_hoe.name": "銅のクワ", + "item.copper_boots.name": "銅のブーツ", + "item.copper_leggings.name": "銅のレギンス", + "item.copper_chestplate.name": "銅のチェストプレート", + "item.copper_helmet.name": "銅のヘルメット", + "tile.copper_chest.name": "銅のチェスト", + "tile.exposed_copper_chest.name": "風化した銅のチェスト", + "tile.weathered_copper_chest.name": "錆びた銅のチェスト", + "tile.oxidized_copper_chest.name": "酸化した銅のチェスト", + "tile.waxed_copper_chest.name": "錆止めされた銅のチェスト", + "tile.waxed_exposed_copper_chest.name": "錆止めされた風化した銅のチェスト", + "tile.waxed_weathered_copper_chest.name": "錆止めされた錆びた銅のチェスト", + "tile.waxed_oxidized_copper_chest.name": "錆止めされた酸化した銅のチェスト", + "tile.acacia_shelf.name": "アカシアの棚", + "tile.bamboo_shelf.name": "竹の棚", + "tile.birch_shelf.name": "シラカバの棚", + "tile.cherry_shelf.name": "サクラの棚", + "tile.crimson_shelf.name": "真紅の棚", + "tile.dark_oak_shelf.name": "ダークオークの棚", + "tile.jungle_shelf.name": "ジャングルの棚", + "tile.mangrove_shelf.name": "マングローブの棚", + "tile.oak_shelf.name": "オークの棚", + "tile.pale_oak_shelf.name": "ペールオークの棚", + "tile.spruce_shelf.name": "トウヒの棚", + "tile.warped_shelf.name": "歪んだ棚", + "tile.copper_golem_statue.name": "銅ゴーレムの像", + "tile.exposed_copper_golem_statue.name": "風化した銅ゴーレムの像", + "tile.weathered_copper_golem_statue.name": "錆びた銅ゴーレムの像", + "tile.oxidized_copper_golem_statue.name": "酸化した銅ゴーレムの像", + "tile.waxed_copper_golem_statue.name": "錆止めされた銅ゴーレムの像", + "tile.waxed_exposed_copper_golem_statue.name": "錆止めされた風化した銅ゴーレムの像", + "tile.waxed_weathered_copper_golem_statue.name": "錆止めされた錆びた銅ゴーレムの像", + "tile.waxed_oxidized_copper_golem_statue.name": "錆止めされた酸化した銅ゴーレムの像", + "tile.copper_chain.name": "銅の鎖", + "tile.exposed_copper_chain.name": "風化した銅の鎖", + "tile.weathered_copper_chain.name": "錆びた銅の鎖", + "tile.oxidized_copper_chain.name": "酸化した銅の鎖", + "tile.waxed_copper_chain.name": "錆止めされた銅の鎖", + "tile.waxed_exposed_copper_chain.name": "錆止めされた風化した銅の鎖", + "tile.waxed_weathered_copper_chain.name": "錆止めされた錆びた銅の鎖", + "tile.waxed_oxidized_copper_chain.name": "錆止めされた酸化した銅の鎖", + "tile.copper_bars.name": "銅格子", + "tile.exposed_copper_bars.name": "風化した銅格子", + "tile.weathered_copper_bars.name": "錆びた銅格子", + "tile.oxidized_copper_bars.name": "酸化した銅格子", + "tile.waxed_copper_bars.name": "錆止めされた銅格子", + "tile.waxed_exposed_copper_bars.name": "錆止めされた風化した銅格子", + "tile.waxed_weathered_copper_bars.name": "錆止めされた錆びた銅格子", + "tile.waxed_oxidized_copper_bars.name": "錆止めされた酸化した銅格子", + "tile.copper_lantern.name": "銅のランタン", + "tile.exposed_copper_lantern.name": "風化した銅のランタン", + "tile.weathered_copper_lantern.name": "錆びた銅のランタン", + "tile.oxidized_copper_lantern.name": "酸化した銅のランタン", + "tile.waxed_copper_lantern.name": "錆止めされた銅のランタン", + "tile.waxed_exposed_copper_lantern.name": "錆止めされた風化した銅のランタン", + "tile.waxed_weathered_copper_lantern.name": "錆止めされた錆びた銅のランタン", + "tile.waxed_oxidized_copper_lantern.name": "錆止めされた酸化した銅のランタン", + "tile.copper_torch.name": "銅の松明", + "tile.iron_chain.name": "鉄のチェーン" }, "ko_KR": { "enchantment.arrowDamage": "강화", @@ -30265,6 +29778,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "다이아몬드 말 방어구", "item.horsearmorgold.name": "황금 말 방어구", "item.horsearmoriron.name": "철제 말 방어구", + "item.copper_horse_armor.name": "구리 말 갑옷", "item.horsearmorleather.name": "가죽 말 방어구", "item.gold_ingot.name": "금괴", "item.iron_ingot.name": "철괴", @@ -30448,6 +29962,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - 창작자", "item.record_creator_music_box.desc": "Lena Raine - 창작자(뮤직 박스)", "item.record_precipice.desc": "Aaron Cherof - 벼랑", + "item.record_tears.desc": "아모스 로디 - Tears", + "item.record_lava_chicken.desc": "하이퍼 포션 - 용암 닭", "item.redstone.name": "레드스톤 가루", "item.reeds.name": "사탕수수", "item.kelp.name": "다시마", @@ -31247,6 +30763,13 @@ export const langs: Langs = { "tile.glowstone.name": "발광석", "tile.glow_lichen.name": "빛나는 이끼", "tile.lightning_rod.name": "벼락 막대기", + "tile.exposed_lightning_rod.name": "노출된 벼락 막대기", + "tile.weathered_lightning_rod.name": "풍화된 벼락 막대기", + "tile.oxidized_lightning_rod.name": "산화된 벼락 막대기", + "tile.waxed_lightning_rod.name": "왁스 벼락 막대기", + "tile.waxed_exposed_lightning_rod.name": "노출된 왁스 벼락 막대기", + "tile.waxed_weathered_lightning_rod.name": "풍화된 왁스 벼락 막대기", + "tile.waxed_oxidized_lightning_rod.name": "산화된 왁스 벼락 막대기", "tile.lit_pumpkin.name": "잭 오 랜턴", "tile.lockedchest.name": "잠긴 상자", "tile.log.acacia.name": "잘린 아카시아나무", @@ -31862,7 +31385,92 @@ export const langs: Langs = { "item.brown_egg.name": "갈색 달걀", "item.blue_egg.name": "파란색 달걀", "tile.short_dry_grass.name": "짧은 마른 잔디", - "tile.tall_dry_grass.name": "긴 마른 잔디" + "tile.tall_dry_grass.name": "긴 마른 잔디", + "entity.happy_ghast.name": "행복한 가스트", + "item.spawn_egg.entity.happy_ghast.name": "행복한 가스트 생성 알", + "tile.dried_ghast.name": "말린 가스트", + "item.black_harness.name": "검은색 마구", + "item.blue_harness.name": "파란색 마구", + "item.brown_harness.name": "갈색 마구", + "item.cyan_harness.name": "청록색 마구", + "item.gray_harness.name": "회색 마구", + "item.green_harness.name": "녹색 마구", + "item.light_blue_harness.name": "밝은 파란색 마구", + "item.light_gray_harness.name": "밝은 회색 마구", + "item.lime_harness.name": "연두색 마구", + "item.magenta_harness.name": "자홍색 마구", + "item.orange_harness.name": "주황색 마구", + "item.pink_harness.name": "분홍색 마구", + "item.purple_harness.name": "보라색 마구", + "item.red_harness.name": "빨간색 마구", + "item.white_harness.name": "흰색 마구", + "item.yellow_harness.name": "노란색 마구", + "entity.copper_golem.name": "구리 골렘", + "item.spawn_egg.entity.copper_golem.name": "구리 골렘 생성 알", + "item.copper_nugget.name": "구리 조각", + "item.copper_sword.name": "구리 검", + "item.copper_pickaxe.name": "구리 곡괭이", + "item.copper_axe.name": "구리 도끼", + "item.copper_shovel.name": "구리 삽", + "item.copper_hoe.name": "구리 괭이", + "item.copper_boots.name": "구리 부츠", + "item.copper_leggings.name": "구리 레깅스", + "item.copper_chestplate.name": "구리 흉갑", + "item.copper_helmet.name": "구리 투구", + "tile.copper_chest.name": "구리 상자", + "tile.exposed_copper_chest.name": "노출된 구리 상자", + "tile.weathered_copper_chest.name": "풍화된 구리 상자", + "tile.oxidized_copper_chest.name": "산화된 구리 상자", + "tile.waxed_copper_chest.name": "왁스 구리 상자", + "tile.waxed_exposed_copper_chest.name": "왁스 노출된 구리 상자", + "tile.waxed_weathered_copper_chest.name": "왁스 풍화된 구리 상자", + "tile.waxed_oxidized_copper_chest.name": "왁스 산화된 구리 상자", + "tile.acacia_shelf.name": "아카시아 선반", + "tile.bamboo_shelf.name": "대나무 선반", + "tile.birch_shelf.name": "자작나무 선반", + "tile.cherry_shelf.name": "벚나무 선반", + "tile.crimson_shelf.name": "진홍색 선반", + "tile.dark_oak_shelf.name": "짙은 참나무 선반", + "tile.jungle_shelf.name": "정글 선반", + "tile.mangrove_shelf.name": "맹그로브 선반", + "tile.oak_shelf.name": "참나무 선반", + "tile.pale_oak_shelf.name": "옅은 참나무 선반", + "tile.spruce_shelf.name": "가문비나무 선반", + "tile.warped_shelf.name": "뒤틀린 선반", + "tile.copper_golem_statue.name": "구리 골렘 동상", + "tile.exposed_copper_golem_statue.name": "노출된 구리 골렘 동상", + "tile.weathered_copper_golem_statue.name": "풍화된 구리 골렘 동상", + "tile.oxidized_copper_golem_statue.name": "산화된 구리 골렘 동상", + "tile.waxed_copper_golem_statue.name": "왁스칠한 구리 골렘 동상", + "tile.waxed_exposed_copper_golem_statue.name": "왁스칠한 노출된 구리 골렘 동상", + "tile.waxed_weathered_copper_golem_statue.name": "왁스칠한 풍화된 구리 골렘 동상", + "tile.waxed_oxidized_copper_golem_statue.name": "왁스칠한 산화된 구리 골렘 동상", + "tile.copper_chain.name": "구리 사슬", + "tile.exposed_copper_chain.name": "노출된 구리 사슬", + "tile.weathered_copper_chain.name": "풍화된 구리 사슬", + "tile.oxidized_copper_chain.name": "산화된 구리 사슬", + "tile.waxed_copper_chain.name": "왁스 구리 사슬", + "tile.waxed_exposed_copper_chain.name": "왁스 노출된 구리 사슬", + "tile.waxed_weathered_copper_chain.name": "왁스 풍화된 구리 사슬", + "tile.waxed_oxidized_copper_chain.name": "왁스 산화된 구리 사슬", + "tile.copper_bars.name": "구리 창살", + "tile.exposed_copper_bars.name": "노출된 구리 창살", + "tile.weathered_copper_bars.name": "풍화된 구리 창살", + "tile.oxidized_copper_bars.name": "산화된 구리 창살", + "tile.waxed_copper_bars.name": "왁스 구리 창살", + "tile.waxed_exposed_copper_bars.name": "왁스 노출된 구리 창살", + "tile.waxed_weathered_copper_bars.name": "왁스 풍화된 구리 창살", + "tile.waxed_oxidized_copper_bars.name": "왁스 산화된 구리 창살", + "tile.copper_lantern.name": "구리 랜턴", + "tile.exposed_copper_lantern.name": "노출된 구리 랜턴", + "tile.weathered_copper_lantern.name": "풍화된 구리 랜턴", + "tile.oxidized_copper_lantern.name": "산화된 구리 랜턴", + "tile.waxed_copper_lantern.name": "왁스 구리 랜턴", + "tile.waxed_exposed_copper_lantern.name": "왁스 노출된 구리 랜턴", + "tile.waxed_weathered_copper_lantern.name": "왁스 풍화된 구리 랜턴", + "tile.waxed_oxidized_copper_lantern.name": "왁스 산화된 구리 랜턴", + "tile.copper_torch.name": "구리 횃불", + "tile.iron_chain.name": "철 사슬" }, "pt_BR": { "enchantment.arrowDamage": "Força", @@ -31882,7 +31490,7 @@ export const langs: Langs = { "enchantment.fire": "Aspecto de Fogo", "enchantment.fishingSpeed": "Isca", "enchantment.frostwalker": "Caminhante de Geada", - "enchantment.heavy_weapon.breach": "Violação", + "enchantment.heavy_weapon.breach": "Brecha", "enchantment.heavy_weapon.density": "Densidade", "enchantment.heavy_weapon.windburst": "Explosão de Vento", "enchantment.knockback": "Repulsão", @@ -31903,18 +31511,18 @@ export const langs: Langs = { "enchantment.oxygen": "Respiração", "enchantment.protect.all": "Proteção", "enchantment.protect.explosion": "Proteção Contra Explosões", - "enchantment.protect.fall": "Queda de Pena", + "enchantment.protect.fall": "Peso-pena", "enchantment.protect.fire": "Proteção Contra Fogo", "enchantment.protect.projectile": "Proteção Contra Projéteis", "enchantment.soul_speed": "Velocidade de Almas", - "enchantment.swift_sneak": "Esgueirar Veloz", + "enchantment.swift_sneak": "Passos Furtivos", "enchantment.thorns": "Espinhos", "enchantment.untouching": "Toque de Seda", "enchantment.waterWalker": "Passos Profundos", - "enchantment.waterWorker": "Afinidade com a Água", - "enchantment.tridentChanneling": "Canalização", + "enchantment.waterWorker": "Afinidade Aquática", + "enchantment.tridentChanneling": "Condutividade", "enchantment.tridentLoyalty": "Lealdade", - "enchantment.tridentRiptide": "Rebentação", + "enchantment.tridentRiptide": "Correnteza", "enchantment.tridentImpaling": "Empalamento", "entity.area_effect_cloud.name": "Nuvem de Efeito de Área", "entity.armadillo.name": "Tatu", @@ -31924,11 +31532,11 @@ export const langs: Langs = { "entity.bee.name": "Abelha", "entity.blaze.name": "Chama", "entity.boat.name": "Barco", - "entity.bogged.name": "Atolado", - "entity.breeze.name": "Brisa", + "entity.bogged.name": "Pantanoso", + "entity.breeze.name": "Vórtice", "entity.breeze_wind_charge_projectile.name": "Carga de Vento", "entity.cat.name": "Gato", - "entity.cave_spider.name": "Aranha da Caverna", + "entity.cave_spider.name": "Aranha das Cavernas", "entity.chicken.name": "Galinha", "entity.cow.name": "Vaca", "entity.creaking.name": "Rangente", @@ -31945,9 +31553,9 @@ export const langs: Langs = { "entity.ender_dragon.name": "Dragão Ender", "entity.enderman.name": "Enderman", "entity.endermite.name": "Endermite", - "entity.ender_pearl.name": "Pérola do End", - "entity.evocation_illager.name": "Evocador", - "entity.evocation_fang.name": "Presa de Evocador", + "entity.ender_pearl.name": "Pérola de Ender", + "entity.evocation_illager.name": "Invocador", + "entity.evocation_fang.name": "Presa de Invocador", "entity.eye_of_ender_signal.name": "Olho de Ender", "entity.falling_block.name": "Bloco em Queda", "entity.fireball.name": "Bola de Fogo", @@ -31962,7 +31570,7 @@ export const langs: Langs = { "entity.axolotl.name": "Axolote", "entity.ghast.name": "Ghast", "entity.glow_squid.name": "Lula Brilhante", - "entity.piglin_brute.name": "Piglin Bruto", + "entity.piglin_brute.name": "Piglin Bárbaro", "entity.guardian.name": "Guardião", "entity.hoglin.name": "Hoglin", "entity.horse.name": "Cavalo", @@ -31970,7 +31578,7 @@ export const langs: Langs = { "entity.ravager.name": "Devastador", "entity.iron_golem.name": "Golem de Ferro", "entity.item.name": "Item", - "entity.leash_knot.name": "Desfazer Nó", + "entity.leash_knot.name": "Nó de Laço", "entity.lightning_bolt.name": "Relâmpago", "entity.lingering_potion.name": "Poção Prolongada", "entity.llama.name": "Lhama", @@ -31997,11 +31605,11 @@ export const langs: Langs = { "entity.rabbit.name": "Coelho", "entity.sheep.name": "Ovelha", "entity.shulker.name": "Casca de Shulker", - "entity.shulker_bullet.name": "Bala de Shulker", + "entity.shulker_bullet.name": "Projétil de Shulker", "entity.silverfish.name": "Traça", "entity.skeleton.name": "Esqueleto", "entity.skeleton_horse.name": "Cavalo Esqueleto", - "entity.stray.name": "Nômade", + "entity.stray.name": "Errante", "entity.slime.name": "Slime", "entity.small_fireball.name": "Bola de Fogo Pequena", "entity.sniffer.name": "Farejador", @@ -32010,7 +31618,7 @@ export const langs: Langs = { "entity.spider.name": "Aranha", "entity.splash_potion.name": "Poção", "entity.squid.name": "Lula", - "entity.strider.name": "Andarilho", + "entity.strider.name": "Lavagante", "entity.tnt.name": "Bloco de Dinamite", "entity.thrown_trident.name": "Tridente", "entity.tripod_camera.name": "Câmera Tripé", @@ -32018,7 +31626,7 @@ export const langs: Langs = { "entity.unknown.name": "Desconhecido", "entity.vex.name": "Vex", "entity.villager.name": "Aldeão", - "entity.villager.armor": "Armoreiro", + "entity.villager.armor": "Armadureiro", "entity.villager.butcher": "Açougueiro", "entity.villager.cartographer": "Cartógrafo", "entity.villager.cleric": "Clérigo", @@ -32034,7 +31642,7 @@ export const langs: Langs = { "entity.villager.unskilled": "Aldeão Inexperiente", "entity.villager_v2.name": "Aldeão", "entity.vindicator.name": "Vingador", - "entity.wandering_trader.name": "Comerciante Nômade", + "entity.wandering_trader.name": "Vendedor Ambulante", "entity.wind_charge_projectile.name": "Carga de Vento", "entity.witch.name": "Bruxa", "entity.wither.name": "Wither", @@ -32043,7 +31651,7 @@ export const langs: Langs = { "entity.wither_skull_dangerous.name": "Crânio de Esqueleto Wither", "entity.wolf.name": "Lobo", "entity.xp_orb.name": "Orbe de Experiência", - "entity.xp_bottle.name": "Frasco de Encantamentos", + "entity.xp_bottle.name": "Frasco de Experiência", "entity.zoglin.name": "Zoglin", "entity.zombie.name": "Zumbi", "entity.zombie_horse.name": "Cavalo Zumbi", @@ -32056,7 +31664,7 @@ export const langs: Langs = { "item.axolotlBabyBodySingle.name": "Axolote %1$s Bebê", "item.axolotlColorLucy.name": "Leucístico", "item.axolotlColorCyan.name": "Ciano", - "item.axolotlColorGold.name": "Ouro", + "item.axolotlColorGold.name": "Dourado", "item.axolotlColorWild.name": "Marrom", "item.axolotlColorBlue.name": "Azul", "item.golden_apple.name": "Maçã Dourada", @@ -32064,25 +31672,25 @@ export const langs: Langs = { "item.armadillo_scute.name": "Carapaça de Tatu", "item.armor_stand.name": "Suporte de Armaduras", "item.arrow.name": "Flecha", - "item.tipped_arrow.name": "Flecha com ponta", + "item.tipped_arrow.name": "Flecha com Efeito", "item.banner.black.name": "Estandarte Preto", "item.banner.blue.name": "Estandarte Azul", - "item.banner.border.black": "Borda Preta", - "item.banner.border.blue": "Borda Azul", - "item.banner.border.brown": "Borda Marrom", - "item.banner.border.cyan": "Borda Ciano", - "item.banner.border.gray": "Borda Cinza", - "item.banner.border.green": "Borda Verde", - "item.banner.border.lightBlue": "Borda Azul Clara", - "item.banner.border.lime": "Borda Verde Limão", - "item.banner.border.magenta": "Borda Magenta", - "item.banner.border.orange": "Borda Laranja", - "item.banner.border.pink": "Borda Rosa", - "item.banner.border.purple": "Borda Lilás", - "item.banner.border.red": "Borda Vermelha", - "item.banner.border.silver": "Borda Cinza Clara", - "item.banner.border.white": "Borda Branca", - "item.banner.border.yellow": "Borda Amarela", + "item.banner.border.black": "Bordadura Preta", + "item.banner.border.blue": "Bordadura Azul", + "item.banner.border.brown": "Bordadura Marrom", + "item.banner.border.cyan": "Bordadura Ciano", + "item.banner.border.gray": "Bordadura Cinza", + "item.banner.border.green": "Bordadura Verde", + "item.banner.border.lightBlue": "Bordadura Azul Clara", + "item.banner.border.lime": "Bordadura Verde Limão", + "item.banner.border.magenta": "Bordadura Magenta", + "item.banner.border.orange": "Bordadura Laranja", + "item.banner.border.pink": "Bordadura Rosa", + "item.banner.border.purple": "Bordadura Roxa", + "item.banner.border.red": "Bordadura Vermelha", + "item.banner.border.silver": "Bordadura Cinza Clara", + "item.banner.border.white": "Bordadura Branca", + "item.banner.border.yellow": "Bordadura Amarela", "item.banner.bricks.black": "Campo em Alvenaria Preto", "item.banner.bricks.blue": "Campo em Alvenaria Azul", "item.banner.bricks.brown": "Campo em Alvenaria Marrom", @@ -32094,7 +31702,7 @@ export const langs: Langs = { "item.banner.bricks.magenta": "Campo em Alvenaria Magenta", "item.banner.bricks.orange": "Campo em Alvenaria Laranja", "item.banner.bricks.pink": "Campo em Alvenaria Rosa", - "item.banner.bricks.purple": "Campo em Alvenaria Lilás", + "item.banner.bricks.purple": "Campo em Alvenaria Roxo", "item.banner.bricks.red": "Campo em Alvenaria Vermelho", "item.banner.bricks.silver": "Campo em Alvenaria Cinza Claro", "item.banner.bricks.white": "Campo em Alvenaria Branco", @@ -32111,7 +31719,7 @@ export const langs: Langs = { "item.banner.circle.magenta": "Besante Magenta", "item.banner.circle.orange": "Besante Laranja", "item.banner.circle.pink": "Besante Rosa", - "item.banner.circle.purple": "Besante Lilás", + "item.banner.circle.purple": "Besante Roxo", "item.banner.circle.red": "Besante Vermelho", "item.banner.circle.silver": "Besante Cinza Claro", "item.banner.circle.white": "Besante Branco", @@ -32127,7 +31735,7 @@ export const langs: Langs = { "item.banner.creeper.magenta": "Figura de Creeper Magenta", "item.banner.creeper.orange": "Figura de Creeper Laranja", "item.banner.creeper.pink": "Figura de Creeper Rosa", - "item.banner.creeper.purple": "Figura de Creeper Lilás", + "item.banner.creeper.purple": "Figura de Creeper Roxa", "item.banner.creeper.red": "Figura de Creeper Vermelho", "item.banner.creeper.silver": "Figura de Creeper Cinza Claro", "item.banner.creeper.white": "Figura de Creeper Branco", @@ -32143,27 +31751,27 @@ export const langs: Langs = { "item.banner.cross.magenta": "Sautor Magenta", "item.banner.cross.orange": "Sautor Laranja", "item.banner.cross.pink": "Sautor Rosa", - "item.banner.cross.purple": "Sautor Lilás", + "item.banner.cross.purple": "Sautor Roxo", "item.banner.cross.red": "Sautor Vermelha", "item.banner.cross.silver": "Sautor Cinza Clara", "item.banner.cross.white": "Sautor Branca", "item.banner.cross.yellow": "Sautor Amarela", - "item.banner.curly_border.black": "Borda Dentada Preta", - "item.banner.curly_border.blue": "Borda Dentada Azul", - "item.banner.curly_border.brown": "Borda Dentada Marrom", - "item.banner.curly_border.cyan": "Borda Dentada Ciano", - "item.banner.curly_border.gray": "Borda Dentada Cinza", - "item.banner.curly_border.green": "Borda Dentada Verde", - "item.banner.curly_border.lightBlue": "Borda Dentada Azul Clara", - "item.banner.curly_border.lime": "Borda Dentada Verde Limão", - "item.banner.curly_border.magenta": "Borda Dentada Magenta", - "item.banner.curly_border.orange": "Borda Dentada Laranja", - "item.banner.curly_border.pink": "Borda Dentada Rosa", - "item.banner.curly_border.purple": "Borda Dentada Lilás", - "item.banner.curly_border.red": "Borda Dentada Vermelha", - "item.banner.curly_border.silver": "Borda Dentada Cinza Clara", - "item.banner.curly_border.white": "Borda Dentada Branca", - "item.banner.curly_border.yellow": "Borda Dentada Amarela", + "item.banner.curly_border.black": "Bordadura Dentada Preta", + "item.banner.curly_border.blue": "Bordadura Dentada Azul", + "item.banner.curly_border.brown": "Bordadura Dentada Marrom", + "item.banner.curly_border.cyan": "Bordadura Dentada Ciano", + "item.banner.curly_border.gray": "Bordadura Dentada Cinza", + "item.banner.curly_border.green": "Bordadura Dentada Verde", + "item.banner.curly_border.lightBlue": "Bordadura Dentada Azul Clara", + "item.banner.curly_border.lime": "Bordadura Dentada Verde Limão", + "item.banner.curly_border.magenta": "Bordadura Dentada Magenta", + "item.banner.curly_border.orange": "Bordadura Dentada Laranja", + "item.banner.curly_border.pink": "Bordadura Dentada Rosa", + "item.banner.curly_border.purple": "Bordadura Dentada Roxa", + "item.banner.curly_border.red": "Bordadura Dentada Vermelha", + "item.banner.curly_border.silver": "Bordadura Dentada Cinza Clara", + "item.banner.curly_border.white": "Bordadura Dentada Branca", + "item.banner.curly_border.yellow": "Bordadura Dentada Amarela", "item.banner.cyan.name": "Estandarte Ciano", "item.banner.diagonal_left.black": "Talhado Preto", "item.banner.diagonal_left.blue": "Talhado Azul", @@ -32176,7 +31784,7 @@ export const langs: Langs = { "item.banner.diagonal_left.magenta": "Talhado Magenta", "item.banner.diagonal_left.orange": "Talhado Laranja", "item.banner.diagonal_left.pink": "Talhado Rosa", - "item.banner.diagonal_left.purple": "Talhado Lilás", + "item.banner.diagonal_left.purple": "Talhado Roxo", "item.banner.diagonal_left.red": "Talhado Vermelho", "item.banner.diagonal_left.silver": "Talhado Cinza Claro", "item.banner.diagonal_left.white": "Talhado Branco", @@ -32192,43 +31800,43 @@ export const langs: Langs = { "item.banner.diagonal_right.magenta": "Fendido Magenta", "item.banner.diagonal_right.orange": "Fendido Laranja", "item.banner.diagonal_right.pink": "Fendido Rosa", - "item.banner.diagonal_right.purple": "Fendido Lilás", + "item.banner.diagonal_right.purple": "Fendido Roxo", "item.banner.diagonal_right.red": "Fendido Vermelho", "item.banner.diagonal_right.silver": "Fendido Cinza Claro", "item.banner.diagonal_right.white": "Fendido Branco", "item.banner.diagonal_right.yellow": "Fendido Amarelo", - "item.banner.diagonal_up_left.black": "Fendido Invertido Preto", - "item.banner.diagonal_up_left.blue": "Fendido Invertido Azul", - "item.banner.diagonal_up_left.brown": "Fendido Invertido Marrom", - "item.banner.diagonal_up_left.cyan": "Fendido Invertido Ciano", - "item.banner.diagonal_up_left.gray": "Fendido Invertido Cinza", - "item.banner.diagonal_up_left.green": "Fendido Invertido Verde", - "item.banner.diagonal_up_left.lightBlue": "Fendido Invertido Azul Claro", - "item.banner.diagonal_up_left.lime": "Fendido Invertido Verde Limão", - "item.banner.diagonal_up_left.magenta": "Fendido Invertido Magenta", - "item.banner.diagonal_up_left.orange": "Fendido Invertido Laranja", - "item.banner.diagonal_up_left.pink": "Fendido Invertido Rosa", - "item.banner.diagonal_up_left.purple": "Fendido Invertido Lilás", - "item.banner.diagonal_up_left.red": "Fendido Invertido Vermelho", - "item.banner.diagonal_up_left.silver": "Fendido Invertido Cinza Claro", - "item.banner.diagonal_up_left.white": "Fendido Invertido Branco", - "item.banner.diagonal_up_left.yellow": "Fendido Invertido Amarelo", - "item.banner.diagonal_up_right.black": "Talhado Invertido Preto", - "item.banner.diagonal_up_right.blue": "Talhado Invertido Azul", - "item.banner.diagonal_up_right.brown": "Talhado Invertido Marrom", - "item.banner.diagonal_up_right.cyan": "Talhado Invertido Ciano", - "item.banner.diagonal_up_right.gray": "Talhado Invertido Cinza", - "item.banner.diagonal_up_right.green": "Talhado Invertido Verde", - "item.banner.diagonal_up_right.lightBlue": "Talhado Invertido Azul Claro", - "item.banner.diagonal_up_right.lime": "Talhado Invertido Verde Limão", - "item.banner.diagonal_up_right.magenta": "Talhado Invertido Magenta", - "item.banner.diagonal_up_right.orange": "Talhado Invertido Laranja", - "item.banner.diagonal_up_right.pink": "Talhado Invertido Rosa", - "item.banner.diagonal_up_right.purple": "Talhado Invertido Lilás", - "item.banner.diagonal_up_right.red": "Talhado Invertido Vermelho", - "item.banner.diagonal_up_right.silver": "Talhado Invertido Cinza Claro", - "item.banner.diagonal_up_right.white": "Talhado Invertido Branco", - "item.banner.diagonal_up_right.yellow": "Talhado Invertido Amarelo", + "item.banner.diagonal_up_left.black": "Fendido Preto Invertido", + "item.banner.diagonal_up_left.blue": "Fendido Azul Invertido", + "item.banner.diagonal_up_left.brown": "Fendido Marrom Invertido", + "item.banner.diagonal_up_left.cyan": "Fendido Ciano Invertido", + "item.banner.diagonal_up_left.gray": "Fendido Cinza Invertido", + "item.banner.diagonal_up_left.green": "Fendido Verde Invertido", + "item.banner.diagonal_up_left.lightBlue": "Fendido Azul Claro Invertido", + "item.banner.diagonal_up_left.lime": "Fendido Verde Limão Invertido", + "item.banner.diagonal_up_left.magenta": "Fendido Magenta Invertido", + "item.banner.diagonal_up_left.orange": "Fendido Laranja Invertido", + "item.banner.diagonal_up_left.pink": "Fendido Rosa Invertido", + "item.banner.diagonal_up_left.purple": "Fendido Roxo Invertido", + "item.banner.diagonal_up_left.red": "Fendido Vermelho Invertido", + "item.banner.diagonal_up_left.silver": "Fendido Cinza Claro Invertido", + "item.banner.diagonal_up_left.white": "Fendido Branco Invertido", + "item.banner.diagonal_up_left.yellow": "Fendido Amarelo Invertido", + "item.banner.diagonal_up_right.black": "Talhado Preto Invertido", + "item.banner.diagonal_up_right.blue": "Talhado Azul Invertido", + "item.banner.diagonal_up_right.brown": "Talhado Marrom Invertido", + "item.banner.diagonal_up_right.cyan": "Talhado Ciano Invertido", + "item.banner.diagonal_up_right.gray": "Talhado Cinza Invertido", + "item.banner.diagonal_up_right.green": "Talhado Verde Invertido", + "item.banner.diagonal_up_right.lightBlue": "Talhado Azul Claro Invertido", + "item.banner.diagonal_up_right.lime": "Talhado Verde Limão Invertido", + "item.banner.diagonal_up_right.magenta": "Talhado Magenta Invertido", + "item.banner.diagonal_up_right.orange": "Talhado Laranja Invertido", + "item.banner.diagonal_up_right.pink": "Talhado Rosa Invertido", + "item.banner.diagonal_up_right.purple": "Talhado Roxo Invertido", + "item.banner.diagonal_up_right.red": "Talhado Vermelho Invertido", + "item.banner.diagonal_up_right.silver": "Talhado Cinza Claro Invertido", + "item.banner.diagonal_up_right.white": "Talhado Branco Invertido", + "item.banner.diagonal_up_right.yellow": "Talhado Amarelo Invertido", "item.banner.flow.black": "Fluxo Preto", "item.banner.flow.blue": "Fluxo Azul", "item.banner.flow.brown": "Fluxo Marrom", @@ -32240,7 +31848,7 @@ export const langs: Langs = { "item.banner.flow.magenta": "Fluxo Magenta", "item.banner.flow.orange": "Fluxo Laranja", "item.banner.flow.pink": "Fluxo Rosa", - "item.banner.flow.purple": "Fluxo Lilás", + "item.banner.flow.purple": "Fluxo Roxo", "item.banner.flow.red": "Fluxo Vermelho", "item.banner.flow.silver": "Fluxo Cinza-claro", "item.banner.flow.white": "Fluxo Branco", @@ -32256,7 +31864,7 @@ export const langs: Langs = { "item.banner.flower.magenta": "Figura de Flor Magenta", "item.banner.flower.orange": "Figura de Flor Laranja", "item.banner.flower.pink": "Figura de Flor Rosa", - "item.banner.flower.purple": "Figura de Flor Lilás", + "item.banner.flower.purple": "Figura de Flor Roxa", "item.banner.flower.red": "Figura de Flor Vermelha", "item.banner.flower.silver": "Figura de Flor Cinza Clara", "item.banner.flower.white": "Figura de Flor Branca", @@ -32272,7 +31880,7 @@ export const langs: Langs = { "item.banner.globe.magenta": "Globo magenta", "item.banner.globe.orange": "Globo laranja", "item.banner.globe.pink": "Globo rosa", - "item.banner.globe.purple": "Globo lilás", + "item.banner.globe.purple": "Globo Roxo", "item.banner.globe.red": "Globo vermelho", "item.banner.globe.silver": "Globo cinza-claro", "item.banner.globe.white": "Globo branco", @@ -32288,7 +31896,7 @@ export const langs: Langs = { "item.banner.gradient.magenta": "Gradiente Magenta", "item.banner.gradient.orange": "Gradiente Laranja", "item.banner.gradient.pink": "Gradiente Rosa", - "item.banner.gradient.purple": "Gradiente Lilás", + "item.banner.gradient.purple": "Gradiente Roxo", "item.banner.gradient.red": "Gradiente Vermelho", "item.banner.gradient.silver": "Gradiente Cinza Claro", "item.banner.gradient.white": "Gradiente Branco", @@ -32304,7 +31912,7 @@ export const langs: Langs = { "item.banner.gradient_up.magenta": "Gradiente Magenta na Base", "item.banner.gradient_up.orange": "Gradiente Laranja na Base", "item.banner.gradient_up.pink": "Gradiente Rosa na Base", - "item.banner.gradient_up.purple": "Gradiente Lilás na Base", + "item.banner.gradient_up.purple": "Gradiente Roxo na Base", "item.banner.gradient_up.red": "Gradiente Vermelho na Base", "item.banner.gradient_up.silver": "Gradiente Cinza Claro na Base", "item.banner.gradient_up.white": "Gradiente Branco na Base", @@ -32322,43 +31930,43 @@ export const langs: Langs = { "item.banner.guster.magenta": "Rajada Magenta", "item.banner.guster.orange": "Rajada Laranja", "item.banner.guster.pink": "Rajada Rosa", - "item.banner.guster.purple": "Rajada Lilás", + "item.banner.guster.purple": "Rajada Roxa", "item.banner.guster.red": "Rajada Vermelho", "item.banner.guster.silver": "Rajada Cinza-claro", "item.banner.guster.white": "Rajada Branca", "item.banner.guster.yellow": "Rajada Amarela", - "item.banner.half_horizontal.black": "Lapidado Preto", - "item.banner.half_horizontal.blue": "Lapidado Azul", - "item.banner.half_horizontal.brown": "Lapidado Marrom", - "item.banner.half_horizontal.cyan": "Lapidado Marrom", - "item.banner.half_horizontal.gray": "Lapidado Cinza", - "item.banner.half_horizontal.green": "Lapidado Verde", - "item.banner.half_horizontal.lightBlue": "Lapidado Azul Claro", - "item.banner.half_horizontal.lime": "Lapidado Verde Limão", - "item.banner.half_horizontal.magenta": "Lapidado Magenta", - "item.banner.half_horizontal.orange": "Lapidado Laranja", - "item.banner.half_horizontal.pink": "Lapidado Rosa", - "item.banner.half_horizontal.purple": "Lapidado Lilás", - "item.banner.half_horizontal.red": "Lapidado Vermelho", - "item.banner.half_horizontal.silver": "Lapidado Cinza Claro", - "item.banner.half_horizontal.white": "Lapidado Branco", - "item.banner.half_horizontal.yellow": "Lapidado Amarelo", - "item.banner.half_horizontal_bottom.black": "Lapidado Invertido Preto", - "item.banner.half_horizontal_bottom.blue": "Lapidado Invertido Azul", - "item.banner.half_horizontal_bottom.brown": "Lapidado Invertido Marrom", - "item.banner.half_horizontal_bottom.cyan": "Lapidado Invertido Ciano", - "item.banner.half_horizontal_bottom.gray": "Lapidado Invertido Cinza", - "item.banner.half_horizontal_bottom.green": "Lapidado Invertido Verde", - "item.banner.half_horizontal_bottom.lightBlue": "Lapidado Invertido Azul Claro", - "item.banner.half_horizontal_bottom.lime": "Lapidado Invertido Verde Limão", - "item.banner.half_horizontal_bottom.magenta": "Lapidado Invertido Magenta", - "item.banner.half_horizontal_bottom.orange": "Lapidado Invertido Laranja", - "item.banner.half_horizontal_bottom.pink": "Lapidado Invertido Rosa", - "item.banner.half_horizontal_bottom.purple": "Lapidado Invertido Lilás", - "item.banner.half_horizontal_bottom.red": "Lapidado Invertido Vermelho", - "item.banner.half_horizontal_bottom.silver": "Lapidado Invertido Cinza Claro", - "item.banner.half_horizontal_bottom.white": "Lapidado Invertido Branco", - "item.banner.half_horizontal_bottom.yellow": "Lapidado Invertido Amarelo", + "item.banner.half_horizontal.black": "Cortado Preto", + "item.banner.half_horizontal.blue": "Cortado Azul", + "item.banner.half_horizontal.brown": "Cortado Marrom", + "item.banner.half_horizontal.cyan": "Cortado Marrom", + "item.banner.half_horizontal.gray": "Cortado Cinza", + "item.banner.half_horizontal.green": "Cortado Verde", + "item.banner.half_horizontal.lightBlue": "Cortado Azul Claro", + "item.banner.half_horizontal.lime": "Cortado Verde Limão", + "item.banner.half_horizontal.magenta": "Cortado Magenta", + "item.banner.half_horizontal.orange": "Cortado Laranja", + "item.banner.half_horizontal.pink": "Cortado Rosa", + "item.banner.half_horizontal.purple": "Cortado Roxo", + "item.banner.half_horizontal.red": "Cortado Vermelho", + "item.banner.half_horizontal.silver": "Cortado Cinza Claro", + "item.banner.half_horizontal.white": "Cortado Branco", + "item.banner.half_horizontal.yellow": "Cortado Amarelo", + "item.banner.half_horizontal_bottom.black": "Lapidado Preto Invertido", + "item.banner.half_horizontal_bottom.blue": "Lapidado Azul Invertido", + "item.banner.half_horizontal_bottom.brown": "Lapidado Marrom Invertido", + "item.banner.half_horizontal_bottom.cyan": "Lapidado Ciano Invertido", + "item.banner.half_horizontal_bottom.gray": "Lapidado Cinza Invertido", + "item.banner.half_horizontal_bottom.green": "Lapidado Verde Invertido", + "item.banner.half_horizontal_bottom.lightBlue": "Lapidado Azul Claro Invertido", + "item.banner.half_horizontal_bottom.lime": "Lapidado Verde Limão Invertido", + "item.banner.half_horizontal_bottom.magenta": "Lapidado Magenta Invertido", + "item.banner.half_horizontal_bottom.orange": "Lapidado Laranja Invertido", + "item.banner.half_horizontal_bottom.pink": "Lapidado Rosa Invertido", + "item.banner.half_horizontal_bottom.purple": "Lapidado Roxo Invertido", + "item.banner.half_horizontal_bottom.red": "Lapidado Vermelho Invertido", + "item.banner.half_horizontal_bottom.silver": "Lapidado Cinza Claro Invertido", + "item.banner.half_horizontal_bottom.white": "Lapidado Branco Invertido", + "item.banner.half_horizontal_bottom.yellow": "Lapidado Amarelo Invertido", "item.banner.half_vertical.black": "Partido Preto", "item.banner.half_vertical.blue": "Partido Azul", "item.banner.half_vertical.brown": "Partido Marrom", @@ -32370,30 +31978,30 @@ export const langs: Langs = { "item.banner.half_vertical.magenta": "Partido Magenta", "item.banner.half_vertical.orange": "Partido Laranja", "item.banner.half_vertical.pink": "Partido Rosa", - "item.banner.half_vertical.purple": "Partido Lilás", + "item.banner.half_vertical.purple": "Partido Roxo", "item.banner.half_vertical.red": "Partido Vermelho", "item.banner.half_vertical.silver": "Partido Cinza Claro", "item.banner.half_vertical.white": "Partido Branco", "item.banner.half_vertical.yellow": "Partido Amarelo", - "item.banner.half_vertical_right.black": "Partido Invertido Preto", - "item.banner.half_vertical_right.blue": "Partido Invertido Azul", - "item.banner.half_vertical_right.brown": "Partido Invertido Marrom", - "item.banner.half_vertical_right.cyan": "Partido Invertido Ciano", - "item.banner.half_vertical_right.gray": "Partido Invertido Cinza", - "item.banner.half_vertical_right.green": "Partido Invertido Verde", - "item.banner.half_vertical_right.lightBlue": "Partido Invertido Azul Claro", - "item.banner.half_vertical_right.lime": "Partido Invertido Verde Limão", - "item.banner.half_vertical_right.magenta": "Partido Invertido Magenta", - "item.banner.half_vertical_right.orange": "Partido Invertido Laranja", - "item.banner.half_vertical_right.pink": "Partido Invertido Rosa", - "item.banner.half_vertical_right.purple": "Partido Invertido Lilás", - "item.banner.half_vertical_right.red": "Partido Invertido Vermelho", - "item.banner.half_vertical_right.silver": "Partido Invertido Cinza Claro", - "item.banner.half_vertical_right.white": "Partido Invertido Branco", - "item.banner.half_vertical_right.yellow": "Partido Invertido Amarelo", + "item.banner.half_vertical_right.black": "Partido Preto Invertido", + "item.banner.half_vertical_right.blue": "Partido Azul Invertido", + "item.banner.half_vertical_right.brown": "Partido Marrom Invertido", + "item.banner.half_vertical_right.cyan": "Partido Ciano Invertido", + "item.banner.half_vertical_right.gray": "Partido Cinza Invertido", + "item.banner.half_vertical_right.green": "Partido Verde Invertido", + "item.banner.half_vertical_right.lightBlue": "Partido Azul Claro Invertido", + "item.banner.half_vertical_right.lime": "Partido Verde Limão Invertido", + "item.banner.half_vertical_right.magenta": "Partido Magenta Invertido", + "item.banner.half_vertical_right.orange": "Partido Laranja Invertido", + "item.banner.half_vertical_right.pink": "Partido Rosa Invertido", + "item.banner.half_vertical_right.purple": "Partido Roxo Invertido", + "item.banner.half_vertical_right.red": "Partido Vermelho Invertido", + "item.banner.half_vertical_right.silver": "Partido Cinza Claro Invertido", + "item.banner.half_vertical_right.white": "Partido Branco Invertido", + "item.banner.half_vertical_right.yellow": "Partido Amarelo Invertido", "item.banner.illager_captain.name": "Estandarte Sinistro", - "item.banner.lightBlue.name": "Estandarte Azul Claro", - "item.banner.lime.name": "Estandarte Verde Limão", + "item.banner.lightBlue.name": "Estandarte Azul-claro", + "item.banner.lime.name": "Estandarte Verde-limão", "item.banner.magenta.name": "Estandarte Magenta", "item.banner.mojang.black": "Coisa Preta", "item.banner.mojang.blue": "Coisa Azul", @@ -32406,7 +32014,7 @@ export const langs: Langs = { "item.banner.mojang.magenta": "Coisa Magenta", "item.banner.mojang.orange": "Coisa Laranja", "item.banner.mojang.pink": "Coisa Rosa", - "item.banner.mojang.purple": "Coisa Lilás", + "item.banner.mojang.purple": "Coisa Roxa", "item.banner.mojang.red": "Coisa Vermelha", "item.banner.mojang.silver": "Coisa Cinza Clara", "item.banner.mojang.white": "Coisa Branca", @@ -32423,13 +32031,13 @@ export const langs: Langs = { "item.banner.piglin.magenta": "Focinho Magenta", "item.banner.piglin.orange": "Focinho Laranja", "item.banner.piglin.pink": "Focinho Rosa", - "item.banner.piglin.purple": "Focinho Lilás", + "item.banner.piglin.purple": "Focinho Roxo", "item.banner.piglin.red": "Focinho Vermelho", "item.banner.piglin.silver": "Focinho Cinza Claro", "item.banner.piglin.white": "Focinho Branco", "item.banner.piglin.yellow": "Focinho Amarelo", "item.banner.pink.name": "Estandarte Rosa", - "item.banner.purple.name": "Estandarte Lilás", + "item.banner.purple.name": "Estandarte Roxo", "item.banner.red.name": "Estandarte Vermelho", "item.banner.rhombus.black": "Losango Preto", "item.banner.rhombus.blue": "Losango Azul", @@ -32442,12 +32050,12 @@ export const langs: Langs = { "item.banner.rhombus.magenta": "Losango Magenta", "item.banner.rhombus.orange": "Losango Laranja", "item.banner.rhombus.pink": "Losango Rosa", - "item.banner.rhombus.purple": "Losango Lilás", + "item.banner.rhombus.purple": "Losango Roxo", "item.banner.rhombus.red": "Losango Vermelho", "item.banner.rhombus.silver": "Losango Cinza Claro", "item.banner.rhombus.white": "Losango Branco", "item.banner.rhombus.yellow": "Losango Amarelo", - "item.banner.silver.name": "Estandarte Cinza Claro", + "item.banner.silver.name": "Estandarte Cinza-claro", "item.banner.skull.black": "Figura de Crânio Preto", "item.banner.skull.blue": "Figura de Crânio Azul", "item.banner.skull.brown": "Figura de Crânio Marrom", @@ -32459,7 +32067,7 @@ export const langs: Langs = { "item.banner.skull.magenta": "Figura de Crânio Magenta", "item.banner.skull.orange": "Figura de Crânio Laranja", "item.banner.skull.pink": "Figura de Crânio Rosa", - "item.banner.skull.purple": "Figura de Crânio Lilás", + "item.banner.skull.purple": "Figura de Crânio Roxa", "item.banner.skull.red": "Figura de Crânio Vermelho", "item.banner.skull.silver": "Figura de Crânio Cinza Claro", "item.banner.skull.white": "Figura de Crânio Branco", @@ -32475,7 +32083,7 @@ export const langs: Langs = { "item.banner.small_stripes.magenta": "Palado Magenta", "item.banner.small_stripes.orange": "Palado Laranja", "item.banner.small_stripes.pink": "Palado Rosa", - "item.banner.small_stripes.purple": "Palado Lilás", + "item.banner.small_stripes.purple": "Palado Roxo", "item.banner.small_stripes.red": "Palado Vermelho", "item.banner.small_stripes.silver": "Palado Cinza Claro", "item.banner.small_stripes.white": "Palado Branco", @@ -32491,7 +32099,7 @@ export const langs: Langs = { "item.banner.square_bottom_left.magenta": "Cantão Magenta na Base Dextra", "item.banner.square_bottom_left.orange": "Cantão Laranja na Base Dextra", "item.banner.square_bottom_left.pink": "Cantão Rosa na Base Dextra", - "item.banner.square_bottom_left.purple": "Cantão Lilás na Base Dextra", + "item.banner.square_bottom_left.purple": "Cantão Roxo na Base Dextra", "item.banner.square_bottom_left.red": "Cantão Vermelho na Base Dextra", "item.banner.square_bottom_left.silver": "Cantão Cinza Claro na Base Dextra", "item.banner.square_bottom_left.white": "Cantão Branco na Base Dextra", @@ -32507,7 +32115,7 @@ export const langs: Langs = { "item.banner.square_bottom_right.magenta": "Cantão Magenta na Base Sinistra", "item.banner.square_bottom_right.orange": "Cantão Laranja na Base Sinistra", "item.banner.square_bottom_right.pink": "Cantão Rosa na Base Sinistra", - "item.banner.square_bottom_right.purple": "Cantão Lilás na Base Sinistra", + "item.banner.square_bottom_right.purple": "Cantão Roxo na Base Sinistra", "item.banner.square_bottom_right.red": "Cantão Vermelho na Base Sinistra", "item.banner.square_bottom_right.silver": "Cantão Cinza Claro na Base Sinistra", "item.banner.square_bottom_right.white": "Cantão Branco na Base Sinistra", @@ -32523,7 +32131,7 @@ export const langs: Langs = { "item.banner.square_top_left.magenta": "Cantão Magenta no Chefe Dextro", "item.banner.square_top_left.orange": "Cantão Laranja no Chefe Dextro", "item.banner.square_top_left.pink": "Cantão Rosa no Chefe Dextro", - "item.banner.square_top_left.purple": "Cantão Lilás no Chefe Dextro", + "item.banner.square_top_left.purple": "Cantão Roxo no Chefe Dextro", "item.banner.square_top_left.red": "Cantão Vermelho no Chefe Dextro", "item.banner.square_top_left.silver": "Cantão Cinza Claro no Chefe Dextro", "item.banner.square_top_left.white": "Cantão Branco no Chefe Dextro", @@ -32539,7 +32147,7 @@ export const langs: Langs = { "item.banner.square_top_right.magenta": "Cantão Magenta no Chefe Sinistro", "item.banner.square_top_right.orange": "Cantão Laranja no Chefe Sinistro", "item.banner.square_top_right.pink": "Cantão Rosa no Chefe Sinistro", - "item.banner.square_top_right.purple": "Cantão Lilás no Chefe Sinistro", + "item.banner.square_top_right.purple": "Cantão Roxo no Chefe Sinistro", "item.banner.square_top_right.red": "Cantão Vermelho no Chefe Sinistro", "item.banner.square_top_right.silver": "Cantão Cinza Claro no Chefe Sinistro", "item.banner.square_top_right.white": "Cantão Branco no Chefe Sinistro", @@ -32555,7 +32163,7 @@ export const langs: Langs = { "item.banner.straight_cross.magenta": "Cruz Magenta", "item.banner.straight_cross.orange": "Cruz Laranja", "item.banner.straight_cross.pink": "Cruz Rosa", - "item.banner.straight_cross.purple": "Cruz Lilás", + "item.banner.straight_cross.purple": "Cruz Roxa", "item.banner.straight_cross.red": "Cruz Vermelha", "item.banner.straight_cross.silver": "Cruz Cinza Clara", "item.banner.straight_cross.white": "Cruz Branca", @@ -32571,7 +32179,7 @@ export const langs: Langs = { "item.banner.stripe_bottom.magenta": "Faixa Magenta na Base", "item.banner.stripe_bottom.orange": "Faixa Laranja na Base", "item.banner.stripe_bottom.pink": "Faixa Rosa na Base", - "item.banner.stripe_bottom.purple": "Faixa Lilás na Base", + "item.banner.stripe_bottom.purple": "Faixa Roxa na Base", "item.banner.stripe_bottom.red": "Faixa Vermelha na Base", "item.banner.stripe_bottom.silver": "Faixa Cinza Clara na Base", "item.banner.stripe_bottom.white": "Faixa Branca na Base", @@ -32587,7 +32195,7 @@ export const langs: Langs = { "item.banner.stripe_center.magenta": "Pala Magenta", "item.banner.stripe_center.orange": "Pala Laranja", "item.banner.stripe_center.pink": "Pala Rosa", - "item.banner.stripe_center.purple": "Pala Lilás", + "item.banner.stripe_center.purple": "Pala Roxo", "item.banner.stripe_center.red": "Pala Vermelha", "item.banner.stripe_center.silver": "Pala Cinza Clara", "item.banner.stripe_center.white": "Pala Branca", @@ -32603,7 +32211,7 @@ export const langs: Langs = { "item.banner.stripe_downleft.magenta": "Banda Sinistra Magenta", "item.banner.stripe_downleft.orange": "Banda Sinistra Laranja", "item.banner.stripe_downleft.pink": "Banda Sinistra Rosa", - "item.banner.stripe_downleft.purple": "Banda Sinistra Lilás", + "item.banner.stripe_downleft.purple": "Banda Sinistra Roxo", "item.banner.stripe_downleft.red": "Banda Sinistra Vermelha", "item.banner.stripe_downleft.silver": "Banda Sinistra Cinza Clara", "item.banner.stripe_downleft.white": "Banda Sinistra Branca", @@ -32619,7 +32227,7 @@ export const langs: Langs = { "item.banner.stripe_downright.magenta": "Banda Magenta", "item.banner.stripe_downright.orange": "Banda Laranja", "item.banner.stripe_downright.pink": "Banda Rosa", - "item.banner.stripe_downright.purple": "Banda Lilás", + "item.banner.stripe_downright.purple": "Banda Roxo", "item.banner.stripe_downright.red": "Banda Vermelha", "item.banner.stripe_downright.silver": "Banda Cinza Clara", "item.banner.stripe_downright.white": "Banda Branca", @@ -32635,7 +32243,7 @@ export const langs: Langs = { "item.banner.stripe_left.magenta": "Pala Dextra Magenta", "item.banner.stripe_left.orange": "Pala Dextra Laranja", "item.banner.stripe_left.pink": "Pala Dextra Rosa", - "item.banner.stripe_left.purple": "Pala Dextra Lilás", + "item.banner.stripe_left.purple": "Pala Dextra Roxa", "item.banner.stripe_left.red": "Pala Dextra Vermelha", "item.banner.stripe_left.silver": "Pala Dextra Cinza Clara", "item.banner.stripe_left.white": "Pala Dextra Branca", @@ -32651,7 +32259,7 @@ export const langs: Langs = { "item.banner.stripe_middle.magenta": "Faixa Magenta", "item.banner.stripe_middle.orange": "Faixa Laranja", "item.banner.stripe_middle.pink": "Faixa Rosa", - "item.banner.stripe_middle.purple": "Faixa Lilás", + "item.banner.stripe_middle.purple": "Faixa Roxa", "item.banner.stripe_middle.red": "Faixa Vermelha", "item.banner.stripe_middle.silver": "Faixa Cinza Clara", "item.banner.stripe_middle.white": "Faixa Branca", @@ -32667,7 +32275,7 @@ export const langs: Langs = { "item.banner.stripe_right.magenta": "Pala Sinistra Magenta", "item.banner.stripe_right.orange": "Pala Sinistra Laranja", "item.banner.stripe_right.pink": "Pala Sinistra Rosa", - "item.banner.stripe_right.purple": "Pala Sinistra Lilás", + "item.banner.stripe_right.purple": "Pala Sinistra Roxa", "item.banner.stripe_right.red": "Pala Sinistra Vermelha", "item.banner.stripe_right.silver": "Pala Sinistra Cinza Clara", "item.banner.stripe_right.white": "Pala Sinistra Branca", @@ -32683,7 +32291,7 @@ export const langs: Langs = { "item.banner.stripe_top.magenta": "Faixa Magenta no Chefe", "item.banner.stripe_top.orange": "Faixa Laranja no Chefe", "item.banner.stripe_top.pink": "Faixa Rosa no Chefe", - "item.banner.stripe_top.purple": "Faixa Lilás no Chefe", + "item.banner.stripe_top.purple": "Faixa Roxa no Chefe", "item.banner.stripe_top.red": "Faixa Vermelha no Chefe", "item.banner.stripe_top.silver": "Faixa Cinza Clara no Chefe", "item.banner.stripe_top.white": "Faixa Branca no Chefe", @@ -32699,27 +32307,27 @@ export const langs: Langs = { "item.banner.triangle_bottom.magenta": "Asna Magenta", "item.banner.triangle_bottom.orange": "Asna Laranja", "item.banner.triangle_bottom.pink": "Asna Rosa", - "item.banner.triangle_bottom.purple": "Asna Lilás", + "item.banner.triangle_bottom.purple": "Asna Roxa", "item.banner.triangle_bottom.red": "Asna Vermelha", "item.banner.triangle_bottom.silver": "Asna Cinza Clara", "item.banner.triangle_bottom.white": "Asna Branca", "item.banner.triangle_bottom.yellow": "Asna Amarela", - "item.banner.triangle_top.black": "Asna Invertida Preta", - "item.banner.triangle_top.blue": "Asna Invertida Azul", - "item.banner.triangle_top.brown": "Asna Invertida Marrom", - "item.banner.triangle_top.cyan": "Asna Invertida Ciano", - "item.banner.triangle_top.gray": "Asna Invertida Cinza", - "item.banner.triangle_top.green": "Asna Invertida Verde", - "item.banner.triangle_top.lightBlue": "Asna Invertida Azul Clara", - "item.banner.triangle_top.lime": "Asna Invertida Verde Limão", - "item.banner.triangle_top.magenta": "Asna Invertida Magenta", - "item.banner.triangle_top.orange": "Asna Invertida Laranja", - "item.banner.triangle_top.pink": "Asna Invertida Rosa", - "item.banner.triangle_top.purple": "Asna Invertida Lilás", - "item.banner.triangle_top.red": "Asna Invertida Vermelha", - "item.banner.triangle_top.silver": "Asna Invertida Cinza Clara", - "item.banner.triangle_top.white": "Asna Invertida Branca", - "item.banner.triangle_top.yellow": "Asna Invertida Amarela", + "item.banner.triangle_top.black": "Asna Preta Invertida", + "item.banner.triangle_top.blue": "Asna Azul Invertida", + "item.banner.triangle_top.brown": "Asna Marrom Invertida", + "item.banner.triangle_top.cyan": "Asna Ciano Invertida", + "item.banner.triangle_top.gray": "Asna Cinza Invertida", + "item.banner.triangle_top.green": "Asna Verde Invertida", + "item.banner.triangle_top.lightBlue": "Asna Azul Clara Invertida", + "item.banner.triangle_top.lime": "Asna Verde Limão Invertida", + "item.banner.triangle_top.magenta": "Asna Magenta Invertida", + "item.banner.triangle_top.orange": "Asna Laranja Invertida", + "item.banner.triangle_top.pink": "Asna Rosa Invertida", + "item.banner.triangle_top.purple": "Asna Roxa Invertida", + "item.banner.triangle_top.red": "Asna Vermelha Invertida", + "item.banner.triangle_top.silver": "Asna Cinza Clara Invertida", + "item.banner.triangle_top.white": "Asna Branca Invertida", + "item.banner.triangle_top.yellow": "Asna Amarela Invertida", "item.banner.triangles_bottom.black": "Dentado Preto na Base", "item.banner.triangles_bottom.blue": "Dentado Azul na Base", "item.banner.triangles_bottom.brown": "Dentado Marrom na Base", @@ -32731,7 +32339,7 @@ export const langs: Langs = { "item.banner.triangles_bottom.magenta": "Dentado Magenta na Base", "item.banner.triangles_bottom.orange": "Dentado Laranja na Base", "item.banner.triangles_bottom.pink": "Dentado Rosa na Base", - "item.banner.triangles_bottom.purple": "Dentado Lilás na Base", + "item.banner.triangles_bottom.purple": "Dentado Roxo na Base", "item.banner.triangles_bottom.red": "Dentado Vermelho na Base", "item.banner.triangles_bottom.silver": "Dentado Cinza Claro na Base", "item.banner.triangles_bottom.white": "Dentado Branco na Base", @@ -32747,7 +32355,7 @@ export const langs: Langs = { "item.banner.triangles_top.magenta": "Dentado Magenta no Chefe", "item.banner.triangles_top.orange": "Dentado Laranja no Chefe", "item.banner.triangles_top.pink": "Dentado Rosa no Chefe", - "item.banner.triangles_top.purple": "Dentado Lilás no Chefe", + "item.banner.triangles_top.purple": "Dentado Roxo no Chefe", "item.banner.triangles_top.red": "Dentado Vermelho no Chefe", "item.banner.triangles_top.silver": "Dentado Cinza Claro no Chefe", "item.banner.triangles_top.white": "Dentado Branco no Chefe", @@ -32760,14 +32368,14 @@ export const langs: Langs = { "item.bed.green.name": "Cama Verde", "item.bed.brown.name": "Cama Marrom", "item.bed.blue.name": "Cama Azul", - "item.bed.purple.name": "Cama Lilás", + "item.bed.purple.name": "Cama Roxa", "item.bed.cyan.name": "Cama Ciano", - "item.bed.silver.name": "Cama Cinza-claro", + "item.bed.silver.name": "Cama Cinza-clara", "item.bed.gray.name": "Cama Cinza", "item.bed.pink.name": "Cama Rosa", "item.bed.lime.name": "Cama Verde-limão", "item.bed.yellow.name": "Cama Amarela", - "item.bed.lightBlue.name": "Cama Azul-claro", + "item.bed.lightBlue.name": "Cama Azul-clara", "item.bed.magenta.name": "Cama Magenta", "item.bed.orange.name": "Cama Laranja", "item.bed.white.name": "Cama Branca", @@ -32781,31 +32389,31 @@ export const langs: Langs = { "item.boat.oak.name": "Barco de Carvalho", "item.boat.spruce.name": "Barco de Pinheiro", "item.boat.birch.name": "Barco de Bétula", - "item.boat.jungle.name": "Barco de Selva", + "item.boat.jungle.name": "Barco da Selva", "item.boat.acacia.name": "Barco de Acácia", "item.boat.big_oak.name": "Barco de Carvalho Escuro", "item.bone.name": "Osso", "item.book.name": "Livro", - "item.breeze_rod.name": "Bastão da Brisa", + "item.breeze_rod.name": "Bastão de Vórtice", "item.chainmail_boots.name": "Botas de Cota de Malha", "item.leather_boots.name": "Botas de Couro", "item.diamond_boots.name": "Botas de Diamante", "item.golden_boots.name": "Botas de Ouro", "item.iron_boots.name": "Botas de Ferro", "item.bow.name": "Arco", - "item.bowl.name": "Vasilha", + "item.bowl.name": "Tigela", "item.bread.name": "Pão", "item.brewing_stand.name": "Suporte de Poções", "item.brick.name": "Tijolo", "item.bucket.name": "Balde", "item.bucketLava.name": "Balde de Lava", "item.bucketWater.name": "Balde de Água", - "item.bucketFish.name": "Balde de bacalhau", - "item.bucketSalmon.name": "Balde de salmão", - "item.bucketTropical.name": "Balde de peixe tropical", - "item.bucketPuffer.name": "Balde de baiacu", - "item.bucketCustomFish.name": "Balde de ", - "item.bucketAxolotl.name": "Balde de Axolote", + "item.bucketFish.name": "Balde com Bacalhau", + "item.bucketSalmon.name": "Balde com Salmão", + "item.bucketTropical.name": "Balde com Peixe Tropical", + "item.bucketPuffer.name": "Balde com Baiacu", + "item.bucketCustomFish.name": "Balde com", + "item.bucketAxolotl.name": "Balde com Axolote", "item.tropicalColorWhite.name": "Branco", "item.tropicalColorOrange.name": "Laranja", "item.tropicalColorMagenta.name": "Magenta", @@ -32821,7 +32429,7 @@ export const langs: Langs = { "item.tropicalColorBrown.name": "Marrom", "item.tropicalColorGreen.name": "Verde", "item.tropicalColorRed.name": "Vermelho", - "item.tropicalBodyKobSingle.name": "Kob %1$s", + "item.tropicalBodyKobSingle.name": "Austral %1$s", "item.tropicalBodySunstreakSingle.name": "Raio de sol %1$s", "item.tropicalBodySnooperSingle.name": "Xereta %1$s", "item.tropicalBodyDasherSingle.name": "Corredor %1$s", @@ -32833,7 +32441,7 @@ export const langs: Langs = { "item.tropicalBodyBlockfishSingle.name": "Peixe bloco %1$s", "item.tropicalBodyBettySingle.name": "Betty %1$s", "item.tropicalBodyClayfishSingle.name": "Argilastim %1$s", - "item.tropicalBodyKobMulti.name": "Kob %1$s-%2$s", + "item.tropicalBodyKobMulti.name": "Austral %1$s-%2$s", "item.tropicalBodySunstreakMulti.name": "Raio de sol %1$s-%2$s", "item.tropicalBodySnooperMulti.name": "Xereta %1$s-%2$s", "item.tropicalBodyDasherMulti.name": "Corredor %1$s-%2$s", @@ -32846,7 +32454,7 @@ export const langs: Langs = { "item.tropicalBodyBettyMulti.name": "Betty %1$s-%2$s", "item.tropicalBodyClayfishMulti.name": "Argilastim %1$s-%2$s", "item.tropicalSchoolAnemone.name": "Anêmona", - "item.tropicalSchoolBlackTang.name": "Tang Preto", + "item.tropicalSchoolBlackTang.name": "Cirurgião-negro", "item.tropicalSchoolBlueDory.name": "Peixe-galo Azul", "item.tropicalSchoolButterflyFish.name": "Peixe-borboleta", "item.tropicalSchoolCichlid.name": "Ciclídeo", @@ -32854,18 +32462,18 @@ export const langs: Langs = { "item.tropicalSchoolCottonCandyBetta.name": "Betta Algodão Doce", "item.tropicalSchoolDottyback.name": "Dottyback", "item.tropicalSchoolEmperorRedSnapper.name": "Imperador Cioba", - "item.tropicalSchoolGoatfish.name": "Goatfish", - "item.tropicalSchoolMoorishIdol.name": "Moorish Idol", + "item.tropicalSchoolGoatfish.name": "Salmonete", + "item.tropicalSchoolMoorishIdol.name": "Ídolo-mouro", "item.tropicalSchoolOrnateButterfly.name": "Peixe-borboleta Ornamentado", "item.tropicalSchoolParrotfish.name": "Peixe-papagaio", "item.tropicalSchoolQueenAngelFish.name": "Peixe Anjo Rainha", "item.tropicalSchoolRedCichlid.name": "Ciclídeo Vermelho", - "item.tropicalSchoolRedLippedBlenny.name": "Blenny de Lábios Vermelhos", + "item.tropicalSchoolRedLippedBlenny.name": "Peixe-serpente-vermelho", "item.tropicalSchoolRedSnapper.name": "Cioba", "item.tropicalSchoolThreadfin.name": "Barbudo", "item.tropicalSchoolTomatoClown.name": "Peixe-palhaço Tomate", "item.tropicalSchoolTriggerfish.name": "Peixe-porco", - "item.tropicalSchoolYellowTang.name": "Tang Amarelo", + "item.tropicalSchoolYellowTang.name": "Cirurgião-amarelo", "item.tropicalSchoolYellowtailParrot.name": "Peixe-papagaio de Cauda Amarela", "item.cake.name": "Bolo", "item.camera.name": "Câmera", @@ -32883,7 +32491,7 @@ export const langs: Langs = { "item.itemLock.popupNotice.cantMove": ":solid_star: Itens Imóveis não podem ser: movidos, largados, removidos, usados para criação", "item.golden_carrot.name": "Cenoura Dourada", "item.carrotOnAStick.name": "Cenoura no Palito", - "item.warped_fungus_on_a_stick.name": "Fungo Distorcido no Graveto", + "item.warped_fungus_on_a_stick.name": "Vara com Fungo Distorcido", "item.carrot.name": "Cenoura", "item.cauldron.name": "Caldeirão", "item.charcoal.name": "Carvão Vegetal", @@ -32913,12 +32521,12 @@ export const langs: Langs = { "item.birch_door.name": "Porta de Bétula", "item.dark_oak_door.name": "Porta de Carvalho Escuro", "item.iron_door.name": "Porta de Ferro", - "item.jungle_door.name": "Porta de Selva", + "item.jungle_door.name": "Porta da Selva", "item.wooden_door.name": "Porta de Carvalho", "item.spruce_door.name": "Porta de Pinheiro", "item.crimson_door.name": "Porta Carmesim", "item.warped_door.name": "Porta Distorcida", - "item.dragon_breath.name": "Baforada de Dragão", + "item.dragon_breath.name": "Bafo do Dragão", "item.dyed": "Tingido", "item.dye.black.name": "Bolsa de Tinta", "item.dye.black_new.name": "Corante Preto", @@ -32934,7 +32542,7 @@ export const langs: Langs = { "item.dye.magenta.name": "Corante Magenta", "item.dye.orange.name": "Corante Laranja", "item.dye.pink.name": "Corante Rosa", - "item.dye.purple.name": "Corante Lilás", + "item.dye.purple.name": "Corante Roxo", "item.dye.red.name": "Corante Vermelho", "item.dye.silver.name": "Corante Cinza Claro", "item.dye.white.name": "Farinha de Osso", @@ -32943,17 +32551,17 @@ export const langs: Langs = { "item.glow_ink_sac.name": "Bolsa de Tinta Brilhante", "item.glow_frame.name": "Moldura Brilhante", "item.egg.name": "Ovo", - "item.elytra.name": "Élitro", + "item.elytra.name": "Élitros", "item.emerald.name": "Esmeralda", "item.emptyMap.name": "Mapa em Branco", "item.emptyLocatorMap.name": "Mapa do Localizador Vazio", "item.enchanted_book.name": "Livro Encantado", "item.end_crystal.name": "Cristal do End", - "tile.end_rod.name": "Haste de Extremidade", + "tile.end_rod.name": "Vara do End", "item.ender_eye.name": "Olho de Ender", - "item.ender_pearl.name": "Pérola do End", - "item.experience_bottle.name": "Frasco de Encantamentos", - "item.exposed_copper_door.name": "Porta de Cobre Exposta", + "item.ender_pearl.name": "Pérola de Ender", + "item.experience_bottle.name": "Frasco de Experiência", + "item.exposed_copper_door.name": "Porta de Cobre Exposto", "item.feather.name": "Pena", "item.fermented_spider_eye.name": "Olho de Aranha Fermentado", "item.fireball.name": "Bola de Fogo", @@ -32999,7 +32607,7 @@ export const langs: Langs = { "item.flower_pot.name": "Vaso de Flor", "item.frame.name": "Moldura", "item.ghast_tear.name": "Lágrima de Ghast", - "item.glass_bottle.name": "Garrafa de Vidro", + "item.glass_bottle.name": "Frasco de Vidro", "item.gold_nugget.name": "Pepita de Ouro", "item.iron_nugget.name": "Pepita de Ferro", "item.diamond_axe.name": "Machado de Diamante", @@ -33017,16 +32625,17 @@ export const langs: Langs = { "item.iron_hoe.name": "Enxada de Ferro", "item.stone_hoe.name": "Enxada de Pedra", "item.wooden_hoe.name": "Enxada de Madeira", - "item.honey_bottle.name": "Garrafa de Mel", + "item.honey_bottle.name": "Frasco de Mel", "item.honeycomb.name": "Favo de mel", "item.horsearmordiamond.name": "Armadura de Diamante para Cavalo", "item.horsearmorgold.name": "Armadura de Ouro para Cavalo", "item.horsearmoriron.name": "Armadura de Ferro para Cavalo", + "item.copper_horse_armor.name": "Armadura de Cobre para Cavalo", "item.horsearmorleather.name": "Armadura de Couro para Cavalo", "item.gold_ingot.name": "Barra de Ouro", "item.iron_ingot.name": "Barra de Ferro", "item.netherite_ingot.name": "Barra de Netherita", - "item.netherite_scrap.name": "Sucata de Netherita", + "item.netherite_scrap.name": "Fragmentos de Netherita", "item.netherite_sword.name": "Espada de Netherita", "item.netherite_pickaxe.name": "Picareta de Netherita", "item.netherite_axe.name": "Machado de Netherita", @@ -33049,113 +32658,113 @@ export const langs: Langs = { "item.mace.name": "Maça", "item.magma_cream.name": "Creme de Magma", "item.map.name": "Mapa", - "item.map.exploration.mansion.name": "Mapa do Explorador da Mata", - "item.map.exploration.monument.name": "Mapa do Explorador do Oceano", + "item.map.exploration.mansion.name": "Mapa de exploração da Mata", + "item.map.exploration.monument.name": "Mapa de exploração do Oceano", "item.map.exploration.treasure.name": "Mapa do Tesouro", "item.map.exploration.buried_treasure.name": "Mapa do Tesouro", "item.map.exploration.village_snowy.name": "Mapa da Vila Nevada", - "item.map.exploration.village_taiga.name": "Mapa da Vila de Taiga", + "item.map.exploration.village_taiga.name": "Mapa da Vila da Taiga", "item.map.exploration.village_plains.name": "Mapa da Vila das Planícies", "item.map.exploration.village_savanna.name": "Mapa da Vila da Savana", "item.map.exploration.village_desert.name": "Mapa da Vila do Deserto", - "item.map.exploration.jungle_temple.name": "Mapa do Explorador da Selva", - "item.map.exploration.swamp_hut.name": "Mapa do Explorador do Pântano", - "item.map.exploration.trial_chambers.name": "Mapa do Explorador da Provação", + "item.map.exploration.jungle_temple.name": "Mapa de exploração da Selva", + "item.map.exploration.swamp_hut.name": "Mapa de exploração do Pântano", + "item.map.exploration.trial_chambers.name": "Mapa de exploração de Avaliação", "item.melon.name": "Fatia de Melancia", "item.milk.name": "Balde de Leite", "item.minecart.name": "Carrinho de Minas", - "item.chest_minecart.name": "Carrinho com Baú", + "item.chest_minecart.name": "Carrinho de mina com Baú", "item.command_block_minecart.name": "Carrinho de Minas com Bloco de Comando", - "item.minecartFurnace.name": "Carrinho com Fornalha", - "item.hopper_minecart.name": "Carrinho com Funil", - "item.ominous_bottle.name": "Garrafa Sinistra", - "item.ominous_trial_key.name": "Chave de Provação Sinistra", - "item.oxidized_copper_door.name": "Porta de Cobre Oxidada", - "item.tnt_minecart.name": "Carrinho com Dinamite", - "item.pitcher_pod.name": "Vagem de Cântaro", + "item.minecartFurnace.name": "Carrinho de mina com Fornalha", + "item.hopper_minecart.name": "Carrinho de mina com Funil", + "item.ominous_bottle.name": "Frasco Sinistro", + "item.ominous_trial_key.name": "Chave Sombria do Desafio", + "item.oxidized_copper_door.name": "Porta de Cobre Oxidado", + "item.tnt_minecart.name": "Carrinho de mina com Dinamite", + "item.pitcher_pod.name": "Vagem de Planta Ancestral", "item.torchflower_seeds.name": "Sementes de Plantocha", - "item.spawn_egg.entity.agent.name": "Ovo de Invocação de Agent", - "item.spawn_egg.entity.armadillo.name": "Ovo de Invocação de Tatu", - "item.spawn_egg.entity.axolotl.name": "Ovo de Invocação de Axolote", - "item.spawn_egg.entity.bee.name": "Ovo de Invocação de Abelha", - "item.spawn_egg.entity.bogged.name": "Ovo de Invocação de Atolado", - "item.spawn_egg.entity.breeze.name": "Ovo de Invocação de Brisa", - "item.spawn_egg.entity.hoglin.name": "Ovo de Invocação de Hoglin", - "item.spawn_egg.entity.cat.name": "Ovo de Invocação de Gato", - "item.spawn_egg.entity.chicken.name": "Ovo de Invocação de Galinha", - "item.spawn_egg.entity.cow.name": "Ovo de Invocação de Vaca", - "item.spawn_egg.entity.cod.name": "Ovo de Invocação de Bacalhau", - "item.spawn_egg.entity.creaking.name": "Ovo de Invocação Rangente", - "item.spawn_egg.entity.ender_dragon.name": "Ovo de Invocação de Dragão Ender", - "item.spawn_egg.entity.goat.name": "Ovo de Invocação de Cabra", - "item.spawn_egg.entity.pufferfish.name": "Ovo de Invocação de Baiacu", - "item.spawn_egg.entity.salmon.name": "Ovo de Invocação de Salmão", - "item.spawn_egg.entity.tropicalfish.name": "Ovo de Invocação de Peixe Tropical", - "item.spawn_egg.entity.pig.name": "Ovo de Invocação de Porco", - "item.spawn_egg.entity.sheep.name": "Ovo de Invocação de Ovelha", - "item.spawn_egg.entity.npc.name": "Ovo de Invocação de NPC", + "item.spawn_egg.entity.agent.name": "Ovo Gerador de Agent", + "item.spawn_egg.entity.armadillo.name": "Ovo Gerador de Tatu", + "item.spawn_egg.entity.axolotl.name": "Ovo Gerador de Axolote", + "item.spawn_egg.entity.bee.name": "Ovo Gerador de Abelha", + "item.spawn_egg.entity.bogged.name": "Ovo Gerador Pantanoso", + "item.spawn_egg.entity.breeze.name": "Ovo de Invocação de Vórtice", + "item.spawn_egg.entity.hoglin.name": "Ovo Gerador de Hoglin", + "item.spawn_egg.entity.cat.name": "Ovo Gerador de Gato", + "item.spawn_egg.entity.chicken.name": "Ovo Gerador de Galinha", + "item.spawn_egg.entity.cow.name": "Ovo Gerador de Vaca", + "item.spawn_egg.entity.cod.name": "Ovo Gerador de Bacalhau", + "item.spawn_egg.entity.creaking.name": "Ovo Gerador Rangente", + "item.spawn_egg.entity.ender_dragon.name": "Ovo Gerador de Dragão Ender", + "item.spawn_egg.entity.goat.name": "Ovo Gerador de Cabra", + "item.spawn_egg.entity.pufferfish.name": "Ovo Gerador de Baiacu", + "item.spawn_egg.entity.salmon.name": "Ovo Gerador de Salmão", + "item.spawn_egg.entity.tropicalfish.name": "Ovo Gerador de Peixe Tropical", + "item.spawn_egg.entity.pig.name": "Ovo Gerador de Porco", + "item.spawn_egg.entity.sheep.name": "Ovo Gerador de Ovelha", + "item.spawn_egg.entity.npc.name": "Ovo Gerador de NPC", "item.spawn_egg.entity.npc.failed": "Você precisa de Criativo e Operador para gerar um NPC", - "item.spawn_egg.entity.wolf.name": "Ovo de Invocação de Lobo", - "item.spawn_egg.entity.villager.name": "Ovo de Invocação de Aldeão", - "item.spawn_egg.entity.villager_v2.name": "Ovo de Invocação de Aldeão", - "item.spawn_egg.entity.vindicator.name": "Ovo de Invocação de Vindicador", - "item.spawn_egg.entity.mooshroom.name": "Ovo de Invocação de Coguvaca", - "item.spawn_egg.entity.squid.name": "Ovo de Invocação de Lula", - "item.spawn_egg.entity.glow_squid.name": "Ovo de Invocação de Lula Brilhante", - "item.spawn_egg.entity.rabbit.name": "Ovo de Invocação de Coelho", - "item.spawn_egg.entity.bat.name": "Ovo de Invocação de Morcego", - "item.spawn_egg.entity.ravager.name": "Ovo de Invocação de Devastador", - "item.spawn_egg.entity.iron_golem.name": "Ovo de Invocação de Golem de Ferro", - "item.spawn_egg.entity.snow_golem.name": "Ovo de Invocação de Golem de Neve", - "item.spawn_egg.entity.ocelot.name": "Ovo de Invocação de Jaguatirica", - "item.spawn_egg.entity.parrot.name": "Ovo de Invocação de Papagaio", - "item.spawn_egg.entity.horse.name": "Ovo de Invocação de Cavalo", - "item.spawn_egg.entity.llama.name": "Ovo de Invocação de Lhama", - "item.spawn_egg.entity.trader_llama.name": "Ovo de Invocação de Lhama Comerciante", - "item.spawn_egg.entity.polar_bear.name": "Ovo de Invocação de Urso Polar", - "item.spawn_egg.entity.donkey.name": "Ovo de Invocação de Burro", - "item.spawn_egg.entity.mule.name": "Ovo de Invocação de Mula", - "item.spawn_egg.entity.skeleton_horse.name": "Ovo de Invocação de Cavalo Esqueleto", - "item.spawn_egg.entity.zombie_horse.name": "Ovo de Invocação de Cavalo Zumbi", - "item.spawn_egg.entity.zombie.name": "Ovo de Invocação de Zumbi", - "item.spawn_egg.entity.drowned.name": "Ovo de Invocação de Afogado", - "item.spawn_egg.entity.creeper.name": "Ovo de Invocação de Creeper", - "item.spawn_egg.entity.skeleton.name": "Ovo de Invocação de Esqueleto", - "item.spawn_egg.entity.spider.name": "Ovo de Invocação de Aranha", - "item.spawn_egg.entity.zombie_pigman.name": "Ovo de Invocação de Piglin Zumbi", - "item.spawn_egg.entity.strider.name": "Ovo de Invocação de Andarilho", - "item.spawn_egg.entity.slime.name": "Ovo de Invocação de Slime", - "item.spawn_egg.entity.enderman.name": "Ovo de Invocação de Enderman", - "item.spawn_egg.entity.silverfish.name": "Ovo de Invocação de Traça", - "item.spawn_egg.entity.cave_spider.name": "Ovo de Invocação de Aranha de Caverna", - "item.spawn_egg.entity.ghast.name": "Ovo de Invocação de Ghast", - "item.spawn_egg.entity.magma_cube.name": "Ovo de Invocação de Cubo de Magma", - "item.spawn_egg.entity.blaze.name": "Ovo de Invocação de Chama", - "item.spawn_egg.entity.zombie_villager.name": "Ovo de Invocação de Aldeão Zumbi", - "item.spawn_egg.entity.zombie_villager_v2.name": "Ovo de Invocação de Aldeão Zumbi", - "item.spawn_egg.entity.witch.name": "Ovo de Invocação de Bruxa", - "item.spawn_egg.entity.stray.name": "Ovo de Invocação de Nômade", - "item.spawn_egg.entity.husk.name": "Ovo de Invocação de Zumbi-múmia", - "item.spawn_egg.entity.wither_skeleton.name": "Ovo de Invocação de Esqueleto Wither", - "item.spawn_egg.entity.guardian.name": "Ovo de Invocação de Guardião", - "item.spawn_egg.entity.elder_guardian.name": "Ovo de Invocação de Guardião-mestre", - "item.spawn_egg.entity.shulker.name": "Ovo de Invocação de Shulker", - "item.spawn_egg.entity.endermite.name": "Ovo de Invocação de Endermite", - "item.spawn_egg.entity.evocation_illager.name": "Ovo de Invocação de Evocador", - "item.spawn_egg.entity.vex.name": "Ovo de Invocação de Vex", - "item.spawn_egg.entity.turtle.name": "Ovo de Invocação de Tartaruga", - "item.spawn_egg.entity.dolphin.name": "Ovo de Invocação de Golfinho", - "item.spawn_egg.entity.phantom.name": "Ovo de Invocação de Fantasma", - "item.spawn_egg.entity.panda.name": "Ovo de Invocação de Panda", - "item.spawn_egg.entity.pillager.name": "Ovo de Invocação de Saqueador", - "item.spawn_egg.entity.piglin_brute.name": "Ovo de Invocação de Piglin Bruto", - "item.spawn_egg.entity.piglin.name": "Ovo de Invocação de Piglin", - "item.spawn_egg.entity.fox.name": "Ovo de Invocação de Raposa", - "item.spawn_egg.entity.unknown.name": "Ovo de Invocação", - "item.spawn_egg.entity.wandering_trader.name": "Ovo de Invocação de Comerciante Nômade", - "item.spawn_egg.entity.wither.name": "Ovo de Invocação de Wither", - "item.spawn_egg.entity.zoglin.name": "Ovo de Invocação de Zoglin", - "item.spawn_egg.entity.sniffer.name": "Ovo de Invocação de Farejador", + "item.spawn_egg.entity.wolf.name": "Ovo Gerador de Lobo", + "item.spawn_egg.entity.villager.name": "Ovo Gerador de Aldeão", + "item.spawn_egg.entity.villager_v2.name": "Ovo Gerador de Aldeão", + "item.spawn_egg.entity.vindicator.name": "Ovo Gerador de Vindicador", + "item.spawn_egg.entity.mooshroom.name": "Ovo Gerador de Coguvaca", + "item.spawn_egg.entity.squid.name": "Ovo Gerador de Lula", + "item.spawn_egg.entity.glow_squid.name": "Ovo Gerador de Lula Brilhante", + "item.spawn_egg.entity.rabbit.name": "Ovo Gerador de Coelho", + "item.spawn_egg.entity.bat.name": "Ovo Gerador de Morcego", + "item.spawn_egg.entity.ravager.name": "Ovo Gerador de Devastador", + "item.spawn_egg.entity.iron_golem.name": "Ovo Gerador de Golem de Ferro", + "item.spawn_egg.entity.snow_golem.name": "Ovo Gerador de Golem de Neve", + "item.spawn_egg.entity.ocelot.name": "Ovo Gerador de Jaguatirica", + "item.spawn_egg.entity.parrot.name": "Ovo Gerador de Papagaio", + "item.spawn_egg.entity.horse.name": "Ovo Gerador de Cavalo", + "item.spawn_egg.entity.llama.name": "Ovo Gerador de Lhama", + "item.spawn_egg.entity.trader_llama.name": "Ovo Gerador de Lhama Comerciante", + "item.spawn_egg.entity.polar_bear.name": "Ovo Gerador de Urso Polar", + "item.spawn_egg.entity.donkey.name": "Ovo Gerador de Burro", + "item.spawn_egg.entity.mule.name": "Ovo Gerador de Mula", + "item.spawn_egg.entity.skeleton_horse.name": "Ovo Gerador de Cavalo Esqueleto", + "item.spawn_egg.entity.zombie_horse.name": "Ovo Gerador de Cavalo Zumbi", + "item.spawn_egg.entity.zombie.name": "Ovo Gerador de Zumbi", + "item.spawn_egg.entity.drowned.name": "Ovo Gerador de Afogado", + "item.spawn_egg.entity.creeper.name": "Ovo Gerador de Creeper", + "item.spawn_egg.entity.skeleton.name": "Ovo Gerador de Esqueleto", + "item.spawn_egg.entity.spider.name": "Ovo Gerador de Aranha", + "item.spawn_egg.entity.zombie_pigman.name": "Ovo Gerador de Piglin Zumbi", + "item.spawn_egg.entity.strider.name": "Ovo Gerador de Lavagante", + "item.spawn_egg.entity.slime.name": "Ovo Gerador de Slime", + "item.spawn_egg.entity.enderman.name": "Ovo Gerador de Enderman", + "item.spawn_egg.entity.silverfish.name": "Ovo Gerador de Traça", + "item.spawn_egg.entity.cave_spider.name": "Ovo Gerador de Aranha das Cavernas", + "item.spawn_egg.entity.ghast.name": "Ovo Gerador de Ghast", + "item.spawn_egg.entity.magma_cube.name": "Ovo Gerador de Cubo de Magma", + "item.spawn_egg.entity.blaze.name": "Ovo Gerador de Chama", + "item.spawn_egg.entity.zombie_villager.name": "Ovo Gerador de Aldeão Zumbi", + "item.spawn_egg.entity.zombie_villager_v2.name": "Ovo Gerador de Aldeão Zumbi", + "item.spawn_egg.entity.witch.name": "Ovo Gerador de Bruxa", + "item.spawn_egg.entity.stray.name": "Ovo Gerador de Errante", + "item.spawn_egg.entity.husk.name": "Ovo Gerador de Zumbi-múmia", + "item.spawn_egg.entity.wither_skeleton.name": "Ovo Gerador de Esqueleto Wither", + "item.spawn_egg.entity.guardian.name": "Ovo Gerador de Guardião", + "item.spawn_egg.entity.elder_guardian.name": "Ovo Gerador de Guardião-mestre", + "item.spawn_egg.entity.shulker.name": "Ovo Gerador de Shulker", + "item.spawn_egg.entity.endermite.name": "Ovo Gerador de Endermite", + "item.spawn_egg.entity.evocation_illager.name": "Ovo Gerador de Invocador", + "item.spawn_egg.entity.vex.name": "Ovo Gerador de Vex", + "item.spawn_egg.entity.turtle.name": "Ovo Gerador de Tartaruga", + "item.spawn_egg.entity.dolphin.name": "Ovo Gerador de Golfinho", + "item.spawn_egg.entity.phantom.name": "Ovo Gerador de Fantasma", + "item.spawn_egg.entity.panda.name": "Ovo Gerador de Panda", + "item.spawn_egg.entity.pillager.name": "Ovo Gerador de Saqueador", + "item.spawn_egg.entity.piglin_brute.name": "Ovo Gerador de Piglin Bárbaro", + "item.spawn_egg.entity.piglin.name": "Ovo Gerador de Piglin", + "item.spawn_egg.entity.fox.name": "Ovo Gerador de Raposa", + "item.spawn_egg.entity.unknown.name": "Ovo Gerador", + "item.spawn_egg.entity.wandering_trader.name": "Ovo Gerador de Vendedor Ambulante", + "item.spawn_egg.entity.wither.name": "Ovo Gerador de Wither", + "item.spawn_egg.entity.zoglin.name": "Ovo Gerador de Zoglin", + "item.spawn_egg.entity.sniffer.name": "Ovo Gerador de Farejador", "item.trident.name": "Tridente", "item.mushroom_stew.name": "Ensopado de Cogumelos", "item.muttonCooked.name": "Carneiro Assado", @@ -33205,10 +32814,12 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Creator", "item.record_creator_music_box.desc": "Lena Raine - Creator (Music Box)", "item.record_precipice.desc": "Aaron Cherof - Precipice", + "item.record_tears.desc": "Amos Roddy - Lágrimas", + "item.record_lava_chicken.desc": "Hiper Poções - Galinha à Lava", "item.redstone.name": "Pó de Redstone", "item.reeds.name": "Cana-de-açúcar", "item.kelp.name": "Alga", - "item.dried_kelp.name": "Alga Desidratada", + "item.dried_kelp.name": "Algas Secas", "item.rotten_flesh.name": "Carne Podre", "item.ruby.name": "Rubi", "item.saddle.name": "Sela", @@ -33216,7 +32827,7 @@ export const langs: Langs = { "item.beetroot_seeds.name": "Sementes de Beterraba", "item.melon_seeds.name": "Sementes de Melancia", "item.pumpkin_seeds.name": "Sementes de Abóbora", - "item.shears.name": "Tosquiadeira", + "item.shears.name": "Tesoura", "item.diamond_shovel.name": "Pá de Diamante", "item.golden_shovel.name": "Pá de Ouro", "item.iron_shovel.name": "Pá de Ferro", @@ -33232,7 +32843,7 @@ export const langs: Langs = { "item.warped_sign.name": "Placa Distorcida", "item.skull.char.name": "Cabeça de Jogador", "item.skull.creeper.name": "Cabeça de Creeper", - "item.skull.dragon.name": "Cabeça de Dragão", + "item.skull.dragon.name": "Cabeça do Dragão", "item.skull.player.name": "Cabeça de %s", "item.skull.skeleton.name": "Crânio de Esqueleto", "item.skull.wither.name": "Crânio de Esqueleto Wither", @@ -33251,49 +32862,49 @@ export const langs: Langs = { "item.stone_sword.name": "Espada de Pedra", "item.wooden_sword.name": "Espada de Madeira", "item.unbreakable": "Inquebrável", - "item.waxed_copper_door.name": "Porta de Cobre Encerada", - "item.waxed_exposed_copper_door.name": "Porta de Cobre Exposta e Encerada", - "item.waxed_oxidized_copper_door.name": "Porta de Cobre Oxidada e Encerada", - "item.waxed_weathered_copper_door.name": "Porta de Cobre Desbotada e Encerada", - "item.weathered_copper_door.name": "Porta de Cobre Desbotada", + "item.waxed_copper_door.name": "Porta de Cobre Encerado", + "item.waxed_exposed_copper_door.name": "Porta de Cobre Exposto Encerado", + "item.waxed_oxidized_copper_door.name": "Porta de Cobre Oxidado Encerado", + "item.waxed_weathered_copper_door.name": "Porta de Cobre Desbotado Encerado", + "item.weathered_copper_door.name": "Porta de Cobre Desbotado", "item.wind_charge.name": "Carga de Vento", "item.wheat.name": "Trigo", "item.wolf_armor.name": "Armadura para Lobo", "item.writable_book.name": "Livro e Pena", "item.written_book.name": "Livro Escrito", "item.glowstone_dust.name": "Pó de Pedra Luminosa", - "item.shulker_shell.name": "Casca de Shulker", + "item.shulker_shell.name": "Casco de Shulker", "item.totem.name": "Totem da Imortalidade", - "item.trial_key.name": "Chave da Provação", + "item.trial_key.name": "Chave do Desafio", "item.turtle_helmet.name": "Casco de Tartaruga", - "item.turtle_shell_piece.name": "Carapaça de Tartaruga", + "item.turtle_shell_piece.name": "Escama de Tartaruga", "item.phantom_membrane.name": "Membrana de Fantasma", - "item.sweet_berries.name": "Frutas Vermelhas Doces", - "item.suspicious_stew.name": "Sopa Suspeita", - "item.field_masoned_banner_pattern.name": "Padrão da Bandeira de Campo em Alvenaria", - "item.creeper_banner_pattern.name": "Padrão da Bandeira de Figura de Creeper", - "item.flow_banner_pattern.name": "Padrão da Bandeira de Fluxo", - "item.flower_banner_pattern.name": "Padrão da Bandeira de Figura de Flor", - "item.globe_banner_pattern.name": "Padrão da Bandeira de Globo", - "item.guster_banner_pattern.name": "Padrão da Bandeira de Rajada", - "item.piglin_banner_pattern.name": "Padrão da Bandeira de Focinho", - "item.skull_banner_pattern.name": "Padrão da Bandeira de Figura de Caveira", - "item.mojang_banner_pattern.name": "Padrão da Bandeira de Coisa", - "item.bordure_indented_banner_pattern.name": "Padrão da Bandeira de Bordadura Recuada", - "item.banner_pattern.bricks": "Campo em Alvenaria", + "item.sweet_berries.name": "Bagas Doces", + "item.suspicious_stew.name": "Ensopado Suspeito", + "item.field_masoned_banner_pattern.name": "Padrão da Bandeira de Muro", + "item.creeper_banner_pattern.name": "Figura para Estandarte de Figura de Creeper", + "item.flow_banner_pattern.name": "Figura para Estandarte de Fluxo", + "item.flower_banner_pattern.name": "Figura para Estandarte de Figura de Flor", + "item.globe_banner_pattern.name": "Figura para Estandarte de Globo", + "item.guster_banner_pattern.name": "Figura para Estandarte de Rajada", + "item.piglin_banner_pattern.name": "Figura para Estandarte de Focinho", + "item.skull_banner_pattern.name": "Figura para Estandarte de Figura de Caveira", + "item.mojang_banner_pattern.name": "Figura para Estandarte de Símbolo", + "item.bordure_indented_banner_pattern.name": "Figura para Estandarte de Bordadura Dentada", + "item.banner_pattern.bricks": "Muro", "item.banner_pattern.creeper": "Figura de Creeper", "item.banner_pattern.flow": "Fluxo", "item.banner_pattern.flower": "Figura de Flor", "item.banner_pattern.globe": "Globo", "item.banner_pattern.guster": "Rajada", - "item.banner_pattern.name": "Padrão da Bandeira", + "item.banner_pattern.name": "Figura para Estandarte", "item.banner_pattern.piglin": "Focinho", "item.banner_pattern.skull": "Figura de Caveira", "item.banner_pattern.thing": "Coisa", - "item.banner_pattern.vines": "Bordadura Recuada", + "item.banner_pattern.vines": "Bordadura Dentada", "item.bucketPowderSnow.name": "Balde de Neve em Pó", "item.pale_oak_door.name": "Porta de Carvalho Pálido", - "item.pale_oak_hanging_sign.name": "Placa Pendurada de Carvalho Pálido", + "item.pale_oak_hanging_sign.name": "Placa Suspensa de Carvalho Pálido", "item.pale_oak_sign.name": "Placa de Carvalho Pálido", "tile.pale_oak_sapling.name": "Muda de Carvalho Pálido", "tile.pale_oak_leaves.name": "Folhas de Carvalho Pálido", @@ -33333,7 +32944,7 @@ export const langs: Langs = { "item.gray_bundle": "Pacote Cinza", "item.pink_bundle": "Pacote Rosa", "item.magenta_bundle": "Pacote Magenta", - "item.purple_bundle": "Pacote Lilás", + "item.purple_bundle": "Pacote Roxo", "item.cyan_bundle": "Pacote Ciano", "item.bundle.empty": "Esvaziar", "item.bundle.empty.description": "Pode conter uma pilha de itens sortidos", @@ -33350,24 +32961,24 @@ export const langs: Langs = { "item.minecraft.goat_horn.sound.7": "Sonho", "potion.absorption": "Absorção", "potion.blindness": "Cegueira", - "potion.conduitPower": "Poder de Canal", + "potion.conduitPower": "Proteção do Mar", "potion.confusion": "Náusea", "potion.damageBoost": "Força", - "potion.damageBoost.name": "Poção da Força", - "potion.damageBoost.splash.name": "Poção Arremessável da Força", - "potion.damageBoost.linger.name": "Poção Prolongada da Força", - "potion.digSlowDown": "Cansaço", + "potion.damageBoost.name": "Poção de Força", + "potion.damageBoost.splash.name": "Poção de Força Arremessável", + "potion.damageBoost.linger.name": "Poção de Força Prolongada", + "potion.digSlowDown": "Exaustão", "potion.digSpeed": "Pressa", "potion.effects.whenDrank": "Quando Aplicado:", "potion.empty": "Sem Efeitos", - "potion.emptyPotion.name": "Garrafa de Água", - "potion.emptyPotion.splash.name": "Garrafa de Água Arremessável", - "potion.emptyPotion.linger.name": "Garrafa de Água Prolongada", + "potion.emptyPotion.name": "Frasco de Água", + "potion.emptyPotion.splash.name": "Frasco de Água Arremessável", + "potion.emptyPotion.linger.name": "Frasco de Água Prolongado", "potion.fireResistance": "Resistência ao Fogo", "potion.fireResistance.name": "Poção de Resistência ao Fogo", "potion.fireResistance.splash.name": "Poção Arremessável de Resistência ao Fogo", "potion.fireResistance.linger.name": "Poção Prolongada de Resistência ao Fogo", - "potion.harm": "Dano Imediato", + "potion.harm": "Dano Instantâneo", "potion.harm.name": "Poção de Dano", "potion.harm.splash.name": "Poção Arremessável de Dano", "potion.harm.linger.name": "Poção Prolongada de Dano", @@ -33377,43 +32988,43 @@ export const langs: Langs = { "potion.heal.linger.name": "Poção Prolongada de Cura", "potion.healthBoost": "Vida Extra", "potion.hunger": "Fome", - "potion.infested.linger.name": "Poção Prolongada da Infestação", - "potion.infested.name": "Poção da Infestação", - "potion.infested.splash.name": "Poção Arremessável da Infestação", - "potion.infested": "Infestado", + "potion.infested.linger.name": "Poção de Infestação Prolongada", + "potion.infested.name": "Poção de Infestação", + "potion.infested.splash.name": "Poção de Infestação Arremessável", + "potion.infested": "Infestação", "potion.invisibility": "Invisibilidade", - "potion.invisibility.name": "Poção da Invisibilidade", - "potion.invisibility.splash.name": "Poção Arremessável da Invisibilidade", - "potion.invisibility.linger.name": "Poção Prolongada da Invisibilidade", - "potion.jump": "Salto Turbinado", - "potion.jump.name": "Poção do Pulo", - "potion.jump.splash.name": "Poção Arremessável do Pulo", - "potion.jump.linger.name": "Poção Prolongada do Pulo", + "potion.invisibility.name": "Poção de Invisibilidade", + "potion.invisibility.splash.name": "Poção de Invisibilidade Arremessável", + "potion.invisibility.linger.name": "Poção de Invisibilidade Prolongada", + "potion.jump": "Supersalto", + "potion.jump.name": "Poção de Salto", + "potion.jump.splash.name": "Poção de Salto Arremessável", + "potion.jump.linger.name": "Poção de Salto Prolongada", "potion.levitation": "Levitação", "potion.moveSlowdown": "Lentidão", - "potion.moveSlowdown.name": "Poção da Lentidão", - "potion.moveSlowdown.splash.name": "Poção Arremessável da Lentidão", - "potion.moveSlowdown.linger.name": "Poção Prolongada da Lentidão", + "potion.moveSlowdown.name": "Poção de Lentidão", + "potion.moveSlowdown.splash.name": "Poção de Lentidão Arremessável", + "potion.moveSlowdown.linger.name": "Poção de Lentidão Prolongada", "potion.slowFalling": "Queda Lenta", "potion.slowFalling.name": "Poção de Queda Lenta", "potion.slowFalling.splash.name": "Poção Arremessável de Queda Lenta", "potion.slowFalling.linger.name": "Poção Prolongada de Queda Lenta", "potion.moveSpeed": "Velocidade", - "potion.moveSpeed.name": "Poção da Agilidade", - "potion.moveSpeed.splash.name": "Poção Arremessável da Agilidade", - "potion.moveSpeed.linger.name": "Poção Prolongada da Agilidade", + "potion.moveSpeed.name": "Poção de Agilidade", + "potion.moveSpeed.splash.name": "Poção de Agilidade Arremessável", + "potion.moveSpeed.linger.name": "Poção de Agilidade Prolongada", "potion.nightVision": "Visão Noturna", - "potion.nightVision.name": "Poção da Visão Noturna", - "potion.nightVision.splash.name": "Poção Arremessável da Visão Noturna", - "potion.nightVision.linger.name": "Poção Prolongada da Visão Noturna", - "potion.oozing.linger.name": "Poção Prolongada Gotejante", - "potion.oozing.name": "Poção Gotejante", - "potion.oozing.splash.name": "Poção Arremessável Gotejante", - "potion.oozing": "Gotejante", + "potion.nightVision.name": "Poção de Visão Noturna", + "potion.nightVision.splash.name": "Poção de Visão Noturna Arremessável", + "potion.nightVision.linger.name": "Poção de Visão Noturna Prolongada", + "potion.oozing.linger.name": "Poção Pegajosa Gotejante", + "potion.oozing.name": "Poção Pegajosa", + "potion.oozing.splash.name": "Poção Pegajosa Arremessável", + "potion.oozing": "Pegajoso", "potion.poison": "Veneno", - "potion.poison.name": "Poção Venenosa", - "potion.poison.splash.name": "Poção Arremessável de Veneno", - "potion.poison.linger.name": "Poção Prolongada de Veneno", + "potion.poison.name": "Poção de Veneno", + "potion.poison.splash.name": "Poção de Veneno Arremessável", + "potion.poison.linger.name": "Poção de Veneno Prolongada", "potion.potency.0": "", "potion.potency.1": "II", "potion.potency.2": "III", @@ -33423,19 +33034,19 @@ export const langs: Langs = { "potion.awkward.name": "Poção Estranha", "potion.awkward.splash.name": "Poção Estranha Arremessável", "potion.awkward.linger.name": "Estranha Poção Prolongada", - "potion.mundane.name": "Poção Mundana", - "potion.mundane.splash.name": "Poção Mundana Arremessável", - "potion.mundane.linger.name": "Poção Mundana Prolongada", - "potion.mundane.extended.name": "Poção Mundana Longa", - "potion.mundane.extended.splash.name": "Poção Mundana Longa Arremessável", - "potion.mundane.extended.linger.name": "Poção Mundana Longa Prolongada", + "potion.mundane.name": "Poção Comum", + "potion.mundane.splash.name": "Poção Comum Arremessável", + "potion.mundane.linger.name": "Poção Comum Prolongada", + "potion.mundane.extended.name": "Poção Comum Longa", + "potion.mundane.extended.splash.name": "Poção Comum Longa Arremessável", + "potion.mundane.extended.linger.name": "Poção Comum Longa Prolongada", "potion.thick.name": "Poção Espessa", "potion.thick.splash.name": "Poção Espessa Arremessável", "potion.thick.linger.name": "Poção Espessa Prolongada", "potion.regeneration": "Regeneração", - "potion.regeneration.name": "Poção da Regeneração", - "potion.regeneration.splash.name": "Poção Arremessável da Regeneração", - "potion.regeneration.linger.name": "Poção Prolongada da Regeneração", + "potion.regeneration.name": "Poção de Regeneração", + "potion.regeneration.splash.name": "Poção de Regeneração Arremessável", + "potion.regeneration.linger.name": "Poção de Regeneração Prolongada", "potion.resistance": "Resistência", "potion.saturation": "Saturação", "potion.turtleMaster": "Lentidão", @@ -33448,55 +33059,55 @@ export const langs: Langs = { "potion.waterBreathing.splash.name": "Poção Arremessável de Respiração Aquática", "potion.waterBreathing.linger.name": "Poção Prolongada de Respiração Aquática", "potion.weakness": "Fraqueza", - "potion.weakness.name": "Poção da Fraqueza", - "potion.weakness.splash.name": "Poção Arremessável da Fraqueza", - "potion.weakness.linger.name": "Poção Prolongada da Fraqueza", - "potion.weaving.linger.name": "Poção Prolongada da Tecelagem", - "potion.weaving.name": "Poção da Tecelagem", - "potion.weaving.splash.name": "Poção Arremessável da Tecelagem", + "potion.weakness.name": "Poção de Fraqueza", + "potion.weakness.splash.name": "Poção de Fraqueza Arremessável", + "potion.weakness.linger.name": "Poção de Fraqueza Prolongada", + "potion.weaving.linger.name": "Poção de Tecitura Prolongada", + "potion.weaving.name": "Poção de Tecitura", + "potion.weaving.splash.name": "Poção de Tecitura Arremessável", "potion.weaving": "Tecelagem", - "potion.windCharged.linger.name": "Poção Prolongada de Carregamento do Vento", - "potion.windCharged.name": "Poção de Carregamento do Vento", - "potion.windCharged.splash.name": "Poção Arremessável de Carregamento do Vento", - "potion.windCharged": "Vento Carregado", - "potion.wither": "Wither", + "potion.windCharged.linger.name": "Poção de Ventania Prolongada", + "potion.windCharged.name": "Poção de Ventania", + "potion.windCharged.splash.name": "Poção de Ventania Arremessável", + "potion.windCharged": "Ventania", + "potion.wither": "Decomposição", "potion.wither.name": "Poção da Decomposição", "potion.wither.splash.name": "Poção Arremessável da Decomposição", "potion.wither.linger.name": "Poção Prolongada da Decomposição", "tile.sculk_sensor.name": "Sensor de Vibrações", "tile.sculk.name": "Sculk", - "tile.sculk_vein.name": "Veia Sculk", + "tile.sculk_vein.name": "Veio de Sculk", "tile.sculk_catalyst.name": "Catalisador de Sculk", "tile.sculk_shrieker.name": "Emissor de sculk", "tile.reinforced_deepslate.name": "Ardosiabissal Reforçada", - "entity.frog.name": "Rã", + "entity.frog.name": "Sapo", "entity.tadpole.name": "Girino", - "item.spawn_egg.entity.warden.name": "Ovo de Invocação de Guarda", + "item.spawn_egg.entity.warden.name": "Ovo de Invocação de Defensor", "entity.warden.name": "Guarda", - "entity.allay.name": "Assistente", - "item.spawn_egg.entity.allay.name": "Ovo de Invocação de Assistente", - "item.bucketTadpole.name": "Balde de Girinos", - "item.spawn_egg.entity.frog.name": "Ovo de Invocação de Rã", - "item.spawn_egg.entity.tadpole.name": "Ovo de Invocação de Girino", - "tile.frog_spawn.name": "Invocador de Rã", - "tile.pearlescent_froglight.name": "Luz de Sapo Perolada", - "tile.verdant_froglight.name": "Luz de Sapo Verdejante", - "tile.ochre_froglight.name": "Luz de Sapo Ocre", + "entity.allay.name": "Allay", + "item.spawn_egg.entity.allay.name": "Ovo de Invocação de Allay", + "item.bucketTadpole.name": "Balde com Girino", + "item.spawn_egg.entity.frog.name": "Ovo Gerador de Sapo", + "item.spawn_egg.entity.tadpole.name": "Ovo Gerador de Girino", + "tile.frog_spawn.name": "Ovos de Sapo", + "tile.pearlescent_froglight.name": "Anfibrilho Perolado", + "tile.verdant_froglight.name": "Anfibrilho Verdejante", + "tile.ochre_froglight.name": "Anfibrilho Ocre", "tile.mud.name": "Lama", "tile.packed_mud.name": "Lama Endurecida", - "tile.mud_bricks.name": "Tijolos de Lama", - "tile.mud_brick_slab.name": "Laje de Tijolos de Lama", - "tile.mud_brick_double_slab": "Laje Dupla de Tijolos de Lama", - "tile.mud_brick_stairs.name": "Escadas de Tijolos de Lama", - "tile.mud_brick_wall.name": "Parede de Tijolos de Lama", + "tile.mud_bricks.name": "Tijolos de Barro", + "tile.mud_brick_slab.name": "Laje de Tijolos de Barro", + "tile.mud_brick_double_slab": "Laje Dupla de Tijolos de Barro", + "tile.mud_brick_stairs.name": "Escada de Tijolos de Barro", + "tile.mud_brick_wall.name": "Parede de Tijolos de Barro", "tile.mangrove_leaves.name": "Folhas de Mangue", "tile.mangrove_propagule.name": "Propágulo de Mangue", "tile.mangrove_roots.name": "Raízes de Mangue", - "tile.muddy_mangrove_roots.name": "Raízes de Mangue Lamacentas", + "tile.muddy_mangrove_roots.name": "Raízes Barrentas de Mangue", "item.chest_boat.oak.name": "Barco de Carvalho com Baú", "item.chest_boat.spruce.name": "Barco de Pinheiro com Baú", "item.chest_boat.birch.name": "Barco de Bétula com Baú", - "item.chest_boat.jungle.name": "Barco de Selva com Baú", + "item.chest_boat.jungle.name": "Barco da Selva com Baú", "item.chest_boat.acacia.name": "Barco de Acácia com Baú", "item.chest_boat.big_oak.name": "Barco de Carvalho Escuro com Baú", "item.chest_boat.mangrove.name": "Barco de Mangue com Baú", @@ -33508,7 +33119,7 @@ export const langs: Langs = { "tile.mangrove_slab.name": "Laje de Mangue", "tile.mangrove_pressure_plate.name": "Placa de Pressão de Mangue", "tile.mangrove_fence.name": "Cerca de Mangue", - "tile.mangrove_fence_gate.name": "Portão de Cerca de Mangue", + "tile.mangrove_fence_gate.name": "Portão de Mangue", "item.mangrove_door.name": "Porta de Mangue", "item.mangrove_sign.name": "Placa de Mangue", "tile.mangrove_trapdoor.name": "Alçapão de Mangue", @@ -33516,7 +33127,7 @@ export const langs: Langs = { "tile.stripped_mangrove_wood.name": "Madeira de Mangue Descascada", "item.boat.mangrove.name": "Barco de Mangue", "item.echo_shard.name": "Fragmento de Eco", - "item.recovery_compass.name": "Bússola de Recuperação", + "item.recovery_compass.name": "Bússola de Retomada", "item.disc_fragment.name": "Fragmento de Disco", "item.disc_fragment_5.desc": "Disco de Música - 5", "item.record_5.desc": "Samuel Åberg - 5", @@ -33536,7 +33147,7 @@ export const langs: Langs = { "item.boat.bamboo.name": "Jangada de Bambu", "item.boat.cherry.name": "Barco de Cerejeira", "item.brewer_pottery_sherd.name": "Fragmento de Cerâmica do Boticário", - "item.brush.name": "Escovar", + "item.brush.name": "Pincel", "item.burn_pottery_sherd.name": "Queimar Fragmento de Cerâmica", "item.cherry_door.name": "Porta de Cerejeira", "item.cherry_hanging_sign.name": "Placa suspensa de cerejeira", @@ -33569,30 +33180,30 @@ export const langs: Langs = { "item.smithing_template.armor_trim.applies_to": "Armadura", "item.smithing_template.armor_trim.ingredients": "Lingotes e Cristais", "item.smithing_template.ingredients": "Ingredientes:", - "item.smithing_template.name": "Modelo de Ferraria", + "item.smithing_template.name": "Molde de Ferraria", "item.smithing_template.netherite_upgrade.applies_to": "Equipamento de Diamante", "item.smithing_template.netherite_upgrade.ingredients": "Barra de Netherita", "item.netherite_upgrade_smithing_template.name": "Atualização Netherita", - "item.sentry_armor_trim_smithing_template.name": "Acabamento da Armadura Sentinela", - "item.vex_armor_trim_smithing_template.name": "Acabamento de Armadura Vex", - "item.wild_armor_trim_smithing_template.name": "Acabamento da Armadura Selvagem", - "item.coast_armor_trim_smithing_template.name": "Acabamento da Armadura da Costa", - "item.dune_armor_trim_smithing_template.name": "Acabamento da Armadura Duna", - "item.wayfinder_armor_trim_smithing_template.name": "Acabamento da Armadura do Compasso", - "item.raiser_armor_trim_smithing_template.name": "Acabamento da Armadura do Elevado", - "item.shaper_armor_trim_smithing_template.name": "Modelador do Acabamento da Armadura", - "item.host_armor_trim_smithing_template.name": "Acabamento da Armadura do Anfitrião", - "item.ward_armor_trim_smithing_template.name": "Acabamento da Armadura do Guardião", - "item.silence_armor_trim_smithing_template.name": "Acabamento da Armadura do Silêncio", - "item.tide_armor_trim_smithing_template.name": "Acabamento da Armadura da Maré", - "item.snout_armor_trim_smithing_template.name": "Acabamento da Armadura do Focinho", - "item.rib_armor_trim_smithing_template.name": "Acabamento da Armadura da Costela", - "item.eye_armor_trim_smithing_template.name": "Acabamento da Armadura dos Olhos", - "item.spire_armor_trim_smithing_template.name": "Acabamento da Armadura de Pináculo", - "item.flow_armor_trim_smithing_template.name": "Acabamento da Armadura do Fluxo", - "item.bolt_armor_trim_smithing_template.name": "Acabamento da Armadura do Parafuso", + "item.sentry_armor_trim_smithing_template.name": "Enfeite Sentinela", + "item.vex_armor_trim_smithing_template.name": "Enfeites Vex", + "item.wild_armor_trim_smithing_template.name": "Enfeite Selvagem", + "item.coast_armor_trim_smithing_template.name": "Enfeite da Costa", + "item.dune_armor_trim_smithing_template.name": "Enfeite Duna", + "item.wayfinder_armor_trim_smithing_template.name": "Enfeite do Compasso", + "item.raiser_armor_trim_smithing_template.name": "Enfeite do Elevado", + "item.shaper_armor_trim_smithing_template.name": "Modelador do Enfeite", + "item.host_armor_trim_smithing_template.name": "Enfeite do Anfitrião", + "item.ward_armor_trim_smithing_template.name": "Enfeite do Guardião", + "item.silence_armor_trim_smithing_template.name": "Enfeite do Silêncio", + "item.tide_armor_trim_smithing_template.name": "Enfeite da Maré", + "item.snout_armor_trim_smithing_template.name": "Enfeite do Focinho", + "item.rib_armor_trim_smithing_template.name": "Enfeite da Costela", + "item.eye_armor_trim_smithing_template.name": "Enfeite dos Olhos", + "item.spire_armor_trim_smithing_template.name": "Enfeite de Pináculo", + "item.flow_armor_trim_smithing_template.name": "Enfeite do Fluxo", + "item.bolt_armor_trim_smithing_template.name": "Enfeite do Parafuso", "item.snort_pottery_sherd.name": "Fragmento de Cerâmica do Ronco", - "item.spawn_egg.entity.camel.name": "Ovo de Invocação de Camelo", + "item.spawn_egg.entity.camel.name": "Ovo Gerador de Camelo", "item.spruce_hanging_sign.name": "Placa suspensa de pinheiro", "item.warped_hanging_sign.name": "Placa suspensa distorcida", "tile.bamboo_block.name": "Bloco de Bambu", @@ -33625,30 +33236,30 @@ export const langs: Langs = { "tile.chiseled_tuff.name": "Tufo Cinzelado", "tile.chiseled_tuff_bricks.name": "Tijolos de Tufo Cinzelados", "tile.decorated_pot.name": "Vaso Decorado", - "tile.pink_petals.name": "Pétalas Cor-de-rosa", - "tile.stripped_bamboo_block.name": "Bloco Despojado de Bambu", + "tile.pink_petals.name": "Pétalas Rosas", + "tile.stripped_bamboo_block.name": "Bloco de Bambu Descascado", "tile.stripped_cherry_log.name": "Tora de Cerejeira Descascada", "tile.stripped_cherry_wood.name": "Madeira de Cerejeira Descascada", "tile.suspicious_gravel.name": "Cascalho Suspeito", "tile.suspicious_sand.name": "Areia Suspeita", - "trim_pattern.coast.name": "Acabamento da Armadura da Costa", - "trim_pattern.dune.name": "Acabamento da Armadura Duna", - "trim_pattern.eye.name": "Acabamento da Armadura dos Olhos", - "trim_pattern.host.name": "Acabamento da Armadura do Anfitrião", - "trim_pattern.raiser.name": "Acabamento da Armadura do Elevado", - "trim_pattern.rib.name": "Acabamento da Armadura da Costela", - "trim_pattern.sentry.name": "Acabamento da Armadura Sentinela", - "trim_pattern.shaper.name": "Modelador do Acabamento da Armadura", - "trim_pattern.silence.name": "Acabamento da Armadura do Silêncio", - "trim_pattern.snout.name": "Acabamento da Armadura do Focinho", - "trim_pattern.spire.name": "Acabamento da Armadura de Pináculo", - "trim_pattern.tide.name": "Acabamento da Armadura da Maré", - "trim_pattern.vex.name": "Acabamento de Armadura Vex", - "trim_pattern.ward.name": "Acabamento da Armadura do Guardião", - "trim_pattern.wayfinder.name": "Acabamento da Armadura do Compasso", - "trim_pattern.wild.name": "Acabamento da Armadura Selvagem", - "trim_pattern.bolt.name": "Acabamento da Armadura do Parafuso", - "trim_pattern.flow.name": "Acabamento da Armadura do Fluxo", + "trim_pattern.coast.name": "Enfeite da Costa", + "trim_pattern.dune.name": "Enfeite Duna", + "trim_pattern.eye.name": "Enfeite dos Olhos", + "trim_pattern.host.name": "Enfeite do Anfitrião", + "trim_pattern.raiser.name": "Enfeite do Elevado", + "trim_pattern.rib.name": "Enfeite da Costela", + "trim_pattern.sentry.name": "Enfeite Sentinela", + "trim_pattern.shaper.name": "Modelador do Enfeite", + "trim_pattern.silence.name": "Enfeite do Silêncio", + "trim_pattern.snout.name": "Enfeite do Focinho", + "trim_pattern.spire.name": "Enfeite de Pináculo", + "trim_pattern.tide.name": "Enfeite da Maré", + "trim_pattern.vex.name": "Enfeites Vex", + "trim_pattern.ward.name": "Enfeite do Guardião", + "trim_pattern.wayfinder.name": "Enfeite do Compasso", + "trim_pattern.wild.name": "Enfeite Selvagem", + "trim_pattern.bolt.name": "Enfeite do Parafuso", + "trim_pattern.flow.name": "Enfeite do Fluxo", "tile.acaciaFence.name": "Cerca de Acácia", "tile.acacia_fence_gate.name": "Portão de Acácia", "tile.activator_rail.name": "Trilho Ativador", @@ -33659,7 +33270,7 @@ export const langs: Langs = { "tile.border_block.name": "Fronteira", "tile.anvil.intact.name": "Bigorna", "tile.anvil.name": "Bigorna", - "tile.anvil.slightlyDamaged.name": "Bigorna Lascada", + "tile.anvil.slightlyDamaged.name": "Bigorna Rachada", "tile.anvil.veryDamaged.name": "Bigorna Danificada", "tile.barrier.name": "Barreira", "tile.beacon.name": "Sinalizador", @@ -33667,15 +33278,15 @@ export const langs: Langs = { "tile.beacon.secondary": "Poder Secundário", "tile.beacon.primary.pocket": "Primário", "tile.beacon.secondary.pocket": "Secundário", - "tile.beehive.name": "Colmeia", - "tile.bee_nest.name": "Ninho de Abelhas", + "tile.beehive.name": "Colmeia Artificial", + "tile.bee_nest.name": "Colmeia", "tile.target.name": "Alvo", "tile.bed.name": "Cama", "tile.bed.noSleep": "Você só pode dormir à noite e durante tempestades", - "tile.bed.notSafe": "Você não pode dormir agora, há monstros por perto", + "tile.bed.notSafe": "Você não pode dormir agora, há criaturas por perto", "tile.bed.notValid": "Sua cama não foi encontrada ou está obstruída", "tile.bed.occupied": "Esta cama está ocupada", - "tile.bed.respawnSet": "Ponto de invocação definido", + "tile.bed.respawnSet": "Ponto de renascimento definido", "tile.bed.tooFar": "A cama está muito distante", "tile.bed.obstructed": "A cama está obstruída", "tile.bedrock.name": "Rocha Matriz", @@ -33686,9 +33297,9 @@ export const langs: Langs = { "tile.beetroot.name": "Beterraba", "tile.big_dripleaf.name": "Plantaforma Grande", "tile.small_dripleaf_block.name": "Plantaforma Pequena", - "tile.hanging_roots.name": "Raízes Penduradas", + "tile.hanging_roots.name": "Raízes Suspensas", "tile.dirt_with_roots.name": "Terra com Raiz", - "tile.spore_blossom.name": "Flor de Esporo", + "tile.spore_blossom.name": "Flor de Esporos", "tile.azalea_leaves.name": "Folhas de Azaleia", "tile.azalea_leaves_flowered.name": "Folhas de Azaleia Florida", "tile.azalea.name": "Azaleia", @@ -33720,14 +33331,14 @@ export const langs: Langs = { "tile.acacia_button.name": "Botão de acácia", "tile.birch_button.name": "Botão de bétula", "tile.dark_oak_button.name": "Botão de carvalho escuro", - "tile.jungle_button.name": "Botão de selva", + "tile.jungle_button.name": "Botão da selva", "tile.respawn_anchor.respawnSet": "Ponto de renascimento definido", "tile.respawn_anchor.notValid": "Sua âncora de renascimento não tinha acusações, estava faltando ou foi obstruída", "tile.spruce_button.name": "Botão de Pinheiro", "tile.stone_button.name": "Botão de Pedra", "tile.cactus.name": "Cacto", "tile.cake.name": "Bolo", - "tile.dried_kelp_block.name": "Bloco de Alga Desidratada", + "tile.dried_kelp_block.name": "Bloco de Algas Secas", "tile.carrots.name": "Cenouras", "tile.carved_pumpkin.name": "Abóbora entalhada", "tile.cauldron.name": "Caldeirão", @@ -33735,13 +33346,13 @@ export const langs: Langs = { "tile.chalkboard.twoByOne.name": "Pôster", "tile.chalkboard.threeByTwo.name": "Quadro", "tile.chest.name": "Baú", - "tile.ender_chest.name": "Baú do Ender", + "tile.ender_chest.name": "Baú de Ender", "tile.jigsaw.name": "Bloco de Quebra-Cabeça", "tile.heavy_core.name": "Núcleo Pesado", "tile.honey_block.name": "Bloco de Mel", "tile.honeycomb_block.name": "Bloco de Favo de Mel", "tile.lodestone.name": "Magnetita", - "tile.nether_sprouts.name": "Brotos de Nether", + "tile.nether_sprouts.name": "Brotos do Nether", "tile.crimson_stem.name": "Caule Carmesim", "tile.warped_stem.name": "Caule Distorcido", "tile.stripped_crimson_stem.name": "Caule Carmesim Descascado", @@ -33791,8 +33402,8 @@ export const langs: Langs = { "tile.blackstone_slab.name": "Laje de Pedra-Negra", "tile.polished_blackstone_brick_slab.name": "Laje de Tijolos de Pedra-Negra Polida", "tile.chain.name": "Corrente", - "tile.soul_soil.name": "Terra da Alma", - "tile.soul_fire.name": "Fogo da Alma", + "tile.soul_soil.name": "Terra das Almas", + "tile.soul_fire.name": "Fogo das Almas", "tile.polished_blackstone.name": "Pedra-Negra Polida", "tile.polished_blackstone_stairs.name": "Escadas de Pedra-Negra Polida", "tile.polished_blackstone_slab.name": "Laje de Pedra-Negra Polida", @@ -33800,10 +33411,10 @@ export const langs: Langs = { "tile.polished_blackstone_button.name": "Botão de Pedra-Negra Polida", "tile.polished_blackstone_wall.name": "Parede de Pedra-Negra Polida", "tile.polished_tuff.name": "Tufo Polido", - "tile.polished_tuff_slab.name": "Laje de Tufo Polida", + "tile.polished_tuff_slab.name": "Laje de Tufo Polido", "tile.polished_tuff_stairs.name": "Escada de Tufo Polida", "tile.polished_tuff_wall.name": "Parede de Tufo Polida", - "tile.soul_campfire.name": "Fogueira da Alma", + "tile.soul_campfire.name": "Fogueira das Almas", "tile.chiseled_nether_bricks.name": "Tijolos do Nether Cinzelados", "tile.cracked_nether_bricks.name": "Tijolos do Nether Rachados", "tile.quartz_bricks.name": "Tijolos de Quartzo", @@ -33811,14 +33422,14 @@ export const langs: Langs = { "tile.shulkerBoxWhite.name": "Caixa de Shulker Branca", "tile.shulkerBoxOrange.name": "Caixa de Shulker Laranja", "tile.shulkerBoxMagenta.name": "Caixa de Shulker Magenta", - "tile.shulkerBoxLightBlue.name": "Caixa de Shulker Azul-claro", + "tile.shulkerBoxLightBlue.name": "Caixa de Shulker Azul-clara", "tile.shulkerBoxYellow.name": "Caixa de Shulker Amarela", "tile.shulkerBoxLime.name": "Caixa de Shulker Verde-limão", "tile.shulkerBoxPink.name": "Caixa de Shulker Rosa", "tile.shulkerBoxGray.name": "Caixa de Shulker Cinza", - "tile.shulkerBoxSilver.name": "Caixa de Shulker Cinza Claro", + "tile.shulkerBoxSilver.name": "Caixa de Shulker Cinza-clara", "tile.shulkerBoxCyan.name": "Caixa de Shulker Ciano", - "tile.shulkerBoxPurple.name": "Caixa de Shulker Lilás", + "tile.shulkerBoxPurple.name": "Caixa de Shulker Roxa", "tile.shulkerBoxBlue.name": "Caixa de Shulker Azul", "tile.shulkerBoxBrown.name": "Caixa de Shulker Marrom", "tile.shulkerBoxGreen.name": "Caixa de Shulker Verde", @@ -33828,35 +33439,35 @@ export const langs: Langs = { "tile.chorus_flower.name": "Flor de Coro", "tile.chorus_plant.name": "Planta de Coro", "tile.stained_glass.white.name": "Vidro Tingido de Branco", - "tile.stained_glass.silver.name": "Vidro Tingido de Cinza Claro", + "tile.stained_glass.silver.name": "Vidro Tingido de Cinza-claro", "tile.stained_glass.gray.name": "Vidro Tingido de Cinza", "tile.stained_glass.black.name": "Vidro Tingido de Preto", "tile.stained_glass.brown.name": "Vidro Tingido de Marrom", "tile.stained_glass.red.name": "Vidro Tingido de Vermelho", "tile.stained_glass.orange.name": "Vidro Tingido de Laranja", "tile.stained_glass.yellow.name": "Vidro Tingido de Amarelo", - "tile.stained_glass.lime.name": "Vidro Tingido de Verde Limão", + "tile.stained_glass.lime.name": "Vidro Tingido de Verde-limão", "tile.stained_glass.green.name": "Vidro Tingido de Verde", "tile.stained_glass.cyan.name": "Vidro Tingido de Ciano", - "tile.stained_glass.light_blue.name": "Vidro Tingido de Azul Claro", + "tile.stained_glass.light_blue.name": "Vidro Tingido de Azul-claro", "tile.stained_glass.blue.name": "Vidro Tingido de Azul", - "tile.stained_glass.purple.name": "Vidro Tingido de Lilás", + "tile.stained_glass.purple.name": "Vidro Tingido de Roxo", "tile.stained_glass.magenta.name": "Vidro Tingido de Magenta", "tile.stained_glass.pink.name": "Vidro Tingido de Rosa", "tile.stained_glass_pane.white.name": "Painel de Vidro Tingido de Branco", - "tile.stained_glass_pane.silver.name": "Painel de Vidro Tingido de Cinza Claro", + "tile.stained_glass_pane.silver.name": "Painel de Vidro Tingido de Cinza-claro", "tile.stained_glass_pane.gray.name": "Painel de Vidro Tingido de Cinza", "tile.stained_glass_pane.black.name": "Painel de Vidro Tingido de Preto", "tile.stained_glass_pane.brown.name": "Painel de Vidro Tingido de Marrom", "tile.stained_glass_pane.red.name": "Painel de Vidro Tingido de Vermelho", "tile.stained_glass_pane.orange.name": "Painel de Vidro Tingido de Laranja", "tile.stained_glass_pane.yellow.name": "Painel de Vidro Tingido de Amarelo", - "tile.stained_glass_pane.lime.name": "Painel de Vidro Tingido de Verde Limão", + "tile.stained_glass_pane.lime.name": "Painel de Vidro Tingido de Verde-limão", "tile.stained_glass_pane.green.name": "Painel de Vidro Tingido de Verde", "tile.stained_glass_pane.cyan.name": "Painel de Vidro Tingido de Ciano", - "tile.stained_glass_pane.light_blue.name": "Painel de Vidro Tingido de Azul Claro", + "tile.stained_glass_pane.light_blue.name": "Painel de Vidro Tingido de Azul-claro", "tile.stained_glass_pane.blue.name": "Painel de Vidro Tingido de Azul", - "tile.stained_glass_pane.purple.name": "Painel de Vidro Tingido de Lilás", + "tile.stained_glass_pane.purple.name": "Painel de Vidro Tingido de Roxo", "tile.stained_glass_pane.magenta.name": "Painel de Vidro Tingido de Magenta", "tile.stained_glass_pane.pink.name": "Painel de Vidro Tingido de Rosa", "tile.clay.name": "Argila", @@ -33873,30 +33484,30 @@ export const langs: Langs = { "tile.stained_hardened_clay.name": "Terracota", "tile.stained_hardened_clay.orange.name": "Terracota Laranja", "tile.stained_hardened_clay.pink.name": "Terracota Rosa", - "tile.stained_hardened_clay.purple.name": "Terracota Lilás", + "tile.stained_hardened_clay.purple.name": "Terracota Roxa", "tile.stained_hardened_clay.red.name": "Terracota Vermelha", "tile.stained_hardened_clay.silver.name": "Terracota Cinza-clara", "tile.stained_hardened_clay.white.name": "Terracota Branca", "tile.stained_hardened_clay.yellow.name": "Terracota Amarela", - "tile.structure_block.name": "Bloco de Estrutura", + "tile.structure_block.name": "Gerador de Estruturas", "tile.structure_void.name": "Estrutura Vazia", - "tile.trial_spawner.name": "Invocador da Provação", - "tile.vault.name": "Cofre", + "tile.trial_spawner.name": "Invocador do Desafio", + "tile.vault.name": "Assalto ao Cofre", "tile.wool.black.name": "Lã Preta", "tile.wool.blue.name": "Lã Azul", "tile.wool.brown.name": "Lã Marrom", "tile.wool.cyan.name": "Lã Ciano", "tile.wool.gray.name": "Lã Cinza", "tile.wool.green.name": "Lã Verde", - "tile.wool.lightBlue.name": "Lã Azul Clara", - "tile.wool.lime.name": "Lã Verde Limão", + "tile.wool.lightBlue.name": "Lã Azul-clara", + "tile.wool.lime.name": "Lã Verde-limão", "tile.wool.magenta.name": "Lã Magenta", "tile.wool.name": "Lã", "tile.wool.orange.name": "Lã Laranja", "tile.wool.pink.name": "Lã Rosa", - "tile.wool.purple.name": "Lã Lilás", + "tile.wool.purple.name": "Lã Roxa", "tile.wool.red.name": "Lã Vermelha", - "tile.wool.silver.name": "Lã Cinza Clara", + "tile.wool.silver.name": "Lã Cinza-clara", "tile.wool.white.name": "Lã Branca", "tile.wool.yellow.name": "Lã Amarela", "tile.cobblestone_wall.mossy.name": "Parede de Pedregulho com Musgo", @@ -33915,15 +33526,15 @@ export const langs: Langs = { "tile.cobblestone_wall.red_nether_brick.name": "Parede de Tijolos Vermelhos do Nether", "tile.cocoa.name": "Cacau", "tile.command_block.name": "Bloco de Comando", - "tile.composter.name": "Compostador", + "tile.composter.name": "Composteira", "tile.light_block.name": "Luz", "tile.repeating_command_block.name": "Bloco de Comando de Repetição", - "tile.chain_command_block.name": "Bloco de Comando da Cadeia", + "tile.chain_command_block.name": "Bloco de Comando em Cadeia", "tile.wheat.name": "Plantação", "tile.darkOakFence.name": "Cerca de Carvalho Escuro", "tile.dark_oak_fence_gate.name": "Portão de Carvalho Escuro", "tile.daylight_detector.name": "Detector de Luz Solar", - "tile.deadbush.name": "Arbusto Seco", + "tile.deadbush.name": "Arbusto Morto", "tile.detector_rail.name": "Trilho Detector", "tile.dirt.coarse.name": "Terra Infértil", "tile.dirt.default.name": "Terra", @@ -33942,16 +33553,16 @@ export const langs: Langs = { "tile.double_plant.rose.name": "Roseira", "tile.double_plant.sunflower.name": "Girassol", "tile.double_plant.syringa.name": "Lilás", - "tile.dragon_egg.name": "Ovo de Dragão", + "tile.dragon_egg.name": "Ovo do Dragão", "tile.dropper.name": "Liberador", "tile.enchanting_table.name": "Mesa de Encantamentos", - "tile.enderChest.name": "Baú do Ender", - "tile.end_portal_frame.name": "Estrutura do Portal do End", + "tile.enderChest.name": "Baú de Ender", + "tile.end_portal_frame.name": "Moldura do Portal do End", "tile.farmland.name": "Terra Arada", - "tile.fletching_table.name": "Mesa de Arquearia", + "tile.fletching_table.name": "Bancada de Arco e Flecha", "tile.fence.name": "Cerca de Carvalho", "tile.fence_gate.name": "Portão de Carvalho", - "tile.iron_bars.name": "Barras de Ferro", + "tile.iron_bars.name": "Grade de Ferro", "tile.fire.name": "Fogo", "tile.yellow_flower.dandelion.name": "Dente-de-Leão", "tile.yellow_flower.name": "Flor", @@ -33960,7 +33571,7 @@ export const langs: Langs = { "tile.red_flower.allium.name": "Allium", "tile.red_flower.blueOrchid.name": "Orquídea Azul", "tile.red_flower.cornflower.name": "Centáurea", - "tile.red_flower.houstonia.name": "Azure Bluet", + "tile.red_flower.houstonia.name": "Flor-silvestre-azul", "tile.red_flower.name": "Flor", "tile.red_flower.lilyOfTheValley.name": "Lírio-do-vale", "tile.red_flower.oxeyeDaisy.name": "Margarida", @@ -33978,16 +33589,16 @@ export const langs: Langs = { "tile.gravel.name": "Cascalho", "tile.hay_block.name": "Fardo de Feno", "tile.netherrack.name": "Netherrack", - "tile.soul_sand.name": "Areia de Almas", + "tile.soul_sand.name": "Areia das Almas", "tile.hopper.name": "Funil", "tile.ice.name": "Gelo", "tile.packed_ice.name": "Gelo Compactado", "tile.blue_ice.name": "Gelo Azul", - "tile.frosted_ice.name": "Gelo gelado", + "tile.frosted_ice.name": "Gelo Fosco", "tile.iron_trapdoor.name": "Alçapão de Ferro", "tile.jukebox.name": "Jukebox", - "tile.jungleFence.name": "Cerca de Selva", - "tile.jungle_fence_gate.name": "Portão de Selva", + "tile.jungleFence.name": "Cerca da Selva", + "tile.jungle_fence_gate.name": "Portão da Selva", "tile.ladder.name": "Escada de mão", "tile.flowing_lava.name": "Lava", "tile.lava.name": "Lava", @@ -34004,30 +33615,37 @@ export const langs: Langs = { "tile.glowstone.name": "Pedra Luminosa", "tile.glow_lichen.name": "Líquen Brilhante", "tile.lightning_rod.name": "Para-raios", + "tile.exposed_lightning_rod.name": "Pára-raios Exposto", + "tile.weathered_lightning_rod.name": "Para-raios Desgastado", + "tile.oxidized_lightning_rod.name": "Para-raios Oxidado", + "tile.waxed_lightning_rod.name": "Para-raios Encerado", + "tile.waxed_exposed_lightning_rod.name": "Para-raios Exposto Encerado", + "tile.waxed_weathered_lightning_rod.name": "Para-raios Desgastado Encerado", + "tile.waxed_oxidized_lightning_rod.name": "Para-raios Oxidado Encerado", "tile.lit_pumpkin.name": "Abóbora de Halloween", "tile.lockedchest.name": "Baú Trancado", - "tile.log.acacia.name": "Tora de Acácia", + "tile.log.acacia.name": "Tronco de Acácia", "tile.log.big_oak.name": "Tora de Carvalho Escuro", - "tile.log.birch.name": "Tora de Bétula", + "tile.log.birch.name": "Tronco de Bétula", "tile.log.jungle.name": "Tora da Selva", "tile.log.name": "Tora", "tile.log.oak.name": "Tora de Carvalho", "tile.log.spruce.name": "Tora de Pinheiro", "tile.magma.name": "Bloco de Magma", "tile.melon_block.name": "Melancia", - "tile.mob_spawner.name": "Criador de Monstros", - "tile.monster_egg.brick.name": "Tijolos de Pedra Infestados", - "tile.monster_egg.chiseledbrick.name": "Tijolo de Pedra Cinzelado Infestado", - "tile.monster_egg.cobble.name": "Pedregulho Infestado", - "tile.monster_egg.crackedbrick.name": "Tijolo de Pedra Rachado Infestado", - "tile.monster_egg.mossybrick.name": "Tijolo de Pedra com Musgo Infestado", - "tile.monster_egg.name": "Pedra Infestada", - "tile.monster_egg.stone.name": "Pedra Infestada", + "tile.mob_spawner.name": "Gerador de Criaturas", + "tile.monster_egg.brick.name": "Tijolos de Pedra Infestação", + "tile.monster_egg.chiseledbrick.name": "Tijolo de Pedra Cinzelado Infestação", + "tile.monster_egg.cobble.name": "Pedregulho Infestação", + "tile.monster_egg.crackedbrick.name": "Tijolo de Pedra Rachado Infestação", + "tile.monster_egg.mossybrick.name": "Tijolo de Pedra com Musgo Infestação", + "tile.monster_egg.name": "Pedra Infestação", + "tile.monster_egg.stone.name": "Pedra Infestação", "tile.mushroom.name": "Cogumelo", "tile.noteblock.name": "Bloco Musical", "tile.mycelium.name": "Micélio", "tile.nether_brick.name": "Tijolos do Nether", - "tile.red_nether_brick.name": "Blocos de Tijolos Vermelhos do Nether", + "tile.red_nether_brick.name": "Tijolos Vermelhos do Nether", "tile.nether_brick_fence.name": "Cerca de Tijolos do Nether", "tile.quartz_ore.name": "Minério de Quartzo do Nether", "tile.netherreactor.active": "Ativo!", @@ -34037,11 +33655,11 @@ export const langs: Langs = { "tile.netherreactor.playersTooFar": "Todos os(as) jogadores(as) precisam estar perto do reator.", "tile.netherreactor.wrongPattern": "Padrão incorreto!", "tile.nether_wart.name": "Fungo do Nether", - "tile.nether_wart_block.name": "Bloco de Fungo do Nether", - "tile.warped_wart_block.name": "Bloco de Fungo Distorcido", + "tile.nether_wart_block.name": "Bloco de Fungos do Nether", + "tile.warped_wart_block.name": "Bloco de Fungos Distorcidos", "tile.unlit_redstone_torch.name": "Tocha de Redstone", "tile.redstone_torch.name": "Tocha de Redstone", - "tile.soul_torch.name": "Tocha da Alma", + "tile.soul_torch.name": "Tocha das Almas", "tile.obsidian.name": "Obsidiana", "tile.coal_ore.name": "Minério de Carvão", "tile.diamond_ore.name": "Minério de Diamante", @@ -34054,7 +33672,7 @@ export const langs: Langs = { "tile.oreRuby.name": "Minério de Rubi", "tile.observer.name": "Observador", "tile.piston.name": "Pistão", - "tile.sticky_piston.name": "Pistão Aderente", + "tile.sticky_piston.name": "Pistão Grudento", "tile.portal.name": "Portal", "tile.potatoes.name": "Batatas", "tile.stone_pressure_plate.name": "Placa de Pressão de Pedra", @@ -34062,7 +33680,7 @@ export const langs: Langs = { "tile.acacia_pressure_plate.name": "Placa de Pressão de Acácia", "tile.birch_pressure_plate.name": "Placa de Pressão de Bétula", "tile.dark_oak_pressure_plate.name": "Placa de Pressão de Carvalho Escuro", - "tile.jungle_pressure_plate.name": "Placa de Pressão de Selva", + "tile.jungle_pressure_plate.name": "Placa de Pressão da Selva", "tile.spruce_pressure_plate.name": "Placa de Pressão de Pinheiro", "tile.prismarine.bricks.name": "Tijolos de Prismarinho", "tile.prismarine.dark.name": "Prismarinho Escuro", @@ -34083,7 +33701,7 @@ export const langs: Langs = { "tile.red_sandstone.default.name": "Arenito Vermelho", "tile.red_sandstone.name": "Arenito Vermelho", "tile.red_sandstone.smooth.name": "Arenito Vermelho Liso", - "tile.red_sandstone.cut.name": "Arenito Vermelho Cortado", + "tile.red_sandstone.cut.name": "Arenito Vermelho Lapidado", "tile.redstone_wire.name": "Pó de Redstone", "tile.redstone_lamp.name": "Lâmpada de Redstone", "tile.reeds.name": "Cana-de-açúcar", @@ -34094,14 +33712,14 @@ export const langs: Langs = { "tile.sandstone.default.name": "Arenito", "tile.sandstone.name": "Arenito", "tile.sandstone.smooth.name": "Arenito Liso", - "tile.sandstone.cut.name": "Arenito Cortado", + "tile.sandstone.cut.name": "Arenito Lapidado", "tile.sapling.acacia.name": "Muda de Acácia", "tile.sapling.big_oak.name": "Muda de Carvalho Escuro", "tile.sapling.birch.name": "Muda de Bétula", "tile.sapling.jungle.name": "Muda de Árvore da Selva", "tile.sapling.oak.name": "Muda de Carvalho", "tile.sapling.spruce.name": "Muda de Pinheiro", - "tile.seaLantern.name": "Lanterna do Mar", + "tile.seaLantern.name": "Lampião do Mar", "tile.standing_sign.name": "Placa", "tile.spruce_standing_sign.name": "Placa de Pinheiro", "tile.birch_standing_sign.name": "Placa de Bétula", @@ -34111,7 +33729,7 @@ export const langs: Langs = { "tile.slime.name": "Bloco de Slime", "tile.snow.name": "Bloco de Neve", "tile.sponge.dry.name": "Esponja", - "tile.sponge.wet.name": "Esponja Molhada", + "tile.sponge.wet.name": "Esponja Úmida", "tile.spruceFence.name": "Cerca de Pinheiro", "tile.spruce_fence_gate.name": "Portão de Pinheiro", "tile.brick_stairs.name": "Escada de Tijolos", @@ -34152,15 +33770,15 @@ export const langs: Langs = { "tile.standing_banner.cyan.name": "Estandarte Ciano", "tile.standing_banner.gray.name": "Estandarte Cinza", "tile.standing_banner.green.name": "Estandarte Verde", - "tile.standing_banner.lightBlue.name": "Estandarte Azul Claro", - "tile.standing_banner.lime.name": "Estandarte Verde Limão", + "tile.standing_banner.lightBlue.name": "Estandarte Azul-claro", + "tile.standing_banner.lime.name": "Estandarte Verde-limão", "tile.standing_banner.magenta.name": "Estandarte Magenta", "tile.standing_banner.name": "Banner", "tile.standing_banner.orange.name": "Estandarte Laranja", "tile.standing_banner.pink.name": "Estandarte Rosa", - "tile.standing_banner.purple.name": "Estandarte Lilás", + "tile.standing_banner.purple.name": "Estandarte Roxo", "tile.standing_banner.red.name": "Estandarte Vermelho", - "tile.standing_banner.silver.name": "Estandarte Cinza Claro", + "tile.standing_banner.silver.name": "Estandarte Cinza-claro", "tile.standing_banner.white.name": "Banner", "tile.standing_banner.yellow.name": "Estandarte Amarelo", "tile.stone.andesite.name": "Andesito", @@ -34177,8 +33795,8 @@ export const langs: Langs = { "tile.stonebrick.mossy.name": "Tijolos de Pedra com Musgo", "tile.stonebrick.name": "Tijolos de pedra", "tile.stonebrick.smooth.name": "Tijolos de Pedra Suave", - "tile.stonecutter.name": "Cortador de Pedra", - "tile.stonecutter_block.name": "Cortador de Pedra", + "tile.stonecutter.name": "Cortador de Pedras", + "tile.stonecutter_block.name": "Cortador de Pedras", "tile.mossy_cobblestone.name": "Pedregulho com Musgo", "tile.double_stone_slab.brick.name": "Laje de Tijolos", "tile.double_stone_slab.cobble.name": "Laje de Pedregulho", @@ -34218,21 +33836,21 @@ export const langs: Langs = { "tile.stone_slab4.mossy_stone_brick.name": "Laje de Tijolos de Pedra com Musgo", "tile.stone_slab4.smooth_quartz.name": "Laje de Quartzo Liso", "tile.stone_slab4.stone.name": "Laje de Pedra", - "tile.stone_slab4.cut_sandstone.name": "Laje de Arenito Cortado", - "tile.stone_slab4.cut_red_sandstone.name": "Laje de Arenito Vermelho Cortado", - "tile.coral_block.blue.name": "Bloco de Coral de Tubo", - "tile.coral_block.pink.name": "Bloco de Coral-Cérebro", - "tile.coral_block.purple.name": "Bloco de Coral-Bolha", - "tile.coral_block.red.name": "Bloco de Coral de Fogo", - "tile.coral_block.yellow.name": "Bloco de Coral de Chifre", - "tile.coral_block.blue_dead.name": "Bloco de Coral de Tubo Morto", - "tile.coral_block.pink_dead.name": "Bloco de Coral-Cérebro Morto", - "tile.coral_block.purple_dead.name": "Bloco de Coral-Bolha Morto", - "tile.coral_block.red_dead.name": "Bloco de Coral de Fogo Morto", - "tile.coral_block.yellow_dead.name": "Bloco de Coral de Chifre Morto", + "tile.stone_slab4.cut_sandstone.name": "Laje de Arenito Lapidado", + "tile.stone_slab4.cut_red_sandstone.name": "Laje de Arenito Vermelho Lapidado", + "tile.coral_block.blue.name": "Bloco de Coral-de-tubo", + "tile.coral_block.pink.name": "Bloco de Coral-de-cérebro", + "tile.coral_block.purple.name": "Bloco de Coral-de-bolha", + "tile.coral_block.red.name": "Bloco de Coral-de-fogo", + "tile.coral_block.yellow.name": "Bloco de Coral-de-chifre", + "tile.coral_block.blue_dead.name": "Bloco de Coral-de-tubo Morto", + "tile.coral_block.pink_dead.name": "Bloco de Coral-de-cérebro Morto", + "tile.coral_block.purple_dead.name": "Bloco de coral-de-bolha Morto", + "tile.coral_block.red_dead.name": "Bloco de Coral-de-fogo Morto", + "tile.coral_block.yellow_dead.name": "Bloco de Coral-de-chifre Morto", "tile.tallgrass.fern.name": "Samambaia", - "tile.tallgrass.grass.name": "Grama Curta", - "tile.tallgrass.name": "Grama Curta", + "tile.tallgrass.grass.name": "Grama Baixa", + "tile.tallgrass.name": "Grama Baixa", "tile.tallgrass.shrub.name": "Arbusto", "tile.tuff_brick_slab.name": "Laje de Tijolos de Tufo", "tile.tuff_brick_stairs.name": "Escada de Tijolos de Tufo", @@ -34241,29 +33859,29 @@ export const langs: Langs = { "tile.tuff_slab.name": "Laje de Tufo", "tile.tuff_stairs.name": "Escada de Tufo", "tile.tuff_wall.name": "Parede de Tufo", - "tile.seagrass.seagrass.name": "Ervas marinhas", + "tile.seagrass.seagrass.name": "Erva Marinha", "tile.sea_pickle.name": "Pepino-do-mar", "tile.turtle_egg.name": "Ovo de Tartaruga", - "tile.coral.blue.name": "Coral de Tubo", - "tile.coral.pink.name": "Coral-Cérebro", - "tile.coral.purple.name": "Coral-Bolha", - "tile.coral.red.name": "Coral de Fogo", - "tile.coral.yellow.name": "Coral de Chifre", - "tile.coral.blue_dead.name": "Coral de Tubo Morto", - "tile.coral.pink_dead.name": "Coral-Cérebro Morto", - "tile.coral.purple_dead.name": "Coral-Bolha Morto", - "tile.coral.red_dead.name": "Coral de Fogo Morto", - "tile.coral.yellow_dead.name": "Coral de Chifre Morto", - "tile.coral_fan.blue_fan.name": "Decoração de Coral de Tubo", - "tile.coral_fan.pink_fan.name": "Decoração de Coral-Cérebro", - "tile.coral_fan.purple_fan.name": "Decoração de Coral-Bolha", - "tile.coral_fan.red_fan.name": "Decoração de Coral de Fogo", - "tile.coral_fan.yellow_fan.name": "Decoração de Coral de Chifre", - "tile.coral_fan_dead.blue_fan.name": "Decoração de Coral de Tubo Morto", - "tile.coral_fan_dead.pink_fan.name": "Decoração de Coral-Cérebro Morto", - "tile.coral_fan_dead.purple_fan.name": "Decoração de Coral-Bolha Morto", - "tile.coral_fan_dead.red_fan.name": "Decoração de Coral de Fogo Morto", - "tile.coral_fan_dead.yellow_fan.name": "Decoração de Coral de Chifre Morto", + "tile.coral.blue.name": "Coral-de-tubo", + "tile.coral.pink.name": "Coral-de-cérebro", + "tile.coral.purple.name": "Coral-de-bolha", + "tile.coral.red.name": "Coral-de-fogo", + "tile.coral.yellow.name": "Coral-de-chifre", + "tile.coral.blue_dead.name": "Coral-de-tubo Morto", + "tile.coral.pink_dead.name": "Coral-de-cérebro Morto", + "tile.coral.purple_dead.name": "Coral-de-bolha Morto", + "tile.coral.red_dead.name": "Coral-de-fogo Morto", + "tile.coral.yellow_dead.name": "Coral-de-chifre Morto", + "tile.coral_fan.blue_fan.name": "Gorgônia-de-tubo", + "tile.coral_fan.pink_fan.name": "Gorgônia-de-cérebro", + "tile.coral_fan.purple_fan.name": "Gorgônia-de-bolha", + "tile.coral_fan.red_fan.name": "Gorgônia-de-fogo", + "tile.coral_fan.yellow_fan.name": "Gorgônia-de-chifre", + "tile.coral_fan_dead.blue_fan.name": "Gorgônia-de-tubo Morta", + "tile.coral_fan_dead.pink_fan.name": "Gorgônia-de-cérebro Morta", + "tile.coral_fan_dead.purple_fan.name": "Gorgônia-de-bolha Morta", + "tile.coral_fan_dead.red_fan.name": "Gorgônia-de-fogo Morta", + "tile.coral_fan_dead.yellow_fan.name": "Gorgônia-de-chifre Morta", "tile.glass_pane.name": "Painel de Vidro", "tile.tnt.name": "Dinamite", "tile.snow_layer.name": "Neve", @@ -34272,32 +33890,32 @@ export const langs: Langs = { "tile.acacia_trapdoor.name": "Alçapão de acácia", "tile.birch_trapdoor.name": "Alçapão de bétula", "tile.dark_oak_trapdoor.name": "Alçapão de carvalho escuro", - "tile.jungle_trapdoor.name": "Alçapão de selva", + "tile.jungle_trapdoor.name": "Alçapão da selva", "tile.spruce_trapdoor.name": "Alçapão de Pinheiro", "tile.tripWire.name": "Disparador", "tile.tripwire_hook.name": "Gancho Disparador", "tile.vine.name": "Trepadeiras", "tile.weeping_vines.name": "Trepadeiras Choronas", - "tile.twisting_vines.name": "Trepadeiras Torcidas", + "tile.twisting_vines.name": "Trepadeiras Retorcidas", "tile.flowing_water.name": "Água", "tile.water.name": "Água", "tile.waterlily.name": "Vitória-Régia", "tile.web.name": "Teia", - "tile.heavy_weighted_pressure_plate.name": "Placa de Pressão de Peso Pesada", - "tile.light_weighted_pressure_plate.name": "Placa de Pressão de Peso Leve", + "tile.heavy_weighted_pressure_plate.name": "Placa de Pressão de Pesagem Pesada", + "tile.light_weighted_pressure_plate.name": "Placa de Pressão de Pesagem Leve", "tile.end_stone.name": "Pedra do End", "tile.end_bricks.name": "Tijolos de pedra do End", "tile.planks.acacia.name": "Tábuas de Acácia", "tile.planks.big_oak.name": "Tábuas de Carvalho Escuro", "tile.planks.birch.name": "Tábuas de Bétula", - "tile.planks.jungle.name": "Tábuas de Selva", + "tile.planks.jungle.name": "Tábuas da Selva", "tile.planks.name": "Tábuas", "tile.planks.oak.name": "Tábuas de Carvalho", "tile.planks.spruce.name": "Tábuas de Pinheiro", "tile.wooden_slab.acacia.name": "Laje de Acácia", "tile.wooden_slab.big_oak.name": "Laje de Carvalho Escuro", "tile.wooden_slab.birch.name": "Laje de Bétula", - "tile.wooden_slab.jungle.name": "Laje de Selva", + "tile.wooden_slab.jungle.name": "Laje da Selva", "tile.wooden_slab.name": "Laje de Madeira", "tile.wooden_slab.oak.name": "Laje de Carvalho", "tile.wooden_slab.spruce.name": "Laje de Pinheiro", @@ -34307,19 +33925,19 @@ export const langs: Langs = { "tile.carpet.cyan.name": "Carpete Ciano", "tile.carpet.gray.name": "Carpete Cinza", "tile.carpet.green.name": "Carpete Verde", - "tile.carpet.lightBlue.name": "Carpete Azul Claro", - "tile.carpet.lime.name": "Carpete Verde Limão", + "tile.carpet.lightBlue.name": "Carpete Azul-claro", + "tile.carpet.lime.name": "Carpete Verde-limão", "tile.carpet.magenta.name": "Carpete Magenta", "tile.carpet.name": "Carpete", "tile.carpet.orange.name": "Carpete Laranja", "tile.carpet.pink.name": "Carpete Rosa", - "tile.carpet.purple.name": "Carpete Lilás", + "tile.carpet.purple.name": "Carpete Roxo", "tile.carpet.red.name": "Carpete Vermelho", - "tile.carpet.silver.name": "Carpete Cinza Claro", + "tile.carpet.silver.name": "Carpete Cinza-claro", "tile.carpet.white.name": "Carpete Branco", "tile.carpet.yellow.name": "Carpete Amarelo", - "tile.crafter.name": "Criador", - "tile.crafting_table.name": "Bancada", + "tile.crafter.name": "Bancada Automática", + "tile.crafting_table.name": "Bancada de Trabalho", "tile.pale_oak_button.name": "Botão de Carvalho Pálido", "tile.pale_oak_double_slab.name": "Laje Dupla de Carvalho Pálido", "tile.pale_oak_fence.name": "Cerca de Carvalho Pálido", @@ -34341,7 +33959,7 @@ export const langs: Langs = { "tile.closed_eyeblossom.name": "Olhoquídea Fechada", "tile.resin_bricks.name": "Tijolos de resina", "tile.resin_brick_double_slab.name": "Laje Dupla de Tijolo de resina", - "tile.resin_brick_slab.name": "Laje de Tijolo de resina", + "tile.resin_brick_slab.name": "Laje de Tijolos de Resina", "tile.resin_brick_stairs.name": "Escada de Tijolo de resina", "tile.resin_brick_wall.name": "Parede de Tijolo de resina", "tile.chiseled_resin_bricks.name": "Tijolos de resina Cinzelados", @@ -34357,7 +33975,7 @@ export const langs: Langs = { "tile.glazedTerracotta.gray.name": "Azulejo Cinza", "tile.glazedTerracotta.silver.name": "Azulejo Cinza-claro", "tile.glazedTerracotta.cyan.name": "Azulejo Ciano", - "tile.glazedTerracotta.purple.name": "Azulejo Lilás", + "tile.glazedTerracotta.purple.name": "Azulejo Roxo", "tile.glazedTerracotta.blue.name": "Azulejo Azul", "tile.glazedTerracotta.brown.name": "Azulejo Marrom", "tile.glazedTerracotta.green.name": "Azulejo Verde", @@ -34368,7 +33986,7 @@ export const langs: Langs = { "tile.concrete.green.name": "Concreto Verde", "tile.concrete.brown.name": "Concreto Marrom", "tile.concrete.blue.name": "Concreto Azul", - "tile.concrete.purple.name": "Concreto Lilás", + "tile.concrete.purple.name": "Concreto Roxo", "tile.concrete.cyan.name": "Concreto Ciano", "tile.concrete.silver.name": "Concreto Cinza-claro", "tile.concrete.gray.name": "Concreto Cinza", @@ -34389,47 +34007,47 @@ export const langs: Langs = { "tile.glazedTerracottaGray.name": "Azulejo Cinza", "tile.glazedTerracottaSilver.name": "Azulejo Cinza-claro", "tile.glazedTerracottaCyan.name": "Azulejo Ciano", - "tile.glazedTerracottaPurple.name": "Azulejo Lilás", + "tile.glazedTerracottaPurple.name": "Azulejo Roxo", "tile.glazedTerracottaBlue.name": "Azulejo Azul", "tile.glazedTerracottaBrown.name": "Azulejo Marrom", "tile.glazedTerracottaGreen.name": "Azulejo Verde", "tile.glazedTerracottaRed.name": "Azulejo Vermelho", "tile.glazedTerracottaBlack.name": "Azulejo Preto", - "tile.concretePowder.black.name": "Pó de Concreto Preto", - "tile.concretePowder.red.name": "Pó de Concreto Vermelho", - "tile.concretePowder.green.name": "Pó de Concreto Verde", - "tile.concretePowder.brown.name": "Pó de Concreto Marrom", - "tile.concretePowder.blue.name": "Pó de Concreto Azul", - "tile.concretePowder.purple.name": "Pó de Concreto Lilás", - "tile.concretePowder.cyan.name": "Pó de Concreto Ciano", - "tile.concretePowder.silver.name": "Pó de Concreto Cinza-claro", - "tile.concretePowder.gray.name": "Pó de Concreto Cinza", - "tile.concretePowder.pink.name": "Pó de Concreto Rosa", - "tile.concretePowder.lime.name": "Pó de Concreto Verde-limão", - "tile.concretePowder.yellow.name": "Pó de Concreto Amarelo", - "tile.concretePowder.lightBlue.name": "Pó de Concreto Azul-claro", - "tile.concretePowder.magenta.name": "Pó de Concreto Magenta", - "tile.concretePowder.orange.name": "Pó de Concreto Laranja", - "tile.concretePowder.white.name": "Pó de Concreto Branco", + "tile.concretePowder.black.name": "Cimento Preto", + "tile.concretePowder.red.name": "Cimento Vermelho", + "tile.concretePowder.green.name": "Cimento Verde", + "tile.concretePowder.brown.name": "Cimento Marrom", + "tile.concretePowder.blue.name": "Cimento Azul", + "tile.concretePowder.purple.name": "Cimento Roxo", + "tile.concretePowder.cyan.name": "Cimento Ciano", + "tile.concretePowder.silver.name": "Cimento Cinza-claro", + "tile.concretePowder.gray.name": "Cimento Cinza", + "tile.concretePowder.pink.name": "Cimento Rosa", + "tile.concretePowder.lime.name": "Cimento Verde-limão", + "tile.concretePowder.yellow.name": "Cimento Amarelo", + "tile.concretePowder.lightBlue.name": "Cimento Azul-claro", + "tile.concretePowder.magenta.name": "Cimento Magenta", + "tile.concretePowder.orange.name": "Cimento Laranja", + "tile.concretePowder.white.name": "Cimento Branco", "tile.stripped_spruce_log.name": "Tora de Pinheiro Descascada", "tile.stripped_dark_oak_log.name": "Tora de Carvalho Escuro Descascada", - "tile.stripped_birch_log.name": "Tora de Bétula Descascada", + "tile.stripped_birch_log.name": "Tronco de Bétula Descascado", "tile.stripped_jungle_log.name": "Tora da Selva Descascada", "tile.stripped_oak_log.name": "Tora de Carvalho Descascada", - "tile.stripped_acacia_log.name": "Tora de Acácia Descascada", + "tile.stripped_acacia_log.name": "Tronco de Acácia Descascado", "tile.bamboo.name": "Bambu", "tile.scaffolding.name": "Andaime", "tile.grindstone.name": "Rebolo", - "tile.cartography_table.name": "Mesa de Cartografia", - "tile.lantern.name": "Lanterna", - "tile.soul_lantern.name": "Lanterna da Alma", + "tile.cartography_table.name": "Bancada de Cartografia", + "tile.lantern.name": "Lampião", + "tile.soul_lantern.name": "Lampião das Almas", "tile.smoker.name": "Defumador", - "tile.smithing_table.name": "Mesa de Ferraria", + "tile.smithing_table.name": "Bancada de Ferraria", "tile.barrel.name": "Barril", "tile.campfire.name": "Fogueira", "tile.loom.name": "Tear", "tile.lectern.name": "Atril", - "tile.sweet_berry_bush.name": "Arbusto de Frutas Vermelhas Doces", + "tile.sweet_berry_bush.name": "Arbusto de Bagas Doces", "tile.wood.oak.name": "Madeira de Carvalho", "tile.wood.spruce.name": "Madeira de Pinheiro", "tile.wood.birch.name": "Madeira de Bétula", @@ -34446,16 +34064,16 @@ export const langs: Langs = { "tile.ancient_debris.name": "Detritos Ancestrais", "tile.nether_gold_ore.name": "Minério de Ouro do Nether", "tile.respawn_anchor.name": "Âncora de Renascimento", - "tile.crying_obsidian.name": "Obsidiana Gritante", + "tile.crying_obsidian.name": "Obsidiana Chorona", "tile.powder_snow.name": "Neve em Pó", "tile.deepslate.name": "Ardosiabissal", - "tile.infested_deepslate.name": "Ardosiabissal Infestada", - "tile.cobbled_deepslate.name": "Bloco de Ardosiabissal", + "tile.infested_deepslate.name": "Ardosiabissal Infestação", + "tile.cobbled_deepslate.name": "Pedregulho de Ardosiabissal", "tile.dripstone_block.name": "Bloco de Espeleotema", "tile.pointed_dripstone.name": "Espeleotema Pontiagudo", - "tile.cobbled_deepslate_slab.name": "Laje de Blocos de Ardosiabissal", - "tile.cobbled_deepslate_stairs.name": "Escadas de Blocos de Ardosiabissal", - "tile.cobbled_deepslate_wall.name": "Parede de Blocos de Ardosiabissal", + "tile.cobbled_deepslate_slab.name": "Laje de Pedregulho de Ardosiabissal", + "tile.cobbled_deepslate_stairs.name": "Escadas de Pedregulho de Ardosiabissal", + "tile.cobbled_deepslate_wall.name": "Parede de Pedregulho de Ardosiabissal", "tile.polished_deepslate.name": "Ardosiabissal Polida", "tile.polished_deepslate_slab.name": "Laje de Ardosiabissal Polida", "tile.polished_deepslate_stairs.name": "Escadas de Ardosiabissal Polida", @@ -34469,7 +34087,7 @@ export const langs: Langs = { "tile.deepslate_brick_stairs.name": "Escadas de Tijolos de Ardosiabissal", "tile.deepslate_brick_wall.name": "Parede de Tijolos de Ardosiabissal", "tile.chiseled_deepslate.name": "Ardosiabissal Cinzelada", - "tile.cobbled_deepslate_double_slab.name": "Laje Dupla de Blocos de Ardosiabissal", + "tile.cobbled_deepslate_double_slab.name": "Laje Dupla de Pedregulho de Ardosiabissal", "tile.polished_deepslate_double_slab.name": "Laje Dupla de Ardosiabissal Polida", "tile.deepslate_tile_double_slab.name": "Laje Dupla de Ladrilhos de Ardosiabissal", "tile.deepslate_brick_double_slab.name": "Laje Dupla de Tijolos de Ardosiabissal", @@ -34483,7 +34101,7 @@ export const langs: Langs = { "tile.deepslate_copper_ore.name": "Minério de Cobre de Ardosiabissal", "tile.cracked_deepslate_tiles.name": "Ladrilhos de Ardosiabissal Rachados", "tile.cracked_deepslate_bricks.name": "Tijolos de Ardosiabissal Rachados", - "tile.pitcher_plant.name": "Planta Cântaro", + "tile.pitcher_plant.name": "Planta Ancestral", "tile.sniffer_egg.name": "Ovo de Farejador", "tile.torchflower.name": "Plantocha", "item.copper_ingot.name": "Barra de Cobre", @@ -34492,36 +34110,36 @@ export const langs: Langs = { "item.raw_gold.name": "Ouro Bruto", "tile.copper_block.name": "Bloco de Cobre", "tile.exposed_copper.name": "Cobre Exposto", - "tile.weathered_copper.name": "Cobre Desgastado", + "tile.weathered_copper.name": "Cobre Desbotado", "tile.oxidized_copper.name": "Cobre Oxidado", "tile.waxed_copper.name": "Bloco de Cobre Encerado", - "tile.waxed_exposed_copper.name": "Cobre Exposto e Encerado", - "tile.waxed_weathered_copper.name": "Cobre Desbotado e Encerado", + "tile.waxed_exposed_copper.name": "Cobre Exposto Encerado", + "tile.waxed_weathered_copper.name": "Cobre Desbotado Encerado", "tile.waxed_oxidized_copper.name": "Cobre Oxidado Encerado", - "tile.cut_copper.name": "Cobre Cortado", - "tile.exposed_cut_copper.name": "Cobre Cortado e Exposto", - "tile.weathered_cut_copper.name": "Cobre Cortado e Desgastado", - "tile.oxidized_cut_copper.name": "Cobre Cortado e Oxidado", - "tile.waxed_cut_copper.name": "Cobre Cortado e Encerado", - "tile.waxed_exposed_cut_copper.name": "Cobre Cortado, Exposto e Encerado", - "tile.waxed_weathered_cut_copper.name": "Cobre Cortado, Desbotado e Encerado", - "tile.waxed_oxidized_cut_copper.name": "Cobre Cortado e Oxidado Encerado", - "tile.cut_copper_stairs.name": "Escadas de Cobre Cortadas", - "tile.exposed_cut_copper_stairs.name": "Escadas de Cobre Cortadas e Expostas", - "tile.weathered_cut_copper_stairs.name": "Escadas de Cobre Cortadas e Desbotadas", - "tile.oxidized_cut_copper_stairs.name": "Escadas de Cobre Cortadas e Oxidadas", - "tile.waxed_cut_copper_stairs.name": "Escadas de Cobre Cortadas e Enceradas", - "tile.waxed_exposed_cut_copper_stairs.name": "Escadas de Cobre Cortadas, Expostas e Enceradas", - "tile.waxed_weathered_cut_copper_stairs.name": "Escadas de Cobre Cortadas, Desbotadas e Enceradas", - "tile.waxed_oxidized_cut_copper_stairs.name": "Escadas de Cobre Cortadas, Oxidadas e Enceradas", - "tile.cut_copper_slab.name": "Laje de Cobre Cortada", - "tile.exposed_cut_copper_slab.name": "Laje de Cobre Cortada e Exposta", - "tile.weathered_cut_copper_slab.name": "Laje de Cobre Cortada e Desbotada", - "tile.oxidized_cut_copper_slab.name": "Laje de Cobre Cortada e Oxidada", - "tile.waxed_cut_copper_slab.name": "Laje de Cobre Cortada e Encerada", - "tile.waxed_exposed_cut_copper_slab.name": "Laje de Cobre Cortada, Exposta e Encerada", - "tile.waxed_weathered_cut_copper_slab.name": "Laje de Cobre Cortada, Desbotada e Encerada", - "tile.waxed_oxidized_cut_copper_slab.name": "Laje de Cobre Cortada, Oxidada e Encerada", + "tile.cut_copper.name": "Cobre Lapidado", + "tile.exposed_cut_copper.name": "Cobre Lapidado Exposto", + "tile.weathered_cut_copper.name": "Cobre Lapidado Desbotado", + "tile.oxidized_cut_copper.name": "Cobre Lapidado Oxidado", + "tile.waxed_cut_copper.name": "Cobre Lapidado Encerado", + "tile.waxed_exposed_cut_copper.name": "Cobre Lapidado Exposto Encerado", + "tile.waxed_weathered_cut_copper.name": "Cobre Lapidado Desbotado Encerado", + "tile.waxed_oxidized_cut_copper.name": "Cobre Lapidado Oxidado Encerado", + "tile.cut_copper_stairs.name": "Escada de Cobre Lapidado", + "tile.exposed_cut_copper_stairs.name": "Escada de Cobre Lapidado Exposto", + "tile.weathered_cut_copper_stairs.name": "Escada de Cobre Lapidado Desbotado", + "tile.oxidized_cut_copper_stairs.name": "Escada de Cobre Lapidado Oxidado", + "tile.waxed_cut_copper_stairs.name": "Escada de Cobre Lapidado Encerado", + "tile.waxed_exposed_cut_copper_stairs.name": "Escada de Cobre Lapidado Exposto Encerado", + "tile.waxed_weathered_cut_copper_stairs.name": "Escada de Cobre Lapidado Desbotado Encerado", + "tile.waxed_oxidized_cut_copper_stairs.name": "Escada de Cobre Lapidado Oxidado Encerado", + "tile.cut_copper_slab.name": "Laje de Cobre Lapidado", + "tile.exposed_cut_copper_slab.name": "Laje de Cobre Lapidado Exposto", + "tile.weathered_cut_copper_slab.name": "Laje de Cobre Lapidado Desbotado", + "tile.oxidized_cut_copper_slab.name": "Laje de Cobre Lapidado Oxidado", + "tile.waxed_cut_copper_slab.name": "Laje de Cobre Lapidado Encerado", + "tile.waxed_exposed_cut_copper_slab.name": "Laje de Cobre Lapidado Exposto Encerado", + "tile.waxed_weathered_cut_copper_slab.name": "Laje de Cobre Lapidado Desbotado Encerado", + "tile.waxed_oxidized_cut_copper_slab.name": "Laje de Cobre Lapidado Oxidado Encerado", "tile.chiseled_copper.name": "Cobre Cinzelado", "tile.exposed_chiseled_copper.name": "Cobre Cinzelado Exposto", "tile.oxidized_chiseled_copper.name": "Cobre Cinzelado Oxidado", @@ -34531,36 +34149,36 @@ export const langs: Langs = { "tile.waxed_weathered_chiseled_copper.name": "Cobre Cinzelado Desbotado e Encerado", "tile.weathered_chiseled_copper.name": "Cobre Cinzelado Desbotado", "tile.copper_bulb.name": "Lâmpada de Cobre", - "tile.exposed_copper_bulb.name": "Lâmpada de Cobre Exposta", - "tile.oxidized_copper_bulb.name": "Lâmpada de Cobre Oxidada", - "tile.waxed_copper_bulb.name": "Lâmpada de Cobre Encerada", - "tile.waxed_exposed_copper_bulb.name": "Lâmpada de Cobre Exposta e Encerada", - "tile.waxed_oxidized_copper_bulb.name": "Lâmpada de Cobre Oxidada e Encerada", - "tile.waxed_weathered_copper_bulb.name": "Lâmpada de Cobre Desbotada e Encerada", - "tile.weathered_copper_bulb.name": "Lâmpada de Cobre Desbotada", + "tile.exposed_copper_bulb.name": "Lâmpada de Cobre Exposto", + "tile.oxidized_copper_bulb.name": "Lâmpada de Cobre Oxidado", + "tile.waxed_copper_bulb.name": "Lâmpada de Cobre Encerado", + "tile.waxed_exposed_copper_bulb.name": "Lâmpada de Cobre Exposto Encerado", + "tile.waxed_oxidized_copper_bulb.name": "Lâmpada de Cobre Oxidado Encerado", + "tile.waxed_weathered_copper_bulb.name": "Lâmpada de Cobre Desbotado Encerado", + "tile.weathered_copper_bulb.name": "Lâmpada de Cobre Desbotado", "tile.copper_door.name": "Porta de Cobre", - "tile.exposed_copper_door.name": "Porta de Cobre Exposta", - "tile.oxidized_copper_door.name": "Porta de Cobre Oxidada", - "tile.waxed_copper_door.name": "Porta de Cobre Encerada", - "tile.waxed_exposed_copper_door.name": "Porta de Cobre Exposta e Encerada", - "tile.waxed_oxidized_copper_door.name": "Porta de Cobre Oxidada e Encerada", - "tile.waxed_weathered_copper_door.name": "Porta de Cobre Desbotada e Encerada", - "tile.weathered_copper_door.name": "Porta de Cobre Desbotada", + "tile.exposed_copper_door.name": "Porta de Cobre Exposto", + "tile.oxidized_copper_door.name": "Porta de Cobre Oxidado", + "tile.waxed_copper_door.name": "Porta de Cobre Encerado", + "tile.waxed_exposed_copper_door.name": "Porta de Cobre Exposto Encerado", + "tile.waxed_oxidized_copper_door.name": "Porta de Cobre Oxidado Encerado", + "tile.waxed_weathered_copper_door.name": "Porta de Cobre Desbotado Encerado", + "tile.weathered_copper_door.name": "Porta de Cobre Desbotado", "tile.copper_grate.name": "Grade de Cobre", - "tile.exposed_copper_grate.name": "Grade de Cobre Exposta", - "tile.oxidized_copper_grate.name": "Grade de Cobre Oxidada", - "tile.waxed_copper_grate.name": "Grade de Cobre Encerada", - "tile.waxed_exposed_copper_grate.name": "Grade de Cobre Exposta e Encerada", - "tile.waxed_oxidized_copper_grate.name": "Grade de Cobre Oxidada e Encerada", - "tile.waxed_weathered_copper_grate.name": "Grade de Cobre Desbotada e Encerada", - "tile.weathered_copper_grate.name": "Grade de Cobre Desbotada", + "tile.exposed_copper_grate.name": "Grade de Cobre Exposto", + "tile.oxidized_copper_grate.name": "Grade de Cobre Oxidado", + "tile.waxed_copper_grate.name": "Grade de Cobre Encerado", + "tile.waxed_exposed_copper_grate.name": "Grade de Cobre Exposto Encerado", + "tile.waxed_oxidized_copper_grate.name": "Grade de Cobre Oxidado Encerado", + "tile.waxed_weathered_copper_grate.name": "Grade de Cobre Desbotado Encerado", + "tile.weathered_copper_grate.name": "Grade de Cobre Desbotado", "tile.copper_trapdoor.name": "Alçapão de Cobre", "tile.exposed_copper_trapdoor.name": "Alçapão de Cobre Exposto", "tile.oxidized_copper_trapdoor.name": "Alçapão de Cobre Oxidado", "tile.waxed_copper_trapdoor.name": "Alçapão de Cobre Encerado", - "tile.waxed_exposed_copper_trapdoor.name": "Alçapão de Cobre Exposto e Encerado", - "tile.waxed_oxidized_copper_trapdoor.name": "Alçapão de Cobre Oxidado e Encerado", - "tile.waxed_weathered_copper_trapdoor.name": "Alçapão de Cobre Desbotado e Encerado", + "tile.waxed_exposed_copper_trapdoor.name": "Alçapão de Cobre Exposto Encerado", + "tile.waxed_oxidized_copper_trapdoor.name": "Alçapão de Cobre Oxidado Encerado", + "tile.waxed_weathered_copper_trapdoor.name": "Alçapão de Cobre Desbotado Encerado", "tile.weathered_copper_trapdoor.name": "Alçapão de Cobre Desbotado", "tile.raw_copper_block.name": "Bloco de Cobre Bruto", "tile.raw_iron_block.name": "Bloco de Ferro Bruto", @@ -34602,24 +34220,109 @@ export const langs: Langs = { "item.spyglass.name": "Luneta", "item.amethyst_shard.name": "Fragmento de Ametista", "tile.amethyst_block.name": "Bloco de Ametista", - "tile.budding_amethyst.name": "Ametista Germinante", - "tile.amethyst_cluster.name": "Aglomerado de Ametista", - "tile.large_amethyst_bud.name": "Broto Grande de Ametista", - "tile.medium_amethyst_bud.name": "Broto Médio de Ametista", - "tile.small_amethyst_bud.name": "Broto Pequeno de Ametista", + "tile.budding_amethyst.name": "Drusa de Ametista", + "tile.amethyst_cluster.name": "Agregado de Ametista", + "tile.large_amethyst_bud.name": "Cristal de Ametista Grande", + "tile.medium_amethyst_bud.name": "Cristal de Ametista Médio", + "tile.small_amethyst_bud.name": "Cristal de Ametista Pequeno", "tile.tuff.name": "Tufo", "tile.calcite.name": "Calcita", "tile.tinted_glass.name": "Vidro Fumê", "tile.smooth_basalt.name": "Basalto Liso", "tile.wildflowers.name": "Flores Selvagens", - "tile.firefly_bush.name": "Mata de Vaga-lume", + "tile.firefly_bush.name": "Arbusto-vaga-lume", "tile.bush.name": "Arbusto", "tile.leaf_litter.name": "Serrapilheira", "tile.cactus_flower.name": "Flor de Cacto", "item.brown_egg.name": "Ovo Marrom", "item.blue_egg.name": "Ovo Azul", - "tile.short_dry_grass.name": "Grama Seca Curta", - "tile.tall_dry_grass.name": "Grama Seca Alta" + "tile.short_dry_grass.name": "Grama Seca Baixa", + "tile.tall_dry_grass.name": "Grama Seca Alta", + "entity.happy_ghast.name": "Ghast Feliz", + "item.spawn_egg.entity.happy_ghast.name": "Ovo Gerador de Ghast Feliz", + "tile.dried_ghast.name": "Ghast Desidratado", + "item.black_harness.name": "Arnês Preto", + "item.blue_harness.name": "Arnês Azul", + "item.brown_harness.name": "Arnês Marrom", + "item.cyan_harness.name": "Arnês Ciano", + "item.gray_harness.name": "Arnês Cinza", + "item.green_harness.name": "Arnês Verde", + "item.light_blue_harness.name": "Arnês Azul Claro", + "item.light_gray_harness.name": "Arnês Cinza Claro", + "item.lime_harness.name": "Arnês Verde-limão", + "item.magenta_harness.name": "Arnês Magenta", + "item.orange_harness.name": "Arnês Laranja", + "item.pink_harness.name": "Arnês Rosa", + "item.purple_harness.name": "Arnês Roxo", + "item.red_harness.name": "Arnês Vermelho", + "item.white_harness.name": "Arnês Branco", + "item.yellow_harness.name": "Arnês Amarelo", + "entity.copper_golem.name": "Golem de Cobre", + "item.spawn_egg.entity.copper_golem.name": "Ovo de Invocação de Golem de Cobre", + "item.copper_nugget.name": "Pepita de Cobre", + "item.copper_sword.name": "Espada de Cobre", + "item.copper_pickaxe.name": "Picareta de Cobre", + "item.copper_axe.name": "Machado de Cobre", + "item.copper_shovel.name": "Pá de Cobre", + "item.copper_hoe.name": "Enxada de Cobre", + "item.copper_boots.name": "Botas de Cobre", + "item.copper_leggings.name": "Calças de Cobre", + "item.copper_chestplate.name": "Peitoral de Cobre", + "item.copper_helmet.name": "Capacete de Cobre", + "tile.copper_chest.name": "Baú de Cobre", + "tile.exposed_copper_chest.name": "Baú de Cobre Exposto", + "tile.weathered_copper_chest.name": "Baú de Cobre Desgastado", + "tile.oxidized_copper_chest.name": "Baú de Cobre Oxidado", + "tile.waxed_copper_chest.name": "Baú de Cobre Encerado", + "tile.waxed_exposed_copper_chest.name": "Baú de Cobre Exposto e Encerado", + "tile.waxed_weathered_copper_chest.name": "Baú de Cobre Desbotado e Encerado", + "tile.waxed_oxidized_copper_chest.name": "Baú de Cobre Oxidado e Encerado", + "tile.acacia_shelf.name": "Estante de Acácia", + "tile.bamboo_shelf.name": "Estante de Bambu", + "tile.birch_shelf.name": "Estante de Bétula", + "tile.cherry_shelf.name": "Estante de Cerejeira", + "tile.crimson_shelf.name": "Estante Carmesim", + "tile.dark_oak_shelf.name": "Estante de Carvalho Escuro", + "tile.jungle_shelf.name": "Estante da Selva", + "tile.mangrove_shelf.name": "Estante de Mangue", + "tile.oak_shelf.name": "Estante de Carvalho", + "tile.pale_oak_shelf.name": "Estante de Carvalho Pálido", + "tile.spruce_shelf.name": "Estante de Pinheiro", + "tile.warped_shelf.name": "Estante Distorcida", + "tile.copper_golem_statue.name": "Estátua de Golem de Cobre", + "tile.exposed_copper_golem_statue.name": "Estátua de Golem de Cobre Exposta", + "tile.weathered_copper_golem_statue.name": "Estátua de Golem de Cobre Desgastado", + "tile.oxidized_copper_golem_statue.name": "Estátua de Golem de Cobre Oxidado", + "tile.waxed_copper_golem_statue.name": "Estátua de Golem de Cobre Encerado", + "tile.waxed_exposed_copper_golem_statue.name": "Estátua de Golem de Cobre Exposto Encerado", + "tile.waxed_weathered_copper_golem_statue.name": "Estátua de Golem de Cobre Desgastado Encerado", + "tile.waxed_oxidized_copper_golem_statue.name": "Estátua de Golem de Cobre Oxidado Encerado", + "tile.copper_chain.name": "Corrente de Cobre", + "tile.exposed_copper_chain.name": "Corrente de Cobre Exposta", + "tile.weathered_copper_chain.name": "Corrente de Cobre Desgastada", + "tile.oxidized_copper_chain.name": "Corrente de Cobre Oxidada", + "tile.waxed_copper_chain.name": "Corrente de Cobre Encerada", + "tile.waxed_exposed_copper_chain.name": "Corrente de Cobre Exposta e Encerada", + "tile.waxed_weathered_copper_chain.name": "Corrente de Cobre Desbotada e Encerada", + "tile.waxed_oxidized_copper_chain.name": "Corrente de Cobre Oxidada e Encerada", + "tile.copper_bars.name": "Barras de Cobre", + "tile.exposed_copper_bars.name": "Barras de Cobre Expostas", + "tile.weathered_copper_bars.name": "Barras de Cobre Desbotadas", + "tile.oxidized_copper_bars.name": "Barras de Cobre Oxidadas", + "tile.waxed_copper_bars.name": "Barras de Cobre Enceradas", + "tile.waxed_exposed_copper_bars.name": "Barras de Cobre Expostas e Enceradas", + "tile.waxed_weathered_copper_bars.name": "Barras de Cobre Desbotadas e Enceradas", + "tile.waxed_oxidized_copper_bars.name": "Barras de Cobre Oxidadas e Enceradas", + "tile.copper_lantern.name": "Lampião de Cobre", + "tile.exposed_copper_lantern.name": "Lampião de Cobre Exposto", + "tile.weathered_copper_lantern.name": "Lampião de Cobre Desbotado", + "tile.oxidized_copper_lantern.name": "Lampião de Cobre Oxidado", + "tile.waxed_copper_lantern.name": "Lampião de Cobre Encerado", + "tile.waxed_exposed_copper_lantern.name": "Lampião de Cobre Exposto e Encerado", + "tile.waxed_weathered_copper_lantern.name": "Lampião de Cobre Desbotado e Encerado", + "tile.waxed_oxidized_copper_lantern.name": "Lampião de Cobre Oxidado e Encerado", + "tile.copper_torch.name": "Tocha de Cobre", + "tile.iron_chain.name": "Corrente de Ferro" }, "pt_PT": { "enchantment.arrowDamage": "Poder", @@ -34639,7 +34342,7 @@ export const langs: Langs = { "enchantment.fire": "Flamejante", "enchantment.fishingSpeed": "Isco", "enchantment.frostwalker": "Congelar Água", - "enchantment.heavy_weapon.breach": "Incumprimento", + "enchantment.heavy_weapon.breach": "Brecha", "enchantment.heavy_weapon.density": "Densidade", "enchantment.heavy_weapon.windburst": "Explosão de Vento", "enchantment.knockback": "Repulsão", @@ -34813,7 +34516,7 @@ export const langs: Langs = { "item.axolotlBabyBodySingle.name": "Axolote %1$s Bebé", "item.axolotlColorLucy.name": "Leucismo", "item.axolotlColorCyan.name": "Ciano", - "item.axolotlColorGold.name": "Dourado", + "item.axolotlColorGold.name": "Ouro", "item.axolotlColorWild.name": "Castanho", "item.axolotlColorBlue.name": "Azul", "item.golden_apple.name": "Maçã de Ouro", @@ -35237,7 +34940,7 @@ export const langs: Langs = { "item.banner.small_stripes.silver": "Palas Cinzentas-Claras", "item.banner.small_stripes.white": "Palas Brancas", "item.banner.small_stripes.yellow": "Palas Amarelas", - "item.banner.square_bottom_left.black": "Cantão Destro de Base Negra", + "item.banner.square_bottom_left.black": "Cantão Destro de Base Preta", "item.banner.square_bottom_left.blue": "Cantão Destro de Base Azul", "item.banner.square_bottom_left.brown": "Cantão Destro de Base Castanha", "item.banner.square_bottom_left.cyan": "Cantão Destro de Base Ciano", @@ -35247,13 +34950,13 @@ export const langs: Langs = { "item.banner.square_bottom_left.lime": "Cantão Destro de Base Verde-Lima", "item.banner.square_bottom_left.magenta": "Cantão Destro de Base Magenta", "item.banner.square_bottom_left.orange": "Cantão Destro de Base Cor de Laranja", - "item.banner.square_bottom_left.pink": "Cantão Destro de Base Cor-de-Rosa", + "item.banner.square_bottom_left.pink": "Cantão Destro de Base Rosa", "item.banner.square_bottom_left.purple": "Cantão Destro de Base Roxa", "item.banner.square_bottom_left.red": "Cantão Destro de Base Vermelha", "item.banner.square_bottom_left.silver": "Cantão Destro de Base Cinzento-Clara", "item.banner.square_bottom_left.white": "Cantão Destro de Base Branca", "item.banner.square_bottom_left.yellow": "Cantão Destro de Base Amarela", - "item.banner.square_bottom_right.black": "Cantão Esquerdo de Base Negra", + "item.banner.square_bottom_right.black": "Cantão Esquerdo de Base Preta", "item.banner.square_bottom_right.blue": "Cantão Esquerdo de Base Azul", "item.banner.square_bottom_right.brown": "Cantão Esquerdo de Base Castanha", "item.banner.square_bottom_right.cyan": "Cantão Esquerdo de Base Ciano", @@ -35263,13 +34966,13 @@ export const langs: Langs = { "item.banner.square_bottom_right.lime": "Cantão Esquerdo de Base Verde-Lima", "item.banner.square_bottom_right.magenta": "Cantão Esquerdo de Base Magenta", "item.banner.square_bottom_right.orange": "Cantão Esquerdo de Base Cor de Laranja", - "item.banner.square_bottom_right.pink": "Cantão Esquerdo de Base Cor-de-Rosa", + "item.banner.square_bottom_right.pink": "Cantão Esquerdo de Base Rosa", "item.banner.square_bottom_right.purple": "Cantão Esquerdo de Base Roxa", "item.banner.square_bottom_right.red": "Cantão Esquerdo de Base Vermelha", "item.banner.square_bottom_right.silver": "Cantão Esquerdo de Base Cinzento-Clara", "item.banner.square_bottom_right.white": "Cantão Esquerdo de Base Branca", "item.banner.square_bottom_right.yellow": "Cantão Esquerdo de Base Amarela", - "item.banner.square_top_left.black": "Cantão Destro de Chefe Negro", + "item.banner.square_top_left.black": "Cantão Destro de Chefe Preto", "item.banner.square_top_left.blue": "Cantão Destro de Chefe Azul", "item.banner.square_top_left.brown": "Cantão Destro de Chefe Castanho", "item.banner.square_top_left.cyan": "Cantão Destro de Chefe Ciano", @@ -35279,13 +34982,13 @@ export const langs: Langs = { "item.banner.square_top_left.lime": "Cantão Destro de Chefe Verde-Lima", "item.banner.square_top_left.magenta": "Cantão Destro de Chefe Magenta", "item.banner.square_top_left.orange": "Cantão Destro de Chefe Cor de Laranja", - "item.banner.square_top_left.pink": "Cantão Destro de Chefe Cor-de-Rosa", + "item.banner.square_top_left.pink": "Cantão Destro de Chefe Rosa", "item.banner.square_top_left.purple": "Cantão Destro de Chefe Roxo", "item.banner.square_top_left.red": "Cantão Destro de Chefe Vermelho", "item.banner.square_top_left.silver": "Cantão Destro de Chefe Cinzento-Claro", "item.banner.square_top_left.white": "Cantão Destro de Chefe Branco", "item.banner.square_top_left.yellow": "Cantão Destro de Chefe Amarelo", - "item.banner.square_top_right.black": "Cantão Esquerdo de Chefe Negro", + "item.banner.square_top_right.black": "Cantão Esquerdo de Chefe Preto", "item.banner.square_top_right.blue": "Cantão Esquerdo de Chefe Azul", "item.banner.square_top_right.brown": "Cantão Esquerdo de Chefe Castanho", "item.banner.square_top_right.cyan": "Cantão Esquerdo de Chefe Ciano", @@ -35295,7 +34998,7 @@ export const langs: Langs = { "item.banner.square_top_right.lime": "Cantão Esquerdo de Chefe Verde-Lima", "item.banner.square_top_right.magenta": "Cantão Esquerdo de Chefe Magenta", "item.banner.square_top_right.orange": "Cantão Esquerdo de Chefe Cor de Laranja", - "item.banner.square_top_right.pink": "Cantão Esquerdo de Chefe Cor-de-Rosa", + "item.banner.square_top_right.pink": "Cantão Esquerdo de Chefe Rosa", "item.banner.square_top_right.purple": "Cantão Esquerdo de Chefe Roxo", "item.banner.square_top_right.red": "Cantão Esquerdo de Chefe Vermelho", "item.banner.square_top_right.silver": "Cantão Esquerdo de Chefe Cinzento-Claro", @@ -35629,15 +35332,15 @@ export const langs: Langs = { "item.canBreak": "Pode partir:", "item.canPlace": "Pode ser colocado em:", "item.customProperties": "Tem Propriedades Personalizadas", - "item.itemLock.cantDrop": ":hollow_star: Itens \"não largáveis\" não podem ser", - "item.itemLock.cantMove": ":solid_star: Itens \"não movíveis\" não podem ser:", + "item.itemLock.cantDrop": ":hollow_star: Itens “não largáveis” não podem ser:", + "item.itemLock.cantMove": ":solid_star: Itens “não movíveis” não podem ser:", "item.itemLock.hoverText.cantBe.moved": "movidos", "item.itemLock.hoverText.cantBe.dropped": "largados", "item.itemLock.hoverText.cantBe.removed": "removidos", "item.itemLock.hoverText.cantBe.craftedWith": "usados para criar", "item.itemLock.keepOnDeath": "Este item não é perdido ao morrer.", - "item.itemLock.popupNotice.cantDrop": ":hollow_star: Itens \"não largáveis\" não podem ser: largados, removidos, usados para criar", - "item.itemLock.popupNotice.cantMove": ":solid_star: Itens \"não movíveis\" não podem ser: movidos, largados, removidos, usados para criar", + "item.itemLock.popupNotice.cantDrop": ":hollow_star: Itens “não largáveis” não podem ser: largados, removidos, usados para criar", + "item.itemLock.popupNotice.cantMove": ":solid_star: Itens “não movíveis” não podem ser: movidos, largados, removidos, usados para criar", "item.golden_carrot.name": "Cenoura Dourada", "item.carrotOnAStick.name": "Cenoura num Pau", "item.warped_fungus_on_a_stick.name": "Fungo Deformado num Pau", @@ -35779,20 +35482,21 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Armadura de Diamante para Cavalo", "item.horsearmorgold.name": "Armadura de Ouro para Cavalo", "item.horsearmoriron.name": "Armadura de Ferro para Cavalo", + "item.copper_horse_armor.name": "Armadura de Cobre para Cavalo", "item.horsearmorleather.name": "Armadura de Cabedal para Cavalo", "item.gold_ingot.name": "Lingote de Ouro", "item.iron_ingot.name": "Lingote de Ferro", - "item.netherite_ingot.name": "Lingote do Nether", + "item.netherite_ingot.name": "Lingote de Netherite", "item.netherite_scrap.name": "Fragmentos de Netherite", "item.netherite_sword.name": "Espada de Netherite", - "item.netherite_pickaxe.name": "Picareta do Nether", - "item.netherite_axe.name": "Machado do Nether", - "item.netherite_shovel.name": "Pá do Nether", - "item.netherite_hoe.name": "Enxada do Nether", - "item.netherite_boots.name": "Botas do Nether", - "item.netherite_leggings.name": "Perneiras do Nether", - "item.netherite_chestplate.name": "Protetor de Peito do Nether", - "item.netherite_helmet.name": "Capacete do Nether", + "item.netherite_pickaxe.name": "Picareta de Netherite", + "item.netherite_axe.name": "Machado de Netherite", + "item.netherite_shovel.name": "Pá de Netherite", + "item.netherite_hoe.name": "Enxada de Netherite", + "item.netherite_boots.name": "Botas de Netherite", + "item.netherite_leggings.name": "Perneiras de Netherite", + "item.netherite_chestplate.name": "Protetor de Peito de Netherite", + "item.netherite_helmet.name": "Capacete de Netherite", "item.lead.name": "Corda-guia", "item.leather.name": "Cabedal", "item.leaves.name": "Folhas", @@ -35962,6 +35666,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Creator", "item.record_creator_music_box.desc": "Lena Raine - Creator (Music Box)", "item.record_precipice.desc": "Aaron Cherof - Precipice", + "item.record_tears.desc": "Amos Roddy - Lágrimas", + "item.record_lava_chicken.desc": "Hyper Potions - Lava Chicken", "item.redstone.name": "Pó de Redstone", "item.reeds.name": "Cana-de-Açúcar", "item.kelp.name": "Algas", @@ -36117,7 +35823,7 @@ export const langs: Langs = { "potion.digSpeed": "Rapidez", "potion.effects.whenDrank": "Ao Aplicar:", "potion.empty": "Sem Efeitos", - "potion.emptyPotion.name": "Frasco de Água", + "potion.emptyPotion.name": "Garrafa de Água", "potion.emptyPotion.splash.name": "Garrafa de Água Lançável", "potion.emptyPotion.linger.name": "Garrafa de Água Persistente", "potion.fireResistance": "Resistência ao Fogo", @@ -36761,6 +36467,13 @@ export const langs: Langs = { "tile.glowstone.name": "Pedra Luminosa", "tile.glow_lichen.name": "Líquen Brilhante", "tile.lightning_rod.name": "Para-Raios", + "tile.exposed_lightning_rod.name": "Para-Raios Exposto", + "tile.weathered_lightning_rod.name": "Para-Raios Desgastado", + "tile.oxidized_lightning_rod.name": "Para-Raios Oxidado", + "tile.waxed_lightning_rod.name": "Para-Raios Encerado", + "tile.waxed_exposed_lightning_rod.name": "Para-Raios Exposto Encerado", + "tile.waxed_weathered_lightning_rod.name": "Para-Raios Desgastado Encerado", + "tile.waxed_oxidized_lightning_rod.name": "Para-Raios Oxidado Encerado", "tile.lit_pumpkin.name": "Abóbora de Halloween", "tile.lockedchest.name": "Baú Trancado", "tile.log.acacia.name": "Toro de Acácia", @@ -37105,7 +36818,7 @@ export const langs: Langs = { "tile.resin_block.name": "Bloco de Resina", "tile.resin_clump.name": "Agregado de Resina", "tile.glazedTerracotta.white.name": "Terracota Vidrada Branca", - "tile.glazedTerracotta.orange.name": "Terracota Vidrada Laranja", + "tile.glazedTerracotta.orange.name": "Terracota Vidrada Cor de Laranja", "tile.glazedTerracotta.magenta.name": "Terracota Vidrada Magenta", "tile.glazedTerracotta.light_blue.name": "Terracota Vidrada Azul-Clara", "tile.glazedTerracotta.yellow.name": "Terracota Vidrada Amarela", @@ -37137,7 +36850,7 @@ export const langs: Langs = { "tile.concrete.orange.name": "Betão Cor de Laranja", "tile.concrete.white.name": "Betão Branco", "tile.glazedTerracottaWhite.name": "Terracota Vidrada Branca", - "tile.glazedTerracottaOrange.name": "Terracota Vidrada Laranja", + "tile.glazedTerracottaOrange.name": "Terracota Vidrada Cor de Laranja", "tile.glazedTerracottaMagenta.name": "Terracota Vidrada Magenta", "tile.glazedTerracottaLightBlue.name": "Terracota Vidrada Azul-Clara", "tile.glazedTerracottaYellow.name": "Terracota Vidrada Amarela", @@ -37199,7 +36912,7 @@ export const langs: Langs = { "tile.wood.stripped.jungle.name": "Madeira da Selva Despojada", "tile.wood.stripped.acacia.name": "Madeira de Acácia Despojada", "tile.wood.stripped.dark_oak.name": "Madeira de Carvalho Escuro Despojada", - "tile.netherite_block.name": "Bloco do Nether", + "tile.netherite_block.name": "Bloco de Netherite", "tile.ancient_debris.name": "Detritos Ancestrais", "tile.nether_gold_ore.name": "Minério de Ouro do Nether", "tile.respawn_anchor.name": "Âncora de Regeneração", @@ -37226,8 +36939,8 @@ export const langs: Langs = { "tile.deepslate_brick_stairs.name": "Escadas de Tijolo de Ardósia", "tile.deepslate_brick_wall.name": "Parede de Tijolo de Ardósia", "tile.chiseled_deepslate.name": "Ardósia Cinzelada", - "tile.cobbled_deepslate_double_slab.name": "Laje Dupla Ardósia Apedregulhada", - "tile.polished_deepslate_double_slab.name": "Laje Dupla Ardósia Polida", + "tile.cobbled_deepslate_double_slab.name": "Laje Dupla de Ardósia Apedregulhada", + "tile.polished_deepslate_double_slab.name": "Laje Dupla de Ardósia Polida", "tile.deepslate_tile_double_slab.name": "Laje Dupla de Azulejo de Ardósia", "tile.deepslate_brick_double_slab.name": "Laje Dupla de Tijolo de Ardósia", "tile.deepslate_lapis_ore.name": "Minério de Lápis Lazúli de Ardósia", @@ -37264,20 +36977,20 @@ export const langs: Langs = { "tile.waxed_weathered_cut_copper.name": "Cobre Cortado Desgastado Encerado", "tile.waxed_oxidized_cut_copper.name": "Cobre Cortado Oxidado Encerado", "tile.cut_copper_stairs.name": "Escadas de Cobre Cortadas", - "tile.exposed_cut_copper_stairs.name": "Escadas de Cobre Cortado Exposto", - "tile.weathered_cut_copper_stairs.name": "Escadas de Cobre Cortadas Desgastadas", - "tile.oxidized_cut_copper_stairs.name": "Escadas de Cobre Cortado Oxidado", - "tile.waxed_cut_copper_stairs.name": "Escadas de Cobre Cortado Encerado", - "tile.waxed_exposed_cut_copper_stairs.name": "Escadas de Cobre Cortado Exposto Encerado", - "tile.waxed_weathered_cut_copper_stairs.name": "Escadas de Cobre Cortado Desgastado Encerado", + "tile.exposed_cut_copper_stairs.name": "Escadas de Cobre Cortadas Expostas", + "tile.weathered_cut_copper_stairs.name": "Escadas de Cobre Cortadas Remendadas", + "tile.oxidized_cut_copper_stairs.name": "Escadas de Cobre Cortadas Oxidadas", + "tile.waxed_cut_copper_stairs.name": "Escadas de Cobre Cortadas Enceradas", + "tile.waxed_exposed_cut_copper_stairs.name": "Escadas de Cobre Cortadas Expostas Enceradas", + "tile.waxed_weathered_cut_copper_stairs.name": "Escadas de Cobre Cortadas Desgastadas Enceradas", "tile.waxed_oxidized_cut_copper_stairs.name": "Escadas de Cobre Cortadas Oxidadas Enceradas", "tile.cut_copper_slab.name": "Laje de Cobre Cortada", - "tile.exposed_cut_copper_slab.name": "Laje de Cobre Cortado Exposto", - "tile.weathered_cut_copper_slab.name": "Laje de Cobre Cortado Desgastado", - "tile.oxidized_cut_copper_slab.name": "Laje de Cobre Cortado Oxidado", - "tile.waxed_cut_copper_slab.name": "Laje de Cobre Cortado Encerado", - "tile.waxed_exposed_cut_copper_slab.name": "Laje de Cobre Cortado Exposto Encerado", - "tile.waxed_weathered_cut_copper_slab.name": "Laje de Cobre Cortado Desgastado Encerado", + "tile.exposed_cut_copper_slab.name": "Laje de Cobre Cortada Exposta", + "tile.weathered_cut_copper_slab.name": "Laje de Cobre Cortada Desgastada", + "tile.oxidized_cut_copper_slab.name": "Laje de Cobre Cortada Oxidada", + "tile.waxed_cut_copper_slab.name": "Laje de Cobre Cortada Encerada", + "tile.waxed_exposed_cut_copper_slab.name": "Laje de Cobre Cortada Exposta Encerada", + "tile.waxed_weathered_cut_copper_slab.name": "Laje de Cobre Cortada Desgastada Encerada", "tile.waxed_oxidized_cut_copper_slab.name": "Laje de Cobre Cortada Oxidada Encerada", "tile.chiseled_copper.name": "Cobre Cinzelado", "tile.exposed_chiseled_copper.name": "Cobre Cinzelado Exposto", @@ -37356,7 +37069,7 @@ export const langs: Langs = { "tile.green_candle_cake.name": "Bolo com Vela Verde", "tile.red_candle_cake.name": "Bolo com Vela Vermelha", "tile.black_candle_cake.name": "Bolo com Vela Preta", - "item.spyglass.name": "Luneta", + "item.spyglass.name": "Óculo", "item.amethyst_shard.name": "Fragmento de Ametista", "tile.amethyst_block.name": "Bloco de Ametista", "tile.budding_amethyst.name": "Nascente de Ametista", @@ -37369,14 +37082,99 @@ export const langs: Langs = { "tile.tinted_glass.name": "Vidro Tingido", "tile.smooth_basalt.name": "Basalto Liso", "tile.wildflowers.name": "Flores Selvagens", - "tile.firefly_bush.name": "Arbusto Pirilampo", + "tile.firefly_bush.name": "Arbusto de Pirilampos ", "tile.bush.name": "Arbusto", - "tile.leaf_litter.name": "Manta Morta", + "tile.leaf_litter.name": "Folhada", "tile.cactus_flower.name": "Flor de Cato", "item.brown_egg.name": "Ovo Castanho", "item.blue_egg.name": "Ovo Azul", "tile.short_dry_grass.name": "Relva Curta e Seca", - "tile.tall_dry_grass.name": "Erva Alta e Seca" + "tile.tall_dry_grass.name": "Erva Alta e Seca", + "entity.happy_ghast.name": "Ghast Feliz", + "item.spawn_egg.entity.happy_ghast.name": "Ovo de Geração de Ghast Feliz", + "tile.dried_ghast.name": "Ghast Seco", + "item.black_harness.name": "Arnês Preto", + "item.blue_harness.name": "Arnês Azul", + "item.brown_harness.name": "Arnês Castanho", + "item.cyan_harness.name": "Arnês Ciano", + "item.gray_harness.name": "Arnês Cinzento", + "item.green_harness.name": "Arnês Verde", + "item.light_blue_harness.name": "Arnês Azul-Claro", + "item.light_gray_harness.name": "Arnês Cinzento-Claro", + "item.lime_harness.name": "Arnês Verde-Lima", + "item.magenta_harness.name": "Arnês Magenta", + "item.orange_harness.name": "Arnês Cor de Laranja", + "item.pink_harness.name": "Arnês Rosa", + "item.purple_harness.name": "Arnês Roxo", + "item.red_harness.name": "Arnês Vermelho", + "item.white_harness.name": "Arnês Branco", + "item.yellow_harness.name": "Arnês Amarelo", + "entity.copper_golem.name": "Golem de Cobre", + "item.spawn_egg.entity.copper_golem.name": "Ovo de Geração de Golem de Cobre", + "item.copper_nugget.name": "Pepita de Cobre", + "item.copper_sword.name": "Espada de Cobre", + "item.copper_pickaxe.name": "Picareta de Cobre", + "item.copper_axe.name": "Machado de Cobre", + "item.copper_shovel.name": "Pá de Cobre", + "item.copper_hoe.name": "Enxada de Cobre", + "item.copper_boots.name": "Botas de Cobre", + "item.copper_leggings.name": "Perneiras de Cobre", + "item.copper_chestplate.name": "Peitoral de Cobre", + "item.copper_helmet.name": "Capacete de Cobre", + "tile.copper_chest.name": "Baú de Cobre", + "tile.exposed_copper_chest.name": "Baú de Cobre Exposto", + "tile.weathered_copper_chest.name": "Baú de Cobre Desgastado", + "tile.oxidized_copper_chest.name": "Baú de Cobre Oxidado", + "tile.waxed_copper_chest.name": "Baú de Cobre Encerado", + "tile.waxed_exposed_copper_chest.name": "Baú de Cobre Exposto Encerado", + "tile.waxed_weathered_copper_chest.name": "Baú de Cobre Desgastado Encerado", + "tile.waxed_oxidized_copper_chest.name": "Baú de Cobre Oxidado Encerado", + "tile.acacia_shelf.name": "Estante de Acácia", + "tile.bamboo_shelf.name": "Estante de Bambu", + "tile.birch_shelf.name": "Estante de Bétula", + "tile.cherry_shelf.name": "Estante de Cerejeira", + "tile.crimson_shelf.name": "Estante Carmesim", + "tile.dark_oak_shelf.name": "Estante de Carvalho Escuro", + "tile.jungle_shelf.name": "Estante da Selva", + "tile.mangrove_shelf.name": "Estante de Mangue", + "tile.oak_shelf.name": "Estante de Carvalho", + "tile.pale_oak_shelf.name": "Estante de Carvalho Pálido", + "tile.spruce_shelf.name": "Estante de Abeto", + "tile.warped_shelf.name": "Estante Deformada", + "tile.copper_golem_statue.name": "Estátua de Golem de Cobre", + "tile.exposed_copper_golem_statue.name": "Estátua de Golem de Cobre Exposto", + "tile.weathered_copper_golem_statue.name": "Estátua de Golem de Cobre Desgastado", + "tile.oxidized_copper_golem_statue.name": "Estátua de Golem de Cobre Oxidado", + "tile.waxed_copper_golem_statue.name": "Estátua de Golem de Cobre Encerado", + "tile.waxed_exposed_copper_golem_statue.name": "Estátua de Golem de Cobre Exposto Encerado", + "tile.waxed_weathered_copper_golem_statue.name": "Estátua de Golem de Cobre Desgastado Encerado", + "tile.waxed_oxidized_copper_golem_statue.name": "Estátua de Golem de Cobre Oxidado Encerado", + "tile.copper_chain.name": "Corrente de Cobre", + "tile.exposed_copper_chain.name": "Corrente de Cobre Exposto", + "tile.weathered_copper_chain.name": "Corrente de Cobre Desgastado", + "tile.oxidized_copper_chain.name": "Corrente de Cobre Oxidado", + "tile.waxed_copper_chain.name": "Corrente de Cobre Encerado", + "tile.waxed_exposed_copper_chain.name": "Corrente de Cobre Exposto Encerado", + "tile.waxed_weathered_copper_chain.name": "Corrente de Cobre Desgastado Encerado", + "tile.waxed_oxidized_copper_chain.name": "Corrente de Cobre Oxidado Encerado", + "tile.copper_bars.name": "Barras de Cobre", + "tile.exposed_copper_bars.name": "Barras de Cobre Exposto", + "tile.weathered_copper_bars.name": "Barras de Cobre Desgastado", + "tile.oxidized_copper_bars.name": "Barras de Cobre Oxidado", + "tile.waxed_copper_bars.name": "Barras de Cobre Encerado", + "tile.waxed_exposed_copper_bars.name": "Barras de Cobre Exposto Encerado", + "tile.waxed_weathered_copper_bars.name": "Barras de Cobre Desgastado Encerado", + "tile.waxed_oxidized_copper_bars.name": "Barras de Cobre Oxidado Encerado", + "tile.copper_lantern.name": "Lanterna de Cobre", + "tile.exposed_copper_lantern.name": "Lanterna de Cobre Exposto", + "tile.weathered_copper_lantern.name": "Lanterna de Cobre Desgastado", + "tile.oxidized_copper_lantern.name": "Lanterna de Cobre Oxidado", + "tile.waxed_copper_lantern.name": "Lanterna de Cobre Encerado", + "tile.waxed_exposed_copper_lantern.name": "Lanterna de Cobre Exposto Encerado", + "tile.waxed_weathered_copper_lantern.name": "Lanterna de Cobre Desgastado Encerado", + "tile.waxed_oxidized_copper_lantern.name": "Lanterna de Cobre Oxidado Encerado", + "tile.copper_torch.name": "Tocha de Cobre", + "tile.iron_chain.name": "Corrente de Ferro" }, "zh_CN": { "enchantment.arrowDamage": "力量", @@ -37396,8 +37194,8 @@ export const langs: Langs = { "enchantment.fire": "火焰附加", "enchantment.fishingSpeed": "饵钓", "enchantment.frostwalker": "冰霜行者", - "enchantment.heavy_weapon.breach": "突袭", - "enchantment.heavy_weapon.density": "密度", + "enchantment.heavy_weapon.breach": "破甲", + "enchantment.heavy_weapon.density": "致密", "enchantment.heavy_weapon.windburst": "风爆", "enchantment.knockback": "击退", "enchantment.level.1": "I", @@ -37431,15 +37229,15 @@ export const langs: Langs = { "enchantment.tridentRiptide": "激流", "enchantment.tridentImpaling": "穿刺", "entity.area_effect_cloud.name": "区域效果云雾", - "entity.armadillo.name": "犰狳号", + "entity.armadillo.name": "犰狳", "entity.armor_stand.name": "盔甲架", "entity.arrow.name": "箭", "entity.bat.name": "蝙蝠", "entity.bee.name": "蜜蜂", "entity.blaze.name": "烈焰人", "entity.boat.name": "船", - "entity.bogged.name": "泥潭怪物", - "entity.breeze.name": "微风", + "entity.bogged.name": "沼骸", + "entity.breeze.name": "旋风人", "entity.breeze_wind_charge_projectile.name": "风弹", "entity.cat.name": "猫", "entity.cave_spider.name": "洞穴蜘蛛", @@ -38467,7 +38265,7 @@ export const langs: Langs = { "item.ender_eye.name": "末影之眼", "item.ender_pearl.name": "末影珍珠", "item.experience_bottle.name": "附魔之瓶", - "item.exposed_copper_door.name": "外露铜门", + "item.exposed_copper_door.name": "斑驳铜门", "item.feather.name": "羽毛", "item.fermented_spider_eye.name": "发酵蛛眼", "item.fireball.name": "火焰弹", @@ -38536,6 +38334,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "钻石马铠", "item.horsearmorgold.name": "黄金马铠", "item.horsearmoriron.name": "铁马铠", + "item.copper_horse_armor.name": "铜马铠", "item.horsearmorleather.name": "皮革马铠", "item.gold_ingot.name": "金锭", "item.iron_ingot.name": "铁锭", @@ -38560,7 +38359,7 @@ export const langs: Langs = { "item.iron_leggings.name": "铁护腿", "item.nautilus_shell.name": "鹦鹉螺壳", "item.heart_of_the_sea.name": "海洋之心", - "item.mace.name": "锤子", + "item.mace.name": "重锤", "item.magma_cream.name": "岩浆膏", "item.map.name": "地图", "item.map.exploration.mansion.name": "森林探险者地图", @@ -38574,7 +38373,7 @@ export const langs: Langs = { "item.map.exploration.village_desert.name": "沙漠村庄地图", "item.map.exploration.jungle_temple.name": "丛林探险者地图", "item.map.exploration.swamp_hut.name": "沼泽探险者地图", - "item.map.exploration.trial_chambers.name": "试用版探险者地图", + "item.map.exploration.trial_chambers.name": "试炼探险家地图", "item.melon.name": "西瓜片", "item.milk.name": "牛奶桶", "item.minecart.name": "矿车", @@ -38588,88 +38387,88 @@ export const langs: Langs = { "item.tnt_minecart.name": "TNT 矿车", "item.pitcher_pod.name": "猪笼草荚果", "item.torchflower_seeds.name": "火把花种子", - "item.spawn_egg.entity.agent.name": "代理机器人生成蛋", - "item.spawn_egg.entity.armadillo.name": "犰狳生成蛋", - "item.spawn_egg.entity.axolotl.name": "美西螈生成蛋", - "item.spawn_egg.entity.bee.name": "蜜蜂生成蛋", - "item.spawn_egg.entity.bogged.name": "泥潭怪物生成蛋", - "item.spawn_egg.entity.breeze.name": "微风生成蛋", - "item.spawn_egg.entity.hoglin.name": "疣猪兽生成蛋", - "item.spawn_egg.entity.cat.name": "猫生成蛋", - "item.spawn_egg.entity.chicken.name": "鸡生成蛋", - "item.spawn_egg.entity.cow.name": "牛生成蛋", - "item.spawn_egg.entity.cod.name": "鳕鱼生成蛋", - "item.spawn_egg.entity.creaking.name": "嘎枝生成蛋", - "item.spawn_egg.entity.ender_dragon.name": "末影龙生成蛋", - "item.spawn_egg.entity.goat.name": "山羊生成蛋", - "item.spawn_egg.entity.pufferfish.name": "河豚生成蛋", - "item.spawn_egg.entity.salmon.name": "鲑鱼生成蛋", - "item.spawn_egg.entity.tropicalfish.name": "热带鱼生成蛋", - "item.spawn_egg.entity.pig.name": "猪生成蛋", - "item.spawn_egg.entity.sheep.name": "羊生成蛋", - "item.spawn_egg.entity.npc.name": "NPC 生成蛋", - "item.spawn_egg.entity.npc.failed": "您需要创造模式 + 操作员权限来生成 NPC", - "item.spawn_egg.entity.wolf.name": "狼生成蛋", - "item.spawn_egg.entity.villager.name": "村民生成蛋", - "item.spawn_egg.entity.villager_v2.name": "村民生成蛋", - "item.spawn_egg.entity.vindicator.name": "卫道士生成蛋", - "item.spawn_egg.entity.mooshroom.name": "哞菇生成蛋", - "item.spawn_egg.entity.squid.name": "鱿鱼生成蛋", - "item.spawn_egg.entity.glow_squid.name": "发光鱿鱼生成蛋", - "item.spawn_egg.entity.rabbit.name": "兔子生成蛋", - "item.spawn_egg.entity.bat.name": "蝙蝠生成蛋", - "item.spawn_egg.entity.ravager.name": "劫掠兽生成蛋", - "item.spawn_egg.entity.iron_golem.name": "铁傀儡生成蛋", - "item.spawn_egg.entity.snow_golem.name": "雪傀儡生成蛋", - "item.spawn_egg.entity.ocelot.name": "豹猫生成蛋", - "item.spawn_egg.entity.parrot.name": "鹦鹉生成蛋", - "item.spawn_egg.entity.horse.name": "马生成蛋", - "item.spawn_egg.entity.llama.name": "羊驼生成蛋", - "item.spawn_egg.entity.trader_llama.name": "行商羊驼生成蛋", - "item.spawn_egg.entity.polar_bear.name": "北极熊生成蛋", - "item.spawn_egg.entity.donkey.name": "驴生成蛋", - "item.spawn_egg.entity.mule.name": "骡子生成蛋", - "item.spawn_egg.entity.skeleton_horse.name": "骷髅马生成蛋", - "item.spawn_egg.entity.zombie_horse.name": "僵尸马生成蛋", - "item.spawn_egg.entity.zombie.name": "僵尸生成蛋", - "item.spawn_egg.entity.drowned.name": "溺尸生成蛋", - "item.spawn_egg.entity.creeper.name": "苦力怕生成蛋", - "item.spawn_egg.entity.skeleton.name": "骷髅生成蛋", - "item.spawn_egg.entity.spider.name": "蜘蛛生成蛋", - "item.spawn_egg.entity.zombie_pigman.name": "僵尸猪灵生成蛋", - "item.spawn_egg.entity.strider.name": "炽足兽生成蛋", - "item.spawn_egg.entity.slime.name": "史莱姆生成蛋", - "item.spawn_egg.entity.enderman.name": "末影人生成蛋", - "item.spawn_egg.entity.silverfish.name": "蠹虫生成蛋", - "item.spawn_egg.entity.cave_spider.name": "洞穴蜘蛛生成蛋", - "item.spawn_egg.entity.ghast.name": "恶魂生成蛋", - "item.spawn_egg.entity.magma_cube.name": "岩浆怪生成蛋", - "item.spawn_egg.entity.blaze.name": "烈焰生成蛋", - "item.spawn_egg.entity.zombie_villager.name": "僵尸村民生成蛋", - "item.spawn_egg.entity.zombie_villager_v2.name": "僵尸村民生成蛋", - "item.spawn_egg.entity.witch.name": "女巫生成蛋", - "item.spawn_egg.entity.stray.name": "流浪者生成蛋", - "item.spawn_egg.entity.husk.name": "尸傀生成蛋", - "item.spawn_egg.entity.wither_skeleton.name": "凋灵骷髅生成蛋", - "item.spawn_egg.entity.guardian.name": "守卫者生成蛋", - "item.spawn_egg.entity.elder_guardian.name": "远古守卫者生成蛋", - "item.spawn_egg.entity.shulker.name": "潜影贝生成蛋", - "item.spawn_egg.entity.endermite.name": "末影螨生成蛋", - "item.spawn_egg.entity.evocation_illager.name": "唤魔者生成蛋", - "item.spawn_egg.entity.vex.name": "猥傀生成蛋", - "item.spawn_egg.entity.turtle.name": "海龟生成蛋", - "item.spawn_egg.entity.dolphin.name": "海豚生成蛋", - "item.spawn_egg.entity.phantom.name": "幻翼生成蛋", - "item.spawn_egg.entity.panda.name": "熊猫生成蛋", - "item.spawn_egg.entity.pillager.name": "掠夺者生成蛋", - "item.spawn_egg.entity.piglin_brute.name": "猪灵蛮兵生成蛋", - "item.spawn_egg.entity.piglin.name": "猪灵生成蛋", - "item.spawn_egg.entity.fox.name": "狐狸生成蛋", - "item.spawn_egg.entity.unknown.name": "生成蛋", - "item.spawn_egg.entity.wandering_trader.name": "流浪商人生成蛋", - "item.spawn_egg.entity.wither.name": "凋灵生成蛋", - "item.spawn_egg.entity.zoglin.name": "僵尸疣猪兽生成蛋", - "item.spawn_egg.entity.sniffer.name": "嗅探兽生成蛋", + "item.spawn_egg.entity.agent.name": "代理机器人刷怪蛋", + "item.spawn_egg.entity.armadillo.name": "犰狳刷怪蛋", + "item.spawn_egg.entity.axolotl.name": "美西螈刷怪蛋", + "item.spawn_egg.entity.bee.name": "蜜蜂刷怪蛋", + "item.spawn_egg.entity.bogged.name": "沼骸刷怪蛋", + "item.spawn_egg.entity.breeze.name": "旋风人刷怪蛋", + "item.spawn_egg.entity.hoglin.name": "疣猪兽刷怪蛋", + "item.spawn_egg.entity.cat.name": "猫刷怪蛋", + "item.spawn_egg.entity.chicken.name": "鸡刷怪蛋", + "item.spawn_egg.entity.cow.name": "牛刷怪蛋", + "item.spawn_egg.entity.cod.name": "鳕鱼刷怪蛋", + "item.spawn_egg.entity.creaking.name": "嘎枝刷怪蛋", + "item.spawn_egg.entity.ender_dragon.name": "末影龙刷怪蛋", + "item.spawn_egg.entity.goat.name": "山羊刷怪蛋", + "item.spawn_egg.entity.pufferfish.name": "河豚刷怪蛋", + "item.spawn_egg.entity.salmon.name": "鲑鱼刷怪蛋", + "item.spawn_egg.entity.tropicalfish.name": "热带鱼刷怪蛋", + "item.spawn_egg.entity.pig.name": "猪刷怪蛋", + "item.spawn_egg.entity.sheep.name": "羊刷怪蛋", + "item.spawn_egg.entity.npc.name": "NPC 刷怪蛋", + "item.spawn_egg.entity.npc.failed": "你需要创造模式 + 操作员权限来生成 NPC", + "item.spawn_egg.entity.wolf.name": "狼刷怪蛋", + "item.spawn_egg.entity.villager.name": "村民刷怪蛋", + "item.spawn_egg.entity.villager_v2.name": "村民刷怪蛋", + "item.spawn_egg.entity.vindicator.name": "卫道士刷怪蛋", + "item.spawn_egg.entity.mooshroom.name": "哞菇刷怪蛋", + "item.spawn_egg.entity.squid.name": "鱿鱼刷怪蛋", + "item.spawn_egg.entity.glow_squid.name": "发光鱿鱼刷怪蛋", + "item.spawn_egg.entity.rabbit.name": "兔子刷怪蛋", + "item.spawn_egg.entity.bat.name": "蝙蝠刷怪蛋", + "item.spawn_egg.entity.ravager.name": "劫掠兽刷怪蛋", + "item.spawn_egg.entity.iron_golem.name": "铁傀儡刷怪蛋", + "item.spawn_egg.entity.snow_golem.name": "雪傀儡刷怪蛋", + "item.spawn_egg.entity.ocelot.name": "豹猫刷怪蛋", + "item.spawn_egg.entity.parrot.name": "鹦鹉刷怪蛋", + "item.spawn_egg.entity.horse.name": "马刷怪蛋", + "item.spawn_egg.entity.llama.name": "羊驼刷怪蛋", + "item.spawn_egg.entity.trader_llama.name": "行商羊驼刷怪蛋", + "item.spawn_egg.entity.polar_bear.name": "北极熊刷怪蛋", + "item.spawn_egg.entity.donkey.name": "驴刷怪蛋", + "item.spawn_egg.entity.mule.name": "骡子刷怪蛋", + "item.spawn_egg.entity.skeleton_horse.name": "骷髅马刷怪蛋", + "item.spawn_egg.entity.zombie_horse.name": "僵尸马刷怪蛋", + "item.spawn_egg.entity.zombie.name": "僵尸刷怪蛋", + "item.spawn_egg.entity.drowned.name": "溺尸刷怪蛋", + "item.spawn_egg.entity.creeper.name": "苦力怕刷怪蛋", + "item.spawn_egg.entity.skeleton.name": "骷髅刷怪蛋", + "item.spawn_egg.entity.spider.name": "蜘蛛刷怪蛋", + "item.spawn_egg.entity.zombie_pigman.name": "僵尸猪灵刷怪蛋", + "item.spawn_egg.entity.strider.name": "炽足兽刷怪蛋", + "item.spawn_egg.entity.slime.name": "史莱姆刷怪蛋", + "item.spawn_egg.entity.enderman.name": "末影人刷怪蛋", + "item.spawn_egg.entity.silverfish.name": "蠹虫刷怪蛋", + "item.spawn_egg.entity.cave_spider.name": "洞穴蜘蛛刷怪蛋", + "item.spawn_egg.entity.ghast.name": "恶魂刷怪蛋", + "item.spawn_egg.entity.magma_cube.name": "岩浆怪刷怪蛋", + "item.spawn_egg.entity.blaze.name": "烈焰刷怪蛋", + "item.spawn_egg.entity.zombie_villager.name": "僵尸村民刷怪蛋", + "item.spawn_egg.entity.zombie_villager_v2.name": "僵尸村民刷怪蛋", + "item.spawn_egg.entity.witch.name": "女巫刷怪蛋", + "item.spawn_egg.entity.stray.name": "流浪者刷怪蛋", + "item.spawn_egg.entity.husk.name": "尸傀刷怪蛋", + "item.spawn_egg.entity.wither_skeleton.name": "凋灵骷髅刷怪蛋", + "item.spawn_egg.entity.guardian.name": "守卫者刷怪蛋", + "item.spawn_egg.entity.elder_guardian.name": "远古守卫者刷怪蛋", + "item.spawn_egg.entity.shulker.name": "潜影贝刷怪蛋", + "item.spawn_egg.entity.endermite.name": "末影螨刷怪蛋", + "item.spawn_egg.entity.evocation_illager.name": "唤魔者刷怪蛋", + "item.spawn_egg.entity.vex.name": "猥傀刷怪蛋", + "item.spawn_egg.entity.turtle.name": "海龟刷怪蛋", + "item.spawn_egg.entity.dolphin.name": "海豚刷怪蛋", + "item.spawn_egg.entity.phantom.name": "幻翼刷怪蛋", + "item.spawn_egg.entity.panda.name": "熊猫刷怪蛋", + "item.spawn_egg.entity.pillager.name": "掠夺者刷怪蛋", + "item.spawn_egg.entity.piglin_brute.name": "猪灵蛮兵刷怪蛋", + "item.spawn_egg.entity.piglin.name": "猪灵刷怪蛋", + "item.spawn_egg.entity.fox.name": "狐狸刷怪蛋", + "item.spawn_egg.entity.unknown.name": "刷怪蛋", + "item.spawn_egg.entity.wandering_trader.name": "流浪商人刷怪蛋", + "item.spawn_egg.entity.wither.name": "凋灵刷怪蛋", + "item.spawn_egg.entity.zoglin.name": "僵尸疣猪兽刷怪蛋", + "item.spawn_egg.entity.sniffer.name": "嗅探兽刷怪蛋", "item.trident.name": "三叉戟", "item.mushroom_stew.name": "蘑菇煲", "item.muttonCooked.name": "熟羊肉", @@ -38719,6 +38518,8 @@ export const langs: Langs = { "item.record_creator.desc": "莉娜·雷恩 - 创作者", "item.record_creator_music_box.desc": "莉娜·雷恩 - 创作者(音乐盒)", "item.record_precipice.desc": "亚伦·切罗夫 - 峭壁", + "item.record_tears.desc": "Amos Roddy - 泪水", + "item.record_lava_chicken.desc": "Hyper Potions - 熔岩鸡", "item.redstone.name": "红石粉", "item.reeds.name": "甘蔗", "item.kelp.name": "海带", @@ -38766,14 +38567,14 @@ export const langs: Langs = { "item.wooden_sword.name": "木剑", "item.unbreakable": "无法破坏", "item.waxed_copper_door.name": "涂蜡铜门", - "item.waxed_exposed_copper_door.name": "涂蜡外露铜门", + "item.waxed_exposed_copper_door.name": "涂蜡斑驳铜门", "item.waxed_oxidized_copper_door.name": "涂蜡氧化铜门", "item.waxed_weathered_copper_door.name": "涂蜡风化铜门", "item.weathered_copper_door.name": "风化铜门", "item.wind_charge.name": "风弹", "item.wheat.name": "小麦", "item.wolf_armor.name": "狼铠", - "item.writable_book.name": "书和羽毛", + "item.writable_book.name": "书与笔", "item.written_book.name": "成书", "item.glowstone_dust.name": "荧石粉", "item.shulker_shell.name": "潜影壳", @@ -38832,7 +38633,7 @@ export const langs: Langs = { "item.shield.brown.name": "棕色盾牌", "item.shield.black.name": "黑色盾牌", "item.shield.blue.name": "蓝色盾牌", - "item.bundle": "收纳袋", + "item.bundle": "同捆包", "item.black_bundle": "黑色收纳袋", "item.white_bundle": "白色收纳袋", "item.red_bundle": "红色收纳袋", @@ -38985,13 +38786,13 @@ export const langs: Langs = { "tile.reinforced_deepslate.name": "强化深板岩", "entity.frog.name": "青蛙", "entity.tadpole.name": "蝌蚪", - "item.spawn_egg.entity.warden.name": "循声守卫生成蛋", + "item.spawn_egg.entity.warden.name": "循声守卫刷怪蛋", "entity.warden.name": "监守者", "entity.allay.name": "悦灵", - "item.spawn_egg.entity.allay.name": "悦灵生成蛋", + "item.spawn_egg.entity.allay.name": "悦灵刷怪蛋", "item.bucketTadpole.name": "蝌蚪桶", - "item.spawn_egg.entity.frog.name": "青蛙生成蛋", - "item.spawn_egg.entity.tadpole.name": "蝌蚪生成蛋", + "item.spawn_egg.entity.frog.name": "青蛙刷怪蛋", + "item.spawn_egg.entity.tadpole.name": "蝌蚪刷怪蛋", "tile.frog_spawn.name": "青蛙卵", "tile.pearlescent_froglight.name": "珠光蛙明灯", "tile.verdant_froglight.name": "青翠蛙明灯", @@ -39068,13 +38869,13 @@ export const langs: Langs = { "item.heartbreak_pottery_sherd.name": "心碎纹样陶片", "item.howl_pottery_sherd.name": "狼嚎纹样陶片", "item.jungle_hanging_sign.name": "丛林悬挂告示牌", - "item.mangrove_hanging_sign.name": "红树木悬挂告示牌", + "item.mangrove_hanging_sign.name": "红树林悬挂告示牌", "item.miner_pottery_sherd.name": "采矿纹样陶片", "item.mourner_pottery_sherd.name": "哀悼纹样陶片", "item.oak_hanging_sign.name": "橡木悬挂告示牌", "item.plenty_pottery_sherd.name": "富饶纹样陶片", "item.prize_pottery_sherd.name": "珍宝纹样陶片", - "item.scrape_pottery_sherd.name": "刮擦纹样陶片", + "item.scrape_pottery_sherd.name": "刮削纹样陶片", "item.sheaf_pottery_sherd.name": "麦捆纹样陶片", "item.shelter_pottery_sherd.name": "树荫纹样陶片", "item.skull_pottery_sherd.name": "头颅纹样陶片", @@ -39106,7 +38907,7 @@ export const langs: Langs = { "item.flow_armor_trim_smithing_template.name": "涡流盔甲纹饰", "item.bolt_armor_trim_smithing_template.name": "镶铆盔甲纹饰", "item.snort_pottery_sherd.name": "嗅探纹样陶片", - "item.spawn_egg.entity.camel.name": "骆驼生成蛋", + "item.spawn_egg.entity.camel.name": "骆驼刷怪蛋", "item.spruce_hanging_sign.name": "云杉木悬挂告示牌", "item.warped_hanging_sign.name": "翘曲悬挂告示牌", "tile.bamboo_block.name": "竹子方块", @@ -39136,8 +38937,8 @@ export const langs: Langs = { "tile.cherry_trapdoor.name": "樱花木活板门", "tile.cherry_wood.name": "樱花木", "tile.chiseled_bookshelf.name": "錾制书架", - "tile.chiseled_tuff.name": "錾制凝灰岩", - "tile.chiseled_tuff_bricks.name": "錾制凝灰岩砖", + "tile.chiseled_tuff.name": "雕纹凝灰岩", + "tile.chiseled_tuff_bricks.name": "雕纹凝灰岩砖", "tile.decorated_pot.name": "装饰罐", "tile.pink_petals.name": "粉红色花瓣", "tile.stripped_bamboo_block.name": "去皮竹块", @@ -39147,7 +38948,7 @@ export const langs: Langs = { "tile.suspicious_sand.name": "可疑的沙子", "trim_pattern.coast.name": "海岸纹饰盔甲", "trim_pattern.dune.name": "沙丘纹饰盔甲", - "trim_pattern.eye.name": "眼眸纹饰盔甲", + "trim_pattern.eye.name": "眼眸盔甲纹饰", "trim_pattern.host.name": "主导盔甲纹饰", "trim_pattern.raiser.name": "崛起盔甲纹饰", "trim_pattern.rib.name": "肋骨纹饰盔甲", @@ -39433,7 +39234,7 @@ export const langs: Langs = { "tile.light_block.name": "浅色", "tile.repeating_command_block.name": "循环型命令方块", "tile.chain_command_block.name": "连锁型命令方块", - "tile.wheat.name": "农作物", + "tile.wheat.name": "小麦", "tile.darkOakFence.name": "深色橡木栅栏", "tile.dark_oak_fence_gate.name": "深色橡木栅栏门", "tile.daylight_detector.name": "阳光探测器", @@ -39504,7 +39305,7 @@ export const langs: Langs = { "tile.jungle_fence_gate.name": "丛林木栅栏门", "tile.ladder.name": "梯子", "tile.flowing_lava.name": "熔岩", - "tile.lava.name": "岩浆", + "tile.lava.name": "熔岩", "tile.leaves.acacia.name": "金合欢树叶", "tile.leaves2.acacia.name": "金合欢树叶", "tile.leaves.big_oak.name": "深色橡树叶", @@ -39518,6 +39319,13 @@ export const langs: Langs = { "tile.glowstone.name": "荧石", "tile.glow_lichen.name": "发光地衣", "tile.lightning_rod.name": "避雷针", + "tile.exposed_lightning_rod.name": "斑驳避雷针", + "tile.weathered_lightning_rod.name": "风化避雷针", + "tile.oxidized_lightning_rod.name": "氧化避雷针", + "tile.waxed_lightning_rod.name": "涂蜡避雷针", + "tile.waxed_exposed_lightning_rod.name": "涂蜡斑驳避雷针", + "tile.waxed_weathered_lightning_rod.name": "涂蜡风化避雷针", + "tile.waxed_oxidized_lightning_rod.name": "涂蜡氧化避雷针", "tile.lit_pumpkin.name": "南瓜灯", "tile.lockedchest.name": "上锁的箱子", "tile.log.acacia.name": "金合欢原木", @@ -40005,74 +39813,74 @@ export const langs: Langs = { "item.raw_iron.name": "粗铁", "item.raw_gold.name": "粗金", "tile.copper_block.name": "铜方块", - "tile.exposed_copper.name": "斑驳的铜块", - "tile.weathered_copper.name": "锈蚀的铜块", - "tile.oxidized_copper.name": "氧化的铜块", + "tile.exposed_copper.name": "斑驳铜块", + "tile.weathered_copper.name": "风化铜块", + "tile.oxidized_copper.name": "氧化铜块", "tile.waxed_copper.name": "涂蜡铜方块", - "tile.waxed_exposed_copper.name": "斑驳的涂蜡铜块", - "tile.waxed_weathered_copper.name": "锈蚀的涂蜡铜块", - "tile.waxed_oxidized_copper.name": "氧化的涂蜡铜块", + "tile.waxed_exposed_copper.name": "涂蜡斑驳铜块", + "tile.waxed_weathered_copper.name": "涂蜡风化铜块", + "tile.waxed_oxidized_copper.name": "涂蜡氧化铜块", "tile.cut_copper.name": "切制铜块", - "tile.exposed_cut_copper.name": "外露切制铜块", + "tile.exposed_cut_copper.name": "斑驳切制铜块", "tile.weathered_cut_copper.name": "风化切制铜块", "tile.oxidized_cut_copper.name": "氧化切制铜块", "tile.waxed_cut_copper.name": "涂蜡切制铜块", - "tile.waxed_exposed_cut_copper.name": "斑驳的涂蜡切制铜块", - "tile.waxed_weathered_cut_copper.name": "锈蚀的涂蜡切制铜块", - "tile.waxed_oxidized_cut_copper.name": "氧化的涂蜡切制铜块", + "tile.waxed_exposed_cut_copper.name": "涂蜡斑驳切制铜块", + "tile.waxed_weathered_cut_copper.name": "涂蜡风化切制铜块", + "tile.waxed_oxidized_cut_copper.name": "涂蜡氧化切制铜块", "tile.cut_copper_stairs.name": "切制铜楼梯", - "tile.exposed_cut_copper_stairs.name": "外露切制铜楼梯", + "tile.exposed_cut_copper_stairs.name": "斑驳切制铜楼梯", "tile.weathered_cut_copper_stairs.name": "风化切制铜楼梯", "tile.oxidized_cut_copper_stairs.name": "氧化切制铜楼梯", "tile.waxed_cut_copper_stairs.name": "涂蜡切制铜楼梯", - "tile.waxed_exposed_cut_copper_stairs.name": "斑驳的涂蜡切制铜楼梯", - "tile.waxed_weathered_cut_copper_stairs.name": "锈蚀的涂蜡切制铜楼梯", - "tile.waxed_oxidized_cut_copper_stairs.name": "氧化的涂蜡切制铜楼梯", + "tile.waxed_exposed_cut_copper_stairs.name": "涂蜡斑驳切制铜楼梯", + "tile.waxed_weathered_cut_copper_stairs.name": "涂蜡风化切制铜楼梯", + "tile.waxed_oxidized_cut_copper_stairs.name": "涂蜡氧化切制铜楼梯", "tile.cut_copper_slab.name": "切制铜块台阶", - "tile.exposed_cut_copper_slab.name": "外露切制铜块台阶", + "tile.exposed_cut_copper_slab.name": "斑驳切制铜块台阶", "tile.weathered_cut_copper_slab.name": "风化切制铜块台阶", "tile.oxidized_cut_copper_slab.name": "氧化切制铜块台阶", "tile.waxed_cut_copper_slab.name": "涂蜡切制铜块台阶", - "tile.waxed_exposed_cut_copper_slab.name": "斑驳的涂蜡切制铜块台阶", - "tile.waxed_weathered_cut_copper_slab.name": "锈蚀的涂蜡切制铜块台阶", - "tile.waxed_oxidized_cut_copper_slab.name": "氧化的涂蜡切制铜块台阶", - "tile.chiseled_copper.name": "錾制铜", - "tile.exposed_chiseled_copper.name": "外露錾制铜块", + "tile.waxed_exposed_cut_copper_slab.name": "涂蜡斑驳切制铜块台阶", + "tile.waxed_weathered_cut_copper_slab.name": "涂蜡风化切制铜块台阶", + "tile.waxed_oxidized_cut_copper_slab.name": "涂蜡氧化切制铜台阶", + "tile.chiseled_copper.name": "雕纹铜块", + "tile.exposed_chiseled_copper.name": "斑驳錾制铜块", "tile.oxidized_chiseled_copper.name": "氧化錾制铜", "tile.waxed_chiseled_copper.name": "涂蜡錾制铜", - "tile.waxed_exposed_chiseled_copper.name": "涂蜡外露錾制铜", + "tile.waxed_exposed_chiseled_copper.name": "涂蜡斑驳錾制铜块", "tile.waxed_oxidized_chiseled_copper.name": "涂蜡氧化錾制铜", "tile.waxed_weathered_chiseled_copper.name": "涂蜡风化錾制铜", "tile.weathered_chiseled_copper.name": "风化錾制铜", "tile.copper_bulb.name": "铜灯泡", - "tile.exposed_copper_bulb.name": "外露铜灯泡", + "tile.exposed_copper_bulb.name": "斑驳铜灯泡", "tile.oxidized_copper_bulb.name": "氧化铜灯泡", "tile.waxed_copper_bulb.name": "涂蜡铜灯泡", - "tile.waxed_exposed_copper_bulb.name": "涂蜡外露铜灯泡", - "tile.waxed_oxidized_copper_bulb.name": "氧化的涂蜡铜灯泡", + "tile.waxed_exposed_copper_bulb.name": "涂蜡斑驳铜灯泡", + "tile.waxed_oxidized_copper_bulb.name": "涂蜡氧化铜灯泡", "tile.waxed_weathered_copper_bulb.name": "涂蜡风化铜灯泡", "tile.weathered_copper_bulb.name": "风化铜灯泡", "tile.copper_door.name": "铜门", - "tile.exposed_copper_door.name": "外露铜门", + "tile.exposed_copper_door.name": "斑驳铜门", "tile.oxidized_copper_door.name": "氧化铜门", "tile.waxed_copper_door.name": "涂蜡铜门", - "tile.waxed_exposed_copper_door.name": "涂蜡外露铜门", + "tile.waxed_exposed_copper_door.name": "涂蜡斑驳铜门", "tile.waxed_oxidized_copper_door.name": "涂蜡氧化铜门", "tile.waxed_weathered_copper_door.name": "涂蜡风化铜门", "tile.weathered_copper_door.name": "风化铜门", "tile.copper_grate.name": "铜格栅", - "tile.exposed_copper_grate.name": "外露铜格栅", + "tile.exposed_copper_grate.name": "斑驳铜格栅", "tile.oxidized_copper_grate.name": "氧化铜格栅", "tile.waxed_copper_grate.name": "涂蜡铜格栅", - "tile.waxed_exposed_copper_grate.name": "涂蜡外露铜格栅", + "tile.waxed_exposed_copper_grate.name": "涂蜡斑驳铜格栅", "tile.waxed_oxidized_copper_grate.name": "涂蜡氧化铜格栅", "tile.waxed_weathered_copper_grate.name": "涂蜡风化铜格栅", "tile.weathered_copper_grate.name": "风化铜格栅", "tile.copper_trapdoor.name": "铜活板门", - "tile.exposed_copper_trapdoor.name": "外露铜活板门", + "tile.exposed_copper_trapdoor.name": "斑驳铜活板门", "tile.oxidized_copper_trapdoor.name": "氧化铜活板门", "tile.waxed_copper_trapdoor.name": "涂蜡铜活板门", - "tile.waxed_exposed_copper_trapdoor.name": "外露的涂蜡铜活板门", + "tile.waxed_exposed_copper_trapdoor.name": "涂蜡斑驳铜活板门", "tile.waxed_oxidized_copper_trapdoor.name": "涂蜡氧化铜活板门", "tile.waxed_weathered_copper_trapdoor.name": "涂蜡风化铜活板门", "tile.weathered_copper_trapdoor.name": "风化铜活板门", @@ -40133,7 +39941,92 @@ export const langs: Langs = { "item.brown_egg.name": "棕色蛋", "item.blue_egg.name": "蓝色蛋", "tile.short_dry_grass.name": "矮干草丛", - "tile.tall_dry_grass.name": "高干草丛" + "tile.tall_dry_grass.name": "高干草丛", + "entity.happy_ghast.name": "善念恶魂", + "item.spawn_egg.entity.happy_ghast.name": "善念恶魂刷怪蛋", + "tile.dried_ghast.name": "脱水恶魂", + "item.black_harness.name": "黑色挽具", + "item.blue_harness.name": "蓝色挽具", + "item.brown_harness.name": "棕色挽具", + "item.cyan_harness.name": "青色挽具", + "item.gray_harness.name": "灰色挽具", + "item.green_harness.name": "绿色挽具", + "item.light_blue_harness.name": "淡蓝色挽具", + "item.light_gray_harness.name": "淡灰色挽具", + "item.lime_harness.name": "黄绿色挽具", + "item.magenta_harness.name": "品红色挽具", + "item.orange_harness.name": "橙色挽具", + "item.pink_harness.name": "粉红色挽具", + "item.purple_harness.name": "紫色挽具", + "item.red_harness.name": "红色挽具", + "item.white_harness.name": "白色挽具", + "item.yellow_harness.name": "黄色挽具", + "entity.copper_golem.name": "铜傀儡", + "item.spawn_egg.entity.copper_golem.name": "铜傀儡生成蛋", + "item.copper_nugget.name": "铜粒", + "item.copper_sword.name": "铜剑", + "item.copper_pickaxe.name": "铜镐", + "item.copper_axe.name": "铜斧", + "item.copper_shovel.name": "铜锹", + "item.copper_hoe.name": "铜锄", + "item.copper_boots.name": "铜靴子", + "item.copper_leggings.name": "铜护腿", + "item.copper_chestplate.name": "铜胸甲", + "item.copper_helmet.name": "铜头盔", + "tile.copper_chest.name": "铜箱子", + "tile.exposed_copper_chest.name": "斑驳铜箱子", + "tile.weathered_copper_chest.name": "风化铜箱子", + "tile.oxidized_copper_chest.name": "氧化铜箱子", + "tile.waxed_copper_chest.name": "涂蜡铜箱子", + "tile.waxed_exposed_copper_chest.name": "涂蜡斑驳铜箱子", + "tile.waxed_weathered_copper_chest.name": "涂蜡风化铜箱子", + "tile.waxed_oxidized_copper_chest.name": "涂蜡氧化铜箱子", + "tile.acacia_shelf.name": "金合欢木展示架", + "tile.bamboo_shelf.name": "竹木展示架", + "tile.birch_shelf.name": "桦树木展示架", + "tile.cherry_shelf.name": "樱花木展示架", + "tile.crimson_shelf.name": "绯红展示架", + "tile.dark_oak_shelf.name": "深色橡木展示架", + "tile.jungle_shelf.name": "丛林木展示架", + "tile.mangrove_shelf.name": "红树木展示架", + "tile.oak_shelf.name": "橡木展示架", + "tile.pale_oak_shelf.name": "苍白橡木展示架", + "tile.spruce_shelf.name": "云杉木展示架", + "tile.warped_shelf.name": "诡异展示架", + "tile.copper_golem_statue.name": "铜傀儡像", + "tile.exposed_copper_golem_statue.name": "斑驳铜傀儡像", + "tile.weathered_copper_golem_statue.name": "风化铜傀儡像", + "tile.oxidized_copper_golem_statue.name": "氧化铜傀儡像", + "tile.waxed_copper_golem_statue.name": "涂蜡铜傀儡像", + "tile.waxed_exposed_copper_golem_statue.name": "涂蜡斑驳铜傀儡像", + "tile.waxed_weathered_copper_golem_statue.name": "涂蜡风化铜傀儡像", + "tile.waxed_oxidized_copper_golem_statue.name": "涂蜡氧化铜傀儡像", + "tile.copper_chain.name": "铜链", + "tile.exposed_copper_chain.name": "斑驳铜链", + "tile.weathered_copper_chain.name": "风化铜链", + "tile.oxidized_copper_chain.name": "氧化铜链", + "tile.waxed_copper_chain.name": "涂蜡铜链", + "tile.waxed_exposed_copper_chain.name": "涂蜡斑驳铜链", + "tile.waxed_weathered_copper_chain.name": "涂蜡风化铜链", + "tile.waxed_oxidized_copper_chain.name": "涂蜡氧化铜链", + "tile.copper_bars.name": "铜栏杆", + "tile.exposed_copper_bars.name": "斑驳铜栏杆", + "tile.weathered_copper_bars.name": "风化铜栏杆", + "tile.oxidized_copper_bars.name": "氧化铜栏杆", + "tile.waxed_copper_bars.name": "涂蜡铜栏杆", + "tile.waxed_exposed_copper_bars.name": "涂蜡斑驳铜栏杆", + "tile.waxed_weathered_copper_bars.name": "涂蜡风化铜栏杆", + "tile.waxed_oxidized_copper_bars.name": "涂蜡氧化铜栏杆", + "tile.copper_lantern.name": "铜灯笼", + "tile.exposed_copper_lantern.name": "斑驳铜铜灯笼", + "tile.weathered_copper_lantern.name": "风化铜灯笼", + "tile.oxidized_copper_lantern.name": "氧化铜灯笼", + "tile.waxed_copper_lantern.name": "涂蜡铜灯笼", + "tile.waxed_exposed_copper_lantern.name": "涂蜡斑驳铜灯笼", + "tile.waxed_weathered_copper_lantern.name": "涂蜡风化铜灯笼", + "tile.waxed_oxidized_copper_lantern.name": "涂蜡氧化铜灯笼", + "tile.copper_torch.name": "铜火把", + "tile.iron_chain.name": "铁链" }, "zh_TW": { "enchantment.arrowDamage": "力量", @@ -40153,7 +40046,7 @@ export const langs: Langs = { "enchantment.fire": "烈火", "enchantment.fishingSpeed": "魚餌", "enchantment.frostwalker": "冰霜行者", - "enchantment.heavy_weapon.breach": "裂口", + "enchantment.heavy_weapon.breach": "缺口", "enchantment.heavy_weapon.density": "密度", "enchantment.heavy_weapon.windburst": "風爆", "enchantment.knockback": "擊退", @@ -40188,8 +40081,8 @@ export const langs: Langs = { "enchantment.tridentRiptide": "激流", "enchantment.tridentImpaling": "貫穿", "entity.area_effect_cloud.name": "區域效果雲", - "entity.armadillo.name": "犰狳號", - "entity.armor_stand.name": "盔甲座", + "entity.armadillo.name": "犰狳", + "entity.armor_stand.name": "護甲座", "entity.arrow.name": "箭", "entity.bat.name": "蝙蝠", "entity.bee.name": "蜜蜂", @@ -40198,7 +40091,7 @@ export const langs: Langs = { "entity.bogged.name": "沼澤骷髏", "entity.breeze.name": "微風", "entity.breeze_wind_charge_projectile.name": "風彈", - "entity.cat.name": "貓", + "entity.cat.name": "小貓", "entity.cave_spider.name": "洞穴蜘蛛", "entity.chicken.name": "雞", "entity.cow.name": "乳牛", @@ -40333,7 +40226,7 @@ export const langs: Langs = { "item.golden_apple.name": "金蘋果", "item.appleEnchanted.name": "魔法金蘋果", "item.armadillo_scute.name": "犰狳鱗甲", - "item.armor_stand.name": "盔甲座", + "item.armor_stand.name": "護甲座", "item.arrow.name": "箭", "item.tipped_arrow.name": "藥水箭", "item.banner.black.name": "黑色旗幟", @@ -41269,7 +41162,7 @@ export const langs: Langs = { "item.flint_and_steel.name": "打火鐮", "item.flower_pot.name": "花盆", "item.frame.name": "物品框架", - "item.ghast_tear.name": "幽靈之淚", + "item.ghast_tear.name": "地獄幽靈之淚", "item.glass_bottle.name": "玻璃瓶", "item.gold_nugget.name": "金粒", "item.iron_nugget.name": "鐵粒", @@ -41293,6 +41186,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "鑽石馬鎧", "item.horsearmorgold.name": "黃金馬鎧", "item.horsearmoriron.name": "鐵馬鎧", + "item.copper_horse_armor.name": "銅製馬鎧", "item.horsearmorleather.name": "皮馬鎧", "item.gold_ingot.name": "黃金錠塊", "item.iron_ingot.name": "鐵錠塊", @@ -41476,6 +41370,8 @@ export const langs: Langs = { "item.record_creator.desc": "莉娜雷恩 - 創作者", "item.record_creator_music_box.desc": "莉娜雷恩 - 創作者 (音樂盒)", "item.record_precipice.desc": "亞倫切羅夫 - 懸崖峭壁", + "item.record_tears.desc": "Amos Roddy - 流淚", + "item.record_lava_chicken.desc": "超級藥水 - 熔岩雞", "item.redstone.name": "紅石塵", "item.reeds.name": "甘蔗", "item.kelp.name": "大海帶", @@ -41712,8 +41608,8 @@ export const langs: Langs = { "potion.turtleMaster": "緩慢", "potion.turtleMaster2": "抗性", "potion.turtleMaster.name": "海龜大師藥水", - "potion.turtleMaster.splash.name": "噴濺型烏龜大師藥水", - "potion.turtleMaster.linger.name": "滯留型烏龜大師藥水", + "potion.turtleMaster.splash.name": "噴濺海龜大師藥水", + "potion.turtleMaster.linger.name": "滯留海龜大師藥水", "potion.waterBreathing": "水下呼吸", "potion.waterBreathing.name": "水下呼吸藥水", "potion.waterBreathing.splash.name": "噴濺型水下呼吸藥水", @@ -41876,7 +41772,7 @@ export const langs: Langs = { "tile.bamboo_planks.name": "竹材", "tile.bamboo_pressure_plate.name": "竹子壓板", "tile.bamboo_slab.name": "竹板", - "tile.bamboo_stairs.name": "竹梯", + "tile.bamboo_stairs.name": "竹子階梯", "tile.bamboo_trapdoor.name": "竹子地板門", "tile.calibrated_sculk_sensor.name": "校準伏聆振測器", "tile.cherry_button.name": "櫻花木按鈕", @@ -41933,7 +41829,7 @@ export const langs: Langs = { "tile.anvil.slightlyDamaged.name": "破損的鐵砧", "tile.anvil.veryDamaged.name": "損壞的鐵砧", "tile.barrier.name": "屏障", - "tile.beacon.name": "烽火台", + "tile.beacon.name": "燈塔", "tile.beacon.primary": "主要效果", "tile.beacon.secondary": "次要效果", "tile.beacon.primary.pocket": "主要", @@ -42275,6 +42171,13 @@ export const langs: Langs = { "tile.glowstone.name": "螢光石", "tile.glow_lichen.name": "發光地衣", "tile.lightning_rod.name": "避雷針", + "tile.exposed_lightning_rod.name": "外露避雷針", + "tile.weathered_lightning_rod.name": "風化避雷針", + "tile.oxidized_lightning_rod.name": "氧化避雷針", + "tile.waxed_lightning_rod.name": "塗蠟避雷針", + "tile.waxed_exposed_lightning_rod.name": "塗蠟外露避雷針", + "tile.waxed_weathered_lightning_rod.name": "塗蠟風化避雷針", + "tile.waxed_oxidized_lightning_rod.name": "塗蠟氧化避雷針", "tile.lit_pumpkin.name": "南瓜燈", "tile.lockedchest.name": "上鎖的箱子", "tile.log.acacia.name": "相思樹原木", @@ -42885,12 +42788,97 @@ export const langs: Langs = { "tile.wildflowers.name": "野花", "tile.firefly_bush.name": "螢火蟲野地", "tile.bush.name": "野地", - "tile.leaf_litter.name": "沙沙作響的樹葉", + "tile.leaf_litter.name": "散落的樹葉", "tile.cactus_flower.name": "仙人掌花朵", "item.brown_egg.name": "棕色蛋", "item.blue_egg.name": "藍色蛋", "tile.short_dry_grass.name": "稀疏乾草", - "tile.tall_dry_grass.name": "茂密乾草" + "tile.tall_dry_grass.name": "茂密乾草", + "entity.happy_ghast.name": "快樂地獄幽靈", + "item.spawn_egg.entity.happy_ghast.name": "快樂地獄幽靈生成蛋", + "tile.dried_ghast.name": "乾枯地獄幽靈", + "item.black_harness.name": "黑色挽具", + "item.blue_harness.name": "藍色挽具", + "item.brown_harness.name": "棕色挽具", + "item.cyan_harness.name": "青綠色挽具", + "item.gray_harness.name": "灰色挽具", + "item.green_harness.name": "綠色挽具", + "item.light_blue_harness.name": "淺藍色挽具", + "item.light_gray_harness.name": "淺灰色挽具", + "item.lime_harness.name": "淡黃綠色挽具", + "item.magenta_harness.name": "洋紅色挽具", + "item.orange_harness.name": "橙色挽具", + "item.pink_harness.name": "粉紅色挽具", + "item.purple_harness.name": "紫色挽具", + "item.red_harness.name": "紅色挽具", + "item.white_harness.name": "白色挽具", + "item.yellow_harness.name": "黃色挽具", + "entity.copper_golem.name": "銅魔像", + "item.spawn_egg.entity.copper_golem.name": "銅魔像生成蛋", + "item.copper_nugget.name": "銅粒", + "item.copper_sword.name": "銅劍", + "item.copper_pickaxe.name": "銅鎬", + "item.copper_axe.name": "銅斧", + "item.copper_shovel.name": "銅鏟", + "item.copper_hoe.name": "銅鋤頭", + "item.copper_boots.name": "銅製靴子", + "item.copper_leggings.name": "銅製護腿", + "item.copper_chestplate.name": "銅製胸甲", + "item.copper_helmet.name": "銅製頭盔", + "tile.copper_chest.name": "銅儲物箱", + "tile.exposed_copper_chest.name": "外露的銅儲物箱", + "tile.weathered_copper_chest.name": "風化的銅儲物箱", + "tile.oxidized_copper_chest.name": "氧化的銅儲物箱", + "tile.waxed_copper_chest.name": "塗蠟的銅儲物箱", + "tile.waxed_exposed_copper_chest.name": "上蠟的外露銅儲物箱", + "tile.waxed_weathered_copper_chest.name": "上蠟的風化銅儲物箱", + "tile.waxed_oxidized_copper_chest.name": "上蠟的氧化銅儲物箱", + "tile.acacia_shelf.name": "相思木展示架", + "tile.bamboo_shelf.name": "竹子展示架", + "tile.birch_shelf.name": "樺木展示架", + "tile.cherry_shelf.name": "櫻花木展示架", + "tile.crimson_shelf.name": "緋紅展示架", + "tile.dark_oak_shelf.name": "黑橡木展示架", + "tile.jungle_shelf.name": "叢林展示架", + "tile.mangrove_shelf.name": "紅樹林展示架", + "tile.oak_shelf.name": "橡木展示架", + "tile.pale_oak_shelf.name": "蒼白橡木展示架", + "tile.spruce_shelf.name": "杉木展示架", + "tile.warped_shelf.name": "扭曲展示架", + "tile.copper_golem_statue.name": "銅像", + "tile.exposed_copper_golem_statue.name": "外露的銅方塊銅像", + "tile.weathered_copper_golem_statue.name": "風化的銅像", + "tile.oxidized_copper_golem_statue.name": "氧化的銅方塊銅像", + "tile.waxed_copper_golem_statue.name": "塗蠟的銅像", + "tile.waxed_exposed_copper_golem_statue.name": "上蠟的外露銅像", + "tile.waxed_weathered_copper_golem_statue.name": "上蠟的風化銅像", + "tile.waxed_oxidized_copper_golem_statue.name": "上蠟的氧化銅像", + "tile.copper_chain.name": "銅鏈", + "tile.exposed_copper_chain.name": "外露的銅鏈", + "tile.weathered_copper_chain.name": "風化的銅鏈", + "tile.oxidized_copper_chain.name": "氧化的銅鏈", + "tile.waxed_copper_chain.name": "上蠟的銅鏈", + "tile.waxed_exposed_copper_chain.name": "上蠟的外露銅鏈", + "tile.waxed_weathered_copper_chain.name": "上蠟的風化銅鏈", + "tile.waxed_oxidized_copper_chain.name": "上蠟的氧化銅鏈", + "tile.copper_bars.name": "銅柵欄", + "tile.exposed_copper_bars.name": "外露的銅柵欄", + "tile.weathered_copper_bars.name": "風化的銅柵欄", + "tile.oxidized_copper_bars.name": "氧化的銅柵欄", + "tile.waxed_copper_bars.name": "上蠟的銅柵欄", + "tile.waxed_exposed_copper_bars.name": "上蠟的外露銅柵欄", + "tile.waxed_weathered_copper_bars.name": "上蠟的風化銅柵欄", + "tile.waxed_oxidized_copper_bars.name": "上蠟的氧化銅柵欄", + "tile.copper_lantern.name": "銅燈籠", + "tile.exposed_copper_lantern.name": "外露的銅燈籠", + "tile.weathered_copper_lantern.name": "風化的銅燈籠", + "tile.oxidized_copper_lantern.name": "氧化的銅燈籠", + "tile.waxed_copper_lantern.name": "上蠟的銅燈籠", + "tile.waxed_exposed_copper_lantern.name": "上蠟的外露銅燈籠", + "tile.waxed_weathered_copper_lantern.name": "上蠟的風化銅燈籠", + "tile.waxed_oxidized_copper_lantern.name": "上蠟的氧化銅燈籠", + "tile.copper_torch.name": "銅火把", + "tile.iron_chain.name": "鐵鎖鏈" }, "nl_NL": { "enchantment.arrowDamage": "Kracht", @@ -42910,7 +42898,7 @@ export const langs: Langs = { "enchantment.fire": "Vuuraspect", "enchantment.fishingSpeed": "Lokaas", "enchantment.frostwalker": "IJsloper", - "enchantment.heavy_weapon.breach": "Ontsnapping", + "enchantment.heavy_weapon.breach": "Schending", "enchantment.heavy_weapon.density": "Dichtheid", "enchantment.heavy_weapon.windburst": "Windstoot", "enchantment.knockback": "Terugslag", @@ -44050,6 +44038,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Diamanten paardenpantser", "item.horsearmorgold.name": "Gouden paardenpantser", "item.horsearmoriron.name": "IJzeren paardenpantser", + "item.copper_horse_armor.name": "Koperen paardenharnas", "item.horsearmorleather.name": "Leren paardenpantser", "item.gold_ingot.name": "Goudstaaf", "item.iron_ingot.name": "IJzerstaaf", @@ -44233,6 +44222,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Maker", "item.record_creator_music_box.desc": "Lena Raine - Maker (muziekdoos)", "item.record_precipice.desc": "Aaron Cherof - Afgrond", + "item.record_tears.desc": "Amos Roddy - Tears", + "item.record_lava_chicken.desc": "Hyperdrankjes - Lavakip", "item.redstone.name": "Redstone-stof", "item.reeds.name": "Suikerriet", "item.kelp.name": "Kelp", @@ -44491,7 +44482,7 @@ export const langs: Langs = { "potion.wither.name": "Drankje van Verval", "potion.wither.splash.name": "Spattende drank der verschrompeling", "potion.wither.linger.name": "Aanhoudende drank der verschrompeling", - "tile.sculk_sensor.name": "Sluipsensor", + "tile.sculk_sensor.name": "Sculksensor", "tile.sculk.name": "Sculk", "tile.sculk_vein.name": "Sculkader", "tile.sculk_catalyst.name": "Sculkkatalysator", @@ -45032,6 +45023,13 @@ export const langs: Langs = { "tile.glowstone.name": "Gloeisteen", "tile.glow_lichen.name": "Gloeikorstmos", "tile.lightning_rod.name": "Bliksemafleider", + "tile.exposed_lightning_rod.name": "Blootgestelde bliksemafleider", + "tile.weathered_lightning_rod.name": "Verweerde bliksemafleider", + "tile.oxidized_lightning_rod.name": "Geoxideerde bliksemafleider", + "tile.waxed_lightning_rod.name": "Gewaxte bliksemafleider", + "tile.waxed_exposed_lightning_rod.name": "Gewaxte blootgestelde bliksemafleider", + "tile.waxed_weathered_lightning_rod.name": "Gewaxte verweerde bliksemafleider", + "tile.waxed_oxidized_lightning_rod.name": "Gewaxte geoxideerde bliksemafleider", "tile.lit_pumpkin.name": "Dwaallicht", "tile.lockedchest.name": "Gesloten kist", "tile.log.acacia.name": "Acacia stronk", @@ -45627,7 +45625,7 @@ export const langs: Langs = { "tile.green_candle_cake.name": "Taart met groene kaars", "tile.red_candle_cake.name": "Taart met rode kaars", "tile.black_candle_cake.name": "Taart met zwarte kaars", - "item.spyglass.name": "Verrekijker", + "item.spyglass.name": "Kijker", "item.amethyst_shard.name": "Amethistscherf", "tile.amethyst_block.name": "Amethistblok", "tile.budding_amethyst.name": "Scheutvormend amethist", @@ -45647,7 +45645,92 @@ export const langs: Langs = { "item.brown_egg.name": "Bruin ei", "item.blue_egg.name": "Blauw ei", "tile.short_dry_grass.name": "Kort droog gras", - "tile.tall_dry_grass.name": "Lang droog gras" + "tile.tall_dry_grass.name": "Lang droog gras", + "entity.happy_ghast.name": "Gelukkige Ghast", + "item.spawn_egg.entity.happy_ghast.name": "Gelukkig Ghastspawnei", + "tile.dried_ghast.name": "Gedroogde Ghast", + "item.black_harness.name": "Zwart harnas", + "item.blue_harness.name": "Blauw harnas", + "item.brown_harness.name": "Bruin harnas", + "item.cyan_harness.name": "Cyaanblauw harnas", + "item.gray_harness.name": "Grijs harnas", + "item.green_harness.name": "Groen harnas", + "item.light_blue_harness.name": "Lichtblauw harnas", + "item.light_gray_harness.name": "Lichtgrijs harnas", + "item.lime_harness.name": "Limoengroen harnas", + "item.magenta_harness.name": "Magenta harnas", + "item.orange_harness.name": "Oranje harnas", + "item.pink_harness.name": "Roze harnas", + "item.purple_harness.name": "Paars harnas", + "item.red_harness.name": "Rood harnas", + "item.white_harness.name": "Wit harnas", + "item.yellow_harness.name": "Geel harnas", + "entity.copper_golem.name": "Kopergolem", + "item.spawn_egg.entity.copper_golem.name": "Kopergolemspawnei", + "item.copper_nugget.name": "Koperklompje", + "item.copper_sword.name": "Koperen zwaard", + "item.copper_pickaxe.name": "Koperen houweel", + "item.copper_axe.name": "Koperen bijl", + "item.copper_shovel.name": "Koperen schep", + "item.copper_hoe.name": "Koperen schoffel", + "item.copper_boots.name": "Koperen laarzen", + "item.copper_leggings.name": "Koperen beenstukken", + "item.copper_chestplate.name": "Koperen borstplaat", + "item.copper_helmet.name": "Koperen helm", + "tile.copper_chest.name": "Koperen kist", + "tile.exposed_copper_chest.name": "Blootgestelde koperen kist", + "tile.weathered_copper_chest.name": "Verweerde koperen kist", + "tile.oxidized_copper_chest.name": "Geoxideerde koperen kist", + "tile.waxed_copper_chest.name": "Gewaxt koperen kist", + "tile.waxed_exposed_copper_chest.name": "Gewaxte blootgestelde koperen kist", + "tile.waxed_weathered_copper_chest.name": "Gewaxte verweerde koperen kist", + "tile.waxed_oxidized_copper_chest.name": "Gewaxte geoxideerde koperen kist", + "tile.acacia_shelf.name": "Acacia schap", + "tile.bamboo_shelf.name": "Bamboe schap", + "tile.birch_shelf.name": "Berken schap", + "tile.cherry_shelf.name": "Kersen schap", + "tile.crimson_shelf.name": "Karmijnrode schap", + "tile.dark_oak_shelf.name": "Donkereiken schap", + "tile.jungle_shelf.name": "Jungle schap", + "tile.mangrove_shelf.name": "Mangrovehouten schap", + "tile.oak_shelf.name": "Eiken schap", + "tile.pale_oak_shelf.name": "Lichteiken schap", + "tile.spruce_shelf.name": "Sparren schap", + "tile.warped_shelf.name": "Warblauwe schap", + "tile.copper_golem_statue.name": "Kopergolemstandbeeldbeeld", + "tile.exposed_copper_golem_statue.name": "Blootgesteld kopergolemstandbeeld", + "tile.weathered_copper_golem_statue.name": "Verweerd kopergolemstandbeeld", + "tile.oxidized_copper_golem_statue.name": "Geoxideerd kopergolemstandbeeld", + "tile.waxed_copper_golem_statue.name": "Gewaxt kopergolemstandbeeld", + "tile.waxed_exposed_copper_golem_statue.name": "Gewaxt blootgesteld kopergolemstandbeeld", + "tile.waxed_weathered_copper_golem_statue.name": "Gewaxt verweerd kopergolemstandbeeld", + "tile.waxed_oxidized_copper_golem_statue.name": "Gewaxt geoxideerd kopergolemstandbeeld", + "tile.copper_chain.name": "Koperen ketting", + "tile.exposed_copper_chain.name": "Blootgestelde koperen ketting", + "tile.weathered_copper_chain.name": "Verweerde koperen ketting", + "tile.oxidized_copper_chain.name": "Geoxideerde koperen ketting", + "tile.waxed_copper_chain.name": "Gewaxte koperen ketting", + "tile.waxed_exposed_copper_chain.name": "Gewaxte blootgestelde koperen ketting", + "tile.waxed_weathered_copper_chain.name": "Gewaxte verweerde koperen ketting", + "tile.waxed_oxidized_copper_chain.name": "Gewaxte geoxideerde koperen ketting", + "tile.copper_bars.name": "Koperen tralies", + "tile.exposed_copper_bars.name": "Blootgestelde koperen tralies", + "tile.weathered_copper_bars.name": "Verweerde koperen tralies", + "tile.oxidized_copper_bars.name": "Geoxideerde koperen tralies", + "tile.waxed_copper_bars.name": "Gewaxte koperen tralies", + "tile.waxed_exposed_copper_bars.name": "Gewaxte blootgestelde koperen tralies", + "tile.waxed_weathered_copper_bars.name": "Gewaxte verweerde koperen tralies", + "tile.waxed_oxidized_copper_bars.name": "Gewaxte geoxideerde koperen tralies", + "tile.copper_lantern.name": "Koperen lantaarn", + "tile.exposed_copper_lantern.name": "Blootgestelde koperen lantaarn", + "tile.weathered_copper_lantern.name": "Verweerde koperen lantaarn", + "tile.oxidized_copper_lantern.name": "Geoxideerd koperen lantaarn", + "tile.waxed_copper_lantern.name": "Gewaxte koperen lantaarn", + "tile.waxed_exposed_copper_lantern.name": "Gewaxte blootgestelde koperen lantaarn", + "tile.waxed_weathered_copper_lantern.name": "Gewaxte verweerde koperen lantaarn", + "tile.waxed_oxidized_copper_lantern.name": "Gewaxte geoxideerde koperen lantaarn", + "tile.copper_torch.name": "Koperfakkel", + "tile.iron_chain.name": "IJzeren ketting" }, "bg_BG": { "enchantment.arrowDamage": "Сила", @@ -45841,7 +45924,7 @@ export const langs: Langs = { "item.axolotlBabyBodySingle.name": "Бебе аксолотъл %1$s", "item.axolotlColorLucy.name": "Левцистичен", "item.axolotlColorCyan.name": "Цианов", - "item.axolotlColorGold.name": "Златен", + "item.axolotlColorGold.name": "Злато", "item.axolotlColorWild.name": "Кафяв", "item.axolotlColorBlue.name": "Син", "item.golden_apple.name": "Златна ябълка", @@ -45990,7 +46073,7 @@ export const langs: Langs = { "item.banner.diagonal_up_left.green": "Зелен по обратен диагонал", "item.banner.diagonal_up_left.lightBlue": "Светлосин по обратен диагонал", "item.banner.diagonal_up_left.lime": "Лимоненозелен по обратен диагонал", - "item.banner.diagonal_up_left.magenta": "В магента по обратен диагонал", + "item.banner.diagonal_up_left.magenta": "Магента по обратен диагонал", "item.banner.diagonal_up_left.orange": "Оранжев по обратен диагонал", "item.banner.diagonal_up_left.pink": "Розов по обратен диагонал", "item.banner.diagonal_up_left.purple": "Лилав по обратен диагонал", @@ -45998,22 +46081,22 @@ export const langs: Langs = { "item.banner.diagonal_up_left.silver": "Светлосив по обратен диагонал", "item.banner.diagonal_up_left.white": "Бял по обратен диагонал", "item.banner.diagonal_up_left.yellow": "Жълт по обратен диагонал", - "item.banner.diagonal_up_right.black": "Черен по обратен диагонал отдясно", - "item.banner.diagonal_up_right.blue": "Син по обратен диагонал отдясно", - "item.banner.diagonal_up_right.brown": "Кафяв по обратен диагонал отдясно", - "item.banner.diagonal_up_right.cyan": "Цианов по обратен диагонал отдясно", - "item.banner.diagonal_up_right.gray": "Сив по обратен диагонал отдясно", - "item.banner.diagonal_up_right.green": "Зелен по обратен диагонал отдясно", - "item.banner.diagonal_up_right.lightBlue": "Светлосин по обратен диагонал отдясно", - "item.banner.diagonal_up_right.lime": "Лимоненозелен по обратен диагонал отдясно", - "item.banner.diagonal_up_right.magenta": "Магента по обратен диагонал отдясно", - "item.banner.diagonal_up_right.orange": "Оранжев по обратен диагонал отдясно", - "item.banner.diagonal_up_right.pink": "Розов по обратен диагонал отдясно", - "item.banner.diagonal_up_right.purple": "Лилав по обратен диагонал отдясно", - "item.banner.diagonal_up_right.red": "Червен по обратен диагонал отдясно", - "item.banner.diagonal_up_right.silver": "Светлосив по обратен диагонал отдясно", - "item.banner.diagonal_up_right.white": "Бял по обратен диагонал отдясно", - "item.banner.diagonal_up_right.yellow": "Жълт по обратен диагонал отдясно", + "item.banner.diagonal_up_right.black": "Черен по обратен диагонал отляво", + "item.banner.diagonal_up_right.blue": "Син по обратен диагонал отляво", + "item.banner.diagonal_up_right.brown": "Кафяв по обратен диагонал отляво", + "item.banner.diagonal_up_right.cyan": "Цианов по обратен диагонал отляво", + "item.banner.diagonal_up_right.gray": "Сив по обратен диагонал отляво", + "item.banner.diagonal_up_right.green": "Зелен по обратен диагонал отляво", + "item.banner.diagonal_up_right.lightBlue": "Светлосин по обратен диагонал отляво", + "item.banner.diagonal_up_right.lime": "Лимоненозелен по обратен диагонал отляво", + "item.banner.diagonal_up_right.magenta": "Магента по обратен диагонал отляво", + "item.banner.diagonal_up_right.orange": "Оранжев по обратен диагонал отляво", + "item.banner.diagonal_up_right.pink": "Розов по обратен диагонал отляво", + "item.banner.diagonal_up_right.purple": "Лилав по обратен диагонал отляво", + "item.banner.diagonal_up_right.red": "Червен по обратен диагонал отляво", + "item.banner.diagonal_up_right.silver": "Светлосив по обратен диагонал отляво", + "item.banner.diagonal_up_right.white": "Бял по обратен диагонал отляво", + "item.banner.diagonal_up_right.yellow": "Жълт по обратен диагонал отляво", "item.banner.flow.black": "Черен поток", "item.banner.flow.blue": "Син поток", "item.banner.flow.brown": "Кафяв поток", @@ -46807,6 +46890,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Диамантена конска броня", "item.horsearmorgold.name": "Златна конска броня", "item.horsearmoriron.name": "Желязна конска броня", + "item.copper_horse_armor.name": "Медна конска броня", "item.horsearmorleather.name": "Кожена конска броня", "item.gold_ingot.name": "Златно кюлче", "item.iron_ingot.name": "Железен слитък", @@ -46990,6 +47074,8 @@ export const langs: Langs = { "item.record_creator.desc": "Лена Рейн – Създател", "item.record_creator_music_box.desc": "Лена Рейн – Създател (Музикална кутия)", "item.record_precipice.desc": "Аарън Черов – Пропаст", + "item.record_tears.desc": "Amos Roddy – Tears", + "item.record_lava_chicken.desc": "Хиперотвари – Лавна кокошка", "item.redstone.name": "Прах от червен камък", "item.reeds.name": "Захарна тръстика", "item.kelp.name": "Келп", @@ -47472,7 +47558,7 @@ export const langs: Langs = { "tile.big_dripleaf.name": "Голямо висящо листо", "tile.small_dripleaf_block.name": "Малко висящо листо", "tile.hanging_roots.name": "Висящи корени", - "tile.dirt_with_roots.name": "Вкоренена пръст", + "tile.dirt_with_roots.name": "Пръст с корени", "tile.spore_blossom.name": "Цвят на спори", "tile.azalea_leaves.name": "Листа от азалия", "tile.azalea_leaves_flowered.name": "Листа от цъфтяща азалия", @@ -47789,6 +47875,13 @@ export const langs: Langs = { "tile.glowstone.name": "Светлинен камък", "tile.glow_lichen.name": "Светещ лишей", "tile.lightning_rod.name": "Гръмоотвод", + "tile.exposed_lightning_rod.name": "Изложен гръмоотвод", + "tile.weathered_lightning_rod.name": "Ерозирал гръмоотвод", + "tile.oxidized_lightning_rod.name": "Окислен гръмоотвод", + "tile.waxed_lightning_rod.name": "Намазан с восък гръмоотвод", + "tile.waxed_exposed_lightning_rod.name": "Намазан с восък изложен гръмоотвод", + "tile.waxed_weathered_lightning_rod.name": "Намазан с восък ерозирал гръмоотвод", + "tile.waxed_oxidized_lightning_rod.name": "Намазан с восък окислен гръмоотвод", "tile.lit_pumpkin.name": "Тиквен фенер", "tile.lockedchest.name": "Заключен сандък", "tile.log.acacia.name": "Дънер от акация", @@ -48404,7 +48497,92 @@ export const langs: Langs = { "item.brown_egg.name": "Кафяво яйце", "item.blue_egg.name": "Синьо яйце", "tile.short_dry_grass.name": "Ниска суха трева", - "tile.tall_dry_grass.name": "Висока суха трева" + "tile.tall_dry_grass.name": "Висока суха трева", + "entity.happy_ghast.name": "Щастлив огнен призрак", + "item.spawn_egg.entity.happy_ghast.name": "Яйце за извикване на щастлив огнен призрак", + "tile.dried_ghast.name": "Изсушен огнен призрак", + "item.black_harness.name": "Черна сбруя", + "item.blue_harness.name": "Синя сбруя", + "item.brown_harness.name": "Кафява сбруя", + "item.cyan_harness.name": "Цианова сбруя", + "item.gray_harness.name": "Сива сбруя", + "item.green_harness.name": "Зелена сбруя", + "item.light_blue_harness.name": "Светлосиня сбруя", + "item.light_gray_harness.name": "Светлосива сбруя", + "item.lime_harness.name": "Лимоненозелена сбруя", + "item.magenta_harness.name": "Сбруя в магента", + "item.orange_harness.name": "Оранжева сбруя", + "item.pink_harness.name": "Розова сбруя", + "item.purple_harness.name": "Лилава сбруя", + "item.red_harness.name": "Червена сбруя", + "item.white_harness.name": "Бяла сбруя", + "item.yellow_harness.name": "Жълта сбруя", + "entity.copper_golem.name": "Mеден голем", + "item.spawn_egg.entity.copper_golem.name": "Яйце за извикване на меден голем", + "item.copper_nugget.name": "Меден къшей", + "item.copper_sword.name": "Меден меч", + "item.copper_pickaxe.name": "Медна кирка", + "item.copper_axe.name": "Медна брадва", + "item.copper_shovel.name": "Медна лопата", + "item.copper_hoe.name": "Медна мотика", + "item.copper_boots.name": "Медни ботуши", + "item.copper_leggings.name": "Медни панталони", + "item.copper_chestplate.name": "Меден нагръдник", + "item.copper_helmet.name": "Меден шлем", + "tile.copper_chest.name": "Меден сандък", + "tile.exposed_copper_chest.name": "Изложен меден сандък", + "tile.weathered_copper_chest.name": "Ерозирал меден сандък", + "tile.oxidized_copper_chest.name": "Окислен меден сандък", + "tile.waxed_copper_chest.name": "Намазан с восък меден сандък", + "tile.waxed_exposed_copper_chest.name": "Намазан с восък изложен меден сандък", + "tile.waxed_weathered_copper_chest.name": "Намазан с восък ерозирал меден сандък", + "tile.waxed_oxidized_copper_chest.name": "Намазан с восък окислен меден сандък", + "tile.acacia_shelf.name": "Акациев рафт", + "tile.bamboo_shelf.name": "Бамбуков рафт", + "tile.birch_shelf.name": "Брезов рафт", + "tile.cherry_shelf.name": "Черешов рафт", + "tile.crimson_shelf.name": "Пурпурен рафт", + "tile.dark_oak_shelf.name": "Рафт от тъмен дъб", + "tile.jungle_shelf.name": "Рафт от джунглата", + "tile.mangrove_shelf.name": "Рафт от мангрово дърво", + "tile.oak_shelf.name": "Рафт от дъб", + "tile.pale_oak_shelf.name": "Рафт от бял дъб", + "tile.spruce_shelf.name": "Смърчов рафт", + "tile.warped_shelf.name": "Изопачен рафт", + "tile.copper_golem_statue.name": "Статуя на меден голем", + "tile.exposed_copper_golem_statue.name": "Статуя на изложен меден голем", + "tile.weathered_copper_golem_statue.name": "Статуя на ерозирал меден голем", + "tile.oxidized_copper_golem_statue.name": "Статуя на окислен меден голем", + "tile.waxed_copper_golem_statue.name": "Статуя на намазан с восък меден голем", + "tile.waxed_exposed_copper_golem_statue.name": "Статуя на намазан с восък изложен меден голем", + "tile.waxed_weathered_copper_golem_statue.name": "Статуя на намазан с восък ерозирал меден голем", + "tile.waxed_oxidized_copper_golem_statue.name": "Статуя на намазан с восък окислен меден голем", + "tile.copper_chain.name": "Медна верига", + "tile.exposed_copper_chain.name": "Изложена медна верига", + "tile.weathered_copper_chain.name": "Ерозирала медна верига", + "tile.oxidized_copper_chain.name": "Окислена медна верига", + "tile.waxed_copper_chain.name": "Намазана с восък медна верига", + "tile.waxed_exposed_copper_chain.name": "Намазана с восък изложена медна верига", + "tile.waxed_weathered_copper_chain.name": "Намазана с восък ерозирала медна верига", + "tile.waxed_oxidized_copper_chain.name": "Намазана с восък окислена медна верига", + "tile.copper_bars.name": "Медни решетки", + "tile.exposed_copper_bars.name": "Изложени медни решетки", + "tile.weathered_copper_bars.name": "Ерозирали медни решетки", + "tile.oxidized_copper_bars.name": "Окислени медни решетки", + "tile.waxed_copper_bars.name": "Намазани с восък медни решетки", + "tile.waxed_exposed_copper_bars.name": "Намазани с восък изложени медни решетки", + "tile.waxed_weathered_copper_bars.name": "Намазани с восък ерозирали медни решетки", + "tile.waxed_oxidized_copper_bars.name": "Намазани с восък окислени медни решетки", + "tile.copper_lantern.name": "Меден фенер", + "tile.exposed_copper_lantern.name": "Изложен меден фенер", + "tile.weathered_copper_lantern.name": "Ерозирал меден фенер", + "tile.oxidized_copper_lantern.name": "Окислен меден фенер", + "tile.waxed_copper_lantern.name": "Намазан с восък меден фенер", + "tile.waxed_exposed_copper_lantern.name": "Намазан с восък изложен меден фенер", + "tile.waxed_weathered_copper_lantern.name": "Намазан с восък ерозирал меден фенер", + "tile.waxed_oxidized_copper_lantern.name": "Намазан с восък окислен меден фенер", + "tile.copper_torch.name": "Медна факла", + "tile.iron_chain.name": "Желязна верига" }, "cs_CZ": { "enchantment.arrowDamage": "Síla", @@ -48469,7 +48647,7 @@ export const langs: Langs = { "entity.bogged.name": "Močálový kostlivec", "entity.breeze.name": "Vánek", "entity.breeze_wind_charge_projectile.name": "Větrný náboj", - "entity.cat.name": "Kočka", + "entity.cat.name": "Cat", "entity.cave_spider.name": "Jeskynní pavouk", "entity.chicken.name": "Slepice", "entity.cow.name": "Kráva", @@ -48594,9 +48772,9 @@ export const langs: Langs = { "entity.zombie_villager_v2.name": "Zombie vesničan", "item.air.name": "Vzduch", "item.apple.name": "Jablko", - "item.axolotlAdultBodySingle.name": "Dospělý axolotl %1$s", - "item.axolotlBabyBodySingle.name": "Mládě axolotla %1$s", - "item.axolotlColorLucy.name": "Leucistická", + "item.axolotlAdultBodySingle.name": "Dospělý %1$s axolotl", + "item.axolotlBabyBodySingle.name": "Mládě %1$s axolotla", + "item.axolotlColorLucy.name": "Leucistický", "item.axolotlColorCyan.name": "Azurová", "item.axolotlColorGold.name": "Zlatá", "item.axolotlColorWild.name": "Hnědá", @@ -49022,70 +49200,70 @@ export const langs: Langs = { "item.banner.small_stripes.silver": "Světle šedé svislé pruhy", "item.banner.small_stripes.white": "Bílé svislé pruhy", "item.banner.small_stripes.yellow": "Žluté svislé pruhy", - "item.banner.square_bottom_left.black": "Černý dolní levý kanton", - "item.banner.square_bottom_left.blue": "Modrý dolní levý kanton", - "item.banner.square_bottom_left.brown": "Hnědý dolní levý kanton", - "item.banner.square_bottom_left.cyan": "Azurový dolní levý kanton", - "item.banner.square_bottom_left.gray": "Šedý dolní levý kanton", - "item.banner.square_bottom_left.green": "Zelený dolní levý kanton", - "item.banner.square_bottom_left.lightBlue": "Světle modrý dolní levý kanton", - "item.banner.square_bottom_left.lime": "Světle zelený dolní levý kanton", - "item.banner.square_bottom_left.magenta": "Purpurový dolní levý kanton", - "item.banner.square_bottom_left.orange": "Oranžový dolní levý kanton", - "item.banner.square_bottom_left.pink": "Růžový dolní levý kanton", - "item.banner.square_bottom_left.purple": "Fialový dolní levý kanton", - "item.banner.square_bottom_left.red": "Červený dolní levý kanton", - "item.banner.square_bottom_left.silver": "Světle šedý dolní levý kanton", - "item.banner.square_bottom_left.white": "Bílý dolní levý kanton", - "item.banner.square_bottom_left.yellow": "Žlutý dolní levý kanton", - "item.banner.square_bottom_right.black": "Černý dolní pravý kanton", - "item.banner.square_bottom_right.blue": "Modrý dolní pravý kanton", - "item.banner.square_bottom_right.brown": "Hnědý dolní pravý kanton", - "item.banner.square_bottom_right.cyan": "Azurový dolní pravý kanton", - "item.banner.square_bottom_right.gray": "Šedý dolní pravý kanton", - "item.banner.square_bottom_right.green": "Zelený dolní pravý kanton", - "item.banner.square_bottom_right.lightBlue": "Světle modrý dolní pravý kanton", - "item.banner.square_bottom_right.lime": "Světle zelený dolní pravý kanton", - "item.banner.square_bottom_right.magenta": "Purpurový dolní pravý kanton", - "item.banner.square_bottom_right.orange": "Oranžový dolní pravý kanton", - "item.banner.square_bottom_right.pink": "Růžový dolní pravý kanton", - "item.banner.square_bottom_right.purple": "Fialový dolní pravý kanton", - "item.banner.square_bottom_right.red": "Červený dolní pravý kanton", - "item.banner.square_bottom_right.silver": "Světle šedý dolní pravý kanton", - "item.banner.square_bottom_right.white": "Bílý dolní pravý kanton", - "item.banner.square_bottom_right.yellow": "Žlutý dolní pravý kanton", - "item.banner.square_top_left.black": "Černý horní levý kanton", - "item.banner.square_top_left.blue": "Modrý horní levý kanton", - "item.banner.square_top_left.brown": "Hnědý horní levý kanton", - "item.banner.square_top_left.cyan": "Azurový horní levý kanton", - "item.banner.square_top_left.gray": "Šedý horní levý kanton", - "item.banner.square_top_left.green": "Zelený horní levý kanton", - "item.banner.square_top_left.lightBlue": "Světle modrý horní levý kanton", - "item.banner.square_top_left.lime": "Světle zelený horní levý kanton", - "item.banner.square_top_left.magenta": "Purpurový horní levý kanton", - "item.banner.square_top_left.orange": "Oranžový horní levý kanton", - "item.banner.square_top_left.pink": "Růžový horní levý kanton", - "item.banner.square_top_left.purple": "Fialový horní levý kanton", - "item.banner.square_top_left.red": "Červený horní levý kanton", - "item.banner.square_top_left.silver": "Světle šedý horní levý kanton", - "item.banner.square_top_left.white": "Bílý horní levý kanton", - "item.banner.square_top_left.yellow": "Žlutý horní levý kanton", - "item.banner.square_top_right.black": "Černý horní pravý kanton", - "item.banner.square_top_right.blue": "Modrý horní pravý kanton", - "item.banner.square_top_right.brown": "Hnědý horní pravý kanton", - "item.banner.square_top_right.cyan": "Azurový horní pravý kanton", - "item.banner.square_top_right.gray": "Šedý horní pravý kanton", - "item.banner.square_top_right.green": "Zelený horní pravý kanton", - "item.banner.square_top_right.lightBlue": "Světle modrý horní pravý kanton", - "item.banner.square_top_right.lime": "Světle zelený horní pravý kanton", - "item.banner.square_top_right.magenta": "Purpurový horní pravý kanton", - "item.banner.square_top_right.orange": "Oranžový horní pravý kanton", - "item.banner.square_top_right.pink": "Růžový horní pravý kanton", - "item.banner.square_top_right.purple": "Fialový horní pravý kanton", - "item.banner.square_top_right.red": "Červený horní pravý kanton", - "item.banner.square_top_right.silver": "Světle šedý horní pravý kanton", - "item.banner.square_top_right.white": "Bílý horní pravý kanton", - "item.banner.square_top_right.yellow": "Žlutý horní pravý kanton", + "item.banner.square_bottom_left.black": "Černě vybarvený levý dolní roh", + "item.banner.square_bottom_left.blue": "Modře vybarvený levý dolní roh", + "item.banner.square_bottom_left.brown": "Hnědě vybarvený levý dolní roh", + "item.banner.square_bottom_left.cyan": "Azurově vybarvený levý dolní roh", + "item.banner.square_bottom_left.gray": "Šedě vybarvený levý dolní roh", + "item.banner.square_bottom_left.green": "Zeleně vybarvený levý dolní roh", + "item.banner.square_bottom_left.lightBlue": "Světle modře vybarvený levý dolní roh", + "item.banner.square_bottom_left.lime": "Světle zeleně vybarvený levý dolní roh", + "item.banner.square_bottom_left.magenta": "Purpurově vybarvený levý dolní roh", + "item.banner.square_bottom_left.orange": "Oranžově vybarvený levý dolní roh", + "item.banner.square_bottom_left.pink": "Růžově vybarvený levý dolní roh", + "item.banner.square_bottom_left.purple": "Fialově vybarvený levý dolní roh", + "item.banner.square_bottom_left.red": "Červeně vybarvený levý dolní roh", + "item.banner.square_bottom_left.silver": "Světle šedě vybarvený levý dolní roh", + "item.banner.square_bottom_left.white": "Bíle vybarvený levý dolní roh", + "item.banner.square_bottom_left.yellow": "Žlutě vybarvený levý dolní roh", + "item.banner.square_bottom_right.black": "Černě vybarvený pravý dolní roh", + "item.banner.square_bottom_right.blue": "Modře vybarvený pravý dolní roh", + "item.banner.square_bottom_right.brown": "Hnědě vybarvený pravý dolní roh", + "item.banner.square_bottom_right.cyan": "Azurově vybarvený pravý dolní roh", + "item.banner.square_bottom_right.gray": "Šedě vybarvený pravý dolní roh", + "item.banner.square_bottom_right.green": "Zeleně vybarvený pravý dolní roh", + "item.banner.square_bottom_right.lightBlue": "Světle modře vybarvený pravý dolní roh", + "item.banner.square_bottom_right.lime": "Světle zeleně vybarvený pravý dolní roh", + "item.banner.square_bottom_right.magenta": "Purpurově vybarvený pravý dolní roh", + "item.banner.square_bottom_right.orange": "Oranžově vybarvený pravý dolní roh", + "item.banner.square_bottom_right.pink": "Růžově vybarvený pravý dolní roh", + "item.banner.square_bottom_right.purple": "Fialově vybarvený pravý dolní roh", + "item.banner.square_bottom_right.red": "Červeně vybarvený pravý dolní roh", + "item.banner.square_bottom_right.silver": "Světle šedě vybarvený pravý dolní roh", + "item.banner.square_bottom_right.white": "Bíle vybarvený pravý dolní roh", + "item.banner.square_bottom_right.yellow": "Žlutě vybarvený pravý dolní roh", + "item.banner.square_top_left.black": "Černě vybarvený levý horní roh", + "item.banner.square_top_left.blue": "Modře vybarvený levý horní roh", + "item.banner.square_top_left.brown": "Hnědě vybarvený levý horní roh", + "item.banner.square_top_left.cyan": "Azurově vybarvený levý horní roh", + "item.banner.square_top_left.gray": "Šedě vybarvený levý horní roh", + "item.banner.square_top_left.green": "Zeleně vybarvený levý horní roh", + "item.banner.square_top_left.lightBlue": "Světle modře vybarvený levý horní roh", + "item.banner.square_top_left.lime": "Světle zeleně vybarvený levý horní roh", + "item.banner.square_top_left.magenta": "Purpurově vybarvený levý horní roh", + "item.banner.square_top_left.orange": "Oranžově vybarvený levý horní roh", + "item.banner.square_top_left.pink": "Růžově vybarvený levý horní roh", + "item.banner.square_top_left.purple": "Fialově vybarvený levý horní roh", + "item.banner.square_top_left.red": "Červeně vybarvený levý horní roh", + "item.banner.square_top_left.silver": "Světle šedě vybarvený levý horní roh", + "item.banner.square_top_left.white": "Bíle vybarvený levý horní roh", + "item.banner.square_top_left.yellow": "Žlutě vybarvený levý horní roh", + "item.banner.square_top_right.black": "Černě vybarvený pravý horní roh", + "item.banner.square_top_right.blue": "Modře vybarvený pravý horní roh", + "item.banner.square_top_right.brown": "Hnědě vybarvený pravý horní roh", + "item.banner.square_top_right.cyan": "Azurově vybarvený pravý horní roh", + "item.banner.square_top_right.gray": "Šedě vybarvený pravý horní roh", + "item.banner.square_top_right.green": "Zeleně vybarvený pravý horní roh", + "item.banner.square_top_right.lightBlue": "Světle modře vybarvený pravý horní roh", + "item.banner.square_top_right.lime": "Světle zeleně vybarvený pravý horní roh", + "item.banner.square_top_right.magenta": "Purpurově vybarvený pravý horní roh", + "item.banner.square_top_right.orange": "Oranžově vybarvený pravý horní roh", + "item.banner.square_top_right.pink": "Růžově vybarvený pravý horní roh", + "item.banner.square_top_right.purple": "Fialově vybarvený pravý horní roh", + "item.banner.square_top_right.red": "Červeně vybarvený pravý horní roh", + "item.banner.square_top_right.silver": "Světle šedě vybarvený pravý horní roh", + "item.banner.square_top_right.white": "Bíle vybarvený pravý horní roh", + "item.banner.square_top_right.yellow": "Žlutě vybarvený pravý horní roh", "item.banner.straight_cross.black": "Černý kříž", "item.banner.straight_cross.blue": "Modrý kříž", "item.banner.straight_cross.brown": "Hnědý kříž", @@ -49564,6 +49742,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Diamantová výzbroj koně", "item.horsearmorgold.name": "Zlatá výzbroj koně", "item.horsearmoriron.name": "Železná výzbroj koně", + "item.copper_horse_armor.name": "Měděná zbroj pro koně", "item.horsearmorleather.name": "Kožená výzbroj koně", "item.gold_ingot.name": "Zlatý ingot", "item.iron_ingot.name": "Železný ingot", @@ -49616,7 +49795,7 @@ export const langs: Langs = { "item.tnt_minecart.name": "Vozík s TNT", "item.pitcher_pod.name": "Semínko láčkovky", "item.torchflower_seeds.name": "Semena zázvoru", - "item.spawn_egg.entity.agent.name": "Vejce agente", + "item.spawn_egg.entity.agent.name": "Vejce agenta", "item.spawn_egg.entity.armadillo.name": "Vejce pásovce", "item.spawn_egg.entity.axolotl.name": "Vejce axolotla", "item.spawn_egg.entity.bee.name": "Vejce včely", @@ -49628,14 +49807,14 @@ export const langs: Langs = { "item.spawn_egg.entity.cow.name": "Vejce krávy", "item.spawn_egg.entity.cod.name": "Vejce tresky", "item.spawn_egg.entity.creaking.name": "Vejce skřípala", - "item.spawn_egg.entity.ender_dragon.name": "Vejce Ender draka", + "item.spawn_egg.entity.ender_dragon.name": "Vejce draka z Enderu", "item.spawn_egg.entity.goat.name": "Vejce kozy", "item.spawn_egg.entity.pufferfish.name": "Vejce ryby fugu", "item.spawn_egg.entity.salmon.name": "Vejce lososa", "item.spawn_egg.entity.tropicalfish.name": "Vejce tropické ryby", "item.spawn_egg.entity.pig.name": "Vejce prasete", "item.spawn_egg.entity.sheep.name": "Vejce ovce", - "item.spawn_egg.entity.npc.name": "Vejce NPC", + "item.spawn_egg.entity.npc.name": "Vejce NPC postavy", "item.spawn_egg.entity.npc.failed": "K vytvoření NPC potřebujete operátor Creative +", "item.spawn_egg.entity.wolf.name": "Vejce vlka", "item.spawn_egg.entity.villager.name": "Vejce vesničana", @@ -49657,7 +49836,7 @@ export const langs: Langs = { "item.spawn_egg.entity.polar_bear.name": "Vejce ledního medvěda", "item.spawn_egg.entity.donkey.name": "Vejce osla", "item.spawn_egg.entity.mule.name": "Vejce muly", - "item.spawn_egg.entity.skeleton_horse.name": "Vejce kostlivcového koně", + "item.spawn_egg.entity.skeleton_horse.name": "Vejce kostlivého koně", "item.spawn_egg.entity.zombie_horse.name": "Vejce zombie koně", "item.spawn_egg.entity.zombie.name": "Vejce zombie", "item.spawn_egg.entity.drowned.name": "Vejce utopence", @@ -49696,8 +49875,8 @@ export const langs: Langs = { "item.spawn_egg.entity.unknown.name": "Vejce", "item.spawn_egg.entity.wandering_trader.name": "Vejce potulného obchodníka", "item.spawn_egg.entity.wither.name": "Vejce pakostnice", - "item.spawn_egg.entity.zoglin.name": "Vejce Zoglina", - "item.spawn_egg.entity.sniffer.name": "Vejce číhavce", + "item.spawn_egg.entity.zoglin.name": "Vejce nemrtvého kaňoura", + "item.spawn_egg.entity.sniffer.name": "Vejce čichavce", "item.trident.name": "Trojzubec", "item.mushroom_stew.name": "Houbový guláš", "item.muttonCooked.name": "Vařené skopové", @@ -49747,6 +49926,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Tvůrce", "item.record_creator_music_box.desc": "Lena Raine - Tvůrce (hrací skříňka)", "item.record_precipice.desc": "Aaron Cherof - Propast", + "item.record_tears.desc": "Amos Roddy – Tears", + "item.record_lava_chicken.desc": "Hyperlektvary – Lávové kuře", "item.redstone.name": "Ruditový prášek", "item.reeds.name": "Cukrová třtina", "item.kelp.name": "Chaluha", @@ -49902,7 +50083,7 @@ export const langs: Langs = { "potion.digSpeed": "Zrychlení", "potion.effects.whenDrank": "Při použití:", "potion.empty": "Žádné účinky", - "potion.emptyPotion.name": "Lahvička s vodou", + "potion.emptyPotion.name": "Láhev s vodou", "potion.emptyPotion.splash.name": "Vrhací lahvička s vodou", "potion.emptyPotion.linger.name": "Lahvička s vodou s místním účinkem", "potion.fireResistance": "Ohnivzdornost", @@ -50016,7 +50197,7 @@ export const langs: Langs = { "item.spawn_egg.entity.warden.name": "Vejce dozorce", "entity.warden.name": "Dozorce", "entity.allay.name": "Nádeník", - "item.spawn_egg.entity.allay.name": "Vejce allaye", + "item.spawn_egg.entity.allay.name": "Vejce nádeníka", "item.bucketTadpole.name": "Kbelík s pulcem", "item.spawn_egg.entity.frog.name": "Vejce žáby", "item.spawn_egg.entity.tadpole.name": "Vejce pulce", @@ -50175,19 +50356,19 @@ export const langs: Langs = { "tile.suspicious_sand.name": "Podezřelý písek", "trim_pattern.coast.name": "Vzor zbroje: pobřeží", "trim_pattern.dune.name": "Vzor zbroje: duny", - "trim_pattern.eye.name": "Vzor zbroje: oči", - "trim_pattern.host.name": "Vzor zbroje: hostitel", - "trim_pattern.raiser.name": "Vzor zbroje: raiser", - "trim_pattern.rib.name": "Vzor zbroje: žebra", - "trim_pattern.sentry.name": "Vzor zbroje: stráž", - "trim_pattern.shaper.name": "Vzor zbroje: tvar", - "trim_pattern.silence.name": "Vzor zbroje: ticho", + "trim_pattern.eye.name": "Vzor zbroje očí", + "trim_pattern.host.name": "Vzor zbroje hostitele", + "trim_pattern.raiser.name": "Vzor zbroje raiseru", + "trim_pattern.rib.name": "Vzor žeberní zbroje", + "trim_pattern.sentry.name": "Vzor zbroje stráže", + "trim_pattern.shaper.name": "Tvarovací vzor zbroje", + "trim_pattern.silence.name": "Vzor zbroje Silence", "trim_pattern.snout.name": "Vzor zbroje: rypák", "trim_pattern.spire.name": "Vzor zbroje: věž", "trim_pattern.tide.name": "Vzor zbroje: příliv", - "trim_pattern.vex.name": "Vzor zbroje: otrapa", - "trim_pattern.ward.name": "Vzor zbroje: ochrana", - "trim_pattern.wayfinder.name": "Vzor zbroje: Wayfinder", + "trim_pattern.vex.name": "Vzor zbroje otrapy", + "trim_pattern.ward.name": "Vzor ochranné zbroje", + "trim_pattern.wayfinder.name": "Vzor zbroje Wayfinder", "trim_pattern.wild.name": "Vzor zbroje: divočina", "trim_pattern.bolt.name": "Vzor zbroje: blesk", "trim_pattern.flow.name": "Vzor zbroje: tok", @@ -50546,6 +50727,13 @@ export const langs: Langs = { "tile.glowstone.name": "Zářivý kámen", "tile.glow_lichen.name": "Zářící lišejník", "tile.lightning_rod.name": "Hromosvod", + "tile.exposed_lightning_rod.name": "Odhalený hromosvod", + "tile.weathered_lightning_rod.name": "Zašlý hromosvod", + "tile.oxidized_lightning_rod.name": "Zoxidovaný hromosvod", + "tile.waxed_lightning_rod.name": "Navoskovaný hromosvod", + "tile.waxed_exposed_lightning_rod.name": "Navoskovaný odhalený hromosvod", + "tile.waxed_weathered_lightning_rod.name": "Navoskovaný zašlý hromosvod", + "tile.waxed_oxidized_lightning_rod.name": "Navoskovaný zoxidovaný hromosvod", "tile.lit_pumpkin.name": "Svítící dýně", "tile.lockedchest.name": "Zamčená truhla", "tile.log.acacia.name": "Akáciové poleno", @@ -51154,14 +51342,99 @@ export const langs: Langs = { "tile.tinted_glass.name": "Tmavé sklo", "tile.smooth_basalt.name": "Hladký čedič", "tile.wildflowers.name": "Polní kvítí", - "tile.firefly_bush.name": "Buš se světluškami", - "tile.bush.name": "Buš", + "tile.firefly_bush.name": "Keř se světluškami", + "tile.bush.name": "Keř", "tile.leaf_litter.name": "Hromádka listí", "tile.cactus_flower.name": "Kaktusový květ", "item.brown_egg.name": "Hnědé vejce", "item.blue_egg.name": "Modré vejce", "tile.short_dry_grass.name": "Krátká suchá tráva", - "tile.tall_dry_grass.name": "Vysoká suchá tráva" + "tile.tall_dry_grass.name": "Vysoká suchá tráva", + "entity.happy_ghast.name": "Šťastný ďas", + "item.spawn_egg.entity.happy_ghast.name": "Vejce šťastného ďasa", + "tile.dried_ghast.name": "Vysušený ďas", + "item.black_harness.name": "Černý postroj", + "item.blue_harness.name": "Modrý postroj", + "item.brown_harness.name": "Hnědý postroj", + "item.cyan_harness.name": "Azurový postroj", + "item.gray_harness.name": "Šedý postroj", + "item.green_harness.name": "Zelený postroj", + "item.light_blue_harness.name": "Světle modrý postroj", + "item.light_gray_harness.name": "Světle šedý postroj", + "item.lime_harness.name": "Světle zelený postroj", + "item.magenta_harness.name": "Purpurový postroj", + "item.orange_harness.name": "Oranžový postroj", + "item.pink_harness.name": "Růžový postroj", + "item.purple_harness.name": "Fialový postroj", + "item.red_harness.name": "Červený postroj", + "item.white_harness.name": "Bílý postroj", + "item.yellow_harness.name": "Žlutý postroj", + "entity.copper_golem.name": "Měděný golem", + "item.spawn_egg.entity.copper_golem.name": "Vejce měděného golema", + "item.copper_nugget.name": "Měděný nuget", + "item.copper_sword.name": "Měděný meč", + "item.copper_pickaxe.name": "Měděný krumpáč", + "item.copper_axe.name": "Měděná sekera", + "item.copper_shovel.name": "Měděná lopata", + "item.copper_hoe.name": "Měděná motyka", + "item.copper_boots.name": "Měděné boty", + "item.copper_leggings.name": "Měděné kalhoty", + "item.copper_chestplate.name": "Měděné brnění", + "item.copper_helmet.name": "Měděná helma", + "tile.copper_chest.name": "Měděná truhla", + "tile.exposed_copper_chest.name": "Odhalená měděná truhla", + "tile.weathered_copper_chest.name": "Zvětralá měděná truhla", + "tile.oxidized_copper_chest.name": "Zoxidovaná měděná truhla", + "tile.waxed_copper_chest.name": "Voskovaná měděná truhla", + "tile.waxed_exposed_copper_chest.name": "Voskovaná odhalená měděná truhla", + "tile.waxed_weathered_copper_chest.name": "Voskovaná zvětralá měděná truhla", + "tile.waxed_oxidized_copper_chest.name": "Voskovaná zoxidovaná měděná truhla", + "tile.acacia_shelf.name": "Akáciová polička", + "tile.bamboo_shelf.name": "Bambusová polička", + "tile.birch_shelf.name": "Březová polička", + "tile.cherry_shelf.name": "Třešňová polička", + "tile.crimson_shelf.name": "Karmínová polička", + "tile.dark_oak_shelf.name": "Polička z tmavého dubu", + "tile.jungle_shelf.name": "Sekvojová polička", + "tile.mangrove_shelf.name": "Mangrovová polička", + "tile.oak_shelf.name": "Dubová polička", + "tile.pale_oak_shelf.name": "Polička ze sinalého dubu", + "tile.spruce_shelf.name": "Smrková polička", + "tile.warped_shelf.name": "Pokroucená polička", + "tile.copper_golem_statue.name": "Socha měděného golema", + "tile.exposed_copper_golem_statue.name": "Odhalená socha měděného golema", + "tile.weathered_copper_golem_statue.name": "Zvětralá socha měděného golema", + "tile.oxidized_copper_golem_statue.name": "Zoxidovaná socha měděného golema", + "tile.waxed_copper_golem_statue.name": "Voskovaná socha měděného golema", + "tile.waxed_exposed_copper_golem_statue.name": "Voskovaná odhalená socha měděného golema", + "tile.waxed_weathered_copper_golem_statue.name": "Voskovaná zvětralá socha měděného golema", + "tile.waxed_oxidized_copper_golem_statue.name": "Voskovaná zoxidovaná socha měděného golema", + "tile.copper_chain.name": "Měděný řetěz", + "tile.exposed_copper_chain.name": "Odhalený měděný řetěz", + "tile.weathered_copper_chain.name": "Zvětralý měděný řetěz", + "tile.oxidized_copper_chain.name": "Zoxidovaný měděný řetěz", + "tile.waxed_copper_chain.name": "Voskovaný měděný řetěz", + "tile.waxed_exposed_copper_chain.name": "Voskovaný odhalený měděný řetěz", + "tile.waxed_weathered_copper_chain.name": "Voskovaný zvětralý měděný řetěz", + "tile.waxed_oxidized_copper_chain.name": "Voskovaný zoxidovaný měděný řetěz", + "tile.copper_bars.name": "Měděné mříže", + "tile.exposed_copper_bars.name": "Odhalené měděné mříže", + "tile.weathered_copper_bars.name": "Zvětralé měděné mříže", + "tile.oxidized_copper_bars.name": "Zoxidované měděné mříže", + "tile.waxed_copper_bars.name": "Voskované měděné mříže", + "tile.waxed_exposed_copper_bars.name": "Voskované odhalené měděné mříže", + "tile.waxed_weathered_copper_bars.name": "Voskované zvětralé měděné mříže", + "tile.waxed_oxidized_copper_bars.name": "Voskované zoxidované měděné mříže", + "tile.copper_lantern.name": "Měděná lucerna", + "tile.exposed_copper_lantern.name": "Odhalená měděná lucerna", + "tile.weathered_copper_lantern.name": "Zvětralá měděná lucerna", + "tile.oxidized_copper_lantern.name": "Zoxidovaná měděná lucerna", + "tile.waxed_copper_lantern.name": "Voskovaná měděná lucerna", + "tile.waxed_exposed_copper_lantern.name": "Voskovaná odhalená měděná lucerna", + "tile.waxed_weathered_copper_lantern.name": "Voskovaná zvětralá měděná lucerna", + "tile.waxed_oxidized_copper_lantern.name": "Voskovaná zoxidovaná měděná lucerna", + "tile.copper_torch.name": "Měděná louč", + "tile.iron_chain.name": "Železný řetěz" }, "da_DK": { "enchantment.arrowDamage": "Kraft", @@ -51355,7 +51628,7 @@ export const langs: Langs = { "item.axolotlBabyBodySingle.name": "%1$s babyaxolotl", "item.axolotlColorLucy.name": "Leucistisk", "item.axolotlColorCyan.name": "Blågrøn", - "item.axolotlColorGold.name": "Gylden", + "item.axolotlColorGold.name": "Guld", "item.axolotlColorWild.name": "Brun", "item.axolotlColorBlue.name": "Blå", "item.golden_apple.name": "Guldæble", @@ -52321,6 +52594,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Diamantrustning til hest", "item.horsearmorgold.name": "Guldrustning til hest", "item.horsearmoriron.name": "Jernrustning til hest", + "item.copper_horse_armor.name": "Kobberhestearmering", "item.horsearmorleather.name": "Læderrustning til hest", "item.gold_ingot.name": "Guldbarre", "item.iron_ingot.name": "Jernbarre", @@ -52504,6 +52778,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine – udvikler", "item.record_creator_music_box.desc": "Lena Raine - udvikler (Music Box)", "item.record_precipice.desc": "Aaron Cherof – afgrund", + "item.record_tears.desc": "Amos Roddy – tårer", + "item.record_lava_chicken.desc": "Hypereliksirer – Lavakylling", "item.redstone.name": "Redstone-pulver", "item.reeds.name": "Sukkerrør", "item.kelp.name": "Tang", @@ -53303,6 +53579,13 @@ export const langs: Langs = { "tile.glowstone.name": "Glødesten", "tile.glow_lichen.name": "Glødelav", "tile.lightning_rod.name": "Lynafleder", + "tile.exposed_lightning_rod.name": "Blottet lynafleder", + "tile.weathered_lightning_rod.name": "Forvitret lynafleder", + "tile.oxidized_lightning_rod.name": "Oxideret lynafleder", + "tile.waxed_lightning_rod.name": "Vokset lynafleder", + "tile.waxed_exposed_lightning_rod.name": "Vokset blottet lynafleder", + "tile.waxed_weathered_lightning_rod.name": "Vokset forvitret lynafleder", + "tile.waxed_oxidized_lightning_rod.name": "Vokset oxideret lynafleder", "tile.lit_pumpkin.name": "Græskarlanterne", "tile.lockedchest.name": "Låst kiste", "tile.log.acacia.name": "Kævle af akacietræ", @@ -53918,7 +54201,92 @@ export const langs: Langs = { "item.brown_egg.name": "Brunt æg", "item.blue_egg.name": "Blåt æg", "tile.short_dry_grass.name": "Lavt tørt græs", - "tile.tall_dry_grass.name": "Højt tørt græs" + "tile.tall_dry_grass.name": "Højt tørt græs", + "entity.happy_ghast.name": "Glad ghast", + "item.spawn_egg.entity.happy_ghast.name": "Glad ghast-spawnæg", + "tile.dried_ghast.name": "Tør ghast", + "item.black_harness.name": "Sort seletøj", + "item.blue_harness.name": "Blåt seletøj", + "item.brown_harness.name": "Brunt seletøj", + "item.cyan_harness.name": "Turkis seletøj", + "item.gray_harness.name": "Gråt seletøj", + "item.green_harness.name": "Grønt seletøj", + "item.light_blue_harness.name": "Lyseblåt seletøj", + "item.light_gray_harness.name": "Lysegråt seletøj", + "item.lime_harness.name": "Limegrønt seletøj", + "item.magenta_harness.name": "Magenta seletøj", + "item.orange_harness.name": "Orange seletøj", + "item.pink_harness.name": "Lyserødt seletøj", + "item.purple_harness.name": "Lilla seletøj", + "item.red_harness.name": "Rødt seletøj", + "item.white_harness.name": "Hvidt seletøj", + "item.yellow_harness.name": "Gult seletøj", + "entity.copper_golem.name": "Kobbergolem", + "item.spawn_egg.entity.copper_golem.name": "Kobbergolem-spawnæg", + "item.copper_nugget.name": "Kobberklump", + "item.copper_sword.name": "Kobbersværd", + "item.copper_pickaxe.name": "Kobberhakke", + "item.copper_axe.name": "Kobberøkse", + "item.copper_shovel.name": "Kobberspade", + "item.copper_hoe.name": "Kobberlugejern", + "item.copper_boots.name": "Kobberstøvler", + "item.copper_leggings.name": "Kobberbukser", + "item.copper_chestplate.name": "Kobberbrystplade", + "item.copper_helmet.name": "Kobberhjelm", + "tile.copper_chest.name": "Kobberkiste", + "tile.exposed_copper_chest.name": "Blottet kobberkiste", + "tile.weathered_copper_chest.name": "Forvitret kobberkiste", + "tile.oxidized_copper_chest.name": "Oxideret kobberkiste", + "tile.waxed_copper_chest.name": "Vokset kobberkiste", + "tile.waxed_exposed_copper_chest.name": "Vokset blottet kobberkiste", + "tile.waxed_weathered_copper_chest.name": "Vokset forvitret kobberkiste", + "tile.waxed_oxidized_copper_chest.name": "Vokset oxideret kobberkiste", + "tile.acacia_shelf.name": "Akaciehylde", + "tile.bamboo_shelf.name": "Bambushylde", + "tile.birch_shelf.name": "Birkehylde", + "tile.cherry_shelf.name": "Hylde af kirsebærtræ", + "tile.crimson_shelf.name": "Blodrød hylde", + "tile.dark_oak_shelf.name": "Hylde af mørkt egetræ", + "tile.jungle_shelf.name": "Junglehylde", + "tile.mangrove_shelf.name": "Mangrovehylde", + "tile.oak_shelf.name": "Egehylde", + "tile.pale_oak_shelf.name": "Hylde af blegt egetræ", + "tile.spruce_shelf.name": "Hylde af grantræ", + "tile.warped_shelf.name": "Forkvaklet hylde", + "tile.copper_golem_statue.name": "Kobbergolemstatue", + "tile.exposed_copper_golem_statue.name": "Blottet kobbergolemstatue", + "tile.weathered_copper_golem_statue.name": "Forvitret kobbergolemstatue", + "tile.oxidized_copper_golem_statue.name": "Oxideret kobbergolemstatue", + "tile.waxed_copper_golem_statue.name": "Vokset kobbergolemstatue", + "tile.waxed_exposed_copper_golem_statue.name": "Vokset blottet kobbergolemstatue", + "tile.waxed_weathered_copper_golem_statue.name": "Vokset forvitret kobbergolemstatue", + "tile.waxed_oxidized_copper_golem_statue.name": "Vokset oxideret kobbergolemstatue", + "tile.copper_chain.name": "Kobberkæde", + "tile.exposed_copper_chain.name": "Blottet kobberkæde", + "tile.weathered_copper_chain.name": "Forvitret kobberkæde", + "tile.oxidized_copper_chain.name": "Oxideret kobberkæde", + "tile.waxed_copper_chain.name": "Vokset kobberkæde", + "tile.waxed_exposed_copper_chain.name": "Vokset blottet kobberkæde", + "tile.waxed_weathered_copper_chain.name": "Vokset forvitret kobberkæde", + "tile.waxed_oxidized_copper_chain.name": "Vokset oxideret kobberkæde", + "tile.copper_bars.name": "Kobbertremmer", + "tile.exposed_copper_bars.name": "Blottede kobbertremmer", + "tile.weathered_copper_bars.name": "Forvitrede kobbertremmer", + "tile.oxidized_copper_bars.name": "Oxiderede kobbertremmer", + "tile.waxed_copper_bars.name": "Voksede kobbertremmer", + "tile.waxed_exposed_copper_bars.name": "Voksede blottede kobbertremmer", + "tile.waxed_weathered_copper_bars.name": "Voksede forvitrede kobbertremmer", + "tile.waxed_oxidized_copper_bars.name": "Voksede oxiderede kobbertremmer", + "tile.copper_lantern.name": "Kobberlanterne", + "tile.exposed_copper_lantern.name": "Blottet kobberlanterne", + "tile.weathered_copper_lantern.name": "Forvitret kobberlanterne", + "tile.oxidized_copper_lantern.name": "Oxideret kobberlanterne", + "tile.waxed_copper_lantern.name": "Vokset kobberlanterne", + "tile.waxed_exposed_copper_lantern.name": "Vokset blottet kobberlanterne", + "tile.waxed_weathered_copper_lantern.name": "Vokset forvitret kobberlanterne", + "tile.waxed_oxidized_copper_lantern.name": "Vokset oxideret kobberlanterne", + "tile.copper_torch.name": "Kobberfakkel", + "tile.iron_chain.name": "Jernkæde" }, "el_GR": { "enchantment.arrowDamage": "Ενέργεια", @@ -53938,7 +54306,7 @@ export const langs: Langs = { "enchantment.fire": "Ιδιότητα φωτιάς", "enchantment.fishingSpeed": "Δόλωμα", "enchantment.frostwalker": "Περπατητής πάγου", - "enchantment.heavy_weapon.breach": "Παραβίαση", + "enchantment.heavy_weapon.breach": "Παράβαση", "enchantment.heavy_weapon.density": "Πυκνότητα", "enchantment.heavy_weapon.windburst": "Ριπή Ανέμου", "enchantment.knockback": "Τίναγμα προς τα πίσω", @@ -54110,7 +54478,7 @@ export const langs: Langs = { "item.apple.name": "Μήλο", "item.axolotlAdultBodySingle.name": "Ενήλικο Αξολότλ %1$s", "item.axolotlBabyBodySingle.name": "Μωρό Αξολότλ %1$s", - "item.axolotlColorLucy.name": "Αλμπίνο", + "item.axolotlColorLucy.name": "Λευκιστικό", "item.axolotlColorCyan.name": "Κυανό", "item.axolotlColorGold.name": "Χρυσό", "item.axolotlColorWild.name": "Καφέ", @@ -55018,7 +55386,7 @@ export const langs: Langs = { "item.fireworksCharge.black": "Μαύρο", "item.fireworksCharge.blue": "Μπλε", "item.fireworksCharge.brown": "Καφέ", - "item.fireworksCharge.customColor": "Προσαρμοσμένο", + "item.fireworksCharge.customColor": "Προσαρμογή", "item.fireworksCharge.cyan": "Κυανό", "item.fireworksCharge.fadeTo": "Σταδιακή εξαφάνιση με", "item.fireworksCharge.flicker": "Λαμπύρισμα", @@ -55078,6 +55446,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Διαμαντένια πανοπλία αλόγου", "item.horsearmorgold.name": "Χρυσή πανοπλία αλόγου", "item.horsearmoriron.name": "Σιδερένια πανοπλία αλόγου", + "item.copper_horse_armor.name": "Χάλκινη Πανοπλία Αλόγου", "item.horsearmorleather.name": "Δερμάτινη πανοπλία αλόγου", "item.gold_ingot.name": "Ράβδος χρυσού", "item.iron_ingot.name": "Ράβδος σιδήρου", @@ -55261,6 +55630,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Δημιουργός", "item.record_creator_music_box.desc": "Lena Raine - Δημιουργός (Μουσικό κουτί)", "item.record_precipice.desc": "Άαρον Τσέροφ - Γκρεμός", + "item.record_tears.desc": "Άμος Ρόντι - Δάκρυα", + "item.record_lava_chicken.desc": "Υπερφίλτρα - Κοτόπουλο Λάβας", "item.redstone.name": "Σκόνη ερυθρόλιθου", "item.reeds.name": "Ζαχαροκάλαμο", "item.kelp.name": "Φύκι", @@ -56060,6 +56431,13 @@ export const langs: Langs = { "tile.glowstone.name": "Φεγγόλιθος", "tile.glow_lichen.name": "Λαμπερή λειχήνα", "tile.lightning_rod.name": "Αλεξικέραυνο", + "tile.exposed_lightning_rod.name": "Εκτεθειμένο αλεξικέραυνο", + "tile.weathered_lightning_rod.name": "Φθαρμένο αλεξικέραυνο", + "tile.oxidized_lightning_rod.name": "Οξειδωμένο αλεξικέραυνο", + "tile.waxed_lightning_rod.name": "Κερωμένο αλεξικέραυνο", + "tile.waxed_exposed_lightning_rod.name": "Κερωμένο εκτεθειμένο αλεξικέραυνο", + "tile.waxed_weathered_lightning_rod.name": "Κερωμένο φθαρμένο αλεξικέραυνο", + "tile.waxed_oxidized_lightning_rod.name": "Κερωμένο οξειδωμένο αλεξικέραυνο", "tile.lit_pumpkin.name": "Κολοκυθοφάναρο", "tile.lockedchest.name": "Κλειδωμένο σεντούκι", "tile.log.acacia.name": "Κούτσουρο ακακίας", @@ -56073,12 +56451,12 @@ export const langs: Langs = { "tile.melon_block.name": "Καρπούζι", "tile.mob_spawner.name": "Κύβος δημιουργίας τεράτων", "tile.monster_egg.brick.name": "Πετρότουβλα με έντομο «ψαράκι»", - "tile.monster_egg.chiseledbrick.name": "Λαξευμένο πετρότουβλο με έντομο \"ψαράκι\"", + "tile.monster_egg.chiseledbrick.name": "Σμιλεμένο πετρότουβλο με έντομο «ψαράκι»", "tile.monster_egg.cobble.name": "Κυβόλιθος με έντομο «ψαράκι»", - "tile.monster_egg.crackedbrick.name": "Ραγισμένο πετρότουβλο με έντομο \"ψαράκι\"", - "tile.monster_egg.mossybrick.name": "Χορταριασμένο πετρότουβλο με έντομο \"ψαράκι\"", - "tile.monster_egg.name": "Πέτρα με έντομο \"ψαράκι\"", - "tile.monster_egg.stone.name": "Πέτρα με έντομο \"ψαράκι\"", + "tile.monster_egg.crackedbrick.name": "Ραγισμένο πετρότουβλο με έντομο «ψαράκι»", + "tile.monster_egg.mossybrick.name": "Χορταριασμένο πετρότουβλο με έντομο «ψαράκι»", + "tile.monster_egg.name": "Πέτρα με έντομο «ψαράκι»", + "tile.monster_egg.stone.name": "Πέτρα με έντομο «ψαράκι»", "tile.mushroom.name": "Μανιτάρι", "tile.noteblock.name": "Κύβος νότας", "tile.mycelium.name": "Μυκήλιο", @@ -56234,7 +56612,7 @@ export const langs: Langs = { "tile.stonebrick.name": "Πετρότουβλα", "tile.stonebrick.smooth.name": "Λεία πετρότουβλα", "tile.stonecutter.name": "Εργαλείο κοπής πέτρας", - "tile.stonecutter_block.name": "Κόφτης πέτρας", + "tile.stonecutter_block.name": "Εργαλείο κοπής πέτρας", "tile.mossy_cobblestone.name": "Χορταριασμένος κυβόλιθος", "tile.double_stone_slab.brick.name": "Πλάκα Τούβλων", "tile.double_stone_slab.cobble.name": "Πλάκα από κυβόλιθο", @@ -56505,7 +56883,7 @@ export const langs: Langs = { "tile.crying_obsidian.name": "Δακρυσμένος οψιδιανός", "tile.powder_snow.name": "Φρέσκο χιόνι", "tile.deepslate.name": "Βαθύπετρα", - "tile.infested_deepslate.name": "Βαθύπετρα με έντομο \"ψαράκι\"", + "tile.infested_deepslate.name": "Βαθύπετρα με έντομο «ψαράκι»", "tile.cobbled_deepslate.name": "Βοτσαλωτή βαθύπετρα", "tile.dripstone_block.name": "Κύβος σπηλαιοθέματος", "tile.pointed_dripstone.name": "Μυτερό σπηλαιόθεμα", @@ -56540,7 +56918,7 @@ export const langs: Langs = { "tile.cracked_deepslate_tiles.name": "Πλακίδια από ραγισμένη βαθύπετρα", "tile.cracked_deepslate_bricks.name": "Τούβλα από ραγισμένη βαθύπετρα", "tile.pitcher_plant.name": "Φυτό Νηπενθές", - "tile.sniffer_egg.name": "Αυγό Οσφρητή", + "tile.sniffer_egg.name": "Αυγό Οσφρηστή", "tile.torchflower.name": "Πυρσολούλουδο", "item.copper_ingot.name": "Ράβδος χαλκού", "item.raw_copper.name": "Ακατέργαστος χαλκός", @@ -56672,10 +57050,95 @@ export const langs: Langs = { "tile.bush.name": "Θάμνος", "tile.leaf_litter.name": "Ξεραμένα φύλλα", "tile.cactus_flower.name": "Λουλούδι Κάκτου", - "item.brown_egg.name": "Καφέ Αυγό", - "item.blue_egg.name": "Μπλε Αυγό", + "item.brown_egg.name": "Καφέ αυγό", + "item.blue_egg.name": "Μπλε αυγό", "tile.short_dry_grass.name": "Κοντό Ξηρό Γρασίδι", - "tile.tall_dry_grass.name": "Ψηλό Ξηρό Γρασίδι" + "tile.tall_dry_grass.name": "Ψηλό Ξηρό Γρασίδι", + "entity.happy_ghast.name": "Χαρούμενο Ghast", + "item.spawn_egg.entity.happy_ghast.name": "Αυγό Γένεσης Χαρούμενου Ghast", + "tile.dried_ghast.name": "Αποξηραμένο Ghast", + "item.black_harness.name": "Μαύρος ιμάντας", + "item.blue_harness.name": "Μπλε ιμάντας", + "item.brown_harness.name": "Καφέ ιμάντας", + "item.cyan_harness.name": "Κυανός ιμάντας", + "item.gray_harness.name": "Γκρι ιμάντας", + "item.green_harness.name": "Πράσινος ιμάντας", + "item.light_blue_harness.name": "Γαλάζιος ιμάντας", + "item.light_gray_harness.name": "Ανοιχτός γκρι ιμάντας", + "item.lime_harness.name": "Πρασινοκίτρινος ιμάντας", + "item.magenta_harness.name": "Φούξια ιμάντας", + "item.orange_harness.name": "Πορτοκαλί ιμάντας", + "item.pink_harness.name": "Ροζ ιμάντας", + "item.purple_harness.name": "Μοβ ιμάντας", + "item.red_harness.name": "Κόκκινος ιμάντας", + "item.white_harness.name": "Λευκός ιμάντας", + "item.yellow_harness.name": "Κίτρινος ιμάντας", + "entity.copper_golem.name": "Γκόλεμ Χαλκού", + "item.spawn_egg.entity.copper_golem.name": "Αυγό Γένεσης Γκόλεμ Χαλκού", + "item.copper_nugget.name": "Σβώλος Χαλκού", + "item.copper_sword.name": "Χάλκινο Σπαθί", + "item.copper_pickaxe.name": "Χάλκινη Αξίνα", + "item.copper_axe.name": "Χάλκινο Τσεκούρι", + "item.copper_shovel.name": "Χάλκινο Φτυάρι", + "item.copper_hoe.name": "Χάλκινη Τσάπα", + "item.copper_boots.name": "Χάλκινες Μπότες", + "item.copper_leggings.name": "Χάλκινες Περικνημίδες", + "item.copper_chestplate.name": "Χάλκινος Θώρακας", + "item.copper_helmet.name": "Χάλκινο Κράνος", + "tile.copper_chest.name": "Σεντούκι Χαλκού", + "tile.exposed_copper_chest.name": "Εκτεθειμένο Σεντούκι Χαλκού", + "tile.weathered_copper_chest.name": "Φθαρμένο Σεντούκι Χαλκού", + "tile.oxidized_copper_chest.name": "Οξειδωμένο Σεντούκι Χαλκού", + "tile.waxed_copper_chest.name": "Κερωμένο Σεντούκι Χαλκού", + "tile.waxed_exposed_copper_chest.name": "Κερωμένο Εκτεθειμένο Σεντούκι Χαλκού", + "tile.waxed_weathered_copper_chest.name": "Κερωμένο Φθαρμένο Σεντούκι Χαλκού", + "tile.waxed_oxidized_copper_chest.name": "Κερωμένο Οξειδωμένο Σεντούκι Χαλκού", + "tile.acacia_shelf.name": "Ράφι από Ακακία", + "tile.bamboo_shelf.name": "Ράφι από Μπαμπού", + "tile.birch_shelf.name": "Ράφι από Σημύδα", + "tile.cherry_shelf.name": "Ράφι από Κερασιά", + "tile.crimson_shelf.name": "Ράφι από Πορφυρό", + "tile.dark_oak_shelf.name": "Ράφι από Σκούρα Βελανιδιά", + "tile.jungle_shelf.name": "Ράφι Ζούγκλας", + "tile.mangrove_shelf.name": "Ράφι από Μαγκρόβιο", + "tile.oak_shelf.name": "Ράφι από Βελανιδιά", + "tile.pale_oak_shelf.name": "Ράφι από Χλωμή Βελανιδιά", + "tile.spruce_shelf.name": "Ράφι από έλατο", + "tile.warped_shelf.name": "Ράφι από αλλόκοτο", + "tile.copper_golem_statue.name": "Άγαλμα Γκόλεμ Χαλκού", + "tile.exposed_copper_golem_statue.name": "Εκτεθειμένο Άγαλμα Γκόλεμ Χαλκού", + "tile.weathered_copper_golem_statue.name": "Φθαρμένο Άγαλμα Γκόλεμ Χαλκού", + "tile.oxidized_copper_golem_statue.name": "Οξειδωμένο Άγαλμα Γκόλεμ Χαλκού", + "tile.waxed_copper_golem_statue.name": "Κερωμένο Άγαλμα Γκόλεμ Χαλκού", + "tile.waxed_exposed_copper_golem_statue.name": "Κερωμένο Εκτεθειμένο Άγαλμα Γκόλεμ Χαλκού", + "tile.waxed_weathered_copper_golem_statue.name": "Κερωμένο Φθαρμένο Άγαλμα Γκόλεμ Χαλκού", + "tile.waxed_oxidized_copper_golem_statue.name": "Κερωμένο Οξειδωμένο Άγαλμα Γκόλεμ Χαλκού", + "tile.copper_chain.name": "Αλυσίδα Χαλκού", + "tile.exposed_copper_chain.name": "Εκτεθειμένη Αλυσίδα Χαλκού", + "tile.weathered_copper_chain.name": "Φθαρμένη Αλυσίδα Χαλκού", + "tile.oxidized_copper_chain.name": "Οξειδωμένη Αλυσίδα Χαλκού", + "tile.waxed_copper_chain.name": "Κερωμένη Αλυσίδα Χαλκού", + "tile.waxed_exposed_copper_chain.name": "Κερωμένη Εκτεθειμένη Αλυσίδα Χαλκού", + "tile.waxed_weathered_copper_chain.name": "Κερωμένη Φθαρμένη Αλυσίδα Χαλκού", + "tile.waxed_oxidized_copper_chain.name": "Κερωμένη Οξειδωμένη Αλυσίδα Χαλκού", + "tile.copper_bars.name": "Κάγκελα Χαλκού", + "tile.exposed_copper_bars.name": "Εκτεθειμένα Κάγκελα Χαλκού", + "tile.weathered_copper_bars.name": "Φθαρμένα Κάγκελα Χαλκού", + "tile.oxidized_copper_bars.name": "Οξειδωμένα Κάγκελα Χαλκού", + "tile.waxed_copper_bars.name": "Κερωμένα Κάγκελα Χαλκού", + "tile.waxed_exposed_copper_bars.name": "Κερωμένα Εκτεθειμένα Κάγκελα Χαλκού", + "tile.waxed_weathered_copper_bars.name": "Κερωμένα Φθαρμένα Κάγκελα Χαλκού", + "tile.waxed_oxidized_copper_bars.name": "Κερωμένα Οξειδωμένα Κάγκελα Χαλκού", + "tile.copper_lantern.name": "Φανάρι Χαλκού", + "tile.exposed_copper_lantern.name": "Εκτεθειμένο Φανάρι Χαλκού", + "tile.weathered_copper_lantern.name": "Φθαρμένο Φανάρι Χαλκού", + "tile.oxidized_copper_lantern.name": "Οξειδωμένο Φανάρι Χαλκού", + "tile.waxed_copper_lantern.name": "Κερωμένο Φανάρι Χαλκού", + "tile.waxed_exposed_copper_lantern.name": "Κερωμένο Εκτεθειμένο Φανάρι Χαλκού", + "tile.waxed_weathered_copper_lantern.name": "Κερωμένο Φθαρμένο Φανάρι Χαλκού", + "tile.waxed_oxidized_copper_lantern.name": "Κερωμένο Οξειδωμένο Φανάρι Χαλκού", + "tile.copper_torch.name": "Πυρσός Χαλκού", + "tile.iron_chain.name": "Σιδερένια Aλυσίδα" }, "fi_FI": { "enchantment.arrowDamage": "Voimistus", @@ -56695,7 +57158,7 @@ export const langs: Langs = { "enchantment.fire": "Tulistin", "enchantment.fishingSpeed": "Viehe", "enchantment.frostwalker": "Kuurankulkija", - "enchantment.heavy_weapon.breach": "Tunkeutuminen", + "enchantment.heavy_weapon.breach": "Murto", "enchantment.heavy_weapon.density": "Tiheys", "enchantment.heavy_weapon.windburst": "Tuulipurske", "enchantment.knockback": "Horjutin", @@ -56772,7 +57235,7 @@ export const langs: Langs = { "entity.pufferfish.name": "Pallokala", "entity.salmon.name": "Lohi", "entity.tropicalfish.name": "Trooppinen kala", - "entity.axolotl.name": "Aksolotli", + "entity.axolotl.name": "Aksolotlit", "entity.ghast.name": "Hornanhenki", "entity.glow_squid.name": "Loistekalmari", "entity.piglin_brute.name": "Piglin-raakalainen", @@ -57835,6 +58298,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Timanttinen hevospanssari", "item.horsearmorgold.name": "Kultainen hevospanssari", "item.horsearmoriron.name": "Rautainen hevospanssari", + "item.copper_horse_armor.name": "Kuparinen hevosen panssari", "item.horsearmorleather.name": "Nahkainen hevospanssari", "item.gold_ingot.name": "Kultaharkko", "item.iron_ingot.name": "Rautaharkko", @@ -58018,6 +58482,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine – tekijä", "item.record_creator_music_box.desc": "Lena Raine – tekijä (Music Box)", "item.record_precipice.desc": "Aaron Cherof – Precipice", + "item.record_tears.desc": "Amos Roddy - Tears", + "item.record_lava_chicken.desc": "Hypertaikajuomat – laavakana", "item.redstone.name": "Punakivitomu", "item.reeds.name": "Sokeriruoko", "item.kelp.name": "Merilevä", @@ -58124,7 +58590,7 @@ export const langs: Langs = { "item.shield.red.name": "Punainen kilpi", "item.shield.orange.name": "Oranssi kilpi", "item.shield.lightBlue.name": "Vaaleansininen kilpi", - "item.shield.magenta.name": "Aniliininpunainen kilpi", + "item.shield.magenta.name": "Magenta kilpi", "item.shield.gray.name": "Harmaa kilpi", "item.shield.green.name": "Vihreä kilpi", "item.shield.cyan.name": "Syaani kilpi", @@ -58817,6 +59283,13 @@ export const langs: Langs = { "tile.glowstone.name": "Loistekivi", "tile.glow_lichen.name": "Loistejäkälä", "tile.lightning_rod.name": "Ukkosenjohdin", + "tile.exposed_lightning_rod.name": "Paljas ukkosenjohdin", + "tile.weathered_lightning_rod.name": "Kulunut ukkosenjohdin", + "tile.oxidized_lightning_rod.name": "Hapettunut ukkosenjohdin", + "tile.waxed_lightning_rod.name": "Kiillotettu ukkosenjohdin", + "tile.waxed_exposed_lightning_rod.name": "Kiillotettu paljas ukkosenjohdin", + "tile.waxed_weathered_lightning_rod.name": "Kiillotettu kulunut ukkosenjohdin", + "tile.waxed_oxidized_lightning_rod.name": "Kiillotettu hapettunut ukkosenjohdin", "tile.lit_pumpkin.name": "Kurpitsalyhty", "tile.lockedchest.name": "Lukittu arkku", "tile.log.acacia.name": "Akasiapölkky", @@ -59432,7 +59905,92 @@ export const langs: Langs = { "item.brown_egg.name": "Ruskea muna", "item.blue_egg.name": "Sininen muna", "tile.short_dry_grass.name": "Lyhyt kuiva ruoho", - "tile.tall_dry_grass.name": "Korkea kuiva ruoho" + "tile.tall_dry_grass.name": "Korkea kuiva ruoho", + "entity.happy_ghast.name": "Iloinen hornanhenki", + "item.spawn_egg.entity.happy_ghast.name": "Iloisen hornanhengen luontimuna", + "tile.dried_ghast.name": "Kuivunut hornanhenki", + "item.black_harness.name": "Musta valjas", + "item.blue_harness.name": "Sininen valjas", + "item.brown_harness.name": "Ruskea valjas", + "item.cyan_harness.name": "Syaani valjas", + "item.gray_harness.name": "Harmaa valjas", + "item.green_harness.name": "Vihreä valjas", + "item.light_blue_harness.name": "Vaaleansininen valjas", + "item.light_gray_harness.name": "Vaaleanharmaa valjas", + "item.lime_harness.name": "Limetinvihreä valjas", + "item.magenta_harness.name": "Magenta valjas", + "item.orange_harness.name": "Oranssi valjas", + "item.pink_harness.name": "Vaaleanpunainen valjas", + "item.purple_harness.name": "Violetti valjas", + "item.red_harness.name": "Punainen valjas", + "item.white_harness.name": "Valkoinen valjas", + "item.yellow_harness.name": "Keltainen valjas", + "entity.copper_golem.name": "Kuparigolemi", + "item.spawn_egg.entity.copper_golem.name": "Kuparigolemin luontimuna", + "item.copper_nugget.name": "Kuparihippu", + "item.copper_sword.name": "Kuparimiekka", + "item.copper_pickaxe.name": "Kuparihakku", + "item.copper_axe.name": "Kuparikirves", + "item.copper_shovel.name": "Kuparilapio", + "item.copper_hoe.name": "Kuparikuokka", + "item.copper_boots.name": "Kuparisaappaat", + "item.copper_leggings.name": "Kuparihousut", + "item.copper_chestplate.name": "Kuparirintapanssari", + "item.copper_helmet.name": "Kuparikypärä", + "tile.copper_chest.name": "Kupariarkku", + "tile.exposed_copper_chest.name": "Paljas kupariarkku", + "tile.weathered_copper_chest.name": "Kulunut kupariarkku", + "tile.oxidized_copper_chest.name": "Hapettunut kupariarkku", + "tile.waxed_copper_chest.name": "Kiillotettu kupariarkku", + "tile.waxed_exposed_copper_chest.name": "Kiillotettu paljas kupariarkku", + "tile.waxed_weathered_copper_chest.name": "Kiillotettu kulunut kupariarkku", + "tile.waxed_oxidized_copper_chest.name": "Kiillotettu hapettunut kupariarkku", + "tile.acacia_shelf.name": "Akasiahylly", + "tile.bamboo_shelf.name": "Bambuhylly", + "tile.birch_shelf.name": "Koivuhylly", + "tile.cherry_shelf.name": "Kirsikkahylly", + "tile.crimson_shelf.name": "Purppuranpunainen hylly", + "tile.dark_oak_shelf.name": "Tumma tammihylly", + "tile.jungle_shelf.name": "Viidakkohylly", + "tile.mangrove_shelf.name": "Mangrovehylly", + "tile.oak_shelf.name": "Tammihylly", + "tile.pale_oak_shelf.name": "Vaalea tammihylly", + "tile.spruce_shelf.name": "Kuusihylly", + "tile.warped_shelf.name": "Epämuotoinen hylly", + "tile.copper_golem_statue.name": "Kuparigolempatsas", + "tile.exposed_copper_golem_statue.name": "Paljas kuparigolempatsas", + "tile.weathered_copper_golem_statue.name": "Kulunut kuparigolempatsas", + "tile.oxidized_copper_golem_statue.name": "Hapettunut kuparigolempatsas", + "tile.waxed_copper_golem_statue.name": "Kiillotettu kuparigolempatsas", + "tile.waxed_exposed_copper_golem_statue.name": "Kiillotettu paljas kuparigolempatsas", + "tile.waxed_weathered_copper_golem_statue.name": "Kiillotettu kulunut kuparigolempatsas", + "tile.waxed_oxidized_copper_golem_statue.name": "Kiillotettu hapettunut kuparigolempatsas", + "tile.copper_chain.name": "Kupariketju", + "tile.exposed_copper_chain.name": "Paljas kupariketju", + "tile.weathered_copper_chain.name": "Kulunut kupariketju", + "tile.oxidized_copper_chain.name": "Hapettunut kupariketju", + "tile.waxed_copper_chain.name": "Kiillotettu kupariketju", + "tile.waxed_exposed_copper_chain.name": "Kiillotettu paljas kupariketju", + "tile.waxed_weathered_copper_chain.name": "Kiillotettu kulunut kupariketju", + "tile.waxed_oxidized_copper_chain.name": "Kiillotettu hapettunut kupariketju", + "tile.copper_bars.name": "Kuparikalterit", + "tile.exposed_copper_bars.name": "Paljaat kuparikalterit", + "tile.weathered_copper_bars.name": "Kuluneet kuparikalterit", + "tile.oxidized_copper_bars.name": "Hapettuneet kuparikalterit", + "tile.waxed_copper_bars.name": "Kiillotetut kuparikalterit", + "tile.waxed_exposed_copper_bars.name": "Kiillotetut paljaat kuparikalterit", + "tile.waxed_weathered_copper_bars.name": "Kiillotetut kuluneet kuparikalterit", + "tile.waxed_oxidized_copper_bars.name": "Kiillotetut hapettuneet kuparikalterit", + "tile.copper_lantern.name": "Kuparilyhty", + "tile.exposed_copper_lantern.name": "Paljas kuparilyhty", + "tile.weathered_copper_lantern.name": "Kulunut kuparilyhty", + "tile.oxidized_copper_lantern.name": "Hapettunut kuparilyhty", + "tile.waxed_copper_lantern.name": "Kiillotettu kuparilyhty", + "tile.waxed_exposed_copper_lantern.name": "Kiillotettu paljas kuparilyhty", + "tile.waxed_weathered_copper_lantern.name": "Kiillotettu kulunut kuparilyhty", + "tile.waxed_oxidized_copper_lantern.name": "Kiillotettu hapettunut kuparilyhty", + "tile.copper_torch.name": "Kuparisoihtu", + "tile.iron_chain.name": "Rautaketju" }, "hu_HU": { "enchantment.arrowDamage": "Erő", @@ -59452,7 +60010,7 @@ export const langs: Langs = { "enchantment.fire": "Szikrából pattant", "enchantment.fishingSpeed": "Műcsali", "enchantment.frostwalker": "Jégen járó", - "enchantment.heavy_weapon.breach": "Betörés", + "enchantment.heavy_weapon.breach": "Áttörés", "enchantment.heavy_weapon.density": "Sűrűség", "enchantment.heavy_weapon.windburst": "Széllökés", "enchantment.knockback": "Hátralökés", @@ -59497,7 +60055,7 @@ export const langs: Langs = { "entity.bogged.name": "Lápos", "entity.breeze.name": "Szellő", "entity.breeze_wind_charge_projectile.name": "Széltöltet", - "entity.cat.name": "Macska", + "entity.cat.name": "Cat", "entity.cave_spider.name": "Barlangi pók", "entity.chicken.name": "Csirke", "entity.cow.name": "Tehén", @@ -59625,7 +60183,7 @@ export const langs: Langs = { "item.axolotlAdultBodySingle.name": "Felnőtt %1$s axolotl", "item.axolotlBabyBodySingle.name": "Újszülött %1$s axolotl", "item.axolotlColorLucy.name": "Leucisztikus", - "item.axolotlColorCyan.name": "Türkizkék", + "item.axolotlColorCyan.name": "Türkiz", "item.axolotlColorGold.name": "Arany", "item.axolotlColorWild.name": "Barna", "item.axolotlColorBlue.name": "Kék", @@ -60592,6 +61150,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Gyémánt lópáncél", "item.horsearmorgold.name": "Arany lópáncél", "item.horsearmoriron.name": "Vas lópáncél", + "item.copper_horse_armor.name": "Réz lópáncél", "item.horsearmorleather.name": "Bőr lópáncél", "item.gold_ingot.name": "Aranyrúd", "item.iron_ingot.name": "Vasrúd", @@ -60775,6 +61334,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine – Creator", "item.record_creator_music_box.desc": "Lena Raine – Creator (zenedoboz)", "item.record_precipice.desc": "Aaron Cherof – Precipice", + "item.record_tears.desc": "Amos Roddy – Tears", + "item.record_lava_chicken.desc": "Hiperbájitalok – Lávacsirke", "item.redstone.name": "Vöröskőpor", "item.reeds.name": "Cukornád", "item.kelp.name": "Hínár", @@ -60822,9 +61383,9 @@ export const langs: Langs = { "item.wooden_sword.name": "Fakard", "item.unbreakable": "Törhetetlen", "item.waxed_copper_door.name": "Viaszolt rézajtó", - "item.waxed_exposed_copper_door.name": "Viaszolt, kopott rézajtó", - "item.waxed_oxidized_copper_door.name": "Viaszolt, oxidált rézajtó", - "item.waxed_weathered_copper_door.name": "Viaszolt, viharvert rézajtó", + "item.waxed_exposed_copper_door.name": "Viaszolt kopott rézajtó", + "item.waxed_oxidized_copper_door.name": "Viaszolt oxidált rézajtó", + "item.waxed_weathered_copper_door.name": "Viaszolt viharvert rézajtó", "item.weathered_copper_door.name": "Viharvert rézajtó", "item.wind_charge.name": "Széltöltet", "item.wheat.name": "Búza", @@ -61574,6 +62135,13 @@ export const langs: Langs = { "tile.glowstone.name": "Izzókő", "tile.glow_lichen.name": "Fényzuzmó", "tile.lightning_rod.name": "Villámhárító", + "tile.exposed_lightning_rod.name": "Kopott villámhárító", + "tile.weathered_lightning_rod.name": "Viharvert villámhárító", + "tile.oxidized_lightning_rod.name": "Oxidált villámhárító", + "tile.waxed_lightning_rod.name": "Viaszolt villámhárító", + "tile.waxed_exposed_lightning_rod.name": "Viaszolt kopott villámhárító", + "tile.waxed_weathered_lightning_rod.name": "Viaszolt viharvert villámhárító", + "tile.waxed_oxidized_lightning_rod.name": "Viaszolt oxidált villámhárító", "tile.lit_pumpkin.name": "Töklámpás", "tile.lockedchest.name": "Bezárt láda", "tile.log.acacia.name": "Akácrönk", @@ -62095,42 +62663,42 @@ export const langs: Langs = { "tile.chiseled_copper.name": "Finoman kidolgozott réz", "tile.exposed_chiseled_copper.name": "Kopott, finoman kidolgozott réz", "tile.oxidized_chiseled_copper.name": "Oxidált, finoman kidolgozott réz", - "tile.waxed_chiseled_copper.name": "Viaszolt, finoman kidolgozott réz", - "tile.waxed_exposed_chiseled_copper.name": "Viaszolt, kopott, finoman kidolgozott réz", - "tile.waxed_oxidized_chiseled_copper.name": "Viaszolt, oxidált, finoman kidolgozott réz", - "tile.waxed_weathered_chiseled_copper.name": "Viaszolt, viharvert, finoman kidolgozott réz", + "tile.waxed_chiseled_copper.name": "Viaszolt finoman kidolgozott réz", + "tile.waxed_exposed_chiseled_copper.name": "Viaszolt kopott, finoman kidolgozott réz", + "tile.waxed_oxidized_chiseled_copper.name": "Viaszolt oxidált, finoman kidolgozott réz", + "tile.waxed_weathered_chiseled_copper.name": "Viaszolt viharvert, finoman kidolgozott réz", "tile.weathered_chiseled_copper.name": "Viharvert, finoman kidolgozott réz", "tile.copper_bulb.name": "Rézizzó", "tile.exposed_copper_bulb.name": "Kopott réz izzó", "tile.oxidized_copper_bulb.name": "Oxidált rézizzó", "tile.waxed_copper_bulb.name": "Viaszolt rézizzó", - "tile.waxed_exposed_copper_bulb.name": "Viaszolt, kopott rézizzó", + "tile.waxed_exposed_copper_bulb.name": "Viaszolt kopott rézizzó", "tile.waxed_oxidized_copper_bulb.name": "Viaszolt oxidált réz izzó", - "tile.waxed_weathered_copper_bulb.name": "Viaszolt, viharvert rézizzó", + "tile.waxed_weathered_copper_bulb.name": "Viaszolt viharvert rézizzó", "tile.weathered_copper_bulb.name": "Viharvert rézizzó", "tile.copper_door.name": "Rézajtó", "tile.exposed_copper_door.name": "Kopott rézajtó", "tile.oxidized_copper_door.name": "Oxidált rézajtó", "tile.waxed_copper_door.name": "Viaszolt rézajtó", - "tile.waxed_exposed_copper_door.name": "Viaszolt, kopott rézajtó", - "tile.waxed_oxidized_copper_door.name": "Viaszolt, oxidált rézajtó", - "tile.waxed_weathered_copper_door.name": "Viaszolt, viharvert rézajtó", + "tile.waxed_exposed_copper_door.name": "Viaszolt kopott rézajtó", + "tile.waxed_oxidized_copper_door.name": "Viaszolt oxidált rézajtó", + "tile.waxed_weathered_copper_door.name": "Viaszolt viharvert rézajtó", "tile.weathered_copper_door.name": "Viharvert rézajtó", "tile.copper_grate.name": "Rézrács", "tile.exposed_copper_grate.name": "Kopott rézrács", "tile.oxidized_copper_grate.name": "Oxidált rézrács", "tile.waxed_copper_grate.name": "Viaszolt rézrács", - "tile.waxed_exposed_copper_grate.name": "Viaszolt, kopott rézrács", - "tile.waxed_oxidized_copper_grate.name": "Viaszolt, oxidált rézrács", - "tile.waxed_weathered_copper_grate.name": "Viaszolt, viharvert rézrács", + "tile.waxed_exposed_copper_grate.name": "Viaszolt kopott rézrács", + "tile.waxed_oxidized_copper_grate.name": "Viaszolt oxidált rézrács", + "tile.waxed_weathered_copper_grate.name": "Viaszolt viharvert rézrács", "tile.weathered_copper_grate.name": "Viharvert rézrács", "tile.copper_trapdoor.name": "Réz csapóajtó", "tile.exposed_copper_trapdoor.name": "Kopott réz csapóajtó", "tile.oxidized_copper_trapdoor.name": "Oxidált réz csapóajtó", "tile.waxed_copper_trapdoor.name": "Viaszolt réz csapóajtó", "tile.waxed_exposed_copper_trapdoor.name": "Viaszolt kopott réz csapóajtó", - "tile.waxed_oxidized_copper_trapdoor.name": "Viaszolt, oxidált réz csapóajtó", - "tile.waxed_weathered_copper_trapdoor.name": "Viaszolt, viharvert réz csapóajtó", + "tile.waxed_oxidized_copper_trapdoor.name": "Viaszolt oxidált réz csapóajtó", + "tile.waxed_weathered_copper_trapdoor.name": "Viaszolt viharvert réz csapóajtó", "tile.weathered_copper_trapdoor.name": "Viharvert réz csapóajtó", "tile.raw_copper_block.name": "Nyersrézblokk", "tile.raw_iron_block.name": "Nyersvasblokk", @@ -62189,7 +62757,92 @@ export const langs: Langs = { "item.brown_egg.name": "Barna tojás", "item.blue_egg.name": "Kék tojás", "tile.short_dry_grass.name": "Rövid száraz fű", - "tile.tall_dry_grass.name": "Magas száraz fű" + "tile.tall_dry_grass.name": "Magas száraz fű", + "entity.happy_ghast.name": "Boldog szellem", + "item.spawn_egg.entity.happy_ghast.name": "Boldog szellem idézőtojás", + "tile.dried_ghast.name": "Szárított szellem", + "item.black_harness.name": "Fekete hám", + "item.blue_harness.name": "Kék hám", + "item.brown_harness.name": "Barna hám", + "item.cyan_harness.name": "Türkizkék hám", + "item.gray_harness.name": "Szürke hám", + "item.green_harness.name": "Zöld hám", + "item.light_blue_harness.name": "Világoskék hám", + "item.light_gray_harness.name": "Világosszürke hám", + "item.lime_harness.name": "Limezöld hám", + "item.magenta_harness.name": "Bíborvörös hám", + "item.orange_harness.name": "Narancssárga hám", + "item.pink_harness.name": "Rózsaszín hám", + "item.purple_harness.name": "Lila hám", + "item.red_harness.name": "Vörös hám", + "item.white_harness.name": "Fehér hám", + "item.yellow_harness.name": "Sárga hám", + "entity.copper_golem.name": "Rézgólem", + "item.spawn_egg.entity.copper_golem.name": "Rézgólemidéző tojás", + "item.copper_nugget.name": "Rézrög", + "item.copper_sword.name": "Rézkard", + "item.copper_pickaxe.name": "Rézcsákány", + "item.copper_axe.name": "Rézfejsze", + "item.copper_shovel.name": "Rézásó", + "item.copper_hoe.name": "Rézkapa", + "item.copper_boots.name": "Rézcsizma", + "item.copper_leggings.name": "Réz lábszárvédő", + "item.copper_chestplate.name": "Réz mellvért", + "item.copper_helmet.name": "Rézsisak", + "tile.copper_chest.name": "Rézláda", + "tile.exposed_copper_chest.name": "Kopott rézláda", + "tile.weathered_copper_chest.name": "Viharvert rézláda", + "tile.oxidized_copper_chest.name": "Oxidált rézláda", + "tile.waxed_copper_chest.name": "Viaszolt rézláda", + "tile.waxed_exposed_copper_chest.name": "Viaszolt kopott rézláda", + "tile.waxed_weathered_copper_chest.name": "Viaszolt viharvert rézláda", + "tile.waxed_oxidized_copper_chest.name": "Viaszolt oxidált rézláda", + "tile.acacia_shelf.name": "Akáciafa polc", + "tile.bamboo_shelf.name": "Bambusz polc", + "tile.birch_shelf.name": "Nyírfa polc", + "tile.cherry_shelf.name": "Cseresznyefa polc", + "tile.crimson_shelf.name": "Karmazsin polc", + "tile.dark_oak_shelf.name": "Sötét tölgyfa polc", + "tile.jungle_shelf.name": "Trópusi fa polc", + "tile.mangrove_shelf.name": "Mangrove polc", + "tile.oak_shelf.name": "Tölgyfa polc", + "tile.pale_oak_shelf.name": "Fakó tölgyfa polc", + "tile.spruce_shelf.name": "Fenyőfa polc", + "tile.warped_shelf.name": "Deformált polc", + "tile.copper_golem_statue.name": "Rézgólem-szobor", + "tile.exposed_copper_golem_statue.name": "Kopott rézgólem-szobor", + "tile.weathered_copper_golem_statue.name": "Viharvert rézgólem-szobor", + "tile.oxidized_copper_golem_statue.name": "Oxidált rézgólem-szobor", + "tile.waxed_copper_golem_statue.name": "Viaszolt rézgólem-szobor", + "tile.waxed_exposed_copper_golem_statue.name": "Viaszolt kopott rézgólem-szobor", + "tile.waxed_weathered_copper_golem_statue.name": "Viaszolt viharvert rézgólem-szobor", + "tile.waxed_oxidized_copper_golem_statue.name": "Viaszolt oxidált rézgólem-szobor", + "tile.copper_chain.name": "Rézlánc", + "tile.exposed_copper_chain.name": "Kopott rézlánc", + "tile.weathered_copper_chain.name": "Viharvert rézlánc", + "tile.oxidized_copper_chain.name": "Oxidált rézlánc", + "tile.waxed_copper_chain.name": "Viaszolt rézlánc", + "tile.waxed_exposed_copper_chain.name": "Viaszolt kopott rézlánc", + "tile.waxed_weathered_copper_chain.name": "Viaszolt viharvert rézlánc", + "tile.waxed_oxidized_copper_chain.name": "Viaszolt oxidált rézlánc", + "tile.copper_bars.name": "Rézrács", + "tile.exposed_copper_bars.name": "Kopott rézrács", + "tile.weathered_copper_bars.name": "Viharvert rézrács", + "tile.oxidized_copper_bars.name": "Oxidált rézrács", + "tile.waxed_copper_bars.name": "Viaszolt rézrács", + "tile.waxed_exposed_copper_bars.name": "Viaszolt kopott rézrács", + "tile.waxed_weathered_copper_bars.name": "Viaszolt viharvert rézrács", + "tile.waxed_oxidized_copper_bars.name": "Viaszolt oxidált rézrács", + "tile.copper_lantern.name": "Rézlámpás", + "tile.exposed_copper_lantern.name": "Kopott rézlámpás", + "tile.weathered_copper_lantern.name": "Viharvert rézlámpás", + "tile.oxidized_copper_lantern.name": "Oxidált rézlámpás", + "tile.waxed_copper_lantern.name": "Viaszolt rézlámpás", + "tile.waxed_exposed_copper_lantern.name": "Viaszolt kopott rézlámpás", + "tile.waxed_weathered_copper_lantern.name": "Viaszolt viharvert rézlámpás", + "tile.waxed_oxidized_copper_lantern.name": "Viaszolt oxidált rézlámpás", + "tile.copper_torch.name": "Rézfáklya", + "tile.iron_chain.name": "Vaslánc" }, "id_ID": { "enchantment.arrowDamage": "Kekuatan", @@ -62381,7 +63034,7 @@ export const langs: Langs = { "item.apple.name": "Apel", "item.axolotlAdultBodySingle.name": "Axolotl %1$s Dewasa", "item.axolotlBabyBodySingle.name": "Axolotl %1$s Bayi", - "item.axolotlColorLucy.name": "Leukistik", + "item.axolotlColorLucy.name": "Leusistik", "item.axolotlColorCyan.name": "Sian", "item.axolotlColorGold.name": "Emas", "item.axolotlColorWild.name": "Cokelat", @@ -62502,9 +63155,9 @@ export const langs: Langs = { "item.banner.diagonal_left.lime": "Per Bend Kiri Limau", "item.banner.diagonal_left.magenta": "Per Bend Kiri Magenta", "item.banner.diagonal_left.orange": "Per Bend Kiri Oranye", - "item.banner.diagonal_left.pink": "Per Bend Kiri Merah Muda", + "item.banner.diagonal_left.pink": "Per Bend Kanan Merah Muda", "item.banner.diagonal_left.purple": "Per Bend Kiri Ungu", - "item.banner.diagonal_left.red": "Per Bend Kiri Merah", + "item.banner.diagonal_left.red": "Per Bend Kanan Merah", "item.banner.diagonal_left.silver": "Per Bend Kiri Abu-Abu Muda", "item.banner.diagonal_left.white": "Per Bend Kiri Putih", "item.banner.diagonal_left.yellow": "Per Bend Kiri Kuning", @@ -62534,9 +63187,9 @@ export const langs: Langs = { "item.banner.diagonal_up_left.lime": "Per Bend Limau Terbalik", "item.banner.diagonal_up_left.magenta": "Per Bend Magenta Terbalik", "item.banner.diagonal_up_left.orange": "Per Bend Oranye Terbalik", - "item.banner.diagonal_up_left.pink": "Per Bend Merah Muda", + "item.banner.diagonal_up_left.pink": "Per Bend Terbalik Merah Muda", "item.banner.diagonal_up_left.purple": "Per Bend Ungu Terbalik", - "item.banner.diagonal_up_left.red": "Per Bend Merah Terbalik", + "item.banner.diagonal_up_left.red": "Per Bend Terbalik Merah", "item.banner.diagonal_up_left.silver": "Per Bend Abu-Abu Muda Terbalik", "item.banner.diagonal_up_left.white": "Per Bend Putih Terbalik", "item.banner.diagonal_up_left.yellow": "Per Bend Kuning Terbalik", @@ -62550,9 +63203,9 @@ export const langs: Langs = { "item.banner.diagonal_up_right.lime": "Per Bend Kanan Limau Terbalik", "item.banner.diagonal_up_right.magenta": "Per Bend Kanan Magenta Terbalik", "item.banner.diagonal_up_right.orange": "Per Bend Kanan Oranye Terbalik", - "item.banner.diagonal_up_right.pink": "Per Bend Kanan Merah Muda Terbalik", + "item.banner.diagonal_up_right.pink": "Per Bend Kanan Terbalik Merah Muda", "item.banner.diagonal_up_right.purple": "Per Bend Kanan Ungu Terbalik", - "item.banner.diagonal_up_right.red": "Per Bend Kanan Merah Terbalik", + "item.banner.diagonal_up_right.red": "Per Bend Kanan Terbalik Merah", "item.banner.diagonal_up_right.silver": "Per Bend Kanan Abu-Abu Muda Terbalik", "item.banner.diagonal_up_right.white": "Per Bend Kanan Putih Terbalik", "item.banner.diagonal_up_right.yellow": "Per Bend Kanan Kuning Terbalik", @@ -62566,9 +63219,9 @@ export const langs: Langs = { "item.banner.flow.lime": "Aliran Hijau Limau", "item.banner.flow.magenta": "Aliran Magenta", "item.banner.flow.orange": "Aliran Oranye", - "item.banner.flow.pink": "Aliran Merah Muda", + "item.banner.flow.pink": "Juntai Merah Muda", "item.banner.flow.purple": "Aliran Ungu", - "item.banner.flow.red": "Aliran Merah", + "item.banner.flow.red": "Juntai Merah", "item.banner.flow.silver": "Aliran Abu-Abu Muda", "item.banner.flow.white": "Aliran Putih", "item.banner.flow.yellow": "Aliran Kuning", @@ -62614,9 +63267,9 @@ export const langs: Langs = { "item.banner.gradient.lime": "Gradien Limau", "item.banner.gradient.magenta": "Gradien Magenta", "item.banner.gradient.orange": "Gradien Oranye", - "item.banner.gradient.pink": "Gradien Merah Muda", + "item.banner.gradient.pink": "Gradasi Merah Muda", "item.banner.gradient.purple": "Gradien Ungu", - "item.banner.gradient.red": "Gradien Merah", + "item.banner.gradient.red": "Gradasi Merah", "item.banner.gradient.silver": "Gradien Abu-Abu Muda", "item.banner.gradient.white": "Gradien Putih", "item.banner.gradient.yellow": "Gradien Kuning", @@ -62630,9 +63283,9 @@ export const langs: Langs = { "item.banner.gradient_up.lime": "Gradien Dasar Limau", "item.banner.gradient_up.magenta": "Gradien Dasar Magenta", "item.banner.gradient_up.orange": "Gradien Dasar Oranye", - "item.banner.gradient_up.pink": "Gradien Dasar Merah Muda", + "item.banner.gradient_up.pink": "Gradasi Dasar Merah Muda", "item.banner.gradient_up.purple": "Gradien Dasar Ungu", - "item.banner.gradient_up.red": "Gradien Dasar Merah", + "item.banner.gradient_up.red": "Gradasi Dasar Merah", "item.banner.gradient_up.silver": "Gradien Dasar Abu-Abu Muda", "item.banner.gradient_up.white": "Gradien Dasar Putih", "item.banner.gradient_up.yellow": "Gradien Dasar Kuning", @@ -62680,9 +63333,9 @@ export const langs: Langs = { "item.banner.half_horizontal_bottom.lime": "Per Fess Limau Terbalik", "item.banner.half_horizontal_bottom.magenta": "Per Fess Magenta Terbalik", "item.banner.half_horizontal_bottom.orange": "Per Fess Oranye Terbalik", - "item.banner.half_horizontal_bottom.pink": "Per Fess Merah Muda Terbalik", + "item.banner.half_horizontal_bottom.pink": "Per Fess Terbalik Merah Muda", "item.banner.half_horizontal_bottom.purple": "Per Fess Ungu Terbalik", - "item.banner.half_horizontal_bottom.red": "Per Fess Merah Terbalik", + "item.banner.half_horizontal_bottom.red": "Per Fess Terbalik Merah", "item.banner.half_horizontal_bottom.silver": "Per Fess Abu-Abu Muda Terbalik", "item.banner.half_horizontal_bottom.white": "Per Fess Putih Terbalik", "item.banner.half_horizontal_bottom.yellow": "Per Fess Kuning Terbalik", @@ -62712,7 +63365,7 @@ export const langs: Langs = { "item.banner.half_vertical_right.lime": "Per Pale Limau Terbalik", "item.banner.half_vertical_right.magenta": "Per Pale Magenta Terbalik", "item.banner.half_vertical_right.orange": "Per Pale Oranye Terbalik", - "item.banner.half_vertical_right.pink": "Per Pale Merah Muda Terbalik", + "item.banner.half_vertical_right.pink": "Per Pale Terbalik Merah Muda", "item.banner.half_vertical_right.purple": "Per Pale Ungu Terbalik", "item.banner.half_vertical_right.red": "Per Pale Merah Terbalik", "item.banner.half_vertical_right.silver": "Per Pale Abu-Abu Muda Terbalik", @@ -62785,9 +63438,9 @@ export const langs: Langs = { "item.banner.skull.lime": "Charge Kepala Tengkorak Limau", "item.banner.skull.magenta": "Charge Kepala Tengkorak Magenta", "item.banner.skull.orange": "Charge Kepala Tengkorak Oranye", - "item.banner.skull.pink": "Charge Kepala Tengkorak Merah Muda", + "item.banner.skull.pink": "Charge Tengkorak Merah Muda", "item.banner.skull.purple": "Charge Kepala Tengkorak Ungu", - "item.banner.skull.red": "Charge Kepala Tengkorak Merah", + "item.banner.skull.red": "Charge Tengkorak Merah", "item.banner.skull.silver": "Charge Kepala Tengkorak Abu-Abu Muda", "item.banner.skull.white": "Charge Kepala Tengkorak Putih", "item.banner.skull.yellow": "Charge Kepala Tengkorak Kuning", @@ -62929,9 +63582,9 @@ export const langs: Langs = { "item.banner.stripe_downleft.lime": "Bend Kiri Limau", "item.banner.stripe_downleft.magenta": "Bend Kiri Magenta", "item.banner.stripe_downleft.orange": "Bend Kiri Oranye", - "item.banner.stripe_downleft.pink": "Bend Kiri Merah Muda", + "item.banner.stripe_downleft.pink": "Bend Kanan Merah Muda", "item.banner.stripe_downleft.purple": "Bend Kiri Ungu", - "item.banner.stripe_downleft.red": "Bend Kiri Merah", + "item.banner.stripe_downleft.red": "Bend Kanan Merah", "item.banner.stripe_downleft.silver": "Bend Kiri Abu-Abu Muda", "item.banner.stripe_downleft.white": "Bend Kiri Putih", "item.banner.stripe_downleft.yellow": "Bend Kiri Kuning", @@ -63057,9 +63710,9 @@ export const langs: Langs = { "item.banner.triangles_bottom.lime": "Dasar Limau Berlekuk", "item.banner.triangles_bottom.magenta": "Dasar Magenta Berlekuk", "item.banner.triangles_bottom.orange": "Dasar Oranye Berlekuk", - "item.banner.triangles_bottom.pink": "Dasar Merah Muda Berlekuk", + "item.banner.triangles_bottom.pink": "Dasar Bertakuk Merah Muda", "item.banner.triangles_bottom.purple": "Dasar Ungu Berlekuk", - "item.banner.triangles_bottom.red": "Dasar Merah Berlekuk", + "item.banner.triangles_bottom.red": "Dasar Bertakuk Merah", "item.banner.triangles_bottom.silver": "Dasar Abu-Abu Muda Berlekuk", "item.banner.triangles_bottom.white": "Dasar Putih Berlekuk", "item.banner.triangles_bottom.yellow": "Dasar Kuning Berlekuk", @@ -63349,6 +64002,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Baju Zirah Kuda Berlian", "item.horsearmorgold.name": "Baju Zirah Kuda Emas", "item.horsearmoriron.name": "Baju Zirah Kuda Besi", + "item.copper_horse_armor.name": "Baju Zirah Kuda Tembaga", "item.horsearmorleather.name": "Baju Zirah Kuda Kulit", "item.gold_ingot.name": "Emas Batangan", "item.iron_ingot.name": "Besi Batangan", @@ -63532,6 +64186,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Kreator", "item.record_creator_music_box.desc": "Lena Raine - Kreator (Kotak Musik)", "item.record_precipice.desc": "Aaron Cherof - Tebing", + "item.record_tears.desc": "Amos Roddy - Air Mata", + "item.record_lava_chicken.desc": "Ramuan Hiper - Ayam Lahar", "item.redstone.name": "Debu Batu Merah", "item.reeds.name": "Tebu", "item.kelp.name": "Rumput Laut", @@ -63812,8 +64468,8 @@ export const langs: Langs = { "tile.mud.name": "Lumpur", "tile.packed_mud.name": "Lumpur Padat", "tile.mud_bricks.name": "Bata Lumpur", - "tile.mud_brick_slab.name": "Lempengan Bata Lumpur", - "tile.mud_brick_double_slab": "Lempengan Ganda Bata Lumpur", + "tile.mud_brick_slab.name": "Lempeng Bata Lumpur", + "tile.mud_brick_double_slab": "Lempeng Ganda Bata Lumpur", "tile.mud_brick_stairs.name": "Tangga Bata Lumpur", "tile.mud_brick_wall.name": "Dinding Bata Lumpur", "tile.mangrove_leaves.name": "Daun Bakau", @@ -63828,19 +64484,19 @@ export const langs: Langs = { "item.chest_boat.big_oak.name": "Perahu Ek Gelap dengan Peti", "item.chest_boat.mangrove.name": "Perahu Bakau dengan Peti", "tile.mangrove_log.name": "Batang Bakau", - "tile.stripped_mangrove_log.name": "Batang Bakau Bersetrip", + "tile.stripped_mangrove_log.name": "Batang Bakau Kupas", "tile.mangrove_planks.name": "Papan Bakau", "tile.mangrove_button.name": "Tombol Bakau", "tile.mangrove_stairs.name": "Tangga Bakau", "tile.mangrove_slab.name": "Lempeng Bakau", - "tile.mangrove_pressure_plate.name": "Pelat Tekanan Bakau", + "tile.mangrove_pressure_plate.name": "Pelat Tekan Bakau", "tile.mangrove_fence.name": "Pagar Bakau", "tile.mangrove_fence_gate.name": "Gerbang Pagar Bakau", "item.mangrove_door.name": "Pintu Bakau", "item.mangrove_sign.name": "Tanda Bakau", "tile.mangrove_trapdoor.name": "Pintu Perangkap Bakau", "tile.mangrove_wood.name": "Kayu Bakau", - "tile.stripped_mangrove_wood.name": "Kayu Bakau Bersetrip", + "tile.stripped_mangrove_wood.name": "Kayu Bakau Kupas", "item.boat.mangrove.name": "Perahu Bakau", "item.echo_shard.name": "Serpihan Gema", "item.recovery_compass.name": "Kompas Pemulihan", @@ -64331,6 +64987,13 @@ export const langs: Langs = { "tile.glowstone.name": "Batu Bersinar", "tile.glow_lichen.name": "Lichen Bersinar", "tile.lightning_rod.name": "Penangkal Petir", + "tile.exposed_lightning_rod.name": "Penangkal Petir Terbuka", + "tile.weathered_lightning_rod.name": "Penangkal Petir Usang", + "tile.oxidized_lightning_rod.name": "Penangkal Petir Teroksidasi", + "tile.waxed_lightning_rod.name": "Penangkal Petir Berlapis Lilin", + "tile.waxed_exposed_lightning_rod.name": "Penangkal Petir Terbuka Berlapis Lilin", + "tile.waxed_weathered_lightning_rod.name": "Penangkal Petir Usang Berlapis Lilin", + "tile.waxed_oxidized_lightning_rod.name": "Penangkal Petir Teroksidasi Berlapis Lilin", "tile.lit_pumpkin.name": "Jack o'Lantern", "tile.lockedchest.name": "Peti Terkunci", "tile.log.acacia.name": "Batang Akasia", @@ -64680,7 +65343,7 @@ export const langs: Langs = { "tile.glazedTerracotta.light_blue.name": "Terakota Mengkilap Biru Muda", "tile.glazedTerracotta.yellow.name": "Terakota Mengkilap Kuning", "tile.glazedTerracotta.lime.name": "Terakota Mengkilap Limau", - "tile.glazedTerracotta.pink.name": "Terakota Mengkilap Merah Muda", + "tile.glazedTerracotta.pink.name": "Terakota Berkilap Merah Muda", "tile.glazedTerracotta.gray.name": "Terakota Mengkilap Abu-Abu", "tile.glazedTerracotta.silver.name": "Terakota Mengkilap Abu-Abu Muda", "tile.glazedTerracotta.cyan.name": "Terakota Mengkilap Sian", @@ -64688,7 +65351,7 @@ export const langs: Langs = { "tile.glazedTerracotta.blue.name": "Terakota Mengkilap Biru", "tile.glazedTerracotta.brown.name": "Terakota Mengkilap Cokelat", "tile.glazedTerracotta.green.name": "Terakota Mengkilap Hijau", - "tile.glazedTerracotta.red.name": "Terakota Mengkilap Merah", + "tile.glazedTerracotta.red.name": "Terakota Berkilap Merah", "tile.glazedTerracotta.black.name": "Terakota Mengkilap Hitam", "tile.concrete.black.name": "Beton Hitam", "tile.concrete.red.name": "Beton Merah", @@ -64712,7 +65375,7 @@ export const langs: Langs = { "tile.glazedTerracottaLightBlue.name": "Terakota Mengkilap Biru Muda", "tile.glazedTerracottaYellow.name": "Terakota Mengkilap Kuning", "tile.glazedTerracottaLime.name": "Terakota Mengkilap Limau", - "tile.glazedTerracottaPink.name": "Terakota Mengkilap Merah Muda", + "tile.glazedTerracottaPink.name": "Terakota Berkilap Merah Muda", "tile.glazedTerracottaGray.name": "Terakota Mengkilap Abu-Abu", "tile.glazedTerracottaSilver.name": "Terakota Mengkilap Abu-Abu Muda", "tile.glazedTerracottaCyan.name": "Terakota Mengkilap Sian", @@ -64720,7 +65383,7 @@ export const langs: Langs = { "tile.glazedTerracottaBlue.name": "Terakota Mengkilap Biru", "tile.glazedTerracottaBrown.name": "Terakota Mengkilap Cokelat", "tile.glazedTerracottaGreen.name": "Terakota Mengkilap Hijau", - "tile.glazedTerracottaRed.name": "Terakota Mengkilap Merah", + "tile.glazedTerracottaRed.name": "Terakota Berkilap Merah", "tile.glazedTerracottaBlack.name": "Terakota Mengkilap Hitam", "tile.concretePowder.black.name": "Serbuk Beton Hitam", "tile.concretePowder.red.name": "Serbuk Beton Merah", @@ -64780,26 +65443,26 @@ export const langs: Langs = { "tile.cobbled_deepslate.name": "Batu Tulis Dalam Bulat", "tile.dripstone_block.name": "Blok Batu Tetes", "tile.pointed_dripstone.name": "Batu Tetes Runcing", - "tile.cobbled_deepslate_slab.name": "Lempengan Batu Tulis Dalam Bulat", + "tile.cobbled_deepslate_slab.name": "Lempeng Batu Tulis Dalam Bulat", "tile.cobbled_deepslate_stairs.name": "Tangga Batu Tulis Dalam Bulat", "tile.cobbled_deepslate_wall.name": "Dinding Batu Tulis Dalam Bulat", "tile.polished_deepslate.name": "Batu Tulis Dalam Poles", - "tile.polished_deepslate_slab.name": "Lempengan Batu Tulis Dalam Poles", + "tile.polished_deepslate_slab.name": "Lempeng Batu Tulis Dalam Poles", "tile.polished_deepslate_stairs.name": "Tangga Batu Tulis Dalam Poles", "tile.polished_deepslate_wall.name": "Dinding Batu Tulis Dalam Poles", "tile.deepslate_tiles.name": "Ubin Batu Tulis Dalam", - "tile.deepslate_tile_slab.name": "Lempengan Ubin Batu Tulis Dalam", + "tile.deepslate_tile_slab.name": "Lempeng Ubin Batu Tulis Dalam", "tile.deepslate_tile_stairs.name": "Tangga Ubin Batu Tulis Dalam", "tile.deepslate_tile_wall.name": "Dinding Ubin Batu Tulis Dalam", "tile.deepslate_bricks.name": "Bata Batu Tulis Dalam", - "tile.deepslate_brick_slab.name": "Lempengan Bata Batu Tulis Dalam", + "tile.deepslate_brick_slab.name": "Lempeng Bata Batu Tulis Dalam", "tile.deepslate_brick_stairs.name": "Tangga Bata Batu Tulis Dalam", "tile.deepslate_brick_wall.name": "Dinding Bata Batu Tulis Dalam", "tile.chiseled_deepslate.name": "Batu Tulis Dalam Dipahat", - "tile.cobbled_deepslate_double_slab.name": "Lempengan Ganda Batu Tulis Dalam Bulat", - "tile.polished_deepslate_double_slab.name": "Lempengan Ganda Batu Tulis Dalam Poles", - "tile.deepslate_tile_double_slab.name": "Lempengan Ganda Ubin Batu Tulis Dalam", - "tile.deepslate_brick_double_slab.name": "Lempengan Ganda Bata Batu Tulis Dalam", + "tile.cobbled_deepslate_double_slab.name": "Lempeng Ganda Batu Tulis Dalam Bulat", + "tile.polished_deepslate_double_slab.name": "Lempeng Ganda Batu Tulis Dalam Poles", + "tile.deepslate_tile_double_slab.name": "Lempeng Ganda Ubin Batu Tulis Dalam", + "tile.deepslate_brick_double_slab.name": "Lempeng Ganda Bata Batu Tulis Dalam", "tile.deepslate_lapis_ore.name": "Bijih Lapis Lazuli Batu Tulis Dalam", "tile.deepslate_iron_ore.name": "Bijih Besi Batu Tulis Dalam", "tile.deepslate_gold_ore.name": "Bijih Emas Batu Tulis Dalam", @@ -64813,7 +65476,7 @@ export const langs: Langs = { "tile.pitcher_plant.name": "Tumbuhan Pemakan Serangga", "tile.sniffer_egg.name": "Telur Sniffer", "tile.torchflower.name": "Bunga Kecombrang", - "item.copper_ingot.name": "Tembaga Batangan", + "item.copper_ingot.name": "Batangan Tembaga", "item.raw_copper.name": "Tembaga Mentah", "item.raw_iron.name": "Besi Mentah", "item.raw_gold.name": "Emas Mentah", @@ -64946,7 +65609,92 @@ export const langs: Langs = { "item.brown_egg.name": "Telur Cokelat", "item.blue_egg.name": "Telur Biru", "tile.short_dry_grass.name": "Rumput Kering Pendek", - "tile.tall_dry_grass.name": "Rumput Kering Tinggi" + "tile.tall_dry_grass.name": "Rumput Kering Tinggi", + "entity.happy_ghast.name": "Ghast Bahagia", + "item.spawn_egg.entity.happy_ghast.name": "Telur Kemunculan Ghast Bahagia", + "tile.dried_ghast.name": "Ghast Kering", + "item.black_harness.name": "Tali Kekang Hitam", + "item.blue_harness.name": "Tali Kekang Biru", + "item.brown_harness.name": "Tali Kekang Cokelat", + "item.cyan_harness.name": "Tali Kekang Sian", + "item.gray_harness.name": "Tali Kekang Abu-Abu", + "item.green_harness.name": "Tali Kekang Hijau", + "item.light_blue_harness.name": "Tali Kekang Biru Muda", + "item.light_gray_harness.name": "Tali Kekang Abu-Abu Muda", + "item.lime_harness.name": "Tali Kekang Hijau Pupus", + "item.magenta_harness.name": "Tali Kekang Magenta", + "item.orange_harness.name": "Tali Kekang Oranye", + "item.pink_harness.name": "Tali Kekang Merah Muda", + "item.purple_harness.name": "Tali Kekang Ungu", + "item.red_harness.name": "Tali Kekang Merah", + "item.white_harness.name": "Tali Kekang Putih", + "item.yellow_harness.name": "Tali Kekang Kuning", + "entity.copper_golem.name": "Golem Tembaga", + "item.spawn_egg.entity.copper_golem.name": "Telur Kemunculan Golem Tembaga", + "item.copper_nugget.name": "Bongkahan Tembaga", + "item.copper_sword.name": "Pedang Tembaga", + "item.copper_pickaxe.name": "Beliung Tembaga", + "item.copper_axe.name": "Kapak Tembaga", + "item.copper_shovel.name": "Sekop Tembaga", + "item.copper_hoe.name": "Cangkul Tembaga", + "item.copper_boots.name": "Sepatu Tembaga", + "item.copper_leggings.name": "Celana Tembaga", + "item.copper_chestplate.name": "Baju Tembaga", + "item.copper_helmet.name": "Helm Tembaga", + "tile.copper_chest.name": "Peti Tembaga", + "tile.exposed_copper_chest.name": "Peti Tembaga Terbuka", + "tile.weathered_copper_chest.name": "Peti Tembaga Usang", + "tile.oxidized_copper_chest.name": "Peti Tembaga Teroksidasi", + "tile.waxed_copper_chest.name": "Peti Tembaga Berlapis Lilin", + "tile.waxed_exposed_copper_chest.name": "Peti Tembaga Terbuka Berlapis Lilin", + "tile.waxed_weathered_copper_chest.name": "Peti Tembaga Usang Berlapis Lilin", + "tile.waxed_oxidized_copper_chest.name": "Peti Tembaga Teroksidasi Berlapis Lilin", + "tile.acacia_shelf.name": "Rak Akasia", + "tile.bamboo_shelf.name": "Rak Bambu", + "tile.birch_shelf.name": "Rak Betula", + "tile.cherry_shelf.name": "Rak Sakura", + "tile.crimson_shelf.name": "Rak Merah Tua", + "tile.dark_oak_shelf.name": "Rak Ek Gelap", + "tile.jungle_shelf.name": "Rak Rimba", + "tile.mangrove_shelf.name": "Rak Bakau", + "tile.oak_shelf.name": "Rak Ek", + "tile.pale_oak_shelf.name": "Rak Ek Pucat", + "tile.spruce_shelf.name": "Rak Spruce", + "tile.warped_shelf.name": "Rak Melengkung", + "tile.copper_golem_statue.name": "Patung Golem Tembaga", + "tile.exposed_copper_golem_statue.name": "Patung Golem Tembaga Terbuka", + "tile.weathered_copper_golem_statue.name": "Patung Golem Tembaga Usang", + "tile.oxidized_copper_golem_statue.name": "Patung Golem Tembaga Teroksidasi", + "tile.waxed_copper_golem_statue.name": "Patung Golem Tembaga Berlapis Lilin", + "tile.waxed_exposed_copper_golem_statue.name": "Patung Golem Tembaga Terbuka Berlapis Lilin", + "tile.waxed_weathered_copper_golem_statue.name": "Patung Golem Tembaga Usang Berlapis Lilin", + "tile.waxed_oxidized_copper_golem_statue.name": "Patung Golem Tembaga Teroksidasi Berlapis Lilin", + "tile.copper_chain.name": "Rantai Tembaga", + "tile.exposed_copper_chain.name": "Rantai Tembaga Terbuka", + "tile.weathered_copper_chain.name": "Rantai Tembaga Usang", + "tile.oxidized_copper_chain.name": "Rantai Tembaga Teroksidasi", + "tile.waxed_copper_chain.name": "Rantai Tembaga Berlapis Lilin", + "tile.waxed_exposed_copper_chain.name": "Rantai Tembaga Terbuka Berlapis Lilin", + "tile.waxed_weathered_copper_chain.name": "Rantai Tembaga Usang Berlapis Lilin", + "tile.waxed_oxidized_copper_chain.name": "Rantai Tembaga Teroksidasi Berlapis Lilin", + "tile.copper_bars.name": "Jeruji Tembaga", + "tile.exposed_copper_bars.name": "Jeruji Tembaga Terbuka", + "tile.weathered_copper_bars.name": "Jeruji Tembaga Usang", + "tile.oxidized_copper_bars.name": "Jeruji Tembaga Teroksidasi", + "tile.waxed_copper_bars.name": "Jeruji Tembaga Berlapis Lilin", + "tile.waxed_exposed_copper_bars.name": "Jeruji Tembaga Terbuka Berlapis Lilin", + "tile.waxed_weathered_copper_bars.name": "Jeruji Tembaga Usang Berlapis Lilin", + "tile.waxed_oxidized_copper_bars.name": "Jeruji Tembaga Teroksidasi Berlapis Lilin", + "tile.copper_lantern.name": "Lentera Tembaga", + "tile.exposed_copper_lantern.name": "Lentera Tembaga Terbuka", + "tile.weathered_copper_lantern.name": "Lentera Tembaga Usang", + "tile.oxidized_copper_lantern.name": "Lentera Tembaga Teroksidasi", + "tile.waxed_copper_lantern.name": "Lentera Tembaga Berlapis Lilin", + "tile.waxed_exposed_copper_lantern.name": "Lentera Tembaga Terbuka Berlapis Lilin", + "tile.waxed_weathered_copper_lantern.name": "Lentera Tembaga Usang Berlapis Lilin", + "tile.waxed_oxidized_copper_lantern.name": "Lentera Tembaga Teroksidasi Berlapis Lilin", + "tile.copper_torch.name": "Obor Tembaga", + "tile.iron_chain.name": "Rantai Besi" }, "nb_NO": { "enchantment.arrowDamage": "Kraft", @@ -64966,7 +65714,7 @@ export const langs: Langs = { "enchantment.fire": "Ild", "enchantment.fishingSpeed": "Agn", "enchantment.frostwalker": "Rimvandrer", - "enchantment.heavy_weapon.breach": "Utbrudd", + "enchantment.heavy_weapon.breach": "Brudd", "enchantment.heavy_weapon.density": "Tetthet", "enchantment.heavy_weapon.windburst": "Vindeksplosjon", "enchantment.knockback": "Tilbakeslag", @@ -65046,7 +65794,7 @@ export const langs: Langs = { "entity.axolotl.name": "Axolotl", "entity.ghast.name": "Geist", "entity.glow_squid.name": "Glødende blekksprut", - "entity.piglin_brute.name": "Piglin brute", + "entity.piglin_brute.name": "Piglin Brute", "entity.guardian.name": "Vokter", "entity.hoglin.name": "Hoglin", "entity.horse.name": "Hest", @@ -66106,6 +66854,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Hesterustning av diamant", "item.horsearmorgold.name": "Hesterustning av gull", "item.horsearmoriron.name": "Hesterustning av jern", + "item.copper_horse_armor.name": "Kobberhesterustning", "item.horsearmorleather.name": "Hesterustning av skinn", "item.gold_ingot.name": "Gullbarre", "item.iron_ingot.name": "Jernbarre", @@ -66177,8 +66926,8 @@ export const langs: Langs = { "item.spawn_egg.entity.tropicalfish.name": "Genereringsegg for tropisk fisk", "item.spawn_egg.entity.pig.name": "Genereringsegg for gris", "item.spawn_egg.entity.sheep.name": "Genereringsegg for sau", - "item.spawn_egg.entity.npc.name": "Genereringsegg for NPC", - "item.spawn_egg.entity.npc.failed": "Du trenger kreativ + operatør for å generere en datastyrt figur", + "item.spawn_egg.entity.npc.name": "Genereringsegg for ikke-spillerstyrt karakter", + "item.spawn_egg.entity.npc.failed": "Du trenger kreativ + operatør for å generere en ikke-spillerstyrt karakter", "item.spawn_egg.entity.wolf.name": "Genereringsegg for ulv", "item.spawn_egg.entity.villager.name": "Genereringsegg for landsbyboer", "item.spawn_egg.entity.villager_v2.name": "Genereringsegg for landsbyboer", @@ -66232,7 +66981,7 @@ export const langs: Langs = { "item.spawn_egg.entity.phantom.name": "Genereringsegg for fantom", "item.spawn_egg.entity.panda.name": "Genereringsegg for panda", "item.spawn_egg.entity.pillager.name": "Genereringsegg for røver", - "item.spawn_egg.entity.piglin_brute.name": "Genereringsegg for piglin-råskinn", + "item.spawn_egg.entity.piglin_brute.name": "Genereringsegg for Piglin Brute", "item.spawn_egg.entity.piglin.name": "Genereringsegg for piglin", "item.spawn_egg.entity.fox.name": "Genereringsegg for rev", "item.spawn_egg.entity.unknown.name": "Genereringsegg", @@ -66289,6 +67038,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine – skaper", "item.record_creator_music_box.desc": "Lena Raine – skaper (musikkboks)", "item.record_precipice.desc": "Aaron Cherof – stup", + "item.record_tears.desc": "Amos Roddy – tårer", + "item.record_lava_chicken.desc": "Hypereliksirer – lavahøne", "item.redstone.name": "Rødsteinstøv", "item.reeds.name": "Sukkerrør", "item.kelp.name": "Tare", @@ -66547,7 +67298,7 @@ export const langs: Langs = { "potion.wither.name": "Forfallseliksir", "potion.wither.splash.name": "Sprutende forfallseliksir", "potion.wither.linger.name": "Langvarig forfallseliksir", - "tile.sculk_sensor.name": "Vibrasjonssensor", + "tile.sculk_sensor.name": "Sculk-sensor", "tile.sculk.name": "Sculk", "tile.sculk_vein.name": "Sculk-vene", "tile.sculk_catalyst.name": "Sculk-katalysator", @@ -67088,6 +67839,13 @@ export const langs: Langs = { "tile.glowstone.name": "Glødestein", "tile.glow_lichen.name": "Glødende lav", "tile.lightning_rod.name": "Lynavleder", + "tile.exposed_lightning_rod.name": "Eksponert lynavleder", + "tile.weathered_lightning_rod.name": "Værbitt lynavleder", + "tile.oxidized_lightning_rod.name": "Oksidert lynavleder", + "tile.waxed_lightning_rod.name": "Vokset lynavleder", + "tile.waxed_exposed_lightning_rod.name": "Vokset eksponert lynavleder", + "tile.waxed_weathered_lightning_rod.name": "Vokset værbitt lynavleder", + "tile.waxed_oxidized_lightning_rod.name": "Vokset oksidert lynavleder", "tile.lit_pumpkin.name": "Gresskarlykt", "tile.lockedchest.name": "Låst kiste", "tile.log.acacia.name": "Akasiestokk", @@ -67683,7 +68441,7 @@ export const langs: Langs = { "tile.green_candle_cake.name": "Kake med grønt stearinlys", "tile.red_candle_cake.name": "Kake med rødt stearinlys", "tile.black_candle_cake.name": "Kake med svart stearinlys", - "item.spyglass.name": "Teleskop", + "item.spyglass.name": "Kikkert", "item.amethyst_shard.name": "Ametystskår", "tile.amethyst_block.name": "Ametystblokk", "tile.budding_amethyst.name": "Spirende ametyst", @@ -67703,7 +68461,92 @@ export const langs: Langs = { "item.brown_egg.name": "Brunt egg", "item.blue_egg.name": "Blått egg", "tile.short_dry_grass.name": "Kort tørt gress", - "tile.tall_dry_grass.name": "Høyt tørt gress" + "tile.tall_dry_grass.name": "Høyt tørt gress", + "entity.happy_ghast.name": "Lykkelig geist", + "item.spawn_egg.entity.happy_ghast.name": "Genereringsegg for lykkelig geist", + "tile.dried_ghast.name": "Tørket geist", + "item.black_harness.name": "Svart sele", + "item.blue_harness.name": "Blå sele", + "item.brown_harness.name": "Brun sele", + "item.cyan_harness.name": "Cyanfarget sele", + "item.gray_harness.name": "Grå sele", + "item.green_harness.name": "Grønn sele", + "item.light_blue_harness.name": "Lyseblå sele", + "item.light_gray_harness.name": "Lysegrå sele", + "item.lime_harness.name": "Limegrønn sele", + "item.magenta_harness.name": "Magentarød sele", + "item.orange_harness.name": "Oransje sele", + "item.pink_harness.name": "Rosa sele", + "item.purple_harness.name": "Lilla sele", + "item.red_harness.name": "Rød sele", + "item.white_harness.name": "Hvit sele", + "item.yellow_harness.name": "Gul sele", + "entity.copper_golem.name": "Kobbergubbe", + "item.spawn_egg.entity.copper_golem.name": "Genereringsegg for kobbergubbe", + "item.copper_nugget.name": "Kobberklump", + "item.copper_sword.name": "Kobbersverd", + "item.copper_pickaxe.name": "Kobberhakke", + "item.copper_axe.name": "Kobberøks", + "item.copper_shovel.name": "Kobberspade", + "item.copper_hoe.name": "Kobbergrev", + "item.copper_boots.name": "Kobberstøvler", + "item.copper_leggings.name": "Kobberbukser", + "item.copper_chestplate.name": "Kobberbrystplate", + "item.copper_helmet.name": "Kobberhjelm", + "tile.copper_chest.name": "Kobberkiste", + "tile.exposed_copper_chest.name": "Eksponert kobberkiste", + "tile.weathered_copper_chest.name": "Forvitret kobberkiste", + "tile.oxidized_copper_chest.name": "Oksidert kobberkiste", + "tile.waxed_copper_chest.name": "Vokset kobberkiste", + "tile.waxed_exposed_copper_chest.name": "Vokset eksponert kobberkiste", + "tile.waxed_weathered_copper_chest.name": "Vokset forvitret kobberkiste", + "tile.waxed_oxidized_copper_chest.name": "Vokset oksidert kobberkiste", + "tile.acacia_shelf.name": "Akasiehylle", + "tile.bamboo_shelf.name": "Bambushylle", + "tile.birch_shelf.name": "Bjørkehylle", + "tile.cherry_shelf.name": "Kirsebærtrehylle", + "tile.crimson_shelf.name": "Høyrød hylle", + "tile.dark_oak_shelf.name": "Hylle av mørk eik", + "tile.jungle_shelf.name": "Jungeltrehylle", + "tile.mangrove_shelf.name": "Mangrovehylle", + "tile.oak_shelf.name": "Eikehylle", + "tile.pale_oak_shelf.name": "Hylle av falmet eik", + "tile.spruce_shelf.name": "Granhylle", + "tile.warped_shelf.name": "Fordreid hylle", + "tile.copper_golem_statue.name": "Kobbergubbestatue", + "tile.exposed_copper_golem_statue.name": "Eksponert kobbergubbestatue", + "tile.weathered_copper_golem_statue.name": "Forvitret kobbergubbestatue", + "tile.oxidized_copper_golem_statue.name": "Oksidert kobbergubbestatue", + "tile.waxed_copper_golem_statue.name": "Vokset kobbergubbestatue", + "tile.waxed_exposed_copper_golem_statue.name": "Vokset eksponert kobbergubbestatue", + "tile.waxed_weathered_copper_golem_statue.name": "Vokset forvitret kobbergubbestatue", + "tile.waxed_oxidized_copper_golem_statue.name": "Vokset oksidert kobbergubbestatue", + "tile.copper_chain.name": "Kobberkjetting", + "tile.exposed_copper_chain.name": "Eksponert kobberkjetting", + "tile.weathered_copper_chain.name": "Forvitret kobberkjetting", + "tile.oxidized_copper_chain.name": "Oksidert kobberkjetting", + "tile.waxed_copper_chain.name": "Vokset kobberkjetting", + "tile.waxed_exposed_copper_chain.name": "Vokset eksponert kobberkjetting", + "tile.waxed_weathered_copper_chain.name": "Vokset forvitret kobberkjetting", + "tile.waxed_oxidized_copper_chain.name": "Vokset oksidert kobberkjetting", + "tile.copper_bars.name": "Kobbergitter", + "tile.exposed_copper_bars.name": "Eksponert kobbergitter", + "tile.weathered_copper_bars.name": "Forvitret kobbergitter", + "tile.oxidized_copper_bars.name": "Oksidert kobbergitter", + "tile.waxed_copper_bars.name": "Vokset kobbergitter", + "tile.waxed_exposed_copper_bars.name": "Vokset eksponert kobbergitter", + "tile.waxed_weathered_copper_bars.name": "Vokset forvitret kobbergitter", + "tile.waxed_oxidized_copper_bars.name": "Vokset oksidert kobbergitter", + "tile.copper_lantern.name": "Kobberlykt", + "tile.exposed_copper_lantern.name": "Eksponert kobberlykt", + "tile.weathered_copper_lantern.name": "Forvitret kobberlykt", + "tile.oxidized_copper_lantern.name": "Oksidert kobberlykt", + "tile.waxed_copper_lantern.name": "Vokset kobberlykt", + "tile.waxed_exposed_copper_lantern.name": "Vokset eksponert kobberlykt", + "tile.waxed_weathered_copper_lantern.name": "Vokset forvitret kobberlykt", + "tile.waxed_oxidized_copper_lantern.name": "Vokset oksidert kobberlykt", + "tile.copper_torch.name": "Kobberfakkel", + "tile.iron_chain.name": "Jernbrynje" }, "pl_PL": { "enchantment.arrowDamage": "Moc", @@ -68863,6 +69706,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Diamentowa zbroja dla konia", "item.horsearmorgold.name": "Złota zbroja dla konia", "item.horsearmoriron.name": "Żelazna zbroja dla konia", + "item.copper_horse_armor.name": "Miedziana zbroja końska", "item.horsearmorleather.name": "Skórzana zbroja dla konia", "item.gold_ingot.name": "Sztabka złota", "item.iron_ingot.name": "Sztabka żelaza", @@ -69046,6 +69890,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine – Twórczyni", "item.record_creator_music_box.desc": "Lena Raine - Twórczyni (Music Box)", "item.record_precipice.desc": "Aaron Cherof – Precipice", + "item.record_tears.desc": "Amos Roddy – Łzy", + "item.record_lava_chicken.desc": "Lawowy kurczak – Hyper Potions", "item.redstone.name": "Pył czerwienitu", "item.reeds.name": "Trzcina cukrowa", "item.kelp.name": "Krasnorosty", @@ -69178,7 +70024,7 @@ export const langs: Langs = { "item.cyan_bundle": "Błękitny zestaw", "item.bundle.empty": "Opróżnij", "item.bundle.empty.description": "Może przechowywać mieszany stos przedmiotów", - "item.bundle.full": "Pełny", + "item.bundle.full": "Pełna", "item.bundle.fullness": "Zostało %s", "item.goat_horn.name": "Kozi róg", "item.minecraft.goat_horn.sound.0": "Rozważać", @@ -69481,7 +70327,7 @@ export const langs: Langs = { "trim_pattern.sentry.name": "Wykończenie zbroi wartownika", "trim_pattern.shaper.name": "Wykończenie zbroi – strugacz", "trim_pattern.silence.name": "Wykończenie zbroi – cisza", - "trim_pattern.snout.name": "Wykończenie zbroi – ryjek", + "trim_pattern.snout.name": "Wykończenie zbroi pyszczkowej", "trim_pattern.spire.name": "Wykończenie zbroi – iglica", "trim_pattern.tide.name": "Wykończenie zbroi pływowej", "trim_pattern.vex.name": "Wykończenie zbroi dręczyciela", @@ -69845,6 +70691,13 @@ export const langs: Langs = { "tile.glowstone.name": "Jasnogłaz", "tile.glow_lichen.name": "Świecący porost", "tile.lightning_rod.name": "Piorunochron", + "tile.exposed_lightning_rod.name": "Odsłonięty piorunochron", + "tile.weathered_lightning_rod.name": "Zwietrzały piorunochron", + "tile.oxidized_lightning_rod.name": "Utleniony piorunochron", + "tile.waxed_lightning_rod.name": "Woskowany piorunochron", + "tile.waxed_exposed_lightning_rod.name": "Woskowany odsłonięty piorunochron", + "tile.waxed_weathered_lightning_rod.name": "Woskowany zwietrzały piorunochron", + "tile.waxed_oxidized_lightning_rod.name": "Woskowany utleniony piorunochron", "tile.lit_pumpkin.name": "Dyniowa latarnia", "tile.lockedchest.name": "Zamknięta skrzynia", "tile.log.acacia.name": "Kłoda akacjowa", @@ -70178,7 +71031,7 @@ export const langs: Langs = { "tile.pale_moss_block.name": "Blok bladego mchu", "tile.pale_moss_carpet.name": "Dywan z bladego mchu", "tile.creaking_heart.name": "Serce skrzypaczy", - "tile.open_eyeblossom.name": "Otwórz oczokwiat", + "tile.open_eyeblossom.name": "Otwarty oczokwiat", "tile.closed_eyeblossom.name": "Zamknięty oczokwiat", "tile.resin_bricks.name": "Cegły z żywicy", "tile.resin_brick_double_slab.name": "Podwójny półblok z cegły z żywicy", @@ -70460,7 +71313,92 @@ export const langs: Langs = { "item.brown_egg.name": "Brązowe jajko", "item.blue_egg.name": "Niebieskie jajko", "tile.short_dry_grass.name": "Niska sucha trawa", - "tile.tall_dry_grass.name": "Wysoka sucha trawa" + "tile.tall_dry_grass.name": "Wysoka sucha trawa", + "entity.happy_ghast.name": "Wesoły ghast", + "item.spawn_egg.entity.happy_ghast.name": "Jajko spawnowania wesołych ghastów", + "tile.dried_ghast.name": "Wysuszony ghast", + "item.black_harness.name": "Czarna uprząż", + "item.blue_harness.name": "Niebieska uprząż", + "item.brown_harness.name": "Brązowa uprząż", + "item.cyan_harness.name": "Błękitna uprząż", + "item.gray_harness.name": "Szara uprząż", + "item.green_harness.name": "Zielona uprząż", + "item.light_blue_harness.name": "Jasnoniebieska uprząż", + "item.light_gray_harness.name": "Jasnoszara uprząż", + "item.lime_harness.name": "Jasnozielona uprząż", + "item.magenta_harness.name": "Karmazynowa uprząż", + "item.orange_harness.name": "Pomarańczowa uprząż", + "item.pink_harness.name": "Różowa uprząż", + "item.purple_harness.name": "Fioletowa uprząż", + "item.red_harness.name": "Czerwona uprząż", + "item.white_harness.name": "Biała uprząż", + "item.yellow_harness.name": "Żółta uprząż", + "entity.copper_golem.name": "Miedziany golem", + "item.spawn_egg.entity.copper_golem.name": "Jajko spawnowania miedzianych golemów", + "item.copper_nugget.name": "Bryłka miedzi", + "item.copper_sword.name": "Miedziany miecz", + "item.copper_pickaxe.name": "Miedziany kilof", + "item.copper_axe.name": "Miedziana siekiera", + "item.copper_shovel.name": "Miedziana łopata", + "item.copper_hoe.name": "Miedziana motyka", + "item.copper_boots.name": "Miedziane buty", + "item.copper_leggings.name": "Miedziane nogawice", + "item.copper_chestplate.name": "Miedziany napierśnik", + "item.copper_helmet.name": "Miedziany hełm", + "tile.copper_chest.name": "Miedziana skrzynia", + "tile.exposed_copper_chest.name": "Odsłonięta miedziana skrzynia", + "tile.weathered_copper_chest.name": "Zwietrzała miedziana skrzynia", + "tile.oxidized_copper_chest.name": "Utleniona miedziana skrzynia", + "tile.waxed_copper_chest.name": "Woskowana miedziana skrzynia", + "tile.waxed_exposed_copper_chest.name": "Woskowana odsłonięta miedziana skrzynia", + "tile.waxed_weathered_copper_chest.name": "Woskowana zwietrzała miedziana skrzynia", + "tile.waxed_oxidized_copper_chest.name": "Woskowana utleniona miedziana skrzynia", + "tile.acacia_shelf.name": "Akacjowa półka", + "tile.bamboo_shelf.name": "Bambusowa półka", + "tile.birch_shelf.name": "Brzozowa półka", + "tile.cherry_shelf.name": "Wiśniowa półka", + "tile.crimson_shelf.name": "Karmazynowa półka", + "tile.dark_oak_shelf.name": "Ciemna dębowa półka", + "tile.jungle_shelf.name": "Półka z drewna tropikalnego", + "tile.mangrove_shelf.name": "Mangrowcowa półka", + "tile.oak_shelf.name": "Dębowa półka", + "tile.pale_oak_shelf.name": "Półka z bladego dębu", + "tile.spruce_shelf.name": "Świerkowa półka", + "tile.warped_shelf.name": "Wypaczona półka", + "tile.copper_golem_statue.name": "Posąg miedzianego golema", + "tile.exposed_copper_golem_statue.name": "Odsłonięty posąg miedzianego golema", + "tile.weathered_copper_golem_statue.name": "Zwietrzały posąg miedzianego golema", + "tile.oxidized_copper_golem_statue.name": "Utleniony posąg miedzianego golema", + "tile.waxed_copper_golem_statue.name": "Woskowany posąg miedzianego golema", + "tile.waxed_exposed_copper_golem_statue.name": "Odsłonięty woskowany posąg miedzianego golema", + "tile.waxed_weathered_copper_golem_statue.name": "Zwietrzały woskowany posąg miedzianego golema", + "tile.waxed_oxidized_copper_golem_statue.name": "Utleniony woskowany posąg miedzianego golema", + "tile.copper_chain.name": "Miedziany łańcuch", + "tile.exposed_copper_chain.name": "Odsłonięty miedziany łańcuch", + "tile.weathered_copper_chain.name": "Zwietrzały miedziany łańcuch", + "tile.oxidized_copper_chain.name": "Utleniony miedziany łańcuch", + "tile.waxed_copper_chain.name": "Woskowany miedziany łańcuch", + "tile.waxed_exposed_copper_chain.name": "Odsłonięty woskowany miedziany łańcuch", + "tile.waxed_weathered_copper_chain.name": "Zwietrzały woskowany miedziany łańcuch", + "tile.waxed_oxidized_copper_chain.name": "Utleniony woskowany miedziany łańcuch", + "tile.copper_bars.name": "Miedziane kraty", + "tile.exposed_copper_bars.name": "Odsłonięte miedziane kraty", + "tile.weathered_copper_bars.name": "Zwietrzałe miedziane kraty", + "tile.oxidized_copper_bars.name": "Utlenione miedziane kraty", + "tile.waxed_copper_bars.name": "Woskowane miedziane kraty", + "tile.waxed_exposed_copper_bars.name": "Odsłonięte woskowane miedziane kraty", + "tile.waxed_weathered_copper_bars.name": "Zwietrzałe woskowane miedziane kraty", + "tile.waxed_oxidized_copper_bars.name": "Utlenione woskowane miedziane kraty", + "tile.copper_lantern.name": "Miedziana latarnia", + "tile.exposed_copper_lantern.name": "Odsłonięta miedziana latarnia", + "tile.weathered_copper_lantern.name": "Zwietrzała miedziana latarnia", + "tile.oxidized_copper_lantern.name": "Utleniona miedziana latarnia", + "tile.waxed_copper_lantern.name": "Woskowana miedziana latarnia", + "tile.waxed_exposed_copper_lantern.name": "Odsłonięta woskowana miedziana latarnia", + "tile.waxed_weathered_copper_lantern.name": "Zwietrzała woskowana miedziana latarnia", + "tile.waxed_oxidized_copper_lantern.name": "Utleniona woskowana miedziana latarnia", + "tile.copper_torch.name": "Miedziana pochodnia", + "tile.iron_chain.name": "Łańcuch z żelaza" }, "sk_SK": { "enchantment.arrowDamage": "Prerazenie", @@ -70653,10 +71591,10 @@ export const langs: Langs = { "item.axolotlAdultBodySingle.name": "Dospelý %1$s axolotl", "item.axolotlBabyBodySingle.name": "Mladý %1$s axolotl", "item.axolotlColorLucy.name": "albínsky", - "item.axolotlColorCyan.name": "azúrový", - "item.axolotlColorGold.name": "zlatý", - "item.axolotlColorWild.name": "hnedý", - "item.axolotlColorBlue.name": "modrý", + "item.axolotlColorCyan.name": "Azúrová", + "item.axolotlColorGold.name": "Zlatá", + "item.axolotlColorWild.name": "Hnedá", + "item.axolotlColorBlue.name": "Modrá", "item.golden_apple.name": "Zlaté jablko", "item.appleEnchanted.name": "Začarované zlaté jablko", "item.armadillo_scute.name": "Šupina pásavca", @@ -71620,6 +72558,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Diamantové konské brnenie", "item.horsearmorgold.name": "Zlaté konské brnenie", "item.horsearmoriron.name": "Železné konské brnenie", + "item.copper_horse_armor.name": "Medená konská zbroj", "item.horsearmorleather.name": "Kožené konské brnenie", "item.gold_ingot.name": "Zlatý ingot", "item.iron_ingot.name": "Železný ingot", @@ -71803,6 +72742,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine – Tvorca", "item.record_creator_music_box.desc": "Lena Raine – Tvorca (Music Box)", "item.record_precipice.desc": "Aaron Cherof – Precipice", + "item.record_tears.desc": "Amos Roddy – Slzy", + "item.record_lava_chicken.desc": "Hyper elixíry – lávová sliepka", "item.redstone.name": "Ruditový prach", "item.reeds.name": "Cukrová trstina", "item.kelp.name": "Morská riasa", @@ -72602,6 +73543,13 @@ export const langs: Langs = { "tile.glowstone.name": "Žiarivý kameň", "tile.glow_lichen.name": "Žiarivý lišajník", "tile.lightning_rod.name": "Bleskozvod", + "tile.exposed_lightning_rod.name": "Odkrytý bleskozvod", + "tile.weathered_lightning_rod.name": "Zvetraný bleskozvod", + "tile.oxidized_lightning_rod.name": "Zoxidovaný bleskozvod", + "tile.waxed_lightning_rod.name": "Voskovaný bleskozvod", + "tile.waxed_exposed_lightning_rod.name": "Voskovaný odkrytý bleskozvod", + "tile.waxed_weathered_lightning_rod.name": "Voskovaný zvetraný bleskozvod", + "tile.waxed_oxidized_lightning_rod.name": "Voskovaný zoxidovaný bleskozvod", "tile.lit_pumpkin.name": "Tekvicový lampáš", "tile.lockedchest.name": "Zamknutá truhlica", "tile.log.acacia.name": "Agátové poleno", @@ -73210,24 +74158,109 @@ export const langs: Langs = { "tile.tinted_glass.name": "Tónované sklo", "tile.smooth_basalt.name": "Hladký čadič", "tile.wildflowers.name": "Poľné kvety", - "tile.firefly_bush.name": "Step so svetluškami", + "tile.firefly_bush.name": "Krík so svetluškami", "tile.bush.name": "Step", "tile.leaf_litter.name": "Opadané lístie", "tile.cactus_flower.name": "Kaktusový kvet", "item.brown_egg.name": "Hnedé vajce", "item.blue_egg.name": "Modré vajce", "tile.short_dry_grass.name": "Krátka suchá tráva", - "tile.tall_dry_grass.name": "Vysoká suchá tráva" + "tile.tall_dry_grass.name": "Vysoká suchá tráva", + "entity.happy_ghast.name": "Šťastný ghast", + "item.spawn_egg.entity.happy_ghast.name": "Vajce narodenia šťastného ghasta", + "tile.dried_ghast.name": "Vysušený ghast", + "item.black_harness.name": "Čierny postroj", + "item.blue_harness.name": "Modrý postroj", + "item.brown_harness.name": "Hnedý postroj", + "item.cyan_harness.name": "Azúrový postroj", + "item.gray_harness.name": "Sivý postroj", + "item.green_harness.name": "Zelený postroj", + "item.light_blue_harness.name": "Svetlomodrý postroj", + "item.light_gray_harness.name": "Svetlosivý postroj", + "item.lime_harness.name": "Žltozelený postroj", + "item.magenta_harness.name": "Purpurový postroj", + "item.orange_harness.name": "Oranžový postroj", + "item.pink_harness.name": "Ružový postroj", + "item.purple_harness.name": "Fialový postroj", + "item.red_harness.name": "Červený postroj", + "item.white_harness.name": "Biely postroj", + "item.yellow_harness.name": "Žltý postroj", + "entity.copper_golem.name": "Medený golem", + "item.spawn_egg.entity.copper_golem.name": "Vajce narodenia Medeného golema", + "item.copper_nugget.name": "Medený nuget", + "item.copper_sword.name": "Medený meč", + "item.copper_pickaxe.name": "Medený krompáč", + "item.copper_axe.name": "Medená sekera", + "item.copper_shovel.name": "Medená lopata", + "item.copper_hoe.name": "Medená motyka", + "item.copper_boots.name": "Medené topánky", + "item.copper_leggings.name": "Medené nohavice", + "item.copper_chestplate.name": "Medené brnenie", + "item.copper_helmet.name": "Medená prilba", + "tile.copper_chest.name": "Medená truhlica", + "tile.exposed_copper_chest.name": "Odkrytá medená truhlica", + "tile.weathered_copper_chest.name": "Zvetraná medená truhlica", + "tile.oxidized_copper_chest.name": "Zoxidovaná medená truhlica", + "tile.waxed_copper_chest.name": "Voskovaná medená truhlica", + "tile.waxed_exposed_copper_chest.name": "Voskovaná odkrytá medená truhlica", + "tile.waxed_weathered_copper_chest.name": "Voskovaná zvetraná medená truhlica", + "tile.waxed_oxidized_copper_chest.name": "Voskovaná zoxidovaná medená truhlica", + "tile.acacia_shelf.name": "Polička z agátu", + "tile.bamboo_shelf.name": "Polička z bambusu", + "tile.birch_shelf.name": "Brezová polička", + "tile.cherry_shelf.name": "Čerešňová polička", + "tile.crimson_shelf.name": "Karmínová polička", + "tile.dark_oak_shelf.name": "Polička z tmavého duba", + "tile.jungle_shelf.name": "Polička z tropického dreva", + "tile.mangrove_shelf.name": "Mangrovová polička", + "tile.oak_shelf.name": "Dubová polička", + "tile.pale_oak_shelf.name": "Polička z bledého duba", + "tile.spruce_shelf.name": "Smreková polička", + "tile.warped_shelf.name": "Zoschnutá polička", + "tile.copper_golem_statue.name": "Soška medeného golema", + "tile.exposed_copper_golem_statue.name": "Soška golema z odkrytej medi", + "tile.weathered_copper_golem_statue.name": "Soška golema zo zvetranej medi", + "tile.oxidized_copper_golem_statue.name": "Soška golema zo zoxidovanej medi", + "tile.waxed_copper_golem_statue.name": "Soška golema z voskovanej medi", + "tile.waxed_exposed_copper_golem_statue.name": "Soška golema z voskovanej odkrytej medi", + "tile.waxed_weathered_copper_golem_statue.name": "Soška golema z voskovanej zvetranej medi", + "tile.waxed_oxidized_copper_golem_statue.name": "Soška golema z voskovanej zoxidovanej medi", + "tile.copper_chain.name": "Medená reťaz", + "tile.exposed_copper_chain.name": "Odkrytá medená reťaz", + "tile.weathered_copper_chain.name": "Zvetraná medená reťaz", + "tile.oxidized_copper_chain.name": "Zoxidovaná medená reťaz", + "tile.waxed_copper_chain.name": "Voskovaná medená reťaz", + "tile.waxed_exposed_copper_chain.name": "Voskovaná odkrytá medená reťaz", + "tile.waxed_weathered_copper_chain.name": "Voskovaná zvetraná medená reťaz", + "tile.waxed_oxidized_copper_chain.name": "Voskovaná zoxidovaná medená reťaz", + "tile.copper_bars.name": "Medené mreže", + "tile.exposed_copper_bars.name": "Odkryté medené mreže", + "tile.weathered_copper_bars.name": "Zvetrané medené mreže", + "tile.oxidized_copper_bars.name": "Zoxidované medené mreže", + "tile.waxed_copper_bars.name": "Voskované medené mreže", + "tile.waxed_exposed_copper_bars.name": "Voskované odkryté medené mreže", + "tile.waxed_weathered_copper_bars.name": "Voskované zvetrané medené mreže", + "tile.waxed_oxidized_copper_bars.name": "Voskované zoxidované medené mreže", + "tile.copper_lantern.name": "Medený lampáš", + "tile.exposed_copper_lantern.name": "Odkrytý medený lampáš", + "tile.weathered_copper_lantern.name": "Zvetraný medený lampáš", + "tile.oxidized_copper_lantern.name": "Zoxidovaný medený lampáš", + "tile.waxed_copper_lantern.name": "Voskovaný medený lampáš", + "tile.waxed_exposed_copper_lantern.name": "Voskovaný odkrytý medený lampáš", + "tile.waxed_weathered_copper_lantern.name": "Voskovaný zvetraný medený lampáš", + "tile.waxed_oxidized_copper_lantern.name": "Voskovaný zoxidovaný medený lampáš", + "tile.copper_torch.name": "Medená fakľa", + "tile.iron_chain.name": "Železná reťaz" }, "sv_SE": { "enchantment.arrowDamage": "Kraft", - "enchantment.arrowFire": "Eld", - "enchantment.arrowInfinite": "Oändlighet", + "enchantment.arrowFire": "Flamma", + "enchantment.arrowInfinite": "Oändlig", "enchantment.arrowKnockback": "Slag", "enchantment.crossbowMultishot": "Multiskott", - "enchantment.crossbowPiercing": "Brytande", + "enchantment.crossbowPiercing": "Genomträngande", "enchantment.crossbowQuickCharge": "Snabbladdning", - "enchantment.curse.binding": "Bindandets förbannelse", + "enchantment.curse.binding": "Bindningsförbannelse", "enchantment.curse.vanishing": "Försvinnandets förbannelse", "enchantment.damage.all": "Skärpa", "enchantment.damage.arthropods": "Leddjurens skräck", @@ -73237,7 +74270,7 @@ export const langs: Langs = { "enchantment.fire": "Eldaspekt", "enchantment.fishingSpeed": "Bete", "enchantment.frostwalker": "Frostvandrare", - "enchantment.heavy_weapon.breach": "Bryt", + "enchantment.heavy_weapon.breach": "Bryt igenom", "enchantment.heavy_weapon.density": "Täthet", "enchantment.heavy_weapon.windburst": "Vindexplosion", "enchantment.knockback": "Knuff", @@ -73261,39 +74294,39 @@ export const langs: Langs = { "enchantment.protect.fall": "Fjäderfall", "enchantment.protect.fire": "Eldskydd", "enchantment.protect.projectile": "Projektilskydd", - "enchantment.soul_speed": "Snabbsjäl", - "enchantment.swift_sneak": "Snabbt smyg", - "enchantment.thorns": "Törne", - "enchantment.untouching": "Silkesudd", + "enchantment.soul_speed": "Själhastighet", + "enchantment.swift_sneak": "Skyndsamt smygande", + "enchantment.thorns": "Taggar", + "enchantment.untouching": "Silkesvante", "enchantment.waterWalker": "Djupgående", "enchantment.waterWorker": "Vattenvana", "enchantment.tridentChanneling": "Kanalisering", "enchantment.tridentLoyalty": "Lojalitet", "enchantment.tridentRiptide": "Tidvattenvåg", "enchantment.tridentImpaling": "Spetsning", - "entity.area_effect_cloud.name": "Områdeseffektmoln", + "entity.area_effect_cloud.name": "Områdeseffektsmoln", "entity.armadillo.name": "Bältdjur", "entity.armor_stand.name": "Rustningsställ", "entity.arrow.name": "Pil", "entity.bat.name": "Fladdermus", "entity.bee.name": "Bi", - "entity.blaze.name": "Flamgestalt", + "entity.blaze.name": "Brännare", "entity.boat.name": "Båt", - "entity.bogged.name": "Träskzombie", - "entity.breeze.name": "Bris", + "entity.bogged.name": "Sumpigt skelett", + "entity.breeze.name": "Vindväsen", "entity.breeze_wind_charge_projectile.name": "Vindattack", "entity.cat.name": "Katt", "entity.cave_spider.name": "Grottspindel", "entity.chicken.name": "Höna", "entity.cow.name": "Ko", - "entity.creaking.name": "Knarr", + "entity.creaking.name": "Knarrträd", "entity.creeper.name": "Creeper", "entity.dolphin.name": "Delfin", "entity.goat.name": "Get", "entity.panda.name": "Panda", "entity.donkey.name": "Åsna", "entity.dragon_fireball.name": "Drakes eldklot", - "entity.drowned.name": "Drunknad", + "entity.drowned.name": "Drunknad zombie", "entity.egg.name": "Ägg", "entity.elder_guardian.name": "Urväktare", "entity.ender_crystal.name": "Enderkristall", @@ -73301,8 +74334,8 @@ export const langs: Langs = { "entity.enderman.name": "Enderman", "entity.endermite.name": "Endermite", "entity.ender_pearl.name": "Enderpärla", - "entity.evocation_illager.name": "Uppväckare", - "entity.evocation_fang.name": "Uppväckares huggtand", + "entity.evocation_illager.name": "Frammanare", + "entity.evocation_fang.name": "Frammanarhuggtand", "entity.eye_of_ender_signal.name": "Enderöga", "entity.falling_block.name": "Fallande block", "entity.fireball.name": "Eldklot", @@ -73317,17 +74350,17 @@ export const langs: Langs = { "entity.axolotl.name": "Axolotl", "entity.ghast.name": "Gast", "entity.glow_squid.name": "Självlysande bläckfisk", - "entity.piglin_brute.name": "Djurisk Piglin", + "entity.piglin_brute.name": "Piglinbarbar", "entity.guardian.name": "Väktare", "entity.hoglin.name": "Hoglin", "entity.horse.name": "Häst", - "entity.husk.name": "Husk", - "entity.ravager.name": "Vildtjur", + "entity.husk.name": "Uttorkad zombie", + "entity.ravager.name": "Ödeläggare", "entity.iron_golem.name": "Järngolem", "entity.item.name": "Föremål", "entity.leash_knot.name": "Koppelknut", "entity.lightning_bolt.name": "Blixt", - "entity.lingering_potion.name": "Dröjande brygd", + "entity.lingering_potion.name": "Kvardröjande brygd", "entity.llama.name": "Lama", "entity.trader_llama.name": "Handlarlama", "entity.llama_spit.name": "Lamaspott", @@ -73352,14 +74385,14 @@ export const langs: Langs = { "entity.rabbit.name": "Kanin", "entity.sheep.name": "Får", "entity.shulker.name": "Shulker", - "entity.shulker_bullet.name": "Shulkerkula", + "entity.shulker_bullet.name": "Shulkerskott", "entity.silverfish.name": "Silverfisk", "entity.skeleton.name": "Skelett", "entity.skeleton_horse.name": "Skeletthäst", "entity.stray.name": "Strövare", "entity.slime.name": "Slemkub", "entity.small_fireball.name": "Litet eldklot", - "entity.sniffer.name": "Sniffer", + "entity.sniffer.name": "Sniffare", "entity.snowball.name": "Snöboll", "entity.snow_golem.name": "Snögolem", "entity.spider.name": "Spindel", @@ -73388,18 +74421,18 @@ export const langs: Langs = { "entity.villager.mason": "Mason", "entity.villager.unskilled": "Outbildad bybo", "entity.villager_v2.name": "Bybo", - "entity.vindicator.name": "Övertygare", - "entity.wandering_trader.name": "Handelsresande", + "entity.vindicator.name": "Försvarare", + "entity.wandering_trader.name": "Vandrande byteshandlare", "entity.wind_charge_projectile.name": "Vindattack", "entity.witch.name": "Häxa", "entity.wither.name": "Wither", - "entity.wither_skeleton.name": "Wither-skelett", - "entity.wither_skull.name": "Wither-kranium", - "entity.wither_skull_dangerous.name": "Wither-kranium", + "entity.wither_skeleton.name": "Witherskelett", + "entity.wither_skull.name": "Witherskalle", + "entity.wither_skull_dangerous.name": "Witherskalle", "entity.wolf.name": "Varg", "entity.xp_orb.name": "Erfarenhetsklot", "entity.xp_bottle.name": "Förtrollningsflaska", - "entity.zoglin.name": "Zoggare", + "entity.zoglin.name": "Zoglin", "entity.zombie.name": "Zombie", "entity.zombie_horse.name": "Zombiehäst", "entity.zombie_pigman.name": "Zombifierad Piglin", @@ -73416,12 +74449,12 @@ export const langs: Langs = { "item.axolotlColorBlue.name": "Blå", "item.golden_apple.name": "Guldäpple", "item.appleEnchanted.name": "Förtrollat guldäpple", - "item.armadillo_scute.name": "Bältdjursfäll", + "item.armadillo_scute.name": "Bältdjurshornplåt", "item.armor_stand.name": "Rustningsställ", "item.arrow.name": "Pil", - "item.tipped_arrow.name": "Doppad pil", - "item.banner.black.name": "Svart banderoll", - "item.banner.blue.name": "Blå banderoll", + "item.tipped_arrow.name": "Förtrollad pil", + "item.banner.black.name": "Svart fana", + "item.banner.blue.name": "Blå fana", "item.banner.border.black": "Svart ram", "item.banner.border.blue": "Blå ram", "item.banner.border.brown": "Brun ram", @@ -73454,7 +74487,7 @@ export const langs: Langs = { "item.banner.bricks.silver": "Ljusgrått tegelmönster", "item.banner.bricks.white": "Vitt tegelmönster", "item.banner.bricks.yellow": "Gult tegelmönster", - "item.banner.brown.name": "Brun banderoll", + "item.banner.brown.name": "Brun fana", "item.banner.circle.black": "Svart cirkel", "item.banner.circle.blue": "Blå cirkel", "item.banner.circle.brown": "Brun cirkel", @@ -73503,23 +74536,23 @@ export const langs: Langs = { "item.banner.cross.silver": "Ljusgrått kryss", "item.banner.cross.white": "Vitt kryss", "item.banner.cross.yellow": "Gult kryss", - "item.banner.curly_border.black": "Svart kant", - "item.banner.curly_border.blue": "Blå kant", - "item.banner.curly_border.brown": "Brun kant", - "item.banner.curly_border.cyan": "Turkos kant", - "item.banner.curly_border.gray": "Grå kant", - "item.banner.curly_border.green": "Grön kant", - "item.banner.curly_border.lightBlue": "Ljusblå kant", - "item.banner.curly_border.lime": "Limegrön kant", - "item.banner.curly_border.magenta": "Ljuslila kant", - "item.banner.curly_border.orange": "Orange kant", - "item.banner.curly_border.pink": "Rosa kant", - "item.banner.curly_border.purple": "Lila kant", - "item.banner.curly_border.red": "Röd kant", - "item.banner.curly_border.silver": "Ljusgrå kant", - "item.banner.curly_border.white": "Vit kant", - "item.banner.curly_border.yellow": "Gul kant", - "item.banner.cyan.name": "Turkos banderoll", + "item.banner.curly_border.black": "Svart taggig ram", + "item.banner.curly_border.blue": "Blå taggig ram", + "item.banner.curly_border.brown": "Brun taggig ram", + "item.banner.curly_border.cyan": "Turkos taggig ram", + "item.banner.curly_border.gray": "Grå taggig ram", + "item.banner.curly_border.green": "Grön taggig ram", + "item.banner.curly_border.lightBlue": "Ljusblå taggig ram", + "item.banner.curly_border.lime": "Limegrön taggig ram", + "item.banner.curly_border.magenta": "Ljuslila taggig ram", + "item.banner.curly_border.orange": "Orange taggig ram", + "item.banner.curly_border.pink": "Rosa taggig ram", + "item.banner.curly_border.purple": "Lila taggig ram", + "item.banner.curly_border.red": "Röd taggig ram", + "item.banner.curly_border.silver": "Ljusgrå taggig ram", + "item.banner.curly_border.white": "Vit taggig ram", + "item.banner.curly_border.yellow": "Gul taggig ram", + "item.banner.cyan.name": "Turkos fana", "item.banner.diagonal_left.black": "Svart triangel uppe till vänster", "item.banner.diagonal_left.blue": "Blå triangel uppe till vänster", "item.banner.diagonal_left.brown": "Brun triangel uppe till vänster", @@ -73664,24 +74697,24 @@ export const langs: Langs = { "item.banner.gradient_up.silver": "Ljusgrå övergång nedanifrån", "item.banner.gradient_up.white": "Vit övergång nedanifrån", "item.banner.gradient_up.yellow": "Gul övergång nedanifrån", - "item.banner.gray.name": "Grå banderoll", - "item.banner.green.name": "Grön banderoll", - "item.banner.guster.black": "Svart breeze", - "item.banner.guster.blue": "Blå breeze", - "item.banner.guster.brown": "Brun breeze", - "item.banner.guster.cyan": "Turkos breeze", - "item.banner.guster.gray": "Grå breeze", - "item.banner.guster.green": "Grön breeze", - "item.banner.guster.lightBlue": "Ljusblå breeze", - "item.banner.guster.lime": "Limegrön breeze", - "item.banner.guster.magenta": "Ljuslila breeze", - "item.banner.guster.orange": "Orange breeze", - "item.banner.guster.pink": "Rosa breeze", - "item.banner.guster.purple": "Lila breeze", - "item.banner.guster.red": "Röd breeze", - "item.banner.guster.silver": "Ljusgrå breeze", - "item.banner.guster.white": "Vit breeze", - "item.banner.guster.yellow": "Gul breeze", + "item.banner.gray.name": "Grå fana", + "item.banner.green.name": "Grön fana", + "item.banner.guster.black": "Svart vindväsen", + "item.banner.guster.blue": "Blå vindväsen", + "item.banner.guster.brown": "Brun vindväsen", + "item.banner.guster.cyan": "Turkos vindväsen", + "item.banner.guster.gray": "Grå vindväsen", + "item.banner.guster.green": "Grön vindväsen", + "item.banner.guster.lightBlue": "Ljusblå vindväsen", + "item.banner.guster.lime": "Limegrön vindväsen", + "item.banner.guster.magenta": "Ljuslila vindväsen", + "item.banner.guster.orange": "Orange vindväsen", + "item.banner.guster.pink": "Rosa vindväsen", + "item.banner.guster.purple": "Lila vindväsen", + "item.banner.guster.red": "Röd vindväsen", + "item.banner.guster.silver": "Ljusgrå vindväsen", + "item.banner.guster.white": "Vit vindväsen", + "item.banner.guster.yellow": "Gul vindväsen", "item.banner.half_horizontal.black": "Svart överhalva", "item.banner.half_horizontal.blue": "Blå överhalva", "item.banner.half_horizontal.brown": "Brun överhalva", @@ -73746,10 +74779,10 @@ export const langs: Langs = { "item.banner.half_vertical_right.silver": "Ljusgrå högerhalva", "item.banner.half_vertical_right.white": "Vit högerhalva", "item.banner.half_vertical_right.yellow": "Gul högerhalva", - "item.banner.illager_captain.name": "Olycksbådande fana", - "item.banner.lightBlue.name": "Ljusblå banderoll", - "item.banner.lime.name": "Limegrön banderoll", - "item.banner.magenta.name": "Ljuslila banderoll", + "item.banner.illager_captain.name": "Oroväckande fana", + "item.banner.lightBlue.name": "Ljusblå fana", + "item.banner.lime.name": "Limegrön fana", + "item.banner.magenta.name": "Ljuslila fana", "item.banner.mojang.black": "Svart mojäng", "item.banner.mojang.blue": "Blå mojäng", "item.banner.mojang.brown": "Brun mojäng", @@ -73766,7 +74799,7 @@ export const langs: Langs = { "item.banner.mojang.silver": "Ljusgrå mojäng", "item.banner.mojang.white": "Vit mojäng", "item.banner.mojang.yellow": "Gul mojäng", - "item.banner.orange.name": "Orange banderoll", + "item.banner.orange.name": "Orange fana", "item.banner.piglin.black": "Svarttryne", "item.banner.piglin.blue": "Blåtryne", "item.banner.piglin.brown": "Bruntryne", @@ -73783,26 +74816,26 @@ export const langs: Langs = { "item.banner.piglin.silver": "Ljust gråtryne", "item.banner.piglin.white": "Vittryne", "item.banner.piglin.yellow": "Gultryne", - "item.banner.pink.name": "Rosa banderoll", - "item.banner.purple.name": "Lila banderoll", - "item.banner.red.name": "Röd banderoll", - "item.banner.rhombus.black": "Svart diamant", - "item.banner.rhombus.blue": "Blå diamant", - "item.banner.rhombus.brown": "Brun diamant", - "item.banner.rhombus.cyan": "Turkos diamant", - "item.banner.rhombus.gray": "Grå diamant", - "item.banner.rhombus.green": "Grön diamant", - "item.banner.rhombus.lightBlue": "Ljusblå diamant", - "item.banner.rhombus.lime": "Limegrön diamant", - "item.banner.rhombus.magenta": "Ljuslila diamant", - "item.banner.rhombus.orange": "Orange diamant", - "item.banner.rhombus.pink": "Rosa diamant", - "item.banner.rhombus.purple": "Lila diamant", - "item.banner.rhombus.red": "Röd diamant", - "item.banner.rhombus.silver": "Ljusgrå diamant", - "item.banner.rhombus.white": "Vit diamant", - "item.banner.rhombus.yellow": "Gul diamant", - "item.banner.silver.name": "Ljusgrå banderoll", + "item.banner.pink.name": "Rosa fana", + "item.banner.purple.name": "Lila fana", + "item.banner.red.name": "Röd fana", + "item.banner.rhombus.black": "Svart romb", + "item.banner.rhombus.blue": "Blå romb", + "item.banner.rhombus.brown": "Brun romb", + "item.banner.rhombus.cyan": "Turkos romb", + "item.banner.rhombus.gray": "Grå romb", + "item.banner.rhombus.green": "Grön romb", + "item.banner.rhombus.lightBlue": "Ljusblå romb", + "item.banner.rhombus.lime": "Limegrön romb", + "item.banner.rhombus.magenta": "Ljuslila romb", + "item.banner.rhombus.orange": "Orange romb", + "item.banner.rhombus.pink": "Rosa romb", + "item.banner.rhombus.purple": "Lila romb", + "item.banner.rhombus.red": "Röd romb", + "item.banner.rhombus.silver": "Ljusgrå romb", + "item.banner.rhombus.white": "Vit romb", + "item.banner.rhombus.yellow": "Gul romb", + "item.banner.silver.name": "Ljusgrå fana", "item.banner.skull.black": "Svart dödskalle", "item.banner.skull.blue": "Blå dödskalle", "item.banner.skull.brown": "Brun dödskalle", @@ -74107,8 +75140,8 @@ export const langs: Langs = { "item.banner.triangles_top.silver": "Ljusgråa taggar upptill", "item.banner.triangles_top.white": "Vita taggar upptill", "item.banner.triangles_top.yellow": "Gula taggar upptill", - "item.banner.white.name": "Vit banderoll", - "item.banner.yellow.name": "Gul banderoll", + "item.banner.white.name": "Vit fana", + "item.banner.yellow.name": "Gul fana", "item.banner.illager": "Fybo", "item.bed.black.name": "Svart säng", "item.bed.red.name": "Röd säng", @@ -74131,8 +75164,8 @@ export const langs: Langs = { "item.beef.name": "Rått nötkött", "item.beetroot.name": "Rödbeta", "item.beetroot_soup.name": "Rödbetssoppa", - "item.blaze_powder.name": "Flampulver", - "item.blaze_rod.name": "Flamstav", + "item.blaze_powder.name": "Brännpulver", + "item.blaze_rod.name": "Brännstav", "item.boat.oak.name": "Ekbåt", "item.boat.spruce.name": "Granbåt", "item.boat.birch.name": "Björkbåt", @@ -74141,7 +75174,7 @@ export const langs: Langs = { "item.boat.big_oak.name": "Mörk ekbåt", "item.bone.name": "Ben", "item.book.name": "Bok", - "item.breeze_rod.name": "Bris-stav", + "item.breeze_rod.name": "Vindstav", "item.chainmail_boots.name": "Ringbrynjestövlar", "item.leather_boots.name": "Läderstövlar", "item.diamond_boots.name": "Diamantstövlar", @@ -74206,22 +75239,22 @@ export const langs: Langs = { "item.tropicalSchoolButterflyFish.name": "Fjärilsfisk", "item.tropicalSchoolCichlid.name": "Ciklid", "item.tropicalSchoolClownfish.name": "Clownfisk", - "item.tropicalSchoolCottonCandyBetta.name": "Regnbågskampfisk", + "item.tropicalSchoolCottonCandyBetta.name": "Blårosa kampfisk", "item.tropicalSchoolDottyback.name": "Pseudochromidae", "item.tropicalSchoolEmperorRedSnapper.name": "Kejsarsnapper", "item.tropicalSchoolGoatfish.name": "Mullusfisk", - "item.tropicalSchoolMoorishIdol.name": "Zanclidae", + "item.tropicalSchoolMoorishIdol.name": "Zanclus cornutus", "item.tropicalSchoolOrnateButterfly.name": "Chaetodon ornatissimus", "item.tropicalSchoolParrotfish.name": "Papegojfisk", "item.tropicalSchoolQueenAngelFish.name": "Holacanthus ciliaris", - "item.tropicalSchoolRedCichlid.name": "Rödzebra", + "item.tropicalSchoolRedCichlid.name": "Röd ciklid", "item.tropicalSchoolRedLippedBlenny.name": "Ophioblennius atlanticus", "item.tropicalSchoolRedSnapper.name": "Röd snapper", "item.tropicalSchoolThreadfin.name": "Polynemidae", - "item.tropicalSchoolTomatoClown.name": "Amphiprion frenatus", + "item.tropicalSchoolTomatoClown.name": "Tomatröd clownfisk", "item.tropicalSchoolTriggerfish.name": "Tryckarfisk", "item.tropicalSchoolYellowTang.name": "Gul kirurg", - "item.tropicalSchoolYellowtailParrot.name": "Scarus hypselopterus", + "item.tropicalSchoolYellowtailParrot.name": "Gulsvansad papegojfisk", "item.cake.name": "Tårta", "item.camera.name": "Kamera", "item.canBreak": "Kan ta sönder:", @@ -74237,8 +75270,8 @@ export const langs: Langs = { "item.itemLock.popupNotice.cantDrop": ":hollow_star: Kan inte släppa föremål kan inte: släppas, tas bort, tillverkas med", "item.itemLock.popupNotice.cantMove": ":solid_star: Kan inte flytta föremål kan inte: flyttas, släppas, tas bort, tillverkas med", "item.golden_carrot.name": "Gyllene morot", - "item.carrotOnAStick.name": "Morot på en pinne", - "item.warped_fungus_on_a_stick.name": "Vriden svamp på pinne", + "item.carrotOnAStick.name": "Morot på pinne", + "item.warped_fungus_on_a_stick.name": "Förvrängd svamp på pinne", "item.carrot.name": "Morot", "item.cauldron.name": "Kittel", "item.charcoal.name": "Träkol", @@ -74256,14 +75289,14 @@ export const langs: Langs = { "item.clay_ball.name": "Lerboll", "item.clock.name": "Klocka", "item.coal.name": "Kol", - "item.comparator.name": "Rödstensjämförare", + "item.comparator.name": "Redstonejämförare", "item.compass.name": "Kompass", - "item.lodestonecompass.name": "Lodstenskompass", + "item.lodestonecompass.name": "Magnetitkompass", "item.cookie.name": "Kaka", "item.copper_door.name": "Koppardörr", "item.crossbow.name": "Armborst", "item.diamond.name": "Diamant", - "item.repeater.name": "Rödstensrepeterare", + "item.repeater.name": "Redstonerepeterare", "item.acacia_door.name": "Akaciadörr", "item.birch_door.name": "Björkdörr", "item.dark_oak_door.name": "Mörk ekdörr", @@ -74272,8 +75305,8 @@ export const langs: Langs = { "item.wooden_door.name": "Ekdörr", "item.spruce_door.name": "Grandörr", "item.crimson_door.name": "Karmosindörr", - "item.warped_door.name": "Förvriden dörr", - "item.dragon_breath.name": "Drakes andedräkt", + "item.warped_door.name": "Förvrängd dörr", + "item.dragon_breath.name": "Drakeld", "item.dyed": "Färgad", "item.dye.black.name": "Bläcksäck", "item.dye.black_new.name": "Svart färgämne", @@ -74296,7 +75329,7 @@ export const langs: Langs = { "item.dye.white_new.name": "Vitt färgämne", "item.dye.yellow.name": "Gult färgämne", "item.glow_ink_sac.name": "Självlysande bläcksäck", - "item.glow_frame.name": "Självlysande ram", + "item.glow_frame.name": "Självlysande föremålsram", "item.egg.name": "Ägg", "item.elytra.name": "Elytra", "item.emerald.name": "Smaragd", @@ -74304,7 +75337,7 @@ export const langs: Langs = { "item.emptyLocatorMap.name": "Tom orienteringskarta", "item.enchanted_book.name": "Förtrollad bok", "item.end_crystal.name": "Endkristall", - "tile.end_rod.name": "Slutstav", + "tile.end_rod.name": "Endstav", "item.ender_eye.name": "Enderöga", "item.ender_pearl.name": "Enderpärla", "item.experience_bottle.name": "Förtrollningsflaska", @@ -74332,7 +75365,7 @@ export const langs: Langs = { "item.fireworksCharge.purple": "Lila", "item.fireworksCharge.red": "Röd", "item.fireworksCharge.silver": "Ljusgrå", - "item.fireworksCharge.trail": "Svans", + "item.fireworksCharge.trail": "Spår", "item.fireworksCharge.type": "Okänd form", "item.fireworksCharge.type.0": "Litet klot", "item.fireworksCharge.type.1": "Stort klot", @@ -74352,7 +75385,7 @@ export const langs: Langs = { "item.flint.name": "Flinta", "item.flint_and_steel.name": "Flinta och stål", "item.flower_pot.name": "Blomkruka", - "item.frame.name": "Ram", + "item.frame.name": "Föremålsram", "item.ghast_tear.name": "Gasttår", "item.glass_bottle.name": "Glasflaska", "item.gold_nugget.name": "Guldklimp", @@ -74373,17 +75406,18 @@ export const langs: Langs = { "item.stone_hoe.name": "Stenhacka", "item.wooden_hoe.name": "Trähacka", "item.honey_bottle.name": "Honungsflaska", - "item.honeycomb.name": "Honungskaka", + "item.honeycomb.name": "Vaxkaka", "item.horsearmordiamond.name": "Hästrustning av diamant", "item.horsearmorgold.name": "Hästrustning av guld", "item.horsearmoriron.name": "Hästrustning av järn", + "item.copper_horse_armor.name": "Kopparhästrustning", "item.horsearmorleather.name": "Hästrustning av läder", "item.gold_ingot.name": "Guldtacka", "item.iron_ingot.name": "Järntacka", "item.netherite_ingot.name": "Netherittacka", "item.netherite_scrap.name": "Netheritstycke", "item.netherite_sword.name": "Netheritsvärd", - "item.netherite_pickaxe.name": "Netheritspetshacka", + "item.netherite_pickaxe.name": "Netherithacka", "item.netherite_axe.name": "Netherityxa", "item.netherite_shovel.name": "Netheritspade", "item.netherite_hoe.name": "Netherithacka", @@ -74399,7 +75433,7 @@ export const langs: Langs = { "item.diamond_leggings.name": "Diamantbyxor", "item.golden_leggings.name": "Guldbyxor", "item.iron_leggings.name": "Järnbyxor", - "item.nautilus_shell.name": "Nautilusskal", + "item.nautilus_shell.name": "Pärlbåtsskal", "item.heart_of_the_sea.name": "Havets hjärta", "item.mace.name": "Stridsklubba", "item.magma_cream.name": "Magmamassa", @@ -74410,7 +75444,7 @@ export const langs: Langs = { "item.map.exploration.buried_treasure.name": "Skattkarta", "item.map.exploration.village_snowy.name": "Snöig by-karta", "item.map.exploration.village_taiga.name": "Tajgabykarta", - "item.map.exploration.village_plains.name": "Slättbykarta", + "item.map.exploration.village_plains.name": "Slätter bykarta", "item.map.exploration.village_savanna.name": "Savannbykarta", "item.map.exploration.village_desert.name": "Ökenbykarta", "item.map.exploration.jungle_temple.name": "Djungelutforskarkarta", @@ -74423,97 +75457,97 @@ export const langs: Langs = { "item.command_block_minecart.name": "Gruvvagn med kommandoblock", "item.minecartFurnace.name": "Gruvvagn med smältugn", "item.hopper_minecart.name": "Gruvvagn med tratt", - "item.ominous_bottle.name": "Olycksbådande flaska", - "item.ominous_trial_key.name": "Olycksbådande utmaningsnyckel", - "item.oxidized_copper_door.name": "Oxiderad koppardörr", + "item.ominous_bottle.name": "Oroväckande flaska", + "item.ominous_trial_key.name": "Oroväckande utmaningsnyckel", + "item.oxidized_copper_door.name": "Ärgad koppardörr", "item.tnt_minecart.name": "Gruvvagn med dynamit", - "item.pitcher_pod.name": "Kapselkanna", - "item.torchflower_seeds.name": "Fackelblomfrön", - "item.spawn_egg.entity.agent.name": "Agentspawnägg", - "item.spawn_egg.entity.armadillo.name": "Bältdjursspawnägg", - "item.spawn_egg.entity.axolotl.name": "Axolotlspawnägg", - "item.spawn_egg.entity.bee.name": "Bispawnägg", - "item.spawn_egg.entity.bogged.name": "Träskzombieägg", - "item.spawn_egg.entity.breeze.name": "Brisspawnägg", - "item.spawn_egg.entity.hoglin.name": "Hoglinspawnägg", - "item.spawn_egg.entity.cat.name": "Kattspawnägg", - "item.spawn_egg.entity.chicken.name": "Hönspawnägg", - "item.spawn_egg.entity.cow.name": "Kospawnägg", - "item.spawn_egg.entity.cod.name": "Torskspawnägg", - "item.spawn_egg.entity.creaking.name": "Knarraspawnägg", - "item.spawn_egg.entity.ender_dragon.name": "Enderdrakspawnägg", - "item.spawn_egg.entity.goat.name": "Getspawnägg", - "item.spawn_egg.entity.pufferfish.name": "Blåsfiskspawnägg", - "item.spawn_egg.entity.salmon.name": "Laxspawnägg", - "item.spawn_egg.entity.tropicalfish.name": "Tropiskfiskspawnägg", - "item.spawn_egg.entity.pig.name": "Grisspawnägg", - "item.spawn_egg.entity.sheep.name": "Fårspawnägg", - "item.spawn_egg.entity.npc.name": "NPC-spawnägg", + "item.pitcher_pod.name": "Kannrankeskida", + "item.torchflower_seeds.name": "Fackelliljafrön", + "item.spawn_egg.entity.agent.name": "Agentskapelseägg", + "item.spawn_egg.entity.armadillo.name": "Bältdjursskapelseägg", + "item.spawn_egg.entity.axolotl.name": "Axolotlskapelseägg", + "item.spawn_egg.entity.bee.name": "Biskapelseägg", + "item.spawn_egg.entity.bogged.name": "Sumpigt skelett skapelseägg", + "item.spawn_egg.entity.breeze.name": "Vindväsenskapelseägg", + "item.spawn_egg.entity.hoglin.name": "Hoglinskapelseägg", + "item.spawn_egg.entity.cat.name": "Kattskapelseägg", + "item.spawn_egg.entity.chicken.name": "Hönskapelseägg", + "item.spawn_egg.entity.cow.name": "Koskapelseägg", + "item.spawn_egg.entity.cod.name": "Torskskapelseägg", + "item.spawn_egg.entity.creaking.name": "Knarrträdsskapelseägg", + "item.spawn_egg.entity.ender_dragon.name": "Enderdraksskapelseägg", + "item.spawn_egg.entity.goat.name": "Getskapelseägg", + "item.spawn_egg.entity.pufferfish.name": "Blåsfiskskapelseägg", + "item.spawn_egg.entity.salmon.name": "Laxskapelseägg", + "item.spawn_egg.entity.tropicalfish.name": "Tropisk fisk skapelseägg", + "item.spawn_egg.entity.pig.name": "Grisskapelseägg", + "item.spawn_egg.entity.sheep.name": "Fårskapelseägg", + "item.spawn_egg.entity.npc.name": "NPC-skapelseägg", "item.spawn_egg.entity.npc.failed": "Du behöver kreativt + operatör för att spawna NPC:er", - "item.spawn_egg.entity.wolf.name": "Vargspawnägg", - "item.spawn_egg.entity.villager.name": "Bybospawnägg", - "item.spawn_egg.entity.villager_v2.name": "Bybospawnägg", - "item.spawn_egg.entity.vindicator.name": "Övertygarspawnägg", - "item.spawn_egg.entity.mooshroom.name": "Mooshroomspawnägg", - "item.spawn_egg.entity.squid.name": "Bläckfiskspawnägg", - "item.spawn_egg.entity.glow_squid.name": "Självlysandebläckfiskspawnägg", - "item.spawn_egg.entity.rabbit.name": "Kaninspawnägg", - "item.spawn_egg.entity.bat.name": "Fladdermusspawnägg", - "item.spawn_egg.entity.ravager.name": "Vildtjurspawnägg", - "item.spawn_egg.entity.iron_golem.name": "Järngolemspawnägg", - "item.spawn_egg.entity.snow_golem.name": "Snögolemspawnägg", - "item.spawn_egg.entity.ocelot.name": "Ozelotspawnägg", - "item.spawn_egg.entity.parrot.name": "Papegojspawnägg", - "item.spawn_egg.entity.horse.name": "Hästspawnägg", - "item.spawn_egg.entity.llama.name": "Lamaspawnägg", - "item.spawn_egg.entity.trader_llama.name": "Handlarlamaspawnägg", - "item.spawn_egg.entity.polar_bear.name": "Isbjörnsspawnägg", - "item.spawn_egg.entity.donkey.name": "Åsnespawnägg", - "item.spawn_egg.entity.mule.name": "Mulspawnägg", - "item.spawn_egg.entity.skeleton_horse.name": "Skeletthästspawnägg", - "item.spawn_egg.entity.zombie_horse.name": "Zombiehästspawnägg", - "item.spawn_egg.entity.zombie.name": "Zombiespawnägg", - "item.spawn_egg.entity.drowned.name": "Drunknadspawnägg", - "item.spawn_egg.entity.creeper.name": "Creeperspawnägg", - "item.spawn_egg.entity.skeleton.name": "Skelettspawnägg", - "item.spawn_egg.entity.spider.name": "Spindelspawnägg", - "item.spawn_egg.entity.zombie_pigman.name": "Zombifieradpiglinspawnägg", - "item.spawn_egg.entity.strider.name": "Vandrarspawnägg", - "item.spawn_egg.entity.slime.name": "Slemkubsspawnägg", - "item.spawn_egg.entity.enderman.name": "Endermanspawnägg", - "item.spawn_egg.entity.silverfish.name": "Silverfiskspawnägg", - "item.spawn_egg.entity.cave_spider.name": "Grottspindelspawnägg", - "item.spawn_egg.entity.ghast.name": "Gastspawnägg", - "item.spawn_egg.entity.magma_cube.name": "Magmakubsspawnägg", - "item.spawn_egg.entity.blaze.name": "Flamgestaltsspawnägg", - "item.spawn_egg.entity.zombie_villager.name": "Zombiebybospawnägg", - "item.spawn_egg.entity.zombie_villager_v2.name": "Zombiebybospawnägg", - "item.spawn_egg.entity.witch.name": "Häxspawnägg", - "item.spawn_egg.entity.stray.name": "Strövarspawnägg", - "item.spawn_egg.entity.husk.name": "Huskspawnägg", - "item.spawn_egg.entity.wither_skeleton.name": "Witherskelettspawnägg", - "item.spawn_egg.entity.guardian.name": "Väktarspawnägg", - "item.spawn_egg.entity.elder_guardian.name": "Urväktarspawnägg", - "item.spawn_egg.entity.shulker.name": "Shulkerspawnägg", - "item.spawn_egg.entity.endermite.name": "Endermitespawnägg", - "item.spawn_egg.entity.evocation_illager.name": "Uppväckarspawnägg", - "item.spawn_egg.entity.vex.name": "Vålnadsspawnägg", - "item.spawn_egg.entity.turtle.name": "Havssköldpaddsspawnägg", - "item.spawn_egg.entity.dolphin.name": "Delfinspawnägg", - "item.spawn_egg.entity.phantom.name": "Fantomspawnägg", - "item.spawn_egg.entity.panda.name": "Pandaspawnägg", - "item.spawn_egg.entity.pillager.name": "Plundrarspawnägg", - "item.spawn_egg.entity.piglin_brute.name": "Djuriskvildsvinsmanspawnägg", - "item.spawn_egg.entity.piglin.name": "Piglinspawnägg", - "item.spawn_egg.entity.fox.name": "Rävspawnägg", - "item.spawn_egg.entity.unknown.name": "Spawnägg", - "item.spawn_egg.entity.wandering_trader.name": "Handelsresandespawnägg", - "item.spawn_egg.entity.wither.name": "Wither-spawnägg", - "item.spawn_egg.entity.zoglin.name": "Zoggarspawnägg", - "item.spawn_egg.entity.sniffer.name": "Snifferspawnägg", + "item.spawn_egg.entity.wolf.name": "Vargskapelseägg", + "item.spawn_egg.entity.villager.name": "Byboskapelseägg", + "item.spawn_egg.entity.villager_v2.name": "Byboskapelseägg", + "item.spawn_egg.entity.vindicator.name": "Försvararskapelseägg", + "item.spawn_egg.entity.mooshroom.name": "Mooshroomskapelseägg", + "item.spawn_egg.entity.squid.name": "Bläckfiskskapelseägg", + "item.spawn_egg.entity.glow_squid.name": "Självlysande bläckfisk skapelseägg", + "item.spawn_egg.entity.rabbit.name": "Kaninskapelseägg", + "item.spawn_egg.entity.bat.name": "Fladdermusskapelseägg", + "item.spawn_egg.entity.ravager.name": "Ödeläggarskapelseägg", + "item.spawn_egg.entity.iron_golem.name": "Järngolemskapelseägg", + "item.spawn_egg.entity.snow_golem.name": "Snögolemskapelseägg", + "item.spawn_egg.entity.ocelot.name": "Ozelotskapelseägg", + "item.spawn_egg.entity.parrot.name": "Papegojskapelseägg", + "item.spawn_egg.entity.horse.name": "Hästskapelseägg", + "item.spawn_egg.entity.llama.name": "Lamaskapelseägg", + "item.spawn_egg.entity.trader_llama.name": "Handlarlamaskapelseägg", + "item.spawn_egg.entity.polar_bear.name": "Isbjörnskapelseägg", + "item.spawn_egg.entity.donkey.name": "Åsneskapelseägg", + "item.spawn_egg.entity.mule.name": "Mulskapelseägg", + "item.spawn_egg.entity.skeleton_horse.name": "Skeletthästskapelseägg", + "item.spawn_egg.entity.zombie_horse.name": "Zombiehästskapelseägg", + "item.spawn_egg.entity.zombie.name": "Zombieskapelseägg", + "item.spawn_egg.entity.drowned.name": "Drunknad zombie skapelseägg", + "item.spawn_egg.entity.creeper.name": "Creeperskapelseägg", + "item.spawn_egg.entity.skeleton.name": "Skelettskapelseägg", + "item.spawn_egg.entity.spider.name": "Spindelskapelseägg", + "item.spawn_egg.entity.zombie_pigman.name": "Zombifierad piglin skapelseägg", + "item.spawn_egg.entity.strider.name": "Vandrarskapelseägg", + "item.spawn_egg.entity.slime.name": "Slemkubskapelseägg", + "item.spawn_egg.entity.enderman.name": "Endermanskapelseägg", + "item.spawn_egg.entity.silverfish.name": "Silverfiskskapelseägg", + "item.spawn_egg.entity.cave_spider.name": "Grottspindelskapelseägg", + "item.spawn_egg.entity.ghast.name": "Gastskapelseägg", + "item.spawn_egg.entity.magma_cube.name": "Magmakubskapelseägg", + "item.spawn_egg.entity.blaze.name": "Brännarskapelseägg", + "item.spawn_egg.entity.zombie_villager.name": "Zombiebyboskapelseägg", + "item.spawn_egg.entity.zombie_villager_v2.name": "Zombiebyboskapelseägg", + "item.spawn_egg.entity.witch.name": "Häxskapelseägg", + "item.spawn_egg.entity.stray.name": "Strövarskapelseägg", + "item.spawn_egg.entity.husk.name": "Uttorkad zombie skapelseägg", + "item.spawn_egg.entity.wither_skeleton.name": "Witherskelettskapelseägg", + "item.spawn_egg.entity.guardian.name": "Väktarskapelseägg", + "item.spawn_egg.entity.elder_guardian.name": "Urväktarskapelseägg", + "item.spawn_egg.entity.shulker.name": "Shulkerskapelseägg", + "item.spawn_egg.entity.endermite.name": "Endermiteskapelseägg", + "item.spawn_egg.entity.evocation_illager.name": "Frammanarskapelseägg", + "item.spawn_egg.entity.vex.name": "Vålnadskapelseägg", + "item.spawn_egg.entity.turtle.name": "Havssköldpaddskapelseägg", + "item.spawn_egg.entity.dolphin.name": "Delfinskapelseägg", + "item.spawn_egg.entity.phantom.name": "Fantomskapelseägg", + "item.spawn_egg.entity.panda.name": "Pandaskapelseägg", + "item.spawn_egg.entity.pillager.name": "Plundrarskapelseägg", + "item.spawn_egg.entity.piglin_brute.name": "Piglinbarbarskapelseägg", + "item.spawn_egg.entity.piglin.name": "Piglinskapelseägg", + "item.spawn_egg.entity.fox.name": "Rävskapelseägg", + "item.spawn_egg.entity.unknown.name": "Skapelseägg", + "item.spawn_egg.entity.wandering_trader.name": "Vandrande byteshandlare skapelseägg", + "item.spawn_egg.entity.wither.name": "Witherskapelseägg", + "item.spawn_egg.entity.zoglin.name": "Zoglinskapelseägg", + "item.spawn_egg.entity.sniffer.name": "Sniffarskapelseägg", "item.trident.name": "Treudd", "item.mushroom_stew.name": "Svampstuvning", - "item.muttonCooked.name": "Tillagat får", + "item.muttonCooked.name": "Tillagat fårkött", "item.muttonRaw.name": "Rått får", "item.name_tag.name": "Namnskylt", "item.netherbrick.name": "Nether-tegel", @@ -74522,11 +75556,11 @@ export const langs: Langs = { "item.netherStar.name": "Nether-stjärna", "item.painting.name": "Tavla", "item.paper.name": "Papper", - "item.diamond_pickaxe.name": "Diamantspetshacka", - "item.golden_pickaxe.name": "Guldspetshacka", - "item.iron_pickaxe.name": "Järnspetshacka", - "item.stone_pickaxe.name": "Stenspetshacka", - "item.wooden_pickaxe.name": "Träspetshacka", + "item.diamond_pickaxe.name": "Diamanthacka", + "item.golden_pickaxe.name": "Guldhacka", + "item.iron_pickaxe.name": "Järnhacka", + "item.stone_pickaxe.name": "Stenhacka", + "item.wooden_pickaxe.name": "Trähacka", "item.porkchop_cooked.name": "Tillagad fläskkotlett", "item.porkchop.name": "Rå fläskkotlett", "item.portfolio.name": "Portfölj", @@ -74560,7 +75594,9 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine – skapare", "item.record_creator_music_box.desc": "Lena Raine – skapare (speldosa)", "item.record_precipice.desc": "Aaron Cherof – stup", - "item.redstone.name": "Rödstenspulver", + "item.record_tears.desc": "Amos Roddy - Tears", + "item.record_lava_chicken.desc": "Hyperbrygder – lavakyckling", + "item.redstone.name": "Redstonepulver", "item.reeds.name": "Sockerrör", "item.kelp.name": "Kelp", "item.dried_kelp.name": "Torkad kelp", @@ -74584,13 +75620,13 @@ export const langs: Langs = { "item.acacia_sign.name": "Akaciaskylt", "item.darkoak_sign.name": "Mörk ekskylt", "item.crimson_sign.name": "Karmosinskylt", - "item.warped_sign.name": "Förvriden skylt", + "item.warped_sign.name": "Förvrängd skylt", "item.skull.char.name": "Spelarhuvud", - "item.skull.creeper.name": "Creeper-huvud", + "item.skull.creeper.name": "Creeperhuvud", "item.skull.dragon.name": "Drakhuvud", "item.skull.player.name": "%ss huvud", "item.skull.skeleton.name": "Skelettskalle", - "item.skull.wither.name": "Wither-skelettkranium", + "item.skull.wither.name": "Witherskelettskalle", "item.skull.zombie.name": "Zombiehuvud", "item.slime_ball.name": "Slemboll", "item.snowball.name": "Snöboll", @@ -74607,8 +75643,8 @@ export const langs: Langs = { "item.wooden_sword.name": "Träsvärd", "item.unbreakable": "Oförstörbar", "item.waxed_copper_door.name": "Vaxad koppardörr", - "item.waxed_exposed_copper_door.name": "Vaxad och exponerad koppardörr", - "item.waxed_oxidized_copper_door.name": "Vaxad och oxiderad koppardörr", + "item.waxed_exposed_copper_door.name": "Vaxad exponerad koppardörr", + "item.waxed_oxidized_copper_door.name": "Vaxad och ärgad koppardörr", "item.waxed_weathered_copper_door.name": "Vaxad och nött koppardörr", "item.weathered_copper_door.name": "Nött koppardörr", "item.wind_charge.name": "Vindattack", @@ -74618,34 +75654,34 @@ export const langs: Langs = { "item.written_book.name": "Skriven bok", "item.glowstone_dust.name": "Glödstensstoft", "item.shulker_shell.name": "Shulkerskal", - "item.totem.name": "Vandöendets totem", + "item.totem.name": "Odödlighetstotem", "item.trial_key.name": "Utmaningsnyckel", "item.turtle_helmet.name": "Sköldpaddsskal", - "item.turtle_shell_piece.name": "Sköldpaddsfjäll", + "item.turtle_shell_piece.name": "Sköldpaddsskal", "item.phantom_membrane.name": "Fantommembran", "item.sweet_berries.name": "Söta bär", - "item.suspicious_stew.name": "Suspekt stuvning", - "item.field_masoned_banner_pattern.name": "Tegelmönstrat fanmönster", - "item.creeper_banner_pattern.name": "Creepermönstrat fanmönster", - "item.flow_banner_pattern.name": "Flödigt fanmönster", - "item.flower_banner_pattern.name": "Blommönstrat fanmönster", - "item.globe_banner_pattern.name": "Globfanmönster", - "item.guster_banner_pattern.name": "Breezefanmönster", - "item.piglin_banner_pattern.name": "Trynfanmönster", - "item.skull_banner_pattern.name": "Dödskallefanmönster", - "item.mojang_banner_pattern.name": "Mojängfanmönster", - "item.bordure_indented_banner_pattern.name": "Kantfanmönster", + "item.suspicious_stew.name": "Misstänksamt stuvning", + "item.field_masoned_banner_pattern.name": "Tegelmönstrat fanemönster", + "item.creeper_banner_pattern.name": "Creepermönstrat fanemönster", + "item.flow_banner_pattern.name": "Flödigt fanemönster", + "item.flower_banner_pattern.name": "Blommönstrat fanemönster", + "item.globe_banner_pattern.name": "Globfanemönster", + "item.guster_banner_pattern.name": "Breezefanemönster", + "item.piglin_banner_pattern.name": "Trynfanemönster", + "item.skull_banner_pattern.name": "Dödskallefanemönster", + "item.mojang_banner_pattern.name": "Mojängfanemönster", + "item.bordure_indented_banner_pattern.name": "Kantfanemönster", "item.banner_pattern.bricks": "Tegelmönster", "item.banner_pattern.creeper": "Creepermönster", "item.banner_pattern.flow": "Flöde", "item.banner_pattern.flower": "Blommönster", "item.banner_pattern.globe": "glob", - "item.banner_pattern.guster": "Breeze", - "item.banner_pattern.name": "Fanmönster", + "item.banner_pattern.guster": "Vindväsen", + "item.banner_pattern.name": "Fanemönster", "item.banner_pattern.piglin": "Tryne", "item.banner_pattern.skull": "Dödskallemönster", "item.banner_pattern.thing": "Mojäng", - "item.banner_pattern.vines": "Kant", + "item.banner_pattern.vines": "Taggig ram", "item.bucketPowderSnow.name": "Pudersnöhink", "item.pale_oak_door.name": "Grå ekdörr", "item.pale_oak_hanging_sign.name": "Hängande grå ekskylt", @@ -74711,25 +75747,25 @@ export const langs: Langs = { "potion.damageBoost.name": "Styrkebrygd", "potion.damageBoost.splash.name": "Kastbar styrkebrygd", "potion.damageBoost.linger.name": "Kvardröjande styrkebrygd", - "potion.digSlowDown": "Matthet", + "potion.digSlowDown": "Trötthet", "potion.digSpeed": "Kvickhet", "potion.effects.whenDrank": "Effekt från användning:", "potion.empty": "Inga effekter", "potion.emptyPotion.name": "Vattenflaska", "potion.emptyPotion.splash.name": "Kastbar vattenflaska", "potion.emptyPotion.linger.name": "Kvardröjande vattenflaska", - "potion.fireResistance": "Eldimmunitet", - "potion.fireResistance.name": "Eldimmunitetsbrygd", - "potion.fireResistance.splash.name": "Kastbar eldimmunitetsbrygd", - "potion.fireResistance.linger.name": "Kvardröjande eldimmunitetsbrygd", + "potion.fireResistance": "Eldresistens", + "potion.fireResistance.name": "Eldresistensbrygd", + "potion.fireResistance.splash.name": "Kastbar eldresistensbrygd", + "potion.fireResistance.linger.name": "Kvardröjande eldresistensbrygd", "potion.harm": "Omedelbar skada", "potion.harm.name": "Skadebrygd", "potion.harm.splash.name": "Kastbar skadebrygd", "potion.harm.linger.name": "Kvardröjande skadebrygd", "potion.heal": "Omedelbar hälsa", - "potion.heal.name": "Läkebrygd", - "potion.heal.splash.name": "Kastbar läkebrygd", - "potion.heal.linger.name": "Kvardröjande läkebrygd", + "potion.heal.name": "Läkningsbrygd", + "potion.heal.splash.name": "Kastbar läkningsbrygd", + "potion.heal.linger.name": "Kvardröjande läkningsbrygd", "potion.healthBoost": "Hälsobonus", "potion.hunger": "Hunger", "potion.infested.linger.name": "Kvardröjande angreppsbrygd", @@ -74744,16 +75780,16 @@ export const langs: Langs = { "potion.jump.name": "Hoppbrygd", "potion.jump.splash.name": "Kastbar hoppbrygd", "potion.jump.linger.name": "Kvardröjande hoppbrygd", - "potion.levitation": "Levitering", + "potion.levitation": "Levitation", "potion.moveSlowdown": "Långsamhet", "potion.moveSlowdown.name": "Långsamhetsbrygd", "potion.moveSlowdown.splash.name": "Kastbar långsamhetsbrygd", "potion.moveSlowdown.linger.name": "Kvardröjande långsamhetsbrygd", - "potion.slowFalling": "Långsamma fall", - "potion.slowFalling.name": "Brygd för långsamma fall", - "potion.slowFalling.splash.name": "Kastbar brygd för långsamma fall", - "potion.slowFalling.linger.name": "Kvardröjande brygd för långsamma fall", - "potion.moveSpeed": "Snabbhet", + "potion.slowFalling": "Långsamt fall", + "potion.slowFalling.name": "Antigravitationsbrygd", + "potion.slowFalling.splash.name": "Kastbar antigravitationsbrygd", + "potion.slowFalling.linger.name": "Kvardröjande antigravitationsbrygd", + "potion.moveSpeed": "Hastighet", "potion.moveSpeed.name": "Snabbhetsbrygd", "potion.moveSpeed.splash.name": "Kastbar snabbhetsbrygd", "potion.moveSpeed.linger.name": "Kvardröjande snabbhetsbrygd", @@ -74761,10 +75797,10 @@ export const langs: Langs = { "potion.nightVision.name": "Mörkerseendebrygd", "potion.nightVision.splash.name": "Kastbar mörkerseendebrygd", "potion.nightVision.linger.name": "Kvardröjande mörkerseendebrygd", - "potion.oozing.linger.name": "Kvardröjande sipperbrygd", - "potion.oozing.name": "Sipperbrygd", - "potion.oozing.splash.name": "Kastbar sipperbrygd", - "potion.oozing": "Sipprar", + "potion.oozing.linger.name": "Kvardröjande slemmighetsbrygd", + "potion.oozing.name": "Slemmighetsbrygd", + "potion.oozing.splash.name": "Kastbar slemmighetsbrygd", + "potion.oozing": "Slemmig", "potion.poison": "Gift", "potion.poison.name": "Giftbrygd", "potion.poison.splash.name": "Kastbar giftbrygd", @@ -74775,9 +75811,9 @@ export const langs: Langs = { "potion.potency.3": "IV", "potion.potency.4": "V", "potion.potency.5": "VI", - "potion.awkward.name": "Tafatt brygd", - "potion.awkward.splash.name": "Kastbar tafatt brygd", - "potion.awkward.linger.name": "Kvardröjande tafatt brygd", + "potion.awkward.name": "Tafflig brygd", + "potion.awkward.splash.name": "Kastbar tafflig brygd", + "potion.awkward.linger.name": "Kvardröjande tafflig brygd", "potion.mundane.name": "Ordinär brygd", "potion.mundane.splash.name": "Kastbar ordinär brygd", "potion.mundane.linger.name": "Kvardröjande ordinär brygd", @@ -74791,10 +75827,10 @@ export const langs: Langs = { "potion.regeneration.name": "Återhämtningsbrygd", "potion.regeneration.splash.name": "Kastbar återhämtningsbrygd", "potion.regeneration.linger.name": "Kvardröjande återhämtningsbrygd", - "potion.resistance": "Immunitet", + "potion.resistance": "Resistens", "potion.saturation": "Mättnad", "potion.turtleMaster": "Långsamhet", - "potion.turtleMaster2": "Immunitet", + "potion.turtleMaster2": "Resistens", "potion.turtleMaster.name": "Sköldpaddsmästarens brygd", "potion.turtleMaster.splash.name": "Kastbar sköldpaddsmästarbrygd", "potion.turtleMaster.linger.name": "Kvardröjande sköldpaddsmästarbrygd", @@ -74806,48 +75842,48 @@ export const langs: Langs = { "potion.weakness.name": "Svaghetsbrygd", "potion.weakness.splash.name": "Kastbar svaghetsbrygd", "potion.weakness.linger.name": "Kvardröjande svaghetsbrygd", - "potion.weaving.linger.name": "Kvardröjande vävbrygd", - "potion.weaving.name": "Vävbrygd", - "potion.weaving.splash.name": "Kastbar vävbrygd", - "potion.weaving": "Vävning", + "potion.weaving.linger.name": "Kvardröjande spindelnätsbrygd", + "potion.weaving.name": "Spindelnätsbrygd", + "potion.weaving.splash.name": "Kastbar spindelnätsbrygd", + "potion.weaving": "Spinnande", "potion.windCharged.linger.name": "Kvardröjande vindladdningsbrygd", "potion.windCharged.name": "Vindladdningsbrygd", "potion.windCharged.splash.name": "Kastbar vindladdningsbrygd", - "potion.windCharged": "Vind laddad", + "potion.windCharged": "Vindladdad", "potion.wither": "Wither", "potion.wither.name": "Förmultningsbrygd", "potion.wither.splash.name": "Kastbar förmultningsbrygd", "potion.wither.linger.name": "Kvardröjande förmultningsbrygd", - "tile.sculk_sensor.name": "Skulk-sensor", - "tile.sculk.name": "Skulk", - "tile.sculk_vein.name": "Skulkven", - "tile.sculk_catalyst.name": "Skulkkatalysator", - "tile.sculk_shrieker.name": "Skulkskrikare", + "tile.sculk_sensor.name": "Sculksensor", + "tile.sculk.name": "Sculk", + "tile.sculk_vein.name": "Sculkven", + "tile.sculk_catalyst.name": "Sculkkatalysator", + "tile.sculk_shrieker.name": "Sculkskrikare", "tile.reinforced_deepslate.name": "Förstärkt djupskiffer", "entity.frog.name": "Groda", "entity.tadpole.name": "Grodyngel", - "item.spawn_egg.entity.warden.name": "Väktarspawnägg", + "item.spawn_egg.entity.warden.name": "Väktarskapelseägg", "entity.warden.name": "Warden", - "entity.allay.name": "Hjälpare", - "item.spawn_egg.entity.allay.name": "Hjälparspawnägg", + "entity.allay.name": "Hjälpande ande", + "item.spawn_egg.entity.allay.name": "Hjälpande ande skapelseägg", "item.bucketTadpole.name": "Hink med grodyngel", - "item.spawn_egg.entity.frog.name": "Grodspawnägg", - "item.spawn_egg.entity.tadpole.name": "Grodyngelspawnägg", - "tile.frog_spawn.name": "Grodspawn", + "item.spawn_egg.entity.frog.name": "Grodskapelseägg", + "item.spawn_egg.entity.tadpole.name": "Grodyngelskapelseägg", + "tile.frog_spawn.name": "Grodrom", "tile.pearlescent_froglight.name": "Pärlemorskimrande grodljus", "tile.verdant_froglight.name": "Grönskande grodljus", - "tile.ochre_froglight.name": "Ockragrodljus", - "tile.mud.name": "Lera", - "tile.packed_mud.name": "Packad lera", - "tile.mud_bricks.name": "Lertegelstenar", - "tile.mud_brick_slab.name": "Lera tegelplatta", - "tile.mud_brick_double_slab": "Dubbelplatta av djupskiffertegelsten", + "tile.ochre_froglight.name": "Ockraskinande grodljus", + "tile.mud.name": "Gyttja", + "tile.packed_mud.name": "Packad gyttja", + "tile.mud_bricks.name": "Gyttjemursten", + "tile.mud_brick_slab.name": "Gyttjemurstensplatta", + "tile.mud_brick_double_slab": "Dubbelplatta av gyttjemursten", "tile.mud_brick_stairs.name": "Lera tegel trappor", - "tile.mud_brick_wall.name": "Lera tegelvägg", + "tile.mud_brick_wall.name": "Gyttjemurstensmur", "tile.mangrove_leaves.name": "Mangrovelöv", - "tile.mangrove_propagule.name": "Mangrovediaspor", + "tile.mangrove_propagule.name": "Mangroveskott", "tile.mangrove_roots.name": "Mangroverötter", - "tile.muddy_mangrove_roots.name": "Leriga mangroverötter", + "tile.muddy_mangrove_roots.name": "Gyttjiga mangroverötter", "item.chest_boat.oak.name": "Ekbåt med kista", "item.chest_boat.spruce.name": "Granbåt med kista", "item.chest_boat.birch.name": "Björkbåt med kista", @@ -74855,8 +75891,8 @@ export const langs: Langs = { "item.chest_boat.acacia.name": "Akaciabåt med kista", "item.chest_boat.big_oak.name": "Mörk ekbåt med kista", "item.chest_boat.mangrove.name": "Mangrovebåt med kista", - "tile.mangrove_log.name": "Mangrovestock", - "tile.stripped_mangrove_log.name": "Avskalad mangrovestock", + "tile.mangrove_log.name": "Mangrovestam", + "tile.stripped_mangrove_log.name": "Avbarkad mangrovestam", "tile.mangrove_planks.name": "Mangroveplankor", "tile.mangrove_button.name": "Mangroveknapp", "tile.mangrove_stairs.name": "Mangrovetrappor", @@ -74868,7 +75904,7 @@ export const langs: Langs = { "item.mangrove_sign.name": "Mangroveskylt", "tile.mangrove_trapdoor.name": "Mangrovefallucka", "tile.mangrove_wood.name": "Mangroveträ", - "tile.stripped_mangrove_wood.name": "Avskalat mangroveträ", + "tile.stripped_mangrove_wood.name": "Avbarkat mangroveträ", "item.boat.mangrove.name": "Mangrovebåt", "item.echo_shard.name": "Ekoskärva", "item.recovery_compass.name": "Återupplivningskompass", @@ -74904,7 +75940,7 @@ export const langs: Langs = { "item.explorer_pottery_sherd.name": "Upptäcktsmönstrad keramikskärva", "item.flow_pottery_sherd.name": "Flödes-keramikskärva", "item.friend_pottery_sherd.name": "Kompismönstrad keramikskärva", - "item.guster_pottery_sherd.name": "Stormande keramikskärva", + "item.guster_pottery_sherd.name": "Vindväsen, keramikskärva", "item.heart_pottery_sherd.name": "Hjärtmönstrad keramikskärva", "item.heartbreak_pottery_sherd.name": "Hjärtekrossmönstrad keramikskärva", "item.howl_pottery_sherd.name": "Vargmönstrad keramikskärva", @@ -74947,9 +75983,9 @@ export const langs: Langs = { "item.flow_armor_trim_smithing_template.name": "Flödes-rustningsdetaljer", "item.bolt_armor_trim_smithing_template.name": "Bult-rustningsdetaljer", "item.snort_pottery_sherd.name": "Sniffarmönstrad keramikskärva", - "item.spawn_egg.entity.camel.name": "Kamelspawnägg", + "item.spawn_egg.entity.camel.name": "Kamelskapelseägg", "item.spruce_hanging_sign.name": "Hängande granskylt", - "item.warped_hanging_sign.name": "Hängande förvriden skylt", + "item.warped_hanging_sign.name": "Hängande förvrängd skylt", "tile.bamboo_block.name": "Bambublock", "tile.bamboo_button.name": "Bambuknapp", "tile.bamboo_fence_gate.name": "Bambugrind", @@ -74962,13 +75998,13 @@ export const langs: Langs = { "tile.bamboo_slab.name": "Bambuplatta", "tile.bamboo_stairs.name": "Bambutrappa", "tile.bamboo_trapdoor.name": "Bambufallucka", - "tile.calibrated_sculk_sensor.name": "Kalibrerad skulksensor", + "tile.calibrated_sculk_sensor.name": "Kalibrerad sculksensor", "tile.cherry_button.name": "Körsbärsknapp", "tile.cherry_double_slab.name": "Dubbel körsbärsplatta", "tile.cherry_fence_gate.name": "Körsbärsgrind", "tile.cherry_fence.name": "Körsbärsstaket", "tile.cherry_leaves.name": "Körsbärslöv", - "tile.cherry_log.name": "Körsbärsstock", + "tile.cherry_log.name": "Körsbärsstam", "tile.cherry_planks.name": "Körsbärsplankor", "tile.cherry_pressure_plate.name": "Körsbärstryckplatta", "tile.cherry_sapling.name": "Körsbärsplanta", @@ -74978,14 +76014,14 @@ export const langs: Langs = { "tile.cherry_wood.name": "Körsbärsträ", "tile.chiseled_bookshelf.name": "Mejslad bokhylla", "tile.chiseled_tuff.name": "Mejslad tuff", - "tile.chiseled_tuff_bricks.name": "Mejslat tufftegel", + "tile.chiseled_tuff_bricks.name": "Mejslat tuffmursten", "tile.decorated_pot.name": "Dekorerad kruka", "tile.pink_petals.name": "Rosa kronblad", - "tile.stripped_bamboo_block.name": "Skalat bambublock", - "tile.stripped_cherry_log.name": "Körsbärsstocksvirke", - "tile.stripped_cherry_wood.name": "Körsbärsträvirke", - "tile.suspicious_gravel.name": "Misstänkt grus", - "tile.suspicious_sand.name": "Misstänkt sand", + "tile.stripped_bamboo_block.name": "Avbarkat bambublock", + "tile.stripped_cherry_log.name": "Avbarkad körsbärsstam", + "tile.stripped_cherry_wood.name": "Avbarkat körsbärsträ", + "tile.suspicious_gravel.name": "Misstänksamt grus", + "tile.suspicious_sand.name": "Misstänksamt sand", "trim_pattern.coast.name": "Kust-rustningsdetaljer", "trim_pattern.dune.name": "Dyn-rustningsdetaljer", "trim_pattern.eye.name": "Ögon-rustningsdetaljer", @@ -75024,13 +76060,13 @@ export const langs: Langs = { "tile.beacon.secondary.pocket": "Sekundär", "tile.beehive.name": "Bikupa", "tile.bee_nest.name": "Bisamhälle", - "tile.target.name": "Mål", + "tile.target.name": "Måltavla", "tile.bed.name": "Säng", "tile.bed.noSleep": "Du kan bara sova på natten och under åskväder", "tile.bed.notSafe": "Du kan inte vila nu; det finns monster i närheten", "tile.bed.notValid": "Din hemsäng saknades eller var blockerad", "tile.bed.occupied": "Den här sängen används", - "tile.bed.respawnSet": "Spawnpunkt vald", + "tile.bed.respawnSet": "Återuppståndelsepunkt vald", "tile.bed.tooFar": "Sängen är för långt borta.", "tile.bed.obstructed": "Sängen är blockerad", "tile.bedrock.name": "Berggrund", @@ -75045,13 +76081,13 @@ export const langs: Langs = { "tile.dirt_with_roots.name": "Rotad jord", "tile.spore_blossom.name": "Sporblomma", "tile.azalea_leaves.name": "Azalealöv", - "tile.azalea_leaves_flowered.name": "Blommande azaleablad", + "tile.azalea_leaves_flowered.name": "Blommande azalealöv", "tile.azalea.name": "Azalea", "tile.flowering_azalea.name": "Blommande Azalea", - "tile.cave_vines.name": "Grottrankor", - "tile.cave_vines_body_with_berries.name": "Grottrankor", - "tile.cave_vines_head_with_berries.name": "Grottrankor", - "item.glow_berries.name": "Glödbär", + "tile.cave_vines.name": "Grottklätterväxt", + "tile.cave_vines_body_with_berries.name": "Grottklätterväxt", + "tile.cave_vines_head_with_berries.name": "Grottklätterväxt", + "item.glow_berries.name": "Självlysande bär", "tile.moss_block.name": "Mossblock", "tile.moss_carpet.name": "Mossmatta", "tile.birchFence.name": "Björkstaket", @@ -75064,7 +76100,7 @@ export const langs: Langs = { "tile.gold_block.name": "Guldblock", "tile.iron_block.name": "Järnblock", "tile.lapis_block.name": "Lapis lazuli-block", - "tile.redstone_block.name": "Rödstensblock", + "tile.redstone_block.name": "Redstoneblock", "tile.bookshelf.name": "Bokhylla", "tile.brick_block.name": "Tegel", "tile.brown_mushroom.name": "Brun svamp", @@ -75076,13 +76112,13 @@ export const langs: Langs = { "tile.birch_button.name": "Björkknapp", "tile.dark_oak_button.name": "Mörk ekknapp", "tile.jungle_button.name": "Djungelknapp", - "tile.respawn_anchor.respawnSet": "Respawnplats har ställts in", - "tile.respawn_anchor.notValid": "Ditt respawnankare hade slut på laddningar, saknades eller var blockerat", + "tile.respawn_anchor.respawnSet": "Återuppståndelsepunkt vald", + "tile.respawn_anchor.notValid": "Ditt återuppståndelseankare hade slut på laddningar, saknades eller var blockerat", "tile.spruce_button.name": "Granknapp", "tile.stone_button.name": "Stenknapp", "tile.cactus.name": "Kaktus", "tile.cake.name": "Tårta", - "tile.dried_kelp_block.name": "Block av torkad kelp", + "tile.dried_kelp_block.name": "Torkat kelpblock", "tile.carrots.name": "Morötter", "tile.carved_pumpkin.name": "Snidad pumpa", "tile.cauldron.name": "Kittel", @@ -75091,77 +76127,77 @@ export const langs: Langs = { "tile.chalkboard.threeByTwo.name": "Svart tavla", "tile.chest.name": "Kista", "tile.ender_chest.name": "Enderkista", - "tile.jigsaw.name": "Pusselblock", + "tile.jigsaw.name": "Pusselbitsblock", "tile.heavy_core.name": "Tung kärna", "tile.honey_block.name": "Honungsblock", - "tile.honeycomb_block.name": "Honungskaksblock", - "tile.lodestone.name": "Lodsten", + "tile.honeycomb_block.name": "Vaxkaksblock", + "tile.lodestone.name": "Magnetit", "tile.nether_sprouts.name": "Nether-groddar", - "tile.crimson_stem.name": "Karmosinfot", - "tile.warped_stem.name": "Förvriden fot", - "tile.stripped_crimson_stem.name": "Skalad karmosinfot", - "tile.stripped_warped_stem.name": "Skalad förvriden fot", - "tile.crimson_hyphae.name": "Blodröd hyfer", - "tile.warped_hyphae.name": "Vriden hyfer", - "tile.stripped_crimson_hyphae.name": "Skalad blodröd hyfer", - "tile.stripped_warped_hyphae.name": "Skalad vriden hyfer", + "tile.crimson_stem.name": "Karmosinstam", + "tile.warped_stem.name": "Förvrängd stam", + "tile.stripped_crimson_stem.name": "Avbarkad karmosinstam", + "tile.stripped_warped_stem.name": "Avbarkad förvrängd stam", + "tile.crimson_hyphae.name": "Karmosinhyfer", + "tile.warped_hyphae.name": "Förvrängda hyfer", + "tile.stripped_crimson_hyphae.name": "Avbarkade karmosinhyfer", + "tile.stripped_warped_hyphae.name": "Avbarkade förvrängda hyfer", "tile.crimson_planks.name": "Karmosinplankor", - "tile.warped_planks.name": "Förvridna plankor", + "tile.warped_planks.name": "Förvrängda plankor", "tile.crimson_door.name": "Karmosindörr", - "tile.warped_door.name": "Förvriden dörr", + "tile.warped_door.name": "Förvrängd dörr", "tile.crimson_trapdoor.name": "Karmosinfallucka", - "tile.warped_trapdoor.name": "Förvriden fallucka", + "tile.warped_trapdoor.name": "Förvrängd fallucka", "tile.crimson_standing_sign.name": "Karmosinskylt", - "tile.warped_standing_sign.name": "Förvriden skylt", + "tile.warped_standing_sign.name": "Förvrängd skylt", "tile.crimson_wall_sign.name": "Karmosinskylt", - "tile.warped_wall_sign.name": "Förvriden skylt", + "tile.warped_wall_sign.name": "Förvrängd skylt", "tile.crimson_stairs.name": "Karmosintrappa", - "tile.warped_stairs.name": "Förvriden trappa", + "tile.warped_stairs.name": "Förvrängd trappa", "tile.crimson_fence.name": "Karmosinstaket", - "tile.warped_fence.name": "Förvridet staket", + "tile.warped_fence.name": "Förvrängt staket", "tile.crimson_fence_gate.name": "Karmosingrind", - "tile.warped_fence_gate.name": "Förvriden grind", + "tile.warped_fence_gate.name": "Förvrängd grind", "tile.crimson_button.name": "Karmosinknapp", - "tile.warped_button.name": "Förvriden knapp", + "tile.warped_button.name": "Förvrängd knapp", "tile.crimson_pressure_plate.name": "Karmosintryckplatta", - "tile.warped_pressure_plate.name": "Förvriden tryckplatta", + "tile.warped_pressure_plate.name": "Förvrängd tryckplatta", "tile.crimson_slab.name": "Karmosinplatta", - "tile.warped_slab.name": "Förvriden platta", + "tile.warped_slab.name": "Förvrängd platta", "tile.crimson_double_slab.name": "Karmosinplatta", - "tile.warped_double_slab.name": "Förvriden platta", - "tile.shroomlight.name": "Lampsvamp", - "tile.crimson_nylium.name": "Karmosinnylium", - "tile.warped_nylium.name": "Förvridet nylium", + "tile.warped_double_slab.name": "Förvrängd platta", + "tile.shroomlight.name": "Svampljus", + "tile.crimson_nylium.name": "Karmosinnycel", + "tile.warped_nylium.name": "Förvrängd nycel", "tile.basalt.name": "Basalt", "tile.polished_basalt.name": "Polerad basalt", "tile.blackstone.name": "Svartsten", - "tile.polished_blackstone_bricks.name": "Polerade svartstenar", - "tile.cracked_polished_blackstone_bricks.name": "Spruckna polerade svartstenar", - "tile.polished_blackstone_brick_stairs.name": "Trappa av polerade svartstenar", + "tile.polished_blackstone_bricks.name": "Polerad svartmursten", + "tile.cracked_polished_blackstone_bricks.name": "Sprucken polerad svartmursten", + "tile.polished_blackstone_brick_stairs.name": "Polerad svartmurstenstrappa", "tile.blackstone_stairs.name": "Svartstenstrappa", - "tile.blackstone_wall.name": "Svartstensvägg", - "tile.polished_blackstone_brick_wall.name": "Vägg av polerade svartstenar", - "tile.chiseled_polished_blackstone.name": "Huggen polerad svartsten", + "tile.blackstone_wall.name": "Svartstensmur", + "tile.polished_blackstone_brick_wall.name": "Polerad svartmurstensmur", + "tile.chiseled_polished_blackstone.name": "Mejslad polerad svartsten", "tile.gilded_blackstone.name": "Förgylld svartsten", "tile.blackstone_slab.name": "Svartstensplatta", - "tile.polished_blackstone_brick_slab.name": "Platta av polerade svartstenar", + "tile.polished_blackstone_brick_slab.name": "Polerad svartmurstensplatta", "tile.chain.name": "Kedja", - "tile.soul_soil.name": "Själajord", - "tile.soul_fire.name": "Själaeld", + "tile.soul_soil.name": "Själjord", + "tile.soul_fire.name": "Själeld", "tile.polished_blackstone.name": "Polerad svartsten", "tile.polished_blackstone_stairs.name": "Polerad svartstenstrappa", - "tile.polished_blackstone_slab.name": "Polerad svarstensplatta", + "tile.polished_blackstone_slab.name": "Polerad svartstensplatta", "tile.polished_blackstone_pressure_plate.name": "Tryckplatta av polerad svartsten", - "tile.polished_blackstone_button.name": "Knapp av polerad svartsten", - "tile.polished_blackstone_wall.name": "Vägg av polerad svartsten", + "tile.polished_blackstone_button.name": "Polerad svartstensknapp", + "tile.polished_blackstone_wall.name": "Polerad svartstensmur", "tile.polished_tuff.name": "Polerad tuff", "tile.polished_tuff_slab.name": "Polerad tuffplatta", "tile.polished_tuff_stairs.name": "Polerad tufftrappa", - "tile.polished_tuff_wall.name": "Polerad tuffvägg", - "tile.soul_campfire.name": "Själslägereld", + "tile.polished_tuff_wall.name": "Polerad tuffmur", + "tile.soul_campfire.name": "Själlägereld", "tile.chiseled_nether_bricks.name": "Huggna Nether-tegelstenar", "tile.cracked_nether_bricks.name": "Spruckna Nether-tegelstenar", - "tile.quartz_bricks.name": "Kvartstegelstenar", + "tile.quartz_bricks.name": "Kvartsmursten", "tile.trapped_chest.name": "Kistfälla", "tile.shulkerBoxWhite.name": "Vit shulkerlåda", "tile.shulkerBoxOrange.name": "Orange shulkerlåda", @@ -75181,39 +76217,39 @@ export const langs: Langs = { "tile.shulkerBoxBlack.name": "Svart shulkerlåda", "tile.shulkerBox.name": "Shulkerlåda", "tile.chorus_flower.name": "Körblomma", - "tile.chorus_plant.name": "Körväxt", - "tile.stained_glass.white.name": "Vitmålat glas", + "tile.chorus_plant.name": "Körplanta", + "tile.stained_glass.white.name": "Vitfärgat glas", "tile.stained_glass.silver.name": "Ljusgråmålat glas", - "tile.stained_glass.gray.name": "Gråmålat glas", - "tile.stained_glass.black.name": "Svartmålat glas", - "tile.stained_glass.brown.name": "Brunmålat glas", - "tile.stained_glass.red.name": "Rödmålat glas", - "tile.stained_glass.orange.name": "Orangemålat glas", - "tile.stained_glass.yellow.name": "Gulmålat glas", - "tile.stained_glass.lime.name": "Limegrönmålat glas", - "tile.stained_glass.green.name": "Grönmålat glas", - "tile.stained_glass.cyan.name": "Turkosmålat glas", - "tile.stained_glass.light_blue.name": "Ljusblåmålat glas", - "tile.stained_glass.blue.name": "Blåmålat glas", - "tile.stained_glass.purple.name": "Lilamålat glas", - "tile.stained_glass.magenta.name": "Ljuslilamålat glas", - "tile.stained_glass.pink.name": "Rosamålat glas", - "tile.stained_glass_pane.white.name": "Vitmålad glasruta", - "tile.stained_glass_pane.silver.name": "Ljusgråmålad glasruta", - "tile.stained_glass_pane.gray.name": "Gråmålad glasruta", - "tile.stained_glass_pane.black.name": "Svartmålad glasruta", - "tile.stained_glass_pane.brown.name": "Brunmålad glasruta", - "tile.stained_glass_pane.red.name": "Rödmålad glasruta", - "tile.stained_glass_pane.orange.name": "Orangemålad glasruta", - "tile.stained_glass_pane.yellow.name": "Gulmålad glasruta", - "tile.stained_glass_pane.lime.name": "Limegrönmålad glasruta", - "tile.stained_glass_pane.green.name": "Grönmålad glasruta", - "tile.stained_glass_pane.cyan.name": "Turkosmålad glasruta", - "tile.stained_glass_pane.light_blue.name": "Ljusblåmålad glasruta", - "tile.stained_glass_pane.blue.name": "Blåmålad glasruta", - "tile.stained_glass_pane.purple.name": "Lilamålad glasruta", - "tile.stained_glass_pane.magenta.name": "Ljuslilamålad glasruta", - "tile.stained_glass_pane.pink.name": "Rosamålad glasruta", + "tile.stained_glass.gray.name": "Gråfärgat glas", + "tile.stained_glass.black.name": "Svartfärgat glas", + "tile.stained_glass.brown.name": "Brunfärgat glas", + "tile.stained_glass.red.name": "Rödfärgat glas", + "tile.stained_glass.orange.name": "Orangefärgat glas", + "tile.stained_glass.yellow.name": "Gulfärgat glas", + "tile.stained_glass.lime.name": "Limegrönfärgat glas", + "tile.stained_glass.green.name": "Grönfärgat glas", + "tile.stained_glass.cyan.name": "Turkosfärgat glas", + "tile.stained_glass.light_blue.name": "Ljusblåfärgat glas", + "tile.stained_glass.blue.name": "Blåfärgat glas", + "tile.stained_glass.purple.name": "Lilafärgat glas", + "tile.stained_glass.magenta.name": "Ljuslilafärgat glas", + "tile.stained_glass.pink.name": "Rosafärgat glas", + "tile.stained_glass_pane.white.name": "Vitfärgad glasruta", + "tile.stained_glass_pane.silver.name": "Ljusgråfärgad glasruta", + "tile.stained_glass_pane.gray.name": "Gråfärgad glasruta", + "tile.stained_glass_pane.black.name": "Svartfärgad glasruta", + "tile.stained_glass_pane.brown.name": "Brunfärgad glasruta", + "tile.stained_glass_pane.red.name": "Rödfärgad glasruta", + "tile.stained_glass_pane.orange.name": "Orangefärgad glasruta", + "tile.stained_glass_pane.yellow.name": "Gulfärgad glasruta", + "tile.stained_glass_pane.lime.name": "Limegrönfärgad glasruta", + "tile.stained_glass_pane.green.name": "Grönfärgad glasruta", + "tile.stained_glass_pane.cyan.name": "Turkosfärgad glasruta", + "tile.stained_glass_pane.light_blue.name": "Ljusblåfärgad glasruta", + "tile.stained_glass_pane.blue.name": "Blåfärgad glasruta", + "tile.stained_glass_pane.purple.name": "Lilafärgad glasruta", + "tile.stained_glass_pane.magenta.name": "Ljuslilafärgad glasruta", + "tile.stained_glass_pane.pink.name": "Rosafärgad glasruta", "tile.clay.name": "Lera", "tile.hardened_clay.name": "Terrakotta", "tile.stained_hardened_clay.black.name": "Svart terrakotta", @@ -75234,9 +76270,9 @@ export const langs: Langs = { "tile.stained_hardened_clay.white.name": "Vit terrakotta", "tile.stained_hardened_clay.yellow.name": "Gul terrakotta", "tile.structure_block.name": "Strukturblock", - "tile.structure_void.name": "Strukturerat tomrum", - "tile.trial_spawner.name": "Utmaningsspawnare", - "tile.vault.name": "Valv", + "tile.structure_void.name": "Strukturtomrum", + "tile.trial_spawner.name": "Utmaningsskapare", + "tile.vault.name": "Kassaskåp", "tile.wool.black.name": "Svart ull", "tile.wool.blue.name": "Blå ull", "tile.wool.brown.name": "Brun ull", @@ -75264,23 +76300,23 @@ export const langs: Langs = { "tile.cobblestone_wall.stone_brick.name": "Murstensmur", "tile.cobblestone_wall.mossy_stone_brick.name": "Mossig murstensmur", "tile.cobblestone_wall.nether_brick.name": "Nether-tegelmur", - "tile.cobblestone_wall.end_brick.name": "Slutmurstensmur", + "tile.cobblestone_wall.end_brick.name": "Endmurstensmur", "tile.cobblestone_wall.prismarine.name": "Prismarinmur", "tile.cobblestone_wall.red_sandstone.name": "Röd sandstensmur", "tile.cobblestone_wall.red_nether_brick.name": "Röd Nether-tegelmur", "tile.cocoa.name": "Kakao", "tile.command_block.name": "Kommandoblock", - "tile.composter.name": "Komposterare", + "tile.composter.name": "Kompost", "tile.light_block.name": "Ljus", "tile.repeating_command_block.name": "Upprepande kommandoblock", - "tile.chain_command_block.name": "Kedjande kommandoblock", + "tile.chain_command_block.name": "Kedjat kommandoblock", "tile.wheat.name": "Grödor", "tile.darkOakFence.name": "Mörkt ekstaket", "tile.dark_oak_fence_gate.name": "Mörk ekgrind", "tile.daylight_detector.name": "Dagsljusdetektor", - "tile.deadbush.name": "Vissen buske", + "tile.deadbush.name": "Död buske", "tile.detector_rail.name": "Sensorräls", - "tile.dirt.coarse.name": "Smuts", + "tile.dirt.coarse.name": "Grusig jord", "tile.dirt.default.name": "Jord", "tile.dirt.name": "Jord", "tile.podzol.name": "Podsol", @@ -75294,14 +76330,14 @@ export const langs: Langs = { "tile.double_plant.grass.name": "Högt gräs", "tile.double_plant.name": "Planta", "tile.double_plant.paeonia.name": "Pion", - "tile.double_plant.rose.name": "Rosenbuske", + "tile.double_plant.rose.name": "Rosbuske", "tile.double_plant.sunflower.name": "Solros", "tile.double_plant.syringa.name": "Syren", "tile.dragon_egg.name": "Drakägg", "tile.dropper.name": "Utmatare", "tile.enchanting_table.name": "Förtrollningsbord", "tile.enderChest.name": "Enderkista", - "tile.end_portal_frame.name": "End-portalram", + "tile.end_portal_frame.name": "Endportalram", "tile.farmland.name": "Åkerjord", "tile.fletching_table.name": "Pilmakarbänk", "tile.fence.name": "Ekstaket", @@ -75311,7 +76347,7 @@ export const langs: Langs = { "tile.yellow_flower.dandelion.name": "Maskros", "tile.yellow_flower.name": "Blomma", "tile.crimson_roots.crimsonRoots.name": "Karmosinrötter", - "tile.warped_roots.warpedRoots.name": "Förvridna rötter", + "tile.warped_roots.warpedRoots.name": "Förvrängda rötter", "tile.red_flower.allium.name": "Gräslök", "tile.red_flower.blueOrchid.name": "Blå orkidé", "tile.red_flower.cornflower.name": "Blåklint", @@ -75324,16 +76360,16 @@ export const langs: Langs = { "tile.red_flower.tulipPink.name": "Rosa tulpan", "tile.red_flower.tulipRed.name": "Röd tulpan", "tile.red_flower.tulipWhite.name": "Vit tulpan", - "tile.wither_rose.name": "Wither-ros", + "tile.wither_rose.name": "Witherros", "tile.furnace.name": "Smältugn", "tile.glass.name": "Glas", - "tile.golden_rail.name": "Strömförsedd räls", + "tile.golden_rail.name": "Krafträls", "tile.grass.name": "Gräsblock", "tile.grass_path.name": "Jordstig", "tile.gravel.name": "Grus", "tile.hay_block.name": "Höbal", "tile.netherrack.name": "Nether-sten", - "tile.soul_sand.name": "Själasand", + "tile.soul_sand.name": "Själsand", "tile.hopper.name": "Tratt", "tile.ice.name": "Is", "tile.packed_ice.name": "Packad is", @@ -75357,27 +76393,34 @@ export const langs: Langs = { "tile.leaves.spruce.name": "Granbarr", "tile.lever.name": "Spak", "tile.glowstone.name": "Glödsten", - "tile.glow_lichen.name": "Glödlavar", - "tile.lightning_rod.name": "Blixtstav", + "tile.glow_lichen.name": "Självlysande lav", + "tile.lightning_rod.name": "Åskledare", + "tile.exposed_lightning_rod.name": "Exponerad åskledare", + "tile.weathered_lightning_rod.name": "Nött åskledare", + "tile.oxidized_lightning_rod.name": "Ärgad blixtstav", + "tile.waxed_lightning_rod.name": "Vaxad åskledare", + "tile.waxed_exposed_lightning_rod.name": "Vaxad exponerad åskledare", + "tile.waxed_weathered_lightning_rod.name": "Vaxad nött åskledare", + "tile.waxed_oxidized_lightning_rod.name": "Vaxad ärgad blixtstav", "tile.lit_pumpkin.name": "Halloweenlykta", "tile.lockedchest.name": "Låst kista", - "tile.log.acacia.name": "Akaciastock", - "tile.log.big_oak.name": "Mörk ekstock", - "tile.log.birch.name": "Björkstock", - "tile.log.jungle.name": "Djungelstock", - "tile.log.name": "Stock", - "tile.log.oak.name": "Ekstock", - "tile.log.spruce.name": "Granstock", + "tile.log.acacia.name": "Akaciastam", + "tile.log.big_oak.name": "Mörk ekstam", + "tile.log.birch.name": "Björkstam", + "tile.log.jungle.name": "Djungelträdstam", + "tile.log.name": "Stam", + "tile.log.oak.name": "Ekstam", + "tile.log.spruce.name": "Granstam", "tile.magma.name": "Magmablock", "tile.melon_block.name": "Melon", - "tile.mob_spawner.name": "Monsterspawnare", - "tile.monster_egg.brick.name": "Infesterade murstenar", - "tile.monster_egg.chiseledbrick.name": "Infesterad utmejslad mursten", - "tile.monster_egg.cobble.name": "Infesterad kullersten", - "tile.monster_egg.crackedbrick.name": "Infesterad sprucken mursten", - "tile.monster_egg.mossybrick.name": "Infesterad mossig mursten", - "tile.monster_egg.name": "Infesterad sten", - "tile.monster_egg.stone.name": "Infesterad sten", + "tile.mob_spawner.name": "Monsterskapare", + "tile.monster_egg.brick.name": "Angripen mursten", + "tile.monster_egg.chiseledbrick.name": "Angripen utmejslad mursten", + "tile.monster_egg.cobble.name": "Angripen kullersten", + "tile.monster_egg.crackedbrick.name": "Angripen sprucken mursten", + "tile.monster_egg.mossybrick.name": "Angripen mossig mursten", + "tile.monster_egg.name": "Angripen sten", + "tile.monster_egg.stone.name": "Angripen sten", "tile.mushroom.name": "Svamp", "tile.noteblock.name": "Notblock", "tile.mycelium.name": "Mycel", @@ -75393,10 +76436,10 @@ export const langs: Langs = { "tile.netherreactor.wrongPattern": "Fel mönster!", "tile.nether_wart.name": "Nether-vårta", "tile.nether_wart_block.name": "Nether-vårtblock", - "tile.warped_wart_block.name": "Förvridet vårtblock", - "tile.unlit_redstone_torch.name": "Rödstensfackla", - "tile.redstone_torch.name": "Rödstensfackla", - "tile.soul_torch.name": "Själafackla", + "tile.warped_wart_block.name": "Förvrängt vårtblock", + "tile.unlit_redstone_torch.name": "Redstonefackla", + "tile.redstone_torch.name": "Redstonefackla", + "tile.soul_torch.name": "Själfackla", "tile.obsidian.name": "Obsidian", "tile.coal_ore.name": "Kolmalm", "tile.diamond_ore.name": "Diamantmalm", @@ -75405,7 +76448,7 @@ export const langs: Langs = { "tile.iron_ore.name": "Järnmalm", "tile.copper_ore.name": "Kopparmalm", "tile.lapis_ore.name": "Lapis lazuli-malm", - "tile.redstone_ore.name": "Rödstensmalm", + "tile.redstone_ore.name": "Rredstonemalm", "tile.oreRuby.name": "Rubinmalm", "tile.observer.name": "Observatör", "tile.piston.name": "Kolv", @@ -75419,12 +76462,12 @@ export const langs: Langs = { "tile.dark_oak_pressure_plate.name": "Mörk ektryckplatta", "tile.jungle_pressure_plate.name": "Djungeltryckplatta", "tile.spruce_pressure_plate.name": "Grantryckplatta", - "tile.prismarine.bricks.name": "Prismarintegel", + "tile.prismarine.bricks.name": "Prismarinmursten", "tile.prismarine.dark.name": "Mörk prismarin", "tile.prismarine.rough.name": "Prismarin", "tile.pumpkin.name": "Pumpa", "tile.pumpkin_stem.name": "Pumpastjälk", - "tile.quartz_block.chiseled.name": "Utmejslat kvartsblock", + "tile.quartz_block.chiseled.name": "Mejslat kvartsblock", "tile.quartz_block.default.name": "Kvartsblock", "tile.quartz_block.lines.name": "Kvartspelare", "tile.quartz_block.smooth.name": "Slätt kvartsblock", @@ -75432,15 +76475,15 @@ export const langs: Langs = { "tile.rail.name": "Räls", "tile.red_mushroom.name": "Röd svamp", "tile.crimson_fungus.name": "Karmosinsvamp", - "tile.warped_fungus.name": "Förvriden svamp", + "tile.warped_fungus.name": "Förvrängd svamp", "tile.red_mushroom_block.name": "Rött svampblock", "tile.red_sandstone.chiseled.name": "Utmejslad röd sandsten", "tile.red_sandstone.default.name": "Röd sandsten", "tile.red_sandstone.name": "Röd sandsten", "tile.red_sandstone.smooth.name": "Slät röd sandsten", "tile.red_sandstone.cut.name": "Skuren röd sandsten", - "tile.redstone_wire.name": "Rödstenspulver", - "tile.redstone_lamp.name": "Rödstenslampa", + "tile.redstone_wire.name": "Redstonepulver", + "tile.redstone_lamp.name": "Redstonelampa", "tile.reeds.name": "Sockerrör", "tile.sand.default.name": "Sand", "tile.sand.name": "Sand", @@ -75456,7 +76499,7 @@ export const langs: Langs = { "tile.sapling.jungle.name": "Djungelplanta", "tile.sapling.oak.name": "Ekplanta", "tile.sapling.spruce.name": "Granplanta", - "tile.seaLantern.name": "Sjölykta", + "tile.seaLantern.name": "Havslykta", "tile.standing_sign.name": "Underteckna", "tile.spruce_standing_sign.name": "Granskylt", "tile.birch_standing_sign.name": "Björkskylt", @@ -75465,11 +76508,11 @@ export const langs: Langs = { "tile.darkoak_standing_sign.name": "Mörk ekskylt", "tile.slime.name": "Slemblock", "tile.snow.name": "Snöblock", - "tile.sponge.dry.name": "Tvättsvamp", - "tile.sponge.wet.name": "Våt tvättsvamp", + "tile.sponge.dry.name": "Svamp", + "tile.sponge.wet.name": "Våt svamp", "tile.spruceFence.name": "Granstaket", "tile.spruce_fence_gate.name": "Grangrind", - "tile.brick_stairs.name": "Tegelstenstrappa", + "tile.brick_stairs.name": "Tegeltrappa", "tile.nether_brick_stairs.name": "Nether-tegeltrappa", "tile.quartz_stairs.name": "Kvartstrappa", "tile.smooth_quartz_stairs.name": "Slät kvartstrappa", @@ -75477,7 +76520,7 @@ export const langs: Langs = { "tile.sandstone_stairs.name": "Sandstenstrappa", "tile.stone_stairs.name": "Kullerstenstrappa", "tile.normal_stone_stairs.name": "Stentrappa", - "tile.stone_brick_stairs.name": "Murstenstrappa", + "tile.stone_brick_stairs.name": "MurstenstrappaTegeltrappa", "tile.oak_stairs.name": "Ektrappa", "tile.acacia_stairs.name": "Akaciatrappa", "tile.birch_stairs.name": "Björktrappa", @@ -75487,7 +76530,7 @@ export const langs: Langs = { "tile.purpur_stairs.name": "Purpurtrappa", "tile.prismarine_stairs.name": "Prismarintrappa", "tile.dark_prismarine_stairs.name": "Mörk prismarintrappa", - "tile.prismarine_bricks_stairs.name": "Prismarintegeltrappa", + "tile.prismarine_bricks_stairs.name": "Prismarinmurstenstrappa", "tile.granite_stairs.name": "Granittrappa", "tile.diorite_stairs.name": "Diorittrappa", "tile.andesite_stairs.name": "Andesittrappa", @@ -75497,7 +76540,7 @@ export const langs: Langs = { "tile.mossy_stone_brick_stairs.name": "Mossig murstenstrappa", "tile.smooth_red_sandstone_stairs.name": "Slät röd sandstenstrappa", "tile.smooth_sandstone_stairs.name": "Slät sandstenstrappa", - "tile.end_brick_stairs.name": "Slutmurstenstrappa", + "tile.end_brick_stairs.name": "Endmurstenstrappa", "tile.mossy_cobblestone_stairs.name": "Mossig kullerstenstrappa", "tile.red_nether_brick_stairs.name": "Röd Nether-tegeltrappa", "tile.smooth_stone.name": "Slät sten", @@ -75535,7 +76578,7 @@ export const langs: Langs = { "tile.stonecutter.name": "Stenskärare", "tile.stonecutter_block.name": "Stenskärare", "tile.mossy_cobblestone.name": "Mossig kullersten", - "tile.double_stone_slab.brick.name": "Tegelstensplatta", + "tile.double_stone_slab.brick.name": "Murstensplatta", "tile.double_stone_slab.cobble.name": "Kullerstensplatta", "tile.double_stone_slab.name": "Stenplatta", "tile.double_stone_slab.nether_brick.name": "Nether-tegelplatta", @@ -75545,7 +76588,7 @@ export const langs: Langs = { "tile.double_stone_slab.stone.name": "Stenplatta", "tile.double_stone_slab.wood.name": "Träplatta", "tile.stone_slab.name": "Stenplatta", - "tile.stone_slab.brick.name": "Tegelstensplatta", + "tile.stone_slab.brick.name": "Murstensplatta", "tile.stone_slab.cobble.name": "Kullerstensplatta", "tile.stone_slab.stone.name": "Slät stenplatta", "tile.stone_slab.nether_brick.name": "Nether-tegelplatta", @@ -75558,11 +76601,11 @@ export const langs: Langs = { "tile.stone_slab2.purpur.name": "Purpurplatta", "tile.stone_slab2.prismarine.rough.name": "Prismarinplatta", "tile.stone_slab2.prismarine.dark.name": "Mörk prismarinplatta", - "tile.stone_slab2.prismarine.bricks.name": "Prismarintegelplatta", + "tile.stone_slab2.prismarine.bricks.name": "Prismarinmurstensplatta", "tile.stone_slab2.mossy_cobblestone.name": "Mossig kullerstensplatta", "tile.stone_slab2.red_nether_brick.name": "Röd Nether-tegelplatta", "tile.stone_slab2.sandstone.smooth.name": "Slät sandstensplatta", - "tile.stone_slab3.end_brick.name": "Slutmurstensplatta", + "tile.stone_slab3.end_brick.name": "Endmurstensplatta", "tile.stone_slab3.red_sandstone.smooth.name": "Slät röd sandstensplatta", "tile.stone_slab3.andesite.smooth.name": "Polerad andesitplatta", "tile.stone_slab3.andesite.name": "Andesitplatta", @@ -75575,24 +76618,24 @@ export const langs: Langs = { "tile.stone_slab4.stone.name": "Stenplatta", "tile.stone_slab4.cut_sandstone.name": "Skuren sandstensplatta", "tile.stone_slab4.cut_red_sandstone.name": "Skuren röd sandstensplatta", - "tile.coral_block.blue.name": "Block av orgelkorall", - "tile.coral_block.pink.name": "Block av hjärnkorall", - "tile.coral_block.purple.name": "Block av bubbelkorall", - "tile.coral_block.red.name": "Block av millepora", - "tile.coral_block.yellow.name": "Block av tetrakorall", - "tile.coral_block.blue_dead.name": "Block av död orgelkorall", - "tile.coral_block.pink_dead.name": "Block av död hjärnkorall", - "tile.coral_block.purple_dead.name": "Block av död bubbelkorall", - "tile.coral_block.red_dead.name": "Block av död millepora", - "tile.coral_block.yellow_dead.name": "Block av död tetrakorall", + "tile.coral_block.blue.name": "Orgelkorallblock", + "tile.coral_block.pink.name": "Hjärnkorallblock", + "tile.coral_block.purple.name": "Bubbelkorallblock", + "tile.coral_block.red.name": "Eldkorallblock", + "tile.coral_block.yellow.name": "Tetrakorallblock", + "tile.coral_block.blue_dead.name": "Dött orgelkorallblock", + "tile.coral_block.pink_dead.name": "Dött hjärnkorallblock", + "tile.coral_block.purple_dead.name": "Dött bubbelkorallblock", + "tile.coral_block.red_dead.name": "Dött eldkorallblock", + "tile.coral_block.yellow_dead.name": "Dött tetrakorallblock", "tile.tallgrass.fern.name": "Ormbunke", "tile.tallgrass.grass.name": "Kort gräs", "tile.tallgrass.name": "Kort gräs", "tile.tallgrass.shrub.name": "Buskage", - "tile.tuff_brick_slab.name": "Tufftegelplatta", - "tile.tuff_brick_stairs.name": "Tufftegeltrappa", - "tile.tuff_brick_wall.name": "Tufftegelmur", - "tile.tuff_bricks.name": "Tufftegel", + "tile.tuff_brick_slab.name": "Tuffmurstensplatta", + "tile.tuff_brick_stairs.name": "Tuffmurstenstrappa", + "tile.tuff_brick_wall.name": "Tuffmurstensmur", + "tile.tuff_bricks.name": "Tuffmursten", "tile.tuff_slab.name": "Tuffplatta", "tile.tuff_stairs.name": "Tufftrappa", "tile.tuff_wall.name": "Tuffvägg", @@ -75602,22 +76645,22 @@ export const langs: Langs = { "tile.coral.blue.name": "Orgelkorall", "tile.coral.pink.name": "Hjärnkorall", "tile.coral.purple.name": "Bubbelkorall", - "tile.coral.red.name": "Millepora", + "tile.coral.red.name": "Eldkorall", "tile.coral.yellow.name": "Tetrakorall", "tile.coral.blue_dead.name": "Död orgelkorall", "tile.coral.pink_dead.name": "Död hjärnkorall", "tile.coral.purple_dead.name": "Död bubbelkorall", - "tile.coral.red_dead.name": "Död millepora", + "tile.coral.red_dead.name": "Död eldkorall", "tile.coral.yellow_dead.name": "Död tetrakorall", "tile.coral_fan.blue_fan.name": "Orgelhornkorall", "tile.coral_fan.pink_fan.name": "Hjärnhornkorall", "tile.coral_fan.purple_fan.name": "Bubbelhornkorall", - "tile.coral_fan.red_fan.name": "Milleporahornkorall", + "tile.coral_fan.red_fan.name": "Eldhornkorall", "tile.coral_fan.yellow_fan.name": "Tetrahornkorall", "tile.coral_fan_dead.blue_fan.name": "Död orgelhornkorall", "tile.coral_fan_dead.pink_fan.name": "Död hjärnhornkorall", "tile.coral_fan_dead.purple_fan.name": "Död bubbelhornkorall", - "tile.coral_fan_dead.red_fan.name": "Död milleporahornkorall", + "tile.coral_fan_dead.red_fan.name": "Död eldhornkorall", "tile.coral_fan_dead.yellow_fan.name": "Död tetrahornkorall", "tile.glass_pane.name": "Glasruta", "tile.tnt.name": "Dynamit", @@ -75630,18 +76673,18 @@ export const langs: Langs = { "tile.jungle_trapdoor.name": "Djungelfallucka", "tile.spruce_trapdoor.name": "Granfallucka", "tile.tripWire.name": "Snubbeltråd", - "tile.tripwire_hook.name": "Snubbeltrådshake", - "tile.vine.name": "Murgröna", - "tile.weeping_vines.name": "Sörjande murgröna", - "tile.twisting_vines.name": "Vriden murgröna", + "tile.tripwire_hook.name": "Snubbeltrådskrok", + "tile.vine.name": "Växter", + "tile.weeping_vines.name": "Hängväxter", + "tile.twisting_vines.name": "Vridna klätterväxter", "tile.flowing_water.name": "Vatten", "tile.water.name": "Vatten", "tile.waterlily.name": "Näckrosblad", "tile.web.name": "Spindelnät", - "tile.heavy_weighted_pressure_plate.name": "Tung tryckplatta", - "tile.light_weighted_pressure_plate.name": "Lätt tryckplatta", - "tile.end_stone.name": "Slutsten", - "tile.end_bricks.name": "Slutmursten", + "tile.heavy_weighted_pressure_plate.name": "Tung tyngdtryckplatta", + "tile.light_weighted_pressure_plate.name": "Lätt tyngdtryckplatta", + "tile.end_stone.name": "Endsten", + "tile.end_bricks.name": "Endmursten", "tile.planks.acacia.name": "Akaciaplankor", "tile.planks.big_oak.name": "Mörka ekplankor", "tile.planks.birch.name": "Björkplankor", @@ -75679,15 +76722,15 @@ export const langs: Langs = { "tile.pale_oak_double_slab.name": "Dubbelplatta i grå ek", "tile.pale_oak_fence.name": "Grått ekstaket", "tile.pale_oak_fence_gate.name": "Grå ekgrind", - "tile.pale_oak_log.name": "Grå ekstock", + "tile.pale_oak_log.name": "Grå ekstam", "tile.pale_oak_planks.name": "Gråa ekplankor", "tile.pale_oak_pressure_plate.name": "Grå ektryckplatta", "tile.pale_oak_slab.name": "Grå ekplatta", "tile.pale_oak_stairs.name": "Grå ektrappa", "tile.pale_oak_trapdoor.name": "Grå ekfallucka", "tile.pale_oak_wood.name": "Grått ekträ", - "tile.stripped_pale_oak_log.name": "Grått ekstocksvirke", - "tile.stripped_pale_oak_wood.name": "Grått ekträvirke", + "tile.stripped_pale_oak_log.name": "Avbarkad grå ekstam", + "tile.stripped_pale_oak_wood.name": "Avbarkat grått ekträ", "tile.pale_hanging_moss.name": "Grå hängande mossa", "tile.pale_moss_block.name": "Grått mossblock", "tile.pale_moss_carpet.name": "Grå mossmatta", @@ -75766,18 +76809,18 @@ export const langs: Langs = { "tile.concretePowder.magenta.name": "Ljuslila betongpulver", "tile.concretePowder.orange.name": "Orange betongpulver", "tile.concretePowder.white.name": "Vitt betongpulver", - "tile.stripped_spruce_log.name": "Granstocksvirke", - "tile.stripped_dark_oak_log.name": "Mörkt ekstocksvirke", - "tile.stripped_birch_log.name": "Björkstocksvirke", - "tile.stripped_jungle_log.name": "Djungelstocksvirke", - "tile.stripped_oak_log.name": "Ekstocksvirke", - "tile.stripped_acacia_log.name": "Akaciastocksvirke", + "tile.stripped_spruce_log.name": "Avbarkad granstam", + "tile.stripped_dark_oak_log.name": "Avbarkad mörk ekstam", + "tile.stripped_birch_log.name": "Avbarkad björkstam", + "tile.stripped_jungle_log.name": "Avbarkad djungelträdstam", + "tile.stripped_oak_log.name": "Avbarkad ekstam", + "tile.stripped_acacia_log.name": "Avbarkad akaciastam", "tile.bamboo.name": "Bambu", - "tile.scaffolding.name": "Ställning", + "tile.scaffolding.name": "Byggnadsställning", "tile.grindstone.name": "Slipsten", - "tile.cartography_table.name": "Kartografbänk", + "tile.cartography_table.name": "Kartografbord", "tile.lantern.name": "Lykta", - "tile.soul_lantern.name": "Själalykta", + "tile.soul_lantern.name": "Själlykta", "tile.smoker.name": "Rökugn", "tile.smithing_table.name": "Smidesbänk", "tile.barrel.name": "Tunna", @@ -75791,26 +76834,26 @@ export const langs: Langs = { "tile.wood.jungle.name": "Djungelträ", "tile.wood.acacia.name": "Akaciaträ", "tile.wood.dark_oak.name": "Mörkt ekträ", - "tile.wood.stripped.oak.name": "Ekträvirke", - "tile.wood.stripped.spruce.name": "Granträvirke", - "tile.wood.stripped.birch.name": "Björkträvirke", - "tile.wood.stripped.jungle.name": "Djungelträvirke", - "tile.wood.stripped.acacia.name": "Akaciaträvirke", - "tile.wood.stripped.dark_oak.name": "Mörkt ekträvirke", + "tile.wood.stripped.oak.name": "Avbarkat ekträ", + "tile.wood.stripped.spruce.name": "Avbarkat granträ", + "tile.wood.stripped.birch.name": "Avbarkat björkträ", + "tile.wood.stripped.jungle.name": "Avbarkat djungelträ", + "tile.wood.stripped.acacia.name": "Avbarkat akaciaträ", + "tile.wood.stripped.dark_oak.name": "Avbarkat mörkt ekträ", "tile.netherite_block.name": "Netheritblock", - "tile.ancient_debris.name": "Uråldrig bråte", + "tile.ancient_debris.name": "Forntida spillror", "tile.nether_gold_ore.name": "Nether-guldmalm", - "tile.respawn_anchor.name": "Respawnankare", + "tile.respawn_anchor.name": "Återuppståndelseankare", "tile.crying_obsidian.name": "Gråtande obsidian", "tile.powder_snow.name": "Pudersnö", "tile.deepslate.name": "Djupskiffer", - "tile.infested_deepslate.name": "Infesterad djupskiffer", - "tile.cobbled_deepslate.name": "Djupskifferkullersten", + "tile.infested_deepslate.name": "Angripen djupskiffer", + "tile.cobbled_deepslate.name": "Kullerstensformad djupskiffer", "tile.dripstone_block.name": "Droppstensblock", "tile.pointed_dripstone.name": "Spetsig droppsten", - "tile.cobbled_deepslate_slab.name": "Platta av djupskifferkullersten", - "tile.cobbled_deepslate_stairs.name": "Trappa av djupskifferkullersten", - "tile.cobbled_deepslate_wall.name": "Mur av djupskifferkullersten", + "tile.cobbled_deepslate_slab.name": "Kullerstensformad djupskifferplatta", + "tile.cobbled_deepslate_stairs.name": "Kullerstensformad djupskiffertrappa", + "tile.cobbled_deepslate_wall.name": "Kullerstensformad djupskiffermur", "tile.polished_deepslate.name": "Polerad djupskiffer", "tile.polished_deepslate_slab.name": "Polerad djupskifferplatta", "tile.polished_deepslate_stairs.name": "Polerad djupskiffertrappa", @@ -75819,28 +76862,28 @@ export const langs: Langs = { "tile.deepslate_tile_slab.name": "Platta av djupskifferkakel", "tile.deepslate_tile_stairs.name": "Trappa av djupskifferkakel", "tile.deepslate_tile_wall.name": "Mur av djupskifferkakel", - "tile.deepslate_bricks.name": "Djupskiffertegelstenar", - "tile.deepslate_brick_slab.name": "Tegelstensplatta av djupskiffer", - "tile.deepslate_brick_stairs.name": "Tegelstenstrappa av djupskiffer", + "tile.deepslate_bricks.name": "Djupskiffermursten", + "tile.deepslate_brick_slab.name": "Murstensplatta av djupskiffer", + "tile.deepslate_brick_stairs.name": "Tegeltrappa av djupskiffer", "tile.deepslate_brick_wall.name": "Tegelmur av djupskiffer", "tile.chiseled_deepslate.name": "Mejslad djupskiffer", - "tile.cobbled_deepslate_double_slab.name": "Dubbelplatta av djupskifferkullersten", + "tile.cobbled_deepslate_double_slab.name": "Dubbelplatta av kullerstensformad djupskiffer", "tile.polished_deepslate_double_slab.name": "Dubbelplatta av polerad djupskiffer", "tile.deepslate_tile_double_slab.name": "Dubbelplatta av djupskifferkakel", "tile.deepslate_brick_double_slab.name": "Dubbelplatta av djupskiffertegelsten", - "tile.deepslate_lapis_ore.name": "Djupskiffer och lapis lazuli-malm", - "tile.deepslate_iron_ore.name": "Djupskifferjärnmalm", - "tile.deepslate_gold_ore.name": "Djupskifferguldmalm", - "tile.deepslate_redstone_ore.name": "Djupskifferrödstensmalm", - "tile.deepslate_diamond_ore.name": "Djupskifferdiamantmalm", - "tile.deepslate_coal_ore.name": "Djupskifferkolmalm", - "tile.deepslate_emerald_ore.name": "Djupskiffersmaragdmalm", - "tile.deepslate_copper_ore.name": "Djupskifferkopparmalm", - "tile.cracked_deepslate_tiles.name": "Sprucket djupskifferkakel", - "tile.cracked_deepslate_bricks.name": "Spruckna djupskiffertegelstenar", - "tile.pitcher_plant.name": "Växtkanna", + "tile.deepslate_lapis_ore.name": "Djupskifferinbäddad lapis lazulimalm", + "tile.deepslate_iron_ore.name": "Djupskifferinbäddad järnmalm", + "tile.deepslate_gold_ore.name": "Djupskifferinbäddad guldmalm", + "tile.deepslate_redstone_ore.name": "Djupskifferinbäddad redstonemalm", + "tile.deepslate_diamond_ore.name": "Djupskifferinbäddad diamantmalm", + "tile.deepslate_coal_ore.name": "Djupskifferinbäddad kolmalm", + "tile.deepslate_emerald_ore.name": "Djupskifferinbäddad smaragdmalm", + "tile.deepslate_copper_ore.name": "Djupskifferinbäddad kopparmalm", + "tile.cracked_deepslate_tiles.name": "Sprucket djupskiffertegel", + "tile.cracked_deepslate_bricks.name": "Sprucken djupskiffermursten", + "tile.pitcher_plant.name": "Kannranka", "tile.sniffer_egg.name": "Sniffarägg", - "tile.torchflower.name": "Fackelblomma", + "tile.torchflower.name": "Fackellilja", "item.copper_ingot.name": "Koppartacka", "item.raw_copper.name": "Råkoppar", "item.raw_iron.name": "Råjärn", @@ -75848,112 +76891,112 @@ export const langs: Langs = { "tile.copper_block.name": "Kopparblock", "tile.exposed_copper.name": "Exponerad koppar", "tile.weathered_copper.name": "Nött koppar", - "tile.oxidized_copper.name": "Oxiderad koppar", + "tile.oxidized_copper.name": "Ärgad koppar", "tile.waxed_copper.name": "Vaxat kopparblock", "tile.waxed_exposed_copper.name": "Vaxad exponerad koppar", "tile.waxed_weathered_copper.name": "Vaxad nött koppar", - "tile.waxed_oxidized_copper.name": "Vaxad oxiderad koppar", - "tile.cut_copper.name": "Huggen koppar", - "tile.exposed_cut_copper.name": "Exponerad huggen koppar", + "tile.waxed_oxidized_copper.name": "Vaxad ärgad koppar", + "tile.cut_copper.name": "Skuren koppar", + "tile.exposed_cut_copper.name": "Exponerad skuren koppar", "tile.weathered_cut_copper.name": "Nött huggen koppar", - "tile.oxidized_cut_copper.name": "Oxiderad huggen koppar", - "tile.waxed_cut_copper.name": "Vaxad huggen koppar", - "tile.waxed_exposed_cut_copper.name": "Vaxad exponerad huggen koppar", + "tile.oxidized_cut_copper.name": "Ärgad huggen koppar", + "tile.waxed_cut_copper.name": "Vaxad skuren koppar", + "tile.waxed_exposed_cut_copper.name": "Vaxad exponerad skuren koppar", "tile.waxed_weathered_cut_copper.name": "Vaxad nött huggen koppar", - "tile.waxed_oxidized_cut_copper.name": "Vaxad oxiderad huggen koppar", - "tile.cut_copper_stairs.name": "Huggen koppartrappa", - "tile.exposed_cut_copper_stairs.name": "Exponerad huggen koppartrappa", + "tile.waxed_oxidized_cut_copper.name": "Vaxad ärgad huggen koppar", + "tile.cut_copper_stairs.name": "Skuren koppartrappa", + "tile.exposed_cut_copper_stairs.name": "Exponerad skuren koppartrappa", "tile.weathered_cut_copper_stairs.name": "Nött huggen koppartrappa", - "tile.oxidized_cut_copper_stairs.name": "Oxiderad huggen koppartrappa", - "tile.waxed_cut_copper_stairs.name": "Vaxad huggen koppartrappa", - "tile.waxed_exposed_cut_copper_stairs.name": "Vaxad exponerad huggen koppartrappa", + "tile.oxidized_cut_copper_stairs.name": "Ärgad huggen koppartrappa", + "tile.waxed_cut_copper_stairs.name": "Vaxad skuren koppartrappa", + "tile.waxed_exposed_cut_copper_stairs.name": "Vaxad exponerad skuren koppartrappa", "tile.waxed_weathered_cut_copper_stairs.name": "Vaxad nött huggen koppartrappa", - "tile.waxed_oxidized_cut_copper_stairs.name": "Vaxad oxiderad huggen koppartrappa", - "tile.cut_copper_slab.name": "Huggen kopparplatta", - "tile.exposed_cut_copper_slab.name": "Exponerad huggen kopparplatta", + "tile.waxed_oxidized_cut_copper_stairs.name": "Vaxad ärgad huggen koppartrappa", + "tile.cut_copper_slab.name": "Skuren kopparplatta", + "tile.exposed_cut_copper_slab.name": "Exponerad skuren kopparplatta", "tile.weathered_cut_copper_slab.name": "Nött huggen kopparplatta", - "tile.oxidized_cut_copper_slab.name": "Oxiderad huggen kopparplatta", - "tile.waxed_cut_copper_slab.name": "Vaxad huggen kopparplatta", - "tile.waxed_exposed_cut_copper_slab.name": "Vaxad exponerad huggen kopparplatta", + "tile.oxidized_cut_copper_slab.name": "Ärgad huggen kopparplatta", + "tile.waxed_cut_copper_slab.name": "Vaxad skuren kopparplatta", + "tile.waxed_exposed_cut_copper_slab.name": "Vaxad exponerad skuren kopparplatta", "tile.waxed_weathered_cut_copper_slab.name": "Vaxad nött huggen kopparplatta", - "tile.waxed_oxidized_cut_copper_slab.name": "Vaxad oxiderad huggen kopparplatta", + "tile.waxed_oxidized_cut_copper_slab.name": "Vaxad ärgad huggen kopparplatta", "tile.chiseled_copper.name": "Mejslad koppar", "tile.exposed_chiseled_copper.name": "Exponerad mejslad koppar", - "tile.oxidized_chiseled_copper.name": "Oxiderad mejslad koppar", + "tile.oxidized_chiseled_copper.name": "Ärgad mejslad koppar", "tile.waxed_chiseled_copper.name": "Vaxad mejslad koppar", - "tile.waxed_exposed_chiseled_copper.name": "Vaxad och exponerad mejslad koppar", - "tile.waxed_oxidized_chiseled_copper.name": "Vaxad och oxiderad mejslad koppar", + "tile.waxed_exposed_chiseled_copper.name": "Vaxad exponerad mejslad koppar", + "tile.waxed_oxidized_chiseled_copper.name": "Vaxad och ärgad mejslad koppar", "tile.waxed_weathered_chiseled_copper.name": "Vaxad och nött mejslad koppar", "tile.weathered_chiseled_copper.name": "Nött mejslad koppar", "tile.copper_bulb.name": "Kopparlampa", "tile.exposed_copper_bulb.name": "Exponerad kopparlampa", - "tile.oxidized_copper_bulb.name": "Oxiderad kopparlampa", + "tile.oxidized_copper_bulb.name": "Ärgad kopparlampa", "tile.waxed_copper_bulb.name": "Vaxad kopparlampa", - "tile.waxed_exposed_copper_bulb.name": "Vaxad oach exponerad kopparlampa", - "tile.waxed_oxidized_copper_bulb.name": "Vaxad oxiderad kopparlampa", + "tile.waxed_exposed_copper_bulb.name": "Vaxad exponerad kopparlampa", + "tile.waxed_oxidized_copper_bulb.name": "Vaxad ärgad kopparlampa", "tile.waxed_weathered_copper_bulb.name": "Vaxad och nött kopparlampa", "tile.weathered_copper_bulb.name": "Nött kopparlampa", "tile.copper_door.name": "Koppardörr", "tile.exposed_copper_door.name": "Exponerad koppardörr", - "tile.oxidized_copper_door.name": "Oxiderad koppardörr", + "tile.oxidized_copper_door.name": "Ärgad koppardörr", "tile.waxed_copper_door.name": "Vaxad koppardörr", - "tile.waxed_exposed_copper_door.name": "Vaxad och exponerad koppardörr", - "tile.waxed_oxidized_copper_door.name": "Vaxad och oxiderad koppardörr", + "tile.waxed_exposed_copper_door.name": "Vaxad exponerad koppardörr", + "tile.waxed_oxidized_copper_door.name": "Vaxad och ärgad koppardörr", "tile.waxed_weathered_copper_door.name": "Vaxad och nött koppardörr", "tile.weathered_copper_door.name": "Nött koppardörr", "tile.copper_grate.name": "Koppargaller", "tile.exposed_copper_grate.name": "Exponerat koppargaller", - "tile.oxidized_copper_grate.name": "Oxiderat koppargaller", + "tile.oxidized_copper_grate.name": "Ärgat koppargaller", "tile.waxed_copper_grate.name": "Vaxat koppargaller", - "tile.waxed_exposed_copper_grate.name": "Vaxat och exponerat koppargaller", - "tile.waxed_oxidized_copper_grate.name": "Vaxat och oxiderat koppargaller", + "tile.waxed_exposed_copper_grate.name": "Vaxat exponerat koppargaller", + "tile.waxed_oxidized_copper_grate.name": "Vaxat och ärgat koppargaller", "tile.waxed_weathered_copper_grate.name": "Vaxat och nött koppargaller", "tile.weathered_copper_grate.name": "Nött koppargaller", "tile.copper_trapdoor.name": "Kopparfallucka", "tile.exposed_copper_trapdoor.name": "Exponerad kopparfallucka", - "tile.oxidized_copper_trapdoor.name": "Oxiderad kopparfallucka", + "tile.oxidized_copper_trapdoor.name": "Ärgad kopparfallucka", "tile.waxed_copper_trapdoor.name": "Vaxad kopparfallucka", "tile.waxed_exposed_copper_trapdoor.name": "Vaxad exponerad kopparfallucka", - "tile.waxed_oxidized_copper_trapdoor.name": "Vaxad och oxiderad kopparfallucka", + "tile.waxed_oxidized_copper_trapdoor.name": "Vaxad och ärgad kopparfallucka", "tile.waxed_weathered_copper_trapdoor.name": "Vaxad och nött kopparfallucka", "tile.weathered_copper_trapdoor.name": "Nött kopparfallucka", "tile.raw_copper_block.name": "Råkopparblock", "tile.raw_iron_block.name": "Råjärnsblock", "tile.raw_gold_block.name": "Råguldsblock", - "tile.candle.name": "Ljus", - "tile.white_candle.name": "Vitt ljus", - "tile.orange_candle.name": "Orange ljus", - "tile.magenta_candle.name": "Ljuslila ljus", - "tile.light_blue_candle.name": "Ljusblå ljus", - "tile.yellow_candle.name": "Gult ljus", - "tile.lime_candle.name": "Limegrönt ljus", - "tile.pink_candle.name": "Rosa ljus", - "tile.gray_candle.name": "Grått ljus", - "tile.light_gray_candle.name": "Ljusgrått ljus", - "tile.cyan_candle.name": "Turkost ljus", - "tile.purple_candle.name": "Lila ljus", - "tile.blue_candle.name": "Blått ljus", - "tile.brown_candle.name": "Brunt ljus", - "tile.green_candle.name": "Grönt ljus", - "tile.red_candle.name": "Rött ljus", - "tile.black_candle.name": "Svart ljus", - "tile.candle_cake.name": "Tårta med ljus", - "tile.white_candle_cake.name": "Tårta med vitt ljus", - "tile.orange_candle_cake.name": "Tårta med orange ljus", - "tile.magenta_candle_cake.name": "Tårta med ljuslila ljus", - "tile.light_blue_candle_cake.name": "Tårta med ljusblått ljus", - "tile.yellow_candle_cake.name": "Tårta med gult ljus", - "tile.lime_candle_cake.name": "Tårta med limegrönt ljus", - "tile.pink_candle_cake.name": "Tårta med rosa ljus", - "tile.gray_candle_cake.name": "Tårta med grått ljus", - "tile.light_gray_candle_cake.name": "Tårta med ljusgrått ljus", - "tile.cyan_candle_cake.name": "Tårta med turkost ljus", - "tile.purple_candle_cake.name": "Tårta med lila ljus", - "tile.blue_candle_cake.name": "Tårta med blått ljus", - "tile.brown_candle_cake.name": "Tårta med brunt ljus", - "tile.green_candle_cake.name": "Tårta med grönt ljus", - "tile.red_candle_cake.name": "Tårta med rött ljus", - "tile.black_candle_cake.name": "Tårta med svart ljus", + "tile.candle.name": "Stearinljus", + "tile.white_candle.name": "Vitt stearinljus", + "tile.orange_candle.name": "Orange stearinljus", + "tile.magenta_candle.name": "Ljuslila stearinljus", + "tile.light_blue_candle.name": "Ljusblått stearinljus", + "tile.yellow_candle.name": "Gult stearinljus", + "tile.lime_candle.name": "Limegrönt stearinljus", + "tile.pink_candle.name": "Rosa stearinljus", + "tile.gray_candle.name": "Grått stearinljus", + "tile.light_gray_candle.name": "Ljusgrått stearinljus", + "tile.cyan_candle.name": "Turkost stearinljus", + "tile.purple_candle.name": "Lila stearinljus", + "tile.blue_candle.name": "Blått stearinljus", + "tile.brown_candle.name": "Brunt stearinljus", + "tile.green_candle.name": "Grönt stearinljus", + "tile.red_candle.name": "Rött stearinljus", + "tile.black_candle.name": "Svart stearinljus", + "tile.candle_cake.name": "Tårta med stearinljus", + "tile.white_candle_cake.name": "Tårta med vitt stearinljus", + "tile.orange_candle_cake.name": "Tårta med orange stearinljus", + "tile.magenta_candle_cake.name": "Tårta med ljuslila stearinljus", + "tile.light_blue_candle_cake.name": "Tårta med ljusblått stearinljus", + "tile.yellow_candle_cake.name": "Tårta med gult stearinljus", + "tile.lime_candle_cake.name": "Tårta med limegrönt stearinljus", + "tile.pink_candle_cake.name": "Tårta med rosa stearinljus", + "tile.gray_candle_cake.name": "Tårta med grått stearinljus", + "tile.light_gray_candle_cake.name": "Tårta med ljusgrått stearinljus", + "tile.cyan_candle_cake.name": "Tårta med turkost stearinljus", + "tile.purple_candle_cake.name": "Tårta med lila stearinljus", + "tile.blue_candle_cake.name": "Tårta med blått stearinljus", + "tile.brown_candle_cake.name": "Tårta med brunt stearinljus", + "tile.green_candle_cake.name": "Tårta med grönt stearinljus", + "tile.red_candle_cake.name": "Tårta med rött stearinljus", + "tile.black_candle_cake.name": "Tårta med svart stearinljus", "item.spyglass.name": "Kikare", "item.amethyst_shard.name": "Ametistskärva", "tile.amethyst_block.name": "Ametistblock", @@ -75963,18 +77006,103 @@ export const langs: Langs = { "tile.medium_amethyst_bud.name": "Medelstor ametistknopp", "tile.small_amethyst_bud.name": "Liten ametistknopp", "tile.tuff.name": "Tuff", - "tile.calcite.name": "Kalkspat", + "tile.calcite.name": "Kalcit", "tile.tinted_glass.name": "Tonat glas", "tile.smooth_basalt.name": "Slät basalt", "tile.wildflowers.name": "Vildblommor", - "tile.firefly_bush.name": "Buske med lysmaskar", + "tile.firefly_bush.name": "Eldflugsbuske", "tile.bush.name": "Buske", - "tile.leaf_litter.name": "Utspridda löv", + "tile.leaf_litter.name": "Lövrester", "tile.cactus_flower.name": "Kaktusblomma", "item.brown_egg.name": "Brunt ägg", "item.blue_egg.name": "Blått ägg", "tile.short_dry_grass.name": "Kort torrt gräs", - "tile.tall_dry_grass.name": "Högt torrt gräs" + "tile.tall_dry_grass.name": "Högt torrt gräs", + "entity.happy_ghast.name": "Glad gast", + "item.spawn_egg.entity.happy_ghast.name": "Glad ghast skapelseägg", + "tile.dried_ghast.name": "Uttorkad gast", + "item.black_harness.name": "Svart sele", + "item.blue_harness.name": "Blå sele", + "item.brown_harness.name": "Brun sele", + "item.cyan_harness.name": "Turkos sele", + "item.gray_harness.name": "Grå sele", + "item.green_harness.name": "Grön sele", + "item.light_blue_harness.name": "Ljusblå sele", + "item.light_gray_harness.name": "Ljusgrå sele", + "item.lime_harness.name": "Limegrön sele", + "item.magenta_harness.name": "Ljuslila sele", + "item.orange_harness.name": "Orange sele", + "item.pink_harness.name": "Rosa sele", + "item.purple_harness.name": "Lila sele", + "item.red_harness.name": "Röd sele", + "item.white_harness.name": "Vit sele", + "item.yellow_harness.name": "Gul sele", + "entity.copper_golem.name": "Koppargolem", + "item.spawn_egg.entity.copper_golem.name": "Koppargolemskapelseägg", + "item.copper_nugget.name": "Kopparklimp", + "item.copper_sword.name": "Kopparsvärd", + "item.copper_pickaxe.name": "Kopparhacka", + "item.copper_axe.name": "Kopparyxa", + "item.copper_shovel.name": "Kopparspade", + "item.copper_hoe.name": "Kopparflåhacka", + "item.copper_boots.name": "Kopparstövlar", + "item.copper_leggings.name": "Kopparbyxor", + "item.copper_chestplate.name": "Kopparharnesk", + "item.copper_helmet.name": "Kopparhjälm", + "tile.copper_chest.name": "Kopparkista", + "tile.exposed_copper_chest.name": "Exponerad kopparkista", + "tile.weathered_copper_chest.name": "Nött kopparkista", + "tile.oxidized_copper_chest.name": "Ärgad kopparkista", + "tile.waxed_copper_chest.name": "Vaxad kopparkista", + "tile.waxed_exposed_copper_chest.name": "Vaxad exponerad kopparkista", + "tile.waxed_weathered_copper_chest.name": "Vaxad och nött kopparkista", + "tile.waxed_oxidized_copper_chest.name": "Vaxad och ärgad kopparkista", + "tile.acacia_shelf.name": "Akaciahylla", + "tile.bamboo_shelf.name": "Bambuhylla", + "tile.birch_shelf.name": "Björkhylla", + "tile.cherry_shelf.name": "Körsbärshylla", + "tile.crimson_shelf.name": "Karmosinhylla", + "tile.dark_oak_shelf.name": "Mörk ekhylla", + "tile.jungle_shelf.name": "Djungelhylla", + "tile.mangrove_shelf.name": "Mangrovehylla", + "tile.oak_shelf.name": "Ekhylla", + "tile.pale_oak_shelf.name": "Grå ekhylla", + "tile.spruce_shelf.name": "Granhylla", + "tile.warped_shelf.name": "Förvrängd hylla", + "tile.copper_golem_statue.name": "Koppargolemstaty", + "tile.exposed_copper_golem_statue.name": "Exponerad koppargolemstaty", + "tile.weathered_copper_golem_statue.name": "Nött koppargolemstaty", + "tile.oxidized_copper_golem_statue.name": "Ärgad koppargolemstaty", + "tile.waxed_copper_golem_statue.name": "Vaxad koppargolemstaty", + "tile.waxed_exposed_copper_golem_statue.name": "Vaxad exponerad koppargolemstaty", + "tile.waxed_weathered_copper_golem_statue.name": "Vaxad nött koppargolemstaty", + "tile.waxed_oxidized_copper_golem_statue.name": "Vaxad ärgad koppargolemstaty", + "tile.copper_chain.name": "Kopparkedja", + "tile.exposed_copper_chain.name": "Exponerad kopparkedja", + "tile.weathered_copper_chain.name": "Nött kopparkedja", + "tile.oxidized_copper_chain.name": "Ärgad kopparkedja", + "tile.waxed_copper_chain.name": "Vaxad kopparkedja", + "tile.waxed_exposed_copper_chain.name": "Vaxad exponerad kopparkedja", + "tile.waxed_weathered_copper_chain.name": "Vaxad och nött kopparkedja", + "tile.waxed_oxidized_copper_chain.name": "Vaxad och ärgad kopparkedja", + "tile.copper_bars.name": "Koppargaller", + "tile.exposed_copper_bars.name": "Exponerat koppargaller", + "tile.weathered_copper_bars.name": "Nött koppargaller", + "tile.oxidized_copper_bars.name": "Ärgat koppargaller", + "tile.waxed_copper_bars.name": "Vaxat koppargaller", + "tile.waxed_exposed_copper_bars.name": "Vaxat exponerat koppargaller", + "tile.waxed_weathered_copper_bars.name": "Vaxat och nött koppargaller", + "tile.waxed_oxidized_copper_bars.name": "Vaxat och ärgat koppargaller", + "tile.copper_lantern.name": "Kopparlykta", + "tile.exposed_copper_lantern.name": "Exponerad kopparlykta", + "tile.weathered_copper_lantern.name": "Nött kopparlykta", + "tile.oxidized_copper_lantern.name": "Ärgad kopparlykta", + "tile.waxed_copper_lantern.name": "Vaxad kopparlykta", + "tile.waxed_exposed_copper_lantern.name": "Vaxad exponerad kopparlykta", + "tile.waxed_weathered_copper_lantern.name": "Vaxad och nött kopparlykta", + "tile.waxed_oxidized_copper_lantern.name": "Vaxad och ärgad kopparlykta", + "tile.copper_torch.name": "Kopparfackla", + "tile.iron_chain.name": "Järnkedja" }, "tr_TR": { "enchantment.arrowDamage": "Güç", @@ -75994,7 +77122,7 @@ export const langs: Langs = { "enchantment.fire": "Ateş Boyutu", "enchantment.fishingSpeed": "Ayartma", "enchantment.frostwalker": "Ayazda Yürüyen", - "enchantment.heavy_weapon.breach": "İhlal", + "enchantment.heavy_weapon.breach": "Del", "enchantment.heavy_weapon.density": "Yoğunluk", "enchantment.heavy_weapon.windburst": "Rüzgar Patlaması", "enchantment.knockback": "Geri Tepme", @@ -76022,7 +77150,7 @@ export const langs: Langs = { "enchantment.swift_sneak": "Çevik ve Sinsi", "enchantment.thorns": "Dikenler", "enchantment.untouching": "İpeksi Dokunuş", - "enchantment.waterWalker": "Derin Lavgezer", + "enchantment.waterWalker": "Derin Koşucu", "enchantment.waterWorker": "Suya Yatkınlık", "enchantment.tridentChanneling": "Yönlendirme", "enchantment.tridentLoyalty": "Sadakat", @@ -77110,7 +78238,7 @@ export const langs: Langs = { "item.flint_and_steel.name": "Çakmaktaşı ve Çelik", "item.flower_pot.name": "Çiçek Saksısı", "item.frame.name": "Eşya Çerçevesi", - "item.ghast_tear.name": "Ghast gözyaşı", + "item.ghast_tear.name": "Hortlak gözyaşı", "item.glass_bottle.name": "Cam şişe", "item.gold_nugget.name": "Altın Parçası", "item.iron_nugget.name": "Demir Parçası", @@ -77134,6 +78262,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Elmas At Zırhı", "item.horsearmorgold.name": "Altın At Zırhı", "item.horsearmoriron.name": "Demir At Zırhı", + "item.copper_horse_armor.name": "Bakır At Zırhı", "item.horsearmorleather.name": "Deri At Zırhı", "item.gold_ingot.name": "Altın Külçesi", "item.iron_ingot.name": "Demir külçesi", @@ -77317,6 +78446,8 @@ export const langs: Langs = { "item.record_creator.desc": "Lena Raine - Oluşturucu", "item.record_creator_music_box.desc": "Lena Raine - Oluşturucu (Müzik Kutusu)", "item.record_precipice.desc": "Aaron Cherof - Uçurum", + "item.record_tears.desc": "Amos Roddy - Tears", + "item.record_lava_chicken.desc": "Hiper İksirler - Lav Tavuğu", "item.redstone.name": "Redstone Tozu", "item.reeds.name": "Şeker Kamışı", "item.kelp.name": "Varek", @@ -77575,7 +78706,7 @@ export const langs: Langs = { "potion.wither.name": "Zayıflama İksiri", "potion.wither.splash.name": "Sıçrayan Zayıflama İksiri", "potion.wither.linger.name": "Uzun Süreli Zayıflama İksiri", - "tile.sculk_sensor.name": "Gizlenme Sensörü", + "tile.sculk_sensor.name": "Sculk Sensörü", "tile.sculk.name": "Sculk", "tile.sculk_vein.name": "Sculk Damarı", "tile.sculk_catalyst.name": "Sculk Katalizörü", @@ -78063,7 +79194,7 @@ export const langs: Langs = { "tile.fletching_table.name": "Okçuluk Masası", "tile.fence.name": "Meşe Çit", "tile.fence_gate.name": "Meşe Çit Kapısı", - "tile.iron_bars.name": "Demir Çubuklar", + "tile.iron_bars.name": "Demir Parmaklık", "tile.fire.name": "Ateş", "tile.yellow_flower.dandelion.name": "Karahindiba", "tile.yellow_flower.name": "Çiçek", @@ -78116,6 +79247,13 @@ export const langs: Langs = { "tile.glowstone.name": "Işık Taşı", "tile.glow_lichen.name": "Parlayan Liken", "tile.lightning_rod.name": "Paratoner", + "tile.exposed_lightning_rod.name": "Çıplak Paratoner", + "tile.weathered_lightning_rod.name": "Yıpranmış Paratoner", + "tile.oxidized_lightning_rod.name": "Oksitlenmiş Paratoner", + "tile.waxed_lightning_rod.name": "Mumlu Paratoner", + "tile.waxed_exposed_lightning_rod.name": "Mumlu Çıplak Paratoner", + "tile.waxed_weathered_lightning_rod.name": "Mumlu Yıpranmış Paratoner", + "tile.waxed_oxidized_lightning_rod.name": "Mumlu Oksitlenmiş Paratoner", "tile.lit_pumpkin.name": "Kabak Fener", "tile.lockedchest.name": "Kilitli Sandık", "tile.log.acacia.name": "Akasya Kütüğü", @@ -78731,13 +79869,98 @@ export const langs: Langs = { "item.brown_egg.name": "Kahverengi Yumurta", "item.blue_egg.name": "Mavi Yumurta", "tile.short_dry_grass.name": "Kısa Kuru Çimen", - "tile.tall_dry_grass.name": "Uzun Kuru Çimen" + "tile.tall_dry_grass.name": "Uzun Kuru Çimen", + "entity.happy_ghast.name": "Mutlu Hortlak", + "item.spawn_egg.entity.happy_ghast.name": "Mutlu Hortlak Çağırma Yumurtası", + "tile.dried_ghast.name": "Kuru Hortlak", + "item.black_harness.name": "Siyah Koşum", + "item.blue_harness.name": "Mavi Koşum", + "item.brown_harness.name": "Kahverengi Koşum", + "item.cyan_harness.name": "Camgöbeği Koşum", + "item.gray_harness.name": "Gri Koşum", + "item.green_harness.name": "Yeşil Koşum", + "item.light_blue_harness.name": "Açık Mavi Koşum", + "item.light_gray_harness.name": "Açık Gri Koşum", + "item.lime_harness.name": "Açık Yeşil Koşum", + "item.magenta_harness.name": "Eflatun Koşum", + "item.orange_harness.name": "Turuncu Koşum", + "item.pink_harness.name": "Pembe Koşum", + "item.purple_harness.name": "Mor Koşum", + "item.red_harness.name": "Kırmızı Koşum", + "item.white_harness.name": "Beyaz Koşum", + "item.yellow_harness.name": "Sarı Koşum", + "entity.copper_golem.name": "Bakır Golem", + "item.spawn_egg.entity.copper_golem.name": "Bakır Golem Çağırma Yumurtası", + "item.copper_nugget.name": "Bakır Parçası", + "item.copper_sword.name": "Bakır Kılıç", + "item.copper_pickaxe.name": "Bakır Kazma", + "item.copper_axe.name": "Bakır Balta", + "item.copper_shovel.name": "Bakır Kürek", + "item.copper_hoe.name": "Bakır Çapa", + "item.copper_boots.name": "Bakır Çizme", + "item.copper_leggings.name": "Bakır Tozluk", + "item.copper_chestplate.name": "Bakır Göğüslük", + "item.copper_helmet.name": "Bakır Miğfer", + "tile.copper_chest.name": "Bakır Sandık", + "tile.exposed_copper_chest.name": "Çıplak Bakır Sandık", + "tile.weathered_copper_chest.name": "Yıpranmış Bakır Sandık", + "tile.oxidized_copper_chest.name": "Oksitlenmiş Bakır Sandık", + "tile.waxed_copper_chest.name": "Mumlu Bakır Sandık", + "tile.waxed_exposed_copper_chest.name": "Mumlu Çıplak Bakır Sandık", + "tile.waxed_weathered_copper_chest.name": "Mumlu Yıpranmış Bakır Sandık", + "tile.waxed_oxidized_copper_chest.name": "Mumlu Oksitlenmiş Bakır Sandık", + "tile.acacia_shelf.name": "Akasya Rafı", + "tile.bamboo_shelf.name": "Bambu Rafı", + "tile.birch_shelf.name": "Huş Ağacı Rafı", + "tile.cherry_shelf.name": "Kiraz Rafı", + "tile.crimson_shelf.name": "Kızıl Raf", + "tile.dark_oak_shelf.name": "Koyu Meşe Rafı", + "tile.jungle_shelf.name": "Büyük Orman Rafı", + "tile.mangrove_shelf.name": "Mangrov Rafı", + "tile.oak_shelf.name": "Meşe Rafı", + "tile.pale_oak_shelf.name": "Soluk Meşe Rafı", + "tile.spruce_shelf.name": "Ladin Raf", + "tile.warped_shelf.name": "Çarpık Raf", + "tile.copper_golem_statue.name": "Bakır Golem Heykeli", + "tile.exposed_copper_golem_statue.name": "Çıplak Bakır Golem Heykeli", + "tile.weathered_copper_golem_statue.name": "Yıpranmış Bakır Golem Heykeli", + "tile.oxidized_copper_golem_statue.name": "Oksitlenmiş Bakır Golem Heykeli", + "tile.waxed_copper_golem_statue.name": "Mumlu Bakır Golem Heykeli", + "tile.waxed_exposed_copper_golem_statue.name": "Mumlu Çıplak Bakır Golem Heykeli", + "tile.waxed_weathered_copper_golem_statue.name": "Mumlu Yıpranmış Bakır Golem Heykeli", + "tile.waxed_oxidized_copper_golem_statue.name": "Mumlu Oksitlenmiş Bakır Golem Heykeli", + "tile.copper_chain.name": "Bakır Zincir", + "tile.exposed_copper_chain.name": "Çıplak Bakır Zincir", + "tile.weathered_copper_chain.name": "Yıpranmış Bakır Zincir", + "tile.oxidized_copper_chain.name": "Oksitlenmiş Bakır Zincir", + "tile.waxed_copper_chain.name": "Mumlu Bakır Zincir", + "tile.waxed_exposed_copper_chain.name": "Mumlu Çıplak Bakır Zincir", + "tile.waxed_weathered_copper_chain.name": "Mumlu Yıpranmış Bakır Zincir", + "tile.waxed_oxidized_copper_chain.name": "Mumlu Oksitlenmiş Bakır Zincir", + "tile.copper_bars.name": "Bakır Parmaklık", + "tile.exposed_copper_bars.name": "Çıplak Bakır Parmaklık", + "tile.weathered_copper_bars.name": "Yıpranmış Bakır Parmaklık", + "tile.oxidized_copper_bars.name": "Oksitlenmiş Bakır Parmaklık", + "tile.waxed_copper_bars.name": "Mumlu Bakır Parmaklık", + "tile.waxed_exposed_copper_bars.name": "Mumlu Çıplak Bakır Parmaklık", + "tile.waxed_weathered_copper_bars.name": "Mumlu Yıpranmış Bakır Parmaklık", + "tile.waxed_oxidized_copper_bars.name": "Mumlu Oksitlenmiş Bakır Parmaklık", + "tile.copper_lantern.name": "Bakır Fener", + "tile.exposed_copper_lantern.name": "Çıplak Bakır Fener", + "tile.weathered_copper_lantern.name": "Yıpranmış Bakır Fener", + "tile.oxidized_copper_lantern.name": "Oksitlenmiş Bakır Fener", + "tile.waxed_copper_lantern.name": "Mumlu Bakır Fener", + "tile.waxed_exposed_copper_lantern.name": "Mumlu Çıplak Bakır Fener", + "tile.waxed_weathered_copper_lantern.name": "Mumlu Yıpranmış Bakır Fener", + "tile.waxed_oxidized_copper_lantern.name": "Mumlu Oksitlenmiş Bakır Fener", + "tile.copper_torch.name": "Bakır Meşale", + "tile.iron_chain.name": "Demir Zincir" }, "uk_UA": { "enchantment.arrowDamage": "Сила", "enchantment.arrowFire": "Полум’я", "enchantment.arrowInfinite": "Нескінченність", - "enchantment.arrowKnockback": "Відкидання", + "enchantment.arrowKnockback": "Поштовх", "enchantment.crossbowMultishot": "Залп", "enchantment.crossbowPiercing": "Бронебійність", "enchantment.crossbowQuickCharge": "Швидке перезаряджання", @@ -78927,11 +80150,11 @@ export const langs: Langs = { "item.axolotlColorCyan.name": "бірюзового", "item.axolotlColorGold.name": "золотистого", "item.axolotlColorWild.name": "коричневого", - "item.axolotlColorBlue.name": "синій", + "item.axolotlColorBlue.name": "Синій", "item.golden_apple.name": "Золоте яблуко", "item.appleEnchanted.name": "Зачароване золоте яблуко", "item.armadillo_scute.name": "Щиток броненосця", - "item.armor_stand.name": "Стійка для броні", + "item.armor_stand.name": "Стійка для обладунку", "item.arrow.name": "Стріла", "item.tipped_arrow.name": "Зачарована стріла", "item.banner.black.name": "Чорний стяг", @@ -79741,15 +80964,15 @@ export const langs: Langs = { "item.canBreak": "Може ламати:", "item.canPlace": "Можна покласти на:", "item.customProperties": "Має особливі властивості", - "item.itemLock.cantDrop": ":hollow_star: \"Не можна викидати предмети\" не може бути:", - "item.itemLock.cantMove": ":solid_star: \"Не можна переміщати предмети\" не може бути:", + "item.itemLock.cantDrop": ":hollow_star: «Не можна викидати предмети» не може бути:", + "item.itemLock.cantMove": ":solid_star: «Не можна переміщати предмети» не може бути:", "item.itemLock.hoverText.cantBe.moved": "переміщено", "item.itemLock.hoverText.cantBe.dropped": "викинуто", "item.itemLock.hoverText.cantBe.removed": "вилучено", "item.itemLock.hoverText.cantBe.craftedWith": "скрафчено з", "item.itemLock.keepOnDeath": "Цей предмет не втрачається при смерті", - "item.itemLock.popupNotice.cantDrop": ":hollow_star: \"Не можна викидати предмети\" не може бути: викинуто, вилучено, скрафчено з", - "item.itemLock.popupNotice.cantMove": ":solid_star: \"Не можна переміщати предмети\" не може бути: переміщено викинуто, вилучено, скрафчено з", + "item.itemLock.popupNotice.cantDrop": ":hollow_star: «Не можна викидати предмети» не може бути: викинуто, вилучено, скрафчено з", + "item.itemLock.popupNotice.cantMove": ":solid_star: «Не можна переміщати предмети» не може бути: переміщено викинуто, вилучено, скрафчено з", "item.golden_carrot.name": "Золота морква", "item.carrotOnAStick.name": "Морква на паличці", "item.warped_fungus_on_a_stick.name": "Химерний гриб на паличці", @@ -79831,7 +81054,7 @@ export const langs: Langs = { "item.fireworksCharge.black": "Чорний", "item.fireworksCharge.blue": "Синій", "item.fireworksCharge.brown": "Коричневий", - "item.fireworksCharge.customColor": "Особливий", + "item.fireworksCharge.customColor": "Користувацькі", "item.fireworksCharge.cyan": "Бірюзовий", "item.fireworksCharge.fadeTo": "Переходить у", "item.fireworksCharge.flicker": "Мерехтіння", @@ -79891,6 +81114,7 @@ export const langs: Langs = { "item.horsearmordiamond.name": "Алмазна кінська збруя", "item.horsearmorgold.name": "Золота кінська збруя", "item.horsearmoriron.name": "Залізна кінська збруя", + "item.copper_horse_armor.name": "Мідні кінські обладунки", "item.horsearmorleather.name": "Шкіряна кінська збруя", "item.gold_ingot.name": "Золотий злиток", "item.iron_ingot.name": "Залізний злиток", @@ -80074,6 +81298,8 @@ export const langs: Langs = { "item.record_creator.desc": "Лена Рейн – Авторка", "item.record_creator_music_box.desc": "Лена Рейн – Авторка (музична скринька)", "item.record_precipice.desc": "Аарон Чероф – Безодня", + "item.record_tears.desc": "Амос Родді – Сльози", + "item.record_lava_chicken.desc": "Гіперзілля – Лавове курча", "item.redstone.name": "Пил редстоуну", "item.reeds.name": "Цукрова тростина", "item.kelp.name": "Ламінарія", @@ -80121,9 +81347,9 @@ export const langs: Langs = { "item.wooden_sword.name": "Дерев’яний меч", "item.unbreakable": "Незнищенний", "item.waxed_copper_door.name": "Вощені мідні двері", - "item.waxed_exposed_copper_door.name": "Вощені відкриті мідні двері", + "item.waxed_exposed_copper_door.name": "Вощені трохи окислені мідні двері", "item.waxed_oxidized_copper_door.name": "Двері з вощеної окисненої міді", - "item.waxed_weathered_copper_door.name": "Вощені вивітрені мідні двері", + "item.waxed_weathered_copper_door.name": "Вощені напівокислені мідні двері", "item.weathered_copper_door.name": "Обвітрені мідні двері", "item.wind_charge.name": "Атака вітру", "item.wheat.name": "Пшениця", @@ -80509,12 +81735,12 @@ export const langs: Langs = { "trim_pattern.sentry.name": "Орнамент обладунків «Варта»", "trim_pattern.shaper.name": "Орнамент обладунків «Скульптор»", "trim_pattern.silence.name": "Орнамент обладунків «Тиша»", - "trim_pattern.snout.name": "Орнамент обладунків «Рильце»", + "trim_pattern.snout.name": "Орнамент обладунків «Рило»", "trim_pattern.spire.name": "Орнамент обладунків «Вежа»", - "trim_pattern.tide.name": "Орнамент обладунків «Приплив»", - "trim_pattern.vex.name": "Орнамент обладунків «Докучник»", + "trim_pattern.tide.name": "Орнамент обладунків «Хвилі»", + "trim_pattern.vex.name": "Орнамент обладунків «Бісик»", "trim_pattern.ward.name": "Орнамент обладунків «Боронитель»", - "trim_pattern.wayfinder.name": "Орнамент обладунків «Слідопит»", + "trim_pattern.wayfinder.name": "Орнамент обладунків «Шляхошукач»", "trim_pattern.wild.name": "Орнамент обладунків «Дикість»", "trim_pattern.bolt.name": "Оздоблення обладунків «‎Блискавка»‎", "trim_pattern.flow.name": "Оздоблення обладунків «‎Потік»‎", @@ -80693,7 +81919,7 @@ export const langs: Langs = { "tile.shulkerBoxGreen.name": "Зелений ящик шалкера", "tile.shulkerBoxRed.name": "Червоний ящик шалкера", "tile.shulkerBoxBlack.name": "Чорний ящик шалкера", - "tile.shulkerBox.name": "Коробка шалкера", + "tile.shulkerBox.name": "Ящик шалкера", "tile.chorus_flower.name": "Квітка хоруса", "tile.chorus_plant.name": "Хорус", "tile.stained_glass.white.name": "Біле скло", @@ -80872,7 +82098,14 @@ export const langs: Langs = { "tile.lever.name": "Важіль", "tile.glowstone.name": "Світлокамінь", "tile.glow_lichen.name": "Сяючий лишайник", - "tile.lightning_rod.name": "Громовідвід", + "tile.lightning_rod.name": "Блискавковідвід", + "tile.exposed_lightning_rod.name": "Трохи окислений блискавковідвід", + "tile.weathered_lightning_rod.name": "Напівокислений блискавковідвід", + "tile.oxidized_lightning_rod.name": "Окислений блискавковідвід", + "tile.waxed_lightning_rod.name": "Вощений блискавковідвід", + "tile.waxed_exposed_lightning_rod.name": "Вощений трохи окислений блискавковідвід", + "tile.waxed_weathered_lightning_rod.name": "Вощений напівокислений блискавковідвід", + "tile.waxed_oxidized_lightning_rod.name": "Вощений окислений блискавковідвід", "tile.lit_pumpkin.name": "Гарбузовий ліхтар", "tile.lockedchest.name": "Зачинена скриня", "tile.log.acacia.name": "Колода з акації", @@ -81294,7 +82527,7 @@ export const langs: Langs = { "tile.soul_lantern.name": "Ліхтар душ", "tile.smoker.name": "Коптильня", "tile.smithing_table.name": "Ковальський стіл", - "tile.barrel.name": "Діжка", + "tile.barrel.name": "Бочка", "tile.campfire.name": "Багаття", "tile.loom.name": "Ткацький верстат", "tile.lectern.name": "Аналой", @@ -81395,41 +82628,41 @@ export const langs: Langs = { "tile.exposed_chiseled_copper.name": "Відкрита точена мідь", "tile.oxidized_chiseled_copper.name": "Окислена точена мідь", "tile.waxed_chiseled_copper.name": "Вощена точена мідь", - "tile.waxed_exposed_chiseled_copper.name": "Вощена відкрита точена мідь", + "tile.waxed_exposed_chiseled_copper.name": "Вощена трохи окислена щербата мідь", "tile.waxed_oxidized_chiseled_copper.name": "Вощена окиснена точена мідь", - "tile.waxed_weathered_chiseled_copper.name": "Вощена вивітрена точена мідь", + "tile.waxed_weathered_chiseled_copper.name": "Вощена напівокислена щербата мідь", "tile.weathered_chiseled_copper.name": "Вивітрена точена мідь", "tile.copper_bulb.name": "Мідна лампочка", "tile.exposed_copper_bulb.name": "Відкрита мідна колба", "tile.oxidized_copper_bulb.name": "Окислена мідна колба", "tile.waxed_copper_bulb.name": "Вощена мідна колба", - "tile.waxed_exposed_copper_bulb.name": "Вощена відкрита мідна колба", + "tile.waxed_exposed_copper_bulb.name": "Вощена трохи окислена мідна колба", "tile.waxed_oxidized_copper_bulb.name": "Вощена окиснена мідна колба", - "tile.waxed_weathered_copper_bulb.name": "Вощена вивітрена мідна колба", + "tile.waxed_weathered_copper_bulb.name": "Вощена напівокислена мідна колба", "tile.weathered_copper_bulb.name": "Вивітрена мідна колба", "tile.copper_door.name": "Мідні двері", "tile.exposed_copper_door.name": "Відкриті мідні двері", "tile.oxidized_copper_door.name": "Окислені мідні двері", "tile.waxed_copper_door.name": "Вощені мідні двері", - "tile.waxed_exposed_copper_door.name": "Вощені відкриті мідні двері", + "tile.waxed_exposed_copper_door.name": "Вощені трохи окислені мідні двері", "tile.waxed_oxidized_copper_door.name": "Вощені окиснені мідні двері", - "tile.waxed_weathered_copper_door.name": "Вощені вивітрені мідні двері", + "tile.waxed_weathered_copper_door.name": "Вощені напівокислені мідні двері", "tile.weathered_copper_door.name": "Обвітрені мідні двері", "tile.copper_grate.name": "Мідна решітка", "tile.exposed_copper_grate.name": "Відкрита мідна решітка", "tile.oxidized_copper_grate.name": "Окислена мідна решітка", "tile.waxed_copper_grate.name": "Вощена мідна решітка", - "tile.waxed_exposed_copper_grate.name": "Вощена відкрита мідна решітка", + "tile.waxed_exposed_copper_grate.name": "Вощена трохи окислена мідна решітка", "tile.waxed_oxidized_copper_grate.name": "Вощена окиснена мідна решітка", - "tile.waxed_weathered_copper_grate.name": "Вощена вивітрена мідна решітка", + "tile.waxed_weathered_copper_grate.name": "Вощена напівокислена мідна решітка", "tile.weathered_copper_grate.name": "Вивітрена мідна решітка", "tile.copper_trapdoor.name": "Мідний люк", "tile.exposed_copper_trapdoor.name": "Відкритий мідний люк", "tile.oxidized_copper_trapdoor.name": "Люк з окисленої міді", "tile.waxed_copper_trapdoor.name": "Люк з вощеної міді", - "tile.waxed_exposed_copper_trapdoor.name": "Вощений відкритий мідний люк", + "tile.waxed_exposed_copper_trapdoor.name": "Вощений трохи окислений мідний люк", "tile.waxed_oxidized_copper_trapdoor.name": "Люк з вощеної окисненої міді", - "tile.waxed_weathered_copper_trapdoor.name": "Люк з вощеної вивітреної міді", + "tile.waxed_weathered_copper_trapdoor.name": "Люк з вощеної напівокисленої міді", "tile.weathered_copper_trapdoor.name": "Вивітрений мідний люк", "tile.raw_copper_block.name": "Блок необробленої міді", "tile.raw_iron_block.name": "Блок необробленого заліза", @@ -81488,6 +82721,91 @@ export const langs: Langs = { "item.brown_egg.name": "Коричневе яйце", "item.blue_egg.name": "Блакитне яйце", "tile.short_dry_grass.name": "Низька суха трава", - "tile.tall_dry_grass.name": "Висока суха трава" + "tile.tall_dry_grass.name": "Висока суха трава", + "entity.happy_ghast.name": "Щасливий ґаст", + "item.spawn_egg.entity.happy_ghast.name": "Яйце призову щасливого ґаста", + "tile.dried_ghast.name": "Висушений ґаст", + "item.black_harness.name": "Чорна упряж", + "item.blue_harness.name": "Синя упряж", + "item.brown_harness.name": "Коричнева упряж", + "item.cyan_harness.name": "Бірюзова упряж", + "item.gray_harness.name": "Сіра упряж", + "item.green_harness.name": "Зелена упряж", + "item.light_blue_harness.name": "Блакитна упряж", + "item.light_gray_harness.name": "Світло-сіра упряж", + "item.lime_harness.name": "Салатова упряж", + "item.magenta_harness.name": "Малинова упряж", + "item.orange_harness.name": "Помаранчева упряж", + "item.pink_harness.name": "Рожева упряж", + "item.purple_harness.name": "Фіолетова упряж", + "item.red_harness.name": "Червона упряж", + "item.white_harness.name": "Біла упряж", + "item.yellow_harness.name": "Жовта упряж", + "entity.copper_golem.name": "Мідний ґолем", + "item.spawn_egg.entity.copper_golem.name": "Яйце призову мідного ґолема", + "item.copper_nugget.name": "Мідний самородок", + "item.copper_sword.name": "Мідний меч", + "item.copper_pickaxe.name": "Мідне кайло", + "item.copper_axe.name": "Мідна сокира", + "item.copper_shovel.name": "Мідна лопата", + "item.copper_hoe.name": "Мідна мотика", + "item.copper_boots.name": "Мідні чоботи", + "item.copper_leggings.name": "Мідні наголінники", + "item.copper_chestplate.name": "Мідний нагрудник", + "item.copper_helmet.name": "Мідний шолом", + "tile.copper_chest.name": "Мідна скриня", + "tile.exposed_copper_chest.name": "Трохи окислена мідна скриня", + "tile.weathered_copper_chest.name": "Напівокислена мідна скриня", + "tile.oxidized_copper_chest.name": "Окиснена мідна скриня", + "tile.waxed_copper_chest.name": "Вощена мідна скриня", + "tile.waxed_exposed_copper_chest.name": "Вощена трохи окислена мідна скриня", + "tile.waxed_weathered_copper_chest.name": "Вощена напівокислена мідна скриня", + "tile.waxed_oxidized_copper_chest.name": "Вощена окиснена мідна скриня", + "tile.acacia_shelf.name": "Полиця з акації", + "tile.bamboo_shelf.name": "Бамбукова полиця", + "tile.birch_shelf.name": "Березова полиця", + "tile.cherry_shelf.name": "Вишнева полиця", + "tile.crimson_shelf.name": "Багряна полиця", + "tile.dark_oak_shelf.name": "Полиця з темного дуба", + "tile.jungle_shelf.name": "Полиця з тропічного дерева", + "tile.mangrove_shelf.name": "Мангрова полиця", + "tile.oak_shelf.name": "Дубова полиця", + "tile.pale_oak_shelf.name": "Полиця з блідого дуба", + "tile.spruce_shelf.name": "Полиця з хвойної деревини", + "tile.warped_shelf.name": "Химерна полиця", + "tile.copper_golem_statue.name": "Статуя мідного ґолема", + "tile.exposed_copper_golem_statue.name": "Статуя ґолема з трохи окисленої міді", + "tile.weathered_copper_golem_statue.name": "Статуя ґолема з напівокисленої міді", + "tile.oxidized_copper_golem_statue.name": "Статуя ґолема з окисненої міді", + "tile.waxed_copper_golem_statue.name": "Статуя ґолема з вощеної міді", + "tile.waxed_exposed_copper_golem_statue.name": "Статуя ґолема з вощеної трохи окисленої міді", + "tile.waxed_weathered_copper_golem_statue.name": "Статуя ґолема з вощеної напівокисленої міді", + "tile.waxed_oxidized_copper_golem_statue.name": "Статуя ґолема з вощеної окисненої міді", + "tile.copper_chain.name": "Мідний ланцюг", + "tile.exposed_copper_chain.name": "Трохи окислений мідний ланцюг", + "tile.weathered_copper_chain.name": "Напівокислений мідний ланцюг", + "tile.oxidized_copper_chain.name": "Окиснений мідний ланцюг", + "tile.waxed_copper_chain.name": "Вощений мідний ланцюг", + "tile.waxed_exposed_copper_chain.name": "Вощений трохи окислений мідний ланцюг", + "tile.waxed_weathered_copper_chain.name": "Вощений напівокислений мідний ланцюг", + "tile.waxed_oxidized_copper_chain.name": "Вощений окиснений мідний ланцюг", + "tile.copper_bars.name": "Мідні ґрати", + "tile.exposed_copper_bars.name": "Трохи окислені мідні ґрати", + "tile.weathered_copper_bars.name": "Напівокислені мідні ґрати", + "tile.oxidized_copper_bars.name": "Окиснені мідні ґрати", + "tile.waxed_copper_bars.name": "Вощені мідні ґрати", + "tile.waxed_exposed_copper_bars.name": "Вощені трохи окислені мідні ґрати", + "tile.waxed_weathered_copper_bars.name": "Вощені напівокислені мідні ґрати", + "tile.waxed_oxidized_copper_bars.name": "Вощені окиснені мідні ґрати", + "tile.copper_lantern.name": "Мідний ліхтар", + "tile.exposed_copper_lantern.name": "Трохи окислений мідний ліхтар", + "tile.weathered_copper_lantern.name": "Напівокислений мідний ліхтар", + "tile.oxidized_copper_lantern.name": "Окиснений мідний ліхтар", + "tile.waxed_copper_lantern.name": "Вощений мідний ліхтар", + "tile.waxed_exposed_copper_lantern.name": "Вощений трохи окислений мідний ліхтар", + "tile.waxed_weathered_copper_lantern.name": "Вощений напівокислений мідний ліхтар", + "tile.waxed_oxidized_copper_lantern.name": "Вощений окиснений мідний ліхтар", + "tile.copper_torch.name": "Мідний смолоскип", + "tile.iron_chain.name": "Залізний ланцюг" } } diff --git a/src/lib/assets/player-json.ts b/src/lib/assets/player-json.ts index 30998426..2ad7d55e 100644 --- a/src/lib/assets/player-json.ts +++ b/src/lib/assets/player-json.ts @@ -1,6 +1,6 @@ // prettier-ignore /* eslint-disable */ -// This file is autogenerated by tools/build.ts. +// This file is autogenerated by tools/build-scripts.ts. // Do not modify manually. export const playerJson = { diff --git a/src/lib/bds/api.ts b/src/lib/bds/api.ts index 364a08d7..0ea1113e 100644 --- a/src/lib/bds/api.ts +++ b/src/lib/bds/api.ts @@ -22,7 +22,7 @@ export async function request const stringifiedBody = body ? JSON.stringify(body) : '' const response = await http.request( - new HttpRequest(`http://localhost:${__SERVER_PORT__}/` + path) + new HttpRequest(`http://localhost:9797/` + path) .setMethod(HttpRequestMethod.Post) .addHeader('content-type', 'text/plain') .addHeader('content-length', stringifiedBody.length.toString()) diff --git a/src/lib/chat/chat.ts b/src/lib/chat/chat.ts new file mode 100644 index 00000000..1c36d886 --- /dev/null +++ b/src/lib/chat/chat.ts @@ -0,0 +1,137 @@ +import { ChatSendBeforeEvent, Player, system, world } from '@minecraft/server' +import { Cooldown } from 'lib/cooldown' +import { table } from 'lib/database/abstract' +import { i18n, noI18n } from 'lib/i18n/text' +import { Settings } from 'lib/settings' +import { onLoad } from 'lib/utils/load-ref' +import { msold } from 'lib/utils/ms-old' +import { Singleton } from 'lib/utils/singleton' + +export declare namespace Chat { + interface MuteInfo { + mutedUntil: number + reason?: string + } + + interface Context { + sender: Player + text: string + nearPlayers: Player[] + farPlayers: Player[] + } +} + +export abstract class Chat extends Singleton { + muteDb = table('chatMute') + + settings = Settings.world(...Settings.worldCommon, { + cooldown: { + name: 'Задержка чата (миллисекунды)', + description: '0 что бы отключить', + value: 0, + onChange: () => this.updateCooldown(), + }, + range: { + name: 'Радиус чата', + description: 'Радиус для скрытия сообщений дальних игроков', + value: 30, + }, + capsLimit: { + name: 'Макс больших букв в сообщении', + description: 'Не разрешает отправлять сообщения где слишком много капса', + value: 5, + }, + role: { + name: 'Роли в чате', + value: true, + }, + }) + + playerSettings = Settings.player(i18n`Чат\n§7Звуки и внешний вид чата`, 'chat', { + sound: { + name: i18n`Звук`, + description: i18n`Звука сообщений от игроков поблизости`, + value: true, + }, + }) + + private cooldown!: Cooldown + + private updateCooldown() { + this.cooldown = new Cooldown(this.settings.cooldown, true, {}) + } + + informAboutMute(player: Player, mute: Chat.MuteInfo): void { + const timeText = msold.remaining(mute.mutedUntil - Date.now()) + + return player.fail( + noI18n.error`Вы замьючены в чате на ${timeText.value} ${timeText.type} по причине: ${mute.reason}`, + ) + } + + registerChatListener() { + world.beforeEvents.chatSend.subscribe(this.chatListener) + } + + chatListener: (arg0: ChatSendBeforeEvent) => void + + constructor() { + super() + + onLoad(() => { + this.updateCooldown() + }) + + this.chatListener = event => { + event.cancel = true + system.delay(() => { + try { + const player = event.sender + + if (!this.cooldown.isExpired(event.sender)) { + console.log('Spam chat', player.name, event.message) + return + } + + const mute = this.muteDb.getImmutable(event.sender.id) + if (mute) { + if (mute.mutedUntil > Date.now()) { + console.log('Muted chat', player.name, event.message) + return this.informAboutMute(player, mute) + } + } + + const text = event.message.replace(/\\n/g, '\n').replace(/§./g, '').replace(/%/g, '%%').trim() + + const caps = text.split('').reduce((p, c) => (c !== c.toLowerCase() ? p + 1 : p), 0) + if (caps > this.settings.capsLimit) { + return event.sender.fail(noI18n.error`В сообщении слишком много капса (${caps}/${this.settings.capsLimit})`) + } + + const allPlayers = world.getAllPlayers() + + // Players that are near message sender + const nearPlayers = event.sender.dimension + .getPlayers({ + location: event.sender.location, + maxDistance: this.settings.range, + }) + .filter(e => e.id !== event.sender.id && e.dimension.id === event.sender.dimension.id) + + // Array with ranged players (include sender id) + const nearIds = nearPlayers.map(e => e.id) + nearIds.push(event.sender.id) + + // Outranged players + const farPlayers = allPlayers.filter(e => !nearIds.includes(e.id)) + + this.onMessage({ sender: event.sender, text, farPlayers, nearPlayers }) + } catch (error) { + console.error('Chat error handler', error) + } + }) + } + } + + protected abstract onMessage(ctx: Chat.Context): void +} diff --git a/src/lib/chat/mute.ts b/src/lib/chat/mute.ts new file mode 100644 index 00000000..2ac9ac0b --- /dev/null +++ b/src/lib/chat/mute.ts @@ -0,0 +1,97 @@ +import { Player } from '@minecraft/server' +import { CommandContext } from 'lib/command/context' +import { ArrayForm } from 'lib/form/array' +import { ModalForm } from 'lib/form/modal' +import { form } from 'lib/form/new' +import { selectPlayer } from 'lib/form/select-player' +import { getFullname } from 'lib/get-fullname' +import { ms, Time } from 'lib/utils/ms' +import { msold } from 'lib/utils/ms-old' +import { Chat } from './chat' + +function mute(type: Time, time: number, reason = 'за поведение', id: string, ctx: CommandContext) { + const actualTime = ms.from(type, time) + const muteInfo: Chat.MuteInfo = { mutedUntil: Date.now() + actualTime, reason } + Chat.getInstance().muteDb.set(id, muteInfo) + const player = Player.getById(id) + if (player) Chat.getInstance().informAboutMute(player, muteInfo) + + const timeText = msold.remaining(actualTime) + ctx.player.success( + `Игрок ${Player.nameOrUnknown(id)} был замьючен на ${timeText.value} ${timeText.type} по причине: ${reason}`, + ) +} + +function findOfflinePlayer(nameArg: string, ctx: CommandContext) { + for (const [id, data] of Player.database.entriesImmutable()) { + if (data.name === nameArg) return id + } + ctx.error(`Игрок ${nameArg} не найден`) +} + +new Command('mute') + .setDescription('Заглушить игрока в чате') + .setPermissions('helper') + .string('name', true) + .int('time', true) + .array('timeType', ['min', 'hour', 'day', 'sec'], true) + .string('reason', true) + .executes((ctx, nameArg, timeArg = 5, typeArg = 'min', reasonArg) => { + if (nameArg) { + if (typeof ms.converters[typeArg] === 'undefined') return ctx.error('Неизвестный тип времени') + const id = findOfflinePlayer(nameArg, ctx) + if (id) mute(typeArg, timeArg, reasonArg, id, ctx) + return + } + + selectPlayer(ctx.player, 'замутить').then(e => { + new ModalForm('Мут ' + e.name) + .addTextField('Время', 'введи', '5') + .addDropdownFromObject('Тип времени', { + min: 'Минуты', + hour: 'Часы', + }) + .addTextField('Причина', 'за поведение') + .show(ctx.player, (formctx, timeRaw, type, reason) => { + const time = parseInt(timeRaw) + if (isNaN(time)) return formctx.error(`${timeRaw} это не число`) + + mute(type, time, reason || undefined, e.id, ctx) + }) + }) + }) + +new Command('unmute') + .setDescription('Вернуть обратно') + .setPermissions('helper') + .string('name', true) + .executes((ctx, name) => { + if (name) { + const id = findOfflinePlayer(name, ctx) + if (id) { + if (!Chat.getInstance().muteDb.has(id)) return ctx.error('Не был замьючен') + + Chat.getInstance().muteDb.delete(id) + return ctx.reply('Размьючен') + } + return + } + + new ArrayForm('Муты', Chat.getInstance().muteDb.entries()) + .button(([id, info]) => { + if (!info) return false + const until = `До: ${new Date(info.mutedUntil).toYYYYMMDD()} ${new Date(info.mutedUntil).toHHMM()}` + return [ + `${getFullname(id)} ${until}\n${info.reason}`, + form((f, { self }) => { + f.title(getFullname(id)) + f.body(`Причина: ${info.mutedUntil}\n${until}`) + f.button('Размутить', () => { + Chat.getInstance().muteDb.delete(id) + self() + }) + }).show, + ] + }) + .show(ctx.player) + }) diff --git a/src/lib/clan/clan.ts b/src/lib/clan/clan.ts index 2a928e30..d14ebbf5 100644 --- a/src/lib/clan/clan.ts +++ b/src/lib/clan/clan.ts @@ -1,10 +1,42 @@ -import { Player, system, world } from '@minecraft/server' +import { Player, system } from '@minecraft/server' import { table } from 'lib/database/abstract' +import { I18nMessage } from 'lib/i18n/message' +import { i18n } from 'lib/i18n/text' +import { onLoad } from 'lib/utils/load-ref' import './command' -interface StoredClan { - members: string[] - owners: string[] +interface ClanTemporalMember { + until: number +} + +export enum ClanRole { + Member = 'member', + Helper = 'helper', + Owner = 'owner', +} + +const roleNames: Record = { + [ClanRole.Member]: i18n`Участник`, + [ClanRole.Helper]: i18n`Помошник`, + [ClanRole.Owner]: i18n`Владелец`, +} + +export interface ClanMember { + id: string + createdAt: number + updatedAt: number + role: ClanRole +} + +interface ClanJSON { + members2: ClanMember[] + + /** @deprecated Use {@link members2} instead */ + members?: string[] + /** @deprecated Use {@link members2} instead */ + owners?: string[] + + temporalMembers?: Record name: string shortname: string @@ -16,7 +48,11 @@ interface StoredClan { } export class Clan { - private static database = table('clan') + private static database = table('clan') + + static roleToString(role: ClanRole) { + return roleNames[role] + } static getPlayerClan(playerId: string) { for (const clan of this.instances.values()) { @@ -28,12 +64,15 @@ export class Clan { return this.instances.values() } + static get(id: string) { + return this.instances.get(id) + } + static create(player: Player, name: string, shortname: string) { while (this.database.has(name)) name += '-' this.database.set(name, { - members: [player.id], - owners: [player.id], + members2: [], name, shortname, @@ -45,7 +84,9 @@ export class Clan { }) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return new Clan(name, this.database.get(name)!) + const clan = new Clan(name, this.database.get(name)!) + clan.addMember(player.id, ClanRole.Owner) + return clan } static getInvites(playerId: string) { @@ -55,17 +96,33 @@ export class Clan { private static instances = new Map() static { - world.afterEvents.worldLoad.subscribe(() => + onLoad(() => system.run(() => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - for (const [id, db] of this.database.entries()) new Clan(id, db!) + for (const [id, db] of this.database.entries()) { + if (!db) continue + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + db.members2 ??= [] + + const clan = new Clan(id, db) + + // Migrate old format + if (db.owners?.length) { + for (const m of db.owners) clan.addMember(m, ClanRole.Owner) + delete db.owners + } + if (db.members?.length) { + for (const m of db.members) clan.addMember(m) + delete db.members + } + } }), ) } constructor( - private readonly id: string, - public readonly db: StoredClan, + public readonly id: string, + public readonly db: ClanJSON, ) { const clan = Clan.instances.get(this.id) if (clan) return clan @@ -91,41 +148,54 @@ export class Clan { } get members() { - return this.db.members as Readonly + return this.db.members2 as readonly ClanMember[] + } + + get membersIds() { + return this.db.members2.map(e => e.id) as readonly string[] } get owners() { - return this.db.owners as Readonly + return this.db.members2.filter(e => e.role === ClanRole.Owner).map(e => e.id) as readonly string[] } get joinRequests() { - return this.db.joinRequests as Readonly + return this.db.joinRequests as Readonly } get invites() { - return this.db.invites as Readonly + return this.db.invites as Readonly } isMember(playerId: string) { - return this.db.members.includes(playerId) + return !!this.getMember(playerId) } isOwner(playerId: string) { - return this.db.owners.includes(playerId) + return this.getMember(playerId)?.role === ClanRole.Owner + } + + isHelper(playerId: string) { + return this.getMember(playerId)?.role === ClanRole.Helper } isInvited(playerId: string) { return this.db.invites.includes(playerId) } - setRole(playerId: string, role: 'member' | 'owner') { - if (role === 'member') this.db.owners = this.db.owners.filter(e => e !== playerId) - if (role === 'owner') this.db.owners.push(playerId) + getMember(playerId: string) { + return this.db.members2.find(e => e.id === playerId) + } + + setMemberRole(playerId: string, role: ClanRole) { + const member = this.getMember(playerId) + + if (!member) return + member.role = role } remove(playerId: string) { - this.db.members = this.db.members.filter(e => e !== playerId) - this.db.owners = this.db.owners.filter(e => e !== playerId) + this.db.members2 = this.db.members2.filter(e => e.id !== playerId) } sendInvite(playerId: string) { @@ -151,16 +221,61 @@ export class Clan { this.db.invites = this.db.invites.filter(e => e !== id) } - add(id: string) { + addMember(id: string, role: ClanRole = ClanRole.Member) { + if (this.isMember(id)) return + for (const clan of Clan.getAll()) { clan.db.joinRequests = clan.db.joinRequests.filter(e => e !== id) clan.db.invites = clan.db.invites.filter(e => e !== id) } - this.db.members.push(id) + this.db.members2.push({ id, role, createdAt: Date.now(), updatedAt: Date.now() }) } delete() { Clan.database.delete(this.id) Clan.instances.delete(this.id) } + + addTemporalMember(id: string, until: number) { + this.db.temporalMembers ??= {} + this.db.temporalMembers[id] = { until } + } + + removeTemporalMember(id: string) { + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + if (this.db.temporalMembers) delete this.db.temporalMembers[id] + } + + isTemporalMemberValid(id: string, member?: ClanTemporalMember) { + if (!member) return false + + // 0 means forever + if (member.until === 0) return true + + if (Date.now() > member.until) { + this.removeTemporalMember(id) + return false + } + + return true + } + + get temporalMembers() { + if (!this.db.temporalMembers) return [] + + const members: { id: string; until: number }[] = [] + for (const [id, member] of Object.entries(this.db.temporalMembers)) { + if (this.isTemporalMemberValid(id, member)) members.push({ id, until: member.until }) + } + return members + } + + isTemporalMember(id: string): boolean { + return this.isTemporalMemberValid(id, this.db.temporalMembers?.[id]) + } + + getTemporalMember(id: string) { + const member = this.db.temporalMembers?.[id] + if (this.isTemporalMemberValid(id, member)) return member + } } diff --git a/src/lib/clan/create.ts b/src/lib/clan/create.ts new file mode 100644 index 00000000..71d73637 --- /dev/null +++ b/src/lib/clan/create.ts @@ -0,0 +1,127 @@ +import { Player } from '@minecraft/server' +import { Cooldown } from 'lib/cooldown' +import { registerResettableCooldown } from 'lib/cooldownreset' +import { ArrayForm } from 'lib/form/array' +import { MessageForm } from 'lib/form/message' +import { ModalForm } from 'lib/form/modal' +import { i18n } from 'lib/i18n/text' +import { Mail } from 'lib/mail' +import { onLoad } from 'lib/utils/load-ref' +import { ms } from 'lib/utils/ms' +import { Clan } from './clan' +import { clanInvites, clanMenu, inClanMenu } from './menu' + +export function selectOrCreateClanMenu(player: Player, back?: VoidFunction) { + new ArrayForm(i18n`Выбор клана`, [...Clan.getAll()].reverse()) + .description(i18n`Выберите клан, чтобы отправить заявку или создайте свой клан!`) + .addCustomButtonBeforeArray(form => { + const invitedTo = Clan.getInvites(player.id) + if (invitedTo.length) + form.button(i18n.accent`Приглашения`.badge(invitedTo.length).to(player.lang), () => { + new ArrayForm(i18n`Приглашения`, invitedTo) + .button(clan => [ + getClanButtonName(clan), + () => { + clan.addMember(player.id) + player.success(i18n`Вы приняли приглашение в клан '${clan.name}'`) + inClanMenu({ clan }).show(player) + }, + ]) + .back(() => selectOrCreateClanMenu(player, back)) + .show(player) + }) + form.button(i18n.accent`Создать свой клан`.to(player.lang), () => + promptClanNameShortname( + player, + i18n`Создать клан`, + (name, shortname) => { + const clan = Clan.create(player, name, shortname) + clanInvites(player, clan, () => clanMenu(player)[1]()) + }, + () => selectOrCreateClanMenu(player, back), + ), + ) + }) + .button(clan => [ + getClanButtonName(clan, clan.isInvited(player.id) ? i18n.disabled : i18n), + () => { + if (!clan.requestJoin(player)) { + return player.fail( + i18n.error`Вы уже отправили заявку в клан '${Clan.getPlayerClan(player.id)?.name ?? clan.name}'!`, + ) + } + + player.success(i18n`Заявка на вступление в клан '${clan.name}' отправлена!`) + Mail.sendMultiple( + clan.owners, + i18n.nocolor`Запрос на вступление в клан от '${player.name}'`, + i18n`Игрок хочет вступить в ваш клан, вы можете принять или отклонить его через меню кланов`, + ) + }, + ]) + .back(back) + .show(player) +} +export function getClanButtonName(clan: Clan, style: Text.Fn = i18n): Text { + return style`[${clan.shortname}] ${clan.name}\nУчастники: ${clan.members.length} ${clan.owners.map(id => Player.nameOrUnknown(id)).join(', ')}` +} + +const cooldown = onLoad(() => { + const cd = new Cooldown(ms.from('day', 1), true, Cooldown.defaultDb.get('clan')) + registerResettableCooldown('Создание/изменение названия клана', cd) + return cd +}) + +export function promptClanNameShortname( + player: Player, + title: Text, + onDone: (name: string, shortname: string) => void, + back: VoidFunction, + clan?: Clan, + defaultName?: string, + defaultShortname?: string, +) { + if (!cooldown.value.isExpired(player, false)) return + new ModalForm(title.to(player.lang)) + .addTextField( + i18n`Название клана`.to(player.lang), + i18n`Ну, давай, придумай чета оригинальное`.to(player.lang), + defaultName, + ) + .addTextField( + i18n`Тэг клана`.to(player.lang), + i18n`Чтобы блатными в чате выглядеть`.to(player.lang), + defaultShortname, + ) + .show(player, (_, name, shortname) => { + name = name.trim() + shortname = shortname.trim() + + function err(reason: Text) { + return new MessageForm(i18n`Ошибка`.to(player.lang), reason.to(player.lang)) + .setButton1(i18n`Щас исправлю`.to(player.lang), () => + promptClanNameShortname(player, title, onDone, back, clan, name, shortname), + ) + .setButton2(i18n`Та ну не надоело`.to(player.lang), back) + .show(player) + } + + if (name.includes('§')) return err(i18n`Имя '${name}' не может содержать параграф`) + if (shortname.includes('§')) return err(i18n`Короткое имя '${shortname}' не может содержать параграф`) + if (shortname.length > 5) return err(i18n`Короткое имя '${shortname}' должно быть КОРОТКИМ, меньше 5 символов`) + if (shortname.length < 2) + return err( + i18n.error`Короткое имя '${shortname}' не может быть СЛИШКОМ коротким, минимум 2 символа. А то как понять че это за клан '${shortname}'`, + ) + + for (const c of Clan.getAll()) { + if (c === clan) continue + if (c.name === name) return err(i18n.error`Клан с именем '${name}' уже существует.`) + if (c.shortname === shortname) return err(i18n.error`Короткое имя '${shortname}' уже занято.`) + } + + if (!cooldown.value.isExpired(player)) return + + onDone(name, shortname) + }) +} diff --git a/src/lib/clan/menu.ts b/src/lib/clan/menu.ts index d0415f50..37cf14b7 100644 --- a/src/lib/clan/menu.ts +++ b/src/lib/clan/menu.ts @@ -1,24 +1,16 @@ -import { Player, world } from '@minecraft/server' -import { Cooldown } from 'lib/cooldown' +import { Player } from '@minecraft/server' import { ArrayForm } from 'lib/form/array' -import { MessageForm, ask } from 'lib/form/message' +import { ask, MessageForm } from 'lib/form/message' import { ModalForm } from 'lib/form/modal' -import { form } from 'lib/form/new' +import { form, FormContext, NewFormCreator } from 'lib/form/new' import { selectPlayer } from 'lib/form/select-player' import { BUTTON } from 'lib/form/utils' import { getFullname } from 'lib/get-fullname' import { i18n, textTable } from 'lib/i18n/text' import { Mail } from 'lib/mail' -import { ms } from 'lib/utils/ms' -// import { registerResettableCooldown } from 'modules/commands/cooldownreset' -import { Clan } from './clan' - -let cd: Cooldown - -world.afterEvents.worldLoad.subscribe(() => { - cd = new Cooldown(ms.from('day', 1), true, Cooldown.defaultDb.get('clan')) - // registerResettableCooldown('Изменение/создание клана', cd) -}) +import { is } from 'lib/roles' +import { Clan, ClanMember, ClanRole } from './clan' +import { getClanButtonName, promptClanNameShortname, selectOrCreateClanMenu } from './create' export function clanMenu(player: Player, back?: VoidFunction) { const clan = Clan.getPlayerClan(player.id) @@ -34,114 +26,24 @@ export function clanMenu(player: Player, back?: VoidFunction) { } } -function selectOrCreateClanMenu(player: Player, back?: VoidFunction) { - new ArrayForm(i18n`Выбор клана`, [...Clan.getAll()].reverse()) - .description(i18n`Выберите клан, чтобы отправить заявку или создайте свой клан!`) - .addCustomButtonBeforeArray(form => { - const invitedTo = Clan.getInvites(player.id) - if (invitedTo.length) - form.button(i18n.accent`Приглашения`.badge(invitedTo.length).to(player.lang), () => { - new ArrayForm(i18n`Приглашения`, invitedTo) - .button(clan => [ - getClanName(clan), - () => { - clan.add(player.id) - player.success(i18n`Вы приняли приглашение в клан '${clan.name}'`) - inClanMenu({ clan }).show(player) - }, - ]) - .back(() => selectOrCreateClanMenu(player, back)) - .show(player) - }) - form.button(i18n.accent`Создать свой клан`.to(player.lang), () => - promptClanNameShortname( - player, - i18n`Создать клан`, - (name, shortname) => { - const clan = Clan.create(player, name, shortname) - clanInvites(player, clan, () => clanMenu(player)[1]()) - }, - () => selectOrCreateClanMenu(player, back), - ), - ) - }) - .button(clan => [ - getClanName(clan, clan.isInvited(player.id) ? i18n.disabled : i18n), - () => { - if (!clan.requestJoin(player)) return - player.fail(i18n.error`Вы уже отправили заявку в клан '${Clan.getPlayerClan(player.id)?.name ?? clan.name}'!`) - - Mail.sendMultiple( - clan.owners, - i18n.nocolor`Запрос на вступление в клан от '${player.name}'`, - i18n`Игрок хочет вступить в ваш клан, вы можете принять или отклонить его через меню кланов`, - ) - player.success(i18n`Заявка на вступление в клан '${clan.name}' отправлена!`) - }, - ]) - .back(back) - .show(player) - - function getClanName(clan: Clan, style: Text.Fn = i18n): Text { - return style`[${clan.shortname}] ${clan.name}\nУчастники: ${clan.members.length}` - } +interface ClanButtonContext { + f: NewFormCreator + clan: Clan + formContext: FormContext<{ clan: Clan }> + isOwner: boolean + isHelper: boolean } - -function promptClanNameShortname( - player: Player, - title: Text, - onDone: (name: string, shortname: string) => void, - back: VoidFunction, - clan?: Clan, - defaultName?: string, - defaultShortname?: string, -) { - if (!cd.isExpired(player, false)) return - new ModalForm(title.to(player.lang)) - .addTextField( - i18n`Имя клана`.to(player.lang), - i18n`Ну, давай, придумай чета оригинальное`.to(player.lang), - defaultName, - ) - .addTextField( - i18n`Краткое имя клана`.to(player.lang), - i18n`Чтобы блатными в чате выглядеть`.to(player.lang), - defaultShortname, - ) - .show(player, (_, name, shortname) => { - name = name.trim() - shortname = shortname.trim() - - function err(reason: Text) { - return new MessageForm(i18n`Ошибка`.to(player.lang), reason.to(player.lang)) - .setButton1(i18n`Щас исправлю`.to(player.lang), () => - promptClanNameShortname(player, title, onDone, back, clan, name, shortname), - ) - .setButton2(i18n`Та ну не надоело`.to(player.lang), back) - .show(player) - } - - if (name.includes('§')) return err(i18n`Имя '${name}' не может содержать параграф`) - if (shortname.includes('§')) return err(i18n`Короткое имя '${shortname}' не может содержать параграф`) - if (shortname.length > 5) return err(i18n`Короткое имя '${shortname}' должно быть КОРОТКИМ, меньше 5 символов`) - if (shortname.length < 2) - return err( - i18n.error`Короткое имя '${shortname}' не может быть СЛИШКОМ коротким, минимум 2 символа. А то как понять че это за клан '${shortname}'`, - ) - - for (const c of Clan.getAll()) { - if (c === clan) continue - if (c.name === name) return err(i18n.error`Клан с именем '${name}' уже существует.`) - if (c.shortname === shortname) return err(i18n.error`Короткое имя '${shortname}' уже занято.`) - } - - if (!cd.isExpired(player)) return - - onDone(name, shortname) - }) +const clanAdditionalButtons: ((ctx: ClanButtonContext) => void)[] = [] +export function registerClanMenuButton(register: (ctx: ClanButtonContext) => void) { + clanAdditionalButtons.push(register) } -const inClanMenu = form.params<{ clan: Clan }>((f, { self, player, params: { clan } }) => { +export const inClanMenu = form.params<{ clan: Clan }>((f, formContext) => { + const { + self, + player, + params: { clan }, + } = formContext f.title(i18n`Меню клана`) f.body( textTable([ @@ -151,14 +53,20 @@ const inClanMenu = form.params<{ clan: Clan }>((f, { self, player, params: { cla ) const isOwner = clan.isOwner(player.id) + const isHelper = clan.isHelper(player.id) f.button(i18n`Участники`.size(clan.members.length), () => clanMembers(player, clan, self)) - if (isOwner) { + if (isOwner || isHelper) { f.button(i18n`Заявки на вступление`.badge(clan.joinRequests.length), () => clanJoinRequests(player, clan, self)) - f.button(i18n`Приглашения`.badge(clan.invites.length), () => clanInvites(player, clan, self)) - f.button(i18n`Изменить имя/короткое имя`, () => + } + + const context: ClanButtonContext = { clan, f, formContext, isHelper, isOwner } + for (const button of clanAdditionalButtons) button(context) + + if (isOwner) { + f.button(i18n`Изменить название или тэг клана`, () => promptClanNameShortname( player, i18n`Изменить`, @@ -175,7 +83,7 @@ const inClanMenu = form.params<{ clan: Clan }>((f, { self, player, params: { cla ) f.ask(i18n.error`Удалить клан`, i18n.error`Удалить`, () => { Mail.sendMultiple( - clan.members, + clan.membersIds, i18n.nocolor`Клан '${clan.name}' распущен`, i18n`К сожалению, клан был распущен. Хз че создателю не понравилось, найдите клан получше или создайте новый, печалиться смысла нет. Ну базы еще можете залутать, врятли создатель успел вас удалить из всех клановых баз.`, ) @@ -193,20 +101,30 @@ const inClanMenu = form.params<{ clan: Clan }>((f, { self, player, params: { cla new ArrayForm('Кланы', [...Clan.getAll()].reverse()) .button((clan, _, __) => { return [ - i18n.join`[${clan.shortname}] ${clan.name}`.size(clan.members.length).to(player.lang), + getClanButtonName(clan), form((f, { self }) => { f.title(clan.name) f.body(`Короткое имя: ${clan.shortname}`) for (const o of clan.members) { - f.button(getFullname(o), self) + f.button(i18n`${getFullname(o.id)}\n${Clan.roleToString(o.role)}`, self) } }).show, ] }) .show(player) }) + + if (is(player.id, 'techAdmin')) { + f.button(i18n`Админ: добавить игрока`, () => + selectPlayer(player, 'добавить в клан', self).then(e => { + clan.addMember(e.id) + player.success() + }), + ) + } }) + function clanJoinRequests(player: Player, clan: Clan, back?: VoidFunction) { const self = () => { clanJoinRequests(player, clan, back) @@ -221,8 +139,7 @@ function clanJoinRequests(player: Player, clan: Clan, back?: VoidFunction) { .setButton1(i18n`Принять!`.to(player.lang), () => { const message = i18n.nocolor`Вы приняты в клан ${clan.name}` Mail.send(id, message, i18n`Откройте меню клана с помощью /clan`) - - clan.add(id) + clan.addMember(id) self() }) .setButton2(i18n`Нет, не заслужил`.to(player.lang), () => { @@ -236,7 +153,7 @@ function clanJoinRequests(player: Player, clan: Clan, back?: VoidFunction) { .back(back) .show(player) } -function clanInvites(player: Player, clan: Clan, back?: VoidFunction) { +export function clanInvites(player: Player, clan: Clan, back?: VoidFunction) { new ArrayForm(i18n`Приглашения в клан '${clan.name}'`, clan.invites) .addCustomButtonBeforeArray(form => form.button(i18n.accent`Новое приглашение`.to(player.lang), BUTTON['+'], () => @@ -271,53 +188,94 @@ function inviteToClan(player: Player, clan: Clan, back?: VoidFunction) { back?.() }) } - function clanMembers(player: Player, clan: Clan, back?: VoidFunction) { const self = () => clanMembers(player, clan, back) new ArrayForm(i18n`Участники клана`, clan.members) .back(back) - .button(id => { - const memberName = getFullname(id) - return [memberName, () => clanMember({ clan, member: id, memberName }).show(player, self)] + .button(member => { + const memberName = i18n`${getFullname(member.id)}\n${Clan.roleToString(member.role)}` + return [memberName, () => clanMember({ clan, member, memberName }).show(player, self)] }) .show(player) } -const clanMember = form.params<{ clan: Clan; member: string; memberName: string }>( + +const clanMember = form.params<{ clan: Clan; member: ClanMember; memberName: Text }>( (f, { player, self, params: { clan, member, memberName } }) => { f.title(i18n`Участник`) + f.body(memberName) const isOwner = clan.isOwner(player.id) - const isMemberOwner = clan.isOwner(member) + const isHelper = clan.isHelper(player.id) + const isSelf = member.id === player.id - if (isOwner) { - f.button(isMemberOwner ? i18n`Понизить до участника` : i18n`Повысить до владельца`, () => { - clan.setRole(member, isMemberOwner ? 'member' : 'owner') - player.success(i18n`Роль участника клана ${memberName} сменена успешно.`) - Mail.send( - member, - isMemberOwner ? i18n.nocolor`Вы были понижены до участника` : i18n.nocolor`Вы были повышены до владельца`, - i18n`В клане '${clan.name}'`, - ) - self() - }).button(i18n.error`Выгнать`, () => { - new ModalForm(i18n`Выгнать участника '${memberName}'`.to(player.lang)) - .addTextField( - i18n`Причина`.to(player.lang), - i18n`Ничего не произойдет, если вы не укажете причину`.to(player.lang), - ) - .show(player, (_, reason) => { - if (reason) { - clan.remove(member) + if (isSelf) { + if (isOwner) { + const otherOwners = clan.owners.length > 1 + f.ask((otherOwners ? i18n.error : i18n.disabled)`Отказаться от владения`, i18n`Да`, () => { + if (!otherOwners) + return player.fail( + i18n.error`Вы не можете отказаться от владения клана являясь единственным его владельцем`, + ) + clan.setMemberRole(player.id, ClanRole.Member) + }) + + f.button((otherOwners ? i18n.error : i18n.disabled)`Покинуть клан`, () => { + if (!otherOwners) + return player.fail(i18n.error`Вы единственный владелец. Кнопка удаления клана находится в меню клана снизу`) + clan.remove(player.id) + }) + } + } else { + if (isOwner) { + const prevRole = Clan.roleToString(member.role) + f.button( + i18n`Сменить роль`, + roleSelect({ + member, + onSelect(role) { + clan.setMemberRole(member.id, role) + + const changeString = i18n`${prevRole} -> ${Clan.roleToString(role)}` + player.success(i18n`Роль участника клана ${memberName} сменена успешно: ${changeString}.`) Mail.send( - member, - i18n.nocolor`Вы выгнаны из клана '${clan.name}'`, - i18n`Вы были выгнаны из клана игроком '${player.name}'. Причина: ${reason}`, + member.id, + i18n.nocolor`Роль в клане ${changeString}`, + i18n`В клане '${clan.name}', сменена игроком ${getFullname(player)}`, ) - player.success(i18n`Участник ${memberName} успешно выгнан из клана ${clan.name}`) - } else player.info(i18n`Причина не была указана, участник остался в клане`) - self() - }) - }) + self() + }, + }), + ) + } + if (member.role === ClanRole.Owner ? isOwner : isOwner || isHelper) { + f.button(i18n.error`Выгнать`, () => { + new ModalForm(i18n`Выгнать участника '${memberName}'`.to(player.lang)) + .addTextField(i18n`Причина`.to(player.lang), i18n`Причина обязательна`.to(player.lang)) + .show(player, (_, reason) => { + if (reason) { + clan.remove(member.id) + Mail.send( + member.id, + i18n.nocolor`Вы выгнаны из клана '${clan.name}'`, + i18n`Вы были выгнаны из клана игроком '${player.name}'. Причина: ${reason}`, + ) + player.success(i18n`Участник ${memberName} успешно выгнан из клана ${clan.name}`) + } else player.fail(i18n`Причина не была указана, участник остался в клане`) + self() + }) + }) + } + } + }, +) + +const roleSelect = form.params<{ member: ClanMember; onSelect: (role: ClanRole) => void }>( + (f, { params: { member, onSelect } }) => { + f.title(i18n`Сменить роль ${Player.nameOrUnknown(member.id)}`) + + for (const role of Object.values(ClanRole)) { + const color = member.role === role ? i18n.accent : i18n + f.button(color`${Clan.roleToString(role)}`, onSelect.bind(undefined, role)) } }, ) diff --git a/src/lib/command/argument-types.ts b/src/lib/command/argument-types.ts index 05ac66e5..92dadc08 100644 --- a/src/lib/command/argument-types.ts +++ b/src/lib/command/argument-types.ts @@ -1,3 +1,5 @@ +import { CustomCommandParamType, CustomCommandRegistry } from '@minecraft/server' + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters export abstract class IArgumentType { /** The return type */ @@ -20,6 +22,12 @@ export abstract class IArgumentType { */ abstract typeName: string + abstract ctype: CustomCommandParamType + + register(ctx: CustomCommandRegistry, namespace: string) { + return true + } + /** The name this argument is */ abstract name: string @@ -46,6 +54,8 @@ export class LiteralArgumentType extends IArgumentTyp super() } + ctype: CustomCommandParamType = CustomCommandParamType.String + type = null typeName = 'literal' @@ -69,6 +79,8 @@ export class StringArgumentType extends IArgumentType super() } + ctype = CustomCommandParamType.String + type = 'string' typeName = '§3string' @@ -89,6 +101,8 @@ export class IntegerArgumentType extends IArgumentTyp super() } + ctype: CustomCommandParamType = CustomCommandParamType.Integer + type = 1 typeName = 'int' @@ -110,6 +124,8 @@ export class LocationArgumentType extends IArgumentTy super() } + ctype: CustomCommandParamType = CustomCommandParamType.Location + type = { x: 0, y: 0, z: 0 } as Vector3 typeName = 'location' @@ -132,6 +148,8 @@ export class BooleanArgumentType extends IArgumentTyp super() } + ctype: CustomCommandParamType = CustomCommandParamType.Boolean + type = false as boolean typeName = 'boolean' @@ -154,6 +172,14 @@ export class ArrayArgumentType { + const avaibleCommands = Command.commands.filter(e => e.sys.requires(ctx.player)) + const cmds = Math.max(1, commandsOnPage ?? 15) + const maxPages = Math.ceil(avaibleCommands.length / cmds) + const page = Math.min(Math.max(inputPage ?? 1, 1), maxPages) + const path = avaibleCommands.slice(page * cmds - cmds, page * cmds) + + const cv = colors[getRole(ctx.player.id)] + + ctx.reply(noI18n.nocolor`${cv}─═─═─═─═─═ §r${page}/${maxPages} ${cv}═─═─═─═─═─═─`) + + for (const command of path) { + const q = '§f.' + + const c = i18n.nocolor`${cv}§r ${q}${command.sys.name} §o§7- ${ + command.sys.description ? command.sys.description.to(ctx.player.lang) : i18n`Пусто` //§r + }`.to(ctx.player.lang) + + ctx.reply(c) + } + ctx.reply(i18n.nocolor`${cv}─═─═─═§f Доступно: ${avaibleCommands.length}/${Command.commands.length} ${cv}═─═─═─═─`) + }) + +function helpForCommand(player: Player, commandName: string) { + const cmd = Command.commands.find(e => e.sys.name == commandName || e.sys.aliases.includes(commandName)) + + if (!cmd) return commandNotFound(player, commandName) + + if (!cmd.sys.requires(player)) return commandNoPermissions(player, cmd) + + const d = cmd.sys + const aliases = d.aliases.length > 0 ? i18n` (также ${d.aliases.join(', ')})` : '' + const overview = i18n.nocolor` §fКоманда §6.${d.name}${aliases}§7§o - ${d.description}` + + player.tell(' ') + player.tell(overview) + player.tell(' ') + + let child = false + for (const subcommand of Command.getHelp(player.lang, cmd)) { + child = true + player.tell(`§7 §f.${subcommand}`) + } + if (child) player.tell(' ') + return +} + +Command.getHelpForCommand = (command, ctx) => helpForCommand(ctx.player, command.sys.name) +help.string('commandName').executes((ctx, command) => helpForCommand(ctx.player, command)) + +new CmdLet('help').setDescription(i18n`Выводит справку о команде`).executes(ctx => { + helpForCommand(ctx.player, ctx.command.sys.name) + return 'stop' +}) + +const colors: Record = Object.fromEntries( + Object.entriesStringKeys(ROLES).map(([role, display]) => [role, display.to(defaultLang).slice(0, 2)]), +) diff --git a/src/lib/command/index.spec.ts b/src/lib/command/index.spec.ts deleted file mode 100644 index 74178799..00000000 --- a/src/lib/command/index.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { CommandContext } from 'lib/command/context' -import { gamesuite, gametest } from 'test/framework' -import './index' - -const success = 'success' -const addsSuccessTag = (ctx: CommandContext) => ctx.player.isValid && ctx.player.addTag(success) - -const command = new Command('cmd').setPermissions('everybody').executes(addsSuccessTag) - -gamesuite('lib.command', () => { - gametest('inputs', async test => { - const player = test.spawnSimulatedPlayer({ x: 0, y: 0, z: 0 }) - - player.chat('.cmd') - test.succeedWhen(() => test.assert(player.hasTag(success), 'command was not executed')) - }) - - gametest('overloads', async test => { - const player = test.player() - - command.overload('overload').executes(addsSuccessTag) - player.chat('.cmd overload') - test.succeedWhen(() => test.assert(player.hasTag(success), 'command was not executed')) - }) - - gametest('alias', async test => { - const player = test.player() - - command.setAliases('alias1', 'alias2') - player.chat('.alias1') - test.succeedWhen(() => test.assert(player.hasTag(success), 'command was not executed')) - }) - - gametest('permission', async test => { - const player = test.player() - - new Command('cmdw').setPermissions(() => false).executes(addsSuccessTag) - player.chat('.cmdw') - test.succeedWhen(() => test.assert(!player.hasTag(success), 'command was executed even with wrong permissions')) - }) -}) diff --git a/src/lib/command/index.ts b/src/lib/command/index.ts index fcbf235c..59ef4a5f 100644 --- a/src/lib/command/index.ts +++ b/src/lib/command/index.ts @@ -1,11 +1,24 @@ /* eslint-disable @typescript-eslint/unified-signatures */ -import { ChatSendAfterEvent, Player, system, world } from '@minecraft/server' -import { defaultLang, Language } from 'lib/assets/lang' +import { + ChatSendAfterEvent, + ChatSendBeforeEvent, + CommandPermissionLevel, + CustomCommandOrigin, + CustomCommandParameter, + CustomCommandStatus, + Player, + PlayerPermissionLevel, + system, + world, +} from '@minecraft/server' +import { consoleLang, defaultLang, Language } from 'lib/assets/lang' +import { Message } from 'lib/i18n/message' import { i18n, noI18n } from 'lib/i18n/text' -import { stringifyError } from 'lib/util' +import { stringifyError, util } from 'lib/util' import { stringifySymbol } from 'lib/utils/inspect' import { createLogger } from 'lib/utils/logger' -import { is } from '../roles' +import { Vec } from 'lib/vector' +import { getRole, is, ROLES } from '../roles' import { ArrayArgumentType, BooleanArgumentType, @@ -31,6 +44,8 @@ type ArgReturn = Command< type CommandCallback = (ctx: CommandContext, ...args: any[]) => void export class Command void> { + static loaded = false + static prefixes = ['.', '-'] static isCommand(message: string) { @@ -43,14 +58,14 @@ export class Command static logger = createLogger('Command') - static chatListener(event: ChatSendAfterEvent) { + private static chatListener(event: ChatSendAfterEvent) { if (!this.isCommand(event.message)) return this.chatSendListener(event) const parsed = parseCommand(event.message, 1) if (!parsed) { this.logger.player(event.sender).error`Unable to parse: ${event.message}` return event.sender.fail(noI18n`Failed to parse command`) - } else this.logger.player(event.sender).info`Command ${event.message}` + } else if (event.sender.name !== 'server') this.logger.player(event.sender).info`Command ${event.message}` const { cmd, args, input } = parsed @@ -72,8 +87,8 @@ export class Command v => v.sys.type.matches(args[i]!).success || (!args[i] && v.sys.type.optional), ) if (!child && !args[i] && start.sys.callback) return 'success' - if (!child) return commandSyntaxFail(event.sender, command, args, i), 'fail' - if (!child.sys.requires(event.sender)) return commandNoPermissions(event.sender, child), 'fail' + if (!child) return (commandSyntaxFail(event.sender, command, args, i), 'fail') + if (!child.sys.requires(event.sender)) return (commandNoPermissions(event.sender, child), 'fail') childs.push(child) return getChilds(child, i + 1) } @@ -85,6 +100,21 @@ export class Command sendCallback(args, childs, event, command, input) } + // TODO Better registration, global event etc + static registerChatListener(chat: (arg0: ChatSendBeforeEvent) => void) { + this.chatSendListener = chat + world.beforeEvents.chatSend.subscribe(event => { + event.cancel = true + system.delay(() => { + Command.chatListener(event) + }) + }) + } + + static register(namespace: string) { + register(namespace) + } + /** An array of all active commands */ static commands: Command[] = [] @@ -93,7 +123,7 @@ export class Command } [stringifySymbol]() { - return `§f${Command.prefixes[0]}${this.getFullName()}` + return `§f/${this.getFullName()}` } private getFullName(name = ''): string { @@ -106,7 +136,7 @@ export class Command for (const command of this.commands) { if (!command.sys.parent && command.sys.name === name) { Command.logger - .warn`Duplicate command name: ${name} at\n${stringifyError.stack.get(2)}${command.stack ? i18n.warn`And:\n${command.stack}` : ''}` + .warn`Duplicate command name: ${name} at\n${stringifyError.stack.get(0)}${command.stack ? i18n.warn`And:\n${command.stack}` : ''}` return } } @@ -115,6 +145,7 @@ export class Command private stack: string sys = { + admin: false, /** * The name of the command * @@ -140,14 +171,16 @@ export class Command * @param player This will return the player that uses this command * @returns If this player has permission to use this command */ - requires: (player: Player) => is(player.id, 'admin'), + requires: ((player: Player) => is(player.id, 'admin')) as ((player: Player) => boolean) & { + onFail?: PlayerCallback + }, /** * Minimal role required to run this command. * * This is an alias to `requires: (p) => is(player, role)` */ - role: 'admin' as Role, + role: 'admin' as Role | undefined, /** * Other names that can call this command * @@ -184,8 +217,12 @@ export class Command * @param {string} name - Name of the new command */ constructor(name: string, type?: IArgumentType, depth = 0, parent: Command | null = null) { - this.stack = stringifyError.stack.get(2) - if (!parent && !__VITEST__) Command.checkIsUnique(name) + this.stack = stringifyError.stack.get(0) + if (!parent && !__TEST__) Command.checkIsUnique(name) + + if (Command.loaded) { + Command.logger.warn('Commands are already loaded, tried registering ', name, new Error().stack) + } this.sys.name = name @@ -237,7 +274,7 @@ export class Command * @example * "admin" */ - setPermissions(arg?: Role | ((player: Player) => boolean) | 'everybody'): this + setPermissions(arg?: Role | (((player: Player) => boolean) & { onFail?: PlayerCallback }) | 'everybody'): this /** * Sets minimal role that allows player to execute the command. Default allowed role is admin. @@ -270,11 +307,16 @@ export class Command if (arg === 'everybody') { // Everybody this.sys.requires = () => true + this.sys.role = 'member' + this.sys.admin = false } else if (typeof arg === 'function') { // Custom permissions function this.sys.requires = arg + this.sys.admin = false + delete this.sys.role } else { // Role + this.sys.admin = arg === 'creator' || arg === 'techAdmin' this.sys.role = arg this.sys.requires = p => is(p.id, arg) } @@ -420,9 +462,181 @@ declare global { globalThis.Command = Command -world.beforeEvents.chatSend.subscribe(event => { - event.cancel = true - system.delay(() => { - Command.chatListener(event) +function register(namespace: string) { + system.beforeEvents.startup.subscribe(load => { + for (const command of Command.commands) { + if (command.sys.depth !== 0) continue + // Only simple commands are supported rn + + try { + const mandatoryParameters: CustomCommandParameter[] = [] + const optionalParameters: CustomCommandParameter[] = [] + + let callback = command.sys.callback + const locationIndexes: number[] = [] + let i = 0 + + let nowOptional = false + + function collectParams(command: Command) { + const child = command.sys.children[0] + if (!child || child instanceof LiteralArgumentType) return + + // Location is split + if (child.sys.type.name.endsWith('*')) return collectParams(child) + + child.sys.type.register(load.customCommandRegistry, namespace) + const param: CustomCommandParameter = { name: child.sys.type.name, type: child.sys.type.ctype } + if (child.sys.type.optional) { + nowOptional = true + optionalParameters.push(param) + } else { + if (nowOptional) + throw new Error('Mandatory param cannot come after optional in command ' + command.sys.name) + mandatoryParameters.push(param) + } + + if (child.sys.type instanceof LocationArgumentType) locationIndexes.push(i) + i++ + + if (child.sys.callback) callback = child.sys.callback + + collectParams(child) + } + collectParams(command) + + load.customCommandRegistry.registerCommand( + { + name: namespace + ':' + command.sys.name, + permissionLevel: command.sys.admin ? CommandPermissionLevel.GameDirectors : CommandPermissionLevel.Any, + description: command.sys.description.to(defaultLang), + mandatoryParameters, + optionalParameters, + }, + (ctx, ...args) => { + if (!callback) { + return { + status: CustomCommandStatus.Failure, + message: 'Команда не готова', + } + } + + const isServer = !(ctx.sourceEntity instanceof Player) + const output: CommandOutputBuffer = { output: '', isSync: isServer } + const player: Player = + ctx.sourceEntity instanceof Player ? ctx.sourceEntity : createPlayerProxy(ctx, command, output) + + const allowed = command.sys.requires(player) + if (!allowed) { + if (command.sys.requires.onFail) { + command.sys.requires.onFail(player) + } else { + if (command.sys.role) { + player.fail( + i18n.error`Команда доступна только начиная с роли ${ROLES[command.sys.role]}. Ваша роль: ${ROLES[getRole(player.id)]}`, + ) + } else { + player.fail(i18n.error`Команда недоступна`) + } + } + + return { status: CustomCommandStatus.Failure, message: output.output || undefined } + } + + for (const i of locationIndexes) { + const arg: unknown = args[i] + if (Vec.isVec(arg)) args[i] = Vec.floor(arg) + } + + if (isServer) { + execCmd(player, command, callback, args, output) + } else { + system.delay(() => { + if (!callback) throw new Error('no callback') + execCmd(player, command, callback, args, output) + }) + } + return { status: CustomCommandStatus.Success, message: output.output || undefined } + }, + ) + } catch (e) { + Command.logger.error('Failed to load command', command.sys.name, e) + } + } + + Command.loaded = true }) -}) +} + +interface CommandOutputBuffer { + output: string + isSync: boolean +} + +function createPlayerProxy( + ctx: CustomCommandOrigin, + command: Command<(ctx: CommandContext) => void>, + output: CommandOutputBuffer, +): Player { + const sendMessage = (...messages: unknown[]) => { + const translated = messages.map(e => (e instanceof Message ? e.to(consoleLang) : e)) + const message = util.format([...translated]) + if (output.isSync) { + output.output += `${message}\n` + } else { + Command.logger.info('server', 'async', `/${command.sys.name}`, message) + } + } + return new Proxy( + { + dimension: ctx.sourceEntity?.dimension ?? ctx.sourceBlock?.dimension ?? world.overworld, + + commandPermissionLevel: CommandPermissionLevel.Owner, + playerPermissionLevel: PlayerPermissionLevel.Custom, + isValid: true, + fail: sendMessage, + success: sendMessage, + info: sendMessage, + warn: sendMessage, + sendMessage: sendMessage, + tell: sendMessage, + playSound: () => void 0, + id: 'server', + name: 'server', + } as Partial, + { + get(target, p, receiver) { + if (!(p in target)) { + throw new Error( + `Command is not supported to be run by server, tried to use ${String(p)}, only ${Object.keys(target).join(' | ')} are supported`, + ) + } + + return Reflect.get(target, p, receiver) as unknown + }, + }, + ) as unknown as Player +} + +function execCmd( + player: Player, + command: Command<(ctx: CommandContext) => void>, + callback: (ctx: CommandContext, ...args: unknown[]) => void | Promise, + args: unknown[], + output: CommandOutputBuffer, +) { + try { + Command.logger.player(player).info(command.sys.name, ...args) + const result = callback(new CommandContext({ sender: player, message: '', targets: [] }, [], command, ''), ...args) + if (result && result instanceof Promise) { + output.isSync = false + result.catch((e: unknown) => { + Command.logger.player(player).error(command.sys.name, '[async]', ...args, e) + player.fail('Ошибка в асинхронной команде ' + String(e)) + }) + } + } catch (e) { + Command.logger.player(player).error(command.sys.name, ...args, e) + player.fail('Ошибка в команде ' + String(e)) + } +} diff --git a/src/lib/cooldown.ts b/src/lib/cooldown.ts index fa8f30ca..4463a5bc 100644 --- a/src/lib/cooldown.ts +++ b/src/lib/cooldown.ts @@ -9,6 +9,14 @@ export class Cooldown { static defaultDb = table>('cooldowns', () => ({})) + static getDb(cd: Cooldown) { + return cd.db + } + + static getTime(cd: Cooldown) { + return cd.time + } + /** * Create class for manage player cooldowns * @@ -50,8 +58,10 @@ export class Cooldown { const id = player instanceof Player ? player.id : player const elapsed = this.getElapsed(id) if (elapsed) { - if (this.tell && player instanceof Player) - player.fail(i18n.error`Не так быстро! Попробуй через ${i18n.time(this.time - elapsed)}`) + if (this.tell && player instanceof Player) { + const after = this.time - elapsed + player.fail(i18n.error`Не так быстро! Попробуй через ${i18n.time(after)}`) + } return false } else { diff --git a/src/lib/cooldownreset.ts b/src/lib/cooldownreset.ts new file mode 100644 index 00000000..eec08214 --- /dev/null +++ b/src/lib/cooldownreset.ts @@ -0,0 +1,63 @@ +import { Cooldown } from 'lib/cooldown' +import { form } from 'lib/form/new' +import { getFullname } from 'lib/get-fullname' +import { i18n } from 'lib/i18n/text' + +interface CooldownController { + list(): Record + reset(id: string): void +} + +// After compilation the initialization of this variable is placed lower then the hoisted call of the function below for some reason +let cds: { name: string; cd: CooldownController }[] | undefined + +/** + * Use cooldown controller when the cooldown IS NOT AN INSTANCE OF COOLDOWN, e.g. its some custom data structure + */ +export function registerResettableCooldown(name: string, cd: CooldownController | Cooldown) { + cds ??= [] + + if (cd instanceof Cooldown) { + cds.push({ + name, + cd: { + list() { + return Object.map(Cooldown.getDb(cd) as Record, (k, v) => + Cooldown.getTime(cd) + v < Date.now() ? false : [k, Cooldown.getTime(cd) + v], + ) + }, + reset(id) { + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete Cooldown.getDb(cd)[id] + }, + }, + }) + } else { + cds.push({ name, cd }) + } +} + +const cdsform = form(f => { + f.title('Кулдауны') + for (const cd of cds ?? []) { + f.button(cdform(cd)) + } +}) + +const cdform = form.params<{ cd: CooldownController; name: string }>((f, { params, self }) => { + const list = params.cd.list() + f.title(i18n.join`${params.name}`.size(Object.keys(list).length)) + for (const [id, time] of Object.entries(list)) { + const elapsed = time - Date.now() + if (elapsed < 0) continue + f.button(i18n`${getFullname(id)}\n${i18n.time(elapsed)}`, () => { + params.cd.reset(id) + self() + }) + } +}) + +new Command('cooldownreset') + .setPermissions('techAdmin') + .setDescription('Сбрасывает разные кулдауны') + .executes(cdsform.command) diff --git a/src/lib/cutscene/cutscene.ts b/src/lib/cutscene/cutscene.ts index c68edeb8..f74d5e13 100644 --- a/src/lib/cutscene/cutscene.ts +++ b/src/lib/cutscene/cutscene.ts @@ -6,7 +6,7 @@ import { table } from 'lib/database/abstract' import { noI18n } from 'lib/i18n/text' import { Compass } from 'lib/rpg/menu' import { Sidebar } from 'lib/sidebar' -import { restorePlayerCamera } from 'lib/utils/game' +import { onLoad, restorePlayerCamera } from 'lib/utils/game' import { WeakPlayerMap } from 'lib/weak-player-storage' /** @@ -64,7 +64,9 @@ export class Cutscene { ) { Cutscene.all.set(id, this) - this.sections = Cutscene.db.get(this.id).slice() + onLoad(() => { + this.sections = Cutscene.db.get(this.id).slice() + }) } private get defaultSection() { @@ -295,6 +297,6 @@ function bezier>(vectors: [T, T, T, T], axis: k function getVector5(player: Player): Vector5 { const { x: rx, y: ry } = player.getRotation() - const { x, y, z } = Vec.floor(player.getHeadLocation()) + const { x, y, z } = player.getHeadLocation() return { x, y, z, rx: Math.floor(rx), ry: Math.floor(ry) } } diff --git a/src/lib/cutscene/edit.ts b/src/lib/cutscene/edit.ts index 6fa7ca7a..110e580d 100644 --- a/src/lib/cutscene/edit.ts +++ b/src/lib/cutscene/edit.ts @@ -9,219 +9,227 @@ import { Cooldown } from 'lib/cooldown' import { i18n } from 'lib/i18n/text' import { Temporary } from 'lib/temporary' import { util } from 'lib/util' -import { isLocationError } from 'lib/utils/game' +import { isLocationError, onLoad } from 'lib/utils/game' import { Cutscene } from './cutscene' import { cutscene as cusceneCommand } from './menu' -/** List of items that controls the editing process */ -const controls: Record< - string, - [slot: number, item: ItemStack, onUse: (player: Player, cutscene: Cutscene, temp: Temporary) => void] -> = { - create: [ - 3, - new ItemStack(Items.WeTool).setInfo('§r§6> §fСоздать точку', 'используй предмет, чтобы создать точку катсцены.'), - (player, cutscene) => { - if (!cutscene.sections[0]) cutscene.withNewSection(cutscene.sections, {}) - - cutscene.withNewPoint(player, { sections: cutscene.sections, warn: true }) - player.info( - `Точка добавлена. Точек в секции: §f${cutscene.sections[cutscene.sections.length - 1]?.points.length}`, - ) - }, - ], - createSection: [ - 4, - new ItemStack(MinecraftItemTypes.ChainCommandBlock).setInfo( - '§r§3> §fСоздать секцию', - 'используй предмет, чтобы создать секцию катсцены (множество точек).', - ), - (player, cutscene) => { - cutscene.withNewSection(cutscene.sections, {}) - player.info(`Секция добавлена. Секций всего: §f${cutscene.sections.length}`) - }, - ], - cancel: [ - 7, - new ItemStack(MinecraftItemTypes.Barrier).setInfo( - '§r§c> §fОтмена', - 'используйте предмет, чтобы отменить редактироание катсцены и вернуть все в исходное состояние.', - ), - (player, cutscene, temp) => { - // Restore bakcup - const backup = EditingCutscene.get(player.id) - if (backup) cutscene.sections = backup.cutsceneSectionsBackup - - temp.cleanup() - player.success('Успешно отменено!') - }, - ], - saveAndExit: [ - 8, - new ItemStack(MinecraftItemTypes.HoneyBottle).setInfo( - '§r§6> §fСохранить и выйти', - 'используй предмет, чтобы выйти из меню катсцены.', - ), - (player, cutscene, temp) => { - temp.cleanup() - player.success(i18n`Сохранено. Проверить: ${cusceneCommand}§f play ${cutscene.id}`) - }, - ], +export const cutsceneEdit = { + /** + * Checks if the cutscene location is valid, then teleports the player to that location and backs up player inventory + * and cutscene data. + * + * @param player - The player who is editing the cutscene. + * @param cutscene - The cutscene cene to be edited + */ + editCatcutscene: (player: Player, cutscene: Cutscene): void => { + throw new Error('Not loaded!') + }, } -/** - * Checks if the cutscene location is valid, then teleports the player to that location and backs up player inventory - * and cutscene data. - * - * @param player - The player who is editing the cutscene. - * @param cutscene - The cutscene cene to be edited - */ -export function editCatcutscene(player: Player, cutscene: Cutscene) { - backupPlayerInventoryAndCutscene(player, cutscene) - - new Temporary(({ world, system, temporary }) => { - system.runInterval( - () => { - for (const section of cutscene.sections) { - if (!section) continue - - for (const point of section.points) particle(point, blueParticle) - } - }, - 'cutscene section edges particles', - 30, - ) - - const controller = { cancel: false } - util.catch(async function visualize() { - while (!temporary.cleaned) { - await system.sleep(10) - - const sections = cutscene.withNewPoint(player) - if (!sections) return - - await cutscene.forEachPoint( - point => { - if (!Vec.isValid(point)) return - particle(point, whiteParticle) - }, - { controller, sections, intervalTime: 1 }, +onLoad(() => { + /** List of items that controls the editing process */ + const controls: Record< + string, + [slot: number, item: ItemStack, onUse: (player: Player, cutscene: Cutscene, temp: Temporary) => void] + > = { + create: [ + 3, + new ItemStack(Items.WeTool).setInfo('§r§6> §fСоздать точку', 'используй предмет, чтобы создать точку катсцены.'), + (player, cutscene) => { + if (!cutscene.sections[0]) cutscene.withNewSection(cutscene.sections, {}) + + cutscene.withNewPoint(player, { sections: cutscene.sections, warn: true }) + player.info( + `Точка добавлена. Точек в секции: §f${cutscene.sections[cutscene.sections.length - 1]?.points.length}`, ) - } - }) + }, + ], + createSection: [ + 4, + new ItemStack(MinecraftItemTypes.ChainCommandBlock).setInfo( + '§r§3> §fСоздать секцию', + 'используй предмет, чтобы создать секцию катсцены (множество точек).', + ), + (player, cutscene) => { + cutscene.withNewSection(cutscene.sections, {}) + player.info(`Секция добавлена. Создайте точку внутри секции. Секций всего: §f${cutscene.sections.length}`) + }, + ], + cancel: [ + 7, + new ItemStack(MinecraftItemTypes.Barrier).setInfo( + '§r§c> §fОтмена', + 'используйте предмет, чтобы отменить редактироание катсцены и вернуть все в исходное состояние.', + ), + (player, cutscene, temp) => { + // Restore bakcup + const backup = EditingCutscene.get(player.id) + if (backup) cutscene.sections = backup.cutsceneSectionsBackup + + temp.cleanup() + player.success('Успешно отменено!') + }, + ], + saveAndExit: [ + 8, + new ItemStack(MinecraftItemTypes.HoneyBottle).setInfo( + '§r§6> §fСохранить и выйти', + 'используй предмет, чтобы выйти из меню катсцены.', + ), + (player, cutscene, temp) => { + temp.cleanup() + player.success(i18n`Сохранено. Проверить: ${cusceneCommand}§f play ${cutscene.id}`) + }, + ], + } + + cutsceneEdit.editCatcutscene = (player, cutscene) => { + backupPlayerInventoryAndCutscene(player, cutscene) - const cooldown = new Cooldown(1000) + new Temporary(({ world, system, temporary }) => { + system.runInterval( + () => { + for (const section of cutscene.sections) { + if (!section) continue - world.beforeEvents.itemUse.subscribe(event => { - if (event.source.id !== player.id) return - if (!cooldown.isExpired(player)) return + for (const point of section.points) particle(point, blueParticle) + } + }, + 'cutscene section edges particles', + 30, + ) - for (const [, control, onUse] of Object.values(controls)) { - if (control.is(event.itemStack)) { - event.cancel = true - system.delay(() => onUse(player, cutscene, temporary)) + const controller = { cancel: false } + util.catch(async function visualize() { + while (!temporary.cleaned) { + await system.sleep(10) + + const sections = cutscene.withNewPoint(player) + if (!sections) return + + await cutscene.forEachPoint( + point => { + if (!Vec.isValid(point)) return + particle(point, whiteParticle) + }, + { controller, sections, intervalTime: 1 }, + ) } - } - }) + }) - world.beforeEvents.playerLeave.subscribe(event => { - if (event.player.id === player.id) system.delay(() => temporary.cleanup()) - }) + const cooldown = new Cooldown(1000) - function particle(point: Vector3 | undefined, vars: MolangVariableMap) { - if (!point) return - try { - player.dimension.spawnParticle('minecraft:wax_particle', point, vars) - } catch (e) { - if (isLocationError(e)) return - if (e instanceof TypeError && e.message.includes('Native optional type conversion')) return + world.beforeEvents.itemUse.subscribe(event => { + if (event.source.id !== player.id) return + if (!cooldown.isExpired(player)) return - console.error(e) - } - } + for (const [, control, onUse] of Object.values(controls)) { + if (control.is(event.itemStack)) { + event.cancel = true + system.delay(() => onUse(player, cutscene, temporary)) + } + } + }) - return { - cleanup() { - const editingPlayer = EditingCutscene.get(player.id) - if (!editingPlayer) return + world.beforeEvents.playerLeave.subscribe(event => { + if (event.player.id === player.id) system.delay(() => temporary.cleanup()) + }) - const { hotbarSlots, position } = editingPlayer + function particle(point: Vector3 | undefined, vars: MolangVariableMap) { + if (!point) return + try { + player.dimension.spawnParticle('minecraft:wax_particle', point, vars) + } catch (e) { + if (isLocationError(e)) return + if (e instanceof TypeError && e.message.includes('Native optional type conversion')) return - if (player.isValid) { - forEachHotbarSlot(player, (i, container) => container.setItem(i, hotbarSlots[i])) - player.teleport(position) + console.error(e) } + } - EditingCutscene.delete(player.id) - cutscene.save() - }, - } - }) -} + return { + cleanup() { + const editingPlayer = EditingCutscene.get(player.id) + if (!editingPlayer) return -const blueParticle = new MolangVariableMap() -blueParticle.setColorRGBA('color', { - red: 0.5, - green: 0.5, - blue: 1, - alpha: 0, -}) + const { hotbarSlots, position } = editingPlayer -const whiteParticle = new MolangVariableMap() -whiteParticle.setColorRGBA('color', { - red: 1, - green: 1, - blue: 1, - alpha: 0, -}) + if (player.isValid) { + forEachHotbarSlot(player, (i, container) => container.setItem(i, hotbarSlots[i])) + player.teleport(position) + } -interface EditingCutscenePlayer { - hotbarSlots: (ItemStack | undefined)[] - position: Vector3 - cutsceneSectionsBackup: Cutscene['sections'] -} + EditingCutscene.delete(player.id) + cutscene.save() + }, + } + }) + } -/** Map of player id to player editing cutscene */ -const EditingCutscene = new Map() + const blueParticle = new MolangVariableMap() + blueParticle.setColorRGBA('color', { + red: 0.5, + green: 0.5, + blue: 1, + alpha: 0, + }) -function backupPlayerInventoryAndCutscene(player: Player, cutscene: Cutscene) { - EditingCutscene.set(player.id, { - hotbarSlots: backupPlayerInventory(player), - position: Vec.floor(player.location), - cutsceneSectionsBackup: cutscene.sections.slice(), + const whiteParticle = new MolangVariableMap() + whiteParticle.setColorRGBA('color', { + red: 1, + green: 1, + blue: 1, + alpha: 0, }) - cutscene.sections = [] -} + interface EditingCutscenePlayer { + hotbarSlots: (ItemStack | undefined)[] + position: Vector3 + cutsceneSectionsBackup: Cutscene['sections'] + } -function backupPlayerInventory(player: Player) { - const hotbarSlots: EditingCutscenePlayer['hotbarSlots'] = [] - const container = forEachHotbarSlot(player, (i, container) => { - hotbarSlots[i] = container.getItem(i) - container.setItem(i, undefined) - }) + /** Map of player id to player editing cutscene */ + const EditingCutscene = new Map() - for (const [slot, item] of Object.values(controls)) { - container.setItem(slot, item) + function backupPlayerInventoryAndCutscene(player: Player, cutscene: Cutscene) { + EditingCutscene.set(player.id, { + hotbarSlots: backupPlayerInventory(player), + position: Vec.floor(player.location), + cutsceneSectionsBackup: cutscene.sections.slice(), + }) + + cutscene.sections = [] } - return hotbarSlots -} + function backupPlayerInventory(player: Player) { + const hotbarSlots: EditingCutscenePlayer['hotbarSlots'] = [] + const container = forEachHotbarSlot(player, (i, container) => { + hotbarSlots[i] = container.getItem(i) + container.setItem(i, undefined) + }) + + for (const [slot, item] of Object.values(controls)) { + container.setItem(slot, item) + } -/** - * Iterates over the player's hotbar slots and performs a specified action on each slot. - * - * @param player - Target player to get hotbar from - * @param callback - Callback function that will be called for each hotbar slot. It takes two arguments: the index of - * the current slot (from 0 to 8) and the container` object belonging to the player. - */ -function forEachHotbarSlot(player: Player, callback: (i: number, container: Container) => void) { - const { container } = player - if (!container) throw new ReferenceError('Player has no container!') - - for (let i = 0; i < 9; i++) { - callback(i, container) + return hotbarSlots } - return container -} + /** + * Iterates over the player's hotbar slots and performs a specified action on each slot. + * + * @param player - Target player to get hotbar from + * @param callback - Callback function that will be called for each hotbar slot. It takes two arguments: the index of + * the current slot (from 0 to 8) and the container` object belonging to the player. + */ + function forEachHotbarSlot(player: Player, callback: (i: number, container: Container) => void) { + const { container } = player + if (!container) throw new ReferenceError('Player has no container!') + + for (let i = 0; i < 9; i++) { + callback(i, container) + } + + return container + } +}) diff --git a/src/lib/cutscene/menu.ts b/src/lib/cutscene/menu.ts index d74b6b17..f2baf4c8 100644 --- a/src/lib/cutscene/menu.ts +++ b/src/lib/cutscene/menu.ts @@ -1,45 +1,45 @@ import { Player } from '@minecraft/server' +import { PersistentSet } from 'lib/database/persistent-set' import { ActionForm } from 'lib/form/action' import { ArrayForm } from 'lib/form/array' +import { ModalForm } from 'lib/form/modal' import { form } from 'lib/form/new' import { i18n, noI18n } from 'lib/i18n/text' -import { is } from 'lib/roles' import { Cutscene } from './cutscene' -import { editCatcutscene } from './edit' +import { cutsceneEdit } from './edit' new Cutscene('test', 'Test') export const cutscene = new Command('cutscene') .setDescription(i18n`Катсцена`) - .setPermissions('member') + .setPermissions('helper') .executes(ctx => { - if (is(ctx.player.id, 'curator')) selectCutsceneMenu(ctx.player) - else Command.getHelpForCommand(cutscene, ctx) + selectCutsceneMenu(ctx.player) }) -cutscene - .overload('exit') - .setDescription(i18n`Выход из катсцены`) - .executes(ctx => { - const cutscene = Cutscene.getCurrent(ctx.player) - if (!cutscene) return ctx.error(i18n.error`Вы не находитесь в катсцене!`) - - cutscene.exit(ctx.player) - }) - -cutscene - .overload('play') - .setPermissions('techAdmin') - .string('name', false) - .executes((ctx, name) => { - const cutscene = Cutscene.all.get(name) - if (!cutscene) return ctx.error([...Cutscene.all.keys()].join('\n')) +const cutscenes = new PersistentSet('cutscenesIds') - cutscene.play(ctx.player) - }) +cutscenes.onLoad(() => { + for (const c of cutscenes) new Cutscene(c, c) +}) function selectCutsceneMenu(player: Player) { new ArrayForm(noI18n`Катсцены`, [...Cutscene.all.values()]) + .addCustomButtonBeforeArray(f => { + const cutscene = Cutscene.getCurrent(player) + if (cutscene) { + f.button('Выйти из текущей сцены', () => cutscene.exit(player)) + } + + f.button('Добавить', () => { + new ModalForm('Добавить катсцену').addTextField('Название', '').show(player, (ctx, id) => { + if (cutscenes.has(id)) ctx.error('Имя занято') + cutscenes.add(id) + const cutscene = new Cutscene(id, id) + manageCutsceneMenu({ cutscene }).show(player) + }) + }) + }) .description(noI18n`Список доступных для редактирования катсцен:`) .button(cutscene => [cutscene.id, manageCutsceneMenu({ cutscene }).show]) .show(player) @@ -47,10 +47,19 @@ function selectCutsceneMenu(player: Player) { const manageCutsceneMenu = form.params<{ cutscene: Cutscene }>((f, { player, params: { cutscene } }) => { const dots = cutscene.sections.reduce((count, section) => (section ? count + section.points.length : count), 0) + const created = cutscenes.has(cutscene.id) f.title(cutscene.id) .body(noI18n`Секций: ${cutscene.sections.length}\nТочек: ${dots}`) .button(ActionForm.backText, () => selectCutsceneMenu(player)) - .button(noI18n`Редактировать`, () => editCatcutscene(player, cutscene)) + .button(noI18n`Редактировать`, () => cutsceneEdit.editCatcutscene(player, cutscene)) .button(noI18n`Воспроизвести`, () => cutscene.play(player)) + + if (created) { + f.ask(noI18n.error`Удалить`, noI18n.error`Удалить`, () => { + Cutscene.all.delete(cutscene.id) + cutscenes.delete(cutscene.id) + player.success() + }) + } }) diff --git a/src/lib/database/abstract.ts b/src/lib/database/abstract.ts index ce0bbf60..bf3b1e7d 100644 --- a/src/lib/database/abstract.ts +++ b/src/lib/database/abstract.ts @@ -10,10 +10,11 @@ export interface Table { delete(key: Key): boolean size: number keys(): MapIterator - values(): Value[] - valuesImmutable(): MapIterator> + values(): Immutable[] + valuesIterator(): MapIterator> entries(): [Key, Value][] entriesImmutable(): MapIterator<[Key, Immutable]> + onLoad(waiter: (value: void) => void): void } export function table(name: string): Table @@ -72,10 +73,22 @@ export class MemoryTable extends ProxyDataba this.value = new Map(Object.entries(tableData)) as Map } } + + protected loaded = true + + onLoad(waiter: (value: void) => void): void { + waiter() + } } if (__TEST__) { - class TestDatabase extends ProxyDatabase {} + class TestDatabase extends ProxyDatabase implements Table { + protected loaded = true + + onLoad(waiter: (value: void) => void): void { + waiter() + } + } configureDatabase({ tables: TestDatabase.tables, diff --git a/src/modules/commands/db.ts b/src/lib/database/command.ts similarity index 79% rename from src/modules/commands/db.ts rename to src/lib/database/command.ts index 193cef67..ed40b0c5 100644 --- a/src/modules/commands/db.ts +++ b/src/lib/database/command.ts @@ -1,12 +1,12 @@ /* i18n-ignore */ - import { Player, system, world } from '@minecraft/server' -import { ArrayForm, ROLES, getRole, inspect, util } from 'lib' import { UnknownTable, getProvider } from 'lib/database/abstract' import { ActionForm } from 'lib/form/action' +import { ArrayForm } from 'lib/form/array' import { ModalForm } from 'lib/form/modal' import { i18n, noI18n } from 'lib/i18n/text' -import { stringifyBenchmarkResult } from './stringifyBenchmarkReult' +import { ROLES, getRole } from 'lib/roles' +import { inspect } from 'lib/util' new Command('db') .setDescription('Просматривает базу данных') @@ -145,38 +145,3 @@ function changeValue( onChange(newValue, key) }) } - -const cmd = new Command('benchmark') - .setAliases('bench') - .setDescription('Показывает время работы серверных систем') - .setPermissions('techAdmin') - -cmd - .string('type', true) - .boolean('pathes', true) - .boolean('sort', true) - .array('output', ['form', 'chat', 'log'], true) - .executes((ctx, type = 'timers', timerPathes = false, sort = true, output = 'form') => { - if (!(type in util.benchmark.results)) - return ctx.error( - 'Неизвестный тип бенчмарка! Доступные типы: \n §f' + Object.keys(util.benchmark.results).join('\n '), - ) - - const result = stringifyBenchmarkResult({ type: type, timerPathes, sort }) - - switch (output) { - case 'form': { - const show = () => { - new ActionForm('Benchmark', result) - .button('Refresh', null, show) - .button('Exit', null, () => void 0) - .show(ctx.player) - } - return show() - } - case 'chat': - return ctx.reply(result) - case 'log': - return console.log(result) - } - }) diff --git a/src/lib/database/inventory.ts b/src/lib/database/inventory.ts index 02089890..2db643fe 100644 --- a/src/lib/database/inventory.ts +++ b/src/lib/database/inventory.ts @@ -382,6 +382,11 @@ export class InventoryStore { if (!keepInventory) entity.container?.clearAll() } + set(key: string, inventory: Inventory) { + this.inventories.set(key, inventory) + this.requestSave() + } + /** * Checks if key was saved into this store * diff --git a/src/lib/database/item-stack.test.ts b/src/lib/database/item-stack.test.ts index 955008ce..ab2fc8ce 100644 --- a/src/lib/database/item-stack.test.ts +++ b/src/lib/database/item-stack.test.ts @@ -1,7 +1,7 @@ import 'lib/extensions/enviroment' -import { defaultLang } from 'lib/assets/lang' import { ItemLoreSchema } from './item-stack' +import { defaultLang } from 'lib/assets/lang' describe('item stack', () => { it('should create item', () => { @@ -67,26 +67,4 @@ describe('item stack', () => { ] `) }) - - it('should have right types', () => { - const schema = new ItemLoreSchema('test 3') - .property('test', String) - .property('owned', Boolean) - .property('key', String) - - .build() - - const { storage } = schema.create(defaultLang, { - test: '', - owned: true, - key: '', - }) - - // @ts-expect-error Expect this to not allow arbitrary keys - storage.lol - - expectTypeOf(storage.key).toBeString() - expectTypeOf(storage.owned).toBeBoolean() - expectTypeOf(storage.key).toBeString() - }) }) diff --git a/src/lib/database/item-stack.ts b/src/lib/database/item-stack.ts index 27d5326a..9fc41565 100644 --- a/src/lib/database/item-stack.ts +++ b/src/lib/database/item-stack.ts @@ -97,8 +97,6 @@ export class ItemLoreSchema { static loreSchemaId = 'lsid' - public readonly aha!: T - constructor( private properties: Schema, private prepareItem: (lang: Language, itemStack: Item, storage: ParsedSchema) => void, diff --git a/src/lib/database/migrations.ts b/src/lib/database/migrations.ts index 4ec53e26..e57957be 100644 --- a/src/lib/database/migrations.ts +++ b/src/lib/database/migrations.ts @@ -1,14 +1,17 @@ import { system } from '@minecraft/server' +import { onLoad } from 'lib/utils/load-ref' import { table } from './abstract' const database = table('databaseMigrations') export function migration(name: string, migrateFN: VoidFunction) { - if (!database.get(name)) { + onLoad(() => { + if (database.has(name)) return + system.delay(() => { if (database.get(name)) return migrateFN() database.set(name, true) }) - } + }) } diff --git a/src/lib/database/persistent-set.ts b/src/lib/database/persistent-set.ts index 10e0c1f3..ee8238a3 100644 --- a/src/lib/database/persistent-set.ts +++ b/src/lib/database/persistent-set.ts @@ -1,3 +1,4 @@ +import { onLoad } from 'lib/utils/load-ref' import { LongDynamicProperty } from './properties' export class LimitedSet extends Set { @@ -17,9 +18,15 @@ export class PersistentSet extends LimitedSet { protected limit = 1_000, ) { super() - this.load() + for (const key in LimitedSet.prototype) { + ;(this as Record)[key] = () => { + throw new Error(`PersistentSet<${id}> is not yet loaded!`) + } + } } + onLoad = onLoad(() => this.load()).onLoad + private load() { const id = `PersistentSet<${this.id}>:` try { @@ -28,12 +35,20 @@ export class PersistentSet extends LimitedSet { if (!Array.isArray(values)) return console.warn(`${id} Dynamic property is not array, it is:`, values) values.forEach(e => this.add(e as T)) + + for (const [key, value] of Object.entries(LimitedSet.prototype)) (this as Record)[key] = value } catch (error) { console.error(`${id} Failed to load:`, error) + + for (const key in LimitedSet.prototype) { + ;(this as Record)[key] = () => { + throw new Error(`PersistentSet<${id}> Failed to load: ${error}`) + } + } } } - save() { + protected save() { LongDynamicProperty.set(this.id, JSON.stringify([...this])) return this } diff --git a/src/lib/database/player.ts b/src/lib/database/player.ts index fff387df..6025db0e 100644 --- a/src/lib/database/player.ts +++ b/src/lib/database/player.ts @@ -1,7 +1,7 @@ import { Player, world, type PlayerDatabase } from '@minecraft/server' import { expand } from 'lib/extensions/extend' import { i18n } from 'lib/i18n/text' -import { DEFAULT_ROLE } from 'lib/roles' +import { DEFAULT_ROLE } from '../roles/index' import { Table, table } from './abstract' declare module '@minecraft/server' { @@ -48,7 +48,11 @@ declare module '@minecraft/server' { } expand(Player, { - database: table('player', () => ({ role: DEFAULT_ROLE, inv: 'spawn', survival: {} })), + database: table('player', () => ({ + role: DEFAULT_ROLE, + inv: 'spawn', + survival: {}, + })), name(id) { if (!id) return void 0 diff --git a/src/lib/database/properties.ts b/src/lib/database/properties.ts index fc492dbb..c087a5ec 100644 --- a/src/lib/database/properties.ts +++ b/src/lib/database/properties.ts @@ -1,6 +1,7 @@ import { world } from '@minecraft/server' import { ProxyDatabase } from 'lib/database/proxy' -import { i18n, noI18n } from 'lib/i18n/text' +import { noI18n } from 'lib/i18n/text' +import { onLoad } from 'lib/utils/load-ref' import { DatabaseDefaultValue, DatabaseError, UnknownTable, configureDatabase } from './abstract' import { DatabaseUtils } from './utils' @@ -13,14 +14,17 @@ class DynamicPropertyDB extends Pr ) { super(id, defaultValue) if (id in DynamicPropertyDB.tables) throw new DatabaseError(`Table ${this.id} already initialized!`) - this.init() + DynamicPropertyDB.tables[id] = this as UnknownTable } - private init() { + onLoad = onLoad(() => this.load()).onLoad + + private load() { // Init try { this.value = new Map(this.restore(LongDynamicProperty.get(this.id) as Record)) + this.loaded = true } catch (error) { console.error(new DatabaseError(noI18n`Failed to init table '${this.id}': ${error}`)) } @@ -56,7 +60,22 @@ export class LongDynamicProperty { world.setDynamicProperty(propertyId, strings.length) for (const [i, string] of strings.entries()) { - world.setDynamicProperty(`${propertyId}${separator}${i}`, string) + try { + world.setDynamicProperty(`${propertyId}${separator}${i}`, string) + } catch (e) { + console.error( + 'DATABASE SAVE FAIL', + propertyId, + 'index', + i, + 'of', + strings.length, + 'SIZE', + string.length, + 'error:', + e, + ) + } } } @@ -101,7 +120,7 @@ export class LongDynamicProperty { } } -if (!__VITEST__) +if (!__TEST__) configureDatabase({ createTable: (name, defaultValue?: import('./abstract').DatabaseDefaultValue) => new DynamicPropertyDB(name, defaultValue), diff --git a/src/lib/database/proxy.test.ts b/src/lib/database/proxy.test.ts index 99c155ab..ac82ef38 100644 --- a/src/lib/database/proxy.test.ts +++ b/src/lib/database/proxy.test.ts @@ -3,8 +3,14 @@ import { ProxyDatabase } from './proxy' describe('ProxyDatabase', () => { let database: Table + class Database extends ProxyDatabase { + onLoad(waiter: (value: void) => void): void {} + + protected loaded = true + } + beforeEach(() => { - database = new ProxyDatabase('id') + database = new Database('id') }) it('should save strings', () => { @@ -52,7 +58,7 @@ describe('ProxyDatabase', () => { }) it('should support default value', () => { - const database = new ProxyDatabase<{ some: { nested: { defaultValue: boolean; assignable?: boolean } } }, string>( + const database = new Database<{ some: { nested: { defaultValue: boolean; assignable?: boolean } } }, string>( 'default', () => ({ some: { nested: { defaultValue: true } } }), ) diff --git a/src/lib/database/proxy.ts b/src/lib/database/proxy.ts index 65b3b850..1264150c 100644 --- a/src/lib/database/proxy.ts +++ b/src/lib/database/proxy.ts @@ -8,7 +8,7 @@ const PROXY_TARGET = Symbol('proxy_target') type DynamicObject = Record type ProxiedDynamicObject = DynamicObject & { [IS_PROXIED]?: boolean } -export class ProxyDatabase implements Table { +export abstract class ProxyDatabase implements Table { static tables: Record = {} constructor( @@ -18,6 +18,8 @@ export class ProxyDatabase impleme ProxyDatabase.tables[id] = this as UnknownTable } + abstract onLoad(waiter: (value: void) => void): void + get size(): number { return this.value.size } @@ -35,6 +37,7 @@ export class ProxyDatabase impleme } getImmutable(key: Key): Immutable { + if (!this.loaded) throw new Error(`Proxy table ${this.id} is not yet loaded!`) const value = this.value.get(key) if (this.defaultValue && typeof value === 'undefined') { this.value.set(key, this.defaultValue(key)) @@ -45,37 +48,42 @@ export class ProxyDatabase impleme } delete(key: Key): boolean { + if (!this.loaded) throw new Error(`Proxy table ${this.id} is not yet loaded!`) const deleted = this.value.delete(key) if (deleted) this.needSave() return deleted } set(key: Key, value: Value): void { + if (!this.loaded) throw new Error(`Proxy table ${this.id} is not yet loaded!`) this.value.set(key, value) this.needSave() } keys(): MapIterator { + if (!this.loaded) throw new Error(`Proxy table ${this.id} is not yet loaded!`) return this.value.keys() } - values(): Value[] { - const values: Value[] = [] - for (const value of this.value.values()) values.push(value) - return values + values() { + if (!this.loaded) throw new Error(`Proxy table ${this.id} is not yet loaded!`) + return [...this.value.values()] as Immutable[] } - valuesImmutable() { + valuesIterator() { + if (!this.loaded) throw new Error(`Proxy table ${this.id} is not yet loaded!`) return this.value.values() as MapIterator> } entries(): [Key, Value][] { + if (!this.loaded) throw new Error(`Proxy table ${this.id} is not yet loaded!`) const entries: [Key, Value][] = [] for (const [key, value] of this.value.entries()) entries.push([key, this.wrap(value, '') as Value]) return entries } entriesImmutable(): MapIterator<[Key, Immutable]> { + if (!this.loaded) throw new Error(`Proxy table ${this.id} is not yet loaded!`) return this.value.entries() as MapIterator<[Key, Immutable]> } @@ -140,6 +148,8 @@ export class ProxyDatabase impleme protected value = new Map() + protected loaded = false + private proxyCache = new WeakMap() protected restore(from: Record) { diff --git a/src/lib/database/scoreboard.ts b/src/lib/database/scoreboard.ts index 5348d4f6..7583af4c 100644 --- a/src/lib/database/scoreboard.ts +++ b/src/lib/database/scoreboard.ts @@ -3,6 +3,7 @@ import { defaultLang } from 'lib/assets/lang' import { expand } from 'lib/extensions/extend' import { i18nShared } from 'lib/i18n/text' import { capitalize } from 'lib/util' +import { onLoad } from 'lib/utils/load-ref' declare module '@minecraft/server' { namespace ScoreNames { @@ -165,13 +166,15 @@ export class ScoreboardDB { return objective } - scoreboard + scoreboard!: ScoreboardObjective constructor( public id: string, displayName: string = id, ) { - this.scoreboard = ScoreboardDB.objective(id, displayName) + onLoad(() => { + this.scoreboard = ScoreboardDB.objective(id, displayName) + }) } set(id: Entity | string, value: number) { diff --git a/src/lib/database/utils.ts b/src/lib/database/utils.ts index a7fc4f6e..0892d369 100644 --- a/src/lib/database/utils.ts +++ b/src/lib/database/utils.ts @@ -2,6 +2,7 @@ import { Entity, StructureSaveMode, system, world } from '@minecraft/server' import { noI18n } from 'lib/i18n/text' +import { onLoad } from 'lib/utils/load-ref' import { Vec } from 'lib/vector' interface TableEntity { @@ -23,7 +24,7 @@ export class DatabaseUtils { static chunkRegexp = /.{1,50}/g - static propertyChunkRegexp = /.{1,32767}/g + static propertyChunkRegexp = /.{1,20000}/g private static allEntities: TableEntity[] @@ -54,31 +55,30 @@ export class DatabaseUtils { .filter(e => e.tableName !== 'NOTDB') } - private static readonly tablesDimension = world.overworld - private static tables(): TableEntity[] { if (typeof this.allEntities !== 'undefined') return this.allEntities this.allEntities = this.getEntities() if (this.allEntities.length < 1) { console.warn(noI18n`§6Не удалось найти базы данных. Попытка загрузить бэкап...`) - - world.overworld - .getEntities({ - location: DatabaseUtils.entityLocation, - type: DatabaseUtils.entityTypeId, - maxDistance: 2, - }) - - .forEach(e => e.remove()) - - world.structureManager.place(this.backupName, this.tablesDimension, this.entityLocation) - this.allEntities = this.getEntities() - - if (this.allEntities.length < 1) { - console.warn(noI18n`§cНе удалось загрузить базы данных из бэкапа.`) - return [] - } else console.warn(`Бэкап успешно загружен! Всего баз данных: ${this.allEntities.length}`) + if (world.structureManager.get(this.backupName)) { + world.overworld + .getEntities({ + location: DatabaseUtils.entityLocation, + type: DatabaseUtils.entityTypeId, + maxDistance: 2, + }) + + .forEach(e => e.remove()) + + world.structureManager.place(this.backupName, world.overworld, this.entityLocation) + this.allEntities = this.getEntities() + + if (this.allEntities.length < 1) { + console.warn(noI18n`§cНе удалось загрузить базы данных из бэкапа.`) + return [] + } else console.warn(`Бэкап успешно загружен! Всего баз данных: ${this.allEntities.length}`) + } else console.error('Backup does not exists, initializing empty tables...') } return this.allEntities @@ -121,7 +121,7 @@ export class DatabaseUtils { world.structureManager.delete(this.backupName) world.structureManager.createFromWorld( this.backupName, - this.tablesDimension, + world.overworld, this.entityLocation, this.entityLocation, { includeBlocks: false, includeEntities: true, saveMode: StructureSaveMode.World }, @@ -134,6 +134,6 @@ export class DatabaseUtils { } } -world.afterEvents.worldLoad.subscribe(() => { +onLoad(() => { world.overworld.runCommand('tickingarea add 0 -64 0 0 200 0 database true') }) diff --git a/src/lib/enchantments.ts b/src/lib/enchantments.ts index 587608b3..46ba03cc 100644 --- a/src/lib/enchantments.ts +++ b/src/lib/enchantments.ts @@ -6,7 +6,6 @@ import { enchantmentsJson } from './assets/enchantments' import { Core } from './extensions/core' const location = { x: 0, y: -10, z: 0 } -const dimension = world.overworld export const Enchantments = { custom: {} as Record>>, @@ -15,6 +14,8 @@ export const Enchantments = { } function load() { + const dimension = world.overworld + let expecting = enchantmentsJson.items as number for (let i = 1; i <= enchantmentsJson.files; i++) { const structure = `mystructure:generated/${i}` @@ -67,4 +68,4 @@ function load() { EventLoader.load(Enchantments.onLoad) } -if (!__VITEST__) Core.afterEvents.worldLoad.subscribe(load) +if (!__TEST__) Core.afterEvents.worldLoad.subscribe(load) diff --git a/src/lib/extensions/core.ts b/src/lib/extensions/core.ts index 7d4a602b..fafff450 100644 --- a/src/lib/extensions/core.ts +++ b/src/lib/extensions/core.ts @@ -1,4 +1,5 @@ import { Player, system, world } from '@minecraft/server' +import { onLoad } from 'lib/utils/load-ref' import { EventLoader, EventSignal } from '../event-signal' /** Core server features */ @@ -15,31 +16,33 @@ export const Core = { }, } -if (!__VITEST__) { - system.run(function waiter() { - const entities = world.overworld.getEntities() - if (entities.length < 1) { - // No entity found, re-run waiter - return system.run(waiter) - } - - try { - EventLoader.load(Core.afterEvents.worldLoad) - } catch (e) { - console.error(e) - } - }) +if (!__TEST__) { + onLoad(() => { + system.run(function waiter() { + const entities = world.overworld.getEntities() + if (entities.length < 1) { + // No entity found, re-run waiter + return system.run(waiter) + } - system.afterEvents.scriptEventReceive.subscribe( - data => { - if (data.id === 'SERVER:SAY') { - world.say(decodeURI(data.message)) + try { + EventLoader.load(Core.afterEvents.worldLoad) + } catch (e) { + console.error(e) } - }, - { - namespaces: ['SERVER'], - }, - ) + }) + + system.afterEvents.scriptEventReceive.subscribe( + data => { + if (data.id === 'SERVER:SAY') { + world.say(decodeURI(data.message)) + } + }, + { + namespaces: ['SERVER'], + }, + ) + }) } else { EventLoader.load(Core.afterEvents.worldLoad) } diff --git a/src/lib/extensions/enviroment.ts b/src/lib/extensions/enviroment.ts index 67c5ee80..95c908df 100644 --- a/src/lib/extensions/enviroment.ts +++ b/src/lib/extensions/enviroment.ts @@ -205,8 +205,10 @@ function getTimezone(language?: Language) { switch (language) { case Language.ru_RU: return 3 - default: + case Language.bg_BG: return 0 + default: + return 3 } } @@ -217,7 +219,7 @@ Date.prototype.toYYYYMMDD = function (lang) { const year = date.getFullYear() const month = (date.getMonth() + 1).toString().padStart(2, '0') const day = date.getDate().toString().padStart(2, '0') - return `${day}-${month}-${year}` + return `${day}.${month}.${year}` } Date.prototype.toHHMM = function (lang) { diff --git a/src/lib/extensions/on-screen-display.ts b/src/lib/extensions/on-screen-display.ts index 2021c2d3..fb9a194a 100644 --- a/src/lib/extensions/on-screen-display.ts +++ b/src/lib/extensions/on-screen-display.ts @@ -1,5 +1,6 @@ import { Player, RawMessage, ScreenDisplay, system, world } from '@minecraft/server' import { ScreenDisplaySymbol } from 'lib/extensions/player' +import { onLoad } from 'lib/utils/load-ref' import { fromMsToTicks, fromTicksToMs } from 'lib/utils/ms' import { WeakPlayerMap } from 'lib/weak-player-storage' @@ -219,7 +220,7 @@ const actionbarLock = new WeakPlayerMap<{ priority: ActionbarPriority; expires: const defaultOptions = { fadeInDuration: 0, fadeOutDuration: 0, stayDuration: 0 } const defaultTitleOptions = { ...defaultOptions, stayDuration: -1 } -run() +onLoad(run) function run() { system.run(() => { diff --git a/src/lib/extensions/player.ts b/src/lib/extensions/player.ts index 23e9091a..03ac2fbb 100644 --- a/src/lib/extensions/player.ts +++ b/src/lib/extensions/player.ts @@ -150,7 +150,7 @@ export const ScreenDisplaySymbol = Symbol('screen_display') expand(Player.prototype, { get lang() { - return __VITEST__ ? Language.ru_RU : Language.ru_RU + return __TEST__ ? Language.ru_RU : Language.ru_RU }, isSimulated() { diff --git a/src/lib/extensions/system.ts b/src/lib/extensions/system.ts index 238301ee..3ea16454 100644 --- a/src/lib/extensions/system.ts +++ b/src/lib/extensions/system.ts @@ -1,5 +1,6 @@ import { system, System, world } from '@minecraft/server' import stringifyError from 'lib/utils/error' +import { LoadRef } from 'lib/utils/load-ref' import { capitalize, util } from '../util' import { expand } from './extend' @@ -64,15 +65,23 @@ expand(System.prototype, { runJob(generator, name) { const id = name ?? stringifyError.parent() + const source = new Error().stack return super.runJob( (function* runJobWrapper() { - let v + let v: IteratorResult | undefined do { const end = util.benchmark(id, 'job') - v = generator.next() + util.catch( + () => { + v = generator.next() + return v.value + }, + 'runJob', + source, + ) end() yield - } while (!v.done) + } while (!v?.done) })(), ) }, @@ -93,7 +102,7 @@ expand(System.prototype, { }, delay(fn) { - const origin = stringifyError.stack.get(1) + const origin = new Error().stack this.run(function delay() { util.catch(fn, 'system.delay', origin) }) @@ -105,7 +114,11 @@ expand(System.prototype, { function jobInterval() { system.runJob( (function* job() { - for (const _ of callback()) yield + try { + for (const _ of callback()) yield + } catch (e) { + console.error('Error in job interval', e) + } if (stopped) return if (tickInterval === 0) system.delay(jobInterval) else system.runTimeout(jobInterval, 'jobInterval', tickInterval) @@ -152,6 +165,7 @@ function Timer( TIMERS_PATHES[visualId] = path function timer() { + if (type !== 'timeout' && !LoadRef.loadFinished) return util.catch(fn, capitalize(type)) } diff --git a/src/lib/extensions/world.ts b/src/lib/extensions/world.ts index f66cc4aa..86c9e42a 100644 --- a/src/lib/extensions/world.ts +++ b/src/lib/extensions/world.ts @@ -1,6 +1,6 @@ -import { World, world } from '@minecraft/server' +import { Dimension, World, world } from '@minecraft/server' import { MinecraftDimensionTypes } from '@minecraft/vanilla-data' -import { stringify } from '../util' +import { onLoad } from 'lib/utils/load-ref' import { expand } from './extend' declare module '@minecraft/server' { @@ -16,8 +16,6 @@ declare module '@minecraft/server' { */ logOnce(type: string, ...messages: unknown[]): void - /** Prints data using world.say() and parses any object to string using toStr method. */ - debug(...data: unknown[]): void overworld: Dimension end: Dimension nether: Dimension @@ -26,18 +24,33 @@ declare module '@minecraft/server' { expand(World.prototype, { say: world.sendMessage.bind(world), - overworld: world.getDimension(MinecraftDimensionTypes.Overworld), - nether: world.getDimension(MinecraftDimensionTypes.Nether), - end: world.getDimension(MinecraftDimensionTypes.TheEnd), - debug(...data: unknown[]) { - this.say(data.map(stringify).join(' ')) + get overworld() { + throw new Error('Dimensions are not available') + return undefined as unknown as Dimension + }, + get nether() { + throw new Error('Dimensions are not available') + return undefined as unknown as Dimension + }, + get end() { + throw new Error('Dimensions are not available') + return undefined as unknown as Dimension }, - logOnce(name, ...data: unknown[]) { if (logs.has(name)) return - world.debug(...data) + console.log(name, ...data) logs.add(name) }, }) const logs = new Set() + +onLoad(() => { + expand(World.prototype, { + overworld: world.getDimension(MinecraftDimensionTypes.Overworld), + nether: world.getDimension(MinecraftDimensionTypes.Nether), + end: world.getDimension(MinecraftDimensionTypes.TheEnd), + }) + + // console.log('DIME', world.overworld.runCommand) +}) diff --git a/src/lib/form/action.ts b/src/lib/form/action.ts index c34c4a50..d48e87b7 100644 --- a/src/lib/form/action.ts +++ b/src/lib/form/action.ts @@ -3,7 +3,6 @@ import { ActionFormData, ActionFormResponse } from '@minecraft/server-ui' import { Language } from 'lib/assets/lang' import { ask } from 'lib/form/message' import { i18n, noI18n } from 'lib/i18n/text' -import { util } from 'lib/util' import { NewFormCallback } from './new' import { BUTTON, showForm } from './utils' @@ -82,7 +81,7 @@ export class ActionForm { } /** - * Adds back button to the form. Alias to {@link ActionForm.button} + * Adds back button to the form. Alias to {@link button} * * @param backCallback - Callback function that will be called when back button is pressed. */ @@ -92,7 +91,7 @@ export class ActionForm { } /** - * Adds ask button to the form. Alias to {@link ActionForm.button} + * Adds ask button to the form. Alias to {@link button} * * Ask is alias to {@link ask} * @@ -133,12 +132,21 @@ export class ActionForm { if (response === false || !(response instanceof ActionFormResponse) || typeof response.selection === 'undefined') return false - const callback = this.buttons[response.selection]?.callback - if (typeof callback === 'function') { - util.catch(() => callback(player, () => this.show(player)) as void) + const button = this.buttons[response.selection] + if (__TEST__) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + await button?.callback!(player, () => this.show(player)) return true + } else { + try { + if (typeof button?.callback !== 'function') throw new Error('Callback is undefined') + button.callback(player, () => this.show(player)) + return true + } catch (e) { + console.error('OLD FORM BUTTON ERROR', player.name, button?.text, button?.callback, e) + player.fail(noI18n.error`Old button error: ${button?.text}, erorr: ${e}. Сообщите администрации.`) + return false + } } - - return false } } diff --git a/src/lib/form/chest.ts b/src/lib/form/chest.ts index 723f20fe..3526091f 100644 --- a/src/lib/form/chest.ts +++ b/src/lib/form/chest.ts @@ -1,7 +1,7 @@ import { BlockPermutation, ItemPotionComponent, ItemStack, Player } from '@minecraft/server' import { ActionFormData, ActionFormResponse } from '@minecraft/server-ui' -import { MinecraftItemTypes, MinecraftPotionLiquidTypes } from '@minecraft/vanilla-data' +import { MinecraftItemTypes, MinecraftPotionDeliveryTypes } from '@minecraft/vanilla-data' import { Items, totalCustomItems } from 'lib/assets/custom-items' import { textureData } from 'lib/assets/texture-data' import { translateTypeId } from 'lib/i18n/lang' @@ -44,8 +44,9 @@ export function getAuxTextureOrPotionAux(itemStack: ItemStack) { const potion = itemStack.getComponent(ItemPotionComponent.componentId) if (!potion) return getAuxOrTexture(MinecraftItemTypes.Potion) - const { potionEffectType: effect, potionLiquidType: liquid } = potion - const type = liquid.id !== MinecraftPotionLiquidTypes.Regular ? '_' + liquid.id.toLowerCase() : '' + // TODO ENSure it works correctly + const { potionEffectType: effect, potionDeliveryType: delivery } = potion + const type = delivery.id !== MinecraftPotionDeliveryTypes.Consume ? '_' + delivery.id.toLowerCase() : '' const effectId = (effect.id[0] ?? '').toLowerCase() + effect.id diff --git a/src/lib/form/lore.ts b/src/lib/form/lore.ts index e1c2584c..1d98f050 100644 --- a/src/lib/form/lore.ts +++ b/src/lib/form/lore.ts @@ -2,6 +2,7 @@ import { Player } from '@minecraft/server' import { table } from 'lib/database/abstract' import { i18n } from 'lib/i18n/text' import { form, NewFormCallback, NewFormCreator } from './new' +import { QuestForm } from './quest' interface LoreFormDb { seen: string[] @@ -11,7 +12,7 @@ type AddFn = (f: NewFormCreator) => void export type LF = Omit -export class LoreForm { +export class LoreForm extends QuestForm { static db = table('loreForm', () => ({ seen: [] })) static list: LoreForm[] = [] @@ -22,10 +23,11 @@ export class LoreForm { constructor( protected id: string, - protected form: NewFormCreator, - protected player: Player, - protected back: NewFormCallback, + form: NewFormCreator, + player: Player, + back: NewFormCallback, ) { + super(form, player, back) this.db = LoreForm.db.get(`${id} ${player.id}`) LoreForm.list.push(this) } diff --git a/src/lib/form/message.ts b/src/lib/form/message.ts index 55fb5d96..a524b58f 100644 --- a/src/lib/form/message.ts +++ b/src/lib/form/message.ts @@ -92,14 +92,14 @@ export class MessageForm { /** Shows MessageForm to the player */ export function ask( player: Player, - text: Text, + messageFormBody: Text, yesText: Text, yesAction?: VoidFunction, noText: Text = i18n`Отмена`, noAction?: VoidFunction, ) { return new Promise(resolve => { - new MessageForm(i18n`Вы уверены?`.to(player.lang), text.to(player.lang)) + new MessageForm(i18n`Вы уверены?`.to(player.lang), messageFormBody.to(player.lang)) .setButton1(yesText.to(player.lang), () => { yesAction?.() resolve(true) diff --git a/src/lib/form/modal.ts b/src/lib/form/modal.ts index 6e128ed3..6f6cb264 100644 --- a/src/lib/form/modal.ts +++ b/src/lib/form/modal.ts @@ -195,6 +195,10 @@ export class ModalForm v return this } + submitButton(text: string) { + this.form.submitButton(text) + } + /** * Shows this form to a player * diff --git a/src/lib/form/new.ts b/src/lib/form/new.ts index 71a992f1..b8f7836e 100644 --- a/src/lib/form/new.ts +++ b/src/lib/form/new.ts @@ -1,10 +1,10 @@ import { Player } from '@minecraft/server' import { ActionFormData, ActionFormResponse } from '@minecraft/server-ui' +import { defaultLang } from 'lib/assets/lang' import { ActionForm } from 'lib/form/action' import { ask } from 'lib/form/message' -import { FormCallback, showForm } from 'lib/form/utils' +import { showForm } from 'lib/form/utils' import { i18n, noI18n } from 'lib/i18n/text' -import { Quest } from 'lib/quest' import { doNothing } from 'lib/util' export type NewFormCallback = (player: Player, back?: NewFormCallback) => unknown @@ -43,6 +43,8 @@ class Form { private buttons: NewFormCallback[] = [] + private buttonText: string[] = [] + /** * Adds a button to this form * @@ -98,18 +100,12 @@ class Form { this.form.button(text.to(this.player.lang), icon ?? undefined) this.buttons.push(finalCallback) + this.buttonText.push(text.to(defaultLang)) return this } - quest(quest: Quest, textOverride?: Text, descriptionOverride?: Text) { - const rendered = quest.button.render(this.player, () => this.show(), descriptionOverride) - if (!rendered) return - - this.button(textOverride && rendered[0] === quest.name ? textOverride : rendered[0], rendered[1], rendered[2]) - } - /** - * Adds ask button to the form. Alias to {@link Form.button} + * Adds ask button to the form. Alias to {@link button} * * Ask is alias to {@link ask} * @@ -144,17 +140,17 @@ class Form { `Callback for ${response.selection} does not exists, only ${this.buttons.length} callbacks are available`, ) - if (typeof callback === 'function') { - if (__TEST__) { - // Call right here to throw error + if (__TEST__) { + await callback(this.player, this.show) + } else { + try { + if (typeof callback !== 'function') throw new Error('Callback is undefined') await callback(this.player, this.show) - } else { - try { - await callback(this.player, this.show) - } catch (e) { - new FormCallback(this.form, this.player, this.show).error(String(e)) - console.error('Form error', e) - } + } catch (e) { + console.error('FORM BUTTON ERROR', this.player.name, this.buttonText[response.selection], callback, e) + this.player.fail( + noI18n.error`Button error: ${this.buttonText[response.selection]}, erorr: ${e}. Сообщите администрации.`, + ) } } } @@ -187,8 +183,31 @@ export class ShowForm { title(player: Player) { const form = new Form(player) - this.create(form, { player, back: doNothing, params: this.params, self: doNothing }) - return form.currentTitle ?? 'No title' + const error = new Error('STOP FORM CREATION WE GOT TITLE') + let title: undefined | Text + + try { + this.create( + Object.setPrototypeOf( + { + title(f) { + title = f + throw error + }, + } satisfies Partial, + form, + ) as Form, + { + player, + back: doNothing, + params: this.params, + self: doNothing, + }, + ) + } catch (e) { + if (e !== error) throw e + } + return title ?? 'No title' } get command() { diff --git a/src/lib/form/quest.ts b/src/lib/form/quest.ts new file mode 100644 index 00000000..df93f5db --- /dev/null +++ b/src/lib/form/quest.ts @@ -0,0 +1,18 @@ +import { Quest } from 'lib/quest' +import { FormContext, NewFormCallback, NewFormCreator } from './new' +import { Player } from '@minecraft/server' + +export class QuestForm { + constructor( + protected form: NewFormCreator, + protected player: Player, + protected back: NewFormCallback, + ) {} + + quest(quest: Quest, textOverride?: Text, descriptionOverride?: Text) { + const rendered = quest.button.render(this.player, () => this.back, descriptionOverride) + if (!rendered) return + + this.form.button(textOverride && rendered[0] === quest.name ? textOverride : rendered[0], rendered[1], rendered[2]) + } +} diff --git a/src/lib/form/select-item.ts b/src/lib/form/select-item.ts index 60a9a57a..fdddcaed 100644 --- a/src/lib/form/select-item.ts +++ b/src/lib/form/select-item.ts @@ -2,7 +2,7 @@ import { ContainerSlot, EntityComponentTypes, EquipmentSlot, ItemStack, Player } import { enchantData } from 'lib/assets/texture-data' import { ChestForm } from 'lib/form/chest' import { BUTTON } from 'lib/form/utils' -import { langToken, translateEnchantment, translateToken } from 'lib/i18n/lang' +import { translateEnchantment, translateToken } from 'lib/i18n/lang' export type ItemFilter = (itemStack: ItemStack) => boolean export type OnSelect = (itemSlot: ContainerSlot, itemStack: ItemStack) => void @@ -69,10 +69,12 @@ function addItem( const nameTagPrefix = enchanted ? '§b' : '' const lore = [...enchantmentsToLore(item, player), ...slot.getLore(), ...addItemDurabilityToLore(item)] + // TODO Potion icons + chestForm.button({ slot: i, icon: typeId, - nameTag: nameTagPrefix + translateToken(langToken(typeId), player.lang), + nameTag: nameTagPrefix + translateToken(item.localizationKey, player.lang), amount: slot.amount, enchanted, lore, diff --git a/src/lib/form/select-player.ts b/src/lib/form/select-player.ts index ad617317..d9fe1051 100644 --- a/src/lib/form/select-player.ts +++ b/src/lib/form/select-player.ts @@ -1,6 +1,7 @@ import { Player, world } from '@minecraft/server' import { ArrayForm } from 'lib/form/array' import { BUTTON } from 'lib/form/utils' +import { getFullname } from 'lib/get-fullname' import { i18n } from 'lib/i18n/text' import { NewFormCallback } from './new' @@ -121,7 +122,7 @@ export function selectPlayer( return players }) .button(({ id, name, online }) => { - return [(online ? '§f' : '§8') + name, () => resolve({ id, name })] + return [getFullname(id, { nameColor: online ? '§f' : '§8' }), () => resolve({ id, name })] }) .back(back) .show(player) diff --git a/src/lib/i18n/intl.test.ts b/src/lib/i18n/intl.test.ts index 7371e90c..918b8962 100644 --- a/src/lib/i18n/intl.test.ts +++ b/src/lib/i18n/intl.test.ts @@ -1,7 +1,7 @@ -import { ms } from 'lib' import { Language, supportedLanguages } from 'lib/assets/lang' import { intlListFormat, intlRemaining } from './intl' import { i18n } from './text' +import { ms } from 'lib/utils/ms' describe('intlListFormat', () => { it('should translate', () => { @@ -62,4 +62,3 @@ describe('intlRemaining', () => { ).toMatchInlineSnapshot(`"1,001 days, 6 hours, 4 minutes"`) }) }) - diff --git a/src/lib/i18n/lang.ts b/src/lib/i18n/lang.ts index 2c12dfcb..98c80128 100644 --- a/src/lib/i18n/lang.ts +++ b/src/lib/i18n/lang.ts @@ -1,4 +1,4 @@ -import { Enchantment, RawMessage, RawText } from '@minecraft/server' +import { Enchantment, ItemStack, RawMessage, RawText, world } from '@minecraft/server' import { MinecraftEnchantmentTypes } from '@minecraft/vanilla-data' import { blockItemsLangJson, langs } from 'lib/assets/lang-big' import { addNamespace, inspect } from 'lib/util' @@ -20,6 +20,9 @@ import { sprintf } from './sprintf' export function translateTypeId(typeId: string, lang: Language) { return translateToken(langToken(typeId), lang) } + +const langTokenCache = new Map() + /** * Gets localization name of the ItemStack or Block * @@ -30,15 +33,30 @@ export function translateTypeId(typeId: string, lang: Language) { * @example * langToken(MinecraftEnchantmentTypes.Sharpness) // %enchantment.sharnpess.name */ +export function langToken(typeId: string): string { + if (blockItemsLangJson[typeId]) return blockItemsLangJson[typeId] + + try { + const item = new ItemStack(typeId) + langTokenCache.set(typeId, item.localizationKey) + return item.localizationKey + } catch {} + + try { + const block = world.overworld.getBlock({ x: 0, y: world.overworld.heightRange.max - 1, z: 0 }) + if (block) { + block.setType(typeId) + langTokenCache.set(typeId, block.localizationKey) + return block.localizationKey + } + } catch {} -export function langToken(item: { typeId: string } | string) { - const typeId = typeof item === 'object' ? item.typeId : item - return typeId in blockItemsLangJson ? blockItemsLangJson[typeId] : typeId + return typeId } /** - * Returns RawText representation of an Enchantment or Enchantment Type. If Enchanment is provided, also returns its as - * another translated RawMessage + * Returns translated string representation of an Enchantment or Enchantment Type. If Enchanment is provided, also + * returns its as another translated RawMessage */ export function translateEnchantment(e: MinecraftEnchantmentTypes | Enchantment, language: Language): string { let result = translateTypeId(addNamespace(typeof e === 'string' ? e : e.type.id), language) diff --git a/src/lib/i18n/text.test.ts b/src/lib/i18n/text.test.ts index b18a7baa..52199f68 100644 Binary files a/src/lib/i18n/text.test.ts and b/src/lib/i18n/text.test.ts differ diff --git a/src/lib/i18n/text.ts b/src/lib/i18n/text.ts index 152b97ca..c5766c50 100644 --- a/src/lib/i18n/text.ts +++ b/src/lib/i18n/text.ts @@ -1,264 +1,234 @@ -import { Player, RawText } from "@minecraft/server"; -import { defaultLang, Language } from "lib/assets/lang"; -import { extractedTranslatedPlurals } from "lib/assets/lang-messages"; -import { Vec } from "lib/vector"; -import { separateNumberWithDots } from "../util"; -import { stringify } from "../utils/inspect"; -import { ms } from "../utils/ms"; -import { intlPlural, intlRemaining } from "./intl"; +import { Player, RawText } from '@minecraft/server' +import { defaultLang, Language } from 'lib/assets/lang' +import { extractedTranslatedPlurals } from 'lib/assets/lang-messages' +import { Vec } from 'lib/vector' +import { separateNumberWithDots } from '../util' +import { stringify } from '../utils/inspect' +import { ms } from '../utils/ms' +import { intlPlural, intlRemaining } from './intl' import { - I18nMessage, - Message, - RawTextArg, - ServerSideI18nMessage, - SharedI18nMessage, - SharedI18nMessageJoin, -} from "./message"; -export type MaybeRawText = string | RawText; + I18nMessage, + Message, + RawTextArg, + ServerSideI18nMessage, + SharedI18nMessage, + SharedI18nMessageJoin, +} from './message' +export type MaybeRawText = string | RawText declare global { - /** Text that can be displayed on player screen and should support translation */ - type Text = string | Message; - - type SharedText = import("lib/i18n/message").SharedI18nMessage; - - namespace Text { - export interface Colors { - /** Color of strings, objects and other messages */ - unit: string; - /** Color of numbers and bigints */ - num: string; - /** Color of regular template text i18n`Like this one` */ - text: string; - } - - export interface Static { - /** - * @example - * t.time(3000) -> "3 секунды" - */ - time(time: number): Message; - - /** - * @example - * t.time(3000) -> "00:00:03" - * t.time(ms.from('min', 32) + 1000) -> "00:32:01" - * t.time(ms.from('day', 1) + ms.from('min', 32) + 1000) -> "1 д. 00:32:01" - * t.time(ms.from('day', 10000) + ms.from('min', 32) + 1000) -> "10000 д. 00:32:01" - */ - hhmmss(time: number): SharedI18nMessage | string; - - restyle: (colors: Partial) => T; - - style: Text.Colors; - } - - /** "§7Some long text §fwith substring§7 and number §64§7" */ - export type Fn = (text: TemplateStringsArray, ...args: Arg[]) => T; - - export type FnWithJoin = Fn & { join: Fn }; - - interface Modifiers { - /** "§cSome long text §fwith substring§c and number §74§c" */ - error: T; - - /** "§eSome long text §fwith substring§e and number §64§e" */ - warn: T; - - /** "§aSome long text §fwith substring§a and number §64§a" */ - success: T; - - /** "§3Some long text §fwith substring§3 and number §64§3" */ - accent: T; - - /** "§8Some long text §7with substring§8 and number §74§8" */ - disabled: T; - - /** "§r§6Some long text §f§lwith substring§r§6 and number §f4§r§6" */ - header: T; - - /** "Some long text with substring and number 4" */ - nocolor: T; - } - export type Chained> = T & - Static> & - Modifiers>>; - - export type Table = readonly (string | readonly [Text, unknown])[]; - } + /** Text that can be displayed on player screen and should support translation */ + type Text = string | Message + + type SharedText = import('lib/i18n/message').SharedI18nMessage + + namespace Text { + export interface Colors { + /** Color of strings, objects and other messages */ + unit: string + /** Color of numbers and bigints */ + num: string + /** Color of regular template text i18n`Like this one` */ + text: string + } + + export interface Static { + /** + * @example + * t.time(3000) -> "3 секунды" + */ + time(time: number): Message + + /** + * @example + * t.time(3000) -> "00:00:03" + * t.time(ms.from('min', 32) + 1000) -> "00:32:01" + * t.time(ms.from('day', 1) + ms.from('min', 32) + 1000) -> "1 д. 00:32:01" + * t.time(ms.from('day', 10000) + ms.from('min', 32) + 1000) -> "10000 д. 00:32:01" + */ + hhmmss(time: number): SharedI18nMessage | string + + restyle: (colors: Partial) => T + + style: Text.Colors + } + + /** "§7Some long text §fwith substring§7 and number §64§7" */ + export type Fn = (text: TemplateStringsArray, ...args: Arg[]) => T + + export type FnWithJoin = Fn & { join: Fn } + + interface Modifiers { + /** "§cSome long text §fwith substring§c and number §74§c" */ + error: T + + /** "§eSome long text §fwith substring§e and number §64§e" */ + warn: T + + /** "§aSome long text §fwith substring§a and number §64§a" */ + success: T + + /** "§3Some long text §fwith substring§3 and number §64§3" */ + accent: T + + /** "§8Some long text §7with substring§8 and number §74§8" */ + disabled: T + + /** "§r§6Some long text §f§lwith substring§r§6 and number §f4§r§6" */ + header: T + + /** "Some long text with substring and number 4" */ + nocolor: T + } + export type Chained> = T & Static> & Modifiers>> + + export type Table = readonly (string | readonly [Text, unknown])[] + } } export function textTable(table: Text.Table): Message { - return new ServerSideI18nMessage(defaultColors(), (lang) => { - const long = table.length > 5; - return table - .map((v, i) => { - if (typeof v === "string") return ""; - - const [key, value] = v; - return `${i % 2 === 0 && long ? "§f" : "§7"}${key.to( - lang - )}: ${textUnitColorize(value, undefined, lang)}`; - }) - .join("\n"); - }); + return new ServerSideI18nMessage(defaultColors(), lang => { + const long = table.length > 5 + return table + .map((v, i) => { + if (typeof v === 'string') return '' + + const [key, value] = v + return `${i % 2 === 0 && long ? '§f' : '§7'}${key.to(lang)}: ${textUnitColorize(value, undefined, lang)}` + }) + .join('\n') + }) } function createStyle(colors: Text.Colors) { - return Object.freeze(colors); + return Object.freeze(colors) } const styles = { - nocolor: createStyle({ text: "", unit: "", num: "" }), - header: createStyle({ text: "§r§6", num: "§f", unit: "§f§l" }), - error: createStyle({ num: "§7", text: "§c", unit: "§f" }), - warn: createStyle({ num: "§6", text: "§e", unit: "§f" }), - accent: createStyle({ num: "§6", text: "§3", unit: "§f" }), - success: createStyle({ num: "§6", text: "§a", unit: "§f" }), - disabled: createStyle({ num: "§7", text: "§8", unit: "§7" }), -}; - -export const noI18n = createStatic(undefined, undefined, (colors) => { - return function simpleStr(template, ...args) { - return Message.concatTemplateStringsArray( - defaultLang, - template, - args, - colors - ); - } as Text.Chained>; -}); - -export const i18n = createStatic(undefined, undefined, (colors) => { - const i18n = ((template, ...args) => - new I18nMessage(template, args, colors)) as Text.FnWithJoin< - I18nMessage, - unknown - >; - - i18n.join = (template, ...args) => new Message(template, args, colors); - - return i18n as Text.Chained>; -}); - -export const i18nShared = createStatic(undefined, undefined, (colors) => { - const i18n = ((template, ...args) => - new SharedI18nMessage(template, args, colors)) as Text.FnWithJoin< - SharedI18nMessage, - RawTextArg - >; - - i18n.join = (template, ...args) => - new SharedI18nMessageJoin(template, args, colors); - - return i18n as Text.Chained>; -}); - -export const i18nPlural = createStatic(undefined, undefined, (colors) => { - return function i18nPlural(template, n) { - const id = ServerSideI18nMessage.templateToId(template); - return new ServerSideI18nMessage(colors, (l) => { - const translated = - extractedTranslatedPlurals[l]?.[id]?.[intlPlural(l, n)] ?? template; - return ServerSideI18nMessage.concatTemplateStringsArray( - l, - translated, - [n], - colors, - [] - ); - }); - } as Text.Chained< - (template: TemplateStringsArray, n: number) => ServerSideI18nMessage - >; -}); - -function defaultColors( - colors: Partial = {} -): Required { - return { - unit: colors.unit ?? "§f", - text: colors.text ?? "§7", - num: colors.num ?? "§6", - }; + nocolor: createStyle({ text: '', unit: '', num: '' }), + header: createStyle({ text: '§r§6', num: '§f', unit: '§f§l' }), + error: createStyle({ num: '§7', text: '§c', unit: '§f' }), + warn: createStyle({ num: '§6', text: '§e', unit: '§f' }), + accent: createStyle({ num: '§6', text: '§3', unit: '§f' }), + success: createStyle({ num: '§6', text: '§a', unit: '§f' }), + disabled: createStyle({ num: '§7', text: '§8', unit: '§7' }), +} + +export const noI18n = createStatic(undefined, undefined, colors => { + return function simpleStr(template, ...args) { + return Message.concatTemplateStringsArray(defaultLang, template, args, colors) + } as Text.Chained> +}) + +export const i18n = createStatic(undefined, undefined, colors => { + const i18n = ((template, ...args) => new I18nMessage(template, args, colors)) as Text.FnWithJoin + + i18n.join = (template, ...args) => new Message(template, args, colors) + + return i18n as Text.Chained> +}) + +export const i18nShared = createStatic(undefined, undefined, colors => { + const i18n = ((template, ...args) => new SharedI18nMessage(template, args, colors)) as Text.FnWithJoin< + SharedI18nMessage, + RawTextArg + > + + i18n.join = (template, ...args) => new SharedI18nMessageJoin(template, args, colors) + + return i18n as Text.Chained> +}) + +export const i18nPlural = createStatic(undefined, undefined, colors => { + return function i18nPlural(template, n) { + const id = ServerSideI18nMessage.templateToId(template) + return new ServerSideI18nMessage(colors, l => { + const translated = extractedTranslatedPlurals[l]?.[id]?.[intlPlural(l, n)] ?? template + return ServerSideI18nMessage.concatTemplateStringsArray(l, translated, [n], colors, []) + }) + } as Text.Chained<(template: TemplateStringsArray, n: number) => ServerSideI18nMessage> +}) + +function defaultColors(colors: Partial = {}): Required { + return { + unit: colors.unit ?? '§f', + text: colors.text ?? '§7', + num: colors.num ?? '§6', + } } function createStatic>>( - colors: Partial = {}, - modifier = false, - createFn: (colors: Text.Colors) => T + colors: Partial = {}, + modifier = false, + createFn: (colors: Text.Colors) => T, ): T { - const dcolors = defaultColors(colors); - const fn = createFn(dcolors); - fn.style = dcolors; - fn.time = createTime(dcolors); - fn.hhmmss = createTimeHHMMSS(dcolors); - fn.restyle = (colors) => createStatic(colors, false, createFn); - - if (!modifier) { - fn.nocolor = createStatic(styles.nocolor, true, createFn); - fn.header = createStatic(styles.header, true, createFn); - fn.error = createStatic(styles.error, true, createFn); - fn.warn = createStatic(styles.warn, true, createFn); - fn.accent = createStatic(styles.accent, true, createFn); - fn.success = createStatic(styles.success, true, createFn); - fn.disabled = createStatic(styles.disabled, true, createFn); - } - return fn; + const dcolors = defaultColors(colors) + const fn = createFn(dcolors) + fn.style = dcolors + fn.time = createTime(dcolors) + fn.hhmmss = createTimeHHMMSS(dcolors) + fn.restyle = colors => createStatic(colors, false, createFn) + + if (!modifier) { + fn.nocolor = createStatic(styles.nocolor, true, createFn) + fn.header = createStatic(styles.header, true, createFn) + fn.error = createStatic(styles.error, true, createFn) + fn.warn = createStatic(styles.warn, true, createFn) + fn.accent = createStatic(styles.accent, true, createFn) + fn.success = createStatic(styles.success, true, createFn) + fn.disabled = createStatic(styles.disabled, true, createFn) + } + return fn } -const dayMs = ms.from("day", 1); -function createTimeHHMMSS(colors: Text.Colors): Text.Static["hhmmss"] { - return (n) => { - const hhmmss = new Date(n).toHHMMSS(); - if (n <= dayMs) return hhmmss; +const dayMs = ms.from('day', 1) +function createTimeHHMMSS(colors: Text.Colors): Text.Static['hhmmss'] { + return n => { + const hhmmss = new Date(n).toHHMMSS() + if (n <= dayMs) return hhmmss - const days = ~~(n / dayMs); - return i18nShared.restyle(colors)`${days} д. ${hhmmss}`; - }; + const days = ~~(n / dayMs) + return i18nShared.restyle(colors)`${days} д. ${hhmmss}` + } } -function createTime(colors: Text.Colors): Text.Static["time"] { - return (ms) => new ServerSideI18nMessage(colors, (l) => intlRemaining(l, ms)); +function createTime(colors: Text.Colors): Text.Static['time'] { + return ms => new ServerSideI18nMessage(colors, l => intlRemaining(l, ms)) } export function textUnitColorize( - v: unknown, - { unit, num }: Text.Colors = defaultColors(), - lang: Language | false + v: unknown, + { unit, num }: Text.Colors = defaultColors(), + lang: Language | false, ): string { - switch (typeof v) { - case "string": - if (v.includes("§l")) return unit + v + "§r"; - return unit + v; - case "undefined": - return ""; - case "object": - if (v instanceof Message) { - if (!lang) { - throw new TypeError( - `Text unit colorize cannot translate Message '${v.id}' if no locale was given!` - ); - } - - const vstring = v.to(lang); - return vstring.startsWith("§") ? vstring : unit + vstring; - } - if (v instanceof Player) { - return unit + v.name; - } else if (Vec.isVec(v)) { - return Vec.string(v, true); - } else return stringify(v); - - case "number": - return `${num}${separateNumberWithDots(v)}`; - case "symbol": - case "function": - case "bigint": - return "§c<>"; - case "boolean": - return (v ? i18n.nocolor`§fДа` : i18n.nocolor`§cНет`).to( - lang || defaultLang - ); - } + switch (typeof v) { + case 'string': + if (v.includes('§l')) return unit + v + '§r' + return unit + v + case 'undefined': + return '' + case 'object': + if (v instanceof Message) { + if (!lang) { + throw new TypeError(`Text unit colorize cannot translate Message '${v.id}' if no locale was given!`) + } + + const vstring = v.to(lang) + return vstring.startsWith('§') ? vstring : unit + vstring + } + if (v instanceof Player) { + return unit + v.name + } else if (Vec.isVec(v)) { + return Vec.string(v, true) + } else return stringify(v) + + case 'number': + return `${num}${separateNumberWithDots(v)}` + case 'symbol': + case 'function': + case 'bigint': + return '§c<>' + case 'boolean': + return (v ? i18n.nocolor`§fДа` : i18n.nocolor`§cНет`).to(lang || defaultLang) + } } diff --git a/src/lib/lib.d.ts b/src/lib/lib.d.ts index 3e1ea67d..473d27ca 100644 --- a/src/lib/lib.d.ts +++ b/src/lib/lib.d.ts @@ -1,5 +1,5 @@ import * as mc from '@minecraft/server' -import '../../tools/defines' +import '../../../tools/defines.d.ts' declare global { type VoidFunction = () => void @@ -94,15 +94,6 @@ type Narrowable = string | number | bigint | boolean declare module '@minecraft/server' { interface PlayerDatabase { name?: string | undefined - readonly role: Role - prevRole?: Role - quests?: import('./quest/quest').Quest.DB - achivs?: import('./achievements/achievement').Achievement.DB - join?: { - position?: number[] - stage?: number - } - unlockedPortals?: string[] } } diff --git a/src/lib/load/message1.ts b/src/lib/load/message1.ts index ba464668..40ba0174 100644 --- a/src/lib/load/message1.ts +++ b/src/lib/load/message1.ts @@ -1,7 +1,5 @@ -import { world } from '@minecraft/server' - if (__GIT__) console.info('§7' + __GIT__) const message = '§9> §fReloading script...' -if (!__VITEST__) console.info(message) -if (!__RELEASE__) world.say(message) +if (!__TEST__) console.info(message) +// if (!__RELEASE__) world.say(message) diff --git a/src/lib/load/message2.ts b/src/lib/load/message2.ts index 81cd160f..8a552dd1 100644 --- a/src/lib/load/message2.ts +++ b/src/lib/load/message2.ts @@ -8,8 +8,10 @@ system.delay(() => { if (__GIT__) import('lib/roles').then(({ is }) => { - for (const player of world.getAllPlayers()) - if (is(player.id, 'techAdmin')) player.tell(`§sCommit: §f${__GIT__.replace(/^Commit: /, '')}`) + world.afterEvents.worldLoad.subscribe(() => { + for (const player of world.getAllPlayers()) + if (is(player.id, 'techAdmin')) player.tell(`§sCommit: §f${__GIT__.replace(/^Commit: /, '')}`) + }) }) globalThis.loaded = 0 diff --git a/src/lib/load/watchdog.ts b/src/lib/load/watchdog.ts index e02a4786..45f6e81c 100644 --- a/src/lib/load/watchdog.ts +++ b/src/lib/load/watchdog.ts @@ -7,10 +7,6 @@ declare global { globalThis.loaded = Date.now() -//@ts-expect-error Define global intl if not defined -// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -globalThis.Intl ??= {} - const reasons: Record = { Hang: 'Скрипт завис', StackOverflow: 'Стэк переполнен', diff --git a/src/lib/location.test.ts b/src/lib/location.test.ts index 79fa85ed..605e9d06 100644 --- a/src/lib/location.test.ts +++ b/src/lib/location.test.ts @@ -1,6 +1,6 @@ import { Player } from '@minecraft/server' -import { Vec } from 'lib' import 'lib/database/scoreboard' +import { Vec } from 'lib/vector' import { location, locationWithRadius, locationWithRotation, migrateLocationName } from './location' import { Group } from './rpg/place' import { Settings } from './settings' @@ -240,7 +240,7 @@ describe('migrate', () => { expect(Settings.worldDatabase.get(group.id)['newname']).toBe('1 0 1') expect(consoleLogSpy.mock.calls[0]).toMatchInlineSnapshot(` [ - "§7Migrating location §flocations§7:§foldname§7 to §fid§7:§fnewname§7", + "Migrating location locations:oldname to id:newname", ] `) }) @@ -262,10 +262,10 @@ describe('migrate', () => { expect(consoleErrorSpy.mock.calls[0]).toMatchInlineSnapshot(` [ - "§cNo location found at §funknown group§c:§fwas never defined§c. Group: [ + "§eNo location found at §funknown group§e:§fwas never defined§e. Group: [ §2\`unknown group\`§r, §2\`id\`§r - ]§c", + ]§e", ] `) expect(Settings.worldDatabase.get(group.id)[point.shortId]).toBeUndefined() diff --git a/src/lib/location.ts b/src/lib/location.ts index 8b26f6a4..b9869f89 100644 --- a/src/lib/location.ts +++ b/src/lib/location.ts @@ -2,9 +2,10 @@ import { Player, TeleportOptions, Vector3, system, world } from '@minecraft/serv import { isEmpty } from 'lib/util' import { Vec, VecSymbol } from 'lib/vector' import { EventLoaderWithArg } from './event-signal' -import { i18n, noI18n } from './i18n/text' +import { noI18n } from './i18n/text' import { Place } from './rpg/place' import { Settings } from './settings' +import { onLoad } from './utils/load-ref' import { VectorInDimension } from './utils/point' interface LocationCommon { @@ -46,7 +47,7 @@ class Location { onChange: () => location.load(true), } - location.load() + onLoad(() => location.load()) location.firstLoad = true // Set floored value on reload @@ -166,42 +167,48 @@ export const locationWithRotation = LocationWithRotation.creator< /** Creates reference to a location that can be changed via settings command */ export const locationWithRadius = LocationWithRadius.creator() -system.delay(() => { - for (const [k, d] of Settings.worldDatabase.entries()) { - if (!Object.keys(d).length) { - Settings.worldDatabase.delete(k) +onLoad(() => { + system.delay(() => { + for (const [k, d] of Settings.worldDatabase.entries()) { + if (!Object.keys(d).length) { + Settings.worldDatabase.delete(k) + } } - } + }) }) /** Migration helper */ export function migrateLocationName(oldGroup: string, oldName: string, newGroup: string, newName: string) { - const group = Settings.worldDatabase.get(oldGroup) - const location = group[oldName] - if (typeof location !== 'undefined') { - console.debug(i18n`Migrating location ${oldGroup}:${oldName} to ${newGroup}:${newName}`) - - Settings.worldDatabase.get(newGroup)[newName] = location - - Reflect.deleteProperty(Settings.worldDatabase.get(oldGroup), oldName) - } else if (!Settings.worldDatabase.get(newGroup)[newName]) { - console.warn( - i18n.error`No location found at ${oldGroup}:${oldName}. Group: ${isEmpty(group) ? [...Settings.worldDatabase.keys()] : Object.keys(group)}`, - ) - } + onLoad(() => { + const group = Settings.worldDatabase.get(oldGroup) + const location = group[oldName] + if (typeof location !== 'undefined') { + console.debug(`Migrating location ${oldGroup}:${oldName} to ${newGroup}:${newName}`) + + Settings.worldDatabase.get(newGroup)[newName] = location + + Reflect.deleteProperty(Settings.worldDatabase.get(oldGroup), oldName) + } else if (!Settings.worldDatabase.get(newGroup)[newName]) { + console.warn( + noI18n.warn`No location found at ${oldGroup}:${oldName}. Group: ${isEmpty(group) ? [...Settings.worldDatabase.keys()] : Object.keys(group)}`, + ) + } + }) } export function migrateLocationGroup(from: string, to: string) { - const group = Settings.worldDatabase.get(from) - if (typeof group !== 'undefined') { - console.debug(i18n`Migrating group ${from} to ${to}`) - - Settings.worldDatabase.set(to, { ...Settings.worldDatabase.get(to), ...group }) - - Settings.worldDatabase.delete(from) - } else { - console.warn( - i18n.error`No group found for migration: ${from} -> ${to}. Groups: ${[...Settings.worldDatabase.keys()]}`, - ) - } + onLoad(() => { + const group = Settings.worldDatabase.get(from) + if (typeof group !== 'undefined') { + console.debug(noI18n`Migrating group ${from} to ${to}`) + + Settings.worldDatabase.set(to, { ...Settings.worldDatabase.get(to), ...group }) + + Settings.worldDatabase.delete(from) + } else { + console.warn( + noI18n.warn`No group found for migration: ${from} -> ${to}. Groups: ${[...Settings.worldDatabase.keys()]}`, + ) + } + }) } diff --git a/src/lib/mail/command.ts b/src/lib/mail/command.ts new file mode 100644 index 00000000..afabdcd6 --- /dev/null +++ b/src/lib/mail/command.ts @@ -0,0 +1,197 @@ +import { Player, world } from '@minecraft/server' +import { MinecraftItemTypes } from '@minecraft/vanilla-data' +import { ActionForm } from 'lib/form/action' +import { ArrayForm } from 'lib/form/array' +import { ask } from 'lib/form/message' +import { ModalForm } from 'lib/form/modal' +import { BUTTON } from 'lib/form/utils' +import { i18n } from 'lib/i18n/text' +import { Mail } from 'lib/mail' +import { Join } from 'lib/player-join' +import { is } from 'lib/roles' +import { Settings } from 'lib/settings' +import { Rewards } from 'lib/utils/rewards' + +const command = new Command('mail') + .setDescription(i18n`Посмотреть входящие сообщения почты`) + .setPermissions('member') + .executes(ctx => mailMenu(ctx.player)) + +const mailGroup = [i18n`Почта\n§7Прочтение сообщения, инфо при входе`, 'mail'] as const + +const getSettings = Settings.player(...mailGroup, { + mailReadOnOpen: { + name: i18n`Читать письмо при открытии`, + description: i18n`Помечать ли письмо прочитанным при открытии`, + value: true, + }, + mailClaimOnDelete: { + name: i18n`Собирать награды при удалении`, + description: i18n`Собирать ли награды при удалении письма`, + value: true, + }, +}) + +const getJoinSettings = Settings.player(...Join.getPlayerSettings.extend, { + unreadMails: { + name: i18n`Почта`, + description: i18n`Показывать ли при входе сообщение с кол-вом непрочитанных`, + value: true, + }, +}) + +world.afterEvents.playerSpawn.subscribe(({ player }) => { + if (!getJoinSettings(player).unreadMails) return + + const unreadCount = Mail.getUnreadMessagesCount(player.id) + if (unreadCount === 0) return + + player.info(i18n.join`${i18n.header`Почта:`} ${i18n`У вас ${unreadCount} непрочитанных сообщений!`} ${command}`) +}) + +export function mailMenu(player: Player, back?: VoidFunction) { + const letters = Mail.getLetters(player.id) + new ArrayForm(i18n`Почта`.badge(Mail.getUnreadMessagesCount(player.id)), letters) + .filters({ + unread: { + name: i18n`Непрочитанные`, + description: i18n`Показывать только непрочитанные сообщения`, + value: false, + }, + unclaimed: { + name: i18n`Несобранные награды`, + description: i18n`У письма есть несобранные награды`, + value: false, + }, + sort: { + name: i18n`Сортировать по`, + value: [ + ['date', i18n`Дате`], + ['name', i18n`Имени`], + ], + }, + }) + .addCustomButtonBeforeArray((f, _, back) => { + if (letters.length) { + f.button('Прочитать все\n§7(и собрать награды если есть)', () => { + Mail.readAllAndClaimRewards(player) + player.success() + mailMenu(player) + }) + } else { + f.button('Все прочитано', back) + } + + if (is(player.id, 'moderator')) { + f.button('Объявление', BUTTON['+'], () => { + new ModalForm('Объявление для всего сервера') + .addTextField('Заголовок', 'вы крутые там д0а') + .addTextField('Строка 1', 'мы вас поздравляем') + .addTextField('Строка2', 'вы теперь можете') + .addTextField('Строка3', 'читать все сообщения в почте') + .addTextField('Строка 4', 'да') + .addTextField('Строка5', 'вот.') + .addSlider('Алмазов за прочтение', 0, 100, 1, 5) + .show(player, (ctx, ...args) => { + const diamonds = args.pop() as number + const rewards = new Rewards() + if (diamonds) rewards.item(MinecraftItemTypes.Diamond, diamonds) + Mail.sendMultiple( + [...Player.database.keys()], + i18n`${args[0]}`, + i18n`${args.slice(1).filter(Boolean).join('\n')}`, + rewards, + ) + mailMenu(player) + }) + }) + } + }) + .button(({ letter, index }) => { + const name = `${letter.read ? '§7' : '§f'}${letter.title.replace(/§./g, '')}${letter.read ? '\n§8' : '§c*\n§7'}${letter.content.replace(/§./g, '')}` + return [ + name, + () => { + letterDetailsMenu({ letter, index }, player) + if (getSettings(player).mailReadOnOpen) Mail.readMessage(player.id, index) + }, + ] + }) + .sort((keys, filters) => { + if (filters.unread) keys = keys.filter(letter => !letter.letter.read) + + if (filters.unclaimed) keys = keys.filter(letter => !letter.letter.rewardsClaimed) + + filters.sort === 'name' + ? keys.sort((letterA, letterB) => letterA.letter.title.localeCompare(letterB.letter.title)) + : keys.reverse() + + return keys + }) + .back(back) + .show(player) +} + +function letterDetailsMenu( + { letter, index }: ReturnType<(typeof Mail)['getLetters']>[number], + player: Player, + back = () => mailMenu(player), + message = '', +) { + const settings = getSettings(player) + // TODO Fix collors + // TODO Rewrite to use new form + const form = new ActionForm( + letter.title, + i18n`${message}${letter.content}\n\n§l§fНаграды:§r\n${Rewards.restore(letter.rewards).toString(player)}`.to( + player.lang, + ), + ).addButtonBack(back, player.lang) + + if (!letter.rewardsClaimed && letter.rewards.length) + if (player.database.inv !== 'anarchy') { + form.button(i18n.disabled`Забрать награду`.to(player.lang), () => + letterDetailsMenu( + { letter, index }, + player, + back, + i18n.error`Вы не можете забрать награды не находясь на анархии`.to(player.lang), + ), + ) + } else { + form.button(i18n`Забрать награду`.to(player.lang), () => { + Mail.claimRewards(player, index) + letterDetailsMenu( + { letter, index }, + player, + back, + message + i18n.success`Награда успешно забрана!\n\n`.to(player.lang), + ) + }) + } + + if (!letter.read && !settings.mailReadOnOpen) + form.button(i18n`Пометить как прочитанное`.to(player.lang), () => { + Mail.readMessage(player.id, index) + back() + }) + + let deleteDescription = i18n.error`Удалить письмо?`.to(player.lang) + if (!letter.rewardsClaimed) { + if (getSettings(player).mailClaimOnDelete) { + deleteDescription += i18n` Все награды будут собраны автоматически`.to(player.lang) + } else { + deleteDescription += i18n` Вы потеряете все награды, прикрепленные к письму!`.to(player.lang) + } + } + + form.button(i18n.error`Удалить письмо`.to(player.lang), null, () => { + ask(player, deleteDescription, i18n`Удалить`, () => { + if (getSettings(player).mailClaimOnDelete) Mail.claimRewards(player, index) + Mail.deleteMessage(player, index) + back() + }) + }) + + form.show(player) +} diff --git a/src/lib/mail.test.ts b/src/lib/mail/index.test.ts similarity index 96% rename from src/lib/mail.test.ts rename to src/lib/mail/index.test.ts index bdce007c..c97392d5 100644 --- a/src/lib/mail.test.ts +++ b/src/lib/mail/index.test.ts @@ -3,7 +3,7 @@ import 'lib/extensions/player' import { Mail } from 'lib/mail' import { Rewards } from 'lib/utils/rewards' import { TEST_clearDatabase } from 'test/utils' -import { i18n } from './i18n/text' +import { i18n } from '../i18n/text' describe('mail', () => { beforeEach(() => { diff --git a/src/lib/mail.ts b/src/lib/mail/index.ts similarity index 86% rename from src/lib/mail.ts rename to src/lib/mail/index.ts index c1109caf..f5f9748c 100644 --- a/src/lib/mail.ts +++ b/src/lib/mail/index.ts @@ -1,10 +1,11 @@ import { Player } from '@minecraft/server' import { Rewards } from 'lib/utils/rewards' -import { defaultLang } from './assets/lang' -import { table } from './database/abstract' -import { Message } from './i18n/message' -import { i18n, noI18n } from './i18n/text' +import { defaultLang } from '../assets/lang' +import { table } from '../database/abstract' +import { Message } from '../i18n/message' +import { i18n, noI18n } from '../i18n/text' +import './command' /** A global letter is a letter sent to multiple players */ interface GlobalLetter { @@ -44,6 +45,7 @@ export class Mail { this.dbPlayers .get(playerId) // TODO Use player offline lang once added + .push({ read: false, title: title.to(defaultLang), @@ -55,16 +57,16 @@ export class Mail { private static inform(playerId: string, title: Message) { const player = Player.getById(playerId) - if (player) player.info(i18n`${i18n.header`Почта`}: ${title}, просмотреть: .mail`) + if (player) player.info(i18n`${i18n.header`Почта`}: ${title}, просмотреть: /mail`) } /** * Sends a mail to multiple players * - * @param playerIds The recievers - * @param title The letter title - * @param content The letter content - * @param rewards The attached rewards + * @param {string[]} playerIds The recievers + * @param {string} title The letter title + * @param {string} content The letter content + * @param {Rewards} rewards The attached rewards */ static sendMultiple(playerIds: readonly string[], title: Message, content: Message, rewards = new Rewards()) { let id = new Date().toISOString() @@ -158,6 +160,17 @@ export class Mail { letter.read = true } + static readAllAndClaimRewards(player: Player) { + for (const { index, letter } of this.getLetters(player.id)) { + try { + this.readMessage(player.id, index) + this.claimRewards(player, index) + } catch (e) { + console.error('Failed to read and claim:', player.name, index, letter, e) + } + } + } + /** * Deletes a message from a player's mailbox * diff --git a/src/lib/player-join.ts b/src/lib/player-join.ts index 9a0fbda7..1fe76f6a 100644 --- a/src/lib/player-join.ts +++ b/src/lib/player-join.ts @@ -1,43 +1,36 @@ import { Player, system, world } from '@minecraft/server' -import { sendPacketToStdout } from 'lib/bds/api' import { EventSignal } from 'lib/event-signal' -import { i18n, noI18n } from 'lib/i18n/text' +import { i18n } from 'lib/i18n/text' import { Settings } from 'lib/settings' import { util } from 'lib/util' import { Core } from './extensions/core' import { ActionbarPriority } from './extensions/on-screen-display' -import { getFullname } from './get-fullname' +import { Singleton } from './utils/singleton' +import { WeakPlayerMap } from './weak-player-storage' -class JoinBuilder { - config = { - /** Array with strings to show on join. They will change every second. You can use $ from animation.vars */ - title_animation: { - stages: ['» $title «', '» $title «'], - /** @type {Record} */ - vars: { title: `${Core.name}§r§f` }, - }, - actionBar: '', // Optional - subtitle: i18n.nocolor`Добро пожаловать!`, // Optional - messages: { - air: i18n.nocolor`§8Очнулся в воздухе`, - ground: i18n.nocolor`§8Проснулся`, - sound: 'break.amethyst_cluster', - }, +export declare namespace Join { + interface Database { + position?: number[] + stage?: number } - onMoveAfterJoin = new EventSignal<{ player: Player; joinTimes: number; firstJoin: boolean }>() + type Where = 'air' | 'ground' +} - onFirstTimeSpawn = new EventSignal() +export abstract class Join extends Singleton { + static onMoveAfterJoin = new EventSignal<{ player: Player; joinTimes: number; firstJoin: boolean }>() + + constructor() { + super() + system.runPlayerInterval(player => this.onInterval(player), 'joinInterval', 20) - eventsDefaultSubscribers = { - time: this.onMoveAfterJoin.subscribe(({ player, firstJoin }) => { - if (!firstJoin) player.tell(i18n.nocolor`${timeNow()}, ${player.name}!\n§r§3Время §b• §3${shortTime()}`) - }, -1), - playerSpawn: world.afterEvents.playerSpawn.subscribe(({ player, initialSpawn }) => { - if (!initialSpawn) return - this.setPlayerJoinPosition(player) - EventSignal.emit(this.onFirstTimeSpawn, player) - }), + new Command('join') + .setDescription(i18n`Имитирует первый вход`) + .setPermissions('techAdmin') + .executes(ctx => { + const player = ctx.player + this.emitFirstJoin(player) + }) } private playerAt(player: Player) { @@ -46,130 +39,154 @@ class JoinBuilder { return [location.x, location.y, location.z, rotation.x, rotation.y].map(Math.floor) } - setPlayerJoinPosition(player: Player) { - player.database.join ??= {} + /** Used when you need to e.g. teleport users when they join */ + playerSpawnEventSubscriber = world.afterEvents.playerSpawn.subscribe(({ player, initialSpawn }) => { + if (!initialSpawn) return + this.setPlayerJoinPosition(player) + }) + /** Used when you need to e.g. teleport users when they join */ + setPlayerJoinPosition(player: Player) { if (!player.isValid) return - player.database.join.position = this.playerAt(player) + this.joinPositions.set(player, { position: this.playerAt(player) }) } - constructor() { - system.runPlayerInterval( - player => { - if (!player.isValid) return - const db = player.database.join - - if (Array.isArray(db?.position)) { - const time = util.benchmark('joinInterval', 'join') - const notMoved = Array.equals(db.position, this.playerAt(player)) - - if (notMoved) { - // Player still stays at joined position... - if (player.isOnGround || player.isFlying) { - // Player will not move, show animation - db.stage = db.stage ?? -1 - db.stage++ - if (isNaN(db.stage) || db.stage >= Join.config.title_animation.stages.length) db.stage = 0 - - // Creating title - let title = Join.config.title_animation.stages[db.stage] ?? '' - for (const [key, value] of Object.entries(Join.config.title_animation.vars)) { - title = title.replace('$' + key, value) - } - - // Show actionBar - if (Join.config.actionBar) { - player.onScreenDisplay.setActionBar(Join.config.actionBar, ActionbarPriority.Highest) - } - - player.onScreenDisplay.setHudTitle(title, { - fadeInDuration: 0, - fadeOutDuration: 20, - stayDuration: 40, - subtitle: Join.config.subtitle.to(player.lang), - }) - } else { - // Player joined in air - this.join(player, 'air') - } - } else { - // Player moved on ground - this.join(player, 'ground') - } - - time() - } - }, - 'joinInterval', - 20, - ) - - new Command('join') - .setDescription(i18n`Имитирует первый вход`) - .setPermissions('member') - .executes(ctx => { - const player = ctx.player - this.emitFirstJoin(player) - }) + isJoining(player: Player) { + return this.joinPositions.has(player) } - private join(player: Player, where: 'air' | 'ground') { - delete player.database.join - player.scores.joinTimes++ + protected joinPositions = new WeakPlayerMap({ removeOnLeave: true }) - const message = Join.config.messages[where] + private onInterval(player: Player) { + if (!player.isValid) return + const db = this.joinPositions.get(player) - __SERVER__ && - sendPacketToStdout('joinOrLeave', { - name: player.name, - role: getFullname(player, { name: false }), - status: 'move', - where, - print: noI18n.nocolor`${'§l§f' + player.name} ${getFullname(player, { name: false })}: ${message}`, - }) + if (Array.isArray(db?.position)) { + const time = util.benchmark('joinInterval', 'join') + const notMoved = Array.equals(db.position, this.playerAt(player)) - for (const other of world.getPlayers()) { - if (other.id === player.id) continue + if (notMoved) { + if (player.isOnGround || player.isFlying) this.notMovingInterval?.(player, db) + else this.joinedAt(player, 'air') + } else this.joinedAt(player, 'ground') - const settings = this.settings(other) - if (settings.sound) other.playSound(Join.config.messages.sound) - if (settings.message) other.tell(i18n.nocolor.join`§7${player.name} ${message}`) + time() } + } - EventSignal.emit(this.onMoveAfterJoin, { + private joinedAt(player: Player, where: Join.Where) { + this.joinPositions.delete(player) + player.scores.joinTimes++ + + this.onJoinMove(where, player) + + EventSignal.emit(Join.onMoveAfterJoin, { player, joinTimes: player.scores.joinTimes, firstJoin: player.scores.joinTimes === 1, }) } - settings = Settings.player(i18n`Вход\n§7Все действия, связанные со входом`, 'join', { - message: { name: i18n`Сообщение`, description: i18n`о входе других игроков`, value: true }, - sound: { name: i18n`Звук`, description: i18n`при входе игроков`, value: true }, + protected notMovingInterval?(player: Player, db: Join.Database): void + + protected abstract onJoinMove(where: Join.Where, player: Player): void + + /** Used when you test how join looks or when you add /wipe like command */ + emitFirstJoin(player: Player) { + EventSignal.emit(Join.onMoveAfterJoin, { player, joinTimes: 1, firstJoin: true }) + } + + static getPlayerSettings = Settings.player(i18n`Вход\n§7Все действия, связанные со входом`, 'join', { time: { name: i18n`Время`, description: i18n`при входе`, value: true }, }) - emitFirstJoin(player: Player) { - EventSignal.emit(this.onMoveAfterJoin, { player, joinTimes: 1, firstJoin: true }) + protected timeListener = Join.onMoveAfterJoin.subscribe(({ player, firstJoin }) => { + if (!firstJoin && Join.getPlayerSettings(player).time) + player.tell(i18n.nocolor`${this.timeNow()}, ${player.name}!\n§r§3Время §b• §3${this.shortTime()}`) + }, -1) + + /** Выводит строку времени */ + private timeNow(): Text { + const time = new Date(Date()).getHours() + 3 + if (time < 6) return i18n`§9Доброй ночи` + if (time < 12) return i18n`§6Доброе утро` + if (time < 18) return i18n`§bДобрый день` + return i18n`§3Добрый вечер` + } + + // TODO Use date.toHHMMSS + /** Выводит время в формате 00:00 */ + private shortTime(): string { + const time = new Date(Date()) + time.setHours(time.getHours() + 3) + return `${time.getHours()}:${String(time.getMinutes()).padStart(2, '0')}` } } -export const Join = new JoinBuilder() +export abstract class JoinWithTitle extends Join { + config = { + /** Array with strings to show on join. They will change every second. You can use $ from animation.vars */ + titleAnimation: { + stages: ['» $title «', '» $title «'], + vars: { title: `${Core.name}§r§f` } as Record, + }, + actionBar: '', // Optional + subtitle: i18n.nocolor`Добро пожаловать!`, // Optional + } + + protected notMovingInterval(player: Player, db: Join.Database): void { + if (this.config.titleAnimation.stages.length) { + db.stage = db.stage ?? -1 + db.stage++ + if (isNaN(db.stage) || db.stage >= this.config.titleAnimation.stages.length) db.stage = 0 + + // Creating title + let title = this.config.titleAnimation.stages[db.stage] ?? '' + for (const [key, value] of Object.entries(this.config.titleAnimation.vars)) { + title = title.replace('$' + key, value) + } + + player.onScreenDisplay.setHudTitle(title, { + fadeInDuration: 0, + fadeOutDuration: 20, + stayDuration: 40, + subtitle: this.config.subtitle.to(player.lang), + }) + } -/** Выводит строку времени */ -function timeNow(): Text { - const time = new Date(Date()).getHours() + 3 - if (time < 6) return i18n`§9Доброй ночи` - if (time < 12) return i18n`§6Доброе утро` - if (time < 18) return i18n`§bДобрый день` - return i18n`§3Добрый вечер` + // Show actionBar + if (this.config.actionBar) { + player.onScreenDisplay.setActionBar(this.config.actionBar, ActionbarPriority.Highest) + } + } } -// TODO Use date.toHHMMSS -/** Выводит время в формате 00:00 */ -function shortTime(): string { - const time = new Date(Date()) - time.setHours(time.getHours() + 3) - const min = String(time.getMinutes()) - return `${time.getHours()}:${min.length == 2 ? min : '0' + min}` +export abstract class JoinWithMessage extends JoinWithTitle { + protected messages = { + air: i18n.nocolor`§8Очнулся в воздухе`, + ground: i18n.nocolor`§8Проснулся`, + } + + protected sound = 'break.amethyst_cluster' + + protected onJoinMove(where: Join.Where, player: Player) { + const message = this.messages[where] + + this.onJoinMoveMessage(player, where, message) + + for (const other of world.getPlayers()) { + if (other.id === player.id) continue + + const settings = this.getPlayerSettingsWithMessage(other) + if (settings.sound) other.playSound(this.sound) + if (settings.message) other.tell(i18n.nocolor.join`§7${player.name} ${message}`) + } + } + + abstract onJoinMoveMessage(player: Player, where: Join.Where, message: Text): void + + getPlayerSettingsWithMessage = Settings.player(...Join.getPlayerSettings.extend, { + message: { name: i18n`Сообщение`, description: i18n`о входе других игроков`, value: true }, + sound: { name: i18n`Звук`, description: i18n`при входе игроков`, value: true }, + }) } diff --git a/src/lib/player-move.ts b/src/lib/player-move.ts index a4842023..c0581a2a 100644 --- a/src/lib/player-move.ts +++ b/src/lib/player-move.ts @@ -2,6 +2,7 @@ import { Player, ShortcutDimensions, system, world } from '@minecraft/server' import type { Region } from 'lib/region' import { Vec } from 'lib/vector' import { EventSignal } from './event-signal' +import { onLoad } from './utils/game' import { VectorInDimension } from './utils/point' import { WeakPlayerMap } from './weak-player-storage' @@ -31,8 +32,10 @@ export function anyPlayerNearRegion(region: Region, radius: number) { return false } -// Do it sync on first run because some of the funcs above use it sync. It will start interval too -for (const _ of jobPlayerPosition()) void 0 +onLoad(() => { + // Do it sync on first run because some of the funcs above use it sync. It will start interval too + for (const _ of jobPlayerPosition()) void 0 +}) function jobInterval() { system.delay(() => system.runJob(jobPlayerPosition())) diff --git a/src/lib/portals.ts b/src/lib/portals.ts index 38649b96..edae1844 100644 --- a/src/lib/portals.ts +++ b/src/lib/portals.ts @@ -41,6 +41,7 @@ export class Portal { }: { lockAction?: LockActionCheckOptions; fadeScreen?: boolean; title?: string } = {}, updateHud?: VoidFunction, ) { + console.log('Portal teleport') if (!this.canTeleport(player, lockAction)) return if (fadeScreen) this.fadeScreen(player) diff --git a/src/lib/quest/quest.ts b/src/lib/quest/quest.ts index b52150a0..963064b4 100644 --- a/src/lib/quest/quest.ts +++ b/src/lib/quest/quest.ts @@ -12,6 +12,12 @@ import { QuestButton } from './button' import { PlayerQuest } from './player' import { QS } from './step' +declare module '@minecraft/server' { + interface PlayerDatabase { + quests?: Quest.DB + } +} + export declare namespace Quest { interface DB { active: { id: string; i: number; db?: unknown }[] diff --git a/src/lib/recurring-event.ts b/src/lib/recurring-event.ts index bfdae62d..0ddca771 100644 --- a/src/lib/recurring-event.ts +++ b/src/lib/recurring-event.ts @@ -4,6 +4,7 @@ import { fromMsToTicks } from 'lib/utils/ms' import { table } from './database/abstract' import { setDefaults } from './database/defaults' import later, { Later } from './utils/later' +import { onLoad } from './utils/load-ref' later.runtime = { setTimeout: (fn, delayMs) => system.runTimeout(fn, 'laterSetTimeout', fromMsToTicks(delayMs)), @@ -31,11 +32,11 @@ type RecurringEventCallback = (storage: T, ct export class RecurringEvent { static db = table('recurringEvents', () => ({ lastRun: '', storage: {} })) - protected db: DB - protected schedule: Later.Schedule - protected interval: Later.Timer + protected db!: DB + + protected interval!: Later.Timer stop() { this.interval.clear() @@ -57,12 +58,14 @@ export class RecurringEvent { { runAfterOffline = false }: RecurringOptions = {}, ) { this.schedule = later.schedule(scheduleData) - this.db = RecurringEvent.db.get(id) as DB - this.db.storage = setDefaults(this.db.storage, this.createStorage()) + onLoad(() => { + this.db = RecurringEvent.db.get(id) as DB + this.db.storage = setDefaults(this.db.storage, this.createStorage()) - this.interval = later.setInterval(this.run.bind(this), scheduleData) + this.interval = later.setInterval(this.run.bind(this), scheduleData) - if (runAfterOffline) this.run(this.db.lastRun === this.getLastRunDate().toString()) + if (runAfterOffline) this.run(this.db.lastRun === this.getLastRunDate().toString()) + }) } protected run(restoreAfterOffline = false) { diff --git a/src/lib/region/areas/area.test.ts b/src/lib/region/areas/area.test.ts index a14336a7..3d37b24c 100644 --- a/src/lib/region/areas/area.test.ts +++ b/src/lib/region/areas/area.test.ts @@ -23,13 +23,13 @@ describe('area reg', () => { const mock = vi.spyOn(console, 'warn').mockImplementation(() => {}) expect(TestArea.fromJson({ t: 'unknown', d: {} })).toMatchInlineSnapshot(`undefined`) expect(mock.mock.calls[0]?.[0]).toMatchInlineSnapshot( - `"§7[Area][Database] No area found for §funknown§7. Maybe you forgot to register kind or import file?"`, + `"§e[Area][Database] No area found for §funknown§e. Maybe you forgot to register kind or import file?"`, ) mock.mockClear() Area.loaded = true expect(() => { - TestArea.asSaveableArea() + TestArea.asSaveableArea('test') }).toThrowErrorMatchingInlineSnapshot( `[Error: Registering area type test failed. Regions are already restored from json. Registering area should occur on the import-time.]`, ) diff --git a/src/lib/region/areas/area.ts b/src/lib/region/areas/area.ts index d50182c3..22916e34 100644 --- a/src/lib/region/areas/area.ts +++ b/src/lib/region/areas/area.ts @@ -1,6 +1,6 @@ import { Dimension, system, world } from '@minecraft/server' -import { i18n, noI18n } from 'lib/i18n/text' -import { stringifyError } from 'lib/util' +import { noI18n } from 'lib/i18n/text' +import { stringifyError, util } from 'lib/util' import { AbstractPoint } from 'lib/utils/point' import { Vec } from 'lib/vector' @@ -18,19 +18,18 @@ export abstract class Area { static loaded = false - static asSaveableArea(this: T) { + static asSaveableArea(this: T, type: string) { const b = this as AreaWithType - world.afterEvents.worldLoad.subscribe(() => { - b.type = new (this as unknown as AreaCreator)({}).type + b.type = type + ;(b.prototype as Area).type = type - if ((this as unknown as typeof Area).loaded) { - throw new Error( - `Registering area type ${b.type} failed. Regions are already restored from json. Registering area should occur on the import-time.`, - ) - } + if ((this as unknown as typeof Area).loaded) { + throw new Error( + `Registering area type ${b.type} failed. Regions are already restored from json. Registering area should occur on the import-time.`, + ) + } - ;(this as unknown as typeof Area).areas.push(b as unknown as AreaWithType) - }) + ;(this as unknown as typeof Area).areas.push(b as unknown as AreaWithType) return b } @@ -39,7 +38,9 @@ export abstract class Area { const area = Area.areas.find(e => e.type === a.t) if (!area) { - console.warn(i18n`[Area][Database] No area found for ${a.t}. Maybe you forgot to register kind or import file?`) + console.warn( + noI18n.warn`[Area][Database] No area found for ${a.t}. Maybe you forgot to register kind or import file?`, + ) return } @@ -51,7 +52,7 @@ export abstract class Area { public dimensionType: DimensionType = 'overworld', ) {} - abstract type: string + type!: string /** Checks if the point is inside the area */ isIn(point: AbstractPoint) { @@ -103,11 +104,13 @@ export abstract class Area { } forEachVector( - callback: (vector: Vector3, isIn: boolean, dimension: Dimension) => void | Promise | symbol, + callback: (vector: Vector3, isIn: boolean, dimension: Dimension) => void | Promise, yieldEach = 10, ) { const { edges, dimension } = this const isIn = (vector: Vector3) => this.isIn({ location: vector, dimensionType: this.dimensionType }) + const { max, min } = this.dimension.heightRange + const stack = new Error().stack return new Promise((resolve, reject) => { system.runJob( @@ -115,7 +118,12 @@ export abstract class Area { try { let i = 0 for (const vector of Vec.forEach(...edges)) { - callback(vector, isIn(vector), dimension) + if (vector.y < min || vector.y > max) { + yield + continue + } + + util.catch(() => callback(vector, isIn(vector), dimension), 'Area.forEachVector', stack) i++ if (i % yieldEach === 0) yield } diff --git a/src/lib/region/areas/chunk-cube.ts b/src/lib/region/areas/chunk-cube.ts index 5ed9d2a2..20802a01 100644 --- a/src/lib/region/areas/chunk-cube.ts +++ b/src/lib/region/areas/chunk-cube.ts @@ -19,8 +19,6 @@ class ChunkCube extends Area { super(database, dimensionType) } - type = 'c' - isNear(point: AbstractPoint, distance: number): boolean { const { location: vector, dimensionType } = toPoint(point) if (!this.isOurDimension(dimensionType)) return false @@ -60,4 +58,4 @@ class ChunkCube extends Area { } } -export const ChunkCubeArea = ChunkCube.asSaveableArea() +export const ChunkCubeArea = ChunkCube.asSaveableArea('c') diff --git a/src/lib/region/areas/cut.ts b/src/lib/region/areas/cut.ts index 62097f76..f34f1102 100644 --- a/src/lib/region/areas/cut.ts +++ b/src/lib/region/areas/cut.ts @@ -14,8 +14,6 @@ interface CutDatabase extends JsonObject { } class Cut extends Area { - type = 'cut' - protected parent?: Area constructor(database: CutDatabase, dimensionType?: DimensionType) { @@ -63,4 +61,4 @@ class Cut extends Area { } } -export const CutArea = Cut.asSaveableArea() +export const CutArea = Cut.asSaveableArea('cut') diff --git a/src/lib/region/areas/cylinder.ts b/src/lib/region/areas/cylinder.ts index f691a525..fa1b1fc8 100644 --- a/src/lib/region/areas/cylinder.ts +++ b/src/lib/region/areas/cylinder.ts @@ -3,8 +3,6 @@ import { Vec, VecXZ } from 'lib/vector' import { Area } from './area' class Cylinder extends Area<{ center: { x: number; z: number; y: number }; radius: number; yradius: number }> { - type = 'ss' - isNear(point: AbstractPoint, distance: number): boolean { const { location: vector, dimensionType } = toPoint(point) if (!this.isOurDimension(dimensionType)) return false @@ -45,4 +43,4 @@ class Cylinder extends Area<{ center: { x: number; z: number; y: number }; radiu } } -export const CylinderArea = Cylinder.asSaveableArea() +export const CylinderArea = Cylinder.asSaveableArea('ss') diff --git a/src/lib/region/areas/flattened-sphere.ts b/src/lib/region/areas/flattened-sphere.ts index dcff38e0..a4679b51 100644 --- a/src/lib/region/areas/flattened-sphere.ts +++ b/src/lib/region/areas/flattened-sphere.ts @@ -8,8 +8,6 @@ class FlattenedSphere extends Area<{ rx: number ry: number }> { - type = 'fs' - isNear(point: AbstractPoint, distance: number): boolean { const { location: vector, dimensionType } = toPoint(point) if (!this.isOurDimension(dimensionType)) return false @@ -69,4 +67,4 @@ class FlattenedSphere extends Area<{ } } -export const FlattenedSphereArea = FlattenedSphere.asSaveableArea() +export const FlattenedSphereArea = FlattenedSphere.asSaveableArea('fs') diff --git a/src/lib/region/areas/rectangle.test.ts b/src/lib/region/areas/rectangle.test.ts index e069683c..79bed348 100644 --- a/src/lib/region/areas/rectangle.test.ts +++ b/src/lib/region/areas/rectangle.test.ts @@ -1,5 +1,6 @@ import { consoleLang } from 'lib/assets/lang' import { textTable } from 'lib/i18n/text' +import { util } from 'lib/util' import { createPoint } from 'lib/utils/point' import { Vec } from 'lib/vector' import { RectangleArea } from './rectangle' @@ -82,6 +83,7 @@ describe('rectangle', () => { it('should call forEachVector', async () => { const rect = new RectangleArea({ from: { x: 0, y: 0, z: 0 }, to: { x: 2, y: 3, z: 2 } }, 'overworld') const v = vi.fn() + vi.spyOn(util, 'onError').mockImplementation(() => {}) try { await rect.forEachVector(() => { diff --git a/src/lib/region/areas/rectangle.ts b/src/lib/region/areas/rectangle.ts index 71d0ff48..f74ba62f 100644 --- a/src/lib/region/areas/rectangle.ts +++ b/src/lib/region/areas/rectangle.ts @@ -19,8 +19,6 @@ class Rectangle extends Area { super(database, dimensionType) } - type = 'rect' - isNear(point: AbstractPoint, distance: number): boolean { const { location: vector, dimensionType } = toPoint(point) if (!this.isOurDimension(dimensionType)) return false @@ -53,4 +51,4 @@ class Rectangle extends Area { } } -export const RectangleArea = Rectangle.asSaveableArea() +export const RectangleArea = Rectangle.asSaveableArea('rect') diff --git a/src/lib/region/areas/sphere.ts b/src/lib/region/areas/sphere.ts index 3cbee436..16ff711b 100644 --- a/src/lib/region/areas/sphere.ts +++ b/src/lib/region/areas/sphere.ts @@ -3,8 +3,6 @@ import { Vec } from 'lib/vector' import { Area } from './area' class Sphere extends Area<{ center: { x: number; z: number; y: number }; radius: number }> { - type = 's' - isNear(point: AbstractPoint, distance: number): boolean { const { location: vector, dimensionType } = toPoint(point) if (!this.isOurDimension(dimensionType)) return false @@ -40,4 +38,4 @@ class Sphere extends Area<{ center: { x: number; z: number; y: number }; radius: } } -export const SphereArea = Sphere.asSaveableArea() +export const SphereArea = Sphere.asSaveableArea('s') diff --git a/src/lib/region/big-structure.ts b/src/lib/region/big-structure.ts index 714c9a8f..fdf77d5a 100644 --- a/src/lib/region/big-structure.ts +++ b/src/lib/region/big-structure.ts @@ -26,11 +26,14 @@ export class BigRegionStructure extends RegionStructure { false, regionId, Array.isArray(saved) ? (saved as BigStructureSaved[]) : undefined, + false, // entities ) } get exists(): boolean { - return !!world.structureManager.get(`mystructure:${this.bigStructure.prefix}|0`) + return ( + !!world.structureManager.get(`mystructure:${this.bigStructure.prefix}|0`) && this.bigStructure.toJSON().length > 0 + ) } protected get bigStructurePos() { diff --git a/src/lib/region/command.ts b/src/lib/region/command.ts index df4d4eba..d910fb72 100644 --- a/src/lib/region/command.ts +++ b/src/lib/region/command.ts @@ -1,4 +1,4 @@ -import { GameMode, LocationInUnloadedChunkError, MolangVariableMap, Player, system, world } from '@minecraft/server' +import { GameMode, LocationInUnloadedChunkError, MolangVariableMap, Player, system } from '@minecraft/server' import 'lib/command' import { Cooldown } from 'lib/cooldown' import { table } from 'lib/database/abstract' @@ -13,18 +13,20 @@ import { regionForm } from './form' export const regionTypes: { name: string; region: typeof Region; creatable: boolean; displayName: boolean }[] = [] export function registerRegionType(name: string, region: typeof Region, creatable = true, displayName = !creatable) { + // Unique to each region type + if (region.regions === Region.regions) region.regions = [] + regionTypes.push({ name, region, creatable, displayName }) } -const command = new Command('region') +new Command('region') .setDescription(i18n`Управляет регионами`) - .setPermissions('techAdmin') + .setPermissions('admin') .setGroup('public') .executes(regionForm.command) -command - .overload('permdebug') - .setPermissions('everybody') +new Command('regionpermdebug') + .setPermissions('admin') .setGroup('test') .executes(ctx => { Region.permissionDebug = !Region.permissionDebug @@ -51,9 +53,8 @@ const tpdb = table<{ type: string; i: number; enabled: boolean }>('regionTpTest' i: 0, enabled: false, })) -command - .overload('tp') - .setPermissions('techAdmin') +new Command('regiontp') + .setPermissions('admin') .setDescription('Входит в режим телепортации по группе регионов. Полезно для поиска данжа') .setGroup('test') .executes(ctx => { @@ -125,9 +126,8 @@ function updateTpTitle(player: Player) { const db = table<{ enabled: boolean }>('regionBorders', () => ({ enabled: false })) -command - .overload('borders') - .executes(ctx => ctx.player.tell(noI18n`Borders enabled: ${db.get(ctx.player.id).enabled}`)) +new Command('regionborders') + .setPermissions('admin') .boolean('toggle', true) .executes((ctx, newValue = !db.get(ctx.player.id).enabled) => { ctx.player.tell(noI18n`${db.get(ctx.player.id).enabled} -> ${newValue}`) @@ -135,43 +135,44 @@ command db.get(ctx.player.id).enabled = newValue }) -const variables = new MolangVariableMap() -variables.setColorRGBA('color', { red: 0, green: 1, blue: 0, alpha: 0 }) - system.runInterval( () => { if (!db.values().some(e => e.enabled)) return - const players = world.getAllPlayers() - for (const region of Region.getAll()) { - if (!(region.area instanceof SphereArea)) continue + for (const [playerId, value] of db.entriesImmutable()) { + if (!value.enabled) continue + const player = Player.getById(playerId) + if (!player) continue + + const regions = Region.getNear(player, 30) + + const variables = new MolangVariableMap() + variables.setColorRGBA('color', { red: 0, green: 1, blue: 0, alpha: 0 }) - const playersNearRegion = players.filter(e => region.area.isNear(e, 30)) - if (!playersNearRegion.length) continue + for (const region of regions) { + if (!(region.area instanceof SphereArea)) continue - let skip = 0 - region.area.forEachVector((vector, isIn) => { - skip++ - if (skip % 2 === 0) return - if (!Region.getAll().includes(region)) return // deleted + let skip = 0 + region.area.forEachVector((vector, isIn) => { + skip++ + if (skip % 2 === 0) return + if (!Region.getAll().includes(region)) return // deleted - try { - const r = Vec.distance(region.area.center, vector) - if (isIn && r > region.area.radius - 1) { - for (const player of playersNearRegion) { - if (!player.isValid) continue - if (!db.get(player.id).enabled) continue + try { + const r = Vec.distance(region.area.center, vector) + if (isIn && r > region.area.radius - 1) { + if (!player.isValid) return player.spawnParticle('minecraft:wax_particle', vector, variables) } + } catch (e) { + if (e instanceof LocationInUnloadedChunkError) return + throw e } - } catch (e) { - if (e instanceof LocationInUnloadedChunkError) return - throw e - } - }, 100) + }, 200) + } } }, 'region borders', - 40, + 60, ) diff --git a/src/lib/region/config.ts b/src/lib/region/config.ts index a0599e6c..3ef7b862 100644 --- a/src/lib/region/config.ts +++ b/src/lib/region/config.ts @@ -1,6 +1,7 @@ import { BlockTypes, Entity } from '@minecraft/server' import { MinecraftBlockTypes, MinecraftEntityTypes } from '@minecraft/vanilla-data' import { CustomEntityTypes } from 'lib/assets/custom-entity-types' +import { onLoad } from 'lib/utils/load-ref' /** All doors and switches in minecraft */ export const DOORS: string[] = [] @@ -14,16 +15,18 @@ export const SWITCHES: string[] = [] /** All gates in minecraft */ export const GATES: string[] = [] -const blocks = BlockTypes.getAll() +onLoad(() => { + const blocks = BlockTypes.getAll() -function fill(target: string[], filter: (params: { id: string }) => boolean) { - for (const value of blocks) if (filter(value)) target.push(value.id) -} + function fill(target: string[], filter: (params: { id: string }) => boolean) { + for (const value of blocks) if (filter(value)) target.push(value.id) + } -fill(DOORS, e => e.id.endsWith('door')) -fill(TRAPDOORS, e => e.id.endsWith('trapdoor')) -fill(SWITCHES, e => /button|lever$/.test(e.id)) -fill(GATES, e => e.id.includes('fence_gate')) + fill(DOORS, e => e.id.endsWith('door')) + fill(TRAPDOORS, e => e.id.endsWith('trapdoor')) + fill(SWITCHES, e => /button|lever$/.test(e.id)) + fill(GATES, e => e.id.includes('fence_gate')) +}) /** A list of all containers a item could be in */ export const BLOCK_CONTAINERS = [ @@ -58,25 +61,21 @@ export const INTERACTABLE_ENTITIES: string[] = [ * System entities like database, floating text, sit and other which are not affected by health bar display, region * permissions and other filterings */ -export const NOT_MOB_ENTITIES = [ +export const NOT_MOB_ENTITIES: string[] = [ CustomEntityTypes.Database, CustomEntityTypes.FloatingText, CustomEntityTypes.FloatingTextNpc, CustomEntityTypes.Sit, - CustomEntityTypes.Grave, - CustomEntityTypes.Loot, MinecraftEntityTypes.Npc, 'minecraft:item', 'minecraft:leash_knot', MinecraftEntityTypes.FishingHook, -] as string[] +] -export const PVP_ENTITIES = [ +export const PVP_ENTITIES: string[] = [ MinecraftEntityTypes.Player, MinecraftEntityTypes.Arrow, MinecraftEntityTypes.Snowball, - CustomEntityTypes.Fireball, - CustomEntityTypes.Cannon, ] const ALLOW_SPAWN_PROP = 'allowSpawn' diff --git a/src/lib/region/database.test.ts b/src/lib/region/database.test.ts index 5707ab60..8614e471 100644 --- a/src/lib/region/database.test.ts +++ b/src/lib/region/database.test.ts @@ -1,4 +1,3 @@ -import { Region, RegionIsSaveable } from 'lib' import { ChunkCubeArea } from './areas/chunk-cube' import { SphereArea } from './areas/sphere' import { @@ -8,6 +7,8 @@ import { restoreRegionFromJSON, TEST_clearSaveableRegions, } from './database' +import { RegionIsSaveable } from './kinds/region' +import { Region } from './kinds/region' class TestK1Region extends Region { method() {} diff --git a/src/lib/region/database.ts b/src/lib/region/database.ts index af7a977a..88f0ad80 100644 --- a/src/lib/region/database.ts +++ b/src/lib/region/database.ts @@ -7,7 +7,7 @@ import { Area } from './areas/area' import './areas/cut' import { SphereArea } from './areas/sphere' import { RegionEvents } from './events' -import { RegionIsSaveable, type Region, type RegionPermissions } from './kinds/region' +import { Region, RegionIsSaveable, type RegionPermissions } from './kinds/region' export type RLDB = JsonObject | undefined @@ -43,7 +43,7 @@ export const RegionDatabase = table('region-v2', () => ({ permissions: {}, })) -system.delay(() => { +RegionDatabase.onLoad(() => { system.runJob( (function* regionRestore() { let i = 0 @@ -70,6 +70,9 @@ export function registerSaveableRegion(kind: string, region: typeof Region) { // @ts-expect-error Yes, we ARE breaking typescript region.prototype[RegionIsSaveable] = true + // Unique to each region type + if (region.regions === Region.regions) region.regions = [] + kinds.push(region) } @@ -96,10 +99,10 @@ export function restoreRegionFromJSON([key, regionImmutable]: [string, Immutable const area = Area.fromJson(region.a) if (!area) return - if (!area.isValid()) { - console.warn('[Region][Database] Area', area.toString(), 'is invalid') - return - } + // if (!area.isValid()) { + // console.warn('[Region][Database] Area', area.toString(), 'is invalid') + // return + // } return kind.create(area, region, key) } diff --git a/src/lib/region/explosion.ts b/src/lib/region/explosion.ts new file mode 100644 index 00000000..0c1752bc --- /dev/null +++ b/src/lib/region/explosion.ts @@ -0,0 +1,14 @@ +import { Block, world } from '@minecraft/server' +import { Region } from './kinds/region' +import { SafeAreaRegion } from './kinds/safe-area' + +world.beforeEvents.explosion.subscribe(event => { + event.setImpactedBlocks(event.getImpactedBlocks().filter(canBlockExplode)) +}) + +function canBlockExplode(block: Block) { + const region = Region.getAt(block) + if (region instanceof SafeAreaRegion) return false + + return true +} diff --git a/src/lib/region/form.ts b/src/lib/region/form.ts index 40c02bb8..3ee16aa6 100644 --- a/src/lib/region/form.ts +++ b/src/lib/region/form.ts @@ -1,7 +1,12 @@ import { Player, world } from '@minecraft/server' import { parseArguments, parseLocationArguments } from 'lib/command/utils' +import { ArrayForm } from 'lib/form/array' +import { ModalForm } from 'lib/form/modal' import { form, NewFormCallback, NewFormCreator } from 'lib/form/new' +import { BUTTON, FormCallback } from 'lib/form/utils' import { i18n, noI18n, textTable } from 'lib/i18n/text' +import { inspect } from 'lib/utils/inspect' +import { Vec } from 'lib/vector' import { Area } from './areas/area' import { ChunkCubeArea } from './areas/chunk-cube' import { CylinderArea } from './areas/cylinder' @@ -10,11 +15,6 @@ import { RectangleArea } from './areas/rectangle' import { SphereArea } from './areas/sphere' import { regionTypes } from './command' import { Region } from './kinds/region' -import { ArrayForm } from 'lib/form/array' -import { BUTTON, FormCallback } from 'lib/form/utils' -import { ModalForm } from 'lib/form/modal' -import { Vec } from 'lib/vector' -import { inspect } from 'lib/utils/inspect' export const regionForm = form((f, { player, self }) => { f.title(noI18n`Управление регионами`) @@ -77,20 +77,43 @@ function regionList( }) .show(player) } -const selectArea = form.params<{ onSelect: (area: Area) => NewFormCallback; title: Text }>( + +let getPlayerSelection = (player: Player): { min: Vector3; max: Vector3 } | undefined => { + return +} + +import('../../modules/world-edit/lib/world-edit').then(({ WorldEdit }) => { + getPlayerSelection = player => WorldEdit.forPlayer(player).selection +}) + +export const selectArea = form.params<{ onSelect: (area: Area) => NewFormCallback; title: Text }>( (f, { player, self, params: { onSelect: onS, title } }) => { function onSelect(area: Area) { onS(area)(player, self) } f.title(title) + + const selection = getPlayerSelection(player) + if (selection) { + f.button( + noI18n.accent`Выделенная зона (${Vec.size(selection.min, selection.max)})\n(куб без ограничения высоты)`, + () => onSelect(new ChunkCubeArea({ from: selection.min, to: selection.max }, player.dimension.type)), + ) + + f.button(noI18n.accent`Выделенная зона (${Vec.size(selection.min, selection.max)})\n(куб)`, () => + onSelect(new RectangleArea({ from: selection.min, to: selection.max }, player.dimension.type)), + ) + } + f.button(noI18n`Сфера`, BUTTON['+'], () => { new ModalForm(noI18n`Сфера`) .addTextField(noI18n`Центр`, '~~~', '~~~') - .addSlider(noI18n`Радиус`, 1, 100, 1) + .addSlider(noI18n`Радиус`, 1, 200, 1) .show(player, (ctx, rawCenter, radius) => { const center = parseLocationFromForm(ctx, rawCenter, player) if (!center) return + // TODO: Just ignore the underradius if (center.y - radius <= -64) return player.fail( i18n`Нельзя создать регион, область которого ниже -64 (y: ${center.y} radius: ${radius} result: ${center.y - radius})`, @@ -183,7 +206,7 @@ const regionStructureForm = form.params<{ region: Region; title: Text }>((f, { p }) if (exists) f.ask(noI18n`§cУдалить структуру`, noI18n`§cУдалить`, () => region.structure?.delete()) }) -const editRegion = form.params<{ region: Region; displayName: boolean }>( +export const editRegion = form.params<{ region: Region; displayName: boolean }>( (f, { player, back, self, params: { region, displayName } }) => { const title = displayName ? (region.displayName ?? region.creator.name) : region.name f.title(title) diff --git a/src/lib/region/index.ts b/src/lib/region/index.ts index b1f676d1..3513abc1 100644 --- a/src/lib/region/index.ts +++ b/src/lib/region/index.ts @@ -8,9 +8,6 @@ import { world, } from '@minecraft/server' import { MinecraftEntityTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { CustomEntityTypes } from 'lib/assets/custom-entity-types' -import { Items } from 'lib/assets/custom-items' -import { PlayerEvents, PlayerProperties } from 'lib/assets/player-json' import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { i18n, noI18n } from 'lib/i18n/text' import { onPlayerMove } from 'lib/player-move' @@ -31,13 +28,13 @@ import { TRAPDOORS, } from './config' import { RegionEvents } from './events' +import './explosion' import { Region } from './kinds/region' export * from './command' export * from './config' export * from './database' -export * from './kinds/boss-arena' export * from './kinds/region' export * from './kinds/road' export * from './kinds/safe-area' @@ -95,21 +92,27 @@ actionGuard((player, region, ctx) => { if (BLOCK_CONTAINERS.includes(typeId)) return region.permissions.openContainers // allow }, ActionGuardOrder.Permission) +const itemToProjectile = new Map([ + [MinecraftItemTypes.EnderPearl, MinecraftEntityTypes.EnderPearl], + [MinecraftItemTypes.WindCharge, MinecraftEntityTypes.WindChargeProjectile], + [MinecraftItemTypes.Snowball, MinecraftEntityTypes.SnowGolem], +]) + actionGuard((player, region, context) => { if (region && (context.type === 'interactWithEntity' || context.type === 'interactWithBlock')) { const { allowedEntities: ent } = region.permissions if (ent !== 'all') { const { typeId } = player.mainhand() + if (!typeId) return + const arrow = ent.includes(MinecraftItemTypes.Arrow) const firework = ent.includes(MinecraftItemTypes.FireworkRocket) if (typeId === MinecraftItemTypes.Bow) return arrow if (typeId === MinecraftItemTypes.Crossbow) return arrow || firework - if (typeId === MinecraftItemTypes.EnderPearl) return ent.includes(MinecraftEntityTypes.EnderPearl) - if (typeId === MinecraftItemTypes.WindCharge) return ent.includes(MinecraftEntityTypes.WindChargeProjectile) - if (typeId === MinecraftItemTypes.Snowball) return ent.includes(MinecraftEntityTypes.Snowball) - if (typeId === Items.Fireball) return ent.includes(CustomEntityTypes.Fireball) + const projectile = itemToProjectile.get(typeId) + if (projectile) return ent.includes(projectile) } } }, ActionGuardOrder.ProjectileUsePrevent) @@ -180,10 +183,14 @@ world.afterEvents.entitySpawn.subscribe(({ entity }) => { if ((NOT_MOB_ENTITIES.includes(typeId) && typeId !== 'minecraft:item') || !entity.isValid) return const region = Region.getAt(entity) + if (!region) return // Allow entity spawn outside of region by default - if (isForceSpawnInRegionAllowed(entity) || (typeId === 'minecraft:item' && region?.permissions.allowedAllItem)) return - if (!region || region.permissions.allowedEntities === 'all' || region.permissions.allowedEntities.includes(typeId)) - return + const { allowedAllItem, allowedEntities, disallowedFamilies } = region.permissions + + if (isForceSpawnInRegionAllowed(entity)) return + if (allowedAllItem && typeId === 'minecraft:item') return + if (allowedEntities === 'all' || allowedEntities.includes(typeId)) return + if (disallowedFamilies?.length && entity.matches({ excludeFamilies: disallowedFamilies })) return entity.remove() }) @@ -198,24 +205,11 @@ onPlayerMove.subscribe(({ player, location, dimensionType }) => { RegionEvents.playerInRegionsCache.set(player, newest) const currentRegion = newest[0] - const isPlaying = !isNotPlaying(player) - - const resetNewbie = () => player.setProperty(PlayerProperties['lw:newbie'], !!player.database.survival.newbie) - - if (typeof currentRegion !== 'undefined' && isPlaying) { - if (currentRegion.permissions.pvp === false) { - player.triggerEvent( - player.database.inv === 'spawn' ? PlayerEvents['player:spawn'] : PlayerEvents['player:safezone'], - ) - player.setProperty(PlayerProperties['lw:newbie'], true) - } else if (currentRegion.permissions.pvp === 'pve') { - player.setProperty(PlayerProperties['lw:newbie'], true) - } else resetNewbie() - } else resetNewbie() EventSignal.emit(RegionEvents.onInterval, { player, currentRegion }) }) +// TODO Migrate to entityHurtBeforeEvent world.afterEvents.entityHurt.subscribe(({ hurtEntity, damage, damageSource: { damagingEntity } }) => { if (!damagingEntity?.isValid || !hurtEntity.isValid) return @@ -242,6 +236,10 @@ world.afterEvents.entityHurt.subscribe(({ hurtEntity, damage, damageSource: { da } else { health.setCurrentValue(health.currentValue - damage) damagingEntity.applyDamage(0) - if (health.currentValue >= 0) damagingEntity.applyKnockback(direction, direction.y) + //if (health.currentValue >= 0) damagingEntity.applyKnockback(direction, direction.y) } }) + +export const regionPermissions = { + itemToProjectile, +} diff --git a/src/lib/region/kinds/minearea.ts b/src/lib/region/kinds/minearea.ts index e40c28c4..d4fc6b2d 100644 --- a/src/lib/region/kinds/minearea.ts +++ b/src/lib/region/kinds/minearea.ts @@ -64,6 +64,7 @@ export class MineareaRegion extends RegionWithStructure { if (this.restoringStructurePromise) return this.restoringStructurePromise this.restoringStructurePromise = this.internalRestoreStructure(eachVectorCallback) + this.restoringStructurePromise.catch((e: unknown) => console.error('MineareaRegion.restoreStructure', e)) const result = await this.restoringStructurePromise delete this.restoringStructurePromise return result @@ -79,7 +80,7 @@ export class MineareaRegion extends RegionWithStructure { // Prevent from region save conflicts if (!restoredRegions.includes(region) && region !== this) { restoredRegions.push(region) - await region.structure.place() + if (region.structure.exists) await region.structure.place() } } @@ -236,9 +237,14 @@ export function onFullRegionTypeRestore( } onFullRegionTypeRestore(MineareaRegion, region => { - logger.info`All blocks in region ${region.name} kind ${region.creator.kind} are restored.` - region.deleteSchedules() - region.structure.place() + if (region.structure.exists) { + logger.info`All blocks in region ${region.name} kind ${region.creator.kind} are restored.` + + region.deleteSchedules() + region.structure.place() + } else { + logger.warn`All blocks in region ${region.name} kind ${region.creator.kind} are restored. BUT NO STRUCTURE EXISTS` + } }) function notifyBuilder(player: Player, region: MineareaRegion) { diff --git a/src/lib/region/kinds/region.test.ts b/src/lib/region/kinds/region.test.ts index 6621893f..dbe357d8 100644 --- a/src/lib/region/kinds/region.test.ts +++ b/src/lib/region/kinds/region.test.ts @@ -1,23 +1,19 @@ -import { RegionDatabase, registerSaveableRegion } from 'lib' import { createPoint } from 'lib/utils/point' import { Vec } from 'lib/vector' import { TEST_clearDatabase, TEST_createPlayer } from 'test/utils' import { SphereArea } from '../areas/sphere' +import { RegionDatabase, registerSaveableRegion, TEST_clearSaveableRegions } from '../database' import { Region } from './region' describe('Region', () => { - beforeAll(() => { + beforeEach(() => { Region.regions = [] TEST_clearDatabase(RegionDatabase) - }) - - beforeEach(() => { + TEST_clearSaveableRegions() vi.useFakeTimers() vi.setSystemTime(new Date(0)) }) afterEach(() => { - Region.regions = [] - TEST_clearDatabase(RegionDatabase) vi.useRealTimers() }) @@ -31,12 +27,12 @@ describe('Region', () => { registerSaveableRegion('t', T) const area = new SphereArea({ center: Vec.zero, radius: 0 }, 'overworld') - expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01-01-1970-00:00"`) - expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01-01-1970-00:00-0"`) - expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01-01-1970-00:00-1"`) - expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01-01-1970-00:00-2"`) - expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01-01-1970-00:00-3"`) - expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01-01-1970-00:00-4"`) + expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01.01.1970-03:00"`) + expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01.01.1970-03:00-0"`) + expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01.01.1970-03:00-1"`) + expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01.01.1970-03:00-2"`) + expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01.01.1970-03:00-3"`) + expect(T.create(area).id).toMatchInlineSnapshot(`"t-s-0-01.01.1970-03:00-4"`) }) it('should return owner name', () => { @@ -50,7 +46,9 @@ describe('Region', () => { it('should return instances of right type', () => { class TestRegion extends Region {} + registerSaveableRegion('1', TestRegion) class AnotherTestRegion extends Region {} + registerSaveableRegion('1', AnotherTestRegion) expect(Region.regions.length).toBe(0) expect(TestRegion.regions.length).toBe(0) @@ -79,9 +77,11 @@ describe('Region', () => { it('should store regions in different places', () => { class TestRegion extends Region {} + registerSaveableRegion('1', TestRegion) class TestAbcRegion extends TestRegion {} - + registerSaveableRegion('2', TestAbcRegion) class OtherRegion extends Region {} + registerSaveableRegion('3', OtherRegion) const a = new SphereArea({ center: Vec.zero, radius: 0 }) @@ -100,10 +100,12 @@ describe('Region', () => { expect(TestRegion.getAll().map(e => e.creator.name)).toMatchInlineSnapshot(` [ "TestRegion", + "TestAbcRegion", ] `) expect(TestAbcRegion.getAll().map(e => e.creator.name)).toMatchInlineSnapshot(` [ + "TestRegion", "TestAbcRegion", ] `) diff --git a/src/lib/region/kinds/region.ts b/src/lib/region/kinds/region.ts index bcbbaada..304672cd 100644 --- a/src/lib/region/kinds/region.ts +++ b/src/lib/region/kinds/region.ts @@ -33,6 +33,8 @@ export interface RegionPermissions extends Record[1] = {}, key?: string, ): InstanceType { - // Make region list actually specific to class - if (this !== Region && this.regionsListType !== this.name) { - this.regions = [] - this.regionsListType = this.name - } + // // Make region list actually specific to class + // if (this !== Region && this.regionsListType !== this.name) { + // this.regions = [] + // this.regionsListType = this.name + // } // if (!area.isValid()) throw new Error('Area ' + area.toString() + 'is invalid') @@ -96,10 +98,10 @@ export class Region { if (!key) { // We are creating new region and should save it region.save() - region.onCreate() + util.catch(() => region.onCreate(), `${this.name}.onCreate`) } else { // Restoring region with existing key - region.onRestore() + util.catch(() => region.onRestore(), `${this.name}.onCreate`) } if (area.radius) this.chunkQuery.add(region) diff --git a/src/lib/region/kinds/safe-area.ts b/src/lib/region/kinds/safe-area.ts index 3b95ea0a..8accf048 100644 --- a/src/lib/region/kinds/safe-area.ts +++ b/src/lib/region/kinds/safe-area.ts @@ -48,8 +48,47 @@ export class SafeAreaRegion extends Region { get displayName() { return this.safeAreaName } + + static enableGamemodeChange() { + system.runPlayerInterval( + player => { + const regions = RegionEvents.playerInRegionsCache.get(player) + if (!regions) return + + const region = regions[0] as Region | undefined + + const gamemode = player.getGameMode() + const adventure = gamemode === GameMode.Adventure + const survival = gamemode === GameMode.Survival + + if (adventure && (!region || nearDisabledAdventureRegions(player))) { + player.setGameMode(GameMode.Survival) + } else if (survival && region && adventureModeRegion(region)) { + player.setGameMode(GameMode.Adventure) + } + }, + 'safeAreaDisableAdventureNear', + 50, + ) + + RegionEvents.onPlayerRegionsChange.subscribe(({ player, previous, newest }) => { + const been = previous[0] && adventureModeRegion(previous[0]) + const now = newest[0] && (adventureModeRegion(newest[0]) || !nearDisabledAdventureRegions(player)) + + const gamemode = player.getGameMode() + const adventure = gamemode === GameMode.Adventure + const survival = gamemode === GameMode.Survival + + if (been && adventure && !now) { + player.setGameMode(GameMode.Survival) + } else if (now && survival) { + player.setGameMode(GameMode.Adventure) + } + }) + } } registerRegionType(noI18n`Мирные зоны`, SafeAreaRegion) + export const disableAdventureNear: (typeof Region)[] = [] export const adventureModeRegions: (typeof Region)[] = [SafeAreaRegion] @@ -60,39 +99,3 @@ function nearDisabledAdventureRegions(player: Player): boolean { function adventureModeRegion(region: Region) { return adventureModeRegions.some(e => region instanceof e) } - -system.runPlayerInterval( - player => { - const regions = RegionEvents.playerInRegionsCache.get(player) - if (!regions) return - - const region = regions[0] as Region | undefined - - const gamemode = player.getGameMode() - const adventure = gamemode === GameMode.Adventure - const survival = gamemode === GameMode.Survival - - if (adventure && (!region || nearDisabledAdventureRegions(player))) { - player.setGameMode(GameMode.Survival) - } else if (survival && region && adventureModeRegion(region)) { - player.setGameMode(GameMode.Adventure) - } - }, - 'safeAreaDisableAdventureNear', - 40, -) - -RegionEvents.onPlayerRegionsChange.subscribe(({ player, previous, newest }) => { - const been = previous[0] && adventureModeRegion(previous[0]) - const now = newest[0] && (adventureModeRegion(newest[0]) || !nearDisabledAdventureRegions(player)) - - const gamemode = player.getGameMode() - const adventure = gamemode === GameMode.Adventure - const survival = gamemode === GameMode.Survival - - if (been && adventure && !now) { - player.setGameMode(GameMode.Survival) - } else if (now && survival) { - player.setGameMode(GameMode.Adventure) - } -}) diff --git a/src/lib/region/kinds/with-structure.spec.ts b/src/lib/region/kinds/with-structure.spec.ts deleted file mode 100644 index 2e0bfee7..00000000 --- a/src/lib/region/kinds/with-structure.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { Vec } from 'lib/vector' -import { TestStructures } from 'test/constants' -import { gamesuite, gametest } from 'test/framework' -import { SphereArea } from '../areas/sphere' -import { RegionWithStructure } from './with-structure' - -class TestStructure extends RegionWithStructure {} - -gamesuite('RegionWithStructure', () => { - gametest('should save and load structure only with region blocks', async test => { - const region = TestStructure.create( - new SphereArea({ center: test.worldLocation(new Vec(2, 5, 2)), radius: 3 }, test.getDimension().type), - ) - - region.structure.save() // save empty structure with air - await region.area.forEachVector((vector, isIn, dimension) => { - dimension.setBlockType(vector, isIn ? MinecraftBlockTypes.Bedrock : MinecraftBlockTypes.Glass) - }) - - await test.idle(40) - await region.structure.place() - - await region.area.forEachVector((vector, isIn) => { - test.assertBlockPresent(isIn ? MinecraftBlockTypes.Air : MinecraftBlockTypes.Glass, test.worldLocation(vector)) - }) - - test.succeed() - }) - .structureName(TestStructures.flat) - .maxTicks(400) -}) diff --git a/src/lib/region/structure.ts b/src/lib/region/structure.ts index 569f1405..41a7dd00 100644 --- a/src/lib/region/structure.ts +++ b/src/lib/region/structure.ts @@ -95,7 +95,7 @@ export class RegionStructure { yieldEach?: number, ) { const structure = world.structureManager.get(this.id) - if (!structure) throw new ReferenceError('No structure found!') + if (!structure) throw new ReferenceError(`No structure found! ${this.id}`) const [from] = this.region.area.edges const offset = this.offset ? { x: this.offset, y: this.offset, z: this.offset } : undefined diff --git a/src/lib/roles.test.ts b/src/lib/roles.test.ts deleted file mode 100644 index 014b4e23..00000000 --- a/src/lib/roles.test.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { GameMode, Player } from '@minecraft/server' -import { TEST_createPlayer } from 'test/utils' -import { getRole, is, setRole } from './roles' - -describe('roles auto switch gamemode', () => { - it('should switch gamemode', () => { - const player = TEST_createPlayer() - - expect(player.getGameMode()).toBe(GameMode.Survival) - - expect(getRole(player)).toBe('member') - expect(getRole(player.id)).toBe(getRole(player)) - - setRole(player, 'admin') - expect(getRole(player.id)).toBe('admin') - expect(player.getGameMode()).toBe(GameMode.Survival) - - setRole(player, 'spectator') - expect(player.getGameMode()).toBe(GameMode.Spectator) - - setRole(player, 'member') - expect(player.getGameMode()).toBe(GameMode.Survival) - }) - - it('should return valid role', () => { - // @ts-expect-error - const player = new Player() as Player - - // @ts-expect-error - player.database.role = 'oldrole' - - expect(getRole(player)).toBe('member') - }) - - it('should not throw for unknown player', () => { - setRole('unknown', 'tester') - }) -}) - -describe('roles is', () => { - it('should test is', () => { - const player = TEST_createPlayer() - - expect(is(player.id, 'admin')).toBe(false) - expect(is(player.id, 'member')).toBe(true) - expect(is(player.id, 'spectator')).toBe(true) - - setRole(player, 'admin') - expect(is(player.id, 'admin')).toBe(true) - expect(is(player.id, 'builder')).toBe(true) - expect(is(player.id, 'chefAdmin')).toBe(false) - }) -}) diff --git a/src/modules/commands/role.ts b/src/lib/roles/command.ts similarity index 94% rename from src/modules/commands/role.ts rename to src/lib/roles/command.ts index 20fd51c6..996a4641 100644 --- a/src/modules/commands/role.ts +++ b/src/lib/roles/command.ts @@ -1,15 +1,15 @@ import { Player, world } from '@minecraft/server' -import { FormCallback, ROLES, getRole, setRole } from 'lib' import { ArrayForm } from 'lib/form/array' import { ModalForm } from 'lib/form/modal' +import { FormCallback } from 'lib/form/utils' import { i18n } from 'lib/i18n/text' -import { WHO_CAN_CHANGE } from 'lib/roles' +import { getRole, ROLES, setRole, WHO_CAN_CHANGE } from 'lib/roles' const FULL_HIERARCHY = Object.keys(ROLES) function canChange(who: Role, target: Role, allowSame = false) { if (allowSame && who === target) return true - if (who === 'creator') return true + if (who === 'creator' || who === 'techAdmin') return true return FULL_HIERARCHY.indexOf(who) < FULL_HIERARCHY.indexOf(target) } @@ -19,8 +19,7 @@ const command = new Command('role') .setPermissions('everybody') .executes(ctx => roleMenu(ctx.player)) -const restoreRole = command - .overload('restore') +const restoreRole = new Command('rolerestore') .setDescription(i18n`Восстанавливает вашу роль`) .setPermissions(p => !!p.database.prevRole) .executes(ctx => { @@ -70,7 +69,7 @@ function roleMenu(player: Player) { const button = this.button?.([player.id, player.database], { sort: 'role' }, form, back) if (button) - form.button(i18n`§3Сменить мою роль\n§7(Восстановить потом: §f.role restore§7)`.to(player.lang), button[1]) + form.button(i18n`§3Сменить мою роль\n§7(Восстановить потом: §f/rolerestore§7)`.to(player.lang), button[1]) }) .button(([id, { role, name: dbname }], _, form) => { const target = players.find(e => e.id === id) ?? id diff --git a/src/lib/roles.ts b/src/lib/roles/index.ts similarity index 86% rename from src/lib/roles.ts rename to src/lib/roles/index.ts index 77b41221..634a02d7 100644 --- a/src/lib/roles.ts +++ b/src/lib/roles/index.ts @@ -1,14 +1,22 @@ -import { GameMode, Player, ScriptEventSource, system, world } from '@minecraft/server' +import { GameMode, Player, ScriptEventSource, system } from '@minecraft/server' import { EventSignal } from 'lib/event-signal' -import { isKeyof } from 'lib/util' -import { Core } from './extensions/core' -import { i18n, noI18n } from './i18n/text' +import { Core } from '../extensions/core' +import { i18n, noI18n } from '../i18n/text' +import { isKeyof } from '../util' +import('./command') declare global { /** Any known role */ type Role = keyof typeof ROLES } +declare module '@minecraft/server' { + interface PlayerDatabase { + readonly role: Role + prevRole?: Role + } +} + /** The roles that are in this server */ export const ROLES = { creator: i18n.nocolor`§aРуководство`, @@ -50,7 +58,7 @@ const PERMISSIONS: Record = { * * Also known as role hierarchy */ -export const WHO_CAN_CHANGE: Role[] = ['creator', 'curator', 'techAdmin', 'chefAdmin', 'admin', 'grandBuilder'] +export const WHO_CAN_CHANGE: Role[] = ['creator', 'techAdmin', 'admin', 'moderator', 'helper'] /** * Checks if player has permissions for performing role actions. (e.g. if player role is above or equal) @@ -83,9 +91,10 @@ export function is(playerID: string, role: Role) { * @returns Player role */ export function getRole(playerID: Player | string): Role { - if (playerID instanceof Player) playerID = playerID.id + if (playerID === 'server') return 'creator' - const role = Player.database.getImmutable(playerID).role + const id = playerID instanceof Player ? playerID.id : playerID + const role = Player.database.getImmutable(id).role if (!Object.keys(ROLES).includes(role)) return 'member' return role @@ -130,18 +139,8 @@ Core.beforeEvents.roleChange.subscribe(({ newRole, oldRole, player }) => { } }) -// Set spectator gamemode on join with spectator role -world.afterEvents.playerSpawn.subscribe(({ player, initialSpawn }) => { - if (player.isSimulated()) return - if (initialSpawn) { - if (player.database.role === 'spectator') { - player.setGameMode(GameMode.Spectator) - } - } -}) - /* istanbul ignore next */ -if (!__VITEST__) { +if (!__TEST__) { // Allow recieving roles from scriptevent function run by console system.afterEvents.scriptEventReceive.subscribe( event => { diff --git a/src/lib/roles/r.ts b/src/lib/roles/r.ts new file mode 100644 index 00000000..d4649695 --- /dev/null +++ b/src/lib/roles/r.ts @@ -0,0 +1 @@ +import './index' diff --git a/src/lib/rpg/airdrop.ts b/src/lib/rpg/airdrop.ts index 56ef53d9..91155ec0 100644 --- a/src/lib/rpg/airdrop.ts +++ b/src/lib/rpg/airdrop.ts @@ -8,7 +8,6 @@ import { createLogger } from 'lib/utils/logger' import { toPoint } from 'lib/utils/point' import { Vec } from 'lib/vector' import { table } from '../database/abstract' -import { Core } from '../extensions/core' import { Temporary } from '../temporary' import { isLocationError } from '../utils/game' import { MinimapNpc, resetMinimapNpcPosition, setMinimapNpcPosition } from './minimap' @@ -300,7 +299,7 @@ const findAndRemove = (arr: Entity[], id: string) => { if (i !== -1) return arr.splice(i, 1)[0] } -Core.afterEvents.worldLoad.subscribe(() => { +Airdrop.db.onLoad(() => { for (const [key, saved] of Airdrop.db.entries()) { if (typeof saved === 'undefined') continue const loot = LootTable.instances.get(saved.loot) diff --git a/src/lib/rpg/boss.ts b/src/lib/rpg/boss.ts index 36bcd761..2660e5b5 100644 --- a/src/lib/rpg/boss.ts +++ b/src/lib/rpg/boss.ts @@ -126,10 +126,10 @@ export class Boss { if (Array.isArray(this.options.allowedEntities)) this.options.allowedEntities.push(options.typeId, MinecraftEntityTypes.Player) - const areadb = Boss.arenaDb.get(this.options.place.id) - this.location = location(options.place) this.location.onLoad.subscribe(center => { + const areadb = Boss.arenaDb.get(this.options.place.id) + this.check() const area = (areadb?.area ? Area.fromJson(areadb.area) : undefined) ?? diff --git a/src/lib/rpg/custom-item.ts b/src/lib/rpg/custom-item.ts index 58302cc9..f3356faf 100644 --- a/src/lib/rpg/custom-item.ts +++ b/src/lib/rpg/custom-item.ts @@ -1,14 +1,15 @@ -import { ItemStack, system } from '@minecraft/server' +import { ItemStack } from '@minecraft/server' import { Items } from 'lib/assets/custom-items' import { defaultLang } from 'lib/assets/lang' import { translateTypeId } from 'lib/i18n/lang' import { i18n } from 'lib/i18n/text' +import { onLoad } from 'lib/utils/game' export const customItems: ItemStack[] = [] -class CustomItem { - constructor(public id: string) { - system.run(() => this.onBuild()) +export class CustomItem { + constructor(protected _typeId?: string) { + onLoad(() => this.onBuild()) } protected onBuild() { @@ -16,8 +17,6 @@ class CustomItem { customItems.push(this.cache) } - protected _typeId: string | undefined - typeId(typeId: string) { this._typeId = typeId return this @@ -38,7 +37,7 @@ class CustomItem { } get itemStack() { - if (!this._typeId) throw new TypeError('No type id specified for custom item ' + this.id) + if (!this._typeId) throw new TypeError('No type id specified for custom item') const item = new ItemStack(this._typeId).setInfo( this._nameTag && `§6${this._nameTag}`, diff --git a/src/modules/commands/leaderboard.ts b/src/lib/rpg/leaderboard/command.ts similarity index 98% rename from src/modules/commands/leaderboard.ts rename to src/lib/rpg/leaderboard/command.ts index 28a66b0b..45725eb3 100644 --- a/src/modules/commands/leaderboard.ts +++ b/src/lib/rpg/leaderboard/command.ts @@ -4,8 +4,8 @@ import { Player, world } from '@minecraft/server' import { ActionForm } from 'lib/form/action' import { ModalForm } from 'lib/form/modal' import { BUTTON } from 'lib/form/utils' -import { Leaderboard, LeaderboardInfo } from 'lib/rpg/leaderboard' import { Vec } from 'lib/vector' +import { Leaderboard, LeaderboardInfo } from './index' new Command('leaderboard') .setAliases('leaderboards', 'lb') diff --git a/src/lib/rpg/leaderboard.ts b/src/lib/rpg/leaderboard/index.ts similarity index 97% rename from src/lib/rpg/leaderboard.ts rename to src/lib/rpg/leaderboard/index.ts index afc9bcb5..b6391594 100644 --- a/src/lib/rpg/leaderboard.ts +++ b/src/lib/rpg/leaderboard/index.ts @@ -10,11 +10,12 @@ import { } from '@minecraft/server' import { CustomEntityTypes } from 'lib/assets/custom-entity-types' import { defaultLang } from 'lib/assets/lang' +import { table } from 'lib/database/abstract' import { scoreboardDisplayNames } from 'lib/database/scoreboard' import { i18n, i18nShared } from 'lib/i18n/text' import { isKeyof } from 'lib/util' import { Vec } from 'lib/vector' -import { table } from '../database/abstract' +import './command' export interface LeaderboardInfo { style: keyof typeof Leaderboard.styles @@ -85,6 +86,7 @@ export class Leaderboard { } update() { + if (this.entity.isValid) this.entity.teleport(this.info.location, { dimension: world[this.info.dimension] }) Leaderboard.db.set(this.entity.id, this.info) } @@ -174,7 +176,7 @@ system.runInterval( } }, 'leaderboardsInterval', - 40, + 100, ) const types = ['', i18nShared`к`, i18nShared`млн`, i18nShared`млрд`, i18nShared`трлн`] diff --git a/src/lib/rpg/loot-table.ts b/src/lib/rpg/loot-table.ts index dfe61977..efd284be 100644 --- a/src/lib/rpg/loot-table.ts +++ b/src/lib/rpg/loot-table.ts @@ -6,6 +6,7 @@ import { EventSignal } from 'lib/event-signal' import { inspect, isKeyof, pick } from 'lib/util' import { copyAllItemPropertiesExceptEnchants } from 'lib/utils/game' import { selectByChance } from './random' +import { CustomItem } from './custom-item' type RandomCostMap = Record<`${number}...${number}` | number, Percent> type Percent = `${number}%` @@ -54,18 +55,18 @@ export class Loot { * @param type Keyof MinecraftItemTypes */ item(type: Exclude | Items) { - this.create(new ItemStack(isKeyof(type, MinecraftItemTypes) ? MinecraftItemTypes[type] : type)) + this.create(() => new ItemStack(isKeyof(type, MinecraftItemTypes) ? MinecraftItemTypes[type] : type)) return this } - itemStack(item: ItemStack | (() => ItemStack)) { - this.create(item) + itemStack(item: CustomItem | (() => ItemStack)) { + this.create(item instanceof CustomItem ? () => item.itemStack : item) return this } - private create(itemStack: ItemStack | (() => ItemStack)) { + private create(itemStack: () => ItemStack) { if (this.current) this.items.push(this.current) this.current = { itemStack, weight: 100, amount: [1], damage: [0], enchantments: {}, custom: [] } } @@ -236,7 +237,7 @@ export class LootTable { let i = length return Array.from({ length }, () => { i-- - if (air > 0) return air--, undefined + if (air > 0) return (air--, undefined) air = Math.randomInt(0, i - (explictItems.length + randomizableItems.length)) diff --git a/src/lib/rpg/menu.ts b/src/lib/rpg/menu.ts index ebad2b3c..f5f07620 100644 --- a/src/lib/rpg/menu.ts +++ b/src/lib/rpg/menu.ts @@ -1,13 +1,13 @@ -import { ContainerSlot, EquipmentSlot, ItemLockMode, ItemStack, ItemTypes, Player, world } from '@minecraft/server' +import { ContainerSlot, EquipmentSlot, ItemLockMode, ItemStack, Player, world } from '@minecraft/server' import { InventoryInterval } from 'lib/action' import { Items } from 'lib/assets/custom-items' import { form } from 'lib/form/new' -import { i18n, i18nShared, noI18n } from 'lib/i18n/text' +import { i18n, noI18n } from 'lib/i18n/text' import { util } from 'lib/util' +import { onLoad } from 'lib/utils/load-ref' import { Vec } from 'lib/vector' import { WeakPlayerMap, WeakPlayerSet } from 'lib/weak-player-storage' import { MinimapNpc, resetMinimapNpcPosition, setMinimapEnabled, setMinimapNpcPosition } from './minimap' -import { Language } from 'lib/assets/lang' export class Menu { static settings: [Text, string] = [i18n`Меню\n§7Разные настройки интерфейсов и меню в игре`, 'menu'] @@ -23,9 +23,11 @@ export class Menu { return item.clone() } - static itemStack = this.createItem() + static itemStack = onLoad(() => this.createItem()) - static item = createPublicGiveItemCommand('menu', this.itemStack, another => this.isMenu(another), i18n`меню`, false) + static item = onLoad(() => + createPublicGiveItemCommand('menu', this.itemStack.value, another => this.isMenu(another), i18n`меню`, false), + ) static { world.afterEvents.itemUse.subscribe(({ source: player, itemStack }) => { @@ -45,7 +47,7 @@ export class Menu { } static isMenu(slot: Pick) { - return this.isCompass(slot) || slot.typeId === this.itemStack.typeId + return this.isCompass(slot) || slot.typeId === this.itemStack.value.typeId } } @@ -66,9 +68,11 @@ export class Compass { } } - private static items = new Array(32).fill(null).map((_, i) => { - return Menu.createItem(`${Items.CompassPrefix}${i}`) - }) + private static items = onLoad(() => + new Array(32).fill(null).map((_, i) => { + return Menu.createItem(`${Items.CompassPrefix}${i}`) + }), + ) /** Map of player as key and compass target as value */ private static players = new WeakPlayerMap() @@ -106,7 +110,7 @@ export class Compass { const target = this.players.get(player) if (!target || player.database.inv === 'spawn') { - if (Menu.isCompass(slot)) slot.setItem(Menu.itemStack) + if (Menu.isCompass(slot)) slot.setItem(Menu.itemStack.value) return } @@ -129,7 +133,7 @@ export class Compass { const angle = Math.atan2(sin, cos) const i = Math.floor((16 * angle) / Math.PI + 16) || 0 - if (typeof i === 'number') return this.items[i] + if (typeof i === 'number') return this.items.value[i] } } diff --git a/src/lib/rpg/minimap.ts b/src/lib/rpg/minimap.ts index 71a8bd69..b8b535cb 100644 --- a/src/lib/rpg/minimap.ts +++ b/src/lib/rpg/minimap.ts @@ -1,5 +1,6 @@ import { Player, world } from '@minecraft/server' import { playerJson, PlayerProperties } from 'lib/assets/player-json' +import { onLoad } from 'lib/utils/load-ref' export function setMinimapEnabled(player: Player, status: boolean) { player.setProperty(PlayerProperties['lw:minimap'], status) @@ -32,7 +33,9 @@ world.afterEvents.playerSpawn.subscribe(event => { resetAllMinimaps(event.player) }) -world.getAllPlayers().forEach(resetAllMinimaps) +onLoad(() => { + world.getAllPlayers().forEach(resetAllMinimaps) +}) function resetAllMinimaps(player: Player) { resetMinimapNpcPosition(player, MinimapNpc.Airdrop) diff --git a/src/lib/rpg/newbie.ts b/src/lib/rpg/newbie.ts index b1c63b31..08ecbb6a 100644 --- a/src/lib/rpg/newbie.ts +++ b/src/lib/rpg/newbie.ts @@ -1,128 +1,113 @@ -import { EntityDamageCause, Player, system, world } from "@minecraft/server"; -import { PlayerProperties } from "lib/assets/player-json"; -import { Cooldown } from "lib/cooldown"; -import { ask } from "lib/form/message"; -import { i18n } from "lib/i18n/text"; -import { Join } from "lib/player-join"; -import { createLogger } from "lib/utils/logger"; -import { ms } from "lib/utils/ms"; +import { EntityDamageCause, Player, system, world } from '@minecraft/server' +import { PlayerProperties } from 'lib/assets/player-json' +import { Cooldown } from 'lib/cooldown' +import { ask } from 'lib/form/message' +import { i18n } from 'lib/i18n/text' +import { Join } from 'lib/player-join' +import { createLogger } from 'lib/utils/logger' +import { ms } from 'lib/utils/ms' -const newbieTime = ms.from("hour", 2); +const newbieTime = ms.from('hour', 2) -const property = PlayerProperties["lw:newbie"]; +const property = PlayerProperties['lw:newbie'] export function isNewbie(player: Player) { - return !!player.database.survival.newbie; + return !!player.database.survival.newbie } export function askForExitingNewbieMode( - player: Player, - reason: Text, - callback: VoidFunction, - back: VoidFunction = () => player.success(i18n`Успешно отменено`) + player: Player, + reason: Text, + callback: VoidFunction, + back: VoidFunction = () => player.success(i18n`Успешно отменено`), ) { - if (!isNewbie(player)) return callback(); + if (!isNewbie(player)) return callback() - ask( - player, - i18n`Если вы совершите это действие, вы потеряете статус новичка: + ask( + player, + i18n`Если вы совершите это действие, вы потеряете статус новичка: - Другие игроки смогут наносить вам урон - Другие игроки смогут забирать ваш лут после смерти`, - i18n.error`Я больше не новичок`, - () => { - exitNewbieMode(player, reason); - callback(); - }, - i18n`НЕТ, НАЗАД`, - back - ); + i18n.error`Я больше не новичок`, + () => { + exitNewbieMode(player, reason) + callback() + }, + i18n`НЕТ, НАЗАД`, + back, + ) } -const logger = createLogger("Newbie"); +const logger = createLogger('Newbie') function exitNewbieMode(player: Player, reason: Text) { - if (!isNewbie(player)) return; + if (!isNewbie(player)) return - player.warn(i18n.warn`Вы ${reason}, поэтому вышли из режима новичка.`); - delete player.database.survival.newbie; - player.setProperty(property, false); + player.warn(i18n.warn`Вы ${reason}, поэтому вышли из режима новичка.`) + delete player.database.survival.newbie + player.setProperty(property, false) - logger.player(player).info`Exited newbie mode because ${reason}`; + logger.player(player).info`Exited newbie mode because ${reason}` } export function enterNewbieMode(player: Player, resetAnarchyOnlineTime = true) { - player.database.survival.newbie = 1; - if (resetAnarchyOnlineTime) player.scores.anarchyOnlineTime = 0; - player.setProperty(property, true); + player.database.survival.newbie = 1 + if (resetAnarchyOnlineTime) player.scores.anarchyOnlineTime = 0 + player.setProperty(property, true) } -Join.onFirstTimeSpawn.subscribe(enterNewbieMode); Join.onMoveAfterJoin.subscribe(({ player }) => { - const value = isNewbie(player); - if (value !== player.getProperty(property)) - player.setProperty(property, value); -}); - -const damageCd = new Cooldown(ms.from("min", 1), false); - -world.afterEvents.entityHurt.subscribe( - ({ hurtEntity, damage, damageSource: { damagingEntity, cause } }) => { - if (!(hurtEntity instanceof Player)) return; - if (damage === -17179869184) return; - - const health = hurtEntity.getComponent("health"); - const denyDamage = () => { - logger.player(hurtEntity) - .info`Recieved damage ${damage}, health ${health?.currentValue}, with cause ${cause}`; - if (health) health.setCurrentValue(health.currentValue + damage); - hurtEntity.teleport(hurtEntity.location); - }; - - if ( - hurtEntity.database.survival.newbie && - cause === EntityDamageCause.fireTick - ) { - denyDamage(); - } else if ( - damagingEntity instanceof Player && - damagingEntity.database.survival.newbie - ) { - if (damageCd.isExpired(damagingEntity)) { - denyDamage(); - askForExitingNewbieMode( - damagingEntity, - i18n`ударили игрока`, - () => void 0, - () => damagingEntity.info(i18n`Будь осторожнее в следующий раз.`) - ); - } else { - exitNewbieMode(damagingEntity, i18n.warn`снова ударили игрока`); - } - } - } -); - -new Command("newbie") - .setPermissions("member") - .setDescription(i18n`Используйте, чтобы выйти из режима новичка`) - .executes((ctx) => { - if (isNewbie(ctx.player)) { - askForExitingNewbieMode( - ctx.player, - i18n`использовали команду`, - () => void 0 - ); - } else return ctx.error(i18n`Вы не находитесь в режиме новичка.`); - }) - .overload("set") - .setPermissions("techAdmin") - .setDescription(i18n`Вводит в режим новичка`) - .executes((ctx) => { - enterNewbieMode(ctx.player); - ctx.player.success(); - }); - -system.runPlayerInterval((player) => { - if (isNewbie(player) && player.scores.anarchyOnlineTime * 2.5 > newbieTime) - exitNewbieMode(player, i18n.warn`провели на анархии больше 2 часов`); -}, "newbie mode exit"); + const value = isNewbie(player) + if (value !== player.getProperty(property)) player.setProperty(property, value) +}) + +const damageCd = new Cooldown(ms.from('min', 1), false) + +world.afterEvents.entityHurt.subscribe(({ hurtEntity, damage, damageSource: { damagingEntity, cause } }) => { + if (!(hurtEntity instanceof Player)) return + if (damage === -17179869184) return + + const health = hurtEntity.getComponent('health') + const denyDamage = () => { + logger.player(hurtEntity).info`Recieved damage ${damage}, health ${health?.currentValue}, with cause ${cause}` + if (health) health.setCurrentValue(health.currentValue + damage) + hurtEntity.teleport(hurtEntity.location) + } + + if (hurtEntity.database.survival.newbie && cause === EntityDamageCause.fireTick) { + denyDamage() + } else if (damagingEntity instanceof Player && damagingEntity.database.survival.newbie) { + if (damageCd.isExpired(damagingEntity)) { + denyDamage() + askForExitingNewbieMode( + damagingEntity, + i18n`ударили игрока`, + () => void 0, + () => damagingEntity.info(i18n`Будь осторожнее в следующий раз.`), + ) + } else { + exitNewbieMode(damagingEntity, i18n.warn`снова ударили игрока`) + } + } +}) + +new Command('newbie') + .setPermissions('member') + .setDescription(i18n`Используйте, чтобы выйти из режима новичка`) + .executes(ctx => { + if (isNewbie(ctx.player)) { + askForExitingNewbieMode(ctx.player, i18n`использовали команду`, () => void 0) + } else return ctx.error(i18n`Вы не находитесь в режиме новичка.`) + }) + .overload('set') + .setPermissions('techAdmin') + .setDescription(i18n`Вводит в режим новичка`) + .executes(ctx => { + enterNewbieMode(ctx.player) + ctx.player.success() + }) + +system.runPlayerInterval(player => { + if (isNewbie(player) && player.scores.anarchyOnlineTime * 2.5 > newbieTime) + exitNewbieMode(player, i18n.warn`провели на анархии больше 2 часов`) +}, 'newbie mode exit') diff --git a/src/lib/scheduled-block-place.ts b/src/lib/scheduled-block-place.ts index 9aceb7d2..0ab1df8f 100644 --- a/src/lib/scheduled-block-place.ts +++ b/src/lib/scheduled-block-place.ts @@ -215,7 +215,13 @@ function* scheduledBlockPlaceJob() { function timeout() { system.runTimeout(() => system.runJob(scheduledBlockPlaceJob()), 'scheduled block place', 10) } -timeout() +DB.overworld.onLoad(() => { + DB.nether.onLoad(() => { + DB.end.onLoad(() => { + timeout() + }) + }) +}) let debugLogging = false @@ -240,7 +246,7 @@ const scheduledDimensionForm = ( system.runJob( (function* placeNow() { let i = 0 - for (const immutableSchedule of schedules.valuesImmutable()) { + for (const immutableSchedule of schedules.valuesIterator()) { if (!immutableSchedule) continue i++ if (i % 100 === 0) yield diff --git a/src/lib/settings.ts b/src/lib/settings.ts index ef7948c5..e3338b66 100644 --- a/src/lib/settings.ts +++ b/src/lib/settings.ts @@ -24,9 +24,19 @@ interface ConfigMeta { [SETTINGS_GROUP_NAME]?: Text } +// TODO Create global PaidFeaturesProvider +type SettingsPayCheck = ((player: Player) => boolean) & { onFail: PlayerCallback } + export type SettingsConfig = Record< string, - { name: Text; description?: Text; value: T; onChange?: VoidFunction } + { + name: Text + description?: Text + value: T + onChange?: VoidFunction + paid?: SettingsPayCheck + whenNotPaidDefault?: NoInfer + } > & ConfigMeta @@ -172,7 +182,10 @@ export class Settings { configurable: false, enumerable: true, get() { + const paid = player ? (config[prop]?.paid?.(player) ?? true) : true const value = config[prop]?.value + if (!paid) return config[prop]?.whenNotPaidDefault ?? (typeof value === 'boolean' ? !value : value) + if (typeof value === 'undefined') throw new TypeError(`No config value for prop ${prop}`) return ( (database.getImmutable(groupId) as SettingsDatabaseValue | undefined)?.[key] ?? @@ -254,8 +267,9 @@ export function settingsGroupMenu( const store = Settings.parseConfig(storeSource, groupName, config, forRegularPlayer ? player : null) const buttons: [string, (input: string | boolean) => string][] = [] + const displayName = (config[SETTINGS_GROUP_NAME] ?? groupName).to(player.lang) const form = new ModalForm<(ctx: FormCallback, ...options: (string | boolean)[]) => void>( - (config[SETTINGS_GROUP_NAME] ?? groupName).to(player.lang), + `${displayName.split('\n')[0]}`, ) for (const key in config) { @@ -265,6 +279,8 @@ export function settingsGroupMenu( const value = saved ?? setting.value + const paid = setting.paid?.(player) ?? true + const isUnset = typeof saved === 'undefined' const isRequired = (Reflect.get(setting, 'requires') as boolean) && isUnset const isToggle = typeof value === 'boolean' @@ -273,6 +289,8 @@ export function settingsGroupMenu( label += hints[key] ? `${hints[key]}\n` : '' + if (!paid) label += `§cКУПИТЕ ЧТОБЫ ИСПОЛЬЗОВАТЬ\n` + if (isRequired) label += '§c(!) ' label += `§f§l${setting.name.to(player.lang)}§r§f` //§r @@ -337,6 +355,8 @@ export function settingsGroupMenu( ]) } + form.submitButton('Сохранить') + form.show(player, (_, ...settings) => { const hints: Record = {} diff --git a/src/modules/commands/settings.ts b/src/lib/settings/command.ts similarity index 100% rename from src/modules/commands/settings.ts rename to src/lib/settings/command.ts diff --git a/src/lib/settings/index.test.ts b/src/lib/settings/index.test.ts new file mode 100644 index 00000000..ded2efc6 --- /dev/null +++ b/src/lib/settings/index.test.ts @@ -0,0 +1,24 @@ +import { Settings } from '.' + +describe('setting change events', () => { + it('should emit events on change', () => { + const onChange = vi.fn() + const settings = Settings.world('groupName', 'group1', { + name1: { + name: 'name', + description: 'description', + value: true, + onChange, + }, + }) + + settings.name1 = false + expect(onChange).toHaveBeenCalledOnce() + + settings.name1 = true + expect(onChange).toHaveBeenCalledTimes(2) + + settings.name1 = true + expect(onChange).toHaveBeenCalledTimes(3) + }) +}) diff --git a/src/lib/settings/index.ts b/src/lib/settings/index.ts new file mode 100644 index 00000000..d04adaea --- /dev/null +++ b/src/lib/settings/index.ts @@ -0,0 +1,422 @@ +import { Player } from '@minecraft/server' +import { ActionForm } from 'lib/form/action' +import { ModalForm } from 'lib/form/modal' +import { FormCallback } from 'lib/form/utils' +import { stringify } from 'lib/util' +import { createLogger } from 'lib/utils/logger' +import { WeakPlayerMap } from 'lib/weak-player-storage' +import { MemoryTable, Table, table } from '../database/abstract' +import { Message } from '../i18n/message' +import { i18n, noI18n } from '../i18n/text' +import stringifyError from '../utils/error' +import './command' + +// TODO refactor(leaftail1880): Move all types under the Settings namespace +// TODO refactor(leaftail1880): Move everything into the lib/settings/ folder + +type DropdownSetting = [value: string, displayText: Text] + +/** Any setting value type */ +type SettingValue = string | boolean | number | DropdownSetting[] + +export const SETTINGS_GROUP_NAME = Symbol('SettingGroupName') + +interface ConfigMeta { + [SETTINGS_GROUP_NAME]?: Text +} + +// TODO Create global PaidFeaturesProvider +type SettingsPayCheck = ((player: Player) => boolean) & { onFail: PlayerCallback } + +export type SettingsConfig = Record< + string, + { + name: Text + description?: Text + value: T + onChange?: VoidFunction + paid?: SettingsPayCheck + whenNotPaidDefault?: NoInfer + } +> & + ConfigMeta + +/** Сonverting true and false to boolean and string[] to string and string literal to plain string */ +/* eslint-disable @typescript-eslint/naming-convention */ +type toPlain = T extends true | false + ? boolean + : T extends string + ? string + : T extends DropdownSetting[] + ? T[number][0] + : T extends number + ? number + : T + +export type SettingsConfigParsed = { -readonly [K in keyof T]: toPlain } + +export type SettingsDatabaseValue = Record +export type SettingsDatabase = Table + +export type PlayerSettingValues = boolean | string | number | DropdownSetting[] + +type WorldSettingsConfig = SettingsConfig & Record + +export class Settings { + /** Creates typical settings database */ + private static createDatabase(name: string) { + return table(name, () => ({})) + } + + static playerDatabase = this.createDatabase('playerOptions') + + static playerConfigs: Record> = {} + + /** + * It creates a proxy object that has the same properties as the `CONFIG` object, but the values are stored in a + * database + * + * @template Config + * @param groupName - The name that shows to players + * @param groupId - The id for the database. + * @param config - This is an object that contains the default values for each option. + * @returns An function that returns object with properties that are getters and setters. + */ + static player>( + groupName: Text, + groupId: string, + config: Config, + ) { + this.insertGroup('playerConfigs', groupName, groupId, config) + + const cache = new WeakPlayerMap() + + const fn = (player: Player): SettingsConfigParsed => { + const cached = cache.get(player) + if (cached) { + return cached as SettingsConfigParsed + } else { + const settings = this.parseConfig( + Settings.playerDatabase, + groupId, + this.playerConfigs[groupId] as Config, + player, + ) + cache.set(player, settings) + return settings + } + } + + fn.groupId = groupId + fn.groupName = groupName + fn.extend = [groupName, groupId] as const + fn.override = (setting: keyof Config, value: Partial[string]>) => { + for (const [k, v] of Object.entries(value)) { + if (config[setting]) (config[setting] as unknown as Record)[k] = v + } + } + + return fn + } + + static worldDatabase = this.createDatabase('worldOptions') + + static worldConfigs: Record = {} + + /** + * It takes a prefix and a configuration object, and returns a proxy that uses the prefix to store the configuration + * object's properties in localStorage + * + * @template Config + * @param groupId - The id for the database. + * @param config - The default values for the options. + * @returns An object with properties that are getters and setters. + */ + static world( + groupName: Text, + groupId: string, + config: Config, + ): SettingsConfigParsed { + this.insertGroup('worldConfigs', groupName, groupId, config) + return this.parseConfig(Settings.worldDatabase, groupId, this.worldConfigs[groupId] as Config) + } + + static worldCommon = [i18n`Общие настройки мира\n§7Чат, спавн и тд`, 'common'] as const + + private static insertGroup( + to: 'worldConfigs' | 'playerConfigs', + groupName: Text, + groupId: string, + config: SettingsConfig, + ) { + if (!(groupId in this[to])) { + this[to][groupId] = config + } else { + this[to][groupId] = { ...config, ...this[to][groupId] } + } + + this[to][groupId][SETTINGS_GROUP_NAME] = groupName + } + + /** + * It creates a proxy object that allows you to access and modify the values of a given object, but the values are + * stored in a database + * + * @param database - The database. + * @param groupId - The group id of the settings + * @param config - This is the default configuration object. It's an object with the keys being the option names and + * the values being the default values. + * @param player - The player object. + * @returns An object with getters and setters + */ + static parseConfig( + database: SettingsDatabase, + groupId: string, + config: Config, + player: Player | null = null, + ) { + const settings = {} + + for (const prop in config) { + const key = player ? `${player.id}:${prop}` : prop + Object.defineProperty(settings, prop, { + configurable: false, + enumerable: true, + get() { + const paid = player ? (config[prop]?.paid?.(player) ?? true) : true + const value = config[prop]?.value + if (!paid) return config[prop]?.whenNotPaidDefault ?? (typeof value === 'boolean' ? !value : value) + + if (typeof value === 'undefined') throw new TypeError(`No config value for prop ${prop}`) + return ( + (database.getImmutable(groupId) as SettingsDatabaseValue | undefined)?.[key] ?? + (Settings.isDropdown(value) ? value[0]?.[0] : value) + ) + }, + set(v: toPlain) { + Settings.set(database, groupId, key, v, config[prop]) + }, + }) + } + + return settings as SettingsConfigParsed + } + + static set( + database: SettingsDatabase, + groupId: string, + key: string, + v: SettingValue, + configProp = Settings.worldConfigs[groupId]?.[key], + ) { + let value = database.get(groupId) + if (typeof value === 'undefined') { + database.set(groupId, {}) + value = database.get(groupId) + } + value[key] = v + configProp?.onChange?.() + database.set(groupId, value) + } + + static isDropdown(v: SettingValue): v is DropdownSetting[] { + return ( + Array.isArray(v) && + v.length > 0 && + v.every( + e => Array.isArray(e) && (typeof e[1] === 'string' || e[1] instanceof Message) && typeof e[0] === 'string', + ) + ) + } +} + +export function settingsModal>( + player: Player, + config: Config, + settingsStorage: SettingsConfigParsed, + back: VoidFunction, +) { + const propertyName = 'modal' + settingsGroupMenu( + player, + propertyName, + false, + {}, + new MemoryTable({ [propertyName]: settingsStorage }, () => ({})), + { [propertyName]: config }, + back, + false, + ) +} + +const logger = createLogger('Settings') + +// TODO ref(leatail1880): Clenup settingsGroupMenu parameters +export function settingsGroupMenu( + player: Player, + groupName: string, + forRegularPlayer: boolean, + hints: Record = {}, + storeSource = forRegularPlayer ? Settings.playerDatabase : Settings.worldDatabase, + configSource = forRegularPlayer ? Settings.playerConfigs : Settings.worldConfigs, + back = forRegularPlayer ? playerSettingsMenu : worldSettingsMenu, + showHintAboutSavedStatus = true, +) { + const displayType = forRegularPlayer ? 'own' : 'world' + const config = configSource[groupName] + if (!config) throw new TypeError(`No config for groupName ${groupName}`) + + const store = Settings.parseConfig(storeSource, groupName, config, forRegularPlayer ? player : null) + const buttons: [string, (input: string | boolean) => string][] = [] + const displayName = (config[SETTINGS_GROUP_NAME] ?? groupName).to(player.lang) + const form = new ModalForm<(ctx: FormCallback, ...options: (string | boolean)[]) => void>( + `${displayName.split('\n')[0]}`, + ) + + for (const key in config) { + const saved = store[key] as string | number | boolean | undefined + const setting = config[key] + if (!setting) throw new TypeError(`No setting for key ${key}`) + + const value = saved ?? setting.value + + const paid = setting.paid?.(player) ?? true + + const isUnset = typeof saved === 'undefined' + const isRequired = (Reflect.get(setting, 'requires') as boolean) && isUnset + const isToggle = typeof value === 'boolean' + + let label = '' + + label += hints[key] ? `${hints[key]}\n` : '' + + if (!paid) label += `§cКУПИТЕ ЧТОБЫ ИСПОЛЬЗОВАТЬ\n` + + if (isRequired) label += '§c(!) ' + label += `§f§l${setting.name.to(player.lang)}§r§f` //§r + + if (setting.description) label += `§i - ${setting.description.to(player.lang)}` + if (isUnset) label += i18n.nocolor`§8(По умолчанию)\n`.to(player.lang) + + if (isToggle) { + form.addToggle(label, value) + } else if (Settings.isDropdown(setting.value)) { + form.addDropdownFromObject(label, Object.fromEntries(setting.value.map(e => [e[0], e[1].to(player.lang)])), { + defaultValueIndex: Settings.isDropdown(value) ? undefined : value, + }) + } else { + const isString = typeof value === 'string' + + if (!isString) { + label += i18n.nocolor`\n§7§lЗначение:§r ${stringify(value)}`.to(player.lang) + label += i18n.nocolor`\n§7§lТип: §r§f${settingTypes[typeof value] ?? typeof value}`.to(player.lang) + } + + form.addTextField(label, i18n`Настройка не изменится`.to(player.lang), isString ? value : JSON.stringify(value)) + } + + buttons.push([ + key, + input => { + try { + if (typeof input === 'undefined' || input === '') return '' + + let result + if (typeof input === 'boolean' || Settings.isDropdown(setting.value)) { + result = input + } else { + switch (typeof setting.value) { + case 'string': + result = input + break + case 'number': + result = Number(input) + if (isNaN(result)) return i18n.error`Введите число!`.to(player.lang) + break + case 'object': + result = JSON.parse(input) as typeof result + + break + } + } + + if (stringify(store[key]) === stringify(result)) return '' + if (typeof result !== 'undefined') { + logger.player(player).info`Changed ${displayType} setting '${groupName} > ${key}' to '${result}'` + store[key] = result + } + + return showHintAboutSavedStatus ? i18n.success`Сохранено!`.to(player.lang) : '' + } catch (error: unknown) { + logger.player(player).info`Changing ${displayType} setting '${groupName} > ${key}' error: ${error}` + + return stringifyError.isError(error) ? `§c${error.message}` : stringify(error) + } + }, + ]) + } + + form.submitButton('Сохранить') + + form.show(player, (_, ...settings) => { + const hints: Record = {} + + for (const [i, setting] of settings.entries()) { + const button = buttons[i] + if (!button) continue + + const [key, callback] = button + const hint = callback(setting) + + if (hint) hints[key] = hint + } + + if (Object.keys(hints).length) { + // Show current menu with hints + self() + } else { + // No hints, go back to previous menu + back(player) + } + + function self() { + settingsGroupMenu(player, groupName, forRegularPlayer, hints, storeSource, configSource, back) + } + }) +} + +const settingTypes: Partial< + Record<'string' | 'number' | 'object' | 'boolean' | 'symbol' | 'bigint' | 'undefined' | 'function', Text> +> = { string: i18n`Строка`, number: i18n`Число`, object: i18n`JSON-Объект`, boolean: i18n`Переключатель` } + +/** Opens player settings menu */ +export function playerSettingsMenu(player: Player, back?: VoidFunction) { + const form = new ActionForm(i18n`§dНастройки`.to(player.lang)) + if (back) form.addButtonBack(back, player.lang) + + for (const groupName in Settings.playerConfigs) { + const name = Settings.playerConfigs[groupName]?.[SETTINGS_GROUP_NAME] + if (name) form.button(name.to(player.lang), () => settingsGroupMenu(player, groupName, true)) + } + + form.show(player) +} + +export function worldSettingsMenu(player: Player) { + const form = new ActionForm(noI18n`§dНастройки мира`) + + for (const [groupId, group] of Object.entries(Settings.worldConfigs)) { + const database = Settings.worldDatabase.get(groupId) + + let unsetCount = 0 + for (const [key, option] of Object.entries(group)) { + if (option.required && typeof database[key] === 'undefined') unsetCount++ + } + + form.button(i18n.nocolor.join`${group[SETTINGS_GROUP_NAME] ?? groupId}`.badge(unsetCount).to(player.lang), () => { + settingsGroupMenu(player, groupId, false) + }) + } + + form.show(player) +} diff --git a/src/lib/shop/buttons/item-modifier.ts b/src/lib/shop/buttons/item-modifier.ts index 0914f63d..738cfc9d 100644 --- a/src/lib/shop/buttons/item-modifier.ts +++ b/src/lib/shop/buttons/item-modifier.ts @@ -2,7 +2,7 @@ import { ContainerSlot, ItemStack, Player } from '@minecraft/server' import { getAuxOrTexture } from 'lib/form/chest' import { ItemFilter, OnSelect, selectItemForm } from 'lib/form/select-item' import { translateEnchantment, translateTypeId } from 'lib/i18n/lang' -import { i18n } from 'lib/i18n/text' +import { i18n } from 'lib/i18n/text' import { Cost, MultiCost, ShouldHaveItemCost } from '../cost' import { ShopForm, ShopFormSection } from '../form' import { ProductName } from '../product' diff --git a/src/lib/shop/buttons/sellable-item.test.ts b/src/lib/shop/buttons/sellable-item.test.ts index 700bccc6..6031851c 100644 --- a/src/lib/shop/buttons/sellable-item.test.ts +++ b/src/lib/shop/buttons/sellable-item.test.ts @@ -2,8 +2,8 @@ import { MinecraftItemTypes } from '@minecraft/vanilla-data' import { TEST_createPlayer, TEST_onFormOpen } from 'test/utils' import { Shop } from '../shop' -import { doNothing } from 'lib' import 'lib/database/scoreboard' +import { doNothing } from 'lib/util' describe('sellableItem', () => { it('should sell items', () => { diff --git a/src/lib/shop/cost.test.ts b/src/lib/shop/cost.test.ts index 1a60e0e9..b97b9721 100644 --- a/src/lib/shop/cost.test.ts +++ b/src/lib/shop/cost.test.ts @@ -74,18 +74,18 @@ describe('MultiCost', () => { const cost = new MultiCost().money(1000).item(MinecraftItemTypes.Apple).item(MinecraftItemTypes.NetheriteAxe).xp(10) expect(cost.toString(player)).toMatchInlineSnapshot( - `"§61.000, §7Яблоко §r§f§7x1, §7Незеритовый топор §r§f§7x1, §7§a10§7lvl"`, + `"§61.000, §7 §r§f§7x1, §7 §r§f§7x1, §7§a10§7lvl"`, ) expect(cost.toString(player, false)).toMatchInlineSnapshot( `"§c1.000, §cЯблоко §r§f§cx1, §cНезеритовый топор §r§f§cx1, §4§c10§4lvl"`, ) - expect(cost.failed(player)).toMatchInlineSnapshot(` - "§7§60§7/§61.000§7§f§7 - §c§70§c/§71§c §f§cЯблоко§c - §c§70§c/§71§c §f§cНезеритовый топор§c - §cНужно уровней опыта: §710§c, §70§c/§710§c" + expect(cost.failed(player)).toMatchInlineSnapshot(` + "§7§60§7/§61.000§7§f§7 + §c§70§c/§71§c §f§cЯблоко§c + §c§70§c/§71§c §f§cНезеритовый топор§c + §cНужно уровней опыта: §710§c, §70§c/§710§c" `) }) diff --git a/src/lib/shop/cost/item-cost.ts b/src/lib/shop/cost/item-cost.ts index 06ead61e..3820286a 100644 --- a/src/lib/shop/cost/item-cost.ts +++ b/src/lib/shop/cost/item-cost.ts @@ -1,6 +1,5 @@ import { ContainerSlot, EntityComponentTypes, EquipmentSlot, ItemStack, Player } from '@minecraft/server' import { eqSlots } from 'lib/form/select-item' -import { Message } from 'lib/i18n/message' import { i18n, noI18n } from 'lib/i18n/text' import { itemNameXCount } from '../../utils/item-name-x-count' import { Cost } from '../cost' @@ -19,10 +18,11 @@ export class ItemCost extends Cost { * @param amount - Amount of items to search for. */ constructor( - private readonly item: string | ItemStack, + private readonly item: string | ItemStack | (() => ItemStack), private readonly amount = item instanceof ItemStack ? item.amount : 1, protected is = (itemStack: ItemStack) => { if (typeof this.item === 'string') return itemStack.typeId === this.item + if (typeof this.item === 'function') return this.item().is(itemStack) return this.item.is(itemStack) }, ) { @@ -79,7 +79,11 @@ export class ItemCost extends Cost { toString(player: Player, canBuy?: boolean, amount = true): string { return itemNameXCount( - this.item instanceof ItemStack ? this.item : { typeId: this.item, amount: this.amount }, + this.item instanceof ItemStack + ? this.item + : typeof this.item === 'function' + ? this.item() + : { typeId: this.item, amount: this.amount }, canBuy ? '§7' : '§c', amount, player.lang, diff --git a/src/lib/shop/form.ts b/src/lib/shop/form.ts index 03a8e969..8d85e56f 100644 --- a/src/lib/shop/form.ts +++ b/src/lib/shop/form.ts @@ -1,15 +1,13 @@ -import { ContainerSlot, ItemStack, Player } from '@minecraft/server' +import { ContainerSlot, ItemStack, Player, Potions } from '@minecraft/server' import { MinecraftItemTypes, + MinecraftPotionDeliveryTypes as PotionDelivery, MinecraftPotionEffectTypes as PotionEffects, - MinecraftPotionLiquidTypes as PotionLiquids, - MinecraftPotionModifierTypes as PotionModifiers, } from '@minecraft/vanilla-data' import { shopFormula } from 'lib/assets/shop' import { table } from 'lib/database/abstract' import { ActionForm } from 'lib/form/action' import { getAuxOrTexture, getAuxTextureOrPotionAux } from 'lib/form/chest' -import { Message } from 'lib/i18n/message' import { i18n } from 'lib/i18n/text' import { Cost } from 'lib/shop/cost' import { isKeyof } from 'lib/util' @@ -177,8 +175,8 @@ export class ShopForm { return this } - potion(cost: Cost, effect: PotionEffects, modifier = PotionModifiers.Normal, liquid = PotionLiquids.Regular) { - const item = ItemStack.createPotion({ effect, modifier, liquid }) + potion(cost: Cost, effect: PotionEffects, delivery = PotionDelivery.Consume) { + const item = Potions.resolve(effect, delivery) this.itemStack(item, cost, getAuxTextureOrPotionAux(item)) } diff --git a/src/lib/sidebar.ts b/src/lib/sidebar.ts index dcff2907..192750ed 100644 --- a/src/lib/sidebar.ts +++ b/src/lib/sidebar.ts @@ -1,6 +1,7 @@ import { Player } from '@minecraft/server' -import { util, wrap } from 'lib/util' +import { wrap } from 'lib/util' import { ActionbarPriority } from './extensions/on-screen-display' +import { onLoad } from './utils/game' import { WeakPlayerSet } from './weak-player-storage' type Format = @@ -25,7 +26,7 @@ export class Sidebar { static forceHide = new WeakPlayerSet() - content + content!: SidebarVariables getExtra @@ -54,7 +55,9 @@ export class Sidebar { this.name = name this.getExtra = getExtra this.getOptions = getOptions - this.content = this.init(content) + onLoad(() => { + this.content = this.init(content) + }) Sidebar.instances.push(this) } diff --git a/src/lib/util.ts b/src/lib/util.ts index 46aa81de..be0bb058 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -8,21 +8,22 @@ export { inspect, stringify, stringifyError } export const util = { /** Runs the given callback safly. If it throws any error it will be handled */ catch(this: void, fn: () => void | Promise, subtype = 'Handled', originalStack?: string) { - const prefix = `§6${subtype}: ` try { const promise = fn() if (promise instanceof Promise) { - promise.catch((e: unknown) => { - console.error(prefix + stringifyError(e as Error, { omitStackLines: 1 })) - }) + promise.catch((e: unknown) => util.onError(e, subtype, originalStack)) } } catch (e: unknown) { - console.error( - prefix + stringifyError(e as Error, { omitStackLines: 1 }) + (originalStack ? '\n\n' + originalStack : ''), - ) + util.onError(e, subtype, originalStack) } }, + onError(e: unknown, subtype: string, originalStack?: string) { + const prefix = `§6${subtype}: ` + const add = originalStack ? '\n\n' + stringifyError.stack.get(0, originalStack) : '' + console.error(prefix + stringifyError(e as Error, { omitStackLines: 1 }) + add) + }, + benchmark: Object.assign( /** * It returns a function that when called, returns the time it took to call the function and records result to const @@ -77,7 +78,7 @@ export const util = { const r = TerminalColors.r if (!r) throw new TypeError('Broken terminal colors: no r') - return __SERVER__ ? text.replace(/§(.)/g, (_, a: string) => TerminalColors[a] ?? r) + r : text.replace(/§(.)/g, '') + return text.replace(/§(.)/g, (_, a: string) => TerminalColors[a] ?? r) + r }, fromTerminalColorsToMinecraft(string: string) { diff --git a/src/modules/commands/stringifyBenchmarkReult.ts b/src/lib/utils/benchmark.ts similarity index 58% rename from src/modules/commands/stringifyBenchmarkReult.ts rename to src/lib/utils/benchmark.ts index 853a1738..bfc3736a 100644 --- a/src/modules/commands/stringifyBenchmarkReult.ts +++ b/src/lib/utils/benchmark.ts @@ -1,6 +1,41 @@ +import { Command } from 'lib/command' import { TIMERS_PATHES } from 'lib/extensions/system' +import { ActionForm } from 'lib/form/action' import { util } from 'lib/util' +new Command('benchmark') + .setAliases('bench') + .setDescription('Показывает время работы интервалов скриптов') + .setPermissions('techAdmin') + .string('type', true) + .boolean('pathes', true) + .boolean('sort', true) + .array('output', ['form', 'chat', 'log'], true) + .executes((ctx, type = 'timers', timerPathes = false, sort = true, output = 'form') => { + if (!(type in util.benchmark.results)) + return ctx.error( + 'Неизвестный тип бенчмарка! Доступные типы: \n §f' + Object.keys(util.benchmark.results).join('\n '), + ) + + const result = stringifyBenchmarkResult({ type: type, timerPathes, sort }) + + switch (output) { + case 'form': { + const show = () => { + new ActionForm('Benchmark', result) + .button('Refresh', null, show) + .button('Exit', null, () => void 0) + .show(ctx.player) + } + return show() + } + case 'chat': + return ctx.reply(result) + case 'log': + return console.log(result) + } + }) + /** * It takes the benchmark results and sorts them by average time, then it prints them out in a nice format * diff --git a/src/lib/utils/big-structure.ts b/src/lib/utils/big-structure.ts index da6753bf..2218642a 100644 --- a/src/lib/utils/big-structure.ts +++ b/src/lib/utils/big-structure.ts @@ -27,6 +27,7 @@ export class BigStructure extends Cuboid { saveOnCreate = true, date = Date.now().toString(32), private structures: BigStructureSaved[] = [], + private entities = false, ) { super(pos1, pos2) this.prefix = `${prefix}|${date}` @@ -52,7 +53,7 @@ export class BigStructure extends Cuboid { } catch {} world.structureManager.createFromWorld(id, this.dimension, min, max, { - includeEntities: false, + includeEntities: this.entities, includeBlocks: true, saveMode: this.saveMode, }) diff --git a/src/lib/utils/error.ts b/src/lib/utils/error.ts index 9539d84b..419c2279 100644 --- a/src/lib/utils/error.ts +++ b/src/lib/utils/error.ts @@ -19,7 +19,7 @@ const stringifyError = Object.assign( t.name = 'StringError' } - __PRODUCTION__ && + !__DEV__ && s?.('error', { name: t.name ?? 'Error', stack: t.stack ?? '', @@ -57,7 +57,7 @@ const stringifyError = Object.assign( [/(.*)\(native\)(.*)/, '§8$1(native)$2§f'], [s => (s.includes('lib') ? `§7${s.replace(/§./g, '')}§f` : s)], // [s => (s.startsWith('§7') ? s : s.replace(/:(\d+)/, ':§6$1§f'))], - [/__init \(index\.js:4\)/, ''], + [/__init \(index\.js:8\)/, ''], ] as [RegExp | ((s: string) => string), string?][], /** Parses stack */ diff --git a/src/lib/utils/game.ts b/src/lib/utils/game.ts index 18929a94..a63ea948 100644 --- a/src/lib/utils/game.ts +++ b/src/lib/utils/game.ts @@ -1,3 +1,5 @@ +export * from './load-ref' + import { Block, GameMode, diff --git a/src/lib/utils/item-name-x-count.ts b/src/lib/utils/item-name-x-count.ts index 9e46b378..c536e63d 100644 --- a/src/lib/utils/item-name-x-count.ts +++ b/src/lib/utils/item-name-x-count.ts @@ -1,63 +1,90 @@ -import { ItemPotionComponent, ItemStack, Player } from '@minecraft/server' -import { - MinecraftPotionEffectTypes as PotionEffects, - MinecraftPotionModifierTypes as PotionModifiers, -} from '@minecraft/vanilla-data' +import { ItemStack, Player } from '@minecraft/server' +// import { +// MinecraftPotionEffectTypes as PotionEffects, +// MinecraftPotionDeliveryTypes as PotionDelivery, +// } from '@minecraft/vanilla-data' import { Language } from 'lib/assets/lang' import { langToken, translateToken } from 'lib/i18n/lang' -import { i18n } from 'lib/i18n/text' /** Returns \nx */ export function itemNameXCount( - item: Pick | ItemStack, + item: (Pick & { localizationKey?: string }) | ItemStack, c = '§7', amount = true, player: Player | Language, ): string { const locale = player instanceof Player ? player.lang : player - const potion = item instanceof ItemStack && item.getComponent(ItemPotionComponent.componentId) - if (potion) { - const { potionEffectType: effect, potionLiquidType: liquid, potionModifierType: modifier } = potion + // const potion = item instanceof ItemStack && item.getComponent(ItemPotionComponent.componentId) + // if (potion) { + // const { potionEffectType: effect } = potion - const token = langToken(`minecraft:${liquid.id}_${effect.id}_potion`) - const modifierIndex = modifier.id === PotionModifiers.Normal ? 0 : modifier.id === PotionModifiers.Long ? 1 : 2 - const time = potionModifierToTime[effect.id]?.[modifierIndex] - const modifierS = modifierIndexToS[modifierIndex]?.to(locale) ?? '' + // const token = langToken(`minecraft:${liquid.id}_${effect.id}_potion`) + // const modifierIndex = modifier.id === PotionModifiers.Normal ? 0 : modifier.id === PotionModifiers.Long ? 1 : 2 + // const time = potionModifierToTime[effect.id]?.[modifierIndex] + // const modifierS = modifierIndexToS[modifierIndex]?.to(locale) ?? '' - return `${c}${item.nameTag ?? translateToken(token, locale)}${modifierS}${time ? ` §7${time}` : ''}` - } + // return `${c}${item.nameTag ?? translateToken(token, locale)}${modifierS}${time ? ` §7${time}` : ''}` + // } - return `${c}${item.nameTag ? (c ? uncolor(item.nameTag) : item.nameTag).replace(/\n.*/, '') : translateToken(langToken(item), locale)}${amount && item.amount ? ` §r§f${c}x${item.amount}` : ''}` + return `${c}${item.nameTag ? (c ? uncolor(item.nameTag) : item.nameTag).replace(/\n.*/, '') : translateToken(item.localizationKey ?? langToken(item.typeId), locale)}${amount && item.amount ? ` §r§f${c}x${item.amount}` : ''}` } function uncolor(t: string) { return t.replaceAll(/§./g, '') } -const modifierIndexToS = ['', i18n` (долгое)`, ' II'] - -// TODO Ensure it works properly for all modifiers -const potionModifierToTime: Record = { - [PotionEffects.Healing]: ['0:45', '2:00', '0:22'], - [PotionEffects.Swiftness]: ['3:00', '8:00', '1:30'], - [PotionEffects.FireResistance]: ['3:00', '8:00', ''], - [PotionEffects.NightVision]: ['3:00', '8:00', ''], - [PotionEffects.Strength]: ['3:00', '8:00', '1:30'], - [PotionEffects.Leaping]: ['3:00', '8:00', '1:30'], - [PotionEffects.WaterBreath]: ['3:00', '8:00', ''], - [PotionEffects.Invisibility]: ['3:00', '8:00', ''], - [PotionEffects.SlowFalling]: ['1:30', '4:00', ''], - - [PotionEffects.Poison]: ['0:45', '2:00', '0:22'], - [PotionEffects.Weakness]: ['1:30', '4:00', ''], - [PotionEffects.Slowing]: ['1:30', '4:00', ''], - [PotionEffects.Harming]: ['', '', ''], - [PotionEffects.Wither]: ['0:40', '', ''], - [PotionEffects.Infested]: ['3:00', '', ''], - [PotionEffects.Weaving]: ['3:00', '', ''], - [PotionEffects.Oozing]: ['3:00', '', ''], - [PotionEffects.WindCharged]: ['3:00', '', ''], - - [PotionEffects.TurtleMaster]: ['0:20', '0:40', '0:20'], - [PotionEffects.None]: ['', '', ''], -} satisfies Record +// const modifierIndexToS = ['', i18n` (долгое)`, ' II'] + +// // TODO Ensure it works properly for all modifiers +// const potionModifierToTime: Record = { +// [PotionEffects.Healing]: ['0:45', '2:00', '0:22'], +// [PotionEffects.Swiftness]: ['3:00', '8:00', '1:30'], +// [PotionEffects.FireResistance]: ['3:00', '8:00', ''], +// [PotionEffects.LongFireResistance]: [], + +// [PotionEffects.Nightvision]: ['3:00', '8:00', ''], +// [PotionEffects.Strength]: ['3:00', '8:00', '1:30'], +// [PotionEffects.Leaping]: ['3:00', '8:00', '1:30'], +// [PotionEffects.WaterBreathing]: ['3:00', '8:00', ''], +// [PotionEffects.Invisibility]: ['3:00', '8:00', ''], +// [PotionEffects.SlowFalling]: ['1:30', '4:00', ''], + +// [PotionEffects.Poison]: ['0:45', '2:00', '0:22'], +// [PotionEffects.Weakness]: ['1:30', '4:00', ''], +// [PotionEffects.Slowness]: ['1:30', '4:00', ''], +// [PotionEffects.Harming]: ['', '', ''], +// [PotionEffects.Wither]: ['0:40', '', ''], +// [PotionEffects.Infested]: ['3:00', '', ''], +// [PotionEffects.Weaving]: ['3:00', '', ''], +// [PotionEffects.Oozing]: ['3:00', '', ''], +// [PotionEffects.WindCharged]: ['3:00', '', ''], + +// [PotionEffects.TurtleMaster]: ['0:20', '0:40', '0:20'], +// [PotionEffects.Awkward]: ['', '', ''], +// [PotionEffects.LongInvisibility]: [], +// [PotionEffects.LongLeaping]: [], +// [PotionEffects.LongMundane]: [], +// [PotionEffects.LongNightvision]: [], +// [PotionEffects.LongPoison]: [], +// [PotionEffects.LongRegeneration]: [], +// [PotionEffects.LongSlowFalling]: [], +// [PotionEffects.LongSlowness]: [], +// [PotionEffects.LongStrength]: [], +// [PotionEffects.LongSwiftness]: [], +// [PotionEffects.LongTurtleMaster]: [], +// [PotionEffects.LongWaterBreathing]: [], +// [PotionEffects.LongWeakness]: [], +// [PotionEffects.Mundane]: [], +// [PotionEffects.Regeneration]: [], +// [PotionEffects.StrongHarming]: [], +// [PotionEffects.StrongHealing]: [], +// [PotionEffects.StrongLeaping]: [], +// [PotionEffects.StrongPoison]: [], +// [PotionEffects.StrongRegeneration]: [], +// [PotionEffects.StrongSlowness]: [], +// [PotionEffects.StrongStrength]: [], +// [PotionEffects.StrongSwiftness]: [], +// [PotionEffects.StrongTurtleMaster]: [], +// [PotionEffects.Thick]: [], +// [PotionEffects.Water]: [] +// } satisfies Record diff --git a/src/lib/utils/load-ref.ts b/src/lib/utils/load-ref.ts new file mode 100644 index 00000000..77b62147 --- /dev/null +++ b/src/lib/utils/load-ref.ts @@ -0,0 +1,79 @@ +import { system, world } from '@minecraft/server' +import { util } from 'lib/util' +import stringifyError from './error' + +export class LoadRef { + static loadStarted = false + + static loadFinished = false + + static unwrap(v: MaybeRef): T { + return v instanceof LoadRef ? v.value : v + } + + protected static loaders: (() => void)[] = [] + + static { + world.afterEvents.worldLoad.subscribe(() => { + LoadRef.loadStarted = true + system.runJob( + (function* loadRefJob() { + for (const loader of LoadRef.loaders) { + loader() + yield + } + LoadRef.loadFinished = true + })(), + ) + }) + } + + get value(): T { + throw new Error('Value is not yet loaded! Value defined at: \n' + this.stack) + } + + private stack: string + + constructor(loader: () => T) { + this.stack = stringifyError.stack.get() + LoadRef.loaders.push(() => { + util.catch( + () => { + const value = loader() + Object.defineProperty(this, 'value', { value }) + util.catch( + () => { + for (const waiter of this.waiters) waiter(value) + }, + 'LoadRefWaiterError', + this.stack, + ) + }, + 'LoadRefError', + this.stack, + ) + }) + } + + protected waiters: ((value: T) => void)[] = [] + + onLoad = (waiter: (value: T) => void) => { + this.waiters.push(waiter) + } +} + +export type MaybeRef = T | LoadRef + +export function onLoad(loader: () => T) { + if (LoadRef.loadStarted) { + // console.log('LOADING', new Error()) + return { + value: loader(), + onLoad(v: (v: T) => void) { + v(this.value) + }, + } + } + + return new LoadRef(loader) +} diff --git a/src/lib/utils/logger.test.ts b/src/lib/utils/logger.test.ts index 95217c9f..4b2a2377 100644 --- a/src/lib/utils/logger.test.ts +++ b/src/lib/utils/logger.test.ts @@ -1,6 +1,6 @@ -import { util } from 'lib' import { TEST_createPlayer } from 'test/utils' import { createLogger } from './logger' +import { util } from 'lib/util' describe('Logger', () => { it('should create logger that prints debug info', () => { diff --git a/src/lib/utils/ms-old.test.ts b/src/lib/utils/ms-old.test.ts new file mode 100644 index 00000000..b47f69c5 --- /dev/null +++ b/src/lib/utils/ms-old.test.ts @@ -0,0 +1,10 @@ +import { ms } from './ms' +import { msold, ngettext } from './ms-old' + +describe('uhh', () => { + it('works', () => { + expect(msold.remaining(ms.from('min', 5) - 1000).type).toMatchInlineSnapshot(`"минут"`) + expect(msold.remaining(ms.from('min', 5)).type).toMatchInlineSnapshot(`"минут"`) + expect(msold.remaining(ms.from('min', 5) + 1000).type).toMatchInlineSnapshot(`"минут"`) + }) +}) diff --git a/src/lib/utils/ms-old.ts b/src/lib/utils/ms-old.ts new file mode 100644 index 00000000..26772e0c --- /dev/null +++ b/src/lib/utils/ms-old.ts @@ -0,0 +1,109 @@ +type Plurals = [one: string, two: string, five: string] +/** + * Gets plural form based on provided number + * + * @param n - Number + * @param forms - Plurals forms in format `1 секунда 2 секунды 5 секунд` + * @returns Plural form. Currently only Russian supported + */ + +export function ngettext(n: number, [one, few, more]: Plurals): string { + if (!Number.isInteger(n)) return more + return [one, few, more][ + n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2 + ] as unknown as string +} + +type Time = 'year' | 'month' | 'day' | 'hour' | 'min' | 'sec' | 'ms' + +// eslint-disable-next-line @typescript-eslint/naming-convention +export class msold { + /** + * Parses the remaining time in milliseconds into a more human-readable format + * + * @example + * const {type, value} = ms.remaining(1000) + * console.log(value + ' ' + type) // 1 секунда + * + * @example + * const {type, value} = ms.remaining(1000 * 60 * 2) + * console.log(value + ' ' + type) // 2 минуты + * + * @example + * const {type, value} = ms.remaining(1000 * 60 * 2, { converters: ['sec' ]}) // only convert to sec + * console.log(value + ' ' + type) // 120 секунд + * + * @param ms - Milliseconds to parse from + * @param options - Convertion options + * @param options.converters - List of types to convert to. If some time was not specified, e.g. ms, the most closest + * type will be used + * @returns - An object containing the parsed time and the type of time (e.g. "days", "hours", etc.) + */ + static remaining( + ms: number, + { + converters: converterTypes = ['sec', 'min', 'hour', 'day'], + friction: frictionOverride, + }: { converters?: Time[]; friction?: number } = {}, + ): { value: string; type: string } { + const converters = converterTypes.map(type => this.converters[type]).sort((a, b) => b.time - a.time) + for (const { time, friction = 0, plurals } of converters) { + const value = ms / time + if (~~value >= 1) { + // Replace all 234.0 values to 234 + const parsedTime = value + .toFixed(frictionOverride ?? friction) + .replace(/(\.[1-9]*)0+$/m, '$1') + .replace(/\.$/m, '') + + return { + value: parsedTime, + type: ngettext(parseInt(parsedTime), plurals), + } + } + } + + return { value: ms.toString(), type: 'миллисекунд' } + } + + /** Converts provided time to ms depending on the type */ + static from(type: Time, num: number) { + return this.converters[type].time * num + } + + private static converters: Record = { + ms: { + time: 1, + plurals: ['миллисекунду', 'миллисекунды', 'миллисекунд'], + }, + sec: { + time: 1000, + plurals: ['секунда', 'секунды', 'секунд'], + }, + min: { + time: 1000 * 60, + plurals: ['минуту', 'минуты', 'минут'], + friction: 1, + }, + hour: { + time: 1000 * 60 * 60, + plurals: ['час', 'часа', 'часов'], + friction: 1, + }, + day: { + time: 1000 * 60 * 60 * 24, + plurals: ['день', 'дня', 'дней'], + friction: 2, + }, + month: { + time: 1000 * 60 * 60 * 24 * 30, + plurals: ['месяц', 'месяца', 'месяцев'], + friction: 2, + }, + year: { + time: 1000 * 60 * 60 * 24 * 30 * 12, + plurals: ['год', 'года', 'лет'], + friction: 3, + }, + } +} diff --git a/src/lib/utils/ms.ts b/src/lib/utils/ms.ts index 802a6b46..34507bd5 100644 --- a/src/lib/utils/ms.ts +++ b/src/lib/utils/ms.ts @@ -1,6 +1,6 @@ /* i18n-ignore */ -type Time = 'year' | 'month' | 'day' | 'hour' | 'min' | 'sec' | 'ms' +export type Time = 'year' | 'month' | 'day' | 'hour' | 'min' | 'sec' | 'ms' // eslint-disable-next-line @typescript-eslint/naming-convention export class ms { diff --git a/src/lib/utils/rewards.test.ts b/src/lib/utils/rewards.test.ts index 4cb345a7..d3ff1613 100644 --- a/src/lib/utils/rewards.test.ts +++ b/src/lib/utils/rewards.test.ts @@ -15,7 +15,7 @@ describe('itemDescription', () => { undefined, player, ), - ).toMatchInlineSnapshot(`"§7Яблоко"`) + ).toMatchInlineSnapshot(`"§7"`) }) it('should create description', () => { const player = TEST_createPlayer() diff --git a/src/lib/utils/rewards.ts b/src/lib/utils/rewards.ts index 7eb6c39f..9be8d1c2 100644 --- a/src/lib/utils/rewards.ts +++ b/src/lib/utils/rewards.ts @@ -89,7 +89,7 @@ export class Rewards { */ give(player: Player, tell = true): Rewards { for (const reward of this.entries) Rewards.giveOne(player, reward) - if (tell) player.success(i18n`Вы получили награды!`) + if (tell && this.entries.length) player.success(i18n`Вы получили награды!`) return this } diff --git a/src/lib/utils/singleton.test.ts b/src/lib/utils/singleton.test.ts new file mode 100644 index 00000000..16e6e41b --- /dev/null +++ b/src/lib/utils/singleton.test.ts @@ -0,0 +1,43 @@ +import { Singleton } from './singleton' + +describe('Singleton', () => { + it('should create singleton', () => { + class test extends Singleton {} + + new test() + + test.getInstance() + + class b extends Singleton {} + + expect(() => b.getInstance()).toThrow() + + new b() + }) + + it('should use singleton from subclass', () => { + class Parent extends Singleton {} + + class Sub extends Parent {} + + const instance = new Sub() + + expect(() => Parent.getInstance()).not.toThrow() + expect(Parent.getInstance()).toBe(instance) + }) + + it('should use singleton from subclass', () => { + class Parent extends Singleton {} + + class Sub extends Parent {} + + class Sub2 extends Sub {} + + const instance = new Sub2() + + expect(() => Sub.getInstance()).not.toThrow() + expect(Sub.getInstance()).toBe(instance) + expect(() => Parent.getInstance()).not.toThrow() + expect(Parent.getInstance()).toBe(instance) + }) +}) diff --git a/src/lib/utils/singleton.ts b/src/lib/utils/singleton.ts new file mode 100644 index 00000000..958e7d66 --- /dev/null +++ b/src/lib/utils/singleton.ts @@ -0,0 +1,34 @@ +export class Singleton { + private static instance?: Singleton + + private static where?: string + + static getInstance(this: abstract new (...args: any) => T) { + const self = this as unknown as typeof Singleton + if (!self.instance) throw new Error('getInstance: ' + self.name + ' is not initialized!') + return self.instance as T + } + + constructor() { + const singleton = this.constructor as typeof Singleton + if (singleton.instance) { + throw new Error(`${singleton.name} is already initialized! ${singleton.where}`) + } + + const stack = new Error().stack + + singleton.instance = this + singleton.where = stack + + let prototype + let limit = 10 + do { + prototype = Object.getPrototypeOf(prototype ?? singleton) as typeof Singleton + if (prototype === Singleton) break + + prototype.instance ??= this + prototype.where = stack + limit-- + } while (limit) + } +} diff --git a/src/lib/utils/structure.test.ts b/src/lib/utils/structure.test.ts index 681af47e..2d81fe43 100644 --- a/src/lib/utils/structure.test.ts +++ b/src/lib/utils/structure.test.ts @@ -1,5 +1,5 @@ import { StructureRotation } from '@minecraft/server' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { structureLikeRotate, toAbsolute, toRelative } from './structure' describe('structureLikeRotate', () => { diff --git a/src/lib/weak-player-storage.spec.ts b/src/lib/weak-player-storage.spec.ts deleted file mode 100644 index 8393ec12..00000000 --- a/src/lib/weak-player-storage.spec.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { gamesuite, gametest } from 'test/framework' -import { WeakPlayerMap } from './weak-player-storage' - -gamesuite('WeakPlayerMap', () => { - gametest('testWeakPlayerMap', async test => { - const player = test.player() - const playerMap = new WeakPlayerMap() - - playerMap.set(player, 'testValue') - - test.assert(playerMap.get(player) === 'testValue', "Value should be 'testValue'") - test.assert(playerMap.has(player), 'Map should contain the player') - - player.remove() - - test.succeedWhen(() => { - test.assert(!playerMap.has(player), 'Map should not contain the player after leaving') - }) - }) - - gametest('testWeakPlayerMapOffline', async test => { - const player = test.player() - const playerMap = new WeakPlayerMap() - - playerMap.set(player, 'testValue') - - test.assert(playerMap.get(player) === 'testValue', "Value should be 'testValue'") - test.assert(playerMap.has(player), 'Map should contain the player') - - player.remove() - - test.assert(playerMap.has(player), 'Map should contain the player after leaving') - }) - - gametest('testWeakPlayerMapCallback', async test => { - const player = test.player() - const playerId = player.id - let called = 0 - const playerMap = new WeakPlayerMap({ - onLeave(pId) { - test.assert(pId === playerId, 'Player id should match') - called++ - }, - onDelete(pId) { - test.assert(pId === playerId, 'Player id should match') - called++ - }, - }) - - playerMap.set(player, 'testValue') - - test.assert(playerMap.get(player) === 'testValue', "Value should be 'testValue'") - test.assert(playerMap.has(player), 'Map should contain the player') - - player.remove() - - test.assert(playerMap.has(player), 'Map should not contain the player after leaving') - test.assert(called === 1, 'On leave callback should be called once') - }) -}) diff --git a/src/modules/anticheat/dupe.ts b/src/modules/anticheat/dupe.ts deleted file mode 100644 index f8a9c96c..00000000 --- a/src/modules/anticheat/dupe.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { system, world } from '@minecraft/server' -import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { Vec } from 'lib' - -world.afterEvents.pistonActivate.subscribe(event => { - const blocks = event.piston.getAttachedBlocksLocations() - - system.runTimeout( - () => { - if (!event.block.isValid) return - for (const blockl of blocks) { - const block = event.block.dimension.getBlock(blockl) - if (block?.typeId === MinecraftBlockTypes.Hopper) { - const nearbyPlayers = event.block.dimension.getPlayers({ location: event.block.location, maxDistance: 20 }) - console.warn( - `PISTON DUPE DETECTED!!! ${Vec.string(event.block.location)}\n${nearbyPlayers.map(e => e.name).join('\n')}`, - ) - event.block.dimension.createExplosion(event.block.location, 1, { breaksBlocks: true }) - return - } - } - }, - 'piston dupe prevent', - 2, - ) -}) diff --git a/src/modules/anticheat/index.ts b/src/modules/anticheat/index.ts deleted file mode 100644 index a01b86d2..00000000 --- a/src/modules/anticheat/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import './dupe' -import './forbidden-items' -import './whitelist' diff --git a/src/modules/chat/chat.ts b/src/modules/chat/chat.ts deleted file mode 100644 index 3d181dc6..00000000 --- a/src/modules/chat/chat.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { world } from '@minecraft/server' -import { Sounds } from 'lib/assets/custom-sounds' -import { sendPacketToStdout } from 'lib/bds/api' -import { Cooldown } from 'lib/cooldown' -import { table } from 'lib/database/abstract' -import { getFullname } from 'lib/get-fullname' -import { i18n, noI18n } from 'lib/i18n/text' -import { Settings } from 'lib/settings' -import { muteInfo } from './mute' - -export class Chat { - static muteDb = table<{ mutedUntil: number; reason?: string }>('chatMute') - - static settings = Settings.world(...Settings.worldCommon, { - cooldown: { - name: 'Задержка чата (миллисекунды)', - description: '0 что бы отключить', - value: 0, - onChange: () => this.updateCooldown(), - }, - range: { - name: 'Радиус чата', - description: 'Радиус для скрытия сообщений дальних игроков', - value: 30, - }, - capsLimit: { - name: 'Макс больших букв в сообщении', - description: 'Не разрешает отправлять сообщения где слишком много капса', - value: 5, - }, - role: { - name: 'Роли в чате', - value: true, - }, - }) - - static playerSettings = Settings.player(i18n`Чат\n§7Звуки и внешний вид чата`, 'chat', { - sound: { - name: i18n`Звук`, - description: i18n`Звука сообщений от игроков поблизости`, - value: true, - }, - }) - - private static cooldown: Cooldown - - private static updateCooldown() { - this.cooldown = new Cooldown(this.settings.cooldown, true, {}) - } - - static { - this.updateCooldown() - Command.chatSendListener = event => { - if (Command.isCommand(event.message)) return - - try { - if (!this.cooldown.isExpired(event.sender)) return - const player = event.sender - - if (!this.cooldown.isExpired(event.sender)) { - console.log('Spam chat', player.name, event.message) - return - } - - const mute = this.muteDb.getImmutable(event.sender.id) - if (mute) { - if (mute.mutedUntil > Date.now()) { - console.log('Muted chat', player.name, event.message) - return muteInfo(player, mute) - } - } - - const messageText = event.message.replace(/\\n/g, '\n').replace(/§./g, '').trim() - - const caps = messageText.split('').reduce((p, c) => (c !== c.toLowerCase() ? p + 1 : p), 0) - if (caps > this.settings.capsLimit) { - return event.sender.fail(noI18n.error`В сообщении слишком много капса (${caps}/${this.settings.capsLimit})`) - } - - const allPlayers = world.getAllPlayers() - - // Players that are near message sender - const nearPlayers = event.sender.dimension - .getPlayers({ - location: event.sender.location, - maxDistance: this.settings.range, - }) - .filter(e => e.id !== event.sender.id && e.dimension.id === event.sender.dimension.id) - - // Array with ranged players (include sender id) - const nID = nearPlayers.map(e => e.id) - nID.push(event.sender.id) - - // Outranged players - const otherPlayers = allPlayers.filter(e => !nID.includes(e.id)) - const message = `${getFullname(event.sender, { nameColor: '§7', equippment: true })}§r: ${messageText}` - const fullrole = getFullname(event.sender, { name: false }) - - if (__SERVER__) { - // This is handled/parsed by ServerCore - // Dont really want to do request each time here - sendPacketToStdout('chatMessage', { - name: event.sender.name, - role: fullrole, - print: message, - message: messageText, - }) - } - - for (const near of nearPlayers) { - near.tell(message) - if (this.playerSettings(near).sound) near.playSound(Sounds.Click) - } - - for (const outranged of otherPlayers) { - outranged.tell(`${getFullname(event.sender, { nameColor: '§8' })}§7: ${messageText}`) - } - - event.sender.tell(message) - } catch (error) { - console.error(error) - } - } - } -} diff --git a/src/modules/chat/mute.ts b/src/modules/chat/mute.ts deleted file mode 100644 index 3dd1f591..00000000 --- a/src/modules/chat/mute.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Player } from '@minecraft/server' -import { ArrayForm } from 'lib/form/array' -import { ModalForm } from 'lib/form/modal' -import { form } from 'lib/form/new' -import { selectPlayer } from 'lib/form/select-player' -import { getFullname } from 'lib/get-fullname' -import { noI18n } from 'lib/i18n/text' -import { ms } from 'lib/utils/ms' -import { Chat } from './chat' - -export function muteInfo( - player: Player, - mute: { readonly mutedUntil: number; readonly reason?: string | undefined }, -): void { - return player.fail( - noI18n.error`Вы замьючены в чате до ${new Date(mute.mutedUntil).toYYYYMMDD()} ${new Date(mute.mutedUntil).toHHMM()}${mute.reason ? noI18n.error` по причине: ${mute.reason}` : ''}`, - ) -} -new Command('mute') - .setDescription('Заглушить игрока в чате') - .setPermissions('helper') - .executes(ctx => { - selectPlayer(ctx.player, 'замутить').then(e => { - new ModalForm('Мут ' + e.name) - .addTextField('Время', 'введи', '5') - .addDropdownFromObject('Тип времени', { - min: 'Минуты', - hour: 'Часы', - }) - .addTextField('Причина', 'опиши чтобы знал что делать нельзя') - .show(ctx.player, (formctx, timeRaw, type, reason) => { - const time = parseInt(timeRaw) - if (isNaN(time)) return formctx.error(`${timeRaw} это не число`) - - const actualTime = ms.from(type, time) - Chat.muteDb.set(e.id, { mutedUntil: Date.now() + actualTime, reason }) - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - if (e.player) muteInfo(e.player, Chat.muteDb.get(e.id)!) - ctx.player.success() - }) - }) - }) -new Command('unmute') - .setDescription('Вернуть обратно') - .setPermissions('helper') - .executes(ctx => { - new ArrayForm('Муты', Chat.muteDb.entries()) - .button(([id, info]) => { - if (!info) return false - const until = `До: ${new Date(info.mutedUntil).toYYYYMMDD()} ${new Date(info.mutedUntil).toHHMM()}` - return [ - `${getFullname(id)} ${until}\n${info.reason}`, - form((f, { self }) => { - f.title(getFullname(id)) - f.body(`Причина: ${info.mutedUntil}\n${until}`) - f.button('Размутить', () => { - Chat.muteDb.delete(id) - self() - }) - }).show, - ] - }) - .show(ctx.player) - }) diff --git a/src/modules/commands/ban.ts b/src/modules/commands/ban.ts deleted file mode 100644 index 5cec3b70..00000000 --- a/src/modules/commands/ban.ts +++ /dev/null @@ -1 +0,0 @@ -// TODO Implement ban diff --git a/src/modules/commands/camera.ts b/src/modules/commands/camera.ts index 6f620866..c19dbed8 100644 --- a/src/modules/commands/camera.ts +++ b/src/modules/commands/camera.ts @@ -1,5 +1,5 @@ -import { restorePlayerCamera } from 'lib' import { i18n } from 'lib/i18n/text' +import { restorePlayerCamera } from 'lib/utils/game' new Command('camera').setDescription(i18n`Возвращает камеру в исходное состояние`).executes(ctx => { restorePlayerCamera(ctx.player, 1) diff --git a/src/modules/commands/gamemode.ts b/src/modules/commands/gamemode.ts index cfe527e0..24c90533 100644 --- a/src/modules/commands/gamemode.ts +++ b/src/modules/commands/gamemode.ts @@ -2,9 +2,12 @@ import { GameMode } from '@minecraft/server' import { MinecraftEffectTypes } from '@minecraft/vanilla-data' -import { is, isNotPlaying, Temporary } from 'lib' + import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { i18n, noI18n } from 'lib/i18n/text' +import { Temporary } from 'lib/temporary' +import { is } from 'lib/roles' +import { isNotPlaying } from 'lib/utils/game' import { WeakPlayerMap } from 'lib/weak-player-storage' function fastGamemode(mode: GameMode, shorname: string) { diff --git a/src/modules/commands/help.ts b/src/modules/commands/help.ts index b9c9de48..0944ea87 100644 --- a/src/modules/commands/help.ts +++ b/src/modules/commands/help.ts @@ -1,10 +1,12 @@ import { Player } from '@minecraft/server' -import { ROLES, getRole } from 'lib' + import { defaultLang } from 'lib/assets/lang' import { CmdLet } from 'lib/command/cmdlet' import { Command } from 'lib/command/index' import { commandNoPermissions, commandNotFound } from 'lib/command/utils' import { i18n, noI18n } from 'lib/i18n/text' +import { ROLES } from 'lib/roles' +import { getRole } from 'lib/roles' const help = new Command('help') .setDescription(i18n`Выводит список команд`) diff --git a/src/modules/commands/index.ts b/src/modules/commands/index.ts index c1af2255..82b917ff 100644 --- a/src/modules/commands/index.ts +++ b/src/modules/commands/index.ts @@ -1,20 +1,16 @@ import './camera' -import './db' import './gamemode' import './help' import './items' import './kill' -import './leaderboard' -import './mail' import './name' import './pid' import './ping' -import './role' +import './player' import './rtp' import './rules' import './scores' import './send' -import './settings' import './shell' import './sit' import './socials' @@ -22,4 +18,3 @@ import './stats' import './tp' import './version' import './wipe' -import './player' diff --git a/src/modules/commands/items.ts b/src/modules/commands/items.ts index fc8bffc7..5715181d 100644 --- a/src/modules/commands/items.ts +++ b/src/modules/commands/items.ts @@ -1,4 +1,5 @@ -import { ArrayForm, langToken, translateToken } from 'lib' +import { ArrayForm } from 'lib/form/array' +import { translateToken } from 'lib/i18n/lang' import { noI18n } from 'lib/i18n/text' import { customItems } from 'lib/rpg/custom-item' @@ -9,7 +10,7 @@ new Command('items') new ArrayForm('Items', customItems) .button(item => { return [ - `${item.nameTag ?? translateToken(langToken(item.typeId) ?? '', ctx.player.lang)}\n${item.getLore().join('')}`, + `${item.nameTag ?? translateToken(item.localizationKey, ctx.player.lang)}\n${item.getLore().join('')}`, () => ctx.player.container?.addItem(item), ] }) diff --git a/src/modules/commands/mail.ts b/src/modules/commands/mail.ts deleted file mode 100644 index 27713121..00000000 --- a/src/modules/commands/mail.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { Player } from "@minecraft/server"; -import { ActionForm, ArrayForm, Mail, Menu, Settings, ask } from "lib"; -import { i18n, i18nPlural } from "lib/i18n/text"; -import { Join } from "lib/player-join"; -import { Rewards } from "lib/utils/rewards"; - -const command = new Command("mail") - .setDescription(i18n`Посмотреть входящие сообщения почты`) - .setPermissions("member") - .executes((ctx) => mailMenu(ctx.player)); - -const getSettings = Settings.player(...Menu.settings, { - mailReadOnOpen: { - name: i18n`Читать письмо при открытии`, - description: i18n`Помечать ли письмо прочитанным при открытии`, - value: true, - }, - mailClaimOnDelete: { - name: i18n`Собирать награды при удалении`, - description: i18n`Собирать ли награды при удалении письма`, - value: true, - }, -}); - -const getJoinSettings = Settings.player(...Join.settings.extend, { - unreadMails: { - name: i18n`Почта`, - description: i18n`Показывать ли при входе сообщение с кол-вом непрочитанных`, - value: true, - }, -}); - -export function mailMenu(player: Player, back?: VoidFunction) { - new ArrayForm( - i18n`Почта`.badge(Mail.getUnreadMessagesCount(player.id)), - Mail.getLetters(player.id) - ) - .filters({ - unread: { - name: i18n`Непрочитанные`, - description: i18n`Показывать только непрочитанные сообщения`, - value: false, - }, - unclaimed: { - name: i18n`Несобранные награды`, - description: i18n`У письма есть несобранные награды`, - value: false, - }, - sort: { - name: i18n`Соритровать по`, - value: [ - ["date", i18n`Дате`], - ["name", i18n`Имени`], - ], - }, - }) - .button(({ letter, index }) => { - const name = `${letter.read ? "§7" : "§f"}${letter.title}${ - letter.read ? "\n§8" : "§c*\n§7" - }${letter.content}`; - return [ - name, - () => { - letterDetailsMenu({ letter, index }, player); - if (getSettings(player).mailReadOnOpen) - Mail.readMessage(player.id, index); - }, - ]; - }) - .sort((keys, filters) => { - if (filters.unread) keys = keys.filter((letter) => !letter.letter.read); - - if (filters.unclaimed) - keys = keys.filter((letter) => !letter.letter.rewardsClaimed); - - filters.sort === "name" - ? keys.sort((letterA, letterB) => - letterA.letter.title.localeCompare(letterB.letter.title) - ) - : keys.reverse(); - - return keys; - }) - .back(back) - .show(player); -} - -function letterDetailsMenu( - { letter, index }: ReturnType<(typeof Mail)["getLetters"]>[number], - player: Player, - back = () => mailMenu(player), - message = "" -) { - const settings = getSettings(player); - // TODO Fix collors - // TODO Rewrite to use new form - const form = new ActionForm( - letter.title, - i18n`${message}${letter.content}\n\n§l§fНаграды:§r\n${Rewards.restore( - letter.rewards - ).toString(player)}`.to(player.lang) - ).addButtonBack(back, player.lang); - - if (!letter.rewardsClaimed && letter.rewards.length) - if (player.database.inv !== "anarchy") { - form.button(i18n.disabled`Забрать награду`.to(player.lang), () => - letterDetailsMenu( - { letter, index }, - player, - back, - i18n.error`Вы не можете забрать награды не находясь на анархии`.to( - player.lang - ) - ) - ); - } else { - form.button(i18n`Забрать награду`.to(player.lang), () => { - Mail.claimRewards(player, index); - letterDetailsMenu( - { letter, index }, - player, - back, - message + i18n.success`Награда успешно забрана!\n\n`.to(player.lang) - ); - }); - } - - if (!letter.read && !settings.mailReadOnOpen) - form.button(i18n`Пометить как прочитанное`.to(player.lang), () => { - Mail.readMessage(player.id, index); - back(); - }); - - let deleteDescription = i18n.error`Удалить письмо?`.to(player.lang); - if (!letter.rewardsClaimed) { - if (getSettings(player).mailClaimOnDelete) { - deleteDescription += i18n` Все награды будут собраны автоматически`.to( - player.lang - ); - } else { - deleteDescription += - i18n` Вы потеряете все награды, прикрепленные к письму!`.to( - player.lang - ); - } - } - - form.button(i18n.error`Удалить письмо`.to(player.lang), null, () => { - ask(player, deleteDescription, i18n`Удалить`, () => { - if (getSettings(player).mailClaimOnDelete) - Mail.claimRewards(player, index); - Mail.deleteMessage(player, index); - back(); - }); - }); - - form.show(player); -} - -Join.onMoveAfterJoin.subscribe(({ player }) => { - if (!getJoinSettings(player).unreadMails) return; - - const unreadCount = Mail.getUnreadMessagesCount(player.id); - if (unreadCount === 0) return; - - player.info( - i18n.join`${i18n.header`Почта:`} ${i18nPlural`У вас ${unreadCount} непрочитанных сообщений!`} ${command}` - ); -}); diff --git a/src/modules/commands/mute.ts b/src/modules/commands/mute.ts deleted file mode 100644 index f694668b..00000000 --- a/src/modules/commands/mute.ts +++ /dev/null @@ -1 +0,0 @@ -// TODO Implement mute diff --git a/src/modules/commands/pid.ts b/src/modules/commands/pid.ts index 2d6650d7..ffe7201e 100644 --- a/src/modules/commands/pid.ts +++ b/src/modules/commands/pid.ts @@ -1,7 +1,9 @@ import { Player } from '@minecraft/server' -import { is, ModalForm } from 'lib' +import { ModalForm } from 'lib/form/modal' + import { selectPlayer } from 'lib/form/select-player' import { i18n, noI18n } from 'lib/i18n/text' +import { is } from 'lib/roles' new Command('pid') .setDescription(i18n`Выдает ваш айди`) diff --git a/src/modules/commands/player.ts b/src/modules/commands/player.ts index 4a6416cd..79c5e29c 100644 --- a/src/modules/commands/player.ts +++ b/src/modules/commands/player.ts @@ -1,67 +1,58 @@ -import { Player } from "@minecraft/server"; -import { is, Portal, stringify } from "lib"; -import { Achievement } from "lib/achievements/achievement"; -import { LoreForm } from "lib/form/lore"; -import { form } from "lib/form/new"; -import { selectPlayer } from "lib/form/select-player"; -import { i18n } from "lib/i18n/text"; -import { statsForm } from "./stats"; +import { Player } from '@minecraft/server' +import { Achievement } from 'lib/achievements/achievement' +import { LoreForm } from 'lib/form/lore' +import { form } from 'lib/form/new' +import { selectPlayer } from 'lib/form/select-player' +import { i18n } from 'lib/i18n/text' +import { Portal } from 'lib/portals' +import { is } from 'lib/roles' +import { stringify } from 'lib/util' +import { statsForm } from './stats' -new Command("player") - .setAliases("p", "profile") - .setPermissions("everybody") - .setDescription(i18n`Общее меню игрока`) - .executes((ctx) => playerMenu({ targetId: ctx.player.id }).command(ctx)); +new Command('player') + .setAliases('p', 'profile') + .setPermissions('everybody') + .setDescription(i18n`Общее меню игрока`) + .executes(ctx => playerMenu({ targetId: ctx.player.id }).command(ctx)) -const playerMenu = form.params<{ targetId: string }>( - (f, { player, params: { targetId }, self }) => { - const moder = is(player.id, "moderator"); - const db = Player.database.getImmutable(targetId); - f.title(db.name ?? targetId); +const playerMenu = form.params<{ targetId: string }>((f, { player, params: { targetId }, self }) => { + const moder = is(player.id, 'moderator') + const db = Player.database.getImmutable(targetId) + f.title(db.name ?? targetId) - if (moder) { - f.button(i18n`Другие игроки`, () => { - selectPlayer(player, i18n`открыть его меню`.to(player.lang), self).then( - (target) => { - playerMenu({ targetId: target.id }).show(player, self); - } - ); - }); - } - f.button(i18n`Статистика`, statsForm({ targetId })); + if (moder) { + f.button(i18n`Другие игроки`, () => { + selectPlayer(player, i18n`открыть его меню`.to(player.lang), self).then(target => { + playerMenu({ targetId: target.id }).show(player, self) + }) + }) + } + f.button(i18n`Статистика`, statsForm({ targetId })) - f.button( - i18n`Задания` - .badge(db.quests?.active.length) - .size(db.quests?.completed.length), - form((f) => f.body(stringify(db.quests))) - ); - f.button( - form((f) => { - const all = Achievement.list.length; - const completed = db.achivs?.s.filter((e) => !!e.r).length ?? 0; - f.title( - i18n`Достижения ${completed}/${all} (${( - (completed / all) * - 100 - ).toFixed(0)}%%)` - ); - f.body(stringify(db.achivs)); - }) - ); - f.button( - form((f) => { - const portals = db.unlockedPortals; - f.title(i18n`Порталы ${portals?.length ?? 0}/${Portal.portals.size}`); - f.body(portals?.join("\n") ?? ""); - }) - ); - f.button( - form((f) => { - const lore = LoreForm.getAll(targetId); - f.title(i18n`Лор прочитан`.size(lore.length)); - f.body(lore.map((e) => stringify(e)).join("\n")); - }) - ); - } -); + f.button( + i18n`Задания`.badge(db.quests?.active.length).size(db.quests?.completed.length), + form(f => f.body(stringify(db.quests))), + ) + f.button( + form(f => { + const all = Achievement.list.length + const completed = db.achivs?.s.filter(e => !!e.r).length ?? 0 + f.title(i18n`Достижения ${completed}/${all} (${((completed / all) * 100).toFixed(0)}%%)`) + f.body(stringify(db.achivs)) + }), + ) + f.button( + form(f => { + const portals = db.unlockedPortals + f.title(i18n`Порталы ${portals?.length ?? 0}/${Portal.portals.size}`) + f.body(portals?.join('\n') ?? '') + }), + ) + f.button( + form(f => { + const lore = LoreForm.getAll(targetId) + f.title(i18n`Лор прочитан`.size(lore.length)) + f.body(lore.map(e => stringify(e)).join('\n')) + }), + ) +}) diff --git a/src/modules/commands/rtp.ts b/src/modules/commands/rtp.ts index 5793bf91..f559c9aa 100644 --- a/src/modules/commands/rtp.ts +++ b/src/modules/commands/rtp.ts @@ -1,8 +1,9 @@ import { Player, TicksPerSecond } from '@minecraft/server' import { MinecraftEffectTypes } from '@minecraft/vanilla-data' -import { LockAction, Vec } from 'lib' +import { LockAction } from 'lib/action' import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { i18n } from 'lib/i18n/text' +import { Vec } from 'lib/vector' import { WeakPlayerMap } from 'lib/weak-player-storage' import { randomLocationInAnarchy } from 'modules/places/anarchy/random-location-in-anarchy' diff --git a/src/modules/commands/scores.ts b/src/modules/commands/scores.ts index 6f9c5aae..cf8eb503 100644 --- a/src/modules/commands/scores.ts +++ b/src/modules/commands/scores.ts @@ -1,12 +1,16 @@ /* i18n-ignore */ import { Player, ScoreboardIdentityType, ScoreboardObjective, world } from '@minecraft/server' -import { ActionForm, BUTTON, Leaderboard, ModalForm, noBoolean } from 'lib' import { defaultLang } from 'lib/assets/lang' import { ScoreboardDB } from 'lib/database/scoreboard' +import { ActionForm } from 'lib/form/action' import { ArrayForm } from 'lib/form/array' +import { ModalForm } from 'lib/form/modal' import { selectPlayer } from 'lib/form/select-player' +import { BUTTON } from 'lib/form/utils' import { i18n, noI18n, textTable } from 'lib/i18n/text' +import { noBoolean } from 'lib/util' +import { Leaderboard } from 'lib/rpg/leaderboard' new Command('scores') .setDescription('Управляет счетом игроков (монеты, листья)') diff --git a/src/modules/commands/send.ts b/src/modules/commands/send.ts index 609685c0..adfbd217 100644 --- a/src/modules/commands/send.ts +++ b/src/modules/commands/send.ts @@ -1,9 +1,11 @@ /* i18n-ignore */ import { Player, ScoreName, world } from '@minecraft/server' -import { ActionForm, Mail, ModalForm } from 'lib' +import { ActionForm } from 'lib/form/action' +import { ModalForm } from 'lib/form/modal' import { createSelectPlayerMenu } from 'lib/form/select-player' import { i18n } from 'lib/i18n/text' +import { Mail } from 'lib/mail' import { Rewards } from 'lib/utils/rewards' interface SendState { diff --git a/src/modules/commands/sit.ts b/src/modules/commands/sit.ts index d4bffdfa..9162f35e 100644 --- a/src/modules/commands/sit.ts +++ b/src/modules/commands/sit.ts @@ -1,5 +1,5 @@ import { system, world } from '@minecraft/server' -import { LockAction } from 'lib' +import { LockAction } from 'lib/action' import { CustomEntityTypes } from 'lib/assets/custom-entity-types' import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { i18n } from 'lib/i18n/text' diff --git a/src/modules/commands/socials.ts b/src/modules/commands/socials.ts index b235dc2e..2ae4f5be 100644 --- a/src/modules/commands/socials.ts +++ b/src/modules/commands/socials.ts @@ -1,6 +1,6 @@ import { system, TicksPerSecond, world } from '@minecraft/server' -import { Settings } from 'lib' import { emoji } from 'lib/assets/emoji' +import { Settings } from 'lib/settings' const socials = [ [`${emoji.custom.socials.discord} §9Discord§7: §b§ldsc.gg/lushway`, 'discord'], diff --git a/src/modules/commands/stats.ts b/src/modules/commands/stats.ts index 85828234..a6a0c79a 100644 --- a/src/modules/commands/stats.ts +++ b/src/modules/commands/stats.ts @@ -1,81 +1,50 @@ -import { Player, ScoreName, ScoreNames } from "@minecraft/server"; -import { - capitalize, - ScoreboardDB, - scoreboardDisplayNames, - scoreboardObjectiveNames, -} from "lib"; -import { form } from "lib/form/new"; -import { i18n, textTable } from "lib/i18n/text"; +import { Player, ScoreName, ScoreNames } from '@minecraft/server' +import { ScoreboardDB, scoreboardDisplayNames, scoreboardObjectiveNames } from 'lib/database/scoreboard' +import { form } from 'lib/form/new' +import { i18n, textTable } from 'lib/i18n/text' +import { capitalize } from 'lib/util' -new Command("stats") - .setDescription(i18n`Показывает статистику по игре`) - .executes((ctx) => statsForm({}).command(ctx)); +new Command('stats').setDescription(i18n`Показывает статистику по игре`).executes(ctx => statsForm({}).command(ctx)) -export const statsForm = form.params<{ targetId?: string }>( - (f, { player, params: { targetId = player.id } }) => { - const scores = ScoreboardDB.getOrCreateProxyFor(targetId); +export const statsForm = form.params<{ targetId?: string }>((f, { player, params: { targetId = player.id } }) => { + const scores = ScoreboardDB.getOrCreateProxyFor(targetId) - f.title(i18n.header`Статистика игрока ${Player.nameOrUnknown(targetId)}`); - f.body( - textTable([ - [ - scoreboardDisplayNames.totalOnlineTime, - formatDate(scores.totalOnlineTime), - ], - [ - scoreboardDisplayNames.anarchyOnlineTime, - formatDate(scores.anarchyOnlineTime), - ], - "", - [ - scoreboardDisplayNames.lastSeenDate, - i18n.time(Date.now() - scores.lastSeenDate * 1000), - ], - [ - scoreboardDisplayNames.anarchyLastSeenDate, - i18n.time(Date.now() - scores.anarchyLastSeenDate * 1000), - ], - "", - ...statsTable( - scores, - (key) => key, - (n) => n.to(player.lang) - ), - "", - ...statsTable( - scores, - (key) => `anarchy${capitalize(key)}`, - (n) => i18n`Анархия ${n}`.to(player.lang) - ), - ]) - ); - } -); + f.title(i18n.header`Статистика игрока ${Player.nameOrUnknown(targetId)}`) + f.body( + textTable([ + [scoreboardDisplayNames.totalOnlineTime, formatDate(scores.totalOnlineTime)], + [scoreboardDisplayNames.anarchyOnlineTime, formatDate(scores.anarchyOnlineTime)], + '', + [scoreboardDisplayNames.lastSeenDate, i18n.time(Date.now() - scores.lastSeenDate * 1000)], + [scoreboardDisplayNames.anarchyLastSeenDate, i18n.time(Date.now() - scores.anarchyLastSeenDate * 1000)], + '', + ...statsTable( + scores, + key => key, + n => n.to(player.lang), + ), + '', + ...statsTable( + scores, + key => `anarchy${capitalize(key)}`, + n => i18n`Анархия ${n}`.to(player.lang), + ), + ]), + ) +}) function formatDate(date: number) { - return i18n.hhmmss(date); + return i18n.hhmmss(date) } -function statsTable( - s: Player["scores"], - getKey: (k: ScoreNames.Stat) => ScoreName, - getN: (n: Text) => string -) { - const table: Text.Table[number][] = []; - for (const key of scoreboardObjectiveNames.stats) { - const k = getKey(key); - table.push([getN(scoreboardDisplayNames[k]), s[k]]); - if (key === "kills") - table.push([ - getN(i18n`Убийств/Смертей`), - s[getKey("kills")] / s[getKey("deaths")], - ]); - if (key === "damageGive") - table.push([ - getN(i18n`Нанесено/Получено`), - s[getKey("damageGive")] / s[getKey("damageRecieve")], - ]); - } - return table satisfies Text.Table; +function statsTable(s: Player['scores'], getKey: (k: ScoreNames.Stat) => ScoreName, getN: (n: Text) => string) { + const table: Text.Table[number][] = [] + for (const key of scoreboardObjectiveNames.stats) { + const k = getKey(key) + table.push([getN(scoreboardDisplayNames[k]), s[k]]) + if (key === 'kills') table.push([getN(i18n`Убийств/Смертей`), s[getKey('kills')] / s[getKey('deaths')]]) + if (key === 'damageGive') + table.push([getN(i18n`Нанесено/Получено`), s[getKey('damageGive')] / s[getKey('damageRecieve')]]) + } + return table satisfies Text.Table } diff --git a/src/modules/commands/tp.ts b/src/modules/commands/tp.ts index d64035e3..2b28daf8 100644 --- a/src/modules/commands/tp.ts +++ b/src/modules/commands/tp.ts @@ -1,11 +1,11 @@ import { world } from '@minecraft/server' -import { Vec } from 'lib' import { form } from 'lib/form/new' import { debounceMenu } from 'lib/form/utils' import { getFullname } from 'lib/get-fullname' import { i18n, i18nPlural, noI18n } from 'lib/i18n/text' import { isNotPlaying } from 'lib/utils/game' import { VectorInDimension } from 'lib/utils/point' +import { Vec } from 'lib/vector' import { SafePlace } from 'modules/places/lib/safe-place' import { Spawn } from 'modules/places/spawn' import { StoneQuarry } from 'modules/places/stone-quarry/stone-quarry' diff --git a/src/modules/commands/version.ts b/src/modules/commands/version.ts index d8a27c93..5e396c57 100644 --- a/src/modules/commands/version.ts +++ b/src/modules/commands/version.ts @@ -1,5 +1,5 @@ -import { is } from 'lib' import { i18n, textTable } from 'lib/i18n/text' +import { is } from 'lib/roles' new Command('version') .setAliases('v') diff --git a/src/modules/commands/wipe.ts b/src/modules/commands/wipe.ts index 35e9c3b8..e0741956 100644 --- a/src/modules/commands/wipe.ts +++ b/src/modules/commands/wipe.ts @@ -1,22 +1,20 @@ import { GameMode, Player, PlayerDatabase, ScoreNames, ShortcutDimensions, system, world } from '@minecraft/server' -import { - Airdrop, - ArrayForm, - BUTTON, - Compass, - InventoryStore, - is, - Join, - ModalForm, - pick, - scoreboardObjectiveNames, - sizeOf, -} from 'lib' + import { table } from 'lib/database/abstract' +import { InventoryStore } from 'lib/database/inventory' +import { scoreboardObjectiveNames } from 'lib/database/scoreboard' +import { ArrayForm } from 'lib/form/array' +import { ModalForm } from 'lib/form/modal' import { form, NewFormCallback, NewFormCreator } from 'lib/form/new' +import { BUTTON } from 'lib/form/utils' import { i18n, noI18n } from 'lib/i18n/text' +import { Join } from 'lib/player-join' import { Quest } from 'lib/quest' +import { is } from 'lib/roles' +import { Airdrop } from 'lib/rpg/airdrop' +import { Compass } from 'lib/rpg/menu' import { enterNewbieMode, isNewbie } from 'lib/rpg/newbie' +import { pick, sizeOf } from 'lib/util' import { Anarchy } from 'modules/places/anarchy/anarchy' import { Spawn } from 'modules/places/spawn' import { updateBuilderStatus } from 'modules/world-edit/builder' @@ -240,7 +238,7 @@ function wipe(player: Player) { for (let i = 0; i <= 26; i++) player.runCommand(`replaceitem entity @s slot.enderchest ${i} air`) - system.runTimeout(() => Join.emitFirstJoin(player), 'clear', 30) + system.runTimeout(() => Join.getInstance().emitFirstJoin(player), 'clear', 30) } function exitFromAllQuests(player: Player) { diff --git a/src/modules/features/break-place-outside-of-region.ts b/src/modules/features/break-place-outside-of-region.ts index 91548c56..5f4e364a 100644 --- a/src/modules/features/break-place-outside-of-region.ts +++ b/src/modules/features/break-place-outside-of-region.ts @@ -1,10 +1,12 @@ import { Player, system } from '@minecraft/server' import { MinecraftItemTypes } from '@minecraft/vanilla-data' -import { Cooldown, ms } from 'lib' +import { Cooldown } from 'lib/cooldown' + import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { i18n } from 'lib/i18n/text' import { actionGuard, ActionGuardOrder, BLOCK_CONTAINERS, DOORS, GATES, SWITCHES, TRAPDOORS } from 'lib/region/index' import { ScheduleBlockPlace } from 'lib/scheduled-block-place' +import { ms } from 'lib/utils/ms' import { BaseRegion } from 'modules/places/base/region' const INTERACTABLE = DOORS.concat(SWITCHES, TRAPDOORS, BLOCK_CONTAINERS, GATES) diff --git a/src/modules/indicator/health.ts b/src/modules/indicator/health.ts index 3b254d99..892ab621 100644 --- a/src/modules/indicator/health.ts +++ b/src/modules/indicator/health.ts @@ -1,12 +1,14 @@ import { Entity, system, world } from '@minecraft/server' import { MinecraftEntityTypes } from '@minecraft/vanilla-data' -import { Boss, ms, Vec } from 'lib' import { CustomEntityTypes } from 'lib/assets/custom-entity-types' import { ClosingChatSet } from 'lib/extensions/player' import { NOT_MOB_ENTITIES } from 'lib/region/config' +import { Boss } from 'lib/rpg/boss' import { isNotPlaying } from 'lib/utils/game' +import { Vec } from 'lib/vector' +import { ms } from 'lib/utils/ms' import { PlayerNameTagModifiers, setNameTag } from 'modules/indicator/player-name-tag' interface BaseHurtEntity { diff --git a/src/modules/indicator/player-name-tag.ts b/src/modules/indicator/player-name-tag.ts index 2fc53739..64495267 100644 --- a/src/modules/indicator/player-name-tag.ts +++ b/src/modules/indicator/player-name-tag.ts @@ -1,6 +1,7 @@ import { Entity, Player, system } from '@minecraft/server' -import { isNotPlaying } from 'lib' + import { getFullname } from 'lib/get-fullname' +import { isNotPlaying } from 'lib/utils/game' export const PlayerNameTagModifiers: ((player: Player) => string | false)[] = [ player => { diff --git a/src/modules/indicator/pvp.ts b/src/modules/indicator/pvp.ts index c841f596..e2a76e12 100644 --- a/src/modules/indicator/pvp.ts +++ b/src/modules/indicator/pvp.ts @@ -1,10 +1,15 @@ import { EntityDamageCause, EntityHurtAfterEvent, Player, system, world } from '@minecraft/server' -import { Boss, BossArenaRegion, LockAction, ms, Settings } from 'lib' +import { LockAction } from 'lib/action' + import { emoji } from 'lib/assets/emoji' import { Core } from 'lib/extensions/core' import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { i18n } from 'lib/i18n/text' import { RegionEvents } from 'lib/region/events' +import { BossArenaRegion } from 'lib/region/kinds/boss-arena' +import { Boss } from 'lib/rpg/boss' +import { Settings } from 'lib/settings' +import { ms } from 'lib/utils/ms' import { WeakPlayerMap } from 'lib/weak-player-storage' import { Anarchy } from 'modules/places/anarchy/anarchy' diff --git a/src/modules/indicator/test-damage.ts b/src/modules/indicator/test-damage.ts index 647a198d..80c5477d 100644 --- a/src/modules/indicator/test-damage.ts +++ b/src/modules/indicator/test-damage.ts @@ -3,9 +3,12 @@ import { EnchantmentType, EquipmentSlot, ItemStack, Player } from '@minecraft/server' import { registerAsync } from '@minecraft/server-gametest' import { MinecraftEnchantmentTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { Enchantments, isKeyof, Temporary } from 'lib' +import { Enchantments } from 'lib/enchantments' + import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { noI18n } from 'lib/i18n/text' +import { isKeyof } from 'lib/util' +import { Temporary } from 'lib/temporary' import { TestStructures } from 'test/constants' const players: Player[] = [] diff --git a/src/modules/loader.ts b/src/modules/loader.ts index c2e37567..27d664ee 100644 --- a/src/modules/loader.ts +++ b/src/modules/loader.ts @@ -1,9 +1,21 @@ -import 'lib' +import 'lib/load/enviroment' +import 'lib/load/message1' -import './anticheat/index' -import './survival/import' +// Database provider +import 'lib/database/properties' + +// Database +import 'lib/database/inventory' +import 'lib/database/player' +import 'lib/database/scoreboard' +import 'lib/database/utils' + +// Command +import 'lib/command/index' -import './chat/chat' +import './lushway/loader' + +import './survival/import' import './test/test' import './wiki/wiki' import './world-edit/builder' diff --git a/src/modules/lushway/config/chat.ts b/src/modules/lushway/config/chat.ts new file mode 100644 index 00000000..d68099b2 --- /dev/null +++ b/src/modules/lushway/config/chat.ts @@ -0,0 +1,32 @@ +import { Sounds } from 'lib/assets/custom-sounds' +import { sendPacketToStdout } from 'lib/bds/api' +import { Chat } from 'lib/chat/chat' +import { getFullname } from 'lib/get-fullname' + +class LushWayChat extends Chat { + protected onMessage(ctx: Chat.Context): void { + const message = `${getFullname(ctx.sender, { nameColor: '§7', equippment: true })}§r: ${ctx.text}` + const fullrole = getFullname(ctx.sender, { name: false }) + // This is handled/parsed by ServerCore + // Dont really want to do request each time here + sendPacketToStdout('chatMessage', { + name: ctx.sender.name, + role: fullrole, + print: message, + message: ctx.text, + }) + + for (const near of ctx.nearPlayers) { + near.tell(message) + if (this.playerSettings(near).sound) near.playSound(Sounds.Click) + } + + for (const outranged of ctx.farPlayers) { + outranged.tell(`${getFullname(ctx.sender, { nameColor: '§8' })}§7: ${ctx.text}`) + } + + ctx.sender.tell(message) + } +} + +Command.registerChatListener(new LushWayChat().chatListener) diff --git a/src/modules/lushway/config/core.ts b/src/modules/lushway/config/core.ts new file mode 100644 index 00000000..9dc3c9af --- /dev/null +++ b/src/modules/lushway/config/core.ts @@ -0,0 +1,3 @@ +import { Core } from 'lib/extensions/core' + +Core.name = '§aLush§fWay' diff --git a/src/modules/lushway/config/join.ts b/src/modules/lushway/config/join.ts new file mode 100644 index 00000000..67aaffdd --- /dev/null +++ b/src/modules/lushway/config/join.ts @@ -0,0 +1,19 @@ +import { Player } from '@minecraft/server' +import { sendPacketToStdout } from 'lib/bds/api' +import { getFullname } from 'lib/get-fullname' +import { noI18n } from 'lib/i18n/text' +import { JoinWithMessage } from 'lib/player-join' + +export class LushWayJoin extends JoinWithMessage { + onJoinMoveMessage(player: Player, where: 'air' | 'ground', message: Text): void { + sendPacketToStdout('joinOrLeave', { + name: player.name, + role: getFullname(player, { name: false }), + status: 'move', + where, + print: noI18n.nocolor`${'§l§f' + player.name} ${getFullname(player, { name: false })}: ${message}`, + }) + } +} + +new LushWayJoin() diff --git a/src/modules/lushway/config/region.ts b/src/modules/lushway/config/region.ts new file mode 100644 index 00000000..9eb2e425 --- /dev/null +++ b/src/modules/lushway/config/region.ts @@ -0,0 +1,31 @@ +import { CustomEntityTypes } from 'lib/assets/custom-entity-types' +import { Items } from 'lib/assets/custom-items' +import { PlayerEvents, PlayerProperties } from 'lib/assets/player-json' +import { NOT_MOB_ENTITIES, PVP_ENTITIES, regionPermissions, SafeAreaRegion } from 'lib/region' +import { RegionEvents } from 'lib/region/events' +import { isNotPlaying } from 'lib/utils/game' + +SafeAreaRegion.enableGamemodeChange() + +NOT_MOB_ENTITIES.push(CustomEntityTypes.Grave, CustomEntityTypes.Loot) + +PVP_ENTITIES.push(CustomEntityTypes.Fireball, CustomEntityTypes.Cannon) + +RegionEvents.onInterval.subscribe(({ player, currentRegion }) => { + const isPlaying = !isNotPlaying(player) + + const resetNewbie = () => player.setProperty(PlayerProperties['lw:newbie'], !!player.database.survival.newbie) + + if (typeof currentRegion !== 'undefined' && isPlaying) { + if (currentRegion.permissions.pvp === false) { + player.triggerEvent( + player.database.inv === 'spawn' ? PlayerEvents['player:spawn'] : PlayerEvents['player:safezone'], + ) + player.setProperty(PlayerProperties['lw:newbie'], true) + } else if (currentRegion.permissions.pvp === 'pve') { + player.setProperty(PlayerProperties['lw:newbie'], true) + } else resetNewbie() + } else resetNewbie() +}) + +regionPermissions.itemToProjectile.set(Items.Fireball, CustomEntityTypes.Fireball) diff --git a/src/modules/lushway/loader.ts b/src/modules/lushway/loader.ts new file mode 100644 index 00000000..30c76d8a --- /dev/null +++ b/src/modules/lushway/loader.ts @@ -0,0 +1,14 @@ +import 'lib/anticheat/ban' +import 'lib/anticheat/forbidden-items' +import 'lib/anticheat/freeze' +import 'lib/anticheat/whitelist' + +import 'lib/database/command' + +import 'lib/region/database' + +import './config/core' + +import './config/chat' +import './config/join' +import './config/region' diff --git a/src/modules/minigames/BattleRoyal/index.ts b/src/modules/minigames/BattleRoyal/index.ts index 8421e0ff..09fa2f82 100644 --- a/src/modules/minigames/BattleRoyal/index.ts +++ b/src/modules/minigames/BattleRoyal/index.ts @@ -3,7 +3,7 @@ // TODO Update import { Player, system, world } from '@minecraft/server' -import { Command } from 'lib' + import { br } from './game' import { BATTLE_ROYAL_EVENTS, BR_QUENE } from './var' diff --git a/src/modules/minigames/BattleRoyal/var.ts b/src/modules/minigames/BattleRoyal/var.ts index 950143f0..e95ae6df 100644 --- a/src/modules/minigames/BattleRoyal/var.ts +++ b/src/modules/minigames/BattleRoyal/var.ts @@ -1,6 +1,6 @@ -import { Settings } from 'lib' import { table } from 'lib/database/abstract' import { EventSignal } from 'lib/event-signal' +import { Settings } from 'lib/settings' export const BATTLE_ROYAL_EVENTS = { join: new EventSignal(), diff --git a/src/modules/minigames/Builder.ts b/src/modules/minigames/Builder.ts index 28b72de6..7e278bf7 100644 --- a/src/modules/minigames/Builder.ts +++ b/src/modules/minigames/Builder.ts @@ -1,5 +1,6 @@ import { Player } from '@minecraft/server' -import { LockAction, Sidebar } from 'lib' +import { LockAction } from 'lib/action' +import { Sidebar } from 'lib/sidebar' // TODO Add minigame place diff --git a/src/modules/places/anarchy/airdrop.ts b/src/modules/places/anarchy/airdrop.ts index 6d8358ae..c3d2d599 100644 --- a/src/modules/places/anarchy/airdrop.ts +++ b/src/modules/places/anarchy/airdrop.ts @@ -1,7 +1,11 @@ import { LocationInUnloadedChunkError, system, world } from '@minecraft/server' -import { Airdrop, isNotPlaying, Loot, Vec } from 'lib' + import { Items } from 'lib/assets/custom-items' import { i18n } from 'lib/i18n/text' +import { Airdrop } from 'lib/rpg/airdrop' +import { Loot } from 'lib/rpg/loot-table' +import { isNotPlaying } from 'lib/utils/game' +import { Vec } from 'lib/vector' import { Anarchy } from 'modules/places/anarchy/anarchy' import { CannonItem, CannonShellItem } from '../../pvp/cannon' import { randomLocationInAnarchy } from './random-location-in-anarchy' @@ -15,10 +19,10 @@ const base = new Loot('base_airdrop') .amount({ '25...50': '40%', '51...90': '2%' }) .weight('20%') - .itemStack(CannonShellItem.blueprint) + .itemStack(() => CannonShellItem.blueprint) .weight('10%') - .itemStack(CannonItem.blueprint) + .itemStack(() => CannonItem.blueprint) .weight('5%') .item(Items.Money) @@ -35,10 +39,10 @@ const powerfull = new Loot('powerfull_airdrop') .amount({ '30...64': '40%', '65...128': '2%' }) .weight('20%') - .itemStack(CannonShellItem.itemStack) + .itemStack(CannonShellItem) .weight('10%') - .itemStack(CannonItem.itemStack) + .itemStack(CannonItem) .weight('5%') .item(Items.Money) diff --git a/src/modules/places/anarchy/anarchy.ts b/src/modules/places/anarchy/anarchy.ts index de3fb0d2..080a84c0 100644 --- a/src/modules/places/anarchy/anarchy.ts +++ b/src/modules/places/anarchy/anarchy.ts @@ -1,5 +1,5 @@ import { GameMode, Player } from '@minecraft/server' -import { EventSignal, InventoryStore, Portal, ValidLocation, Vec, location } from 'lib' + import { consoleLang } from 'lib/assets/lang' import { i18n, noI18n } from 'lib/i18n/text' import { isNotPlaying } from 'lib/utils/game' @@ -12,6 +12,12 @@ import { Spawn } from 'modules/places/spawn' import { showSurvivalHud } from 'modules/survival/sidebar' import { AreaWithInventory } from '../lib/area-with-inventory' import { RadioactiveZone } from './radioactive-zone' +import { EventSignal } from 'lib/event-signal' +import { Vec } from 'lib/vector' +import { ValidLocation } from 'lib/location' +import { InventoryStore } from 'lib/database/inventory' +import { location } from 'lib/location' +import { Portal } from 'lib/portals' import('./airdrop') class AnarchyBuilder extends AreaWithInventory { diff --git a/src/modules/places/anarchy/quartz.ts b/src/modules/places/anarchy/quartz.ts index 77337cdd..7fa302ae 100644 --- a/src/modules/places/anarchy/quartz.ts +++ b/src/modules/places/anarchy/quartz.ts @@ -1,12 +1,14 @@ import { ItemStack, system } from '@minecraft/server' import { MinecraftBlockTypes, MinecraftEffectTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { isKeyof, ms } from 'lib' + import { i18n } from 'lib/i18n/text' import { RegionEvents } from 'lib/region/events' import { actionGuard, ActionGuardOrder, disableAdventureNear, Region, RegionPermissions } from 'lib/region/index' import { ScheduleBlockPlace } from 'lib/scheduled-block-place' import { TechCity } from '../tech-city/tech-city' +import { ms } from 'lib/utils/ms' +import { isKeyof } from 'lib/util' export class QuartzMineRegion extends Region { protected priority = 100 diff --git a/src/modules/places/base/actions/create.ts b/src/modules/places/base/actions/create.ts index dd88d0f6..a59318e7 100644 --- a/src/modules/places/base/actions/create.ts +++ b/src/modules/places/base/actions/create.ts @@ -1,5 +1,5 @@ import { Block, Player, system, world } from '@minecraft/server' -import { actionGuard, ActionGuardOrder, LockAction, Region, Vec } from 'lib' + import { i18n } from 'lib/i18n/text' import { SphereArea } from 'lib/region/areas/sphere' import { askForExitingNewbieMode, isNewbie } from 'lib/rpg/newbie' @@ -7,6 +7,11 @@ import { BaseItem, baseLogger } from '../base' import { baseLevels } from '../base-levels' import { baseCommand } from '../base-menu' import { BaseRegion } from '../region' +import { Vec } from 'lib/vector' +import { Region } from 'lib/region' +import { LockAction } from 'lib/action' +import { ActionGuardOrder } from 'lib/region' +import { actionGuard } from 'lib/region' actionGuard((_, __, ctx) => { if ( diff --git a/src/modules/places/base/actions/rotting.ts b/src/modules/places/base/actions/rotting.ts index c6569861..abdb7057 100644 --- a/src/modules/places/base/actions/rotting.ts +++ b/src/modules/places/base/actions/rotting.ts @@ -1,24 +1,20 @@ import { Block, BlockPermutation, ContainerSlot, Player, system } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { - actionGuard, - ActionGuardOrder, - Cooldown, - getBlockStatus, - isEmpty, - isLocationError, - isNotPlaying, - Mail, - ms, - Vec, -} from 'lib' + +import { Cooldown } from 'lib/cooldown' import { table } from 'lib/database/abstract' import { form } from 'lib/form/new' import { Message } from 'lib/i18n/message' import { i18n } from 'lib/i18n/text' +import { Mail } from 'lib/mail' import { anyPlayerNearRegion } from 'lib/player-move' +import { actionGuard, ActionGuardOrder } from 'lib/region' import { ScheduleBlockPlace } from 'lib/scheduled-block-place' +import { isEmpty } from 'lib/util' +import { getBlockStatus, isLocationError, isNotPlaying, onLoad } from 'lib/utils/game' import { itemNameXCount } from 'lib/utils/item-name-x-count' +import { ms } from 'lib/utils/ms' +import { Vec } from 'lib/vector' import { spawnParticlesInArea } from 'modules/world-edit/config' import { BaseRegion, RottingState } from '../region' @@ -28,9 +24,11 @@ const materialsReviseTime = __DEV__ ? ms.from('min', 1) : ms.from('min', 1) const cooldowns = table>('baseCoooldowns', () => ({})) -const blocksToMaterialsCooldown = new Cooldown(blocksReviseTime, false, cooldowns.get('blocksToMaterials')) -const reviseMaterialsCooldown = new Cooldown(materialsReviseTime, false, cooldowns.get('revise')) -const takeMaterialsCooldown = new Cooldown(takeMaterialsTime, false, cooldowns.get('takeMaterials')) +const blocksToMaterialsCooldown = onLoad( + () => new Cooldown(blocksReviseTime, false, cooldowns.get('blocksToMaterials')), +) +const reviseMaterialsCooldown = onLoad(() => new Cooldown(materialsReviseTime, false, cooldowns.get('revise'))) +const takeMaterialsCooldown = onLoad(() => new Cooldown(takeMaterialsTime, false, cooldowns.get('takeMaterials'))) system.runInterval( () => { @@ -44,9 +42,9 @@ system.runInterval( spawnParticlesInArea(base.area.center, Vec.add(base.area.center, Vec.one)) if (block.typeId === MinecraftBlockTypes.Barrel) { - if (blocksToMaterialsCooldown.isExpired(base.id)) blocksToMaterials(base) - if (reviseMaterialsCooldown.isExpired(base.id)) reviseMaterials(base, block) - if (takeMaterialsCooldown.isExpired(base.id)) takeMaterials(base, block) + if (blocksToMaterialsCooldown.value.isExpired(base.id)) blocksToMaterials(base) + if (reviseMaterialsCooldown.value.isExpired(base.id)) reviseMaterials(base, block) + if (takeMaterialsCooldown.value.isExpired(base.id)) takeMaterials(base, block) } else startRotting(base, RottingState.Destroyed) } }, @@ -85,7 +83,7 @@ const baseRottingMenu = form.params<{ base: BaseRegion }>((f, { params: { base } f.title(i18n`Гниение базы`) f.body( - i18n`Чтобы база не гнила, в бочке ежедневно должны быть следующие ресурсы:\n${materials}\nМатериалы в бочке:\n${barrelMaterials}\n${missingMaterialsText}\nДо следующего сбора ресурсов: ${i18n.hhmmss(takeMaterialsCooldown.getRemainingTime(base.id))}`, + i18n`Чтобы база не гнила, в бочке ежедневно должны быть следующие ресурсы:\n${materials}\nМатериалы в бочке:\n${barrelMaterials}\n${missingMaterialsText}\nДо следующего сбора ресурсов: ${i18n.hhmmss(takeMaterialsCooldown.value.getRemainingTime(base.id))}`, ) }) diff --git a/src/modules/places/base/base-menu.ts b/src/modules/places/base/base-menu.ts index 54a7b3d4..4ded283e 100644 --- a/src/modules/places/base/base-menu.ts +++ b/src/modules/places/base/base-menu.ts @@ -1,7 +1,7 @@ -import { Vec } from 'lib' import { form } from 'lib/form/new' import { i18n } from 'lib/i18n/text' import { editRegionPermissions, manageRegionMembers } from 'lib/region/form' +import { Vec } from 'lib/vector' import { baseRottingButton } from './actions/rotting' import { baseUpgradeButton } from './actions/upgrade' import { BaseRegion } from './region' diff --git a/src/modules/places/base/base.spec.ts b/src/modules/places/base/base.spec.ts deleted file mode 100644 index c9e0d784..00000000 --- a/src/modules/places/base/base.spec.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { ItemStack } from '@minecraft/server' -import type { ExtendedSimulatedPlayer, ExtendedTest } from '@minecraft/server-gametest' -import { MinecraftBlockTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { TestStructures } from 'test/constants' -import { gamesuite, gametest } from 'test/framework' -import { BaseItem } from './base' - -gamesuite('base', () => { - gametest('should break blocks only by region owner', async test => { - const { owner, raider } = await createCommonBaseTest(test) - - await test.idle(20) - const glassLocation = { x: 2, y: 2, z: 1 } - owner.useItemOnBlock(new ItemStack(MinecraftItemTypes.Glass), glassLocation) - test.assertBlockPresent(MinecraftBlockTypes.Glass, glassLocation, true) - - await expectBlockStateAfterBreakingBy(test, raider, glassLocation, BlockState.NotBroken) - await expectBlockStateAfterBreakingBy(test, owner, glassLocation, BlockState.Broken) - - test.succeed() - }) - .structureName(TestStructures.flat) - .padding(40) - - gametest('should remove base after explosion', async test => { - const { owner, raider } = await createCommonBaseTest(test) - - await test.idle(20) - const glassLocation = { x: 2, y: 2, z: 1 } - owner.useItemOnBlock(new ItemStack(MinecraftItemTypes.Glass), glassLocation) - test.assertBlockPresent(MinecraftBlockTypes.Glass, glassLocation, true) - - await expectBlockStateAfterBreakingBy(test, raider, glassLocation, BlockState.NotBroken) - - test.getDimension().createExplosion(test.worldLocation(glassLocation), 2) - await test.idle(20) - owner.useItemOnBlock(new ItemStack(MinecraftItemTypes.Glass), glassLocation) - test.assertBlockPresent(MinecraftBlockTypes.Glass, glassLocation, true) - - await expectBlockStateAfterBreakingBy(test, raider, glassLocation, BlockState.Broken) - - test.succeed() - }) - .structureName(TestStructures.flat) - .padding(40) - .maxTicks(200) -}) - -enum BlockState { - Broken, - NotBroken, -} - -async function expectBlockStateAfterBreakingBy( - test: ExtendedTest, - player: ExtendedSimulatedPlayer, - glassLocation: Vector3, - present: BlockState, -) { - player.breakBlock(glassLocation) - await test.idle(20) - test.assertBlockPresent(MinecraftBlockTypes.Glass, glassLocation, present === BlockState.Broken ? false : true) - player.stopBreakingBlock() - await test.idle(10) -} - -async function createCommonBaseTest(test: ExtendedTest) { - const owner = test.spawnSimulatedPlayer({ x: 0, y: 3, z: 0 }, 'Base owner') - const raider = test.spawnSimulatedPlayer({ x: 3, y: 3, z: 0 }, 'Raider') - - owner.mainhand().setItem(BaseItem.itemStack) - await test.idle(10) - owner.useItemInSlotOnBlock(owner.selectedSlotIndex, { x: 2, y: 2, z: 2 }) - owner.mainhand().setItem(new ItemStack('minecraft:air')) - - return { owner, raider } -} diff --git a/src/modules/places/base/region.ts b/src/modules/places/base/region.ts index bf8e4c24..afa4d17d 100644 --- a/src/modules/places/base/region.ts +++ b/src/modules/places/base/region.ts @@ -1,5 +1,5 @@ import { Player } from '@minecraft/server' -import { disableAdventureNear } from 'lib' + import { i18n, noI18n } from 'lib/i18n/text' import { SphereArea } from 'lib/region/areas/sphere' import { registerRegionType } from 'lib/region/command' @@ -7,6 +7,7 @@ import { registerSaveableRegion } from 'lib/region/database' import { RegionWithStructure } from 'lib/region/kinds/with-structure' import { getSafeFromRottingTime, materialsToRString } from './actions/rotting' import { baseLevels } from './base-levels' +import { disableAdventureNear } from 'lib/region' interface BaseLDB extends JsonObject { level: number diff --git a/src/modules/places/dungeons/command.ts b/src/modules/places/dungeons/command.ts index 6ef97eb7..bb713c40 100644 --- a/src/modules/places/dungeons/command.ts +++ b/src/modules/places/dungeons/command.ts @@ -1,13 +1,17 @@ /* i18n-ignore */ import { MolangVariableMap, Player, StructureRotation, system, world } from '@minecraft/server' -import { ArrayForm, isKeyof, Vec } from 'lib' + import { Items } from 'lib/assets/custom-items' import { StructureDungeonsId } from 'lib/assets/structures' import { ItemLoreSchema } from 'lib/database/item-stack' import { ActionbarPriority } from 'lib/extensions/on-screen-display' +import { ArrayForm } from 'lib/form/array' import { i18n, noI18n } from 'lib/i18n/text' import { SphereArea } from 'lib/region/areas/sphere' +import { isKeyof } from 'lib/util' +import { onLoad } from 'lib/utils/load-ref' +import { Vec } from 'lib/vector' import { DungeonRegion } from 'modules/places/dungeons/dungeon' import { CustomDungeonRegion } from './custom-dungeon' import { Dungeon } from './loot' @@ -113,7 +117,7 @@ system.runPlayerInterval( for (const l of Vec.forEach(from, to)) { if (!Vec.isEdge(from, to, l)) continue - player.spawnParticle('minecraft:balloon_gas_particle', l, particle) + player.spawnParticle('minecraft:balloon_gas_particle', l, particle.value) } player.onScreenDisplay.setActionBar( @@ -125,10 +129,13 @@ system.runPlayerInterval( 15, ) -const particle = new MolangVariableMap() +const particle = onLoad(() => { + const vars = new MolangVariableMap() -particle.setVector3('direction', { - x: 0, - y: 0, - z: 0, + vars.setVector3('direction', { + x: 0, + y: 0, + z: 0, + }) + return vars }) diff --git a/src/modules/places/dungeons/custom-dungeon.ts b/src/modules/places/dungeons/custom-dungeon.ts index d527d1af..1fab2d0e 100644 --- a/src/modules/places/dungeons/custom-dungeon.ts +++ b/src/modules/places/dungeons/custom-dungeon.ts @@ -1,11 +1,18 @@ import { Block, GameMode, Player, StructureRotation, system, world } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { is, ModalForm, ms, RegionCreationOptions, registerRegionType, registerSaveableRegion, Vec } from 'lib' + import { StructureDungeonsId, StructureFile } from 'lib/assets/structures' import { i18n, noI18n } from 'lib/i18n/text' import { Area } from 'lib/region/areas/area' import { DungeonRegion, DungeonRegionDatabase } from './dungeon' import { Dungeon } from './loot' +import { Vec } from 'lib/vector' +import { ModalForm } from 'lib/form/modal' +import { is } from 'lib/roles' +import { registerRegionType } from 'lib/region' +import { registerSaveableRegion } from 'lib/region' +import { ms } from 'lib/utils/ms' +import { RegionCreationOptions } from 'lib/region' interface CustomDungeonRegionDatabase extends DungeonRegionDatabase { chestLoot: { diff --git a/src/modules/places/dungeons/dungeon.ts b/src/modules/places/dungeons/dungeon.ts index 1b03de3b..f5c8b622 100644 --- a/src/modules/places/dungeons/dungeon.ts +++ b/src/modules/places/dungeons/dungeon.ts @@ -1,15 +1,6 @@ import { EntityTypes, Player, StructureRotation, StructureSaveMode, system, world } from '@minecraft/server' import { MinecraftBlockTypes, MinecraftEntityTypes } from '@minecraft/vanilla-data' -import { - adventureModeRegions, - Cooldown, - isKeyof, - LootTable, - ms, - registerRegionType, - registerSaveableRegion, - Vec, -} from 'lib' + import { StructureDungeonsId, StructureFile, structureFiles } from 'lib/assets/structures' import { NewFormCreator } from 'lib/form/new' import { i18n, noI18n } from 'lib/i18n/text' @@ -20,6 +11,12 @@ import { Region, RegionCreationOptions, RegionPermissions } from 'lib/region/kin import { createLogger } from 'lib/utils/logger' import { structureLikeRotate, structureLikeRotateRelative, toAbsolute, toRelative } from 'lib/utils/structure' import { Dungeon } from './loot' +import { Cooldown } from 'lib/cooldown' +import { registerSaveableRegion, registerRegionType, adventureModeRegions } from 'lib/region' +import { LootTable } from 'lib/rpg/loot-table' +import { isKeyof } from 'lib/util' +import { ms } from 'lib/utils/ms' +import { Vec } from 'lib/vector' const logger = createLogger('dungeon') diff --git a/src/modules/places/dungeons/loot.ts b/src/modules/places/dungeons/loot.ts index ddc6d672..0755dda3 100644 --- a/src/modules/places/dungeons/loot.ts +++ b/src/modules/places/dungeons/loot.ts @@ -1,14 +1,14 @@ -import { Loot, LootTable } from 'lib' import { Items } from 'lib/assets/custom-items' import { StructureDungeonsId } from 'lib/assets/structures' import { i18n } from 'lib/i18n/text' +import { Loot, LootTable } from 'lib/rpg/loot-table' import { CannonItem, CannonShellItem } from 'modules/pvp/cannon' import { FireBallItem } from 'modules/pvp/fireball' import { IceBombItem } from 'modules/pvp/ice-bomb' import { BaseItem } from '../base/base' const defaultLoot = new Loot('dungeon_default_loot') - .itemStack(CannonShellItem.blueprint) + .itemStack(() => CannonShellItem.blueprint) .weight('5%') .item('Apple') @@ -177,18 +177,18 @@ const customLoot: Record = { Sharpness: { '1...3': '1%', '4...5': '10%' }, }) - .itemStack(CannonItem.itemStack) + .itemStack(CannonItem) .weight('40%') .amount({ '1...2': '1%' }) - .itemStack(CannonShellItem.itemStack) + .itemStack(CannonShellItem) .weight('60%') .amount({ '1...9': '10%', '10...16': '1%', }) - .itemStack(BaseItem.itemStack) + .itemStack(BaseItem) .weight('5%') .amount({ '0...1': '1%' }) diff --git a/src/modules/places/dungeons/warden.ts b/src/modules/places/dungeons/warden.ts index ac2034a7..df1b850d 100644 --- a/src/modules/places/dungeons/warden.ts +++ b/src/modules/places/dungeons/warden.ts @@ -1,24 +1,24 @@ import { system } from '@minecraft/server' import { MinecraftBlockTypes, MinecraftEntityTypes } from '@minecraft/vanilla-data' -import { - actionGuard, - ActionGuardOrder, - disableAdventureNear, - fromMsToTicks, - ms, - PVP_ENTITIES, - Region, - RegionPermissions, - registerRegionType, - registerSaveableRegion, - Vec, -} from 'lib' + import { form } from 'lib/form/new' import { i18n, noI18n } from 'lib/i18n/text' import { anyPlayerNearRegion } from 'lib/player-move' import { rollChance } from 'lib/rpg/random' import { createLogger } from 'lib/utils/logger' import { BaseItem } from '../base/base' +import { + Region, + RegionPermissions, + PVP_ENTITIES, + registerSaveableRegion, + registerRegionType, + disableAdventureNear, + actionGuard, + ActionGuardOrder, +} from 'lib/region' +import { fromMsToTicks, ms } from 'lib/utils/ms' +import { Vec } from 'lib/vector' const logger = createLogger('warden') diff --git a/src/modules/places/lib/city-investigating-quest.ts b/src/modules/places/lib/city-investigating-quest.ts index 0dc363ca..d584fbb3 100644 --- a/src/modules/places/lib/city-investigating-quest.ts +++ b/src/modules/places/lib/city-investigating-quest.ts @@ -1,8 +1,8 @@ -import { isNotPlaying } from 'lib' import { i18n } from 'lib/i18n/text' import { Quest } from 'lib/quest' import { RegionEvents } from 'lib/region/events' import { City } from './city' +import { isNotPlaying } from 'lib/utils/game' export class CityInvestigating { static list: CityInvestigating[] = [] diff --git a/src/modules/places/lib/city.ts b/src/modules/places/lib/city.ts index b9e6fc65..fd08de68 100644 --- a/src/modules/places/lib/city.ts +++ b/src/modules/places/lib/city.ts @@ -1,4 +1,3 @@ -import { location, LootTable } from 'lib' import { Crate } from 'lib/crates/crate' import { Cutscene } from 'lib/cutscene' import { i18n, i18nShared } from 'lib/i18n/text' @@ -8,6 +7,8 @@ import { Npc } from 'lib/rpg/npc' import { Jeweler } from 'modules/places/lib/npc/jeweler' import { Scavenger } from './npc/scavenger' import { SafePlace } from './safe-place' +import { location } from 'lib/location' +import { LootTable } from 'lib/rpg/loot-table' export abstract class City extends SafePlace { protected createKits(normalLoot: LootTable, donutLoot: LootTable) { diff --git a/src/modules/places/lib/npc/guide.ts b/src/modules/places/lib/npc/guide.ts index f6149077..64b2b533 100644 --- a/src/modules/places/lib/npc/guide.ts +++ b/src/modules/places/lib/npc/guide.ts @@ -15,7 +15,7 @@ export class GuideNpc extends NpcForm { for (const quest of Quest.quests.values()) { if (quest.guideIgnore) continue - if (quest.place.group === group) f.quest(quest) + if (quest.place.group === group) ctx.lf.quest(quest) } }) } diff --git a/src/modules/places/lib/safe-place.ts b/src/modules/places/lib/safe-place.ts index b933a270..125cc0b5 100644 --- a/src/modules/places/lib/safe-place.ts +++ b/src/modules/places/lib/safe-place.ts @@ -1,28 +1,30 @@ import { Player, system, TicksPerSecond } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { - actionGuard, - ActionGuardOrder, - ArrayForm, - debounceMenu, - location, - locationWithRadius, - locationWithRotation, - Portal, - SafeAreaRegion, - Vec, - Vector3Radius, -} from 'lib' + import { Sounds } from 'lib/assets/custom-sounds' import { emoji } from 'lib/assets/emoji' +import { ArrayForm } from 'lib/form/array' +import { debounceMenu } from 'lib/form/utils' import { SharedI18nMessage } from 'lib/i18n/message' import { i18n, noI18n } from 'lib/i18n/text' +import { location, locationWithRadius, locationWithRotation, Vector3Radius } from 'lib/location' +import { Portal } from 'lib/portals' +import { actionGuard, ActionGuardOrder, SafeAreaRegion } from 'lib/region' import { SphereArea } from 'lib/region/areas/sphere' import { RegionEvents } from 'lib/region/events' import { Group } from 'lib/rpg/place' import { MultiCost } from 'lib/shop/cost' import { ErrorCost } from 'lib/shop/cost/cost' import { Product } from 'lib/shop/product' +import { Vec } from 'lib/vector' + +declare module '@minecraft/server' { + interface PlayerDatabase { + unlockedPortals?: string[] + } +} + +export {} export class SafePlace { static places: SafePlace[] = [] diff --git a/src/modules/places/mineshaft/algo.ts b/src/modules/places/mineshaft/algo.ts index 31eac897..7fd1eecb 100644 --- a/src/modules/places/mineshaft/algo.ts +++ b/src/modules/places/mineshaft/algo.ts @@ -1,7 +1,7 @@ import { Block, Dimension, Player } from '@minecraft/server' import { MinecraftBlockTypes as b, MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { Vec } from 'lib' import { EventSignal } from 'lib/event-signal' +import { Vec } from 'lib/vector' import { getEdgeBlocksOf } from './get-edge-blocks-of' import { MineshaftRegion } from './mineshaft-region' import { Ore, OreCollector, OreEntry } from './ore-collector' diff --git a/src/modules/places/mineshaft/mineshaft-region.spec.ts b/src/modules/places/mineshaft/mineshaft-region.spec.ts deleted file mode 100644 index 4c2f6c37..00000000 --- a/src/modules/places/mineshaft/mineshaft-region.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { MinecraftBlockTypes as b } from '@minecraft/vanilla-data' -import { SphereArea } from 'lib/region/areas/sphere' -import { Vec } from 'lib/vector' -import { TestStructures } from 'test/constants' -import { gamesuite, gametest } from 'test/framework' -import { MineshaftRegion } from './mineshaft-region' - -class TestMineshaftRegion extends MineshaftRegion { - get regionEdges() { - return this.area.edges - } - - create() { - this.onCreate() - } -} - -gamesuite('MineshaftRegion', () => { - gametest('Ore', async test => { - const region = TestMineshaftRegion.create( - new SphereArea({ center: test.worldLocation(new Vec(5, 20, 5)), radius: 20 }, test.getDimension().type), - ) - - await region.area.forEachVector((vector, isIn, dimension) => { - if (isIn) dimension.setBlockType(vector, b.Stone) - }) - region.create() - }) - .structureName(TestStructures.flat) - .padding(10) - .maxTicks(100000) -}) diff --git a/src/modules/places/mineshaft/mineshaft-region.ts b/src/modules/places/mineshaft/mineshaft-region.ts index 578326dd..cf1d5e4b 100644 --- a/src/modules/places/mineshaft/mineshaft-region.ts +++ b/src/modules/places/mineshaft/mineshaft-region.ts @@ -1,12 +1,15 @@ import { LocationOutOfWorldBoundariesError, Player, PlayerBreakBlockBeforeEvent, system } from '@minecraft/server' -import { ActionForm, ms, registerRegionType, Vec } from 'lib' + +import { NewFormCreator } from 'lib/form/new' import { i18n, noI18n } from 'lib/i18n/text' import { registerSaveableRegion } from 'lib/region/database' import { ScheduleBlockPlace } from 'lib/scheduled-block-place' import { createLogger } from 'lib/utils/logger' import { MineareaRegion } from '../../../lib/region/kinds/minearea' import { ores, placeOre } from './algo' -import { NewFormCreator } from 'lib/form/new' +import { registerRegionType } from 'lib/region' +import { Vec } from 'lib/vector' +import { ms } from 'lib/utils/ms' const logger = createLogger('Shaft') diff --git a/src/modules/places/mineshaft/ore-collector.ts b/src/modules/places/mineshaft/ore-collector.ts index 24968e12..a32f8a2c 100644 --- a/src/modules/places/mineshaft/ore-collector.ts +++ b/src/modules/places/mineshaft/ore-collector.ts @@ -1,7 +1,8 @@ import { MinecraftBlockTypes as b } from '@minecraft/vanilla-data' -import { stringifyError } from 'lib' + import { i18n } from 'lib/i18n/text' import { selectByChance } from 'lib/rpg/random' +import { stringifyError } from 'lib/util' export class Ore { private types: string[] = [] diff --git a/src/modules/places/spawn.ts b/src/modules/places/spawn.ts index d43275b1..5529d9e5 100644 --- a/src/modules/places/spawn.ts +++ b/src/modules/places/spawn.ts @@ -1,16 +1,20 @@ import { GameMode, Player, system, world } from '@minecraft/server' import { MinecraftEffectTypes } from '@minecraft/vanilla-data' -import { InventoryStore, Portal, Settings, locationWithRotation, util } from 'lib' +import { InventoryStore } from 'lib/database/inventory' import { i18n, i18nShared, noI18n } from 'lib/i18n/text' +import { locationWithRotation } from 'lib/location' import { Join } from 'lib/player-join' +import { Portal } from 'lib/portals' import { SphereArea } from 'lib/region/areas/sphere' import { RegionEvents } from 'lib/region/events' import { SafeAreaRegion } from 'lib/region/kinds/safe-area' import { Menu } from 'lib/rpg/menu' import { Group } from 'lib/rpg/place' -import { isNotPlaying } from 'lib/utils/game' +import { Settings } from 'lib/settings' +import { util } from 'lib/util' +import { isNotPlaying, onLoad } from 'lib/utils/game' import { createLogger } from 'lib/utils/logger' import { showSurvivalHud } from 'modules/survival/sidebar' import { AreaWithInventory } from './lib/area-with-inventory' @@ -45,49 +49,55 @@ class SpawnBuilder extends AreaWithInventory { constructor() { super() this.onRegionInterval() - if (this.location.valid) { - const spawnLocation = this.location - world.setDefaultSpawnLocation(spawnLocation) - - this.portal = new Portal('spawn', null, null, player => { - if (!Portal.canTeleport(player)) return - Portal.fadeScreen(player) - - this.switchInventory(player) - spawnLocation.teleport(player) - - showSurvivalHud(player) - - // Need to happen last because showSurvivalHud will reset title show time - Portal.showHudTitle(player, '§9> §bSpawn §9<') - }) - - this.portal - .createCommand() - .setPermissions('everybody') - .setDescription(i18n.nocolor`§r§bПеремещает на спавн`) - - world.afterEvents.playerSpawn.unsubscribe(Join.eventsDefaultSubscribers.playerSpawn) - world.afterEvents.playerSpawn.subscribe(({ player, initialSpawn }) => { - // Skip after death respawns - if (!initialSpawn) return - if (player.isSimulated()) return - if (isNotPlaying(player)) return Join.setPlayerJoinPosition(player) - - // Check settings - if (!this.settings(player).teleportToSpawnOnJoin) - return this.logger.player(player) - .info`Not teleporting to spawn on join because player disabled it via settings` - - util.catch(() => { - this.logger.player(player).info`Teleporting player to spawn on join` - this.portal?.teleport(player) - system.runTimeout(() => Join.setPlayerJoinPosition(player), 'Spawn set player position after join', 10) + onLoad(() => { + if (this.location.valid) { + const spawnLocation = this.location + world.setDefaultSpawnLocation(spawnLocation) + + this.portal = new Portal('spawn', null, null, player => { + if (!Portal.canTeleport(player)) return + Portal.fadeScreen(player) + + this.switchInventory(player) + spawnLocation.teleport(player) + + showSurvivalHud(player) + + // Need to happen last because showSurvivalHud will reset title show time + Portal.showHudTitle(player, '§9> §bSpawn §9<') + }) + + this.portal + .createCommand() + .setPermissions('everybody') + .setDescription(i18n.nocolor`§r§bПеремещает на спавн`) + + world.afterEvents.playerSpawn.unsubscribe(Join.getInstance().playerSpawnEventSubscriber) + world.afterEvents.playerSpawn.subscribe(({ player, initialSpawn }) => { + // Skip after death respawns + if (!initialSpawn) return + if (player.isSimulated()) return + if (isNotPlaying(player)) return Join.getInstance().setPlayerJoinPosition(player) + + // Check settings + if (!this.settings(player).teleportToSpawnOnJoin) + return this.logger.player(player) + .info`Not teleporting to spawn on join because player disabled it via settings` + + util.catch(() => { + this.logger.player(player).info`Teleporting player to spawn on join` + this.portal?.teleport(player) + system.runTimeout( + () => Join.getInstance().setPlayerJoinPosition(player), + 'Spawn set player position after join', + 10, + ) + }) }) - }) - this.region = SafeAreaRegion.create(new SphereArea({ center: spawnLocation, radius: 30 }, 'overworld')) - } + this.region = SafeAreaRegion.create(new SphereArea({ center: spawnLocation, radius: 30 }, 'overworld')) + } + }) } loadInventory(player: Player): void { @@ -97,7 +107,7 @@ class SpawnBuilder extends AreaWithInventory { xp: 0, health: 20, equipment: {}, - slots: { 0: Menu.itemStack }, + slots: { 0: Menu.itemStack.value }, }, clearAll: true, }) diff --git a/src/modules/places/stone-quarry/barman.ts b/src/modules/places/stone-quarry/barman.ts index 2401f6a0..f5f9ed0e 100644 --- a/src/modules/places/stone-quarry/barman.ts +++ b/src/modules/places/stone-quarry/barman.ts @@ -1,9 +1,8 @@ -import { ItemStack } from '@minecraft/server' +import { ItemStack, Potions } from '@minecraft/server' import { MinecraftPotionEffectTypes as e, MinecraftItemTypes as i, - MinecraftPotionLiquidTypes as lt, - MinecraftPotionModifierTypes as mt, + MinecraftPotionDeliveryTypes as lt, } from '@minecraft/vanilla-data' import { i18n, i18nShared } from 'lib/i18n/text' import { Group } from 'lib/rpg/place' @@ -19,40 +18,23 @@ export class Barman extends ShopNpc { form.itemStack(new ItemStack(i.MilkBucket), new MoneyCost(10)) form.itemStack(new ItemStack(i.HoneyBottle), new MoneyCost(20)) - form.itemStack( - ItemStack.createPotion({ effect: e.FireResistance, liquid: lt.Lingering }).setInfo(i18n`Квас`, undefined), - new MoneyCost(40), - ) + form.itemStack(Potions.resolve(e.FireResistance, lt.Consume).setInfo(i18n`Квас`, undefined), new MoneyCost(40)) form.itemStack( - ItemStack.createPotion({ effect: e.FireResistance, liquid: lt.Lingering, modifier: mt.Long }).setInfo( - i18n`Пиво`, - undefined, - ), + Potions.resolve(e.LongFireResistance, lt.Consume).setInfo(i18n`Пиво`, undefined), new MoneyCost(50), ) - form.itemStack( - ItemStack.createPotion({ effect: e.Invisibility, liquid: lt.Lingering, modifier: mt.Long }).setInfo( - i18n`Сидр`, - undefined, - ), - new MoneyCost(500), - ) + form.itemStack(Potions.resolve(e.LongInvisibility, lt.Consume).setInfo(i18n`Сидр`, undefined), new MoneyCost(500)) form.itemStack( - ItemStack.createPotion({ effect: e.WaterBreath, liquid: lt.Lingering, modifier: mt.Long }).setInfo( - i18n`Настойка из шпината`, - undefined, - ), + Potions.resolve(e.LongWaterBreathing, lt.Consume).setInfo(i18n`Настойка из шпината`, undefined), new MoneyCost(300), ) + form.potion form.itemStack( - ItemStack.createPotion({ effect: e.TurtleMaster, liquid: lt.Lingering, modifier: mt.Long }).setInfo( - i18n`Вино`, - undefined, - ), + Potions.resolve(e.LongTurtleMaster, lt.Consume).setInfo(i18n`Вино`, undefined), new MoneyCost(1000), ) }) diff --git a/src/modules/places/stone-quarry/furnacer.ts b/src/modules/places/stone-quarry/furnacer.ts index 63082ae0..3b0f2ff4 100644 --- a/src/modules/places/stone-quarry/furnacer.ts +++ b/src/modules/places/stone-quarry/furnacer.ts @@ -1,6 +1,6 @@ import { ContainerSlot, Player, TicksPerSecond, system, world } from '@minecraft/server' import { MinecraftItemTypes } from '@minecraft/vanilla-data' -import { Vec, getAuxOrTexture, ms } from 'lib' + import { Sounds } from 'lib/assets/custom-sounds' import { defaultLang } from 'lib/assets/lang' import { table } from 'lib/database/abstract' @@ -12,6 +12,9 @@ import { FreeCost, MoneyCost } from 'lib/shop/cost' import { ShopNpc } from 'lib/shop/npc' import { lockBlockPriorToNpc } from 'modules/survival/locked-features' import { StoneQuarry } from './stone-quarry' +import { Vec } from 'lib/vector' +import { getAuxOrTexture } from 'lib/form/chest' +import { ms } from 'lib/utils/ms' const furnaceExpireTime = ms.from('hour', 1) const furnaceExpireTimeText = i18n`Ключ теперь привязан к этой печке! В течении часа вы можете открывать ее с помощью этого ключа!` diff --git a/src/modules/places/stone-quarry/gunsmith.ts b/src/modules/places/stone-quarry/gunsmith.ts index 59c96ce1..8aeffb32 100644 --- a/src/modules/places/stone-quarry/gunsmith.ts +++ b/src/modules/places/stone-quarry/gunsmith.ts @@ -1,6 +1,7 @@ import { ContainerSlot, ItemStack, Player } from '@minecraft/server' import { MinecraftItemTypes as i, MinecraftBlockTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { translateTypeId } from 'lib' +import { translateTypeId } from 'lib/i18n/lang' + import { i18n, i18nShared } from 'lib/i18n/text' import { Group } from 'lib/rpg/place' import { rollChance } from 'lib/rpg/random' diff --git a/src/modules/places/stone-quarry/stone-quarry.ts b/src/modules/places/stone-quarry/stone-quarry.ts index 3521ddbc..cc158b49 100644 --- a/src/modules/places/stone-quarry/stone-quarry.ts +++ b/src/modules/places/stone-quarry/stone-quarry.ts @@ -1,5 +1,5 @@ import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { Loot } from 'lib' + import { i18n, i18nShared } from 'lib/i18n/text' import { AuntZina } from 'modules/places/stone-quarry/aunt-zina' import { Barman } from 'modules/places/stone-quarry/barman' @@ -12,6 +12,7 @@ import { Woodman } from '../lib/npc/woodman' import { Furnacer } from './furnacer' import { Gunsmith } from './gunsmith' import { createBossWither } from './wither.boss' +import { Loot } from 'lib/rpg/loot-table' class StoneQuarryBuilder extends City { constructor() { diff --git a/src/modules/places/stone-quarry/wither.boss.ts b/src/modules/places/stone-quarry/wither.boss.ts index e156eeeb..15bc9024 100644 --- a/src/modules/places/stone-quarry/wither.boss.ts +++ b/src/modules/places/stone-quarry/wither.boss.ts @@ -1,9 +1,12 @@ import { BlockTypes, EntityComponentTypes } from '@minecraft/server' import { MinecraftEntityTypes } from '@minecraft/vanilla-data' -import { Boss, Loot, ms } from 'lib' + import { i18nShared, noI18n } from 'lib/i18n/text' import { BigRegionStructure } from 'lib/region/big-structure' +import { Loot } from 'lib/rpg/loot-table' +import { Boss } from 'lib/rpg/boss' import { Group } from 'lib/rpg/place' +import { ms } from 'lib/utils/ms' export function createBossWither(group: Group) { const boss = Boss.create() diff --git a/src/modules/places/tech-city/engineer.ts b/src/modules/places/tech-city/engineer.ts index 074c2a3e..8fd54ee7 100644 --- a/src/modules/places/tech-city/engineer.ts +++ b/src/modules/places/tech-city/engineer.ts @@ -2,7 +2,7 @@ import { ItemStack, Player } from '@minecraft/server' import { MinecraftItemTypes as i, MinecraftItemTypes } from '@minecraft/vanilla-data' import { Items } from 'lib/assets/custom-items' import { i18n, i18nShared } from 'lib/i18n/text' -import { customItems, CustomItemWithBlueprint } from 'lib/rpg/custom-item' +import { CustomItem, CustomItemWithBlueprint } from 'lib/rpg/custom-item' import { isNewbie } from 'lib/rpg/newbie' import { Group } from 'lib/rpg/place' import { Cost, ItemCost, MultiCost } from 'lib/shop/cost' @@ -11,16 +11,11 @@ import { CannonItem, CannonShellItem } from 'modules/pvp/cannon' import { BaseItem } from '../base/base' import { MagicSlimeBall } from '../village-of-explorers/items' -export const CircuitBoard = new ItemStack(Items.CircuitBoard).setInfo( - undefined, +export const CircuitBoard = new CustomItem(Items.CircuitBoard).lore( i18n`Используется для создания базы у Инжинера в Технограде\n\nМожно получить из усиленного сундука и робота`, ) -export const Chip = new ItemStack(Items.Chip).setInfo( - undefined, - i18n`Используется для создания платы у Инжинера в Технограде`, -) -customItems.push(CircuitBoard, Chip) +export const Chip = new CustomItem(Items.Chip).lore(i18n`Используется для создания платы у Инжинера в Технограде`) export const NotNewbieCost = new (class NotNewbieCost extends Cost { toString(player: Player, canBuy?: boolean): string { @@ -48,25 +43,25 @@ export class Engineer extends ShopNpc { menu.itemStack( BaseItem.itemStack, new MultiCost(NotNewbieCost) - .item(CircuitBoard) + .item(CircuitBoard.itemStack) .item(MinecraftItemTypes.NetherStar) .item(BaseItem.blueprint) .item(MinecraftItemTypes.EnderPearl, 5) - .item(MagicSlimeBall, 30) + .item(MagicSlimeBall.itemStack, 30) .money(4_000), ) for (const [item, cost] of [ - [CannonItem, new MultiCost().item(Chip).money(200)], + [CannonItem, new MultiCost().item(Chip.itemStack).money(200)], [CannonShellItem, new MultiCost().item(MinecraftItemTypes.Gunpowder, 20).money(100)], ] as [CustomItemWithBlueprint, Cost][]) { menu.itemStack(item.itemStack, new MultiCost(new ItemCost(item.blueprint), cost)) } menu.itemStack( - CircuitBoard, + CircuitBoard.itemStack, new MultiCost() - .item(Chip) + .item(Chip.itemStack) .item(MinecraftItemTypes.IronIngot, 20) .item(MinecraftItemTypes.GoldIngot, 10) .item(MinecraftItemTypes.Quartz, 10) diff --git a/src/modules/places/tech-city/golem.boss.ts b/src/modules/places/tech-city/golem.boss.ts index 856da568..fac6d0e5 100644 --- a/src/modules/places/tech-city/golem.boss.ts +++ b/src/modules/places/tech-city/golem.boss.ts @@ -1,9 +1,13 @@ import { world } from '@minecraft/server' import { MinecraftEffectTypes, MinecraftEntityTypes } from '@minecraft/vanilla-data' -import { Boss, Loot, ms, Vec } from 'lib' -import { i18n, i18nShared } from 'lib/i18n/text' + +import { i18nShared } from 'lib/i18n/text' import { Group } from 'lib/rpg/place' import { Chip } from './engineer' +import { Vec } from 'lib/vector' +import { ms } from 'lib/utils/ms' +import { Loot } from 'lib/rpg/loot-table' +import { Boss } from 'lib/rpg/boss' export function createBossGolem(group: Group) { const boss = Boss.create() diff --git a/src/modules/places/tech-city/tech-city.ts b/src/modules/places/tech-city/tech-city.ts index 0039e20b..a27aa6bc 100644 --- a/src/modules/places/tech-city/tech-city.ts +++ b/src/modules/places/tech-city/tech-city.ts @@ -1,6 +1,7 @@ -import { Loot } from 'lib' import { i18n, i18nShared } from 'lib/i18n/text' import { CutArea } from 'lib/region/areas/cut' +import { Loot } from 'lib/rpg/loot-table' +import { onLoad } from 'lib/utils/load-ref' import { CannonItem, CannonShellItem } from 'modules/pvp/cannon' import { QuartzMineRegion } from '../anarchy/quartz' import { BaseItem } from '../base/base' @@ -15,7 +16,9 @@ import { createBossGolem } from './golem.boss' class TechCityBuilder extends City { constructor() { super('TechCity', i18nShared`Техноград`) - this.create() + onLoad(() => { + this.create() + }) } engineer = new Engineer(this.group) @@ -39,10 +42,10 @@ class TechCityBuilder extends City { this.createKits( new Loot() - .itemStack(CannonItem.blueprint) + .itemStack(() => CannonItem.blueprint) .weight('10%') - .itemStack(CannonShellItem.blueprint) + .itemStack(() => CannonShellItem.blueprint) .weight('10%') .item('RedTerracotta') @@ -53,22 +56,22 @@ class TechCityBuilder extends City { .weight('10%').build, new Loot() - .itemStack(CannonShellItem.blueprint) + .itemStack(() => CannonShellItem.blueprint) .weight('3%') - .itemStack(CannonShellItem.itemStack) + .itemStack(CannonShellItem) .weight('3%') - .itemStack(CannonItem.blueprint) + .itemStack(() => CannonItem.blueprint) .weight('2%') - .itemStack(CannonItem.itemStack) + .itemStack(CannonItem) .weight('2%') - .itemStack(BaseItem.blueprint) + .itemStack(() => BaseItem.blueprint) .weight('1%') - .itemStack(BaseItem.itemStack) + .itemStack(BaseItem) .weight('1%').build, ) } diff --git a/src/modules/places/village-of-explorers/items.ts b/src/modules/places/village-of-explorers/items.ts index d1917d6e..4baf92ec 100644 --- a/src/modules/places/village-of-explorers/items.ts +++ b/src/modules/places/village-of-explorers/items.ts @@ -1,10 +1,8 @@ -import { ItemStack } from '@minecraft/server' import { MinecraftItemTypes } from '@minecraft/vanilla-data' import { i18n } from 'lib/i18n/text' -import { customItems } from 'lib/rpg/custom-item' +import { CustomItem } from 'lib/rpg/custom-item' -export const MagicSlimeBall = new ItemStack(MinecraftItemTypes.SlimeBall).setInfo( - i18n`§aМагическая слизь`, - i18n`Используется у Инженера`, -) -customItems.push(MagicSlimeBall) +export const MagicSlimeBall = new CustomItem('magicSlimeBall') + .typeId(MinecraftItemTypes.SlimeBall) + .nameTag(i18n`§aМагическая слизь`) + .lore(i18n`Используется у Инженера`) diff --git a/src/modules/places/village-of-explorers/mage.ts b/src/modules/places/village-of-explorers/mage.ts index 40a05d04..6393d215 100644 --- a/src/modules/places/village-of-explorers/mage.ts +++ b/src/modules/places/village-of-explorers/mage.ts @@ -6,10 +6,11 @@ import { MinecraftEnchantmentTypes, MinecraftItemTypes, MinecraftPotionEffectTypes, - MinecraftPotionModifierTypes, } from '@minecraft/vanilla-data' -import { addNamespace, doNothing, Enchantments, getAuxOrTexture } from 'lib' + import { Sounds } from 'lib/assets/custom-sounds' +import { Enchantments } from 'lib/enchantments' +import { getAuxOrTexture } from 'lib/form/chest' import { translateEnchantment, translateTypeId } from 'lib/i18n/lang' import { i18n, i18nShared } from 'lib/i18n/text' import { Group } from 'lib/rpg/place' @@ -17,6 +18,7 @@ import { Cost, MoneyCost, MultiCost } from 'lib/shop/cost' import { ErrorCost, FreeCost } from 'lib/shop/cost/cost' import { ShopFormSection } from 'lib/shop/form' import { ShopNpc } from 'lib/shop/npc' +import { addNamespace, doNothing } from 'lib/util' import { copyAllItemPropertiesExceptEnchants } from 'lib/utils/game' import { FireBallItem } from 'modules/pvp/fireball' import { IceBombItem } from 'modules/pvp/ice-bomb' @@ -176,10 +178,10 @@ export class Mage extends ShopNpc { form.potion(new MoneyCost(100), MinecraftPotionEffectTypes.Strength) form.potion(new MoneyCost(100), MinecraftPotionEffectTypes.Healing) form.potion(new MoneyCost(100), MinecraftPotionEffectTypes.Swiftness) - form.potion(new MoneyCost(10), MinecraftPotionEffectTypes.NightVision, MinecraftPotionModifierTypes.Long) + form.potion(new MoneyCost(10), MinecraftPotionEffectTypes.LongNightvision) }) - .itemStack(IceBombItem, new MoneyCost(100)) - .itemStack(FireBallItem, new MoneyCost(100)) + .itemStack(IceBombItem.itemStack, new MoneyCost(100)) + .itemStack(FireBallItem.itemStack, new MoneyCost(100)) .itemStack(new ItemStack(i.TotemOfUndying), new MultiCost().money(6_000).item(i.Emerald, 1)) .itemStack(new ItemStack(i.EnchantedGoldenApple), new MultiCost().item(i.GoldenApple).money(10_000)), ) diff --git a/src/modules/places/village-of-explorers/slime.boss.ts b/src/modules/places/village-of-explorers/slime.boss.ts index 1e30d323..4527e527 100644 --- a/src/modules/places/village-of-explorers/slime.boss.ts +++ b/src/modules/places/village-of-explorers/slime.boss.ts @@ -1,10 +1,12 @@ import { world } from '@minecraft/server' import { MinecraftEntityTypes } from '@minecraft/vanilla-data' -import { Loot, ms } from 'lib' + import { i18nShared } from 'lib/i18n/text' import { Boss } from 'lib/rpg/boss' import { Group } from 'lib/rpg/place' import { MagicSlimeBall } from './items' +import { ms } from 'lib/utils/ms' +import { Loot } from 'lib/rpg/loot-table' export function createBossSlime(group: Group) { const boss = Boss.create() diff --git a/src/modules/places/village-of-explorers/village-of-explorers.ts b/src/modules/places/village-of-explorers/village-of-explorers.ts index 2719c235..7fc05f6b 100644 --- a/src/modules/places/village-of-explorers/village-of-explorers.ts +++ b/src/modules/places/village-of-explorers/village-of-explorers.ts @@ -1,4 +1,3 @@ -import { Loot } from 'lib' import { i18n, i18nShared } from 'lib/i18n/text' import { City } from '../lib/city' import { Butcher } from '../lib/npc/butcher' @@ -9,6 +8,7 @@ import { techCityInvestigating } from '../tech-city/quests/investigating' import { MagicSlimeBall } from './items' import { Mage } from './mage' import { createBossSlime } from './slime.boss' +import { Loot } from 'lib/rpg/loot-table' class VillageOfExporersBuilder extends City { constructor() { @@ -37,7 +37,7 @@ class VillageOfExporersBuilder extends City { i18n`Исследователи тип, не понял что ли, глупик, путешествуй смотри наслаждайся, ИССЛЕДУЙ`, ) - f.quest(techCityInvestigating.goToCityQuest, i18n`А где мне базу сделать-то?`) + lf.quest(techCityInvestigating.goToCityQuest, i18n`А где мне базу сделать-то?`) }) } diff --git a/src/modules/places/village-of-miners/village-of-miners.ts b/src/modules/places/village-of-miners/village-of-miners.ts index 7ae21441..700d1c60 100644 --- a/src/modules/places/village-of-miners/village-of-miners.ts +++ b/src/modules/places/village-of-miners/village-of-miners.ts @@ -1,4 +1,3 @@ -import { Loot, migrateLocationName } from 'lib' import { i18n, i18nShared } from 'lib/i18n/text' import { City } from '../lib/city' import { Butcher } from '../lib/npc/butcher' @@ -7,6 +6,8 @@ import { Stoner } from '../lib/npc/stoner' import { Woodman } from '../lib/npc/woodman' import { stoneQuarryInvestigating } from '../stone-quarry/quests/investigating' import { createMineQuests } from './quests/mine-x-blocks' +import { Loot } from 'lib/rpg/loot-table' +import { migrateLocationName } from 'lib/location' class VillageOfMinersBuilder extends City { constructor() { @@ -75,7 +76,7 @@ class VillageOfMinersBuilder extends City { i18n`Они есть... просто они сидят дома и смотрят стрим @shp1natqp`, ) - f.quest( + lf.quest( stoneQuarryInvestigating.goToCityQuest, i18n`Как мне переплавить руду?`, i18n`Возьми у меня задание и отправляйся в другое поселение следуя компасу.`, diff --git a/src/modules/pvp/cannon.ts b/src/modules/pvp/cannon.ts index a0f58169..2ff2d800 100644 --- a/src/modules/pvp/cannon.ts +++ b/src/modules/pvp/cannon.ts @@ -1,11 +1,16 @@ import { EntityComponentTypes, Player, system, world } from '@minecraft/server' import { MinecraftBlockTypes, MinecraftEntityTypes } from '@minecraft/vanilla-data' -import { actionGuard, ActionGuardOrder, Cooldown, ms, Vec } from 'lib' + import { CustomEntityTypes } from 'lib/assets/custom-entity-types' import { i18n } from 'lib/i18n/text' import { CustomItemWithBlueprint } from 'lib/rpg/custom-item' import { explosibleEntities, ExplosibleEntityOptions } from './explosible-entities' import { decreaseMainhandItemCount } from './throwable-tnt' +import { Vec } from 'lib/vector' +import { ActionGuardOrder } from 'lib/region' +import { actionGuard } from 'lib/region' +import { ms } from 'lib/utils/ms' +import { Cooldown } from 'lib/cooldown' export const CannonItem = new CustomItemWithBlueprint('cannon') .typeId('lw:cannon_spawn_egg') diff --git a/src/modules/pvp/explosible-entities.ts b/src/modules/pvp/explosible-entities.ts index e844f5b8..2f951599 100644 --- a/src/modules/pvp/explosible-entities.ts +++ b/src/modules/pvp/explosible-entities.ts @@ -1,6 +1,6 @@ import { Entity, EntityDamageCause, ExplosionOptions, Player, system } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { getEdgeBlocksOf } from 'modules/places/mineshaft/get-edge-blocks-of' import { createBlockExplosionChecker } from './raid' diff --git a/src/modules/pvp/explosible-fireworks.ts b/src/modules/pvp/explosible-fireworks.ts index b7ad2f0d..725888fc 100644 --- a/src/modules/pvp/explosible-fireworks.ts +++ b/src/modules/pvp/explosible-fireworks.ts @@ -1,6 +1,6 @@ import { Entity, Player, system, world } from '@minecraft/server' import { MinecraftEntityTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { explosibleEntities, ExplosibleEntityOptions } from './explosible-entities' const fireworks = new Set<{ date: number; entity: Entity }>() diff --git a/src/modules/pvp/fireball.ts b/src/modules/pvp/fireball.ts index 9902be62..2fe728cf 100644 --- a/src/modules/pvp/fireball.ts +++ b/src/modules/pvp/fireball.ts @@ -1,19 +1,14 @@ -import { ItemStack, system, world } from '@minecraft/server' +import { system, world } from '@minecraft/server' -import { Vec } from 'lib' import { CustomEntityTypes } from 'lib/assets/custom-entity-types' import { Items } from 'lib/assets/custom-items' import { i18n } from 'lib/i18n/text' -import { customItems } from 'lib/rpg/custom-item' +import { CustomItem } from 'lib/rpg/custom-item' +import { Vec } from 'lib/vector' import { explosibleEntities, ExplosibleEntityOptions } from './explosible-entities' import { decreaseMainhandItemCount } from './throwable-tnt' -export const FireBallItem = new ItemStack(Items.Fireball).setInfo( - undefined, - i18n`Используйте, чтобы отправить все в огненный ад`, -) - -customItems.push(FireBallItem) +export const FireBallItem = new CustomItem(Items.Fireball).lore(i18n`Используйте, чтобы отправить все в огненный ад`) const fireballExplosion: ExplosibleEntityOptions = { damage: 3, @@ -23,7 +18,7 @@ const fireballExplosion: ExplosibleEntityOptions = { } world.afterEvents.itemUse.subscribe(event => { - if (!FireBallItem.is(event.itemStack)) return + if (!FireBallItem.isItem(event.itemStack)) return decreaseMainhandItemCount(event.source) diff --git a/src/modules/pvp/ice-bomb.ts b/src/modules/pvp/ice-bomb.ts index bc2b4f7d..47a4f8b9 100644 --- a/src/modules/pvp/ice-bomb.ts +++ b/src/modules/pvp/ice-bomb.ts @@ -1,19 +1,19 @@ -import { Entity, EntityComponentTypes, ItemStack, Player, system, world } from '@minecraft/server' +import { Entity, EntityComponentTypes, Player, system, world } from '@minecraft/server' import { MinecraftBlockTypes, MinecraftEntityTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { Vec, ms } from 'lib' + import { i18n } from 'lib/i18n/text' -import { customItems } from 'lib/rpg/custom-item' +import { CustomItem } from 'lib/rpg/custom-item' import { ScheduleBlockPlace } from 'lib/scheduled-block-place' +import { ms } from 'lib/utils/ms' import { toPoint } from 'lib/utils/point' +import { Vec } from 'lib/vector' import { WeakPlayerSet } from 'lib/weak-player-storage' import { BaseRegion } from 'modules/places/base/region' import { getEdgeBlocksOf } from 'modules/places/mineshaft/get-edge-blocks-of' -export const IceBombItem = new ItemStack(MinecraftItemTypes.Snowball).setInfo( - i18n`§3Снежная бомба`, - i18n`Используйте, чтобы отправить все к снежной королеве подо льдину`, -) -customItems.push(IceBombItem) +export const IceBombItem = new CustomItem(MinecraftItemTypes.Snowball) + .nameTag(i18n`§3Снежная бомба`) + .lore(i18n`Используйте, чтобы отправить все к снежной королеве подо льдину`) const ICE_BOMB_TRANSOFORM: Record = { [MinecraftBlockTypes.Water]: MinecraftBlockTypes.FrostedIce, @@ -26,7 +26,7 @@ const iceBombs = new Set() const usedIceBombs = new WeakPlayerSet() world.afterEvents.itemUse.subscribe(event => { - if (!event.itemStack.is(IceBombItem)) return + if (!IceBombItem.isItem(event.itemStack)) return usedIceBombs.add(event.source) }) diff --git a/src/modules/pvp/item-ability.ts b/src/modules/pvp/item-ability.ts index f3d67ce0..24fe2349 100644 --- a/src/modules/pvp/item-ability.ts +++ b/src/modules/pvp/item-ability.ts @@ -1,9 +1,10 @@ import { EntityDamageCause, world } from '@minecraft/server' -import { isKeyof } from 'lib' + import { defaultLang } from 'lib/assets/lang' import { ItemLoreSchema } from 'lib/database/item-stack' import { i18n, i18nShared, noI18n } from 'lib/i18n/text' import { rollChance } from 'lib/rpg/random' +import { isKeyof } from 'lib/util' import { createLogger } from 'lib/utils/logger' const logger = createLogger('ItemAbility') diff --git a/src/modules/pvp/raid.ts b/src/modules/pvp/raid.ts index 88ad87ba..7aa7d64c 100644 --- a/src/modules/pvp/raid.ts +++ b/src/modules/pvp/raid.ts @@ -1,15 +1,19 @@ import { Block, Entity, system, world } from '@minecraft/server' -import { LockAction, ms, Region } from 'lib' +import { LockAction } from 'lib/action' + import { ScoreboardDB } from 'lib/database/scoreboard' import { i18n } from 'lib/i18n/text' +import { Region } from 'lib/region' import { MineareaRegion } from 'lib/region/kinds/minearea' import { ScheduleBlockPlace } from 'lib/scheduled-block-place' +import { onLoad } from 'lib/utils/load-ref' +import { ms } from 'lib/utils/ms' import { BaseRegion } from 'modules/places/base/region' const notify = new Map() const targetLockTime = ms.from('min', 8) const raiderLockTime = ms.from('min', 10) -const objective = ScoreboardDB.objective('raid') +const objective = onLoad(() => ScoreboardDB.objective('raid')) world.beforeEvents.explosion.subscribe(event => { const checker = createBlockExplosionChecker() @@ -78,11 +82,11 @@ system.runInterval( } else notify.set(id, { time: time - 1, reason }) } - for (const { participant, score } of objective.getScores()) { + for (const { participant, score } of objective.value.getScores()) { if (score > 1) { - objective.addScore(participant, -1) + objective.value.addScore(participant, -1) } else { - objective.removeParticipant(participant) + objective.value.removeParticipant(participant) } } }, diff --git a/src/modules/pvp/throwable-tnt.ts b/src/modules/pvp/throwable-tnt.ts index c3c81019..0f1efec8 100644 --- a/src/modules/pvp/throwable-tnt.ts +++ b/src/modules/pvp/throwable-tnt.ts @@ -1,8 +1,8 @@ import { GameMode, Player, system, world } from '@minecraft/server' import { MinecraftBlockTypes, MinecraftEntityTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { Vec } from 'lib' import { Cooldown } from 'lib/cooldown' import { ms } from 'lib/utils/ms' +import { Vec } from 'lib/vector' import { explosibleEntities, ExplosibleEntityOptions } from './explosible-entities' const cooldown = new Cooldown(ms.from('sec', 3)) diff --git a/src/modules/quests/daily/index.ts b/src/modules/quests/daily/index.ts index 0381e3ac..ba35388a 100644 --- a/src/modules/quests/daily/index.ts +++ b/src/modules/quests/daily/index.ts @@ -1,12 +1,14 @@ import { Player } from '@minecraft/server' -import { doNothing, noNullable } from 'lib' + import { table } from 'lib/database/abstract' import { form } from 'lib/form/new' +import { QuestForm } from 'lib/form/quest' import { intlListFormat } from 'lib/i18n/intl' import { i18n, textTable } from 'lib/i18n/text' import { questMenuCustomButtons } from 'lib/quest/menu' import { DailyQuest } from 'lib/quest/quest' import { RecurringEvent } from 'lib/recurring-event' +import { noNullable } from 'lib/util' import later from 'lib/utils/later' import { City } from 'modules/places/lib/city' import { CityInvestigating } from 'modules/places/lib/city-investigating-quest' @@ -67,7 +69,7 @@ new RecurringEvent( currentDailyQuestCity = mostPopular storage.cityId = mostPopular?.group.id ?? '' - for (const value of db.values()) { + for (const [, value] of db.entries()) { if (!value.takenToday) value.streak = 0 value.today = 0 value.takenToday = false @@ -114,11 +116,14 @@ questMenuCustomButtons.subscribe(({ player, form }) => { }) ) { const playerDb = db.get(player.id) - form.button(i18n.accent`Ежедневные задания`.badge(dailyQuests - playerDb.today).to(player.lang), dailyQuestsForm.show) + form.button( + i18n.accent`Ежедневные задания`.badge(dailyQuests - playerDb.today).to(player.lang), + dailyQuestsForm.show, + ) } }) -export const dailyQuestsForm = form((f, { player }) => { +export const dailyQuestsForm = form((f, { player, self }) => { const playerDb = db.get(player.id) f.title(i18n`Ежедневные задания`) f.body( @@ -150,6 +155,6 @@ export const dailyQuestsForm = form((f, { player }) => { } for (const quest of currentDailyQuests) { - f.quest(quest) + new QuestForm(f, player, self).quest(quest) } }) diff --git a/src/modules/quests/learning/airdrop.ts b/src/modules/quests/learning/airdrop.ts index 9e5ed914..3ea7f351 100644 --- a/src/modules/quests/learning/airdrop.ts +++ b/src/modules/quests/learning/airdrop.ts @@ -1,5 +1,5 @@ -import { Loot } from 'lib' import { Items } from 'lib/assets/custom-items' +import { Loot } from 'lib/rpg/loot-table' export default new Loot('starter') .item('WoodenSword') diff --git a/src/modules/quests/learning/learning.ts b/src/modules/quests/learning/learning.ts index c9667ac2..4c317941 100644 --- a/src/modules/quests/learning/learning.ts +++ b/src/modules/quests/learning/learning.ts @@ -1,8 +1,7 @@ import { EquipmentSlot, ItemStack, system } from '@minecraft/server' -import { ActionForm, ActionGuardOrder, location, Temporary, Vec } from 'lib' import { MinecraftBlockTypes as b, MinecraftBlockTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { actionGuard } from 'lib' + import { Sounds } from 'lib/assets/custom-sounds' import { Join } from 'lib/player-join' import { Quest } from 'lib/quest/index' @@ -11,13 +10,19 @@ import { createPublicGiveItemCommand, Menu } from 'lib/rpg/menu' import { Items } from 'lib/assets/custom-items' import { ActionbarPriority } from 'lib/extensions/on-screen-display' +import { ActionForm } from 'lib/form/action' import { i18n, i18nShared, noI18n } from 'lib/i18n/text' +import { location } from 'lib/location' +import { actionGuard, ActionGuardOrder } from 'lib/region' import { RegionEvents } from 'lib/region/events' import { MineareaRegion } from 'lib/region/kinds/minearea' import { enterNewbieMode } from 'lib/rpg/newbie' import { noGroup } from 'lib/rpg/place' +import { Temporary } from 'lib/temporary' +import { onLoad } from 'lib/utils/load-ref' import { createLogger } from 'lib/utils/logger' import { createPointVec } from 'lib/utils/point' +import { Vec } from 'lib/vector' import { WeakPlayerMap, WeakPlayerSet } from 'lib/weak-player-storage' import { Anarchy } from 'modules/places/anarchy/anarchy' import { OrePlace, ores } from 'modules/places/mineshaft/algo' @@ -64,8 +69,8 @@ class Learning { // in spawn inventory that will be replaced with // anarchy system.delay(() => { - this.startAxeGiveCommand.ensure(player) - player.getComponent('equippable')?.setEquipment(EquipmentSlot.Offhand, Menu.itemStack) + this.startAxeGiveCommand.value.ensure(player) + player.getComponent('equippable')?.setEquipment(EquipmentSlot.Offhand, Menu.itemStack.value) }) } @@ -271,11 +276,13 @@ class Learning { craftingTableLocation = location(this.quest.group.place('crafting table').name(noI18n`Верстак`)) - startAxeGiveCommand = createPublicGiveItemCommand( - 'startwand', - new ItemStack(MinecraftItemTypes.WoodenAxe), - s => s.typeId === MinecraftItemTypes.WoodenAxe && s.getDynamicProperty('startwand') === true, - i18n`§r§6Начальный топор`, + startAxeGiveCommand = onLoad(() => + createPublicGiveItemCommand( + 'startwand', + new ItemStack(MinecraftItemTypes.WoodenAxe), + s => s.typeId === MinecraftItemTypes.WoodenAxe && s.getDynamicProperty('startwand') === true, + i18n`§r§6Начальный топор`, + ), ) blockedOre = new WeakPlayerMap() diff --git a/src/modules/survival/cleanup.ts b/src/modules/survival/cleanup.ts index ffec3c72..70a9c674 100644 --- a/src/modules/survival/cleanup.ts +++ b/src/modules/survival/cleanup.ts @@ -9,7 +9,7 @@ // TicksPerSecond, // world, // } from '@minecraft/server' -// import { ms, Settings } from 'lib' +// // import { i18n } from 'lib/i18n/text' // import { createLogger } from 'lib/utils/logger' // import { gravestoneEntityTypeId, gravestoneGetOwner } from './death-quest-and-gravestone' diff --git a/src/modules/survival/death-quest-and-gravestone.spec.ts b/src/modules/survival/death-quest-and-gravestone.spec.ts deleted file mode 100644 index 3692f96b..00000000 --- a/src/modules/survival/death-quest-and-gravestone.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { ItemStack, ItemTypes } from '@minecraft/server' -import { TestStructures } from 'test/constants' -import { gamesuite, gametest } from 'test/framework' -import { gravestoneEntityTypeId } from './death-quest-and-gravestone' - -gamesuite('death-quest-and-gravestone', () => { - gametest('save-inventory', async test => { - const location = { x: 3, y: 2, z: 3 } - const player = test.spawnSimulatedPlayer(location) - - const { container } = player - if (!container) throw new Error('Player has no container') - - const items: ItemStack[] = [] - const allItems = ItemTypes.getAll() - for (const [i] of container.entries()) { - const item = new ItemStack(allItems.randomElement(), 1) - - container?.setItem(i, item) - items[i] = item - } - - test.assert(container.emptySlotsCount === 0, 'container is not full') - test.print('loaded ' + container?.size + ' items') - await test.idle(20) - - player.kill() - await test.idle(20) - - const entities = test.getDimension().getEntities({ location: test.relativeLocation(location), maxDistance: 4 }) - test.assert(entities.length === 0, 'no entities present') - - const entity = entities.find(e => e.typeId === gravestoneEntityTypeId) - if (!entity) throw new Error('no gravestone entity found') - await test.idle(400) - }).structureName(TestStructures.flat) -}) diff --git a/src/modules/survival/death-quest-and-gravestone.ts b/src/modules/survival/death-quest-and-gravestone.ts index 8831b875..2fffdcef 100644 --- a/src/modules/survival/death-quest-and-gravestone.ts +++ b/src/modules/survival/death-quest-and-gravestone.ts @@ -1,11 +1,17 @@ import { Entity, Player, system, world } from '@minecraft/server' -import { actionGuard, Cooldown, EventSignal, inventoryIsEmpty, ms, Settings, Vec } from 'lib' + import { CustomEntityTypes } from 'lib/assets/custom-entity-types' +import { EventSignal } from 'lib/event-signal' +import { Cooldown } from 'lib/cooldown' import { i18n, i18nShared, noI18n } from 'lib/i18n/text' import { Quest } from 'lib/quest/quest' -import { ActionGuardOrder, forceAllowSpawnInRegion, Region } from 'lib/region' +import { actionGuard, ActionGuardOrder, forceAllowSpawnInRegion, Region } from 'lib/region' import { SphereArea } from 'lib/region/areas/sphere' +import { inventoryIsEmpty } from 'lib/rpg/airdrop' import { noGroup } from 'lib/rpg/place' +import { Settings } from 'lib/settings' +import { Vec } from 'lib/vector' +import { ms } from 'lib/utils/ms' import { SafePlace } from 'modules/places/lib/safe-place' import { Spawn } from 'modules/places/spawn' diff --git a/src/modules/survival/locked-features.ts b/src/modules/survival/locked-features.ts index 999690bd..b223a72c 100644 --- a/src/modules/survival/locked-features.ts +++ b/src/modules/survival/locked-features.ts @@ -1,6 +1,7 @@ -import { actionGuard, ActionGuardOrder } from 'lib' import { intlListFormat } from 'lib/i18n/intl' import { i18n } from 'lib/i18n/text' +import { ActionGuardOrder } from 'lib/region' +import { actionGuard } from 'lib/region' const blocked: Record = {} diff --git a/src/modules/survival/menu.ts b/src/modules/survival/menu.ts index 8af7e67e..611f4e9c 100644 --- a/src/modules/survival/menu.ts +++ b/src/modules/survival/menu.ts @@ -1,114 +1,81 @@ -import { Player } from "@minecraft/server"; -import { BUTTON, doNothing } from "lib"; -import { - achievementsForm, - achievementsFormName, -} from "lib/achievements/command"; -import { clanMenu } from "lib/clan/menu"; -import { Core } from "lib/extensions/core"; -import { form } from "lib/form/new"; -import { i18n } from "lib/i18n/text"; -import { Mail } from "lib/mail"; -import { Join } from "lib/player-join"; -import { questsMenu } from "lib/quest/menu"; -import { Menu } from "lib/rpg/menu"; -import { playerSettingsMenu } from "lib/settings"; -import { mailMenu } from "modules/commands/mail"; -import { statsForm } from "modules/commands/stats"; -import { baseMenu } from "modules/places/base/base-menu"; -import { wiki } from "modules/wiki/wiki"; -import { Anarchy } from "../places/anarchy/anarchy"; -import { Spawn } from "../places/spawn"; -import { recurForm } from "./recurring-events"; -import { speedrunForm } from "./speedrun/target"; +import { Player } from '@minecraft/server' +import { achievementsForm, achievementsFormName } from 'lib/achievements/command' +import { clanMenu } from 'lib/clan/menu' +import { Core } from 'lib/extensions/core' +import { form } from 'lib/form/new' +import { BUTTON } from 'lib/form/utils' +import { i18n } from 'lib/i18n/text' +import { Mail } from 'lib/mail' +import { mailMenu } from 'lib/mail/command' +import { Join } from 'lib/player-join' +import { questsMenu } from 'lib/quest/menu' +import { Menu } from 'lib/rpg/menu' +import { playerSettingsMenu } from 'lib/settings' +import { doNothing } from 'lib/util' +import { statsForm } from 'modules/commands/stats' +import { baseMenu } from 'modules/places/base/base-menu' +import { wiki } from 'modules/wiki/wiki' +import { Anarchy } from '../places/anarchy/anarchy' +import { Spawn } from '../places/spawn' +import { recurForm } from './recurring-events' +import { speedrunForm } from './speedrun/target' function tp( - player: Player, - place: InventoryTypeName, - inv: InventoryTypeName, - color = "§9", - text = i18n`Спавн`, - extra: Text = "" + player: Player, + place: InventoryTypeName, + inv: InventoryTypeName, + color = '§9', + text = i18n`Спавн`, + extra: Text = '', ) { - const here = inv === place; - if (here) - extra = i18n`${extra ? extra.to(player.lang) + " " : ""}§8Вы тут`.to( - player.lang - ); - if (extra) extra = "\n" + extra.to(player.lang); - const prefix = here ? "§7" : color; - return `${prefix}> ${inv === place ? "§7" : "§r§f"}${text.to( - player.lang - )} ${prefix}<${extra}`; + const here = inv === place + if (here) extra = i18n`${extra ? extra.to(player.lang) + ' ' : ''}§8Вы тут`.to(player.lang) + if (extra) extra = '\n' + extra.to(player.lang) + const prefix = here ? '§7' : color + return `${prefix}> ${inv === place ? '§7' : '§r§f'}${text.to(player.lang)} ${prefix}<${extra}` } Menu.form = form((f, { player, self }) => { - const inv = player.database.inv; - f.title(Core.name, "§c§u§s§r"); - f.button( - tp(player, "spawn", inv, "§9", i18n`Спавн`), - "textures/ui/worldsIcon", - () => { - Spawn.portal?.teleport(player); - } - ) - .button( - tp(player, "anarchy", inv, "§c", i18n`Анархия`), - "textures/blocks/tnt_side", - () => { - Anarchy.portal?.teleport(player); - } - ) - .button( - tp(player, "mg", inv, `§6`, i18n`Миниигры`, i18n`§7СКОРО!`), - "textures/blocks/bedrock", - self - ); + const inv = player.database.inv + f.title(Core.name, '§c§u§s§r') + f.button(tp(player, 'spawn', inv, '§9', i18n`Спавн`), 'textures/ui/worldsIcon', () => { + Spawn.portal?.teleport(player) + }) + .button(tp(player, 'anarchy', inv, '§c', i18n`Анархия`), 'textures/blocks/tnt_side', () => { + Anarchy.portal?.teleport(player) + }) + .button(tp(player, 'mg', inv, `§6`, i18n`Миниигры`, i18n`§7СКОРО!`), 'textures/blocks/bedrock', self) - if (player.database.inv === "anarchy") { - f.button( - i18n`Задания`.badge(player.database.quests?.active.length), - "textures/ui/sidebar_icons/genre", - () => questsMenu(player, self) - ); + if (player.database.inv === 'anarchy') { + f.button(i18n`Задания`.badge(player.database.quests?.active.length), 'textures/ui/sidebar_icons/genre', () => + questsMenu(player, self), + ) - f.button( - achievementsFormName(player), - "textures/blocks/gold_block", - achievementsForm - ); + f.button(achievementsFormName(player), 'textures/blocks/gold_block', achievementsForm) - f.button(i18n`База`, "textures/blocks/barrel_side", baseMenu({})); - const [clanText, clan] = clanMenu(player, self); - f.button(clanText, "textures/ui/FriendsIcon", clan); - } + f.button(i18n`База`, 'textures/blocks/barrel_side', baseMenu({})) + const [clanText, clan] = clanMenu(player, self) + f.button(clanText, 'textures/ui/FriendsIcon', clan) + } - f.button( - i18n.nocolor`§6Донат\n§7СКОРО!`, - "textures/ui/permissions_op_crown", - self - ) - .button( - i18n.nocolor`§fПочта`.badge(Mail.getUnreadMessagesCount(player.id)), - "textures/ui/feedIcon", - () => mailMenu(player, self) - ) - .button(i18n.nocolor`§bВики`, BUTTON.search, wiki.show) + f.button(i18n.nocolor`§6Донат\n§7СКОРО!`, 'textures/ui/permissions_op_crown', self) + .button(i18n.nocolor`§fПочта`.badge(Mail.getUnreadMessagesCount(player.id)), 'textures/ui/feedIcon', () => + mailMenu(player, self), + ) + .button(i18n.nocolor`§bВики`, BUTTON.search, wiki.show) - .button(i18n.nocolor`§7Настройки`, BUTTON.settings, () => - playerSettingsMenu(player, self) - ) - .button(i18n`Еще`, BUTTON[">"], secondPage); -}); + .button(i18n.nocolor`§7Настройки`, BUTTON.settings, () => playerSettingsMenu(player, self)) + .button(i18n`Еще`, BUTTON['>'], secondPage) +}) -const secondPage = form((f) => { - f.title(Core.name, "§c§u§s§r"); - f.button(i18n`Цели`, BUTTON["?"], speedrunForm); - f.button(i18n`Лидеры`, BUTTON["?"], doNothing); - f.button(i18n`События`, BUTTON["?"], recurForm); - f.button(i18n`Статистика`, BUTTON["?"], statsForm({})); -}); +const secondPage = form(f => { + f.title(Core.name, '§c§u§s§r') + f.button(i18n`Цели`, BUTTON['?'], speedrunForm) + f.button(i18n`Лидеры`, BUTTON['?'], doNothing) + f.button(i18n`События`, BUTTON['?'], recurForm) + f.button(i18n`Статистика`, BUTTON['?'], statsForm({})) +}) Join.onMoveAfterJoin.subscribe(({ player, firstJoin }) => { - if (firstJoin) Menu.item.give(player, { mode: "ensure" }); -}); + if (firstJoin) Menu.item.value.give(player, { mode: 'ensure' }) +}) diff --git a/src/modules/survival/random-teleport.ts b/src/modules/survival/random-teleport.ts index a047d718..310df09d 100644 --- a/src/modules/survival/random-teleport.ts +++ b/src/modules/survival/random-teleport.ts @@ -3,7 +3,6 @@ import { EquipmentSlot, ItemLockMode, - ItemStack, LocationInUnloadedChunkError, LocationOutOfWorldBoundariesError, Player, @@ -12,13 +11,14 @@ import { } from '@minecraft/server' import { MinecraftEffectTypes, MinecraftItemTypes } from '@minecraft/vanilla-data' -import { LockAction, Vec, util } from 'lib' +import { LockAction } from 'lib/action' +import { CustomItem } from 'lib/rpg/custom-item' +import { util } from 'lib/util' +import { Vec } from 'lib/vector' -const RTP_ELYTRA = new ItemStack(MinecraftItemTypes.Elytra, 1).setInfo( - '§6Элитра перемещения', - 'Элитра перелета, пропадает на земле', -) -RTP_ELYTRA.lockMode = ItemLockMode.slot +const RTP_ELYTRA = new CustomItem(MinecraftItemTypes.Elytra) + .nameTag('§6Элитра перемещения') + .lore('Элитра перелета, пропадает на земле') const IN_SKY = new Set() new LockAction(player => IN_SKY.has(player.id), '§cВ начале коснитесь земли!') @@ -156,7 +156,9 @@ function giveElytra(player: Player, c = 5) { } } - slot.setItem(RTP_ELYTRA) + const clone = RTP_ELYTRA.itemStack.clone() + clone.lockMode = ItemLockMode.slot + slot.setItem(clone) player.database.survival.rtpElytra = 1 } @@ -182,6 +184,6 @@ function clearElytra(player: Player) { if (!equippable) return const slot = equippable.getEquipmentSlot(EquipmentSlot.Chest) const item = slot.getItem() - if (item && RTP_ELYTRA.is(item)) slot.setItem(undefined) + if (item && RTP_ELYTRA.isItem(item)) slot.setItem(undefined) delete player.database.survival.rtpElytra } diff --git a/src/modules/survival/realtime.ts b/src/modules/survival/realtime.ts index 708e792d..56442903 100644 --- a/src/modules/survival/realtime.ts +++ b/src/modules/survival/realtime.ts @@ -1,6 +1,7 @@ import { TicksPerDay, TimeOfDay, system, world } from '@minecraft/server' -import { Settings } from 'lib' + import { noI18n } from 'lib/i18n/text' +import { Settings } from 'lib/settings' const MinutesPerDay = 24 * 60 const Offset = 6000 diff --git a/src/modules/survival/recurring-events.ts b/src/modules/survival/recurring-events.ts index a720d683..c6810049 100644 --- a/src/modules/survival/recurring-events.ts +++ b/src/modules/survival/recurring-events.ts @@ -1,14 +1,12 @@ -import { Player, TicksPerSecond, world } from "@minecraft/server"; -import { - MinecraftEffectTypes, - MinecraftEffectTypesUnion, -} from "@minecraft/vanilla-data"; -import { ms, RoadRegion } from "lib"; -import { form } from "lib/form/new"; -import { i18n } from "lib/i18n/text"; -import { DurationalRecurringEvent } from "lib/recurring-event"; -import { RegionEvents } from "lib/region/events"; -import later from "lib/utils/later"; +import { Player, TicksPerSecond, world } from '@minecraft/server' +import { MinecraftEffectTypes, MinecraftEffectTypesUnion } from '@minecraft/vanilla-data' +import { form } from 'lib/form/new' +import { i18n } from 'lib/i18n/text' +import { DurationalRecurringEvent } from 'lib/recurring-event' +import { RoadRegion } from 'lib/region' +import { RegionEvents } from 'lib/region/events' +import later from 'lib/utils/later' +import { ms } from 'lib/utils/ms' // TODO Add settings for players to not apply effects on them // TODO Add command to show menu to view events @@ -17,75 +15,64 @@ import later from "lib/utils/later"; // TODO Add chat notification class RecurringEffect { - static all: RecurringEffect[] = []; + static all: RecurringEffect[] = [] - readonly event: DurationalRecurringEvent; + readonly event: DurationalRecurringEvent - constructor( - readonly effectType: MinecraftEffectTypesUnion, - readonly startingOn: number, - filter?: (p: Player) => boolean, - readonly amplifier = 2 - ) { - RecurringEffect.all.push(this); - this.event = new DurationalRecurringEvent( - `effect${effectType}`, - later.parse.recur().every(5).hour().startingOn(startingOn), - ms.from("min", 10), - () => ({}), - (_, ctx) => { - for (const player of world.getAllPlayers()) { - player.success( - i18n.success`Событие! ${effectType} силой ${amplifier} на ${10} минут` - ); - } - ctx.temp.system.runInterval( - () => { - for (const player of world.getAllPlayers()) { - if (filter && !filter(player)) continue; + constructor( + readonly effectType: MinecraftEffectTypesUnion, + readonly startingOn: number, + filter?: (p: Player) => boolean, + readonly amplifier = 2, + ) { + RecurringEffect.all.push(this) + this.event = new DurationalRecurringEvent( + `effect${effectType}`, + later.parse.recur().every(5).hour().startingOn(startingOn), + ms.from('min', 10), + () => ({}), + (_, ctx) => { + for (const player of world.getAllPlayers()) { + player.success(i18n.success`Событие! ${effectType} силой ${amplifier} на ${10} минут`) + } + ctx.temp.system.runInterval( + () => { + for (const player of world.getAllPlayers()) { + if (filter && !filter(player)) continue - player.addEffect( - MinecraftEffectTypes[effectType], - TicksPerSecond * 3, - { - amplifier, - showParticles: false, - } - ); - } - }, - `effect${effectType}`, - TicksPerSecond * 2 - ); - } - ); - } + player.addEffect(MinecraftEffectTypes[effectType], TicksPerSecond * 3, { + amplifier, + showParticles: false, + }) + } + }, + `effect${effectType}`, + TicksPerSecond * 2, + ) + }, + ) + } } -new RecurringEffect("Haste", 1); -new RecurringEffect("HealthBoost", 2); +new RecurringEffect('Haste', 1) +new RecurringEffect('HealthBoost', 2) new RecurringEffect( - "Speed", - 3, - (p) => - RegionEvents.playerInRegionsCache - .get(p) - ?.some((e) => e instanceof RoadRegion) ?? false, - 4 -); + 'Speed', + 3, + p => RegionEvents.playerInRegionsCache.get(p)?.some(e => e instanceof RoadRegion) ?? false, + 4, +) export const recurForm = form((f, { self }) => { - f.title(i18n`События`); - f.body(i18n`Время: ${new Date().toHHMMSS()}`); + f.title(i18n`События`) + f.body(i18n`Время: ${new Date().toHHMMSS()}`) - const now = Date.now(); - for (const event of RecurringEffect.all) { - const next = event.event.getNextOccurances(1)[0] ?? new Date(); - f.button( - i18n`${event.effectType} ${event.amplifier + 1}\nЧерез ${i18n.time( - next.getTime() - now - )} (${next.toHHMM()})`, - self - ); - } -}); + const now = Date.now() + for (const event of RecurringEffect.all) { + const next = event.event.getNextOccurances(1)[0] ?? new Date() + f.button( + i18n`${event.effectType} ${event.amplifier + 1}\nЧерез ${i18n.time(next.getTime() - now)} (${next.toHHMM()})`, + self, + ) + } +}) diff --git a/src/modules/survival/sidebar.ts b/src/modules/survival/sidebar.ts index 8f84075f..da5917a8 100644 --- a/src/modules/survival/sidebar.ts +++ b/src/modules/survival/sidebar.ts @@ -1,8 +1,14 @@ import { Player, system, TicksPerSecond, world } from '@minecraft/server' -import { Menu, Region, separateNumberWithDots, Settings, Sidebar } from 'lib' + import { emoji } from 'lib/assets/emoji' import { i18n } from 'lib/i18n/text' +import { Join } from 'lib/player-join' import { Quest } from 'lib/quest/quest' +import { Region } from 'lib/region' +import { Menu } from 'lib/rpg/menu' +import { Settings } from 'lib/settings' +import { Sidebar } from 'lib/sidebar' +import { separateNumberWithDots } from 'lib/util' import { Minigame } from 'modules/minigames/Builder' import { BaseRegion } from 'modules/places/base/region' @@ -137,7 +143,7 @@ export function showSurvivalHud(player: Player) { system.runPlayerInterval( player => { - if (player.database.join) return // Do not show sidebar until player actually joins the world + if (Join.getInstance().isJoining(player)) return // Do not show sidebar until player actually joins the world const settings = getSidebarSettings(player) diff --git a/src/modules/survival/speedrun/target.ts b/src/modules/survival/speedrun/target.ts index 39b6d333..3914b987 100644 --- a/src/modules/survival/speedrun/target.ts +++ b/src/modules/survival/speedrun/target.ts @@ -1,6 +1,8 @@ import { Player } from '@minecraft/server' -import { InventoryInterval, ScoreboardDB } from 'lib' +import { InventoryInterval } from 'lib/action' + import { defaultLang } from 'lib/assets/lang' +import { ScoreboardDB } from 'lib/database/scoreboard' import { form } from 'lib/form/new' import { i18n, i18nShared } from 'lib/i18n/text' import { BaseItem } from 'modules/places/base/base' @@ -64,10 +66,9 @@ declare module '@minecraft/server' { } } -const baseTypeId = BaseItem.itemStack.typeId InventoryInterval.slots.subscribe(({ player, slot }) => { if (!isSpeedRunningFor(player, SpeedRunTarget.GetBaseItem)) return - if (slot.isValid && slot.typeId === baseTypeId && BaseItem.isItem(slot.getItem())) { + if (slot.isValid && BaseItem.isItem(slot.getItem())) { finishSpeedRun(player, SpeedRunTarget.GetBaseItem) } }) diff --git a/src/modules/test/edit-structure.ts b/src/modules/test/edit-structure.ts index 3d3657d0..1b9ff3db 100644 --- a/src/modules/test/edit-structure.ts +++ b/src/modules/test/edit-structure.ts @@ -1,9 +1,11 @@ import { BlockVolume, LocationInUnloadedChunkError, world } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { Region, Vec } from 'lib' + import { StructureDungeonsId } from 'lib/assets/structures' import { form } from 'lib/form/new' import { noI18n } from 'lib/i18n/text' +import { Region } from 'lib/region' +import { Vec } from 'lib/vector' const f = form((f, { player }) => { for (const [name, id] of Object.entries(StructureDungeonsId)) { diff --git a/src/modules/test/enchant.ts b/src/modules/test/enchant.ts index fc8c4ae6..3f107c6f 100644 --- a/src/modules/test/enchant.ts +++ b/src/modules/test/enchant.ts @@ -1,6 +1,6 @@ /* i18n-ignore */ -import { world } from '@minecraft/server' import { Enchantments } from 'lib/enchantments' +import { stringify } from 'lib/util' new Command('enchant') .setDescription('Зачаровывает предмет') @@ -37,7 +37,7 @@ new Command('enchant') newitem.lockMode = item.lockMode for (const prop of item.getDynamicPropertyIds()) newitem.setDynamicProperty(prop, item.getDynamicProperty(prop)) - if (newitem.enchantable) world.debug('enchants', [...newitem.enchantable.getEnchantments()]) + if (newitem.enchantable) ctx.player.tell('enchants ' + stringify([...newitem.enchantable.getEnchantments()])) mainhand.setItem(newitem) }) diff --git a/src/modules/test/load-chunks.ts b/src/modules/test/load-chunks.ts index daaac399..2e2f8a70 100644 --- a/src/modules/test/load-chunks.ts +++ b/src/modules/test/load-chunks.ts @@ -1,8 +1,8 @@ import { Block, system } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { Vec } from 'lib' import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { noI18n } from 'lib/i18n/text' +import { Vec } from 'lib/vector' new Command('chunkload') .setPermissions('curator') diff --git a/src/modules/test/minimap.ts b/src/modules/test/minimap.ts index aa15f17b..a7615966 100644 --- a/src/modules/test/minimap.ts +++ b/src/modules/test/minimap.ts @@ -1,6 +1,6 @@ import { RGBA, system, world } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { removeNamespace } from 'lib' +import { removeNamespace } from 'lib/util' system.afterEvents.scriptEventReceive.subscribe( ({ id }) => { diff --git a/src/modules/test/properties.ts b/src/modules/test/properties.ts index 5d452c60..506cb02f 100644 --- a/src/modules/test/properties.ts +++ b/src/modules/test/properties.ts @@ -1,6 +1,7 @@ import { Player } from '@minecraft/server' -import { ArrayForm } from 'lib' + import { playerJson } from 'lib/assets/player-json' +import { ArrayForm } from 'lib/form/array' new Command('props') .setDescription('Player properties menu') diff --git a/src/modules/test/simulatedPlayer.ts b/src/modules/test/simulatedPlayer.ts index dbf150e5..039df256 100644 --- a/src/modules/test/simulatedPlayer.ts +++ b/src/modules/test/simulatedPlayer.ts @@ -4,7 +4,8 @@ import { GameMode, system, world } from '@minecraft/server' import * as GameTest from '@minecraft/server-gametest' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { Vec, util } from 'lib' +import { util } from 'lib/util' +import { Vec } from 'lib/vector' import { TestStructures } from 'test/constants' const time = 9999999 diff --git a/src/modules/test/test.ts b/src/modules/test/test.ts index 8aae5981..e1c4838e 100644 --- a/src/modules/test/test.ts +++ b/src/modules/test/test.ts @@ -1,51 +1,45 @@ /* i18n-ignore */ /* eslint-disable */ -import { ItemStack, MolangVariableMap, Player, ScriptEventSource, system, world } from '@minecraft/server' +import { MolangVariableMap, Player, Potions, ScriptEventSource, system, world } from '@minecraft/server' import { MinecraftBlockTypes, MinecraftCameraPresetsTypes, MinecraftEnchantmentTypes, MinecraftEntityTypes, MinecraftItemTypes, + MinecraftPotionDeliveryTypes, MinecraftPotionEffectTypes, } from '@minecraft/vanilla-data' -import { - Airdrop, - BUTTON, - ChestForm, - DatabaseUtils, - FormNpc, - LootTable, - Mail, - Region, - RoadRegion, - SafeAreaRegion, - Settings, - Vec, - getAuxOrTexture, - getAuxTextureOrPotionAux, - inspect, - is, - isKeyof, - restorePlayerCamera, - util, -} from 'lib' + import { CustomEntityTypes } from 'lib/assets/custom-entity-types' import { CommandContext } from 'lib/command/context' import { parseArguments } from 'lib/command/utils' import { Cutscene } from 'lib/cutscene' +import { DatabaseUtils } from 'lib/database/utils' import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { ActionForm } from 'lib/form/action' +import { ChestForm, getAuxOrTexture, getAuxTextureOrPotionAux } from 'lib/form/chest' import { MessageForm } from 'lib/form/message' import { ModalForm } from 'lib/form/modal' import { form } from 'lib/form/new' +import { FormNpc } from 'lib/form/npc' +import { BUTTON } from 'lib/form/utils' import { i18n, noI18n } from 'lib/i18n/text' +import { Mail } from 'lib/mail' +import { Region, RoadRegion, SafeAreaRegion } from 'lib/region' import { MineareaRegion } from 'lib/region/kinds/minearea' +import { is } from 'lib/roles' +import { Airdrop } from 'lib/rpg/airdrop' +import { LootTable } from 'lib/rpg/loot-table' import { Compass } from 'lib/rpg/menu' import { setMinimapNpcPosition } from 'lib/rpg/minimap' +import { Settings } from 'lib/settings' +import { inspect, isKeyof, util } from 'lib/util' +import { restorePlayerCamera } from 'lib/utils/game' import { toPoint } from 'lib/utils/point' import { Rewards } from 'lib/utils/rewards' +import { Vec } from 'lib/vector' import { requestAirdrop } from 'modules/places/anarchy/airdrop' import { BaseRegion } from 'modules/places/base/region' import { skipForBlending } from 'modules/world-edit/utils/blending' @@ -202,7 +196,7 @@ const tests: Record< }, potionAux(ctx) { for (const effect of Object.values(MinecraftPotionEffectTypes)) { - const item = ItemStack.createPotion({ effect }) + const item = Potions.resolve(effect, MinecraftPotionDeliveryTypes.ThrownSplash) getAuxTextureOrPotionAux(item) } }, @@ -403,7 +397,7 @@ const tests: Record< }, dbinspect(ctx) { - world.debug( + console.log( 'test41', { DatabaseUtils }, world.overworld.getEntities({ type: DatabaseUtils.entityTypeId }).map(e => { diff --git a/src/modules/wiki/wiki.ts b/src/modules/wiki/wiki.ts index 1b308f8c..fd66f442 100644 --- a/src/modules/wiki/wiki.ts +++ b/src/modules/wiki/wiki.ts @@ -1,6 +1,7 @@ import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { getAuxOrTexture, langToken } from 'lib' +import { getAuxOrTexture } from 'lib/form/chest' import { form } from 'lib/form/new' +import { langToken } from 'lib/i18n/lang' import { i18n, textTable } from 'lib/i18n/text' import { selectByChance } from 'lib/rpg/random' import { ores } from 'modules/places/mineshaft/algo' diff --git a/src/modules/world-edit/commands/general/id.ts b/src/modules/world-edit/commands/general/id.ts index d0666c37..c64e3009 100644 --- a/src/modules/world-edit/commands/general/id.ts +++ b/src/modules/world-edit/commands/general/id.ts @@ -1,6 +1,7 @@ import {} from '@minecraft/server' import { MinecraftEntityTypes } from '@minecraft/vanilla-data' -import { Vec, inspect } from 'lib' +import { Vec } from 'lib/vector' +import { inspect } from 'lib/util' const root = new Command('id').setDescription('Выдает айди').setPermissions('builder').setGroup('we') diff --git a/src/modules/world-edit/commands/region/set/block-is-avaible.ts b/src/modules/world-edit/commands/region/set/block-is-avaible.ts index 77efc405..2dd2276d 100644 --- a/src/modules/world-edit/commands/region/set/block-is-avaible.ts +++ b/src/modules/world-edit/commands/region/set/block-is-avaible.ts @@ -1,13 +1,14 @@ import { BlockTypes, Player } from '@minecraft/server' import { suggest } from 'lib/command/utils' import { noI18n } from 'lib/i18n/text' +import { onLoad } from 'lib/utils/load-ref' const prefix = 'minecraft:' -const blocks = BlockTypes.getAll().map(e => e.id.substring(prefix.length)) +const blocks = onLoad(() => BlockTypes.getAll().map(e => e.id.substring(prefix.length))) export function blockIsAvaible(block: string, player: Pick): boolean { - if (blocks.includes(block)) return true + if (blocks.value.includes(block)) return true player.tell(noI18n.error`Блока ${block} не существует.`) - suggest(player, block, blocks) + suggest(player, block, blocks.value) return false } diff --git a/src/modules/world-edit/commands/region/set/set-selection.ts b/src/modules/world-edit/commands/region/set/set-selection.ts index a031b3a4..cfc3c274 100644 --- a/src/modules/world-edit/commands/region/set/set-selection.ts +++ b/src/modules/world-edit/commands/region/set/set-selection.ts @@ -1,13 +1,14 @@ import { Player } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { BUTTON } from 'lib' + import { ChestForm } from 'lib/form/chest' import { WeakPlayerMap } from 'lib/weak-player-storage' import { ReplaceMode } from 'modules/world-edit/utils/blocks-set' import { WorldEdit } from '../../../lib/world-edit' import { SelectedBlock, useBlockSelection } from './use-block-selection' import { useReplaceMode } from './use-replace-mode' +import { BUTTON } from 'lib/form/utils' const selection = { block: new WeakPlayerMap(), diff --git a/src/modules/world-edit/commands/region/set/use-block-selection.ts b/src/modules/world-edit/commands/region/set/use-block-selection.ts index 064c5152..157746c7 100644 --- a/src/modules/world-edit/commands/region/set/use-block-selection.ts +++ b/src/modules/world-edit/commands/region/set/use-block-selection.ts @@ -1,7 +1,12 @@ import { BlockPermutation, BlockTypes, Player } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { ActionForm, BUTTON, ChestForm, ModalForm, inspect, translateTypeId } from 'lib' +import { ActionForm } from 'lib/form/action' +import { ChestForm } from 'lib/form/chest' +import { ModalForm } from 'lib/form/modal' +import { BUTTON } from 'lib/form/utils' +import { translateTypeId } from 'lib/i18n/lang' import { i18n } from 'lib/i18n/text' +import { inspect } from 'lib/util' import { WeakPlayerMap } from 'lib/weak-player-storage' import { WEeditBlockStatesMenu } from 'modules/world-edit/menu' import { diff --git a/src/modules/world-edit/commands/region/set/use-replace-mode.ts b/src/modules/world-edit/commands/region/set/use-replace-mode.ts index d2349549..0978a2cd 100644 --- a/src/modules/world-edit/commands/region/set/use-replace-mode.ts +++ b/src/modules/world-edit/commands/region/set/use-replace-mode.ts @@ -1,6 +1,7 @@ import { Player } from '@minecraft/server' -import { BUTTON, settingsModal } from 'lib' +import { BUTTON } from 'lib/form/utils' import { noI18n } from 'lib/i18n/text' +import { settingsModal } from 'lib/settings' import { WeakPlayerMap } from 'lib/weak-player-storage' import { getReplaceMode, ReplaceMode } from 'modules/world-edit/utils/blocks-set' import { REPLACE_MODES } from 'modules/world-edit/utils/default-block-sets' diff --git a/src/modules/world-edit/commands/selection/chunk.ts b/src/modules/world-edit/commands/selection/chunk.ts index e3cd7e32..82d50708 100644 --- a/src/modules/world-edit/commands/selection/chunk.ts +++ b/src/modules/world-edit/commands/selection/chunk.ts @@ -1,5 +1,5 @@ import { Entity, Player } from '@minecraft/server' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { WorldEdit } from '../../lib/world-edit' /** diff --git a/src/modules/world-edit/commands/selection/expand.ts b/src/modules/world-edit/commands/selection/expand.ts index 8ae49a02..17133e31 100644 --- a/src/modules/world-edit/commands/selection/expand.ts +++ b/src/modules/world-edit/commands/selection/expand.ts @@ -1,5 +1,5 @@ import {} from '@minecraft/server' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { WorldEdit } from '../../lib/world-edit' export class SelectionManager { diff --git a/src/modules/world-edit/commands/selection/pos1.ts b/src/modules/world-edit/commands/selection/pos1.ts index 5d1d07cd..1ffc01f9 100644 --- a/src/modules/world-edit/commands/selection/pos1.ts +++ b/src/modules/world-edit/commands/selection/pos1.ts @@ -1,5 +1,5 @@ import {} from '@minecraft/server' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { WorldEdit } from '../../lib/world-edit' new Command('pos1') diff --git a/src/modules/world-edit/commands/selection/pos2.ts b/src/modules/world-edit/commands/selection/pos2.ts index 9f4b23d8..d8ca260d 100644 --- a/src/modules/world-edit/commands/selection/pos2.ts +++ b/src/modules/world-edit/commands/selection/pos2.ts @@ -1,5 +1,5 @@ import {} from '@minecraft/server' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { WorldEdit } from '../../lib/world-edit' new Command('pos2') diff --git a/src/modules/world-edit/commands/selection/size.ts b/src/modules/world-edit/commands/selection/size.ts index 24b1c12b..63d4880f 100644 --- a/src/modules/world-edit/commands/selection/size.ts +++ b/src/modules/world-edit/commands/selection/size.ts @@ -1,7 +1,7 @@ import {} from '@minecraft/server' -import { Vec } from 'lib' import { CommandContext } from 'lib/command/context' import { i18n } from 'lib/i18n/text' +import { Vec } from 'lib/vector' import { WorldEdit } from 'modules/world-edit/lib/world-edit' function getSelection(ctx: CommandContext) { diff --git a/src/modules/world-edit/config.ts b/src/modules/world-edit/config.ts index e1d998f7..c05cb428 100644 --- a/src/modules/world-edit/config.ts +++ b/src/modules/world-edit/config.ts @@ -4,6 +4,7 @@ import { MolangVariableMap, world, } from '@minecraft/server' +import { onLoad } from 'lib/utils/load-ref' import { Vec } from 'lib/vector' export const WE_CONFIG = { @@ -17,15 +18,13 @@ export const WE_CONFIG = { DRAW_SELECTION_PARTICLE: 'minecraft:balloon_gas_particle', DRAW_SELECTION_MAX_SIZE: 5000, - DRAW_SELECTION_PARTICLE_OPTIONS: new MolangVariableMap(), + DRAW_SELECTION_PARTICLE_OPTIONS: onLoad(() => { + const map = new MolangVariableMap() + map.setVector3('direction', { x: 0, y: 0, z: 0 }) + return map + }), } -WE_CONFIG.DRAW_SELECTION_PARTICLE_OPTIONS.setVector3('direction', { - x: 0, - y: 0, - z: 0, -}) - export function spawnParticlesInArea( pos1: Vector3, pos2: Vector3, @@ -44,7 +43,7 @@ export function spawnParticlesInArea( world.overworld.spawnParticle( WE_CONFIG.DRAW_SELECTION_PARTICLE, { x, y, z }, - WE_CONFIG.DRAW_SELECTION_PARTICLE_OPTIONS, + WE_CONFIG.DRAW_SELECTION_PARTICLE_OPTIONS.value, ) } catch (e) { if (e instanceof LocationInUnloadedChunkError || e instanceof LocationOutOfWorldBoundariesError) continue diff --git a/src/modules/world-edit/lib/world-edit-multi-tool.ts b/src/modules/world-edit/lib/world-edit-multi-tool.ts index e0714cb4..4ab2058d 100644 --- a/src/modules/world-edit/lib/world-edit-multi-tool.ts +++ b/src/modules/world-edit/lib/world-edit-multi-tool.ts @@ -1,7 +1,12 @@ import { ContainerSlot, ItemStack, Player } from '@minecraft/server' -import { ArrayForm, ask, BUTTON, doNothing, ModalForm } from 'lib' + import { noI18n } from 'lib/i18n/text' import { WorldEditTool } from './world-edit-tool' +import { doNothing } from 'lib/util' +import { ModalForm } from 'lib/form/modal' +import { ask } from 'lib/form/message' +import { BUTTON } from 'lib/form/utils' +import { ArrayForm } from 'lib/form/array' export interface ToolsDataStorage { /** Version */ diff --git a/src/modules/world-edit/lib/world-edit-tool-brush.ts b/src/modules/world-edit/lib/world-edit-tool-brush.ts index 20032c6f..d0defd09 100644 --- a/src/modules/world-edit/lib/world-edit-tool-brush.ts +++ b/src/modules/world-edit/lib/world-edit-tool-brush.ts @@ -1,6 +1,7 @@ import { BlockRaycastHit, ItemStack, Player } from '@minecraft/server' -import { isLocationError } from 'lib' +import { noI18n } from 'lib/i18n/text' import stringifyError from 'lib/utils/error' +import { isLocationError } from 'lib/utils/game' import { worldEditPlayerSettings } from 'modules/world-edit/settings' import { BlocksSetRef } from '../utils/blocks-set' import { WorldEditTool } from './world-edit-tool' @@ -29,7 +30,7 @@ export abstract class WorldEditToolBrush extends Wor if (!this.isOurBrush(storage)) return const hit = player.getBlockFromViewDirection({ maxDistance: storage.maxDistance }) - const fail = (reason: string) => player.fail(`§7Кисть§f: §c${reason}`) + const fail = (reason: string) => player.fail(noI18n.error`Кисть: ${reason}`) if (!hit) return fail('Блок слишком далеко.') try { diff --git a/src/modules/world-edit/lib/world-edit-tool.ts b/src/modules/world-edit/lib/world-edit-tool.ts index 2822227a..5baad0db 100644 --- a/src/modules/world-edit/lib/world-edit-tool.ts +++ b/src/modules/world-edit/lib/world-edit-tool.ts @@ -8,9 +8,11 @@ import { system, world, } from '@minecraft/server' -import { Command, inspect, isKeyof, noBoolean, stringify, util } from 'lib' + +import { Command } from 'lib/command' import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { noI18n, textUnitColorize } from 'lib/i18n/text' +import { inspect, isKeyof, noBoolean, stringify, util } from 'lib/util' import { BlocksSetRef, stringifyBlocksSetRef } from 'modules/world-edit/utils/blocks-set' import { worldEditPlayerSettings } from '../settings' diff --git a/src/modules/world-edit/lib/world-edit.ts b/src/modules/world-edit/lib/world-edit.ts index 35d25f20..94fb0bc8 100644 --- a/src/modules/world-edit/lib/world-edit.ts +++ b/src/modules/world-edit/lib/world-edit.ts @@ -1,5 +1,5 @@ import { BlockPermutation, Player, StructureMirrorAxis, StructureRotation, system, world } from '@minecraft/server' -import { Vec, ask, getRole, isLocationError } from 'lib' + import { Sounds } from 'lib/assets/custom-sounds' import { table } from 'lib/database/abstract' import { i18n } from 'lib/i18n/text' @@ -17,6 +17,10 @@ import { toPermutation, toReplaceTarget, } from '../utils/blocks-set' +import { isLocationError } from 'lib/utils/game' +import { ask } from 'lib/form/message' +import { getRole } from 'lib/roles' +import { Vec } from 'lib/vector' // TODO Add WorldEdit.runMultipleAsyncJobs diff --git a/src/modules/world-edit/menu.ts b/src/modules/world-edit/menu.ts index 19cac62d..07fd00ae 100644 --- a/src/modules/world-edit/menu.ts +++ b/src/modules/world-edit/menu.ts @@ -1,13 +1,19 @@ import { BlockStates, BlockTypes, Player, world } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { ActionForm, BUTTON, FormCallback, ModalForm, Vec, inspect, is, noNullable, stringify } from 'lib' import { Sounds } from 'lib/assets/custom-sounds' +import { ActionForm } from 'lib/form/action' import { ArrayForm } from 'lib/form/array' import { ChestButtonOptions, ChestForm } from 'lib/form/chest' import { ask } from 'lib/form/message' +import { ModalForm } from 'lib/form/modal' +import { BUTTON, FormCallback } from 'lib/form/utils' import { translateTypeId } from 'lib/i18n/lang' import { i18n } from 'lib/i18n/text' +import { is } from 'lib/roles' +import { inspect, noNullable, stringify } from 'lib/util' +import { onLoad } from 'lib/utils/load-ref' +import { Vec } from 'lib/vector' import { WorldEdit } from 'modules/world-edit/lib/world-edit' import { weRandomizerTool } from 'modules/world-edit/tools/randomizer' import { @@ -538,7 +544,7 @@ function WEeditBlocksSetMenu(o: { form.show(player) } -const allStates = BlockStates.getAll() +const allStates = onLoad(() => BlockStates.getAll()) export function WEeditBlockStatesMenu( player: Player, @@ -558,7 +564,7 @@ export function WEeditBlockStatesMenu( // eslint-disable-next-line prefer-const for (let [stateName, stateValue] of Object.entries(states)) { - const stateDef = allStates.find(e => e.id === stateName) + const stateDef = allStates.value.find(e => e.id === stateName) if (!stateDef) continue form.button( diff --git a/src/modules/world-edit/settings.ts b/src/modules/world-edit/settings.ts index dfac7b35..aaec9bd6 100644 --- a/src/modules/world-edit/settings.ts +++ b/src/modules/world-edit/settings.ts @@ -1,4 +1,4 @@ -import { Settings } from 'lib' +import { Settings } from 'lib/settings' export const worldEditPlayerSettings = Settings.player('§6World§dEdit\n§7Настройки строителя мира', 'we', { noBrushParticles: { diff --git a/src/modules/world-edit/tools/brush.ts b/src/modules/world-edit/tools/brush.ts index d4ed4fd1..c8ef869c 100644 --- a/src/modules/world-edit/tools/brush.ts +++ b/src/modules/world-edit/tools/brush.ts @@ -1,8 +1,13 @@ import { ContainerSlot, Entity, Player, system, world } from '@minecraft/server' -import { ModalForm, Vec, is, isKeyof, isLocationError } from 'lib' + import { CustomEntityTypes } from 'lib/assets/custom-entity-types' import { Items } from 'lib/assets/custom-items' +import { ModalForm } from 'lib/form/modal' import { i18n } from 'lib/i18n/text' +import { is } from 'lib/roles' +import { isKeyof } from 'lib/util' +import { isLocationError, onLoad } from 'lib/utils/game' +import { Vec } from 'lib/vector' import { WeakPlayerMap } from 'lib/weak-player-storage' import { Cuboid } from '../../../lib/utils/cuboid' import { WE_CONFIG } from '../config' @@ -165,12 +170,14 @@ class BrushTool extends WorldEditToolBrush { ctx.player.success() }) - world.overworld - .getEntities({ - type: CustomEntityTypes.FloatingText, - name: WE_CONFIG.BRUSH_LOCATOR, - }) - .forEach(e => e.remove()) + onLoad(() => { + world.overworld + .getEntities({ + type: CustomEntityTypes.FloatingText, + name: WE_CONFIG.BRUSH_LOCATOR, + }) + .forEach(e => e.remove()) + }) this.onGlobalInterval('global', (player, _, slot) => { if (slot.typeId !== this.typeId && this.brushLocators.has(player.id)) { diff --git a/src/modules/world-edit/tools/create-region.ts b/src/modules/world-edit/tools/create-region.ts index 391536e8..34bb07a8 100644 --- a/src/modules/world-edit/tools/create-region.ts +++ b/src/modules/world-edit/tools/create-region.ts @@ -1,11 +1,15 @@ import { ContainerSlot, ItemStack, Player } from '@minecraft/server' -import { ModalForm, Region, regionTypes, Vec } from 'lib' + import { Items } from 'lib/assets/custom-items' import { ActionbarPriority } from 'lib/extensions/on-screen-display' import { noI18n } from 'lib/i18n/text' import { SphereArea } from 'lib/region/areas/sphere' import { WeBackup, WorldEdit } from '../lib/world-edit' import { WorldEditTool } from '../lib/world-edit-tool' +import { Vec } from 'lib/vector' +import { Region } from 'lib/region' +import { regionTypes } from 'lib/region' +import { ModalForm } from 'lib/form/modal' interface Storage { version: number diff --git a/src/modules/world-edit/tools/dash.ts b/src/modules/world-edit/tools/dash.ts index e0359056..59f9d599 100644 --- a/src/modules/world-edit/tools/dash.ts +++ b/src/modules/world-edit/tools/dash.ts @@ -1,5 +1,5 @@ import { world } from '@minecraft/server' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { Items } from 'lib/assets/custom-items' world.afterEvents.itemUse.subscribe(({ itemStack, source }) => { diff --git a/src/modules/world-edit/tools/debug-stick.ts b/src/modules/world-edit/tools/debug-stick.ts index 574381a2..64a534b9 100644 --- a/src/modules/world-edit/tools/debug-stick.ts +++ b/src/modules/world-edit/tools/debug-stick.ts @@ -1,9 +1,10 @@ import { Block, BlockStates, ContainerSlot, ItemStack, Player } from '@minecraft/server' import { BlockStateSuperset } from '@minecraft/vanilla-data' -import { ModalForm, Vec } from 'lib' import { Items } from 'lib/assets/custom-items' import { ActionbarPriority } from 'lib/extensions/on-screen-display' +import { ModalForm } from 'lib/form/modal' import { i18n, noI18n } from 'lib/i18n/text' +import { Vec } from 'lib/vector' import { WorldEditTool } from '../lib/world-edit-tool' import { WEeditBlockStatesMenu } from '../menu' diff --git a/src/modules/world-edit/tools/multi-brush.ts b/src/modules/world-edit/tools/multi-brush.ts index 0a82c15b..d547db9f 100644 --- a/src/modules/world-edit/tools/multi-brush.ts +++ b/src/modules/world-edit/tools/multi-brush.ts @@ -1,5 +1,5 @@ import { Direction, ItemStack, Player } from '@minecraft/server' -import { Vec } from 'lib' +import { Vec } from 'lib/vector' import { Items } from 'lib/assets/custom-items' import { ToolsDataStorage, WorldEditMultiTool } from '../lib/world-edit-multi-tool' import { WorldEditTool } from '../lib/world-edit-tool' diff --git a/src/modules/world-edit/tools/randomizer.ts b/src/modules/world-edit/tools/randomizer.ts index ba094e95..0bd59421 100644 --- a/src/modules/world-edit/tools/randomizer.ts +++ b/src/modules/world-edit/tools/randomizer.ts @@ -1,7 +1,7 @@ import { ContainerSlot, ItemStack, Player, world } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { ModalForm } from 'lib' +import { ModalForm } from 'lib/form/modal' import { i18n } from 'lib/i18n/text' import { isNotPlaying } from 'lib/utils/game' import { WorldEditTool } from '../lib/world-edit-tool' diff --git a/src/modules/world-edit/tools/shovel.ts b/src/modules/world-edit/tools/shovel.ts index 7a1ac7f2..83b25a98 100644 --- a/src/modules/world-edit/tools/shovel.ts +++ b/src/modules/world-edit/tools/shovel.ts @@ -1,8 +1,9 @@ import { ContainerSlot, ItemStack, Player, world } from '@minecraft/server' -import { ModalForm, Vec } from 'lib' import { Items } from 'lib/assets/custom-items' import { ActionbarPriority } from 'lib/extensions/on-screen-display' +import { ModalForm } from 'lib/form/modal' import { i18n } from 'lib/i18n/text' +import { Vec } from 'lib/vector' import { WorldEdit } from 'modules/world-edit/lib/world-edit' import { WorldEditTool } from '../lib/world-edit-tool' import { skipForBlending } from '../utils/blending' diff --git a/src/modules/world-edit/tools/smooth.ts b/src/modules/world-edit/tools/smooth.ts index 893390e5..3e3c674a 100644 --- a/src/modules/world-edit/tools/smooth.ts +++ b/src/modules/world-edit/tools/smooth.ts @@ -1,8 +1,11 @@ import { Block, BlockPermutation, ContainerSlot, Player, system, world } from '@minecraft/server' import { MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { is, ModalForm, util, Vec } from 'lib' import { Items } from 'lib/assets/custom-items' +import { ModalForm } from 'lib/form/modal' +import { is } from 'lib/roles' +import { util } from 'lib/util' +import { Vec } from 'lib/vector' import { WorldEdit } from 'modules/world-edit/lib/world-edit' import { BlocksSetRef, diff --git a/src/modules/world-edit/tools/tool.ts b/src/modules/world-edit/tools/tool.ts index 5fa63539..fd89fed9 100644 --- a/src/modules/world-edit/tools/tool.ts +++ b/src/modules/world-edit/tools/tool.ts @@ -1,8 +1,12 @@ import { ContainerSlot, MolangVariableMap, Player, system, world } from '@minecraft/server' -import { ActionForm, ModalForm, Vec, inspect } from 'lib' import { Items } from 'lib/assets/custom-items' import { ListParticles } from 'lib/assets/particles' import { ListSounds } from 'lib/assets/sounds' +import { ActionForm } from 'lib/form/action' +import { ModalForm } from 'lib/form/modal' +import { inspect } from 'lib/utils/inspect' +import { onLoad } from 'lib/utils/load-ref' +import { Vec } from 'lib/vector' import { WorldEditTool } from '../lib/world-edit-tool' const actions: Record = { @@ -110,7 +114,7 @@ class Tool extends WorldEditTool { constructor() { super() - const variables = new MolangVariableMap() + const variables = onLoad(() => new MolangVariableMap()) system.runInterval( () => { @@ -134,7 +138,7 @@ class Tool extends WorldEditTool { hit.block.dimension.spawnParticle( lore[1], Vec.add(hit.block.location, { x: 0.5, z: 0.5, y: 1.5 }), - variables, + variables.value, ) } diff --git a/src/modules/world-edit/utils/blocks-set.ts b/src/modules/world-edit/utils/blocks-set.ts index 7fe4f884..fce6d99f 100644 --- a/src/modules/world-edit/utils/blocks-set.ts +++ b/src/modules/world-edit/utils/blocks-set.ts @@ -1,10 +1,11 @@ import { Block, BlockPermutation, Player } from '@minecraft/server' import { BlockStateSuperset } from '@minecraft/vanilla-data' -import { noNullable, translateTypeId } from 'lib' import { table } from 'lib/database/abstract' import { DEFAULT_BLOCK_SETS, DEFAULT_REPLACE_TARGET_SETS, REPLACE_MODES } from './default-block-sets' import { Language } from 'lib/assets/lang' +import { noNullable } from 'lib/util' +import { translateTypeId } from 'lib/i18n/lang' export type BlockStateWeight = [...Parameters, number] @@ -92,7 +93,7 @@ export function getBlocksInSet([playerId, blocksSetName]: BlocksSetRef) { } export function getReplaceTargets(ref: BlocksSetRef): ReplaceTarget[] { - const defaultReplaceTarget = DEFAULT_REPLACE_TARGET_SETS[ref[1]] + const defaultReplaceTarget = DEFAULT_REPLACE_TARGET_SETS.value[ref[1]] if (defaultReplaceTarget) return defaultReplaceTarget return getActiveBlocksInSet(ref)?.map(fromBlockStateWeightToReplaceTarget) ?? [] diff --git a/src/modules/world-edit/utils/default-block-sets.ts b/src/modules/world-edit/utils/default-block-sets.ts index faa69353..dc7ae8b6 100644 --- a/src/modules/world-edit/utils/default-block-sets.ts +++ b/src/modules/world-edit/utils/default-block-sets.ts @@ -1,6 +1,7 @@ import { BlockPermutation, BlockTypes, LiquidType } from '@minecraft/server' import { BlockStateSuperset, MinecraftBlockTypes } from '@minecraft/vanilla-data' -import { noNullable } from 'lib' +import { noNullable } from 'lib/util' +import { onLoad } from 'lib/utils/load-ref' import { BlockStateWeight, BlocksSets, @@ -9,10 +10,15 @@ import { fromBlockStateWeightToReplaceTarget, } from './blocks-set' -const trees: BlockStateWeight[] = BlockTypes.getAll() - .filter(e => e.id.endsWith('_log') || e.id.includes('leaves')) - .map(e => [e.id, void 0, 1]) -trees.push([MinecraftBlockTypes.MangroveRoots, void 0, 1]) +const trees = onLoad(() => { + const trees: BlockStateWeight[] = BlockTypes.getAll() + .filter(e => e.id.endsWith('_log') || e.id.includes('leaves')) + .map(e => [e.id, void 0, 1]) + + trees.push([MinecraftBlockTypes.MangroveRoots, void 0, 1]) + + return trees +}) export const DEFAULT_BLOCK_SETS: BlocksSets = { Земля: [[MinecraftBlockTypes.GrassBlock, void 0, 1]], @@ -48,11 +54,14 @@ function isGlassPane(typeId: string) { } const allBlockTypes = [isSlab, isStairs, isWall, isTrapdoor, isGlass, isGlassPane] -const air = BlockPermutation.resolve(MinecraftBlockTypes.Air) +const air = onLoad(() => BlockPermutation.resolve(MinecraftBlockTypes.Air)) -export const DEFAULT_REPLACE_TARGET_SETS: Record = { - 'Любое дерево': trees.map(fromBlockStateWeightToReplaceTarget).filter(noNullable), -} +export const DEFAULT_REPLACE_TARGET_SETS = onLoad( + () => + ({ + 'Любое дерево': trees.value.map(fromBlockStateWeightToReplaceTarget).filter(noNullable), + }) as Record, +) export const REPLACE_MODES: Record = { 'Не воздух': { @@ -77,7 +86,7 @@ export const REPLACE_MODES: Record = { 'Замена соответств. блока': { matches: () => true, select(block, permutations) { - if (block.isAir) return air + if (block.isAir) return air.value let permutation: BlockPermutation | undefined const { typeId } = block @@ -125,7 +134,7 @@ export function shortenBlocksSetName(name: string | undefined | null) { } addPostfix(DEFAULT_BLOCK_SETS) -addPostfix(DEFAULT_REPLACE_TARGET_SETS) +DEFAULT_REPLACE_TARGET_SETS.onLoad(v => addPostfix(v)) function addPostfix(blocksSet: Record) { Object.keys(blocksSet).forEach(e => { diff --git a/src/modules/world-edit/utils/shapes.ts b/src/modules/world-edit/utils/shapes.ts index 21eff4f8..463376d5 100644 --- a/src/modules/world-edit/utils/shapes.ts +++ b/src/modules/world-edit/utils/shapes.ts @@ -22,7 +22,8 @@ export const SHAPES = { 'customMountain': ({ x, y, z }) => y <= 0.5 * Math.sin(x / 10) + 0.5 * Math.cos(z / 10), 'tetrahedron': ({ x, y, z, yMin, zMin }) => ( - Math.abs(-x) + Math.abs(x) + Math.abs(y) + Math.abs(z) - yMin, zMin === 0 + Math.abs(-x) + Math.abs(x) + Math.abs(y) + Math.abs(z) - yMin, + zMin === 0 ), 'triangle_prism': ({ x, y, z, yMin }) => diff --git a/src/test/__mocks__/minecraft_server.ts b/src/test/__mocks__/minecraft_server.ts index 88465075..781892e5 100644 --- a/src/test/__mocks__/minecraft_server.ts +++ b/src/test/__mocks__/minecraft_server.ts @@ -433,6 +433,65 @@ export enum EntityComponentTypes { WantsJockey = 'minecraft:wants_jockey', } +/** The types of paramaters accepted by a custom command. */ +export enum CustomCommandParamType { + /** + * @remarks + * Block type parameter provides a {@link BlockType}. + */ + BlockType = 'BlockType', + /** + * @remarks + * Boolean parameter. + */ + Boolean = 'Boolean', + /** + * @remarks + * Entity selector parameter provides an {@link Entity}. + */ + EntitySelector = 'EntitySelector', + /** + * @remarks + * Entity type parameter provides an {@link EntityType}. + */ + EntityType = 'EntityType', + /** + * @remarks + * Command enum parameter. + */ + Enum = 'Enum', + /** + * @remarks + * Float parameter. + */ + Float = 'Float', + /** + * @remarks + * Integer parameter. + */ + Integer = 'Integer', + /** + * @remarks + * Item type parameter provides an {@link ItemType}. + */ + ItemType = 'ItemType', + /** + * @remarks + * Location parameter provides a {@link @minecraft/server.Location}. + */ + Location = 'Location', + /** + * @remarks + * Player selector parameter provides a {@link Player}. + */ + PlayerSelector = 'PlayerSelector', + /** + * @remarks + * String parameter. + */ + String = 'String', +} + export class EntityEquippableComponent extends EntityComponent { static readonly componentId = 'minecraft:equippable' readonly typeId = 'minecraft:equippable' @@ -795,6 +854,8 @@ export class Dimension { max: 365, } + runCommand(cmd: string) {} + constructor(public id: MinecraftDimensionTypes) {} } diff --git a/src/test/framework.ts b/src/test/framework.ts deleted file mode 100644 index d335b033..00000000 --- a/src/test/framework.ts +++ /dev/null @@ -1,114 +0,0 @@ -/* eslint-disable */ - -import { RawMessage } from '@minecraft/server' -import * as GameTest from '@minecraft/server-gametest' -import { expand } from 'lib/extensions/extend' -import { stringifyError } from 'lib/util' -import { inspect, stringify } from 'lib/utils/inspect' -import { TestStructures } from 'test/constants' -import './framework' - -declare module '@minecraft/server-gametest' { - interface ExtendedTest extends Test { - /** Spawns player at the test relative 0 0 0. Alias to {@link GameTest.Test.spawnSimulatedPlayer} */ - player(): ExtendedSimulatedPlayer - } - - type ExtendedSimulatedPlayer = SimulatedPlayer -} - -function formatRawText(e: RawMessage | string) { - return typeof e === 'string' ? e : stringify(e) -} - -let classNameGlobal = '' - -export function gamesuite(className: string, callback: VoidFunction) { - classNameGlobal = className - callback() - classNameGlobal = '' -} - -export function gametest(should: string, testFunction: (test: GameTest.ExtendedTest) => Promise) { - if (!classNameGlobal) throw new Error('You can call it() only inside of the top-level describe() callback!') - - const className = classNameGlobal - const fullname = className + ':' + should - const filename = stringifyError.stack.get(1).split('\n')[0]?.trim() ?? 'unknown file' - return GameTest.registerAsync(className, should, async test => { - const history: string[] = [] - try { - const Etest = expandTest(test, history, fullname) - await testFunction(Etest) - console.log(`§f§l§G PASS §r ${filename} > §f${fullname}`) - try { - // Etest.succeed() - } catch {} - } catch (error: any) { - let info = `§f§l§R FAIL §r ${filename} > §f${fullname}\n` - - const stringHistory = history - .concat(stringifyError(error)) - .map(e => e.split('\n')) - .flat() - .map(line => '§r§f\n ' + line) - .join('') - info += `${stringHistory}\n ` // \n §r§l§Y OUTPUT §r - console.log(info) - test.print(`§c§lFAIL§r §f${fullname}\n` + stringHistory) - - test.fail(stringifyError(error).replaceAll('§f', '§7')) - } - }) - .structureName(TestStructures.empty) - .tag(GameTest.Tags.suiteDebug) -} - -function expandTest(test: GameTest.Test, history: string[], fullname: string) { - expand(test as GameTest.ExtendedTest, { - player() { - return this.spawnSimulatedPlayer({ x: 0, y: 0, z: 0 }) - }, - - spawnSimulatedPlayer(location, name, gameMode) { - const player = super.spawnSimulatedPlayer(location, name, gameMode) - expandPlayer(player, this) - - return player - }, - - print(text) { - history.push(text) - - // return super.print(`§ы§7§l${fullname ?? 'unknown test'}§8>§r §f${text}`) - }, - }) - - return test as GameTest.ExtendedTest -} - -function expandPlayer(player: GameTest.SimulatedPlayer, test: GameTest.ExtendedTest) { - expand(player, { - get name() { - return this.isValid ? super.name : 'Testing player' - }, - playSound(sound, options) { - test.print(`${this.name}: §9playSound§f(§2'${sound}'§f, ${inspect(options)}§f)`) - }, - - tell(message) { - this.sendMessage(message.to(this.lang)) - }, - - sendMessage(message) { - let string = '' - if (Array.isArray(message)) { - string = message.map(formatRawText).join('') - } else { - string = formatRawText(message) - } - - test.print(`${this.name}: ${string}`) - }, - }) -} diff --git a/src/test/loader.ts b/src/test/loader.ts deleted file mode 100644 index e32f72dc..00000000 --- a/src/test/loader.ts +++ /dev/null @@ -1,10 +0,0 @@ -import 'modules/loader' -import './framework' - -import 'lib/command/index.spec' -import 'lib/region/kinds/with-structure.spec' -import 'modules/places/base/base.spec' -import 'modules/places/mineshaft/mineshaft-region.spec' -import 'modules/survival/death-quest-and-gravestone.spec' - -import 'lib/load/message2' diff --git a/src/test/setup-early.ts b/src/test/setup-early.ts new file mode 100644 index 00000000..d8544c88 --- /dev/null +++ b/src/test/setup-early.ts @@ -0,0 +1,2 @@ +import { LoadRef } from 'lib/utils/load-ref' +LoadRef.loadStarted = true diff --git a/src/test/setup.ts b/src/test/setup.ts index 29bee59c..891271e4 100644 --- a/src/test/setup.ts +++ b/src/test/setup.ts @@ -1,3 +1,5 @@ +import './setup-early' + import 'lib/load/enviroment' import 'lib/database/player' diff --git a/src/test/utils.ts b/src/test/utils.ts index a8c15f11..ca9a52f4 100644 --- a/src/test/utils.ts +++ b/src/test/utils.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { Player, system } from '@minecraft/server' -import { EventSignal } from 'lib' +import { EventSignal } from 'lib/event-signal' import type { Table } from 'lib/database/abstract' import type { TestFormCallback, TFD } from 'test/__mocks__/minecraft_server-ui' diff --git a/src/test/vitest.d.ts b/src/test/vitest.d.ts index ed4d6a26..e50ef01a 100644 --- a/src/test/vitest.d.ts +++ b/src/test/vitest.d.ts @@ -6,7 +6,12 @@ declare global { const afterAll: (typeof import('@vitest/runner'))['afterAll'] const afterEach: (typeof import('@vitest/runner'))['afterEach'] - const expect: import('@vitest/expect').ExpectStatic + const expect: (( + actual: T, + message?: string, + ) => import('@vitest/expect').Assertion & { not: import('@vitest/expect').Assertion }) & + import('@vitest/expect').ExpectStatic + const expectTypeOf: typeof import('expect-type').expectTypeOf const vi: typeof import('@vitest/spy') & { diff --git a/tools/build.ts b/tools/build.ts deleted file mode 100644 index e5ca3420..00000000 --- a/tools/build.ts +++ /dev/null @@ -1,53 +0,0 @@ -import fs from 'fs/promises' -import { buildArgumentsWithDist, buildCommand } from './build/esbuild.ts' -import { injectAsset, injectEnum } from './build/inject.ts' -import { generateManifestJson } from './build/manifest.ts' - -await injectAsset( - 'player-json.ts', - 'tools/build.ts', - `export const playerJson = ${(await fs.readFile('entities/player.json')).toString().trimEnd()} as const - -export const PlayerProperties = Object.fromEntries( - Object.keys(playerJson['minecraft:entity'].description.properties).map(e => [e, e]), -) - -export const PlayerEvents = Object.fromEntries(Object.keys(playerJson['minecraft:entity'].events).map(e => [e, e])) -`, -) - -const entities: [string, string][] = ( - await Promise.all( - (await fs.readdir('entities')) - .filter( - e => !e.startsWith('boss.') && !['chicken', 'player', 'fireworks_rocket'].includes(e.replace('.json', '')), - ) - .map(e => fs.readFile(`entities/${e}`, 'utf-8')), - ) -) - // its json with comments so to not mess with libs we have to use regex - // its bad. sorry. - .map(e => e.match(/"identifier":\s*"([^\"]+)"/)?.[1] ?? '') - .filter(e => !e.startsWith('f:') && !e.startsWith('minecraft:')) - .map(e => [e.replace('lw:', '').replace('rubedo:', ''), e]) - -await injectAsset( - 'custom-entity-types.ts', - 'tools/build.ts', - injectEnum('CustomEntityTypes', [...entities, ['FloatingText', 'f:t'], ['FloatingTextNpc', 'f:t_npc']]), -) - -const args = buildArgumentsWithDist('scripts') -await generateManifestJson(args) -buildCommand(args, { - entryPoints: [!args.test ? 'src/index.ts' : 'src/test/loader.ts'], - target: 'es2020', - platform: 'neutral', - external: [ - '@minecraft/server', - '@minecraft/server-ui', - '@minecraft/server-net', - '@minecraft/server-admin', - '@minecraft/server-gametest', - ], -}) diff --git a/tools/build/api.ts b/tools/build/api.ts deleted file mode 100644 index 92fff5a2..00000000 --- a/tools/build/api.ts +++ /dev/null @@ -1,50 +0,0 @@ -import child_process from 'child_process' -import path from 'path' -import type {} from '../defines.js' - -export function build() { - return { - /** @param cwd - Working directory. Defaults to '.' */ - cwd: (cwd = '.', entry?: string) => ({ - /** @param outdir - Directory where build output (index.js, index.js.map) will be written to. Defaults to scripts */ - outdir: (outdir = build.outdir) => ({ - args: (args = build.args()) => ({ - /** - * Adds callback that will be called when initial build finishes - * - * @param onReady - */ - onReady: (onReady: (outfile: string) => void) => ({ - /** - * @param onReload - Will be called on reload in watch mode - * @returns - Resolves with build process - */ - onWatchModeUpdate: ( - onReload?: (this: void, changedFile: string) => void, - ): Promise => - new Promise((resolve, reject) => { - args = args.concat(`--outdir=${outdir}`, entry ? `--entry=${entry}` : '').filter(Boolean) - const p = child_process - .fork('tools/build.ts', args, { - cwd, - stdio: 'inherit', - execArgv: ['--no-warnings', '--experimental-strip-types', '--experimental-transform-types'], - }) - .on('message', message => { - if (message === 'ready') (onReady(build.outfile(outdir)), resolve(p)) - if (Array.isArray(message) && message[0] === 'reload' && typeof message[1] === 'string') - onReload?.(message[1]) - }) - .on('error', reject) - }), // onReload - }), // onReady - }), // args - }), // outdir - }), // cwd - } -} - -build.outdir = 'scripts' -build.outfile = (dir = build.outdir) => path.join(dir, 'index.js') -build.args = () => - [__DEV__ && '--dev', __TEST__ && '--test', `--port=${__SERVER_PORT__}`].filter(v => typeof v === 'string') diff --git a/tools/build/esbuild.ts b/tools/build/esbuild.ts deleted file mode 100644 index 55ca8aa4..00000000 --- a/tools/build/esbuild.ts +++ /dev/null @@ -1,135 +0,0 @@ -import * as esbuild from 'esbuild' -import fs from 'fs' -import path from 'path' -import util, { isDeepStrictEqual } from 'util' -import { generateDefine } from '../define.ts' -import { error } from '../error.ts' -import { build } from './api.ts' -import { logger } from './logger.ts' - -export type BuildArgs = ReturnType - -export function buildArgumentsWithDist(dir: string) { - try { - const { values } = util.parseArgs({ - args: process.argv.slice(2), - options: { - dev: { type: 'boolean', default: false }, - test: { type: 'boolean', default: false }, - vitest: { type: 'boolean', default: false }, - world: { type: 'boolean', default: false }, - port: { type: 'string', default: '19514' }, - help: { type: 'boolean', default: false, short: 'h' }, - outdir: { type: 'string', default: dir }, - entry: { type: 'string' }, - }, - allowPositionals: true, - }) - const { dev, test, world, port, vitest, outdir, entry } = values - - if (values.help) { - logger.info(`build [options] - - Options: - --dev: [bool=false] ${dev} - --test: [bool=false] ${test} - --vitest: [bool=false] ${vitest} - --world: [bool=false] ${world} - --port: [int=19514] ${port} - --outdir: [string='${dir}'] ${outdir} - --entry: [string] ${entry} - - --help: Shows this page -`) - process.exit(0) - } - - if (isNaN(parseInt(port ?? ''))) throw `Port must be a number, recieved '${port}'` - return { dev, test, world, port, vitest, entry, ...getOutPathsAndCleanDirectory(outdir ?? dir) } - } catch (e) { - logger.error(e instanceof Error ? e.message : e) - process.exit(1) - } -} - -function getOutPathsAndCleanDirectory(dir: string) { - try { - if (fs.existsSync(path.join(dir, '.git'))) { - logger.error('Unable to empty dir which contains .git folder:', path.join(process.cwd(), dir)) - process.exit(1) - } - fs.rmSync(dir, { force: true, recursive: true }) - fs.mkdirSync(dir) - } catch (e) { - if (!error(e).is('EACESS') && !error(e).is('ENOENT')) logger.warn('Failed to empty out dir', e) - } - - return { outdir: dir, outfile: build.outfile(dir) } -} - -export function buildCommand( - { test, dev, world, port, vitest, outfile, entry }: BuildArgs, - options: esbuild.BuildOptions, -) { - let start = Date.now() - let firstBuild = true - const at = process.cwd() - let oldmeta: import('esbuild').Metafile | undefined - - const config: esbuild.BuildOptions = { - outfile, - treeShaking: true, - bundle: true, - sourcemap: 'linked', - legalComments: 'none', - define: generateDefine({ dev, test, world, port, vitest }), - metafile: true, - ...options, - plugins: [ - ...(options.plugins ?? []), - { - name: 'start/stop', - setup(build) { - build.onStart(() => void (start = Date.now())) - build.onEnd(result => { - const mode = dev ? 'development' : test ? 'test' : 'production' - const time = `in ${Date.now() - start}ms` - - if (result.errors.length) return logger.error('Unable to build for', mode, time) - - let changed = '' - if (oldmeta) { - if (result.metafile) - for (const file in result.metafile.inputs) { - if (file in oldmeta.inputs) { - if (!isDeepStrictEqual(result.metafile.inputs[file], oldmeta.inputs[file])) changed = file - } else { - changed = file - break - } - } - oldmeta = result.metafile - } else oldmeta = result.metafile - - if (firstBuild) { - if (dev) logger.success(`Watching for changes at ${at}${test ? ' Test build is enabled.' : ''}`) - else logger.success(`Built for ${mode} at ${at} ${time}`) - process.send?.('ready') - } else if (dev) process.send?.(['reload', changed]) - - firstBuild = false - }) - }, - }, - ], - entryPoints: entry ? [entry] : options.entryPoints, - } - - if (dev) { - esbuild.context(config).then(ctx => ctx.watch()) - } else { - esbuild.build(config) - } -} - -export type VoidFunction = () => void diff --git a/tools/build/inject.ts b/tools/build/inject.ts deleted file mode 100644 index d5f3cd2c..00000000 --- a/tools/build/inject.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { writeFile } from 'fs/promises' -import path from 'path' - -function injectCode(modifier: string, code: string) { - return `// prettier-ignore -/* eslint-disable */ -// This file is autogenerated by ${modifier}. -// Do not modify manually. - -${code} -`.replace(/(?:\r)?\n/g, '\r\n') -} - -export async function injectAsset( - asset: string, - caller: string, - code: string | (() => Promise | string), - base = '.', - p = path.join(base, 'src', 'lib', 'assets', asset), -) { - try { - if (typeof code === 'function') code = await code() - - await writeFile(p, injectCode(caller, code)) - } catch (e) { - console.error(`Unable to write asset ${asset}:`, e) - } -} - -export function toUpper(k: string) { - const id = k.replace(/(?:\/|_)(.)?/g, (_, e) => e?.toUpperCase() ?? '') - return id[0].toUpperCase() + id.slice(1) -} - -export function injectEnum(name: string, entries: readonly (readonly [string, string])[], upperify = true) { - return `export enum ${name} { -${entries.map(([k, e]) => ` ${upperify ? toUpper(k) : k} = '${e}',`).join('\n')} -}` -} diff --git a/tools/build/logger.ts b/tools/build/logger.ts deleted file mode 100644 index 71f2faf9..00000000 --- a/tools/build/logger.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { LeafyLogger } from 'leafy-utils' - -export const logger = new LeafyLogger({ prefix: 'ESBuild' }) diff --git a/tools/build/manifest.ts b/tools/build/manifest.ts deleted file mode 100644 index b7bea07a..00000000 --- a/tools/build/manifest.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { PackageJSON, writeJSON } from 'leafy-utils' -import path from 'path' -import { logger } from './logger.ts' - -export async function generateManifestJson({ world, outfile, outdir }: import('./esbuild.ts').BuildArgs) { - const packagejson = new PackageJSON() - await packagejson.init() - const dependencies = Object.entries(packagejson.content.dependencies) - .map(([name, version]) => { - const match = (version as string).match(/\d+\.\d+\.\d+-(?:beta|stable)/) - - if (!match && name !== '@minecraft/vanilla-data' && name !== 'async-mutex' && !name.startsWith('@formatjs')) { - logger.warn( - "Version of the package '" + - name + - "' does not matches 0.0.0-(beta|stable) pattern, skipping insterting into manifest.json...", - ) - } - - return [name, match?.[0] ?? ''] - }) - .filter(e => !!e[1]) - - if (!Object.entries(packagejson.content.resolutions).every(([k, v]) => packagejson.content.dependencies[k] === v)) { - packagejson.content.resolutions = packagejson.content.dependencies - await packagejson.write() - } - - const base = { - format_version: 2, - header: { - name: 'LushWayScripts', - description: 'Server Plugin', - uuid: '8198b306-bfbb-48c9-874d-217cd4cef1ae', - version: [3, 0, 4], - min_engine_version: [1, 20, 50], - }, - modules: [ - { - description: 'Behavior Packs Module', - type: 'data', - uuid: '786cb1e6-e840-40d7-a986-9fb9e348634a', - version: [0, 0, 0], - }, - { - description: 'ScriptAPI Module', - language: 'javascript', - type: 'script', - uuid: '4f6a99e0-c4a2-4172-8818-c753d5cdab1f', - version: [0, 0, 0], - entry: path.join('scripts', outfile.replace(outdir, '')).replaceAll(path.sep, '/'), - }, - ], - dependencies: [ - { - module_name: 'name', - version: 'version', - }, - ], - capabilities: [], - } - - base.dependencies = dependencies - // server-net is not available on world - .filter(e => !(world && e[0] === '@minecraft/server-net')) - .map(e => ({ - module_name: e[0], - version: e[1], - })) - - await writeJSON(path.join(outdir, '../manifest.json'), base).catch(e => - logger.error('Failed writing manifest.json file:', e), - ) -} diff --git a/tools/define.ts b/tools/define.ts deleted file mode 100644 index c7ef00ca..00000000 --- a/tools/define.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ch from 'child_process' - -export function generateDefine({ - dev, - test, - world, - port, - vitest, -}: Omit) { - let git = '' - if (!dev && !vitest) - try { - git = 'Commit: ' + ch.execSync('git log --abbrev-commit --pretty=reference -n 1').toString().trim() - } catch {} - - return Object.fromEntries( - Object.entries({ - __DEV__: dev, - __PRODUCTION__: !dev, - __RELEASE__: false, - __TEST__: test, - __VITEST__: vitest, - __SERVER__: !world, - __SERVER_PORT__: port, - __GIT__: git, - }).map(([key, value]) => [key, JSON.stringify(value)]), - ) -} diff --git a/tools/defines.d.ts b/tools/defines.d.ts deleted file mode 100644 index f452f887..00000000 --- a/tools/defines.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare global { - // Global variables injected - const __DEV__: boolean - const __PRODUCTION__: boolean - const __SERVER__: boolean - const __TEST__: boolean - const __RELEASE__: boolean - const __SERVER_PORT__: string - const __VITEST__: boolean - const __GIT__: string -} - -export {} diff --git a/tools/error.ts b/tools/error.ts deleted file mode 100644 index 1ddd74db..00000000 --- a/tools/error.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** Gets common node error properties */ -export function error(e: unknown) { - const code = e && typeof e === 'object' && 'code' in e && typeof e.code === 'string' && e.code - - return { - cause() { - return e && e instanceof Error && e.cause ? error(e.cause) : error({}) - }, - is(type: 'EACESS' | 'ENOENT' | 'EEXIST' | 'ECONNREFUSED' | 'EADDRINUSE') { - return code === type - }, - } -} diff --git a/tools/patch-package.ts b/tools/patch-package.ts deleted file mode 100644 index 6231f175..00000000 --- a/tools/patch-package.ts +++ /dev/null @@ -1,140 +0,0 @@ -import fs from 'fs/promises' -import path from 'path' - -import { pathInfo } from 'leafy-utils' -import { createRequire } from 'module' - -const Notice = '* This file was automatically patched by' -export const notice = `/** -${Notice} -* tools/patch-package.ts -* -* New method assigments can be found in the -* src/lib/extensions/ -*/` - -export const { relative } = pathInfo(import.meta.url) -const require = createRequire(import.meta.url) -export const resolve = require.resolve - -/** - * Replaces and adds code to a package's TypeScript definition file. - * - * @param packageName - The name of the package to patch. - * @param options - The patching options. - * @param options.replaces - The replacements to make to the original code. Each object in the array should have a - * `find` and `replace` property. - * @param options.classes Pairs of class name and method to add. - * @param options.additions - * @param options.additions.beginning - The code to add to the beginning of the file. - * @param options.additions.afterImports - The code to add after any import statements. - * @param options.additions.ending - The code to add to the end of the file. - */ -export async function patchPackage( - packageName: string, - options: { - replaces: { find: RegExp | string; replace: string; all?: boolean; throwError?: boolean }[] - classes: Record | undefined - additions: { beginning: string; afterImports: string; ending: string } - }, -) { - const packageJsonPath = path.join(packageName, 'package.json') - let packagePath - try { - packagePath = resolve(packageJsonPath) - } catch { - console.log('Unable to resolve', packageJsonPath) - return - } - - // Get path to the package's TypeScript definition file - const indexDts = path.join(packagePath, '..', 'index.d.ts') - - let patchedCode = (await fs.readFile(indexDts, 'utf-8')).replaceAll('\r\n', '\n') - if (patchedCode.includes(Notice)) return console.log('\x1B[94m➤\x1B[39m \x1B[90mYN0000\x1B[39m: Already patched') - - // Apply the replacements - for (const { all, find, replace, throwError } of options.replaces) { - const newCode = patchedCode[all ? 'replaceAll' : 'replace'](find, replace) - - if (newCode !== patchedCode) { - patchedCode = newCode - } else { - if (throwError !== false) throw new Error(`Unable to find replace for ${find}`) - } - } - - options.additions.beginning ??= '' - options.additions.ending ??= '' - - let newCode = `${options.additions.beginning}\n${patchedCode}\n${options.additions.ending}` - - if (options.additions.afterImports) { - const lines = newCode.split(/\n/g) - const newLines: [number, string][] = [] - - let lastImport = 0 - for (const [i, rawLine] of lines.entries()) { - const line = rawLine.trimStart() - - if (line.startsWith('import ')) lastImport = i + 1 - - const match = line.match(/^(?:export )?class\s+(\w+)\s+/) - if (options.classes && match) { - if (match) { - const [, className] = match - - if (className in options.classes) { - const addition = options.classes[className] - - newLines.push([i + 1, addition]) - } - } - } - } - - newCode = addEls(lines, [[lastImport, options.additions.afterImports], ...newLines]).join('\n') - } - - // Write the patched code back to the file - await fs.writeFile(indexDts, newCode) -} - -function addEls(arr: T[], additions: [number, T][]) { - const result = [] - let currentAdditionIndex = 0 - for (let i = 0; i < arr.length; i++) { - if (currentAdditionIndex < additions.length && i === additions[currentAdditionIndex][0]) { - // If there's an addition for the current index, add it before the current element - result.push(additions[currentAdditionIndex][1]) - currentAdditionIndex++ - } - result.push(arr[i]) - } - // Add any remaining additions to the end of the array - while (currentAdditionIndex < additions.length) { - result.push(additions[currentAdditionIndex][1]) - currentAdditionIndex++ - } - return result -} - -/** Multi-line function */ -export function m(strings: TemplateStringsArray, ...values: any[]) { - // Combine the template strings and values into a single string - let newString = strings.reduce((result, string, i) => { - return result + values[i - 1] + string - }) - - // Remove the first newline character, if it exists - if (newString.charAt(0) === '\n') { - newString = newString.slice(1) - } - - // Remove the end newline character, if it exists - if (newString.endsWith('\n')) { - newString = newString.substring(0, newString.length - 1) - } - - return newString -} diff --git a/tools/patches.ts b/tools/patches.ts index 750f12fb..afdae737 100644 --- a/tools/patches.ts +++ b/tools/patches.ts @@ -1,9 +1,4 @@ -import { m, notice, patchPackage } from './patch-package.ts' - -export type ________ = typeof import('@minecraft/server') - patchPackage('@minecraft/server', { - classes: {}, replaces: [ { // use name from the function name instead, make eslint rule for it @@ -15,20 +10,73 @@ patchPackage('@minecraft/server', { replace: 'runTimeout(callback: () => void, name: string, tickDelay?: number): number;', }, { - find: m` * @throws + find: ` + * @throws * Throws if the slot's container is invalid. * * {@link InvalidContainerSlotError} */ - readonly typeId: string;`, + readonly typeId: string;`.trim(), replace: ` */ readonly typeId?: string;`, }, ], - additions: { - beginning: '', - afterImports: notice, - ending: notice, - }, }) + +import fs from 'fs/promises' +import path from 'path' + +import { pathInfo } from 'leafy-utils' +import { createRequire } from 'module' + +const noticeFirstLine = '* This file was automatically patched by' +export const notice = `/** +${noticeFirstLine} +* tools/patch-package.ts +* +* New method assigments can be found in the +* src/lib/extensions/ +*/` + +export const { relative } = pathInfo(import.meta.url) +const require = createRequire(import.meta.url) +export const resolve = require.resolve + +export async function patchPackage( + packageName: string, + options: { + replaces: { find: RegExp | string; replace: string; all?: boolean; throwError?: boolean }[] + }, +) { + const packageJsonPath = path.join(packageName, 'package.json') + let packagePath + try { + packagePath = resolve(packageJsonPath) + } catch { + console.log('Unable to resolve', packageJsonPath) + return + } + + // Get path to the package's TypeScript definition file + const indexDts = path.join(packagePath, '..', 'index.d.ts') + + let patchedCode = (await fs.readFile(indexDts, 'utf-8')).replaceAll('\r\n', '\n') + if (patchedCode.includes(noticeFirstLine)) return console.log('Already patched') + + // Apply the replacements + for (const { all, find, replace, throwError } of options.replaces) { + const newCode = patchedCode[all ? 'replaceAll' : 'replace'](find, replace) + + if (newCode !== patchedCode) { + patchedCode = newCode + } else { + if (throwError !== false) throw new Error(`Unable to find replace for ${find}`) + } + } + + let newCode = `${notice}\n${patchedCode}\n${notice}` + + // Write the patched code back to the file + await fs.writeFile(indexDts, newCode) +} diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 07a429b7..80413ad9 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -12,5 +12,5 @@ "module": "NodeNext", "allowImportingTsExtensions": true }, - "include": [".", "./defines.d.ts"] + "include": [".", "../../tools/defines.d.ts"] } diff --git a/tsconfig.json b/tsconfig.json index 0d5b90f3..89f38ce4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -47,6 +47,6 @@ "outDir": "scripts", "baseUrl": "src/" }, - "include": ["src", "tools/defines.d.ts"], + "include": ["src", "../tools/defines.d.ts"], "exclude": ["node_modules", "src/chestui", "vitest/dist/**", "scripts/**"] // "src/test/**", } diff --git a/vitest.config.ts b/vitest.config.ts index 71829b0b..49f77c82 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,9 +1,9 @@ import tsconfigPaths from 'vite-tsconfig-paths' import { defineConfig } from 'vitest/config' -import { generateDefine } from './tools/define' +import { generateDefine } from '../tools/define' export default defineConfig({ - define: generateDefine({ dev: true, test: true, world: false, port: '1000', vitest: true }), + define: generateDefine({ dev: true, test: true }), test: { globals: true, diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 63b0f361..00000000 --- a/yarn.lock +++ /dev/null @@ -1,4437 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@ampproject/remapping@npm:^2.2.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.2": - version: 7.24.2 - resolution: "@babel/code-frame@npm:7.24.2" - dependencies: - "@babel/highlight": "npm:^7.24.2" - picocolors: "npm:^1.0.0" - checksum: 10c0/d1d4cba89475ab6aab7a88242e1fd73b15ecb9f30c109b69752956434d10a26a52cbd37727c4eca104b6d45227bd1dfce39a6a6f4a14c9b2f07f871e968cf406 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.23.5": - version: 7.24.4 - resolution: "@babel/compat-data@npm:7.24.4" - checksum: 10c0/9cd8a9cd28a5ca6db5d0e27417d609f95a8762b655e8c9c97fd2de08997043ae99f0139007083c5e607601c6122e8432c85fe391731b19bf26ad458fa0c60dd3 - languageName: node - linkType: hard - -"@babel/core@npm:^7.23.9": - version: 7.24.5 - resolution: "@babel/core@npm:7.24.5" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.24.2" - "@babel/generator": "npm:^7.24.5" - "@babel/helper-compilation-targets": "npm:^7.23.6" - "@babel/helper-module-transforms": "npm:^7.24.5" - "@babel/helpers": "npm:^7.24.5" - "@babel/parser": "npm:^7.24.5" - "@babel/template": "npm:^7.24.0" - "@babel/traverse": "npm:^7.24.5" - "@babel/types": "npm:^7.24.5" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/e26ba810a77bc8e21579a12fc36c79a0a60554404dc9447f2d64eb1f26d181c48d3b97d39d9f158e9911ec7162a8280acfaf2b4b210e975f0dd4bd4dbb1ee159 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.24.5": - version: 7.24.5 - resolution: "@babel/generator@npm:7.24.5" - dependencies: - "@babel/types": "npm:^7.24.5" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^2.5.1" - checksum: 10c0/0d64f880150e7dfb92ceff2b4ac865f36aa1e295120920246492ffd0146562dabf79ba8699af1c8833f8a7954818d4d146b7b02f808df4d6024fb99f98b2f78d - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/helper-compilation-targets@npm:7.23.6" - dependencies: - "@babel/compat-data": "npm:^7.23.5" - "@babel/helper-validator-option": "npm:^7.23.5" - browserslist: "npm:^4.22.2" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/ba38506d11185f48b79abf439462ece271d3eead1673dd8814519c8c903c708523428806f05f2ec5efd0c56e4e278698fac967e5a4b5ee842c32415da54bc6fa - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-environment-visitor@npm:7.22.20" - checksum: 10c0/e762c2d8f5d423af89bd7ae9abe35bd4836d2eb401af868a63bbb63220c513c783e25ef001019418560b3fdc6d9a6fb67e6c0b650bcdeb3a2ac44b5c3d2bdd94 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-function-name@npm:7.23.0" - dependencies: - "@babel/template": "npm:^7.22.15" - "@babel/types": "npm:^7.23.0" - checksum: 10c0/d771dd1f3222b120518176733c52b7cadac1c256ff49b1889dbbe5e3fed81db855b8cc4e40d949c9d3eae0e795e8229c1c8c24c0e83f27cfa6ee3766696c6428 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-hoist-variables@npm:7.22.5" - dependencies: - "@babel/types": "npm:^7.22.5" - checksum: 10c0/60a3077f756a1cd9f14eb89f0037f487d81ede2b7cfe652ea6869cd4ec4c782b0fb1de01b8494b9a2d2050e3d154d7d5ad3be24806790acfb8cbe2073bf1e208 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.24.3": - version: 7.24.3 - resolution: "@babel/helper-module-imports@npm:7.24.3" - dependencies: - "@babel/types": "npm:^7.24.0" - checksum: 10c0/052c188adcd100f5e8b6ff0c9643ddaabc58b6700d3bbbc26804141ad68375a9f97d9d173658d373d31853019e65f62610239e3295cdd58e573bdcb2fded188d - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.24.5": - version: 7.24.5 - resolution: "@babel/helper-module-transforms@npm:7.24.5" - dependencies: - "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-module-imports": "npm:^7.24.3" - "@babel/helper-simple-access": "npm:^7.24.5" - "@babel/helper-split-export-declaration": "npm:^7.24.5" - "@babel/helper-validator-identifier": "npm:^7.24.5" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/6e77d72f62b7e87abaea800ea0bccd4d54cde26485750969f5f493c032eb63251eb50c3522cace557781565d51c1d0c4bcc866407d24becfb109c18fb92c978d - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.24.5": - version: 7.24.5 - resolution: "@babel/helper-simple-access@npm:7.24.5" - dependencies: - "@babel/types": "npm:^7.24.5" - checksum: 10c0/d96a0ab790a400f6c2dcbd9457b9ca74b9ba6d0f67ff9cd5bcc73792c8fbbd0847322a0dddbd8987dd98610ee1637c680938c7d83d3ffce7d06d7519d823d996 - languageName: node - linkType: hard - -"@babel/helper-split-export-declaration@npm:^7.24.5": - version: 7.24.5 - resolution: "@babel/helper-split-export-declaration@npm:7.24.5" - dependencies: - "@babel/types": "npm:^7.24.5" - checksum: 10c0/d7a812d67d031a348f3fb0e6263ce2dbe6038f81536ba7fb16db385383bcd6542b71833194303bf6d3d0e4f7b6b584c9c8fae8772122e2ce68fc9bdf07f4135d - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-string-parser@npm:7.25.9" - checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.24.5, @babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/helper-validator-option@npm:7.23.5" - checksum: 10c0/af45d5c0defb292ba6fd38979e8f13d7da63f9623d8ab9ededc394f67eb45857d2601278d151ae9affb6e03d5d608485806cd45af08b4468a0515cf506510e94 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.24.5": - version: 7.24.5 - resolution: "@babel/helpers@npm:7.24.5" - dependencies: - "@babel/template": "npm:^7.24.0" - "@babel/traverse": "npm:^7.24.5" - "@babel/types": "npm:^7.24.5" - checksum: 10c0/0630b0223c3a9a34027ddc05b3bac54d68d5957f84e92d2d4814b00448a76e12f9188f9c85cfce2011696d82a8ffcbd8189da097c0af0181d32eb27eca34185e - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.24.2": - version: 7.24.5 - resolution: "@babel/highlight@npm:7.24.5" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.5" - chalk: "npm:^2.4.2" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/e98047d3ad24608bfa596d000c861a2cc875af897427f2833b91a4e0d4cead07301a7ec15fa26093dcd61e036e2eed2db338ae54f93016fe0dc785fadc4159db - languageName: node - linkType: hard - -"@babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.5, @babel/parser@npm:^7.25.4": - version: 7.26.1 - resolution: "@babel/parser@npm:7.26.1" - dependencies: - "@babel/types": "npm:^7.26.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/dc7d4e6b7eb667fa0784e7e2c3f6f92ca12ad72242f6d4311995310dae55093f02acdb595b69b0dbbf04cb61ad87156ac03186ff32eacfa35149c655bc22c14b - languageName: node - linkType: hard - -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0": - version: 7.24.0 - resolution: "@babel/template@npm:7.24.0" - dependencies: - "@babel/code-frame": "npm:^7.23.5" - "@babel/parser": "npm:^7.24.0" - "@babel/types": "npm:^7.24.0" - checksum: 10c0/9d3dd8d22fe1c36bc3bdef6118af1f4b030aaf6d7d2619f5da203efa818a2185d717523486c111de8d99a8649ddf4bbf6b2a7a64962d8411cf6a8fa89f010e54 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.24.5": - version: 7.24.5 - resolution: "@babel/traverse@npm:7.24.5" - dependencies: - "@babel/code-frame": "npm:^7.24.2" - "@babel/generator": "npm:^7.24.5" - "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-hoist-variables": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.24.5" - "@babel/parser": "npm:^7.24.5" - "@babel/types": "npm:^7.24.5" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/3f22534bc2b2ed9208e55ef48af3b32939032b23cb9dc4037447cb108640df70bbb0b9fea86e9c58648949fdc2cb14e89aa79ffa3c62a5dd43459a52fe8c01d1 - languageName: node - linkType: hard - -"@babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.5, @babel/types@npm:^7.25.4, @babel/types@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/types@npm:7.26.0" - dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/b694f41ad1597127e16024d766c33a641508aad037abd08d0d1f73af753e1119fa03b4a107d04b5f92cc19c095a594660547ae9bead1db2299212d644b0a5cb8 - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.4.3": - version: 1.4.3 - resolution: "@emnapi/core@npm:1.4.3" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.2" - tslib: "npm:^2.4.0" - checksum: 10c0/e30101d16d37ef3283538a35cad60e22095aff2403fb9226a35330b932eb6740b81364d525537a94eb4fb51355e48ae9b10d779c0dd1cdcd55d71461fe4b45c7 - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.4.3": - version: 1.4.3 - resolution: "@emnapi/runtime@npm:1.4.3" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/3b7ab72d21cb4e034f07df80165265f85f445ef3f581d1bc87b67e5239428baa00200b68a7d5e37a0425c3a78320b541b07f76c5530f6f6f95336a6294ebf30b - languageName: node - linkType: hard - -"@emnapi/wasi-threads@npm:1.0.2": - version: 1.0.2 - resolution: "@emnapi/wasi-threads@npm:1.0.2" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/f0621b1fc715221bd2d8332c0ca922617bcd77cdb3050eae50a124eb8923c54fa425d23982dc8f29d505c8798a62d1049bace8b0686098ff9dd82270e06d772e - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/aix-ppc64@npm:0.25.5" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/android-arm64@npm:0.25.5" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/android-arm@npm:0.25.5" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/android-x64@npm:0.25.5" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/darwin-arm64@npm:0.25.5" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/darwin-x64@npm:0.25.5" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/freebsd-arm64@npm:0.25.5" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/freebsd-x64@npm:0.25.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-arm64@npm:0.25.5" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-arm@npm:0.25.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-ia32@npm:0.25.5" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-loong64@npm:0.25.5" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-mips64el@npm:0.25.5" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-ppc64@npm:0.25.5" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-riscv64@npm:0.25.5" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-s390x@npm:0.25.5" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/linux-x64@npm:0.25.5" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/netbsd-arm64@npm:0.25.5" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/netbsd-x64@npm:0.25.5" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/openbsd-arm64@npm:0.25.5" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/openbsd-x64@npm:0.25.5" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/sunos-x64@npm:0.25.5" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/win32-arm64@npm:0.25.5" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/win32-ia32@npm:0.25.5" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.5": - version: 0.25.5 - resolution: "@esbuild/win32-x64@npm:0.25.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.7.0": - version: 4.7.0 - resolution: "@eslint-community/eslint-utils@npm:4.7.0" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": - version: 4.12.1 - resolution: "@eslint-community/regexpp@npm:4.12.1" - checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 - languageName: node - linkType: hard - -"@eslint/config-array@npm:^0.20.1": - version: 0.20.1 - resolution: "@eslint/config-array@npm:0.20.1" - dependencies: - "@eslint/object-schema": "npm:^2.1.6" - debug: "npm:^4.3.1" - minimatch: "npm:^3.1.2" - checksum: 10c0/709108c3925d83c2166024646829ab61ba5fa85c6568daefd32508899f46ed8dc36d7153042df6dcc7e58ad543bc93298b646575daecb5eb4e39a43d838dab42 - languageName: node - linkType: hard - -"@eslint/config-helpers@npm:^0.2.1": - version: 0.2.2 - resolution: "@eslint/config-helpers@npm:0.2.2" - checksum: 10c0/98f7cefe484bb754674585d9e73cf1414a3ab4fd0783c385465288d13eb1a8d8e7d7b0611259fc52b76b396c11a13517be5036d1f48eeb877f6f0a6b9c4f03ad - languageName: node - linkType: hard - -"@eslint/core@npm:^0.14.0": - version: 0.14.0 - resolution: "@eslint/core@npm:0.14.0" - dependencies: - "@types/json-schema": "npm:^7.0.15" - checksum: 10c0/259f279445834ba2d2cbcc18e9d43202a4011fde22f29d5fb802181d66e0f6f0bd1f6b4b4b46663451f545d35134498231bd5e656e18d9034a457824b92b7741 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^3.3.1": - version: 3.3.1 - resolution: "@eslint/eslintrc@npm:3.3.1" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^10.0.1" - globals: "npm:^14.0.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/b0e63f3bc5cce4555f791a4e487bf999173fcf27c65e1ab6e7d63634d8a43b33c3693e79f192cbff486d7df1be8ebb2bd2edc6e70ddd486cbfa84a359a3e3b41 - languageName: node - linkType: hard - -"@eslint/js@npm:9.29.0, @eslint/js@npm:^9.29.0": - version: 9.29.0 - resolution: "@eslint/js@npm:9.29.0" - checksum: 10c0/d0ccf37063fa27a3fae9347cb044f84ca10b5a2fa19ffb2b3fedf3b96843ac1ff359ea9f0ab0e80f2f16fda4cb0dc61ea0fed0375090f050fe0a029e7d6de3a3 - languageName: node - linkType: hard - -"@eslint/object-schema@npm:^2.1.6": - version: 2.1.6 - resolution: "@eslint/object-schema@npm:2.1.6" - checksum: 10c0/b8cdb7edea5bc5f6a96173f8d768d3554a628327af536da2fc6967a93b040f2557114d98dbcdbf389d5a7b290985ad6a9ce5babc547f36fc1fde42e674d11a56 - languageName: node - linkType: hard - -"@eslint/plugin-kit@npm:^0.3.1": - version: 0.3.1 - resolution: "@eslint/plugin-kit@npm:0.3.1" - dependencies: - "@eslint/core": "npm:^0.14.0" - levn: "npm:^0.4.1" - checksum: 10c0/a75f0b5d38430318a551b83e27bee570747eb50beeb76b03f64b0e78c2c27ef3d284cfda3443134df028db3251719bc0850c105f778122f6ad762d5270ec8063 - languageName: node - linkType: hard - -"@formatjs/ecma402-abstract@npm:2.3.4": - version: 2.3.4 - resolution: "@formatjs/ecma402-abstract@npm:2.3.4" - dependencies: - "@formatjs/fast-memoize": "npm:2.2.7" - "@formatjs/intl-localematcher": "npm:0.6.1" - decimal.js: "npm:^10.4.3" - tslib: "npm:^2.8.0" - checksum: 10c0/2644bc618a34dc610ef9691281eeb45ae6175e6982cf19f1bd140672fc95c748747ce3c85b934649ea7e4a304f7ae0060625fd53d5df76f92ca3acf743e1eb0a - languageName: node - linkType: hard - -"@formatjs/fast-memoize@npm:2.2.7": - version: 2.2.7 - resolution: "@formatjs/fast-memoize@npm:2.2.7" - dependencies: - tslib: "npm:^2.8.0" - checksum: 10c0/f5eabb0e4ab7162297df8252b4cfde194b23248120d9df267592eae2be2d2f7c4f670b5a70523d91b4ecdc35d40e65823bb8eeba8dd79fbf8601a972bf3b8866 - languageName: node - linkType: hard - -"@formatjs/intl-durationformat@npm:^0.7.4": - version: 0.7.4 - resolution: "@formatjs/intl-durationformat@npm:0.7.4" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.4" - "@formatjs/intl-localematcher": "npm:0.6.1" - tslib: "npm:^2.8.0" - checksum: 10c0/e340cab41fcb52639c73f25a422a2cf252c0fb8d328b88bd72b8f995e2d7ffa5d6aa7bb4f4e11862d45bd7eef398d9c8a1cf9d400bcf89c42ff3c38e63196dbe - languageName: node - linkType: hard - -"@formatjs/intl-enumerator@npm:1.8.10": - version: 1.8.10 - resolution: "@formatjs/intl-enumerator@npm:1.8.10" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.4" - tslib: "npm:^2.8.0" - checksum: 10c0/6c801131669a0b0962a7f3e63a7722a3ebb52a7c6aedf725e8ab601a77616c4896a26b81852bfda89bd83eed298f6b85e701349f15b8b7e5fdd8c79eb2209d96 - languageName: node - linkType: hard - -"@formatjs/intl-getcanonicallocales@npm:2.5.5": - version: 2.5.5 - resolution: "@formatjs/intl-getcanonicallocales@npm:2.5.5" - dependencies: - tslib: "npm:^2.8.0" - checksum: 10c0/c7693c0823eeaf96bd1af32f84ec0c18db451862135205ccc671cf1e4250e162da31b57220d2bcc0754c55433a92e92e7b59ab42458fc0ff6a1d62312f8ddc54 - languageName: node - linkType: hard - -"@formatjs/intl-listformat@npm:^7.7.11": - version: 7.7.11 - resolution: "@formatjs/intl-listformat@npm:7.7.11" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.4" - "@formatjs/intl-localematcher": "npm:0.6.1" - tslib: "npm:^2.8.0" - checksum: 10c0/8110fdef9765f2647d8234a5dd39672dd14f25426040c8714c704058440f6f1ffbae641e6b4a0e22b01320041ac0b377bf14b48e87009ee571477f05a42c8aec - languageName: node - linkType: hard - -"@formatjs/intl-locale@npm:^4.2.11": - version: 4.2.11 - resolution: "@formatjs/intl-locale@npm:4.2.11" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.4" - "@formatjs/intl-enumerator": "npm:1.8.10" - "@formatjs/intl-getcanonicallocales": "npm:2.5.5" - tslib: "npm:^2.8.0" - checksum: 10c0/072aa50fcf8bc1baba1cf16f1bc80f46999d030ce12aef53f08cdb946177e75e59f7f329de7dfca8223c2bac80d3713ec8492e36c15d537ffad0e730e566dc3b - languageName: node - linkType: hard - -"@formatjs/intl-localematcher@npm:0.6.1": - version: 0.6.1 - resolution: "@formatjs/intl-localematcher@npm:0.6.1" - dependencies: - tslib: "npm:^2.8.0" - checksum: 10c0/bacbedd508519c1bb5ca2620e89dc38f12101be59439aa14aa472b222915b462cb7d679726640f6dcf52a05dd218b5aa27ccd60f2e5010bb96f1d4929848cde0 - languageName: node - linkType: hard - -"@formatjs/intl-numberformat@npm:^8.15.4": - version: 8.15.4 - resolution: "@formatjs/intl-numberformat@npm:8.15.4" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.4" - "@formatjs/intl-localematcher": "npm:0.6.1" - decimal.js: "npm:^10.4.3" - tslib: "npm:^2.8.0" - checksum: 10c0/11a628bc298e7bf5e46f2c33b04a3d62dd0726d076bfcda000b22095c5c464c1434ee1d0731048983f24d86aeac7d5c159254003a9f929cbdeb8ed4b7ecc381b - languageName: node - linkType: hard - -"@formatjs/intl-pluralrules@npm:^5.4.4": - version: 5.4.4 - resolution: "@formatjs/intl-pluralrules@npm:5.4.4" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.4" - "@formatjs/intl-localematcher": "npm:0.6.1" - decimal.js: "npm:^10.4.3" - tslib: "npm:^2.8.0" - checksum: 10c0/8a8ec9f2fad40d9fa654a68de06fb18aaa6f0eafa908f41397f057366740625c12da627c6de68e0396fcd67ceaaa2c5c20a4b102f71ac8694abd9e76cceca949 - languageName: node - linkType: hard - -"@humanfs/core@npm:^0.19.1": - version: 0.19.1 - resolution: "@humanfs/core@npm:0.19.1" - checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67 - languageName: node - linkType: hard - -"@humanfs/node@npm:^0.16.6": - version: 0.16.6 - resolution: "@humanfs/node@npm:0.16.6" - dependencies: - "@humanfs/core": "npm:^0.19.1" - "@humanwhocodes/retry": "npm:^0.3.0" - checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1 - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 - languageName: node - linkType: hard - -"@humanwhocodes/retry@npm:^0.3.0": - version: 0.3.1 - resolution: "@humanwhocodes/retry@npm:0.3.1" - checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b - languageName: node - linkType: hard - -"@humanwhocodes/retry@npm:^0.4.2": - version: 0.4.3 - resolution: "@humanwhocodes/retry@npm:0.4.3" - checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" - dependencies: - "@jridgewell/set-array": "npm:^1.2.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 - languageName: node - linkType: hard - -"@minecraft/common@npm:^1.0.0, @minecraft/common@npm:^1.1.0": - version: 1.2.0 - resolution: "@minecraft/common@npm:1.2.0" - checksum: 10c0/597c3ff8ab275ba5d5fb3037e68970e59ac96e8793b7738178c95b17d22a8f48a4412425314ed494f664466dd9a342e2a9eff52af544e57689f103c2ae965e10 - languageName: node - linkType: hard - -"@minecraft/server-admin@npm:^1.0.0-beta.1.21.90-stable": - version: 1.0.0-beta.release.1.19.50 - resolution: "@minecraft/server-admin@npm:1.0.0-beta.release.1.19.50" - checksum: 10c0/81e3b467411c086e21ed29bbc7b73c03db15dd7072aaa344fa4f936a6f1fc7cbce1dcadc68dea8df4e48028367f5d885b3d2ec3904ecab397be404c5ff9ecc51 - languageName: node - linkType: hard - -"@minecraft/server-gametest@npm:1.0.0-beta.1.21.90-stable": - version: 1.0.0-beta.1.21.90-stable - resolution: "@minecraft/server-gametest@npm:1.0.0-beta.1.21.90-stable" - dependencies: - "@minecraft/common": "npm:^1.0.0" - "@minecraft/server": "npm:^1.17.0 || ^2.0.0" - checksum: 10c0/bb72ae9c0f3a90758999c778e83b9fe8af3e87de9cf1a076e273baec11d378ec12672f276cc3b880364578ac344b925fc93fcbcfa361c508295a4a3162cc23dd - languageName: node - linkType: hard - -"@minecraft/server-net@npm:1.0.0-beta.1.21.90-stable": - version: 1.0.0-beta.1.21.90-stable - resolution: "@minecraft/server-net@npm:1.0.0-beta.1.21.90-stable" - dependencies: - "@minecraft/common": "npm:^1.0.0" - "@minecraft/server": "npm:^1.17.0 || ^2.0.0" - "@minecraft/server-admin": "npm:^1.0.0-beta.1.21.90-stable" - checksum: 10c0/9938b03b813623239742da6c6c1ea89590b59be438432692eb09168f4aa8a361b5939cf9ceb178eb76f70d39ca8ed495113ab42aed1797a348e3c3ffc3790e13 - languageName: node - linkType: hard - -"@minecraft/server-ui@npm:2.1.0-beta.1.21.90-stable": - version: 2.1.0-beta.1.21.90-stable - resolution: "@minecraft/server-ui@npm:2.1.0-beta.1.21.90-stable" - dependencies: - "@minecraft/common": "npm:^1.0.0" - "@minecraft/server": "npm:^2.0.0" - checksum: 10c0/2e0c761cc596c355757e65e763c89bb851abd6c60e29db688ae7d15cd7fea93af5c5938d1596d48371dcbd0c5391d53d4f2623e71722da13af370c865beb2d6e - languageName: node - linkType: hard - -"@minecraft/server@npm:2.1.0-beta.1.21.90-stable": - version: 2.1.0-beta.1.21.90-stable - resolution: "@minecraft/server@npm:2.1.0-beta.1.21.90-stable" - dependencies: - "@minecraft/common": "npm:^1.1.0" - peerDependencies: - "@minecraft/vanilla-data": ">=1.20.70" - checksum: 10c0/54cfa429982248721ef087d644264130a137a2233d76ec25796074a6890ea9e52c4e7d4f884425c6d6efb32dcdde03f223ccce16d73c2e0097003c10879e1c00 - languageName: node - linkType: hard - -"@minecraft/vanilla-data@npm:1.21.90": - version: 1.21.90 - resolution: "@minecraft/vanilla-data@npm:1.21.90" - checksum: 10c0/5f84fd20917c294c11d00a9de21ae740768ffb39c9dd9bb5e20378e7500760acc6ca896afc03176a1666a3a2d828a9344305e0b3482734d95b8671aaa01123e7 - languageName: node - linkType: hard - -"@napi-rs/wasm-runtime@npm:^0.2.10": - version: 0.2.10 - resolution: "@napi-rs/wasm-runtime@npm:0.2.10" - dependencies: - "@emnapi/core": "npm:^1.4.3" - "@emnapi/runtime": "npm:^1.4.3" - "@tybys/wasm-util": "npm:^0.9.0" - checksum: 10c0/4dce9bbb94a8969805574e1b55fdbeb7623348190265d77f6507ba32e535610deeb53a33ba0bb8b05a6520f379d418b92e8a01c5cd7b9486b136d2c0c26be0bd - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@polka/url@npm:^1.0.0-next.24": - version: 1.0.0-next.25 - resolution: "@polka/url@npm:1.0.0-next.25" - checksum: 10c0/ef61f0a0fe94bb6e1143fc5b9d5a12e6ca9dbd2c57843ebf81db432c21b9f1005c09e8a1ef8b6d5ddfa42146ca65b640feb2d353bd0d3546da46ba59e48a5349 - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.42.0" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-android-arm64@npm:4.42.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.42.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.42.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-arm64@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.42.0" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.42.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.42.0" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.42.0" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.42.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.42.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-loongarch64-gnu@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.42.0" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.42.0" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.42.0" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.42.0" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.42.0" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.42.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.42.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.42.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.42.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.42.0": - version: 4.42.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.42.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@tybys/wasm-util@npm:^0.9.0": - version: 0.9.0 - resolution: "@tybys/wasm-util@npm:0.9.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d - languageName: node - linkType: hard - -"@types/chai@npm:^5.2.2": - version: 5.2.2 - resolution: "@types/chai@npm:5.2.2" - dependencies: - "@types/deep-eql": "npm:*" - checksum: 10c0/49282bf0e8246800ebb36f17256f97bd3a8c4fb31f92ad3c0eaa7623518d7e87f1eaad4ad206960fcaf7175854bdff4cb167e4fe96811e0081b4ada83dd533ec - languageName: node - linkType: hard - -"@types/debug@npm:^4.0.0": - version: 4.1.12 - resolution: "@types/debug@npm:4.1.12" - dependencies: - "@types/ms": "npm:*" - checksum: 10c0/5dcd465edbb5a7f226e9a5efd1f399c6172407ef5840686b73e3608ce135eeca54ae8037dcd9f16bdb2768ac74925b820a8b9ecc588a58ca09eca6acabe33e2f - languageName: node - linkType: hard - -"@types/deep-eql@npm:*": - version: 4.0.2 - resolution: "@types/deep-eql@npm:4.0.2" - checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 - languageName: node - linkType: hard - -"@types/estree@npm:1.0.7, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": - version: 1.0.7 - resolution: "@types/estree@npm:1.0.7" - checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.15": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - -"@types/mdast@npm:^4.0.0": - version: 4.0.3 - resolution: "@types/mdast@npm:4.0.3" - dependencies: - "@types/unist": "npm:*" - checksum: 10c0/e6994404f5ce58073aa6c1a37ceac3060326470a464e2d751580a9f89e2dbca3a2a6222b849bdaaa5bffbe89033c50a886d17e49fca3b040a4ffcf970e387a0c - languageName: node - linkType: hard - -"@types/ms@npm:*": - version: 0.7.34 - resolution: "@types/ms@npm:0.7.34" - checksum: 10c0/ac80bd90012116ceb2d188fde62d96830ca847823e8ca71255616bc73991aa7d9f057b8bfab79e8ee44ffefb031ddd1bcce63ea82f9e66f7c31ec02d2d823ccc - languageName: node - linkType: hard - -"@types/unist@npm:*, @types/unist@npm:^3.0.0": - version: 3.0.2 - resolution: "@types/unist@npm:3.0.2" - checksum: 10c0/39f220ce184a773c55c18a127062bfc4d0d30c987250cd59bab544d97be6cfec93717a49ef96e81f024b575718f798d4d329eb81c452fc57d6d051af8b043ebf - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.35.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.35.0" - "@typescript-eslint/type-utils": "npm:8.35.0" - "@typescript-eslint/utils": "npm:8.35.0" - "@typescript-eslint/visitor-keys": "npm:8.35.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^7.0.0" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - "@typescript-eslint/parser": ^8.35.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/27391f1b168a175fdc62370e5afe51317d4433115abbbff8ee0aea8ecd7bf6dd541a76f8e0cc94119750ae3146863204862640acb45394f0b92809e88d39f881 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/parser@npm:8.35.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:8.35.0" - "@typescript-eslint/types": "npm:8.35.0" - "@typescript-eslint/typescript-estree": "npm:8.35.0" - "@typescript-eslint/visitor-keys": "npm:8.35.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/8f1cda98f8bee3d79266974e5e5c831a0ca473e928fb16f1dc1c85ee24f2cb9c0fcf3c1bcbbef9d6044cf063f6e59d3198b766a27000776830fe591043e11625 - languageName: node - linkType: hard - -"@typescript-eslint/project-service@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/project-service@npm:8.35.0" - dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.35.0" - "@typescript-eslint/types": "npm:^8.35.0" - debug: "npm:^4.3.4" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/c2d6d44b6b2ff3ecabec8ade824163196799060ac457661eb94049487d770ce68d128b33a2f24090adf1ebcb66ff6c9a05fc6659349b9a0784a5a080ecf8ff81 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/scope-manager@npm:8.35.0" - dependencies: - "@typescript-eslint/types": "npm:8.35.0" - "@typescript-eslint/visitor-keys": "npm:8.35.0" - checksum: 10c0/a27cf27a1852bb0d6ea08f475fcc79557f1977be96ef563d92127e8011e4065566441c32c40eb7a530111ffd3a8489919da7f8a2b7466a610cfc9c07670a9601 - languageName: node - linkType: hard - -"@typescript-eslint/tsconfig-utils@npm:8.35.0, @typescript-eslint/tsconfig-utils@npm:^8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.35.0" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/baa18e7137ba72f7d138f50d1168e8f334198a36499f954821e2369027e5b3d53ca93c354943e7782ba5caab604b050af10f353ccca34fbc0b23c48d6174832f - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/type-utils@npm:8.35.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:8.35.0" - "@typescript-eslint/utils": "npm:8.35.0" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/9e23a332484a055eb73ba8918f95a981e0cec8fa623ba9ee0b57328af052628d630a415e32e0dbe95318574e62d4066f8aecc994728b3cedd906f36c616ec362 - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:8.35.0, @typescript-eslint/types@npm:^8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/types@npm:8.35.0" - checksum: 10c0/a2711a932680805e83252b5d7c55ac30437bdc4d40c444606cf6ccb6ba23a682da015ec03c64635e77bf733f84d9bb76810bf4f7177fd3a660db8a2c8a05e845 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.35.0" - dependencies: - "@typescript-eslint/project-service": "npm:8.35.0" - "@typescript-eslint/tsconfig-utils": "npm:8.35.0" - "@typescript-eslint/types": "npm:8.35.0" - "@typescript-eslint/visitor-keys": "npm:8.35.0" - debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.2" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/7e94f6a92efc5832289e8bfd0b61209aa501224c935359253c29aeef8e0b981b370ee2a43e2909991c3c3cf709fcccb6380474e0e9a863e8f89e2fbd213aed59 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/utils@npm:8.35.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.35.0" - "@typescript-eslint/types": "npm:8.35.0" - "@typescript-eslint/typescript-estree": "npm:8.35.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/e3317df7875305bee16edd573e4bfdafc099f26f9c284d8adb351333683aacd5b668320870653dff7ec7e0da1982bbf89dc06197bc193a3be65362f21452dbea - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:8.35.0": - version: 8.35.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.35.0" - dependencies: - "@typescript-eslint/types": "npm:8.35.0" - eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/df18ca9b6931cb58f5dc404fcc94f9e0cc1c22f3053c7013ab588bb8ccccd3d58a70c577c01267845d57fa124a8cf8371260d284dad97505c56b2abcf70a3dce - languageName: node - linkType: hard - -"@unrs/resolver-binding-darwin-arm64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.7.11" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-darwin-x64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.7.11" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-freebsd-x64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.7.11" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.11" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.11" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.11" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-arm64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.7.11" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.11" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.11" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.11" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.11" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-x64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.7.11" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@unrs/resolver-binding-linux-x64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.7.11" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@unrs/resolver-binding-wasm32-wasi@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.7.11" - dependencies: - "@napi-rs/wasm-runtime": "npm:^0.2.10" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.11" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.11" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@unrs/resolver-binding-win32-x64-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.7.11" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@vitest/coverage-istanbul@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/coverage-istanbul@npm:3.2.4" - dependencies: - "@istanbuljs/schema": "npm:^0.1.3" - debug: "npm:^4.4.1" - istanbul-lib-coverage: "npm:^3.2.2" - istanbul-lib-instrument: "npm:^6.0.3" - istanbul-lib-report: "npm:^3.0.1" - istanbul-lib-source-maps: "npm:^5.0.6" - istanbul-reports: "npm:^3.1.7" - magicast: "npm:^0.3.5" - test-exclude: "npm:^7.0.1" - tinyrainbow: "npm:^2.0.0" - peerDependencies: - vitest: 3.2.4 - checksum: 10c0/3727a389143f03fa96815f40db25772de4b13abbeeb0cec737dbfe37b429253ab0cbe9f89d6430f86267fdc0c3c76e302c9dd094ed7ce9c91eac33de731cb198 - languageName: node - linkType: hard - -"@vitest/expect@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/expect@npm:3.2.4" - dependencies: - "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - chai: "npm:^5.2.0" - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/7586104e3fd31dbe1e6ecaafb9a70131e4197dce2940f727b6a84131eee3decac7b10f9c7c72fa5edbdb68b6f854353bd4c0fa84779e274207fb7379563b10db - languageName: node - linkType: hard - -"@vitest/mocker@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/mocker@npm:3.2.4" - dependencies: - "@vitest/spy": "npm:3.2.4" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.17" - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd - languageName: node - linkType: hard - -"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": - version: 3.2.4 - resolution: "@vitest/pretty-format@npm:3.2.4" - dependencies: - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/5ad7d4278e067390d7d633e307fee8103958806a419ca380aec0e33fae71b44a64415f7a9b4bc11635d3c13d4a9186111c581d3cef9c65cc317e68f077456887 - languageName: node - linkType: hard - -"@vitest/runner@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/runner@npm:3.2.4" - dependencies: - "@vitest/utils": "npm:3.2.4" - pathe: "npm:^2.0.3" - strip-literal: "npm:^3.0.0" - checksum: 10c0/e8be51666c72b3668ae3ea348b0196656a4a5adb836cb5e270720885d9517421815b0d6c98bfdf1795ed02b994b7bfb2b21566ee356a40021f5bf4f6ed4e418a - languageName: node - linkType: hard - -"@vitest/snapshot@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/snapshot@npm:3.2.4" - dependencies: - "@vitest/pretty-format": "npm:3.2.4" - magic-string: "npm:^0.30.17" - pathe: "npm:^2.0.3" - checksum: 10c0/f8301a3d7d1559fd3d59ed51176dd52e1ed5c2d23aa6d8d6aa18787ef46e295056bc726a021698d8454c16ed825ecba163362f42fa90258bb4a98cfd2c9424fc - languageName: node - linkType: hard - -"@vitest/spy@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/spy@npm:3.2.4" - dependencies: - tinyspy: "npm:^4.0.3" - checksum: 10c0/6ebf0b4697dc238476d6b6a60c76ba9eb1dd8167a307e30f08f64149612fd50227682b876420e4c2e09a76334e73f72e3ebf0e350714dc22474258292e202024 - languageName: node - linkType: hard - -"@vitest/ui@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/ui@npm:3.2.4" - dependencies: - "@vitest/utils": "npm:3.2.4" - fflate: "npm:^0.8.2" - flatted: "npm:^3.3.3" - pathe: "npm:^2.0.3" - sirv: "npm:^3.0.1" - tinyglobby: "npm:^0.2.14" - tinyrainbow: "npm:^2.0.0" - peerDependencies: - vitest: 3.2.4 - checksum: 10c0/c3de1b757905d050706c7ab0199185dd8c7e115f2f348b8d5a7468528c6bf90c2c46096e8901602349ac04f5ba83ac23cd98c38827b104d5151cf8ba21739a0c - languageName: node - linkType: hard - -"@vitest/utils@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/utils@npm:3.2.4" - dependencies: - "@vitest/pretty-format": "npm:3.2.4" - loupe: "npm:^3.1.4" - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/024a9b8c8bcc12cf40183c246c244b52ecff861c6deb3477cbf487ac8781ad44c68a9c5fd69f8c1361878e55b97c10d99d511f2597f1f7244b5e5101d028ba64 - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 - languageName: node - linkType: hard - -"acorn@npm:^8.15.0": - version: 8.15.0 - resolution: "acorn@npm:8.15.0" - bin: - acorn: bin/acorn - checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: "npm:^4.3.4" - checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 - languageName: node - linkType: hard - -"ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e - languageName: node - linkType: hard - -"assertion-error@npm:^2.0.1": - version: 2.0.1 - resolution: "assertion-error@npm:2.0.1" - checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 - languageName: node - linkType: hard - -"async-mutex@npm:^0.5.0": - version: 0.5.0 - resolution: "async-mutex@npm:0.5.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/9096e6ad6b674c894d8ddd5aa4c512b09bb05931b8746ebd634952b05685608b2b0820ed5c406e6569919ff5fe237ab3c491e6f2887d6da6b6ba906db3ee9c32 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"binary-searching@npm:^2.0.5": - version: 2.0.5 - resolution: "binary-searching@npm:2.0.5" - checksum: 10c0/914ccf15d4c989a8900e5617e2b6ec77a016f894b3833eaa5720a310214420dbd5d8eb577c158f99d25769968225c522cc37580c8d2ed46cc469f9d0365b7f15 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f - languageName: node - linkType: hard - -"braces@npm:^3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: "npm:^7.0.1" - checksum: 10c0/321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381 - languageName: node - linkType: hard - -"browserslist@npm:^4.22.2": - version: 4.23.0 - resolution: "browserslist@npm:4.23.0" - dependencies: - caniuse-lite: "npm:^1.0.30001587" - electron-to-chromium: "npm:^1.4.668" - node-releases: "npm:^2.0.14" - update-browserslist-db: "npm:^1.0.13" - bin: - browserslist: cli.js - checksum: 10c0/8e9cc154529062128d02a7af4d8adeead83ca1df8cd9ee65a88e2161039f3d68a4d40fea7353cab6bae4c16182dec2fdd9a1cf7dc2a2935498cee1af0e998943 - languageName: node - linkType: hard - -"cac@npm:^6.7.14": - version: 6.7.14 - resolution: "cac@npm:6.7.14" - checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 - languageName: node - linkType: hard - -"cacache@npm:^18.0.0": - version: 18.0.3 - resolution: "cacache@npm:18.0.3" - dependencies: - "@npmcli/fs": "npm:^3.1.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/dfda92840bb371fb66b88c087c61a74544363b37a265023223a99965b16a16bbb87661fe4948718d79df6e0cc04e85e62784fbcf1832b2a5e54ff4c46fbb45b7 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001617 - resolution: "caniuse-lite@npm:1.0.30001617" - checksum: 10c0/711702501063968b2807d1a8f40981e66f45eb8962968b4b84c70392dc804cee62845e8e391e9749f78ff41ca48be2a4a7a38620c44af526b5e03bc3c7a1bc0a - languageName: node - linkType: hard - -"chai@npm:^5.2.0": - version: 5.2.0 - resolution: "chai@npm:5.2.0" - dependencies: - assertion-error: "npm:^2.0.1" - check-error: "npm:^2.1.1" - deep-eql: "npm:^5.0.1" - loupe: "npm:^3.1.0" - pathval: "npm:^2.0.0" - checksum: 10c0/dfd1cb719c7cebb051b727672d382a35338af1470065cb12adb01f4ee451bbf528e0e0f9ab2016af5fc1eea4df6e7f4504dc8443f8f00bd8fb87ad32dc516f7d - languageName: node - linkType: hard - -"chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - -"character-entities@npm:^2.0.0": - version: 2.0.2 - resolution: "character-entities@npm:2.0.2" - checksum: 10c0/b0c645a45bcc90ff24f0e0140f4875a8436b8ef13b6bcd31ec02cfb2ca502b680362aa95386f7815bdc04b6464d48cf191210b3840d7c04241a149ede591a308 - languageName: node - linkType: hard - -"check-error@npm:^2.1.1": - version: 2.1.1 - resolution: "check-error@npm:2.1.1" - checksum: 10c0/979f13eccab306cf1785fa10941a590b4e7ea9916ea2a4f8c87f0316fc3eab07eabefb6e587424ef0f88cbcd3805791f172ea739863ca3d7ce2afc54641c7f0e - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"comment-parser@npm:^1.4.0": - version: 1.4.1 - resolution: "comment-parser@npm:1.4.1" - checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.6": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.1": - version: 4.4.1 - resolution: "debug@npm:4.4.1" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 - languageName: node - linkType: hard - -"decimal.js@npm:^10.4.3": - version: 10.5.0 - resolution: "decimal.js@npm:10.5.0" - checksum: 10c0/785c35279df32762143914668df35948920b6c1c259b933e0519a69b7003fc0a5ed2a766b1e1dda02574450c566b21738a45f15e274b47c2ac02072c0d1f3ac3 - languageName: node - linkType: hard - -"decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" - dependencies: - character-entities: "npm:^2.0.0" - checksum: 10c0/66a9fc5d9b5385a2b3675c69ba0d8e893393d64057f7dbbb585265bb4fc05ec513d76943b8e5aac7d8016d20eea4499322cbf4cd6d54b466976b78f3a7587a4c - languageName: node - linkType: hard - -"deep-eql@npm:^5.0.1": - version: 5.0.2 - resolution: "deep-eql@npm:5.0.2" - checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c - languageName: node - linkType: hard - -"dequal@npm:^2.0.0": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 - languageName: node - linkType: hard - -"devlop@npm:^1.0.0": - version: 1.1.0 - resolution: "devlop@npm:1.1.0" - dependencies: - dequal: "npm:^2.0.0" - checksum: 10c0/e0928ab8f94c59417a2b8389c45c55ce0a02d9ac7fd74ef62d01ba48060129e1d594501b77de01f3eeafc7cb00773819b0df74d96251cf20b31c5b3071f45c0e - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.668": - version: 1.4.762 - resolution: "electron-to-chromium@npm:1.4.762" - checksum: 10c0/b4f9e7472b0f25bac24454a6450c43257ef931a12f4f18d0f430997b383db228b73caf268010cec0441646d6842875503c25fca7125f0bf2805fb2ee8c2e2aea - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.7.0": - version: 1.7.0 - resolution: "es-module-lexer@npm:1.7.0" - checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b - languageName: node - linkType: hard - -"esbuild@npm:^0.25.0, esbuild@npm:^0.25.5": - version: 0.25.5 - resolution: "esbuild@npm:0.25.5" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.5" - "@esbuild/android-arm": "npm:0.25.5" - "@esbuild/android-arm64": "npm:0.25.5" - "@esbuild/android-x64": "npm:0.25.5" - "@esbuild/darwin-arm64": "npm:0.25.5" - "@esbuild/darwin-x64": "npm:0.25.5" - "@esbuild/freebsd-arm64": "npm:0.25.5" - "@esbuild/freebsd-x64": "npm:0.25.5" - "@esbuild/linux-arm": "npm:0.25.5" - "@esbuild/linux-arm64": "npm:0.25.5" - "@esbuild/linux-ia32": "npm:0.25.5" - "@esbuild/linux-loong64": "npm:0.25.5" - "@esbuild/linux-mips64el": "npm:0.25.5" - "@esbuild/linux-ppc64": "npm:0.25.5" - "@esbuild/linux-riscv64": "npm:0.25.5" - "@esbuild/linux-s390x": "npm:0.25.5" - "@esbuild/linux-x64": "npm:0.25.5" - "@esbuild/netbsd-arm64": "npm:0.25.5" - "@esbuild/netbsd-x64": "npm:0.25.5" - "@esbuild/openbsd-arm64": "npm:0.25.5" - "@esbuild/openbsd-x64": "npm:0.25.5" - "@esbuild/sunos-x64": "npm:0.25.5" - "@esbuild/win32-arm64": "npm:0.25.5" - "@esbuild/win32-ia32": "npm:0.25.5" - "@esbuild/win32-x64": "npm:0.25.5" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/aba8cbc11927fa77562722ed5e95541ce2853f67ad7bdc40382b558abc2e0ec57d92ffb820f082ba2047b4ef9f3bc3da068cdebe30dfd3850cfa3827a78d604e - languageName: node - linkType: hard - -"escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^10.1.5": - version: 10.1.5 - resolution: "eslint-config-prettier@npm:10.1.5" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 10c0/5486255428e4577e8064b40f27db299faf7312b8e43d7b4bc913a6426e6c0f5950cd519cad81ae24e9aecb4002c502bc665c02e3b52efde57af2debcf27dd6e0 - languageName: node - linkType: hard - -"eslint-import-context@npm:^0.1.8": - version: 0.1.8 - resolution: "eslint-import-context@npm:0.1.8" - dependencies: - get-tsconfig: "npm:^4.10.1" - stable-hash-x: "npm:^0.1.1" - peerDependencies: - unrs-resolver: ^1.0.0 - peerDependenciesMeta: - unrs-resolver: - optional: true - checksum: 10c0/61e7f63eadcf9345a905acd67f3742b855bc0638e2ed2a7072b184d183f35c69d547d5a6d2adc8535f589e9daaa293b5ce352dcb79f6188fbd125899c1e28e40 - languageName: node - linkType: hard - -"eslint-import-resolver-typescript@npm:^4.4.4": - version: 4.4.4 - resolution: "eslint-import-resolver-typescript@npm:4.4.4" - dependencies: - debug: "npm:^4.4.1" - eslint-import-context: "npm:^0.1.8" - get-tsconfig: "npm:^4.10.1" - is-bun-module: "npm:^2.0.0" - stable-hash-x: "npm:^0.2.0" - tinyglobby: "npm:^0.2.14" - unrs-resolver: "npm:^1.7.11" - peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - eslint-plugin-import-x: "*" - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - checksum: 10c0/3bf8ad77c21660f77a0e455555ab179420f68ae7a132906c85a217ccce51cb6680cf70027cab32a358d193e5b9e476f6ba2e595585242aa97d4f6435ca22104e - languageName: node - linkType: hard - -"eslint-plugin-file-progress@npm:^3.0.2": - version: 3.0.2 - resolution: "eslint-plugin-file-progress@npm:3.0.2" - dependencies: - nanospinner: "npm:^1.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - eslint: ^9.0.0 - checksum: 10c0/d384ce86688bb456dfe5bf75328325c3cb14e95d693b926802f0ef16e182c37c5a1db1c1c84081d3336dfbaf5007fbc849ebbdd0cc9c4c0daf1f42dd3469ec71 - languageName: node - linkType: hard - -"eslint-plugin-only-warn@npm:^1.1.0": - version: 1.1.0 - resolution: "eslint-plugin-only-warn@npm:1.1.0" - checksum: 10c0/72dfc947aa944321dfa63938f2e8bb91e7fda68f988837a8accf4551534ed04bf71957a46d00a4ddc43de5fe31055da12365b2c53c6ee6508f2ba203cd2cfa27 - languageName: node - linkType: hard - -"eslint-scope@npm:^8.4.0": - version: 8.4.0 - resolution: "eslint-scope@npm:8.4.0" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^4.2.1": - version: 4.2.1 - resolution: "eslint-visitor-keys@npm:4.2.1" - checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 - languageName: node - linkType: hard - -"eslint@npm:^9.29.0": - version: 9.29.0 - resolution: "eslint@npm:9.29.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.20.1" - "@eslint/config-helpers": "npm:^0.2.1" - "@eslint/core": "npm:^0.14.0" - "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.29.0" - "@eslint/plugin-kit": "npm:^0.3.1" - "@humanfs/node": "npm:^0.16.6" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@humanwhocodes/retry": "npm:^0.4.2" - "@types/estree": "npm:^1.0.6" - "@types/json-schema": "npm:^7.0.15" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.6" - debug: "npm:^4.3.2" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.4.0" - eslint-visitor-keys: "npm:^4.2.1" - espree: "npm:^10.4.0" - esquery: "npm:^1.5.0" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^8.0.0" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - peerDependencies: - jiti: "*" - peerDependenciesMeta: - jiti: - optional: true - bin: - eslint: bin/eslint.js - checksum: 10c0/75e3f841e0f8b0fa93dbb2ba6ae538bd8b611c3654117bc3dadf90bb009923dfd2c15ec2948dc6e6b8b571317cc125c5cceb9255da8cd644ee740020df645dd8 - languageName: node - linkType: hard - -"espree@npm:^10.0.1, espree@npm:^10.4.0": - version: 10.4.0 - resolution: "espree@npm:10.4.0" - dependencies: - acorn: "npm:^8.15.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b - languageName: node - linkType: hard - -"esquery@npm:^1.5.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: "npm:^5.1.0" - checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 - languageName: node - linkType: hard - -"estree-walker@npm:^3.0.3": - version: 3.0.3 - resolution: "estree-walker@npm:3.0.3" - dependencies: - "@types/estree": "npm:^1.0.0" - checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 - languageName: node - linkType: hard - -"expect-type@npm:^1.2.1": - version: 1.2.1 - resolution: "expect-type@npm:1.2.1" - checksum: 10c0/b775c9adab3c190dd0d398c722531726cdd6022849b4adba19dceab58dda7e000a7c6c872408cd73d665baa20d381eca36af4f7b393a4ba60dd10232d1fb8898 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 - languageName: node - linkType: hard - -"fast-glob@npm:^3.3.2": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 - languageName: node - linkType: hard - -"fdir@npm:^6.4.4": - version: 6.4.4 - resolution: "fdir@npm:6.4.4" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd - languageName: node - linkType: hard - -"fflate@npm:^0.8.2": - version: 0.8.2 - resolution: "fflate@npm:0.8.2" - checksum: 10c0/03448d630c0a583abea594835a9fdb2aaf7d67787055a761515bf4ed862913cfd693b4c4ffd5c3f3b355a70cf1e19033e9ae5aedcca103188aaff91b8bd6e293 - languageName: node - linkType: hard - -"file-entry-cache@npm:^8.0.0": - version: 8.0.0 - resolution: "file-entry-cache@npm:8.0.0" - dependencies: - flat-cache: "npm:^4.0.0" - checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a - languageName: node - linkType: hard - -"flat-cache@npm:^4.0.0": - version: 4.0.1 - resolution: "flat-cache@npm:4.0.1" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.4" - checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc - languageName: node - linkType: hard - -"flatted@npm:^3.2.9, flatted@npm:^3.3.3": - version: 3.3.3 - resolution: "flatted@npm:3.3.3" - checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 - languageName: node - linkType: hard - -"get-tsconfig@npm:^4.10.1": - version: 4.10.1 - resolution: "get-tsconfig@npm:4.10.1" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10c0/7f8e3dabc6a49b747920a800fb88e1952fef871cdf51b79e98db48275a5de6cdaf499c55ee67df5fa6fe7ce65f0063e26de0f2e53049b408c585aa74d39ffa21 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.1": - version: 10.4.5 - resolution: "glob@npm:10.4.5" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 - languageName: node - linkType: hard - -"globals@npm:^14.0.0": - version: 14.0.0 - resolution: "globals@npm:14.0.0" - checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d - languageName: node - linkType: hard - -"globrex@npm:^0.1.2": - version: 0.1.2 - resolution: "globrex@npm:0.1.2" - checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" - dependencies: - agent-base: "npm:^7.0.2" - debug: "npm:4" - checksum: 10c0/bc4f7c38da32a5fc622450b6cb49a24ff596f9bd48dcedb52d2da3fa1c1a80e100fb506bd59b326c012f21c863c69b275c23de1a01d0b84db396822fdf25e52b - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd - languageName: node - linkType: hard - -"ignore@npm:^7.0.0": - version: 7.0.4 - resolution: "ignore@npm:7.0.4" - checksum: 10c0/90e1f69ce352b9555caecd9cbfd07abe7626d312a6f90efbbb52c7edca6ea8df065d66303863b30154ab1502afb2da8bc59d5b04e1719a52ef75bbf675c488eb - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: "npm:1.1.0" - sprintf-js: "npm:^1.1.3" - checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc - languageName: node - linkType: hard - -"is-bun-module@npm:^2.0.0": - version: 2.0.0 - resolution: "is-bun-module@npm:2.0.0" - dependencies: - semver: "npm:^7.7.1" - checksum: 10c0/7d27a0679cfa5be1f5052650391f9b11040cd70c48d45112e312c56bc6b6ca9c9aea70dcce6cc40b1e8947bfff8567a5c5715d3b066fb478522dab46ea379240 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0, istanbul-lib-coverage@npm:^3.2.2": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.3": - version: 6.0.3 - resolution: "istanbul-lib-instrument@npm:6.0.3" - dependencies: - "@babel/core": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^7.5.4" - checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0, istanbul-lib-report@npm:^3.0.1": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: "npm:^3.0.0" - make-dir: "npm:^4.0.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^5.0.6": - version: 5.0.6 - resolution: "istanbul-lib-source-maps@npm:5.0.6" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.23" - debug: "npm:^4.1.1" - istanbul-lib-coverage: "npm:^3.0.0" - checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.7": - version: 3.1.7 - resolution: "istanbul-reports@npm:3.1.7" - dependencies: - html-escaper: "npm:^2.0.0" - istanbul-lib-report: "npm:^3.0.0" - checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"js-tokens@npm:^9.0.1": - version: 9.0.1 - resolution: "js-tokens@npm:9.0.1" - checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e - languageName: node - linkType: hard - -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f - languageName: node - linkType: hard - -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 - languageName: node - linkType: hard - -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 - languageName: node - linkType: hard - -"json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c - languageName: node - linkType: hard - -"keyv@npm:^4.5.4": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: "npm:3.0.1" - checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e - languageName: node - linkType: hard - -"leafy-utils@npm:^7.1.5": - version: 7.1.5 - resolution: "leafy-utils@npm:7.1.5" - bin: - commit: ./bin/commit.js - publish: ./bin/publish.js - checksum: 10c0/c6522a66173f2fdd66b7c3286ef37ebf147b7a5f40470d96ead668c9619e2ea0666d005f652256dd019767e20e652579f577e68c599a4c69341bfe0027052bfc - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: "npm:^1.2.1" - type-check: "npm:~0.4.0" - checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: "npm:^5.0.0" - checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 - languageName: node - linkType: hard - -"loupe@npm:^3.1.0, loupe@npm:^3.1.4": - version: 3.1.4 - resolution: "loupe@npm:3.1.4" - checksum: 10c0/5c2e6aefaad25f812d361c750b8cf4ff91d68de289f141d7c85c2ce9bb79eeefa06a93c85f7b87cba940531ed8f15e492f32681d47eed23842ad1963eb3a154d - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.2.2 - resolution: "lru-cache@npm:10.2.2" - checksum: 10c0/402d31094335851220d0b00985084288136136992979d0e015f0f1697e15d1c86052d7d53ae86b614e5b058425606efffc6969a31a091085d7a2b80a8a1e26d6 - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: "npm:^3.0.2" - checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 - languageName: node - linkType: hard - -"magic-string@npm:^0.30.17": - version: 0.30.17 - resolution: "magic-string@npm:0.30.17" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 - languageName: node - linkType: hard - -"magicast@npm:^0.3.5": - version: 0.3.5 - resolution: "magicast@npm:0.3.5" - dependencies: - "@babel/parser": "npm:^7.25.4" - "@babel/types": "npm:^7.25.4" - source-map-js: "npm:^1.2.0" - checksum: 10c0/a6cacc0a848af84f03e3f5bda7b0de75e4d0aa9ddce5517fd23ed0f31b5ddd51b2d0ff0b7e09b51f7de0f4053c7a1107117edda6b0732dca3e9e39e6c5a68c64 - languageName: node - linkType: hard - -"make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: "npm:^7.5.3" - checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^13.0.0": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" - dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" - http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e - languageName: node - linkType: hard - -"mdast-util-from-markdown@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-from-markdown@npm:2.0.0" - dependencies: - "@types/mdast": "npm:^4.0.0" - "@types/unist": "npm:^3.0.0" - decode-named-character-reference: "npm:^1.0.0" - devlop: "npm:^1.0.0" - mdast-util-to-string: "npm:^4.0.0" - micromark: "npm:^4.0.0" - micromark-util-decode-numeric-character-reference: "npm:^2.0.0" - micromark-util-decode-string: "npm:^2.0.0" - micromark-util-normalize-identifier: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - unist-util-stringify-position: "npm:^4.0.0" - checksum: 10c0/fb66e917f66e33fc60d6964264c4abd519fd8829a4a58ff9c61b2ba5c337554fb954b9ec31ca1c34e83c1163a73f310c39072d656f9a2d3184fe39c87cbba65a - languageName: node - linkType: hard - -"mdast-util-to-string@npm:^4.0.0": - version: 4.0.0 - resolution: "mdast-util-to-string@npm:4.0.0" - dependencies: - "@types/mdast": "npm:^4.0.0" - checksum: 10c0/2d3c1af29bf3fe9c20f552ee9685af308002488f3b04b12fa66652c9718f66f41a32f8362aa2d770c3ff464c034860b41715902ada2306bb0a055146cef064d7 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"micromark-core-commonmark@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-core-commonmark@npm:2.0.1" - dependencies: - decode-named-character-reference: "npm:^1.0.0" - devlop: "npm:^1.0.0" - micromark-factory-destination: "npm:^2.0.0" - micromark-factory-label: "npm:^2.0.0" - micromark-factory-space: "npm:^2.0.0" - micromark-factory-title: "npm:^2.0.0" - micromark-factory-whitespace: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-chunked: "npm:^2.0.0" - micromark-util-classify-character: "npm:^2.0.0" - micromark-util-html-tag-name: "npm:^2.0.0" - micromark-util-normalize-identifier: "npm:^2.0.0" - micromark-util-resolve-all: "npm:^2.0.0" - micromark-util-subtokenize: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/a0b280b1b6132f600518e72cb29a4dd1b2175b85f5ed5b25d2c5695e42b876b045971370daacbcfc6b4ce8cf7acbf78dd3a0284528fb422b450144f4b3bebe19 - languageName: node - linkType: hard - -"micromark-factory-destination@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-destination@npm:2.0.0" - dependencies: - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/b73492f687d41a6a379159c2f3acbf813042346bcea523d9041d0cc6124e6715f0779dbb2a0b3422719e9764c3b09f9707880aa159557e3cb4aeb03b9d274915 - languageName: node - linkType: hard - -"micromark-factory-label@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-label@npm:2.0.0" - dependencies: - devlop: "npm:^1.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/8ffad00487a7891941b1d1f51d53a33c7a659dcf48617edb7a4008dad7aff67ec316baa16d55ca98ae3d75ce1d81628dbf72fedc7c6f108f740dec0d5d21c8ee - languageName: node - linkType: hard - -"micromark-factory-space@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-space@npm:2.0.0" - dependencies: - micromark-util-character: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/103ca954dade963d4ff1d2f27d397833fe855ddc72590205022832ef68b775acdea67949000cee221708e376530b1de78c745267b0bf8366740840783eb37122 - languageName: node - linkType: hard - -"micromark-factory-title@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-title@npm:2.0.0" - dependencies: - micromark-factory-space: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/2b2188e7a011b1b001faf8c860286d246d5c3485ef8819270c60a5808f4c7613e49d4e481dbdff62600ef7acdba0f5100be2d125cbd2a15e236c26b3668a8ebd - languageName: node - linkType: hard - -"micromark-factory-whitespace@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-whitespace@npm:2.0.0" - dependencies: - micromark-factory-space: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/4e91baab0cc71873095134bd0e225d01d9786cde352701402d71b72d317973954754e8f9f1849901f165530e6421202209f4d97c460a27bb0808ec5a3fc3148c - languageName: node - linkType: hard - -"micromark-util-character@npm:^2.0.0": - version: 2.1.0 - resolution: "micromark-util-character@npm:2.1.0" - dependencies: - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/fc37a76aaa5a5138191ba2bef1ac50c36b3bcb476522e98b1a42304ab4ec76f5b036a746ddf795d3de3e7004b2c09f21dd1bad42d161f39b8cfc0acd067e6373 - languageName: node - linkType: hard - -"micromark-util-chunked@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-chunked@npm:2.0.0" - dependencies: - micromark-util-symbol: "npm:^2.0.0" - checksum: 10c0/043b5f2abc8c13a1e2e4c378ead191d1a47ed9e0cd6d0fa5a0a430b2df9e17ada9d5de5a20688a000bbc5932507e746144acec60a9589d9a79fa60918e029203 - languageName: node - linkType: hard - -"micromark-util-classify-character@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-classify-character@npm:2.0.0" - dependencies: - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/2bf5fa5050faa9b69f6c7e51dbaaf02329ab70fabad8229984381b356afbbf69db90f4617bec36d814a7d285fb7cad8e3c4e38d1daf4387dc9e240aa7f9a292a - languageName: node - linkType: hard - -"micromark-util-combine-extensions@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-combine-extensions@npm:2.0.0" - dependencies: - micromark-util-chunked: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/cd4c8d1a85255527facb419ff3b3cc3d7b7f27005c5ef5fa7ef2c4d0e57a9129534fc292a188ec2d467c2c458642d369c5f894bc8a9e142aed6696cc7989d3ea - languageName: node - linkType: hard - -"micromark-util-decode-numeric-character-reference@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.1" - dependencies: - micromark-util-symbol: "npm:^2.0.0" - checksum: 10c0/3f6d684ee8f317c67806e19b3e761956256cb936a2e0533aad6d49ac5604c6536b2041769c6febdd387ab7175b7b7e551851bf2c1f78da943e7a3671ca7635ac - languageName: node - linkType: hard - -"micromark-util-decode-string@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-decode-string@npm:2.0.0" - dependencies: - decode-named-character-reference: "npm:^1.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-decode-numeric-character-reference: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - checksum: 10c0/f5413bebb21bdb686cfa1bcfa7e9c93093a523d1b42443ead303b062d2d680a94e5e8424549f57b8ba9d786a758e5a26a97f56068991bbdbca5d1885b3aa7227 - languageName: node - linkType: hard - -"micromark-util-encode@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-encode@npm:2.0.0" - checksum: 10c0/ebdaafff23100bbf4c74e63b4b1612a9ddf94cd7211d6a076bc6fb0bc32c1b48d6fb615aa0953e607c62c97d849f97f1042260d3eb135259d63d372f401bbbb2 - languageName: node - linkType: hard - -"micromark-util-html-tag-name@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-html-tag-name@npm:2.0.0" - checksum: 10c0/988aa26367449bd345b627ae32cf605076daabe2dc1db71b578a8a511a47123e14af466bcd6dcbdacec60142f07bc2723ec5f7a0eed0f5319ce83b5e04825429 - languageName: node - linkType: hard - -"micromark-util-normalize-identifier@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-normalize-identifier@npm:2.0.0" - dependencies: - micromark-util-symbol: "npm:^2.0.0" - checksum: 10c0/93bf8789b8449538f22cf82ac9b196363a5f3b2f26efd98aef87c4c1b1f8c05be3ef6391ff38316ff9b03c1a6fd077342567598019ddd12b9bd923dacc556333 - languageName: node - linkType: hard - -"micromark-util-resolve-all@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-resolve-all@npm:2.0.0" - dependencies: - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/3b912e88453dcefe728a9080c8934a75ac4732056d6576ceecbcaf97f42c5d6fa2df66db8abdc8427eb167c5ffddefe26713728cfe500bc0e314ed260d6e2746 - languageName: node - linkType: hard - -"micromark-util-sanitize-uri@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-sanitize-uri@npm:2.0.0" - dependencies: - micromark-util-character: "npm:^2.0.0" - micromark-util-encode: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - checksum: 10c0/74763ca1c927dd520d3ab8fd9856a19740acf76fc091f0a1f5d4e99c8cd5f1b81c5a0be3efb564941a071fb6d85fd951103f2760eb6cff77b5ab3abe08341309 - languageName: node - linkType: hard - -"micromark-util-subtokenize@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-subtokenize@npm:2.0.1" - dependencies: - devlop: "npm:^1.0.0" - micromark-util-chunked: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/000cefde827db129f4ed92b8fbdeb4866c5f9c93068c0115485564b0426abcb9058080aa257df9035e12ca7fa92259d66623ea750b9eb3bcdd8325d3fb6fc237 - languageName: node - linkType: hard - -"micromark-util-symbol@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-symbol@npm:2.0.0" - checksum: 10c0/4e76186c185ce4cefb9cea8584213d9ffacd77099d1da30c0beb09fa21f46f66f6de4c84c781d7e34ff763fe3a06b530e132fa9004882afab9e825238d0aa8b3 - languageName: node - linkType: hard - -"micromark-util-types@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-types@npm:2.0.0" - checksum: 10c0/d74e913b9b61268e0d6939f4209e3abe9dada640d1ee782419b04fd153711112cfaaa3c4d5f37225c9aee1e23c3bb91a1f5223e1e33ba92d33e83956a53e61de - languageName: node - linkType: hard - -"micromark@npm:^4.0.0": - version: 4.0.0 - resolution: "micromark@npm:4.0.0" - dependencies: - "@types/debug": "npm:^4.0.0" - debug: "npm:^4.0.0" - decode-named-character-reference: "npm:^1.0.0" - devlop: "npm:^1.0.0" - micromark-core-commonmark: "npm:^2.0.0" - micromark-factory-space: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-chunked: "npm:^2.0.0" - micromark-util-combine-extensions: "npm:^2.0.0" - micromark-util-decode-numeric-character-reference: "npm:^2.0.0" - micromark-util-encode: "npm:^2.0.0" - micromark-util-normalize-identifier: "npm:^2.0.0" - micromark-util-resolve-all: "npm:^2.0.0" - micromark-util-sanitize-uri: "npm:^2.0.0" - micromark-util-subtokenize: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/7e91c8d19ff27bc52964100853f1b3b32bb5b2ece57470a34ba1b2f09f4e2a183d90106c4ae585c9f2046969ee088576fed79b2f7061cba60d16652ccc2c64fd - languageName: node - linkType: hard - -"micromatch@npm:^4.0.4": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: "npm:^3.0.2" - picomatch: "npm:^2.3.1" - checksum: 10c0/3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff - languageName: node - linkType: hard - -"minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.4": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414 - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf - languageName: node - linkType: hard - -"mrmime@npm:^2.0.0": - version: 2.0.0 - resolution: "mrmime@npm:2.0.0" - checksum: 10c0/312b35ed288986aec90955410b21ed7427fd1e4ee318cb5fc18765c8d029eeded9444faa46589e5b1ed6b35fb2054a802ac8dcb917ddf6b3e189cb3bf11a965c - languageName: node - linkType: hard - -"ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.8": - version: 3.3.11 - resolution: "nanoid@npm:3.3.11" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b - languageName: node - linkType: hard - -"nanospinner@npm:^1.2.0": - version: 1.2.2 - resolution: "nanospinner@npm:1.2.2" - dependencies: - picocolors: "npm:^1.1.1" - checksum: 10c0/07264f63816a8ec24d84ffe216a605cf11dffd8b098d4c5e6790437304b47e10ce4fc341de8dbcfc1b59aa42107f9949c89bcc201239eb61a80e14b6b1a20c90 - languageName: node - linkType: hard - -"napi-postinstall@npm:^0.2.2": - version: 0.2.4 - resolution: "napi-postinstall@npm:0.2.4" - bin: - napi-postinstall: lib/cli.js - checksum: 10c0/e8c357d7e27848c4af7becf2796afff245a2fc8ba176e1b133410bb1c9934a66d4bc542d0c9f04c73b0ba34ee0486b30b6cd1c62ed3aa36797d394200c9a2a8b - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 - languageName: node - linkType: hard - -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^3.0.0" - semver: "npm:^7.3.5" - tar: "npm:^6.1.2" - which: "npm:^4.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/9cc821111ca244a01fb7f054db7523ab0a0cd837f665267eb962eb87695d71fb1e681f9e21464cc2fd7c05530dc4c81b810bca1a88f7d7186909b74477491a3c - languageName: node - linkType: hard - -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 10c0/199fc93773ae70ec9969bc6d5ac5b2bbd6eb986ed1907d751f411fef3ede0e4bfdb45ceb43711f8078bea237b6036db8b1bf208f6ff2b70c7d615afd157f3ab9 - languageName: node - linkType: hard - -"nopt@npm:^7.0.0": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" - dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" - dependencies: - deep-is: "npm:^0.1.3" - fast-levenshtein: "npm:^2.0.6" - levn: "npm:^0.4.1" - prelude-ls: "npm:^1.2.1" - type-check: "npm:^0.4.0" - word-wrap: "npm:^1.2.5" - checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: "npm:^3.0.2" - checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.0 - resolution: "package-json-from-dist@npm:1.0.0" - checksum: 10c0/e3ffaf6ac1040ab6082a658230c041ad14e72fabe99076a2081bb1d5d41210f11872403fc09082daf4387fc0baa6577f96c9c0e94c90c394fd57794b66aa4033 - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"pathe@npm:^2.0.3": - version: 2.0.3 - resolution: "pathe@npm:2.0.3" - checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 - languageName: node - linkType: hard - -"pathval@npm:^2.0.0": - version: 2.0.0 - resolution: "pathval@npm:2.0.0" - checksum: 10c0/602e4ee347fba8a599115af2ccd8179836a63c925c23e04bd056d0674a64b39e3a081b643cc7bc0b84390517df2d800a46fcc5598d42c155fe4977095c2f77c5 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - -"picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"picomatch@npm:^4.0.2": - version: 4.0.2 - resolution: "picomatch@npm:4.0.2" - checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc - languageName: node - linkType: hard - -"postcss@npm:^8.5.3": - version: 8.5.3 - resolution: "postcss@npm:8.5.3" - dependencies: - nanoid: "npm:^3.3.8" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3 - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd - languageName: node - linkType: hard - -"prettier-plugin-jsdoc@npm:^1.3.3": - version: 1.3.3 - resolution: "prettier-plugin-jsdoc@npm:1.3.3" - dependencies: - binary-searching: "npm:^2.0.5" - comment-parser: "npm:^1.4.0" - mdast-util-from-markdown: "npm:^2.0.0" - peerDependencies: - prettier: ^3.0.0 - checksum: 10c0/2b230f4ff5045f999581831151bc22da7a691c7acda0f28988301f49379a4099c07c0bf0eecf9341bd9c4b066464d73fafed1e9bac5ce349d7f8a1d232493a38 - languageName: node - linkType: hard - -"prettier@npm:^3.6.2": - version: 3.6.2 - resolution: "prettier@npm:3.6.2" - bin: - prettier: bin/prettier.cjs - checksum: 10c0/488cb2f2b99ec13da1e50074912870217c11edaddedeadc649b1244c749d15ba94e846423d062e2c4c9ae683e2d65f754de28889ba06e697ac4f988d44f45812 - languageName: node - linkType: hard - -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 10c0/f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc - languageName: node - linkType: hard - -"proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 - languageName: node - linkType: hard - -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 - languageName: node - linkType: hard - -"rollup@npm:^4.40.0": - version: 4.42.0 - resolution: "rollup@npm:4.42.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.42.0" - "@rollup/rollup-android-arm64": "npm:4.42.0" - "@rollup/rollup-darwin-arm64": "npm:4.42.0" - "@rollup/rollup-darwin-x64": "npm:4.42.0" - "@rollup/rollup-freebsd-arm64": "npm:4.42.0" - "@rollup/rollup-freebsd-x64": "npm:4.42.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.42.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.42.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.42.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.42.0" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.42.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.42.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.42.0" - "@rollup/rollup-linux-riscv64-musl": "npm:4.42.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.42.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.42.0" - "@rollup/rollup-linux-x64-musl": "npm:4.42.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.42.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.42.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.42.0" - "@types/estree": "npm:1.0.7" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loongarch64-gnu": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-riscv64-musl": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/160fdb0874af5f0f619987b4e9abb3b136fc154f759762bfde4d65d864d6d06594ae7d1d8e6d4558d1b8ef329aaa6a8de543e90feead3d872db15cf61f78426c - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"scripts@workspace:.": - version: 0.0.0-use.local - resolution: "scripts@workspace:." - dependencies: - "@eslint/js": "npm:^9.29.0" - "@formatjs/intl-durationformat": "npm:^0.7.4" - "@formatjs/intl-listformat": "npm:^7.7.11" - "@formatjs/intl-locale": "npm:^4.2.11" - "@formatjs/intl-numberformat": "npm:^8.15.4" - "@formatjs/intl-pluralrules": "npm:^5.4.4" - "@minecraft/server": "npm:2.1.0-beta.1.21.90-stable" - "@minecraft/server-gametest": "npm:1.0.0-beta.1.21.90-stable" - "@minecraft/server-net": "npm:1.0.0-beta.1.21.90-stable" - "@minecraft/server-ui": "npm:2.1.0-beta.1.21.90-stable" - "@minecraft/vanilla-data": "npm:1.21.90" - "@vitest/coverage-istanbul": "npm:3.2.4" - "@vitest/ui": "npm:3.2.4" - async-mutex: "npm:^0.5.0" - esbuild: "npm:^0.25.5" - eslint: "npm:^9.29.0" - eslint-config-prettier: "npm:^10.1.5" - eslint-import-resolver-typescript: "npm:^4.4.4" - eslint-plugin-file-progress: "npm:^3.0.2" - eslint-plugin-only-warn: "npm:^1.1.0" - leafy-utils: "npm:^7.1.5" - prettier: "npm:^3.6.2" - prettier-plugin-jsdoc: "npm:^1.3.3" - tslib: "npm:^2.8.1" - typescript: "npm:^5.8.3" - typescript-eslint: "npm:^8.35.0" - vite-tsconfig-paths: "npm:5.1.4" - vitest: "npm:3.2.4" - languageName: unknown - linkType: soft - -"semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.1": - version: 7.7.2 - resolution: "semver@npm:7.7.2" - bin: - semver: bin/semver.js - checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"siginfo@npm:^2.0.0": - version: 2.0.0 - resolution: "siginfo@npm:2.0.0" - checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"sirv@npm:^3.0.1": - version: 3.0.1 - resolution: "sirv@npm:3.0.1" - dependencies: - "@polka/url": "npm:^1.0.0-next.24" - mrmime: "npm:^2.0.0" - totalist: "npm:^3.0.0" - checksum: 10c0/7cf64b28daa69b15f77b38b0efdd02c007b72bb3ec5f107b208ebf59f01b174ef63a1db3aca16d2df925501831f4c209be6ece3302b98765919ef5088b45bf80 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.3 - resolution: "socks-proxy-agent@npm:8.0.3" - dependencies: - agent-base: "npm:^7.1.1" - debug: "npm:^4.3.4" - socks: "npm:^2.7.1" - checksum: 10c0/4950529affd8ccd6951575e21c1b7be8531b24d924aa4df3ee32df506af34b618c4e50d261f4cc603f1bfd8d426915b7d629966c8ce45b05fb5ad8c8b9a6459d - languageName: node - linkType: hard - -"socks@npm:^2.7.1": - version: 2.8.3 - resolution: "socks@npm:2.8.3" - dependencies: - ip-address: "npm:^9.0.5" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 - languageName: node - linkType: hard - -"source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec - languageName: node - linkType: hard - -"ssri@npm:^10.0.0": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 - languageName: node - linkType: hard - -"stable-hash-x@npm:^0.1.1": - version: 0.1.1 - resolution: "stable-hash-x@npm:0.1.1" - checksum: 10c0/38744f4755026f2a2aa842c7d8c92c5a2cd708aac455faf8575cee7ce4218b5ffacf278797fed97d8240b956b687efb31ca92955280d07e7d6e16a8e58497daf - languageName: node - linkType: hard - -"stable-hash-x@npm:^0.2.0": - version: 0.2.0 - resolution: "stable-hash-x@npm:0.2.0" - checksum: 10c0/c757df58366ee4bb266a9486b8932eab7c1ba730469eaf4b68d2dee404814e9f84089c44c9b5205f8c7d99a0ab036cce2af69139ce5ed44b635923c011a8aea8 - languageName: node - linkType: hard - -"stackback@npm:0.0.2": - version: 0.0.2 - resolution: "stackback@npm:0.0.2" - checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 - languageName: node - linkType: hard - -"std-env@npm:^3.9.0": - version: 3.9.0 - resolution: "std-env@npm:3.9.0" - checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd - languageName: node - linkType: hard - -"strip-literal@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-literal@npm:3.0.0" - dependencies: - js-tokens: "npm:^9.0.1" - checksum: 10c0/d81657f84aba42d4bbaf2a677f7e7f34c1f3de5a6726db8bc1797f9c0b303ba54d4660383a74bde43df401cf37cce1dff2c842c55b077a4ceee11f9e31fba828 - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 - languageName: node - linkType: hard - -"test-exclude@npm:^7.0.1": - version: 7.0.1 - resolution: "test-exclude@npm:7.0.1" - dependencies: - "@istanbuljs/schema": "npm:^0.1.2" - glob: "npm:^10.4.1" - minimatch: "npm:^9.0.4" - checksum: 10c0/6d67b9af4336a2e12b26a68c83308c7863534c65f27ed4ff7068a56f5a58f7ac703e8fc80f698a19bb154fd8f705cdf7ec347d9512b2c522c737269507e7b263 - languageName: node - linkType: hard - -"tinybench@npm:^2.9.0": - version: 2.9.0 - resolution: "tinybench@npm:2.9.0" - checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c - languageName: node - linkType: hard - -"tinyexec@npm:^0.3.2": - version: 0.3.2 - resolution: "tinyexec@npm:0.3.2" - checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.14": - version: 0.2.14 - resolution: "tinyglobby@npm:0.2.14" - dependencies: - fdir: "npm:^6.4.4" - picomatch: "npm:^4.0.2" - checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 - languageName: node - linkType: hard - -"tinypool@npm:^1.1.1": - version: 1.1.1 - resolution: "tinypool@npm:1.1.1" - checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b - languageName: node - linkType: hard - -"tinyrainbow@npm:^2.0.0": - version: 2.0.0 - resolution: "tinyrainbow@npm:2.0.0" - checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f - languageName: node - linkType: hard - -"tinyspy@npm:^4.0.3": - version: 4.0.3 - resolution: "tinyspy@npm:4.0.3" - checksum: 10c0/0a92a18b5350945cc8a1da3a22c9ad9f4e2945df80aaa0c43e1b3a3cfb64d8501e607ebf0305e048e3c3d3e0e7f8eb10cea27dc17c21effb73e66c4a3be36373 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"totalist@npm:^3.0.0": - version: 3.0.1 - resolution: "totalist@npm:3.0.1" - checksum: 10c0/4bb1fadb69c3edbef91c73ebef9d25b33bbf69afe1e37ce544d5f7d13854cda15e47132f3e0dc4cafe300ddb8578c77c50a65004d8b6e97e77934a69aa924863 - languageName: node - linkType: hard - -"ts-api-utils@npm:^2.1.0": - version: 2.1.0 - resolution: "ts-api-utils@npm:2.1.0" - peerDependencies: - typescript: ">=4.8.4" - checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f - languageName: node - linkType: hard - -"tsconfck@npm:^3.0.3": - version: 3.0.3 - resolution: "tsconfck@npm:3.0.3" - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - bin: - tsconfck: bin/tsconfck.js - checksum: 10c0/d45009230c4caa5fc765bdded96f3b8703a7cdd44a1d63024914b0fb1c4dabf9e94d28cc9f9edccaef9baa7b99adc963502d34943d82fcb07b92e1161ee03c56 - languageName: node - linkType: hard - -"tslib@npm:^2.4.0, tslib@npm:^2.8.0, tslib@npm:^2.8.1": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: "npm:^1.2.1" - checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 - languageName: node - linkType: hard - -"typescript-eslint@npm:^8.35.0": - version: 8.35.0 - resolution: "typescript-eslint@npm:8.35.0" - dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.35.0" - "@typescript-eslint/parser": "npm:8.35.0" - "@typescript-eslint/utils": "npm:8.35.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/ba034fc25731c01c12de7564c05eb58b22072b14b9cb6469d79b2a0c70dff45d646423b8d6d7f2f6ca40310101f2bd0a843c1c51b8c51cfec556ca0723f5df2d - languageName: node - linkType: hard - -"typescript@npm:^5.8.3": - version: 5.8.3 - resolution: "typescript@npm:5.8.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": - version: 5.8.3 - resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 - languageName: node - linkType: hard - -"unist-util-stringify-position@npm:^4.0.0": - version: 4.0.0 - resolution: "unist-util-stringify-position@npm:4.0.0" - dependencies: - "@types/unist": "npm:^3.0.0" - checksum: 10c0/dfe1dbe79ba31f589108cb35e523f14029b6675d741a79dea7e5f3d098785045d556d5650ec6a8338af11e9e78d2a30df12b1ee86529cded1098da3f17ee999e - languageName: node - linkType: hard - -"unrs-resolver@npm:^1.7.11": - version: 1.7.11 - resolution: "unrs-resolver@npm:1.7.11" - dependencies: - "@unrs/resolver-binding-darwin-arm64": "npm:1.7.11" - "@unrs/resolver-binding-darwin-x64": "npm:1.7.11" - "@unrs/resolver-binding-freebsd-x64": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm64-musl": "npm:1.7.11" - "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.7.11" - "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-x64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-x64-musl": "npm:1.7.11" - "@unrs/resolver-binding-wasm32-wasi": "npm:1.7.11" - "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.7.11" - "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.7.11" - "@unrs/resolver-binding-win32-x64-msvc": "npm:1.7.11" - napi-postinstall: "npm:^0.2.2" - dependenciesMeta: - "@unrs/resolver-binding-darwin-arm64": - optional: true - "@unrs/resolver-binding-darwin-x64": - optional: true - "@unrs/resolver-binding-freebsd-x64": - optional: true - "@unrs/resolver-binding-linux-arm-gnueabihf": - optional: true - "@unrs/resolver-binding-linux-arm-musleabihf": - optional: true - "@unrs/resolver-binding-linux-arm64-gnu": - optional: true - "@unrs/resolver-binding-linux-arm64-musl": - optional: true - "@unrs/resolver-binding-linux-ppc64-gnu": - optional: true - "@unrs/resolver-binding-linux-riscv64-gnu": - optional: true - "@unrs/resolver-binding-linux-riscv64-musl": - optional: true - "@unrs/resolver-binding-linux-s390x-gnu": - optional: true - "@unrs/resolver-binding-linux-x64-gnu": - optional: true - "@unrs/resolver-binding-linux-x64-musl": - optional: true - "@unrs/resolver-binding-wasm32-wasi": - optional: true - "@unrs/resolver-binding-win32-arm64-msvc": - optional: true - "@unrs/resolver-binding-win32-ia32-msvc": - optional: true - "@unrs/resolver-binding-win32-x64-msvc": - optional: true - checksum: 10c0/37e6caf2884b7ce65f77fc5b945997b94523656d477ae0e67fb8df970939930b674091f3fac6beee93b0370fa64a925ad707edc76897aa8cb14866efbe4a6693 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.0.13": - version: 1.0.15 - resolution: "update-browserslist-db@npm:1.0.15" - dependencies: - escalade: "npm:^3.1.2" - picocolors: "npm:^1.0.0" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/c5f67dc68aba9a37701a14199e57e22f20c579411d386f47b4d81f6e3f06fd3ec256310594f4f9d6b01bc1cfb93cb1ebb1a1da70c4fa28720bc1d030f55bb8a1 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - -"vite-node@npm:3.2.4": - version: 3.2.4 - resolution: "vite-node@npm:3.2.4" - dependencies: - cac: "npm:^6.7.14" - debug: "npm:^4.4.1" - es-module-lexer: "npm:^1.7.0" - pathe: "npm:^2.0.3" - vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" - bin: - vite-node: vite-node.mjs - checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b - languageName: node - linkType: hard - -"vite-tsconfig-paths@npm:5.1.4": - version: 5.1.4 - resolution: "vite-tsconfig-paths@npm:5.1.4" - dependencies: - debug: "npm:^4.1.1" - globrex: "npm:^0.1.2" - tsconfck: "npm:^3.0.3" - peerDependencies: - vite: "*" - peerDependenciesMeta: - vite: - optional: true - checksum: 10c0/6228f23155ea25d92b1e1702284cf8dc52ad3c683c5ca691edd5a4c82d2913e7326d00708cef1cbfde9bb226261df0e0a12e03ef1d43b6a92d8f02b483ef37e3 - languageName: node - linkType: hard - -"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0": - version: 7.0.0-beta.0 - resolution: "vite@npm:7.0.0-beta.0" - dependencies: - esbuild: "npm:^0.25.0" - fdir: "npm:^6.4.4" - fsevents: "npm:~2.3.3" - picomatch: "npm:^4.0.2" - postcss: "npm:^8.5.3" - rollup: "npm:^4.40.0" - tinyglobby: "npm:^0.2.14" - peerDependencies: - "@types/node": ^20.19.0 || >=22.12.0 - jiti: ">=1.21.0" - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: ">=0.54.8" - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/d13907d67b4991a2862dafe6a31d10ffe28f26ba04e511049e9d86d06293b3a8d6733c896c8fb38e3f2d5805d240e3cad27700f3c42536602035e4c324b48d58 - languageName: node - linkType: hard - -"vitest@npm:3.2.4": - version: 3.2.4 - resolution: "vitest@npm:3.2.4" - dependencies: - "@types/chai": "npm:^5.2.2" - "@vitest/expect": "npm:3.2.4" - "@vitest/mocker": "npm:3.2.4" - "@vitest/pretty-format": "npm:^3.2.4" - "@vitest/runner": "npm:3.2.4" - "@vitest/snapshot": "npm:3.2.4" - "@vitest/spy": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - chai: "npm:^5.2.0" - debug: "npm:^4.4.1" - expect-type: "npm:^1.2.1" - magic-string: "npm:^0.30.17" - pathe: "npm:^2.0.3" - picomatch: "npm:^4.0.2" - std-env: "npm:^3.9.0" - tinybench: "npm:^2.9.0" - tinyexec: "npm:^0.3.2" - tinyglobby: "npm:^0.2.14" - tinypool: "npm:^1.1.1" - tinyrainbow: "npm:^2.0.0" - vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" - vite-node: "npm:3.2.4" - why-is-node-running: "npm:^2.3.0" - peerDependencies: - "@edge-runtime/vm": "*" - "@types/debug": ^4.1.12 - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - "@vitest/browser": 3.2.4 - "@vitest/ui": 3.2.4 - happy-dom: "*" - jsdom: "*" - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@types/debug": - optional: true - "@types/node": - optional: true - "@vitest/browser": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - bin: - vitest: vitest.mjs - checksum: 10c0/5bf53ede3ae6a0e08956d72dab279ae90503f6b5a05298a6a5e6ef47d2fd1ab386aaf48fafa61ed07a0ebfe9e371772f1ccbe5c258dd765206a8218bf2eb79eb - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a - languageName: node - linkType: hard - -"why-is-node-running@npm:^2.3.0": - version: 2.3.0 - resolution: "why-is-node-running@npm:2.3.0" - dependencies: - siginfo: "npm:^2.0.0" - stackback: "npm:0.0.2" - bin: - why-is-node-running: cli.js - checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 - languageName: node - linkType: hard - -"word-wrap@npm:^1.2.5": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard