Skip to content
This repository was archived by the owner on Sep 28, 2025. It is now read-only.

Commit 3947574

Browse files
committed
refactor: changing code for the new molang patch
1 parent 052b4f7 commit 3947574

File tree

12 files changed

+153
-94
lines changed

12 files changed

+153
-94
lines changed

server/src/lib/lsp/completion/builder/builder.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { Defined } from 'bc-minecraft-bedrock-project';
12
import { Documentated, Identifiable } from "bc-minecraft-bedrock-types/lib/types";
2-
import { CancellationToken, WorkDoneProgressReporter } from "vscode-languageserver";
3-
import { CompletionItem, CompletionItemKind } from "vscode-languageserver-types";
3+
import { CancellationToken, CompletionItem, CompletionItemKind, WorkDoneProgressReporter } from "vscode-languageserver";
44

55
export type GenerateFunction<T> = (item: T) => string;
66

@@ -40,16 +40,16 @@ export interface CompletionBuilder {
4040
* @param query The query to filter the dataset
4141
*/
4242
generate<T extends Identifiable | string>(
43-
dataset: IForEach<T> | undefined,
43+
dataset: IForEach<T> | Defined | undefined,
4444
generatefn: GenerateFunction<T>
4545
): CompletionItem[];
4646
generate<T extends Identifiable | string>(
47-
dataset: IForEach<T> | undefined,
47+
dataset: IForEach<T> | Defined | undefined,
4848
generatefn: GenerateFunction<T>,
4949
kind: CompletionItemKind
5050
): CompletionItem[];
5151
generate<T extends Identifiable | string>(
52-
dataset: IForEach<T> | undefined,
52+
dataset: IForEach<T> | Defined | undefined,
5353
generatefn: GenerateFunction<T>,
5454
kind: CompletionItemKind | undefined,
5555
query: string | undefined

server/src/lib/lsp/completion/minecraft/behavior-pack/block-states.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { BehaviorPack } from "bc-minecraft-bedrock-project";
22
import { Location } from "bc-minecraft-bedrock-types/lib/types";
33
import { MinecraftData, Types } from "bc-minecraft-bedrock-vanilla-data";
4-
import { MolangSet } from "bc-minecraft-molang/lib/src/Molang";
5-
import { CompletionItemKind } from "vscode-languageserver-types";
4+
import { MolangSet } from "bc-minecraft-molang";
5+
import { CompletionItemKind } from "vscode-languageserver";
66
import { Kinds } from "../../../../constants";
77
import { GetPossibleBlockID } from "../../../../minecraft/commands";
88
import { IsEducationEnabled } from "../../../../project/attributes";
9-
import { Context } from '../../../context/context';
10-
import { CommandCompletionContext } from '../../context';
9+
import { Context } from "../../../context/context";
10+
import { CommandCompletionContext } from "../../context";
1111
import { IsEditingValue } from "../selectors/attribute-values";
1212

1313
export function provideCompletion(context: Context<CommandCompletionContext>): void {
@@ -84,7 +84,7 @@ function vanillaBlockToBlock(block: Types.BehaviorPack.Block | undefined): Behav
8484
return {
8585
id: block.id,
8686
location: Location.empty(),
87-
molang: MolangSet.create(),
87+
molang: new MolangSet(),
8888
states: states,
8989
};
9090
}

server/src/lib/lsp/completion/minecraft/behavior-pack/families.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Defined } from "bc-minecraft-bedrock-project";
12
import { MinecraftData } from "bc-minecraft-bedrock-vanilla-data";
23
import { Kinds } from "../../../../constants";
34
import { GetPossibleEntityTypes } from "../../../../minecraft/commands";
@@ -47,14 +48,21 @@ export function provideCompletionTest(context: Context<CommandCompletionContext>
4748
const entity = context.database.ProjectData.behaviorPacks.entities.get(type);
4849
if (entity) convertTestEntity(entity, builder);
4950

50-
const vanilla_entity = MinecraftData.ResourcePack.getEntity(type, edu);
51+
const vanilla_entity = MinecraftData.BehaviorPack.getEntity(type, edu);
5152
if (vanilla_entity) convertTestEntity(vanilla_entity, builder);
5253
});
5354
}
5455
}
5556

56-
function convertTestEntity(entity: { families?: string[]; id: string }, receiver: CompletionBuilder) {
57-
entity.families?.forEach((family) => {
57+
interface Families {
58+
id: string;
59+
families: Defined | string[];
60+
}
61+
62+
function convertTestEntity(entity: Families, receiver: CompletionBuilder) {
63+
const families = Array.isArray(entity.families) ? entity.families : entity.families.defined;
64+
65+
families.forEach((family) => {
5866
receiver.add({
5967
label: family,
6068
documentation: `Test for the family: ${family}\n\rForm ${entity.id}`,

server/src/lib/lsp/completion/minecraft/molang/contexts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Data } from "bc-minecraft-molang";
2-
import { CompletionItemKind } from "vscode-languageserver-types";
2+
import { CompletionItemKind } from "vscode-languageserver";
33
import { GetDataSet } from "../../../../minecraft/molang/getdataset";
44
import { Context } from '../../../context/context';
55
import { CompletionBuilder } from "../../builder/builder";

server/src/lib/lsp/completion/minecraft/molang/geometry.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { BehaviorPack, PackType, ResourcePack } from "bc-minecraft-bedrock-project";
22
import { Vanilla } from "bc-minecraft-bedrock-vanilla-data";
33
import { Kinds } from "../../../../constants";
4+
import { getIdentifier, getScopeDefined } from "../../../../minecraft/molang";
45
import { Context } from "../../../context/context";
56
import { CompletionContext } from "../../context";
67

@@ -31,11 +32,11 @@ export function provideResourcePackCompletion(context: Context<CompletionContext
3132
case ResourcePack.FileType.render_controller:
3233
const builder = context.builder.withDefaults({ kind: Kinds.Completion.Models });
3334
context.database.ProjectData.resourcePacks.entities.forEach((entity) => {
34-
entity.molang.geometries.defined.forEach((geo) => {
35-
const label = prefixed ? `Geometry.${geo}` : geo;
35+
getScopeDefined(entity.molang, "geometry").forEach((geo) => {
36+
const identifier = getIdentifier(geo, prefixed);
3637
builder.add({
37-
label,
38-
documentation: `The defined geomtry: ${geo}\nDeclared by: ${entity.id}`,
38+
label: identifier,
39+
documentation: `The defined geomtry: ${identifier}\nDeclared by: ${entity.id}`,
3940
});
4041
});
4142
});

server/src/lib/lsp/completion/minecraft/molang/temps.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { PackType } from "bc-minecraft-bedrock-project";
2-
import { Data, Defined } from "bc-minecraft-molang";
3-
import { CompletionItemKind } from "vscode-languageserver-types";
2+
import { Data, ResourceReferenceNode, VariableNode } from "bc-minecraft-molang";
3+
import { CompletionItemKind } from "vscode-languageserver";
4+
import { getIdentifier, getScopeDefined } from "../../../../minecraft/molang";
45
import { GetDataSet } from "../../../../minecraft/molang/getdataset";
5-
import { Context } from '../../../context/context';
6+
import { Context } from "../../../context/context";
67
import { CompletionBuilder } from "../../builder/builder";
7-
import { CompletionContext } from '../../context';
8+
import { CompletionContext } from "../../context";
89

910
export function provideCompletion(context: Context<CompletionContext>): void {
1011
const packType = PackType.detect(context.document.uri);
@@ -18,7 +19,7 @@ export function provideCompletion(context: Context<CompletionContext>): void {
1819

1920
case PackType.resource_pack:
2021
context.database.ProjectData.resourcePacks.entities.forEach((entity) =>
21-
GenerateDU(entity.molang.temps, context.builder, entity.id)
22+
generateDU(getScopeDefined(entity.molang, "temp", "t"), context.builder, entity.id)
2223
);
2324
}
2425
}
@@ -35,16 +36,17 @@ function Generate(
3536
});
3637
}
3738

38-
function GenerateDU(
39-
data: Defined<string>,
39+
function generateDU(
40+
data: (ResourceReferenceNode | VariableNode)[],
4041
builder: CompletionBuilder,
4142
ownerid: string,
4243
kinds: CompletionItemKind = CompletionItemKind.Variable
4344
): void {
44-
data.defined.forEach((item) => {
45+
data.forEach((item) => {
46+
const identifier = getIdentifier(item);
4547
builder.add({
46-
label: item,
47-
documentation: `The molang temp variable: ${item}\nDeclared by '${ownerid}'`,
48+
label: identifier,
49+
documentation: `The molang temp variable: ${identifier}\nDeclared by '${ownerid}'`,
4850
kind: kinds,
4951
});
5052
});

server/src/lib/lsp/completion/minecraft/molang/texture.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { PackType } from "bc-minecraft-bedrock-project";
22
import { Kinds } from "../../../../constants";
3+
import { getIdentifier, getScopeDefined } from "../../../../minecraft/molang";
34
import { Context } from "../../../context/context";
45
import { CompletionContext } from "../../context";
56

@@ -13,11 +14,11 @@ export function provideCompletion(context: Context<CompletionContext>, prefixed:
1314
case PackType.resource_pack:
1415
const builder = context.builder.withDefaults({ kind: Kinds.Completion.Texture });
1516
context.database.ProjectData.resourcePacks.entities.forEach((entity) => {
16-
entity.molang.textures.defined.forEach((item) => {
17-
const label = prefixed ? `Texture.${item}` : item;
17+
getScopeDefined(entity.molang, "texture").forEach((item) => {
18+
const label = getIdentifier(item, prefixed);
1819
builder.add({
1920
label,
20-
documentation: `The defined texture: ${item}\nDeclared by: ${entity.id}`,
21+
documentation: `The defined texture: ${label}\nDeclared by: ${entity.id}`,
2122
});
2223
});
2324
});

server/src/lib/lsp/completion/minecraft/molang/variables.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { PackType } from "bc-minecraft-bedrock-project";
2-
import { CompletionItemKind } from "vscode-languageserver-types";
2+
import { CompletionItemKind } from "vscode-languageserver";
3+
import { getIdentifier, getScopeDefined } from "../../../../minecraft/molang";
34
import { GetDataSet } from "../../../../minecraft/molang/getdataset";
4-
import { Context } from '../../../context/context';
5-
import { CompletionContext } from '../../context';
5+
import { Context } from "../../../context/context";
6+
import { CompletionContext } from "../../context";
67

78
export function provideCompletion(context: Context<CompletionContext>): void {
89
const packType = PackType.detect(context.document.uri);
@@ -21,8 +22,12 @@ export function provideCompletion(context: Context<CompletionContext>): void {
2122

2223
case PackType.resource_pack:
2324
context.database.ProjectData.resourcePacks.entities.forEach((entity) =>
24-
entity.molang.variables.defined.forEach((item) => {
25-
builder.add({ label: item, documentation: `The molang variable: ${item}\nDeclared by '${entity.id}'` });
25+
getScopeDefined(entity.molang, "v", "variable").forEach((item) => {
26+
const identifier = getIdentifier(item);
27+
builder.add({
28+
label: identifier,
29+
documentation: `The molang variable: ${identifier}\nDeclared by '${entity.id}'`,
30+
});
2631
})
2732
);
2833
}

server/src/lib/lsp/database/database.ts

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { ParameterType } from "bc-minecraft-bedrock-command";
22
import { ProjectData } from "bc-minecraft-bedrock-project";
33
import { Types } from "bc-minecraft-bedrock-types";
4-
import { WorkDoneProgressReporter } from "vscode-languageserver";
5-
import { CancellationToken, Location } from "vscode-languageserver-protocol";
4+
import { CancellationToken, Location, WorkDoneProgressReporter } from "vscode-languageserver";
65
import { Processor, References } from "../../util";
76
import { InternalContext } from "../diagnostics/context";
87
import { IDocumentManager } from "../documents/manager";
@@ -108,7 +107,7 @@ export class Database implements Partial<IService> {
108107
workDoneProgress?: WorkDoneProgressReporter
109108
): BaseObject[] {
110109
const out: BaseObject[] = [];
111-
const AddIfIDMatch = (item: BaseObject) => {
110+
const addIfIDMatch = (item: BaseObject) => {
112111
if (item.id === id) out.push(item);
113112
};
114113

@@ -124,58 +123,58 @@ export class Database implements Partial<IService> {
124123
if (anim === id) out.push(entity);
125124
});
126125
});
127-
this.ProjectData.resourcePacks.animations.forEach(AddIfIDMatch);
128-
this.ProjectData.resourcePacks.animation_controllers.forEach(AddIfIDMatch);
126+
this.ProjectData.resourcePacks.animations.forEach(addIfIDMatch);
127+
this.ProjectData.resourcePacks.animation_controllers.forEach(addIfIDMatch);
129128
break;
130129

131130
case ParameterType.block:
132-
this.ProjectData.behaviorPacks.blocks.forEach(AddIfIDMatch);
131+
this.ProjectData.behaviorPacks.blocks.forEach(addIfIDMatch);
133132
break;
134133

135134
case ParameterType.entity:
136-
this.ProjectData.behaviorPacks.entities.forEach(AddIfIDMatch);
137-
this.ProjectData.resourcePacks.entities.forEach(AddIfIDMatch);
135+
this.ProjectData.behaviorPacks.entities.forEach(addIfIDMatch);
136+
this.ProjectData.resourcePacks.entities.forEach(addIfIDMatch);
138137
break;
139138

140139
case ParameterType.event:
141140
this.ProjectData.behaviorPacks.entities.forEach((entity) => {
142-
entity.events.forEach((event) => {
141+
entity.events.defined.forEach((event) => {
143142
if (event === id) out.push(entity);
144143
});
145144
});
146145
break;
147146

148147
case ParameterType.function:
149-
this.ProjectData.behaviorPacks.functions.forEach(AddIfIDMatch);
148+
this.ProjectData.behaviorPacks.functions.forEach(addIfIDMatch);
150149
break;
151150

152151
case ParameterType.item:
153-
this.ProjectData.behaviorPacks.items.forEach(AddIfIDMatch);
152+
this.ProjectData.behaviorPacks.items.forEach(addIfIDMatch);
154153
break;
155154

156155
case ParameterType.objective:
157-
this.ProjectData.general.objectives.forEach(AddIfIDMatch);
156+
this.ProjectData.general.objectives.forEach(addIfIDMatch);
158157
break;
159158

160159
case ParameterType.particle:
161-
this.ProjectData.resourcePacks.particles.forEach(AddIfIDMatch);
160+
this.ProjectData.resourcePacks.particles.forEach(addIfIDMatch);
162161
break;
163162

164163
case ParameterType.sound:
165-
this.ProjectData.resourcePacks.sounds.forEach(AddIfIDMatch);
164+
this.ProjectData.resourcePacks.sounds.forEach(addIfIDMatch);
166165
break;
167166

168167
case ParameterType.structure:
169-
this.ProjectData.behaviorPacks.structures.forEach(AddIfIDMatch);
170-
this.ProjectData.general.structures.forEach(AddIfIDMatch);
168+
this.ProjectData.behaviorPacks.structures.forEach(addIfIDMatch);
169+
this.ProjectData.general.structures.forEach(addIfIDMatch);
171170
break;
172171

173172
case ParameterType.tag:
174-
this.ProjectData.general.tags.forEach(AddIfIDMatch);
173+
this.ProjectData.general.tags.forEach(addIfIDMatch);
175174
break;
176175

177176
case ParameterType.tickingarea:
178-
this.ProjectData.general.tickingAreas.forEach(AddIfIDMatch);
177+
this.ProjectData.general.tickingAreas.forEach(addIfIDMatch);
179178
break;
180179
}
181180
}

0 commit comments

Comments
 (0)