"""Волна N+43: vfbuild79 — 22 EF в vp.java (renderCircles/renderTextures/renderRings, по 2 лямбды на метод → суффиксы f/g в рамках одного switch). Запуск: python3 tools/waves_n43.py""" import os, re, sys ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) p = os.path.join(ROOT, "src/main/java/defpackage/vp.java") L = open(p, encoding="utf-8", errors="replace").read().splitlines() ok = True def edit(ln, *names): global ok i = ln - 1 new = L[i] for name in names: new = re.sub(rf"\b{name}\b", name, new) # placeholder, replaced below new = L[i] for name in names: new = re.sub(rf"\b{name}\b", name + "f", new) if new != L[i]: L[i] = new else: ok = False print(f"MISS {ln}: none of {names} in {L[i].strip()[:90]!r}") def editg(ln, *names): global ok i = ln - 1 new = L[i] for name in names: new = re.sub(rf"\b{name}\b", name + "g", new) if new != L[i]: L[i] = new else: ok = False print(f"MISS {ln}: none of {names} in {L[i].strip()[:90]!r}") def insert_before(ln, anchor_prev, anchor_next, decls): global ok ip = ln - 1 prev_ok = anchor_prev in L[ip - 1] next_ok = anchor_next in L[ip] done = decls[0] in "\n".join(L[max(0, ip - 12) : ip + 10]) if prev_ok and next_ok and not done: line = L[ip] indent = line[: len(line) - len(line.lstrip())] L[ip:ip] = [indent + d for d in decls] elif done: pass else: ok = False print( f"INSERT-MISS {ln}: prev={L[ip - 1].strip()[:70]!r} next={L[ip].strip()[:70]!r}" ) # --- edits (descending, suffix f = 1st lambda of method, g = 2nd) --- # renderRings L2 (g) editg(1205, "var6") editg(1190, "var4") # renderRings L1 (f) edit(1127, "var4") # renderTextures L2 (g) editg(1045, "var6") editg(1044, "var5") editg(1038, "var8") editg(1037, "var7") editg(1009, "var9") editg(1008, "var11") # renderTextures L1 (f) edit(964, "var11", "var9") # renderCircles L2 (g) editg(775, "var9", "var7") # renderCircles L1 (f) edit(732, "var11") edit(731, "var11") edit(720, "var4") edit(719, "var6") edit(718, "var5") edit(711, "var11") edit(695, "var9", "var7") # --- inserts (descending) --- insert_before( 1147, "boolean var10 = this.ringGlowSetting.isEnabled();", "var1.submitCustomGeometry(var2, textureLayer(RING_TEXTURE), (var6x, var7x) -> {", [ "final long var4g = var4;", "final float var6g = var6;", ], ) insert_before( 1114, "var4 = System.currentTimeMillis();", "this.rings.removeIf(var2x -> {", ["final long var4f = var4;"], ) insert_before( 996, "var17 = textureLayer((Identifier)var16);", "var1.submitCustomGeometry(var2, var17, (var10, var11x) -> {", [ "final int var5g = var5;", "final int var6g = var6;", "final float var7g = var7;", "final float var8g = var8;", "final long var9g = var9;", "final long var11g = var11;", ], ) insert_before( 940, "var11 = System.currentTimeMillis();", "this.textures.removeIf(var4x -> {", [ "final long var9f = var9;", "final long var11f = var11;", ], ) insert_before( 767, "var11 = 48;", "this.circles.removeIf(var4x -> {", [ "final long var7g = var7;", "final long var9g = var9;", ], ) insert_before( 677, "case 1353796141:", "var2.submitCustomGeometry(var1, arj.positionColor(), (var10, var11x) -> {", [ "final int var4f = var4;", "final float var5f = var5;", "final float var6f = var6;", "final long var7f = var7;", "final long var9f = var9;", "final int var11f = var11;", ], ) open(p, "w", encoding="utf-8").write("\n".join(L) + "\n") print("OK" if ok else "PROBLEMS") sys.exit(0 if ok else 1)