Releases: CrackedPolishedBlackstoneBricksMC/voldeloom
v2.4
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 alwaystrue
.
- 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. acanSustainPlant
-related crash on 1.4.7
- Fixes several
Breaking changes
srgsAsFallback
as a configurable option is removed. It is now effectively set totrue
.- 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
andfalse
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 ofsrgsAsFallback = 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_
orfield_
-prefixed names.
- Proguarded names can now only show up in your dev workspace if they are not mentioned in your
- 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
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
becomesimportBaseZip
unmapClass
becomesremoveClass
(singleString
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-houseNaiveRenamer
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
- The main difference is that
- 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
- I researched how MCP actually works, instead of simply throwing
- 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
- Most files in your Gradle cache will now end in an 8-character hash of some metadata about their provenance. For example,
- 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 csvsimportClasses
imports (c)srgs/packages only (from a zip)importFieldsMethods
imports fields/methods csvs only (from a zip)removeClasses
deletes class mappingsimportMCPBot
is a convenience to import mappings from an MCPBot mirror service- try
importMCPBot("https://mcpbot.unascribed.com/", minecraftVersion, "stable", "12-1.7.10")
!
- try
- 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
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
- 1.3.2 is ok but there is a wall of warnings about Minecraft being in the
- 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)
andunmapClass(Collection<String>)
, which remove class mappings- functionally replaces
hackHackHackDontMapTheseClasses
- functionally replaces
- conceptually, a blank MCP mappings set is created, then each command visits it top-to-bottom
- commands that take
Object
can accept:File
orPath
argumentsDependency
objects from gradleString
s:- if it "looks like a URL" (starts with
http:/
orhttps:/
), it will be automatically downloaded (to(project dir)/.gradle/voldeloom-cache/layered-mappings/downloads
) - if not, it will be treated as a maven coordinate
- if it "looks like a URL" (starts with
- computed mappings go in
(project dir)/.gradle/voldeloom-cache/layered-mappings/(hash).zip
, wherehash
is computed from the settings on each layer (ideally you shouldn't have to manually cachebust mappings when messing around with the settings)
- Access with
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" fromEnvironment
toSideOnly
)
- It was used only for
- Removed
remapSources
andmigrateMappings
(and removed their dependencies, Mercury andlorenz-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
andgenSourcesRemapLineNumbers
plumbing tasks have been removed and merged into the regulargenSources
task- this alone somehow melted away like 5 zillion lines of complexity in afterEvaluate
v2.1
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 aforgeCapabilities
block insidevolde
. - 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
.
- If you used coremods, delete the old ones from
- 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
- Reimplementable on the buildscript end, with the obviously-temporary setting
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-memoryTinyTree
as well. - Added
-Pvoldeloom.offline
and-Pvoldeloom.refreshDependencies
flags, that mirror Gradle's own but only affect things inside Voldeloom.