minecraft-datapack-language 15.4.28__py3-none-any.whl → 15.4.30__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. minecraft_datapack_language/__init__.py +23 -2
  2. minecraft_datapack_language/_version.py +2 -2
  3. minecraft_datapack_language/ast_nodes.py +87 -59
  4. minecraft_datapack_language/cli.py +276 -139
  5. minecraft_datapack_language/mdl_compiler.py +470 -0
  6. minecraft_datapack_language/mdl_errors.py +14 -0
  7. minecraft_datapack_language/mdl_lexer.py +624 -0
  8. minecraft_datapack_language/mdl_parser.py +573 -0
  9. minecraft_datapack_language-15.4.30.dist-info/METADATA +266 -0
  10. minecraft_datapack_language-15.4.30.dist-info/RECORD +17 -0
  11. minecraft_datapack_language/cli_build.py +0 -1292
  12. minecraft_datapack_language/cli_check.py +0 -155
  13. minecraft_datapack_language/cli_colors.py +0 -264
  14. minecraft_datapack_language/cli_help.py +0 -508
  15. minecraft_datapack_language/cli_new.py +0 -300
  16. minecraft_datapack_language/cli_utils.py +0 -276
  17. minecraft_datapack_language/expression_processor.py +0 -352
  18. minecraft_datapack_language/linter.py +0 -409
  19. minecraft_datapack_language/mdl_lexer_js.py +0 -754
  20. minecraft_datapack_language/mdl_parser_js.py +0 -1049
  21. minecraft_datapack_language/pack.py +0 -758
  22. minecraft_datapack_language-15.4.28.dist-info/METADATA +0 -1274
  23. minecraft_datapack_language-15.4.28.dist-info/RECORD +0 -25
  24. {minecraft_datapack_language-15.4.28.dist-info → minecraft_datapack_language-15.4.30.dist-info}/WHEEL +0 -0
  25. {minecraft_datapack_language-15.4.28.dist-info → minecraft_datapack_language-15.4.30.dist-info}/entry_points.txt +0 -0
  26. {minecraft_datapack_language-15.4.28.dist-info → minecraft_datapack_language-15.4.30.dist-info}/licenses/LICENSE +0 -0
  27. {minecraft_datapack_language-15.4.28.dist-info → minecraft_datapack_language-15.4.30.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,27 @@
1
1
 
2
- from .pack import Pack, Namespace, Function, Tag, Recipe, Advancement, LootTable, Predicate, ItemModifier, Structure, DirMap
3
- __all__ = ["Pack","Namespace","Function","Tag","Recipe","Advancement","LootTable","Predicate","ItemModifier","Structure","DirMap"]
2
+ from .mdl_lexer import MDLLexer, Token, TokenType
3
+ from .mdl_parser import MDLParser
4
+ from .ast_nodes import *
5
+ from .dir_map import DirMap
6
+
7
+ __all__ = [
8
+ "MDLLexer", "Token", "TokenType",
9
+ "MDLParser",
10
+ "ASTNode", "Program", "PackDeclaration", "NamespaceDeclaration", "TagDeclaration",
11
+ "VariableDeclaration", "VariableAssignment", "VariableSubstitution", "FunctionDeclaration",
12
+ "FunctionCall", "IfStatement", "WhileLoop", "HookDeclaration", "RawBlock",
13
+ "SayCommand", "TellrawCommand", "ExecuteCommand", "ScoreboardCommand",
14
+ "BinaryExpression", "UnaryExpression", "ParenthesizedExpression", "LiteralExpression",
15
+ "ScopeSelector",
16
+ "DirMap"
17
+ ]
18
+
19
+ # CLI entry point
20
+ def main():
21
+ """CLI entry point for the mdl command."""
22
+ from .cli import main as cli_main
23
+ return cli_main()
24
+
4
25
  try:
5
26
  from ._version import version as __version__ # written by setuptools-scm
6
27
  except Exception:
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '15.4.28'
32
- __version_tuple__ = version_tuple = (15, 4, 28)
31
+ __version__ = version = '15.4.30'
32
+ __version_tuple__ = version_tuple = (15, 4, 30)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -1,9 +1,10 @@
1
1
  """
2
2
  AST Node Definitions - Data classes for the MDL Abstract Syntax Tree
3
+ Updated to match the new language specification
3
4
  """
4
5
 
5
6
  from dataclasses import dataclass
6
- from typing import List, Optional, Any
7
+ from typing import List, Optional, Any, Union
7
8
 
8
9
 
9
10
  @dataclass
@@ -14,6 +15,7 @@ class ASTNode:
14
15
 
15
16
  @dataclass
16
17
  class PackDeclaration(ASTNode):
18
+ """Pack declaration with name, description, and pack format."""
17
19
  name: str
18
20
  description: str
19
21
  pack_format: int
@@ -21,131 +23,157 @@ class PackDeclaration(ASTNode):
21
23
 
22
24
  @dataclass
23
25
  class NamespaceDeclaration(ASTNode):
26
+ """Namespace declaration."""
24
27
  name: str
25
28
 
26
29
 
27
30
  @dataclass
28
- class FunctionDeclaration(ASTNode):
31
+ class TagDeclaration(ASTNode):
32
+ """Tag declaration for datapack resources."""
33
+ tag_type: str # recipe, loot_table, advancement, item_modifier, predicate, structure
29
34
  name: str
30
- body: List[Any]
35
+ file_path: str
31
36
 
32
37
 
33
38
  @dataclass
34
39
  class VariableDeclaration(ASTNode):
40
+ """Variable declaration with explicit scope."""
41
+ var_type: str # num
35
42
  name: str
36
- scope: Optional[str]
37
- value: Any
43
+ scope: str # <@s>, <@a>, <@e[type=armor_stand]>, etc.
44
+ initial_value: Any
38
45
 
39
46
 
40
47
  @dataclass
41
48
  class VariableAssignment(ASTNode):
49
+ """Variable assignment with explicit scope."""
42
50
  name: str
43
- scope: Optional[str]
51
+ scope: str # <@s>, <@a>, etc.
44
52
  value: Any
45
53
 
46
54
 
47
55
  @dataclass
48
- class IfStatement(ASTNode):
49
- condition: str
50
- then_body: List[Any]
51
- else_body: Optional[List[Any]]
56
+ class VariableSubstitution(ASTNode):
57
+ """Variable substitution for reading values."""
58
+ name: str
59
+ scope: str # <@s>, <@a>, etc.
52
60
 
53
61
 
54
62
  @dataclass
55
- class WhileLoop(ASTNode):
56
- condition: str
57
- method: Optional[str]
58
- body: List[Any]
63
+ class FunctionDeclaration(ASTNode):
64
+ """Function declaration with optional scope."""
65
+ namespace: str
66
+ name: str
67
+ scope: Optional[str] # Optional scope for the function
68
+ body: List[ASTNode]
59
69
 
60
70
 
61
71
  @dataclass
62
72
  class FunctionCall(ASTNode):
73
+ """Function execution with exec keyword."""
74
+ namespace: str
63
75
  name: str
76
+ scope: Optional[str] # Optional scope for the function call
64
77
 
65
78
 
66
79
  @dataclass
67
- class ExecuteStatement(ASTNode):
68
- command: str
69
-
70
-
71
- @dataclass
72
- class RawText(ASTNode):
73
- content: str
80
+ class IfStatement(ASTNode):
81
+ """If statement with condition and bodies."""
82
+ condition: Any # Expression
83
+ then_body: List[ASTNode]
84
+ else_body: Optional[List[ASTNode]]
74
85
 
75
86
 
76
87
  @dataclass
77
- class Command(ASTNode):
78
- command: str
88
+ class WhileLoop(ASTNode):
89
+ """While loop with condition and body."""
90
+ condition: Any # Expression
91
+ body: List[ASTNode]
79
92
 
80
93
 
81
94
  @dataclass
82
- class VariableExpression(ASTNode):
95
+ class HookDeclaration(ASTNode):
96
+ """Hook declaration (on_load, on_tick)."""
97
+ hook_type: str # on_load, on_tick
98
+ namespace: str
83
99
  name: str
100
+ scope: Optional[str] # Optional scope for the hook
84
101
 
85
102
 
86
103
  @dataclass
87
- class VariableSubstitutionExpression(ASTNode):
88
- name: str
89
- scope: Optional[str]
104
+ class RawBlock(ASTNode):
105
+ """Raw block of Minecraft commands."""
106
+ content: str
90
107
 
91
108
 
92
109
  @dataclass
93
- class LiteralExpression(ASTNode):
94
- value: str
95
- type: str
110
+ class SayCommand(ASTNode):
111
+ """Say command that auto-converts to tellraw."""
112
+ message: str
113
+ variables: List[VariableSubstitution] # Variables to substitute
96
114
 
97
115
 
98
116
  @dataclass
99
- class BinaryExpression(ASTNode):
100
- left: Any
101
- operator: str
102
- right: Any
117
+ class TellrawCommand(ASTNode):
118
+ """Tellraw command with JSON structure."""
119
+ target: str # @s, @a, etc.
120
+ json_content: str
103
121
 
104
122
 
105
123
  @dataclass
106
- class HookDeclaration(ASTNode):
107
- hook_type: str
108
- function_name: str
124
+ class ExecuteCommand(ASTNode):
125
+ """Execute command."""
126
+ command: str
109
127
 
110
128
 
111
129
  @dataclass
112
- class TagDeclaration(ASTNode):
113
- tag_type: str
114
- name: str
115
- values: List[str]
130
+ class ScoreboardCommand(ASTNode):
131
+ """Scoreboard command."""
132
+ command: str
116
133
 
117
134
 
135
+ # Expression nodes
118
136
  @dataclass
119
- class RecipeDeclaration(ASTNode):
120
- name: str
121
- file_path: str
137
+ class BinaryExpression(ASTNode):
138
+ """Binary expression with operator."""
139
+ left: Any
140
+ operator: str # +, -, *, /, ==, !=, >, <, >=, <=
141
+ right: Any
122
142
 
123
143
 
124
144
  @dataclass
125
- class LootTableDeclaration(ASTNode):
126
- name: str
127
- file_path: str
145
+ class UnaryExpression(ASTNode):
146
+ """Unary expression."""
147
+ operator: str
148
+ operand: Any
128
149
 
129
150
 
130
151
  @dataclass
131
- class AdvancementDeclaration(ASTNode):
132
- name: str
133
- file_path: str
152
+ class ParenthesizedExpression(ASTNode):
153
+ """Expression in parentheses."""
154
+ expression: Any
134
155
 
135
156
 
136
157
  @dataclass
137
- class PredicateDeclaration(ASTNode):
138
- name: str
139
- file_path: str
158
+ class LiteralExpression(ASTNode):
159
+ """Literal value."""
160
+ value: Union[str, int, float]
161
+ type: str # string, number
140
162
 
141
163
 
142
164
  @dataclass
143
- class ItemModifierDeclaration(ASTNode):
144
- name: str
145
- file_path: str
165
+ class ScopeSelector(ASTNode):
166
+ """Scope selector like <@s>, <@a[team=red]>."""
167
+ selector: str # @s, @a[team=red], etc.
146
168
 
147
169
 
148
170
  @dataclass
149
- class StructureDeclaration(ASTNode):
150
- name: str
151
- file_path: str
171
+ class Program(ASTNode):
172
+ """Complete MDL program."""
173
+ pack: Optional[PackDeclaration]
174
+ namespace: Optional[NamespaceDeclaration]
175
+ tags: List[TagDeclaration]
176
+ variables: List[VariableDeclaration]
177
+ functions: List[FunctionDeclaration]
178
+ hooks: List[HookDeclaration]
179
+ statements: List[ASTNode] # Top-level statements