minecraft-datapack-language 15.4.37__py3-none-any.whl → 15.4.39__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.4.37'
32
- __version_tuple__ = version_tuple = (15, 4, 37)
31
+ __version__ = version = '15.4.39'
32
+ __version_tuple__ = version_tuple = (15, 4, 39)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -240,6 +240,8 @@ class MDLCompiler:
240
240
  functions_dir = namespace_dir / self.dir_map.function
241
241
  else:
242
242
  functions_dir = namespace_dir / "functions"
243
+ # Ensure functions dir exists
244
+ functions_dir.mkdir(parents=True, exist_ok=True)
243
245
 
244
246
  # Always create load function to initialize objectives; add tag only if on_load hooks exist
245
247
  has_on_load = any(h.hook_type == "on_load" for h in hooks)
@@ -313,6 +315,8 @@ class MDLCompiler:
313
315
  """Convert an AST statement to a Minecraft command."""
314
316
  if isinstance(statement, VariableAssignment):
315
317
  return self._variable_assignment_to_command(statement)
318
+ elif isinstance(statement, VariableDeclaration):
319
+ return self._variable_declaration_to_command(statement)
316
320
  elif isinstance(statement, SayCommand):
317
321
  return self._say_command_to_command(statement)
318
322
  elif isinstance(statement, RawBlock):
@@ -328,6 +332,9 @@ class MDLCompiler:
328
332
 
329
333
  def _variable_assignment_to_command(self, assignment: VariableAssignment) -> str:
330
334
  """Convert variable assignment to scoreboard command."""
335
+ # Auto-declare objective on first use
336
+ if assignment.name not in self.variables:
337
+ self.variables[assignment.name] = assignment.name
331
338
  objective = self.variables.get(assignment.name, assignment.name)
332
339
  scope = assignment.scope.strip("<>")
333
340
 
@@ -343,6 +350,24 @@ class MDLCompiler:
343
350
  # Simple value - use direct assignment
344
351
  value = self._expression_to_value(assignment.value)
345
352
  return f"scoreboard players set {scope} {objective} {value}"
353
+
354
+ def _variable_declaration_to_command(self, decl: VariableDeclaration) -> str:
355
+ """Handle var declarations appearing inside function bodies.
356
+ Ensure objective is registered and optionally set initial value.
357
+ """
358
+ objective = self.variables.get(decl.name, decl.name)
359
+ # Register objective so load function adds it
360
+ self.variables[decl.name] = objective
361
+ # If there is an initial value, set it in current context
362
+ scope = decl.scope.strip("<>")
363
+ init = None
364
+ try:
365
+ init = self._expression_to_value(decl.initial_value)
366
+ except Exception:
367
+ init = None
368
+ if init is not None:
369
+ return f"scoreboard players set {scope} {objective} {init}"
370
+ return f"# var {decl.name} declared"
346
371
 
347
372
  def _say_command_to_command(self, say: SayCommand) -> str:
348
373
  """Convert say command to tellraw command with JSON formatting."""
@@ -420,6 +445,9 @@ class MDLCompiler:
420
445
  if isinstance(stmt, VariableAssignment):
421
446
  cmd = self._variable_assignment_to_command(stmt)
422
447
  if_body_lines.append(cmd)
448
+ elif isinstance(stmt, VariableDeclaration):
449
+ cmd = self._variable_declaration_to_command(stmt)
450
+ if_body_lines.append(cmd)
423
451
  elif isinstance(stmt, SayCommand):
424
452
  cmd = self._say_command_to_command(stmt)
425
453
  if_body_lines.append(cmd)
@@ -468,6 +496,9 @@ class MDLCompiler:
468
496
  if isinstance(stmt, VariableAssignment):
469
497
  cmd = self._variable_assignment_to_command(stmt)
470
498
  else_body_lines.append(cmd)
499
+ elif isinstance(stmt, VariableDeclaration):
500
+ cmd = self._variable_declaration_to_command(stmt)
501
+ else_body_lines.append(cmd)
471
502
  elif isinstance(stmt, SayCommand):
472
503
  cmd = self._say_command_to_command(stmt)
473
504
  else_body_lines.append(cmd)
@@ -513,6 +544,9 @@ class MDLCompiler:
513
544
  if isinstance(stmt, VariableAssignment):
514
545
  cmd = self._variable_assignment_to_command(stmt)
515
546
  loop_body_lines.append(cmd)
547
+ elif isinstance(stmt, VariableDeclaration):
548
+ cmd = self._variable_declaration_to_command(stmt)
549
+ loop_body_lines.append(cmd)
516
550
  elif isinstance(stmt, SayCommand):
517
551
  cmd = self._say_command_to_command(stmt)
518
552
  loop_body_lines.append(cmd)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 15.4.37
3
+ Version: 15.4.39
4
4
  Summary: Compile MDL language with explicit scoping 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,18 +1,18 @@
1
1
  minecraft_datapack_language/__init__.py,sha256=0KVXBE4ScRaRUrf83aA2tVB-y8A_jplyaxVvtHH6Uw0,1199
2
- minecraft_datapack_language/_version.py,sha256=V_qEje0L1fle9Zgi1jq8YdwcuPBRencAcZSzWIA4Qxo,708
2
+ minecraft_datapack_language/_version.py,sha256=9Ufx0gE3v3XMp3BFsd82w98Wj5WJy1_7_P36vYE2gnA,708
3
3
  minecraft_datapack_language/ast_nodes.py,sha256=nbWrRz137MGMRpmnq8QkXNzrtlaCgyPEknytbkrS_M8,3899
4
4
  minecraft_datapack_language/cli.py,sha256=Vk35mPYm8saMUbBNRDTeoqKiLq9_do_ZeRatFWN2EQs,9824
5
5
  minecraft_datapack_language/dir_map.py,sha256=HmxFkuvWGkzHF8o_GFb4BpuMCRc6QMw8UbmcAI8JVdY,1788
6
- minecraft_datapack_language/mdl_compiler.py,sha256=skub5NV7BLsE1MuuU_kl4IksO2I9UPp2JH4tROUQjTk,39360
6
+ minecraft_datapack_language/mdl_compiler.py,sha256=mV5qZzqriObutwsaLPmddRQdLIGJg4jiTNKg1A98Fyk,41055
7
7
  minecraft_datapack_language/mdl_errors.py,sha256=r0Gu3KhoX1YLPAVW_iO7Q_fPgaf_Dv9tOGSOdKNSzmw,16114
8
8
  minecraft_datapack_language/mdl_lexer.py,sha256=CjbEUpuuF4eU_ucA_WIhw6wSMcHGk2BchtQ0bLAGvwg,22033
9
9
  minecraft_datapack_language/mdl_linter.py,sha256=z85xoAglENurCh30bR7kEHZ_JeMxcYaLDcGNRAl-RAI,17253
10
10
  minecraft_datapack_language/mdl_parser.py,sha256=aQPKcmATM9BOMzO7vCXmMdxU1qjOJNLCSAKJopu5h3g,23429
11
11
  minecraft_datapack_language/python_api.py,sha256=ImYULwBvJ0Qb0Tf6LFyXv-gTPGZ8njX7_La0HJKuk-o,8677
12
12
  minecraft_datapack_language/utils.py,sha256=Aq0HAGlXqj9BUTEjaEilpvzEW0EtZYYMMwOqG9db6dE,684
13
- minecraft_datapack_language-15.4.37.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
14
- minecraft_datapack_language-15.4.37.dist-info/METADATA,sha256=lJpJlZEXemeoFqox596f4AstUiM3IJld_NIz6rxCGRo,8360
15
- minecraft_datapack_language-15.4.37.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
- minecraft_datapack_language-15.4.37.dist-info/entry_points.txt,sha256=c6vjBeCiyQflvPHBRyBk2nJCSfYt3Oc7Sc9V87ySi_U,108
17
- minecraft_datapack_language-15.4.37.dist-info/top_level.txt,sha256=ADtFI476tbKLLxEAA-aJQAfg53MA3k_DOb0KTFiggfw,28
18
- minecraft_datapack_language-15.4.37.dist-info/RECORD,,
13
+ minecraft_datapack_language-15.4.39.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
14
+ minecraft_datapack_language-15.4.39.dist-info/METADATA,sha256=5eHZsdPGNCYfRdfWqW0Vy465ScEkfMpMfRhACQ7b-CI,8360
15
+ minecraft_datapack_language-15.4.39.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
+ minecraft_datapack_language-15.4.39.dist-info/entry_points.txt,sha256=c6vjBeCiyQflvPHBRyBk2nJCSfYt3Oc7Sc9V87ySi_U,108
17
+ minecraft_datapack_language-15.4.39.dist-info/top_level.txt,sha256=ADtFI476tbKLLxEAA-aJQAfg53MA3k_DOb0KTFiggfw,28
18
+ minecraft_datapack_language-15.4.39.dist-info/RECORD,,