Running changelog document, will be added to as I commit things.
No changes yet.
- Supply required arguments to launch 1.6 and 1.7 instead of requiring you to customize the run config
- Fix 1.2.5 and make it "nice" (split sourcesets etc)
- Read data from the Exceptor, maybe apply parameter names
- 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
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.
- Bumped internal mappings version. Expect a slightly longer import time after doing this update.
Some volde.layered
method names are different, sorry:
baseZip
becomesimportBaseZip
unmapClass
becomesremoveClass
(singleString
argument) /removeClasses
(Collection<String>
argument)
- 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
Remapping is in a bit of a weird state, but i'm about to do massive breaking changes to the system, so this is a release cut in haste
- 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
- 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
- Changed the Gradle extension's name from
minecraft { }
tovolde { }
.- Preparation for adding some more free-functions to the extension (it'd be weird if you referred to them with
minecraft
) - Possibly preparation for "getting out of the way of other extensions", so you can use it and another Minecraft plugin in the same project? Maybe?
- Echoes what Loom did - the name is more accurate
- Preparation for adding some more free-functions to the extension (it'd be weird if you referred to them with
- Moved
srgsAsFallback
.- Replace it with
forgeCapabilities { srgsAsFallback = true }
.
- Replace it with
- Adjusted file paths to some intermediate products, to be more consistent:
- Forge's libraries are downloaded to a folder containing the complete Forge artifact name, not just the version
- Mappings have one canonical name, which also contains the complete mappings artifact name (instead of ad-hoc gluing the artifact id and version together in a slightly different way every time)
- Mapped Minecrafts, as well as -sources and the like, are in
(cache dir)/mapped/(mappings name)/(...).jar
. - (idk if this is breaking) - Mapped Minecraft is added to the project using a file dependency instead of a
flatDir
dependency. - (workspace-breaking) - You may need to delete files using the old naming convention from
./run/coremods
.
- The hack that erased some classes from the mappings so Ears 1.4.7 would work in deobf is removed
- Replaced with
hackHackHackDontMapTheseClasses
property insidevolde
- As the name suggests ™️ i will remove it later when i get the good mappings system up
- Replaced with
- Small system for "changing behavior of the plugin based on what era of Forge you're using".
- Configure this with
volde { forgeCapabilities { /* ... */ } }
. - Set
distributionNamingScheme
to pick which naming scheme your mods are remapped to. - Set
srgsAsFallback
to assert that this Forge version maps everything to SRG names; don't set it to assert that unmapped names show through as proguarded names. - If you don't set them, they will be guessed from the Minecraft version and Forge version:
distributionNamingScheme
isintermediary
since 1.5 andofficial
before itsrgsAsFallback
isfalse
since 1.5 andtrue
before it
- Configure this with
- Rudimentary custom access transformers.
- Specify dependencies in the
accessTransformers
configuration, e.g.accessTransformers files("./src/main/resources/my_ats.cfg")
. - (currently you will need to refresh dependencies to force-update artifacts derived from it... sorry)
- The plugin will not create a Forge coremod for you that will cause ATs to be found in production - you must do this yourself.
- The plugin will not retrieve ATs transitively from mod dependencies.
- Forge has them configurable through Java in the coremod, so it's impossible in the general case.
- Just paste them into the project. (Because I don't try to auto generate a coremod, you don't have to worry about them showing up in the built jar)
- Specify dependencies in the
- Binpatches.
- 1.6.4 stopped being a jarmod, instead distributing patches inside a
binpatches.pack.lzma
file. - Now, if this file exists, Voldeloom is able to parse the file and apply the binary patches.
- You can't quite launch 1.6 yet, but it's a start.
- 1.6.4 stopped being a jarmod, instead distributing patches inside a
- Rewrote how
genSources
interacts with Fernflower.- It does not attempt to interact with the Gradle
ProgressLogger
system anymore, because it didn't appear to be working. This also removed a lot of logging being swallowed by the progress logger. - Another optimization (rather brazenly using NIO for reading classes from the jar) improved the runtime a fair bit on my computer. This is a tinge unsafe, so
-Pvoldeloom.saferFernflower
will toggle back to the oldZipFile
/ZipEntry
system.
- It does not attempt to interact with the Gradle
- Reduced retained size of in-memory MCP mappings by about 50%.
- You can also reduce the retained size of the in-memory Tiny mappings tree with
-Pvoldeloom.lowMemory
, but it's a bit slow and unsafe, whcih is why it's behind a flag. Might be useful if you're very memory constrained and want to squeeze out every drop.
- You can also reduce the retained size of the in-memory Tiny mappings tree with
- Redid the whole "dependency provider" system to be less garbage.
- Names of providers have changed. The general shape of log output also changed, a bit less spammy, but I will still spam you with file paths.
- The project-wide
offline
andrefreshDependencies
flags were moved fromConstants
into the extension:- Set the
voldeloom.offline
system property, project property, pass--offline
to Gradle, or configureoffline
in the extension to configure offline mode - Set the
voldeloom.refreshDependencies
system property, project property, pass--refresh-dependencies
to Gradle, or configurerefreshDependencies
in the extension to configure refreshDependencies mode - These are different from the global Gradle flags so that you can force Voldeloom to re-remap its derived artifacts, but not cause Gradle to do a bunch of redownloading too
- Set the
Initial release of my fork.