minecraft-datapack-language 15.3.3__py3-none-any.whl → 15.3.5__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.
@@ -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.3.3'
32
- __version_tuple__ = version_tuple = (15, 3, 3)
31
+ __version__ = version = '15.3.5'
32
+ __version_tuple__ = version_tuple = (15, 3, 5)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -423,8 +423,23 @@ def _process_statement(statement: Any, namespace: str, function_name: str, state
423
423
 
424
424
  elif statement['type'] == 'function_call':
425
425
  func_name = statement['name']
426
- # Simple function call
427
- commands.append(f"function {namespace}:{func_name}")
426
+ scope = statement.get('scope')
427
+ func_namespace = statement.get('namespace', namespace) # Use specified namespace or current namespace
428
+
429
+ if scope:
430
+ # Handle scoped function call
431
+ if scope == 'global':
432
+ # Global scope uses the server armor stand
433
+ selector = "@e[type=armor_stand,tag=mdl_server,limit=1]"
434
+ else:
435
+ # Use the specified scope selector
436
+ selector = scope
437
+
438
+ # Generate execute as command
439
+ commands.append(f"execute as {selector} run function {func_namespace}:{func_name}")
440
+ else:
441
+ # Simple function call without scope
442
+ commands.append(f"function {func_namespace}:{func_name}")
428
443
 
429
444
  elif statement['type'] == 'raw_text':
430
445
  # Raw Minecraft commands
@@ -748,7 +763,24 @@ def _ast_to_pack(ast: Dict[str, Any], mdl_files: List[Path]) -> Pack:
748
763
  if statement.get('type') == 'command':
749
764
  function.commands.append(statement['command'])
750
765
  elif statement.get('type') == 'function_call':
751
- function.commands.append(f"function {statement['name']}")
766
+ func_name = statement['name']
767
+ scope = statement.get('scope')
768
+ func_namespace = statement.get('namespace', namespace_name) # Use specified namespace or current namespace
769
+
770
+ if scope:
771
+ # Handle scoped function call
772
+ if scope == 'global':
773
+ # Global scope uses the server armor stand
774
+ selector = "@e[type=armor_stand,tag=mdl_server,limit=1]"
775
+ else:
776
+ # Use the specified scope selector
777
+ selector = scope
778
+
779
+ # Generate execute as command
780
+ function.commands.append(f"execute as {selector} run function {func_namespace}:{func_name}")
781
+ else:
782
+ # Simple function call without scope
783
+ function.commands.append(f"function {func_namespace}:{func_name}")
752
784
  elif statement.get('type') == 'variable_assignment':
753
785
  # Handle variable assignments
754
786
  var_name = statement['name']
@@ -589,9 +589,39 @@ class MDLParser:
589
589
  name_token = self._match(TokenType.STRING)
590
590
  name = name_token.value.strip('"').strip("'")
591
591
 
592
+ # Check for scope selector after function name
593
+ scope = None
594
+ if '<' in name and name.endswith('>'):
595
+ # Extract scope selector from function name
596
+ parts = name.split('<', 1)
597
+ if len(parts) == 2:
598
+ function_name = parts[0]
599
+ scope_selector = parts[1][:-1] # Remove closing >
600
+ scope = scope_selector
601
+ name = function_name
602
+ else:
603
+ # Malformed scope selector
604
+ raise create_parser_error(
605
+ message="Malformed scope selector in function call",
606
+ file_path=self.source_file,
607
+ line=self._peek().line,
608
+ column=self._peek().column,
609
+ line_content=name,
610
+ suggestion="Use format: function \"namespace:function_name<@selector>\""
611
+ )
612
+
613
+ # Extract function name from namespace:function_name format
614
+ if ':' in name:
615
+ namespace_parts = name.split(':', 1)
616
+ if len(namespace_parts) == 2:
617
+ namespace_name = namespace_parts[0]
618
+ function_name = namespace_parts[1]
619
+ # Store both namespace and function name
620
+ return {"type": "function_call", "name": function_name, "scope": scope, "namespace": namespace_name}
621
+
592
622
  self._match(TokenType.SEMICOLON)
593
623
 
594
- return {"type": "function_call", "name": name}
624
+ return {"type": "function_call", "name": name, "scope": scope}
595
625
 
596
626
  def _parse_execute_statement(self) -> ExecuteStatement:
597
627
  """Parse execute statement."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 15.3.3
3
+ Version: 15.3.5
4
4
  Summary: Compile JavaScript-style MDL language or Python API into a Minecraft datapack (1.21+ ready). Features variables, control flow, error handling, and VS Code extension.
5
5
  Project-URL: Homepage, https://www.mcmdl.com
6
6
  Project-URL: Documentation, https://www.mcmdl.com/docs
@@ -1,8 +1,8 @@
1
1
  minecraft_datapack_language/__init__.py,sha256=i-qCchbe5b2Fshgc6yCU9mddOLs2UBt9SAcLqfUIrT0,606
2
- minecraft_datapack_language/_version.py,sha256=C5nmvQW6PxdqCTZDxt9kfZN_cSMbbiYTuFuRiksPIN4,706
2
+ minecraft_datapack_language/_version.py,sha256=NdqjbaB72vB3alACXOO2w7dz3_6tduzQNYfib3o1u74,706
3
3
  minecraft_datapack_language/ast_nodes.py,sha256=pgjI2Nlap3ixFPgWqGSkqncG9zB91h5BKgRjtcJqMew,2118
4
4
  minecraft_datapack_language/cli.py,sha256=p5A_tEEXugN2NhQFbbgfwi4FxbWYD91RWeKR_A3Vuec,6263
5
- minecraft_datapack_language/cli_build.py,sha256=VfFkfDCDPEd2KC8L70NXXNPXEf9tMe5Lc6UWX1n6V9I,42139
5
+ minecraft_datapack_language/cli_build.py,sha256=owE_cAA3HH7n3LjIIIgyDEHPPB-EyubrwR0NS9mUufY,43924
6
6
  minecraft_datapack_language/cli_check.py,sha256=bPq9gHsxQ1CIiftkrAtRCifWkVAyjp5c8Oay2NNQ1qs,6277
7
7
  minecraft_datapack_language/cli_help.py,sha256=jUTHUQBONAZKVTdQK9tNPXq4c_6xpsafNOvHDjkEldg,12243
8
8
  minecraft_datapack_language/cli_new.py,sha256=uaKH0VBC43XBt_Hztc35-BfC9bYlsDdLbAfe_42rrtI,8235
@@ -13,12 +13,12 @@ minecraft_datapack_language/linter.py,sha256=7UqbygC5JPCGg-BSOq65NB2xEJBu_OUOYII
13
13
  minecraft_datapack_language/mdl_errors.py,sha256=a_-683gjF3gfGRpDMbRgCXmXD9_aYYBmLodNH6fe29A,11596
14
14
  minecraft_datapack_language/mdl_lexer_js.py,sha256=F8I6A2CjV1sGn8a7OgG66nRKm-0jKxQpOq3fkUgkYlA,26201
15
15
  minecraft_datapack_language/mdl_linter.py,sha256=z85xoAglENurCh30bR7kEHZ_JeMxcYaLDcGNRAl-RAI,17253
16
- minecraft_datapack_language/mdl_parser_js.py,sha256=DghfDnBxMSs3Bfo1IgxkmeY6Er-3ceeQkKwEn12u6w8,38776
16
+ minecraft_datapack_language/mdl_parser_js.py,sha256=Ap7EDpC5wbu1qFmC8htzd8rRqSyYugt58h0AppfDD6s,40171
17
17
  minecraft_datapack_language/pack.py,sha256=nYiXQ3jgJlDfc4m-65f7C2LFhDRioaUU_XVy6Na4SJI,34625
18
18
  minecraft_datapack_language/utils.py,sha256=Aq0HAGlXqj9BUTEjaEilpvzEW0EtZYYMMwOqG9db6dE,684
19
- minecraft_datapack_language-15.3.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
20
- minecraft_datapack_language-15.3.3.dist-info/METADATA,sha256=7Pq3PGVrp363uw0e1R6ObS7u_9BtXhhb4iLHi8FzPXQ,35229
21
- minecraft_datapack_language-15.3.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
22
- minecraft_datapack_language-15.3.3.dist-info/entry_points.txt,sha256=c6vjBeCiyQflvPHBRyBk2nJCSfYt3Oc7Sc9V87ySi_U,108
23
- minecraft_datapack_language-15.3.3.dist-info/top_level.txt,sha256=ADtFI476tbKLLxEAA-aJQAfg53MA3k_DOb0KTFiggfw,28
24
- minecraft_datapack_language-15.3.3.dist-info/RECORD,,
19
+ minecraft_datapack_language-15.3.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
20
+ minecraft_datapack_language-15.3.5.dist-info/METADATA,sha256=TM4dfgr2yrEgiZ9Utqsl9JLpqcqMvtbE8PrgWbKjjbY,35229
21
+ minecraft_datapack_language-15.3.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
22
+ minecraft_datapack_language-15.3.5.dist-info/entry_points.txt,sha256=c6vjBeCiyQflvPHBRyBk2nJCSfYt3Oc7Sc9V87ySi_U,108
23
+ minecraft_datapack_language-15.3.5.dist-info/top_level.txt,sha256=ADtFI476tbKLLxEAA-aJQAfg53MA3k_DOb0KTFiggfw,28
24
+ minecraft_datapack_language-15.3.5.dist-info/RECORD,,