From 4f010d5414fa666b354c8d17ac55beb58669dc06 Mon Sep 17 00:00:00 2001 From: Misode <Misoloo64@gmail.com> Date: Sun, 12 May 2024 03:47:08 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Implement=20various=20command=20par?= =?UTF-8?q?sers=20and=20tree=20patch=20changes=20(#1128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/symbol/Symbol.ts | 4 ++ .../java-edition/src/dependency/common.ts | 7 +++- .../src/mcfunction/common/index.ts | 22 +++++++++++ .../src/mcfunction/completer/argument.ts | 10 +++++ .../src/mcfunction/parser/argument.ts | 10 +++++ .../src/mcfunction/tree/argument.ts | 27 +++++++++++++ .../java-edition/src/mcfunction/tree/patch.ts | 38 +++++++++++++++++++ 7 files changed, 117 insertions(+), 1 deletion(-) diff --git a/packages/core/src/symbol/Symbol.ts b/packages/core/src/symbol/Symbol.ts index aaf677852..291ede24b 100644 --- a/packages/core/src/symbol/Symbol.ts +++ b/packages/core/src/symbol/Symbol.ts @@ -119,6 +119,8 @@ export type TagFileCategory = (typeof TagFileCategories)[number] export const FileCategories = Object.freeze( [ 'advancement', + 'chat_type', + 'damage_type', 'dimension', 'dimension_type', 'function', @@ -127,6 +129,8 @@ export const FileCategories = Object.freeze( 'predicate', 'recipe', 'structure', + 'trim_material', + 'trim_pattern', ...TagFileCategories, ...WorldgenFileCategories, ] as const, diff --git a/packages/java-edition/src/dependency/common.ts b/packages/java-edition/src/dependency/common.ts index c0abecf03..becb74e46 100644 --- a/packages/java-edition/src/dependency/common.ts +++ b/packages/java-edition/src/dependency/common.ts @@ -28,7 +28,12 @@ export const PackVersionMap: Record<number, RegExp | undefined> = { 7: /^1\.17.*$/, 8: /^1\.18(\.1)?$/, 9: /^1\.18.*$/, - 10: /^1\.19.*$/, + 10: /^1\.19(\.[1-3])?$/, + 12: /^1\.19.*$/, + 15: /^1\.20(\.1)?$/, + 18: /^1\.20\.2$/, + 26: /^1\.20\.[3-4]$/, + 41: /^1\.20\.[5-6]$/, } export interface PackMcmeta { diff --git a/packages/java-edition/src/mcfunction/common/index.ts b/packages/java-edition/src/mcfunction/common/index.ts index 952288b32..a63852daf 100644 --- a/packages/java-edition/src/mcfunction/common/index.ts +++ b/packages/java-edition/src/mcfunction/common/index.ts @@ -66,3 +66,25 @@ export const SwizzleArgumentValues = [ 'zxy', 'zyx', ] + +export const HeightmapValues = [ + 'motion_blocking', + 'motion_blocking_no_leaves', + 'ocean_floor', + 'ocean_floor_wg', + 'world_surface', + 'world_surface_wg', +] + +export const RotationValues = [ + 'none', + 'clockwise_90', + '180', + 'counterclockwise_90', +] + +export const MirrorValues = [ + 'none', + 'left_right', + 'front_back', +] diff --git a/packages/java-edition/src/mcfunction/completer/argument.ts b/packages/java-edition/src/mcfunction/completer/argument.ts index 84aab0ae3..af92cc3b7 100644 --- a/packages/java-edition/src/mcfunction/completer/argument.ts +++ b/packages/java-edition/src/mcfunction/completer/argument.ts @@ -31,8 +31,11 @@ import { ColorArgumentValues, EntityAnchorArgumentValues, GamemodeArgumentValues, + HeightmapValues, ItemSlotArgumentValues, + MirrorValues, OperationArgumentValues, + RotationValues, ScoreboardSlotArgumentValues, SwizzleArgumentValues, } from '../common/index.js' @@ -98,6 +101,8 @@ export const getMockNodes: mcf.completer.MockNodesGetter = ( case 'minecraft:entity': case 'minecraft:game_profile': return EntitySelectorNode.mock(range) + case 'minecraft:heightmap': + return LiteralNode.mock(range, { pool: HeightmapValues }) case 'minecraft:entity_anchor': return LiteralNode.mock(range, { pool: EntityAnchorArgumentValues }) case 'minecraft:entity_summon': @@ -130,6 +135,7 @@ export const getMockNodes: mcf.completer.MockNodesGetter = ( case 'minecraft:particle': return ParticleNode.mock(range) case 'minecraft:resource': + case 'minecraft:resource_key': case 'minecraft:resource_or_tag': return ResourceLocationNode.mock(range, { category: ResourceLocation.shorten(treeNode.properties.registry) as @@ -152,6 +158,10 @@ export const getMockNodes: mcf.completer.MockNodesGetter = ( return LiteralNode.mock(range, { pool: SwizzleArgumentValues }) case 'minecraft:team': return SymbolNode.mock(range, { category: 'team' }) + case 'minecraft:template_mirror': + return LiteralNode.mock(range, { pool: MirrorValues }) + case 'minecraft:template_rotation': + return LiteralNode.mock(range, { pool: RotationValues }) case 'minecraft:vec2': return VectorNode.mock(range, { dimension: 2, integersOnly: true }) case 'minecraft:vec3': diff --git a/packages/java-edition/src/mcfunction/parser/argument.ts b/packages/java-edition/src/mcfunction/parser/argument.ts index 461e766e0..2655b8eed 100644 --- a/packages/java-edition/src/mcfunction/parser/argument.ts +++ b/packages/java-edition/src/mcfunction/parser/argument.ts @@ -9,8 +9,11 @@ import { ColorArgumentValues, EntityAnchorArgumentValues, GamemodeArgumentValues, + HeightmapValues, ItemSlotArgumentValues, + MirrorValues, OperationArgumentValues, + RotationValues, ScoreboardSlotArgumentValues, SwizzleArgumentValues, } from '../common/index.js' @@ -173,6 +176,8 @@ export const argument: mcf.ArgumentParserGetter = ( return wrap(core.literal(...GamemodeArgumentValues)) case 'minecraft:game_profile': return wrap(entity('multiple', 'players')) + case 'minecraft:heightmap': + return wrap(core.literal(...HeightmapValues)) case 'minecraft:int_range': return wrap(range('integer')) case 'minecraft:item_enchantment': @@ -221,6 +226,7 @@ export const argument: mcf.ArgumentParserGetter = ( case 'minecraft:particle': return wrap(particle) case 'minecraft:resource': + case 'minecraft:resource_key': case 'minecraft:resource_or_tag': return wrap( core.resourceLocation({ @@ -257,6 +263,10 @@ export const argument: mcf.ArgumentParserGetter = ( : undefined, ), ) + case 'minecraft:template_mirror': + return wrap(core.literal(...MirrorValues)) + case 'minecraft:template_rotation': + return wrap(core.literal(...RotationValues)) case 'minecraft:time': return wrap(time) case 'minecraft:uuid': diff --git a/packages/java-edition/src/mcfunction/tree/argument.ts b/packages/java-edition/src/mcfunction/tree/argument.ts index fd4bf7ef3..bc022c861 100644 --- a/packages/java-edition/src/mcfunction/tree/argument.ts +++ b/packages/java-edition/src/mcfunction/tree/argument.ts @@ -112,6 +112,11 @@ export interface MinecraftGameProfileArgumentTreeNode { parser: 'minecraft:game_profile' } +export interface MinecraftHeightmapArgumentTreeNode + extends mcf.ArgumentTreeNode +{ + parser: 'minecraft:heightmap' +} export interface MinecraftIntRangeArgumentTreeNode extends mcf.ArgumentTreeNode { @@ -184,6 +189,14 @@ export interface MinecraftResourceArgumentTreeNode registry: string } } +export interface MinecraftResourceKeyArgumentTreeNode + extends mcf.ArgumentTreeNode +{ + parser: 'minecraft:resource_key' + properties: { + registry: string + } +} export interface MinecraftResourceLocationArgumentTreeNode extends mcf.ArgumentTreeNode { @@ -222,6 +235,16 @@ export interface MinecraftSwizzleArgumentTreeNode extends mcf.ArgumentTreeNode { export interface MinecraftTeamArgumentTreeNode extends mcf.ArgumentTreeNode { parser: 'minecraft:team' } +export interface MinecraftTemplateMirrorArgumentTreeNode + extends mcf.ArgumentTreeNode +{ + parser: 'minecraft:template_mirror' +} +export interface MinecraftTemplateRotationArgumentTreeNode + extends mcf.ArgumentTreeNode +{ + parser: 'minecraft:template_rotation' +} export interface MinecraftTimeArgumentTreeNode extends mcf.ArgumentTreeNode { parser: 'minecraft:time' } @@ -262,6 +285,7 @@ export type ArgumentTreeNode = | MinecraftFunctionArgumentTreeNode | MinecraftGamemodeArgumentTreeNode | MinecraftGameProfileArgumentTreeNode + | MinecraftHeightmapArgumentTreeNode | MinecraftIntRangeArgumentTreeNode | MinecraftItemEnchantmentArgumentTreeNode | MinecraftItemPredicateArgumentTreeNode @@ -277,6 +301,7 @@ export type ArgumentTreeNode = | MinecraftOperationArgumentTreeNode | MinecraftParticleArgumentTreeNode | MinecraftResourceArgumentTreeNode + | MinecraftResourceKeyArgumentTreeNode | MinecraftResourceLocationArgumentTreeNode | MinecraftResourceOrTagArgumentTreeNode | MinecraftRotationArgumentTreeNode @@ -284,6 +309,8 @@ export type ArgumentTreeNode = | MinecraftScoreboardSlotArgumentTreeNode | MinecraftSwizzleArgumentTreeNode | MinecraftTeamArgumentTreeNode + | MinecraftTemplateMirrorArgumentTreeNode + | MinecraftTemplateRotationArgumentTreeNode | MinecraftTimeArgumentTreeNode | MinecraftUuidArgumentTreeNode | MinecraftVec2ArgumentTreeNode diff --git a/packages/java-edition/src/mcfunction/tree/patch.ts b/packages/java-edition/src/mcfunction/tree/patch.ts index 322bf93e3..580fb9b81 100644 --- a/packages/java-edition/src/mcfunction/tree/patch.ts +++ b/packages/java-edition/src/mcfunction/tree/patch.ts @@ -333,6 +333,13 @@ export function getPatch(release: ReleaseVersion): PartialRootTreeNode { help: { permission: 0, }, + ...(ReleaseVersion.cmp(release, '1.18') >= 0 + ? { + jfr: { + permission: 4, + }, + } + : {}), kick: { permission: 3, }, @@ -418,6 +425,30 @@ export function getPatch(release: ReleaseVersion): PartialRootTreeNode { 'pardon-ip': { permission: 3, }, + ...(ReleaseVersion.cmp(release, '1.17') >= 0 + ? { + perf: { + permission: 4, + }, + } + : {}), + ...(ReleaseVersion.cmp(release, '1.19') >= 0 + ? { + place: { + children: { + template: { + children: { + template: { + properties: { + category: 'structure' + } + } + } + } + } + }, + } + : {}), playsound: Sound, publish: { permission: 4, @@ -559,6 +590,13 @@ export function getPatch(release: ReleaseVersion): PartialRootTreeNode { tell: { permission: 0, }, + ...(ReleaseVersion.cmp(release, '1.20.2') >= 0 + ? { + tick: { + permission: 3, + }, + } + : {}), tm: { permission: 0, },