Enigma 2.5.0 Changelog

2.5.0 brings contributions from 3 of our lovely enigma users in addition to our regular duo, bringing you some reworks to long-broken features and fixing some long-bothersome bugs!

  • new theme system and theme (thanks supersaiyansubtlety!)
    • adds a new theme: darcerula
      • this theme is yet darker than the old dark theme, for those that appreciate a pitch black atmosphere for their mappings
    • moves theme configurations into a separate /theme/ directory in the config folder
      • declutters the main.toml file
      • old theme configs will not be migrated, you’ll have to manually transfer your old custom themes
    • cleans up a lot of backend for themes, allowing us to easily add new themes in the future
  • added indexing for libraries in addition to the main JAR
    • separate step from normal indexing, performed after
    • disabled by default for all existing plugin-based indexers
      • can be enabled by setting the index_libraries property to true in service’s config in the enigma profile
      • refer to Javadocs in JarIndexerService for how to implement this property, we recommend adding it!
    • currently, only Record and Object from the JDK are indexed as libraries by default
  • API changes around indexing
    • JarIndex#indexJar no longer receives a scope
      • the ClassProvider parameter has been replaced with a ProjectClassProvider, providing classes and scope for both the main jar and libraries
    • JarIndexerService#acceptJar now takes a ProjectClassProvider instead of a ClassProvider
      • the scope has not been removed, and if the service is configured to accept libraries will be the main scope on first run and the library scope on the second
  • added name proposal for record components
    • names for record getters are automatically proposed as their corresponding field is named
    • methods are linked to fields based on bytecode
    • this is a fail-fast solution: if there is no method perfectly matching the expected code for a record getter no mapping will be proposed
    • this allows us to sucessfully propose mappings in situations such as hashed mojmap where the record getter method mismatches with the component name
    • works using two new services: enigma:record_component_indexer and enigma:record_component_proposer
  • deprecated EntryMapping#DEFAULT to be renamed to EntryMapping#OBFUSCATED
  • fixed proposed method validation and main plugin id validation using different regexes to validate
    • it was possible to write a valid plugin ID that would crash when used on a proposed mapping
  • fixed issues with stat generation and records
    • ignore parameters of canonical constructors for records as they can be hidden by decompilers
    • ignore parameters of equals() method for the same reason
  • fixed mapping stats filtering
    • fixed issues with GUI when using dots to filter
    • fixed issues with graph when using slashes to filter
  • fixed a crash when cancelling a class rename initiated from the class tree (thanks notevenjoking!)
  • fixed a possible crash when parsing recent files (thanks pitheguy!)
  • fixed entry navigator ignoring which types are currently editable
  • fixed mappings chooser not accepting directories
  • fixed missing translations in mappings chooser
  • fixed a bunch more scaling issues (thanks supersaiyansubtlety again!)
    • fixed config values sometimes being messed up when changing scale and restarting
    • fixed editor font size sometimes being overwritten
  • fixed possibly incorrect save location when saving from the unsaved warning dialogue (thanks again pitheguy!)