Skip to content

Commit 32a0ab6

Browse files
committed
feat: add temp_score_prefix and const_score_prefix options
1 parent e23bacf commit 32a0ab6

9 files changed

Lines changed: 106 additions & 7 deletions

File tree

bolt_expressions/ast.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def strip_run_execute(self, node: AstCommand):
3838
class ConstantScoreChecker(Reducer):
3939
objective: str = required_field()
4040
callback: Callable[[int], None] = required_field()
41-
pattern: re.Pattern[str] = re.compile(r"^\$([-+]?\d+)\b")
41+
pattern: re.Pattern[str] = re.compile(r"^[$#]([-+]?\d+)\b")
4242

4343
@cached_property
4444
def objective_node(self):

bolt_expressions/node.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ class ExpressionOptions(BaseModel):
8686
temp_storage: str = "bolt.expr:temp"
8787
init_path: str = "init_expressions"
8888
objective_prefix: str = ""
89+
const_score_prefix: str = "$"
90+
temp_score_prefix: str = "$"
8991
default_nbt_type: NbtTypeString = "int"
9092
default_floating_nbt_type: str = "double"
9193

@@ -226,12 +228,16 @@ def __init__(self, ctx: Context):
226228
self.generator = self.ctx.generate
227229

228230
self.temp_score = TempScoreManager(
229-
self.opts.temp_objective, format=lambda _: "$" + next(self.identifiers)
231+
objective=self.opts.temp_objective,
232+
prefix=self.opts.temp_score_prefix,
233+
format=lambda _: self.opts.temp_score_prefix + next(self.identifiers),
230234
)
231235
self.temp_data = TempDataManager(
232236
"storage", self.opts.temp_storage, format=lambda _: next(self.identifiers)
233237
)
234-
self.const_score = ConstScoreManager(self.opts.const_objective)
238+
self.const_score = ConstScoreManager(
239+
self.opts.const_objective, self.opts.const_score_prefix
240+
)
235241

236242
self.type_caster = TypeCaster(ctx=self.ctx)
237243
self.type_checker = TypeChecker(ctx=self.ctx)

bolt_expressions/optimizer.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -481,9 +481,18 @@ class StringDataTuple(NamedTuple):
481481
@dataclass
482482
class TempScoreManager:
483483
objective: str
484+
prefix: str
484485

485-
counter: int = field(default=0, init=False)
486-
format: Callable[[int], str] = field(default=lambda n: f"$s{n}") # type: ignore
486+
counter: int
487+
format: Callable[[int], str]
488+
489+
def __init__(
490+
self, objective: str, prefix: str, format: Callable[[int], str] | None = None
491+
):
492+
self.objective = objective
493+
self.prefix = prefix
494+
self.format = format if format is not None else lambda n: f"{self.prefix}{n}"
495+
self.counter = 0
487496

488497
def __call__(self) -> ScoreTuple:
489498
name = self.format(self.counter)
@@ -540,11 +549,12 @@ def override(self, format: Callable[[int], str] | None = None, reset: bool = Fal
540549
@dataclass
541550
class ConstScoreManager:
542551
objective: str
552+
prefix: str
543553

544554
constants: set[int] = field(default_factory=set, init=False)
545555

546556
def format(self, value: int) -> str:
547-
return f"${value}"
557+
return f"{self.prefix}{value}"
548558

549559
def create(self, value: int) -> ScoreTuple:
550560
self.constants.add(value)
@@ -1466,7 +1476,9 @@ def rename_temp_scores(
14661476
ignored_sources.add(source)
14671477

14681478
with (
1469-
opt.temp_score.override(format=lambda n: f"$i{n}", reset=True),
1479+
opt.temp_score.override(
1480+
format=lambda n: f"{opt.temp_score.prefix}i{n}", reset=True
1481+
),
14701482
opt.temp_data.override(format=lambda n: f"i{n}", reset=True),
14711483
):
14721484
replace_map: dict[SourceTuple, IrSource] = {}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: bolt-expressions-score-prefix
2+
3+
data_pack:
4+
load: [src]
5+
pack_format: 10
6+
7+
require:
8+
- bolt
9+
- bolt_expressions
10+
11+
pipeline:
12+
- mecha
13+
14+
output: dist
15+
16+
meta:
17+
generate_namespace: test
18+
bolt_expressions:
19+
const_score_prefix: "#"
20+
temp_score_prefix: "__"
21+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from bolt_expressions import Scoreboard
2+
3+
abc = Scoreboard("abc.obj")
4+
5+
6+
if score var (abc["@s"] % 5) matches 0
7+
8+
abc["@s"] = (abc["#value"] * 2 + 1) / (abc["#denom"] * 5)
9+
abc["@s"] = abc["#value"] * 3 * 4 * 6 * 7 * 8
10+
abc["@s"] = abc["#value"] * -5
11+
abc["@s"] += 10 + abc["#value"] * 123
12+
abc["@s"] %= 50 + abc["#value"] * 0
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"values": [
3+
"test:init_expressions"
4+
]
5+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
scoreboard objectives add bolt.expr.const dummy
2+
scoreboard objectives add bolt.expr.temp dummy
3+
scoreboard players set #5 bolt.expr.const 5
4+
scoreboard players set #2 bolt.expr.const 2
5+
scoreboard players set #3 bolt.expr.const 3
6+
scoreboard players set #4 bolt.expr.const 4
7+
scoreboard players set #6 bolt.expr.const 6
8+
scoreboard players set #7 bolt.expr.const 7
9+
scoreboard players set #8 bolt.expr.const 8
10+
scoreboard players set #-5 bolt.expr.const -5
11+
scoreboard players set #123 bolt.expr.const 123
12+
scoreboard players set #0 bolt.expr.const 0
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
scoreboard players operation __2384k242hd495_0 bolt.expr.temp = @s abc.obj
2+
scoreboard players operation __2384k242hd495_0 bolt.expr.temp %= #5 bolt.expr.const
3+
execute if score __2384k242hd495_0 bolt.expr.temp matches 0
4+
scoreboard players operation @s abc.obj = #value abc.obj
5+
scoreboard players operation @s abc.obj *= #2 bolt.expr.const
6+
scoreboard players add @s abc.obj 1
7+
scoreboard players operation __i0 bolt.expr.temp = #denom abc.obj
8+
scoreboard players operation __i0 bolt.expr.temp *= #5 bolt.expr.const
9+
scoreboard players operation @s abc.obj /= __i0 bolt.expr.temp
10+
scoreboard players operation @s abc.obj = #value abc.obj
11+
scoreboard players operation @s abc.obj *= #3 bolt.expr.const
12+
scoreboard players operation @s abc.obj *= #4 bolt.expr.const
13+
scoreboard players operation @s abc.obj *= #6 bolt.expr.const
14+
scoreboard players operation @s abc.obj *= #7 bolt.expr.const
15+
scoreboard players operation @s abc.obj *= #8 bolt.expr.const
16+
scoreboard players operation @s abc.obj = #value abc.obj
17+
scoreboard players operation @s abc.obj *= #-5 bolt.expr.const
18+
scoreboard players operation __i0 bolt.expr.temp = #value abc.obj
19+
scoreboard players operation __i0 bolt.expr.temp *= #123 bolt.expr.const
20+
scoreboard players add __i0 bolt.expr.temp 10
21+
scoreboard players operation @s abc.obj += __i0 bolt.expr.temp
22+
scoreboard players operation __i0 bolt.expr.temp = #value abc.obj
23+
scoreboard players operation __i0 bolt.expr.temp *= #0 bolt.expr.const
24+
scoreboard players add __i0 bolt.expr.temp 50
25+
scoreboard players operation @s abc.obj %= __i0 bolt.expr.temp
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"pack": {
3+
"pack_format": 10,
4+
"description": ""
5+
}
6+
}

0 commit comments

Comments
 (0)