Skip to content

Releases: CrackedPolishedBlackstoneBricksMC/voldeloom

v2.4

15 Jun 01:50
Compare
Choose a tag to compare

Available as agency.highlysuspect:voldeloom:2.4 on the repo.sleeping.town Maven server.

See CHANGELOG.md for more details.

Full diff: v2.3...v2.4

Critical bugfixes

  • Very important fix: Fix reobfuscation of method calls that mention a class from Minecraft in their parameter list or return type.
    • Which is, frankly, "most of them".
    • Bug only cropped up if you didn't have srgsAsFallback = true. This option has been removed and is now effectively always true.
  • Fix the Forge-added class amq$1/net/minecraft/src/Block$1 getting put in the wrong spot (for like, the millionth time)
    • Fixes several IllegalAccessError crashes in the dev workspace, e.g. a canSustainPlant-related crash on 1.4.7

Breaking changes

  • srgsAsFallback as a configurable option is removed. It is now effectively set to true.
    • Proguarded names can now only show up in your dev workspace if they are not mentioned in your joined.srg (which'd probably mean you're using mappings for the wrong version).
    • Supporting both true and false turned out to be very complicated and buggy for little benefit. false mode wasn't working properly anyway; it still dumped SRG names into your workspace - and did you know that enum values weren't given MCP names? A correct implementation of srgsAsFallback = false stripped all enum value names. That's no good.
    • If your mod was calling methods or accessing fields with their proguarded names, you'll need to update it to use the func_ or field_-prefixed names.
  • The run dir is now correctly resolved against the current subproject project directory, instead of the root project directory.
    • Sorry about that. If you were using voldeloom in a subproject, you can probably remove your custom runDir now.

Changes

  • Bumped internal mappings version. Expect a slightly longer import time after doing this update.

v2.3

29 Apr 03:51
Compare
Choose a tag to compare

Available as agency.highlysuspect:voldeloom:2.3 on the repo.sleeping.town Maven server.

See CHANGELOG.md for more details.

Full diff: v2.2...v2.3

Breaking changes

Some volde.layered method names are different, sorry:

  • baseZip becomes importBaseZip
  • unmapClass becomes removeClass (single String argument) / removeClasses (Collection<String> argument)

Changes

  • Rewrote basically all of the mappings guts
    • I researched how MCP actually works, instead of simply throwing tiny-remapper at everything
    • tiny-remapper is used where MCP uses RetroGuard/SpecialSource, and an in-house NaiveRenamer is used where MCP uses "regular expressions over the source code"
      • The main difference is that NaiveRenamer also operates over Java bytecode as well as source code, but uses the same "just find-and-replace" algorithm that ignores things like method descriptors.
      • deobf: tiny-remapper is used for the initial deobfuscation to SRG names, NaiveRenamer takes it the rest of the way to named
      • reobf: the SRG is extended to cover MCP names instead of just SRGs (mirroring a find-replace step in MCP), inverted, and tiny-remapper is used
    • Side effect: maybe improves --refresh-dependencies performance a bit, NaiveRenamer is very fast (because it doesn't do much)
    • Deleted lots of tiny-remapper stuff that fell unused due to this change
  • Reobf-to-srg also works in the new mapping system
    • release 1.5/1.6/1.7 mods again! maybe! (test them!!!)
  • tiny-remapper output is postprocessed to remove things not compatible with ASM api level 4, like the parameter-name table
  • .srg parser can also handle the more compact MCPBot .csrg format too
  • Fixed cache soundness issues
    • Most files in your Gradle cache will now end in an 8-character hash of some metadata about their provenance. For example, version_manifest_{HASH}.json's filename now carries the URL that the manifest was downloaded from (if using the customManifestUrl feature).
    • The metadata trickles into files derived from it, so minecraft-1.4.7-client-{HASH}.jar's filename includes the same information, and so does the binpatched client, and the merged jar...
    • This fixes longstanding cache-coherency bugs, where changing the configuration of a file at the top of the tree would leave stale cache entries downstream from it, requiring a --refresh-dependencies to fix.
    • This also removes the need to store files in the per-project Gradle cache. Even if you use customized mappings in your project, it will not clash with other files in the cache.
    • I should probably expose the actual, not-hashed metadata somewhere
  • Linemapping now works, fixing stacktrace line numbers and debugger breakpoints
    • didn't understand what it was before 😅
    • After running genSources, might need to refresh your gradle to get your IDE to use the linemapped jar.
  • fixed 1.7.10 asset loading
  • Small performance/memory improvements
    • Forge binpatches only parsed when it's necessary to binpatch a jar
    • Reduced the amount of Files.readAllBytes calls, instead reading the files in chunks
    • Data structure used for packages.csv parsing is more memory-efficient
    • Mapping-related files are extracted from the mappings archive in a single pass
  • New interfaces for volde.layered:
    • importBaseZip imports (c)srgs, packages.csv, fields/methods csvs
    • importClasses imports (c)srgs/packages only (from a zip)
    • importFieldsMethods imports fields/methods csvs only (from a zip)
    • removeClasses deletes class mappings
    • importMCPBot is a convenience to import mappings from an MCPBot mirror service
      • try importMCPBot("https://mcpbot.unascribed.com/", minecraftVersion, "stable", "12-1.7.10")!
    • if that's not enough, modify lets you directly interface with the mcp mappings builder
      • I'm not really sure what people need/want out of layered mappings so if there's something i'm missing, let me know

v2.2

19 Mar 23:46
Compare
Choose a tag to compare

Available as agency.highlysuspect:voldeloom:2.2 on the repo.sleeping.town Maven server.

See CHANGELOG.md for more details.

Full diff: v2.1...v2.2

Note: Remapping is in a bit of a weird state. I'm about to do massive overhauls to the system, this is sorta a release cut in haste. I would probably still recommend using 2.1.

New

  • Preliminary support for Gradle 8
    • "preliminary" as in "I don't know if it's super busted, but at least the basics work"
  • The 1.3.2, 1.6.4, and 1.7.10 development environments work
    • 1.3.2 is ok but there is a wall of warnings about Minecraft being in the net.minecraft.src namespace, i think they're harmless(?)
    • 1.6.4 i'm a bit unsure about (just because binpatches are pretty weird to deal with) but it looks ok
    • 1.7.10 has janky unfinished MCP mappings because we are entering the MCPBot era now, and it can't read MCPBot exports just yet
  • Preliminary "layered mappings system"
    • Access with mappings volde.layered { ... }.
    • Available commands:
      • baseZip(Object), which parses the mappings through... the exact same mappings parsing system used before (look i said it was preliminary)
      • unmapClass(String) and unmapClass(Collection<String>), which remove class mappings
        • functionally replaces hackHackHackDontMapTheseClasses
    • conceptually, a blank MCP mappings set is created, then each command visits it top-to-bottom
    • commands that take Object can accept:
      • File or Path arguments
      • Dependency objects from gradle
      • Strings:
        • if it "looks like a URL" (starts with http:/ or https:/), it will be automatically downloaded (to (project dir)/.gradle/voldeloom-cache/layered-mappings/downloads)
        • if not, it will be treated as a maven coordinate
    • computed mappings go in (project dir)/.gradle/voldeloom-cache/layered-mappings/(hash).zip, where hash is computed from the settings on each layer (ideally you shouldn't have to manually cachebust mappings when messing around with the settings)

Changes

  • Dependency on Stitch removed
    • It was used only for JarMerger, and i now use a modified version (that doesn't need to "remap annotations" from Environment to SideOnly)
  • Removed remapSources and migrateMappings (and removed their dependencies, Mercury and lorenz-tiny). They might return later, but they're a maintenance burden while i prepare for the new mappings system, and there are no other mappings to migrate to other than MCP lol
  • Updated fabricmc fernflower.
    • This version can use multiple CPU cores to make it even faster. I didnt implement this, blame covers i think.
    • (i made it default to processor count minus 1, so u can actually use your computer in the mean time lmao)
  • The genSourcesDecompile and genSourcesRemapLineNumbers plumbing tasks have been removed and merged into the regular genSources task
    • this alone somehow melted away like 5 zillion lines of complexity in afterEvaluate

v2.1

18 Feb 03:40
Compare
Choose a tag to compare

Available as agency.highlysuspect:voldeloom:2.1 on the repo.sleeping.town Maven server.

See CHANGELOG.md for more details.

Full diff: v2.0...v2.1

Breaking changes

  • Changed Gradle extension name to volde { }.
  • Moved srgsAsFallback into a forgeCapabilities block inside volde.
  • Adjusted some file paths. This will probably cause some regeneration next time you start your workspace.
    • If you used coremods, delete the old ones from run/coremods.
  • Removed a hack that existed to make machine-deobfuscated Ears work in the workspace.
    • Reimplementable on the buildscript end, with the obviously-temporary setting hackHackHackDontMapTheseClasses

New things

  • Small system for "changing behavior of the plugin based on what era of Forge you're using".
  • Rudimentary support for custom access transformers (add files to the accessTransformers configuration)
  • Binpatches. Launching 1.6.4 doesn't quite work yet, but at least the dev workspace has Forge in it at all.

Other changes

  • Rewrote how genSources interacts with Fernflower. It may be slightly faster.
  • Rewrote the internal "dependency provider" system to be less garbage (major rearchitect).
  • Reduced retained size of in-memory MCP mappings by about 50%. Pass -Pvoldeloom.lowMemory to crush the in-memory TinyTree as well.
  • Added -Pvoldeloom.offline and -Pvoldeloom.refreshDependencies flags, that mirror Gradle's own but only affect things inside Voldeloom.

v2.0

10 Feb 03:49
Compare
Choose a tag to compare

First semi-working version of the Voldeloom fork, available as agency.highlysuspect:voldeloom:2.0 on Maven assuming i didnt fuck up CI