Skip to content

Hodgepodge ​

227 merged pull requests.

New Features ​

  • #978 Added reverb strength slider to HodgepodgeSoundOptionsGui; updated ReverbSupport to expose configurable strength; added lang strings. - @Algent
    • Added: reverb strength slider
  • #973 New HodgepodgeSoundOptionsGui class added to access audio settings; new config strings added to lang file; integrated into TweaksConfig. - @Algent
    • Added: audio settings menu, HodgepodgeSoundOptionsGui
  • #967 Implements QuickPlay argument parsing in HodgepodgeLateTweaker and HodgepodgeClient; adds new QuickPlay class for handling launch parameters. - @mitchej123
    • Added: QuickPlay argument support, QuickPlay class
  • #966 Added FPS display to AllocationRateHUD; exposed internal counter via access transformer. - @boubou19
    • Added: FPS counter to allocation HUD
  • #964 Replaces quadratic OGG decoding with chunked reads, halves sound RAM usage, adds stereo-to-mono downmixing, HRTF support (lwjgl3 only), reverb via OpenAL effects, and output limiting via new sound system classes. - @Algent
    • Added: stereo downmixing, HRTF binaural audio, environmental reverb, output limiter, SoundConfig options, sound system handler classes
    • Fixed: client stalls during audio decode, excessive sound memory usage
  • #945 Adds ScrollbarRenderer class and two mixins (MixinGuiSlot_TexturedScrollbar, MixinGuiScrollingList_TexturedScrollbar) to render sliced textures for scrollbar track and thumb, plus configuration flag and scrollbar texture asset. - @Ranzuu
    • Added: textured scrollbar rendering system, scrollbar configuration
  • #939 Adds MixinGuiIngameForge_CrosshairGuiOpen to suppress crosshair rendering when a GUI screen is active, with configuration flag enabled by default. - @Ranzuu
    • Added: crosshair visibility toggle based on GUI state
  • #938 Adds MixinMinecraft_FMLQueryFPS to raise FPS cap in FML missing mapping screen, plus configuration flag in FixesConfig. - @SuperSoupr
    • Added: FPS limiter raise for FML missing mapping screen
  • #931 Adds multiple mixins overriding getCommandSenderName() and func_145748_c_() for entity localization, with dedicated mixin for Wither Skeleton naming. Adds configuration flags and localization strings. - @Nikolay-Sitnikov
    • Added: entity name localization support, Wither Skeleton unique name
    • Fixed: death message localization on non-English clients
  • #925 Enhanced DumpTextureAtlasCommand to output TextureAtlasSprite x, y, width, and height fields alongside other sprite data. - @tiffit
    • Added: sprite position and dimensions to atlas dump output
  • #923 Adds SoundConfig class with options for paulscode audio system customization, integrated into event handlers and GUI config. - @ohentis
    • Added: sound system configuration (max sources, buffer sizes, other paulscode options)
  • #918 Adds a new mixin MixinBiomeGenLavenderFields that intercepts bonemeal application in lavender fields, plus configuration option in TweaksConfig. - @MalTeeez
    • Added: lavender growth via bonemeal in BOP lavender fields
    • Closes GTNH#21283
  • #894 Added F1State class and two mixins (MixinEntityRenderer_F1ShowHand, MixinMinecraft_F1ShowHand) to implement three-state F1 cycling for GUI and hand visibility. - @Apis035
    • Added: F1State tracker, three-state F1 toggle
  • #887 Added 'u' to valid format codes in VALID_AMP_SINGLE_CODES, updated StringUtil to recognize §u, and added support in FontRenderer, GuiTextField, and sign rendering mixins. Includes fallback color support in LegacyColorFallback. - @alppp
    • Added: drop shadow format code (§u) support, LegacyColorFallback class
  • #885 Added music delay config fields to TweaksConfig and mixin MixinMusicTicker to apply configurable delays. - @Caedis
    • Added: music delay configuration options
    • Closes #860
  • #881 Added DumpTextureAtlasCommand class that hooks into Hodgepodge's client code to dump texture atlas information to disk. - @sisyphussy
    • Added: DumpTextureAtlasCommand debug command
  • #869 Added configurable movedTooQuicklyThreshold to FixesConfig via @ModifyConstant mixin in MixinNetHandlerPlayServer_DisableMovedTooQuickly. Default 100.0 (vanilla); set to 200.0+ to accommodate fast-movement item stacking. - @Eldrinn-Elantey
    • Added: Configurable movement speed check threshold
    • Fixed: Player rubberbanding with modded fast-movement items
  • #868 Extended DebugScreenHandler and added MixinIntCache to expose IntCache size and display it in the allocation rate HUD and F3 screen. Note: May cause minor chunk generation slowdown when F3 is open due to synchronized method calls. - @Alexdoru
    • Added: IntCache size display in F3 debug screen
  • #865 Added disablePotionEffectIcons config toggle via MixinInventoryEffectRenderer_TogglePotionIcons to suppress potion effect rendering in inventory UI. - @Ranzuu
    • Added: Potion effect icon visibility toggle config
  • #834 Added GLScissorHelper utility and mixins for GuiInventory, GuiContainerCreative, and GuiScreenHorseInventory to apply glScissor clipping during entity rendering. - @Nikolay-Sitnikov
    • Added: GLScissorHelper utility for scissor test management, Entity render clipping in inventory GUI, Entity render clipping in creative inventory GUI, Entity render clipping in horse inventory GUI
    • Fixed: Entity renders overflowing GUI boxes
  • #829 Added color code handling mixins for FontRenderer, GuiNewChat (wrapping), GuiTextField (scrolling), signs, and anvil naming. Includes ColorFormatUtils for parsing &#RRGGBB and gradient terminators. Dependency bump to GTNHLib and Angelica for preprocessText compatibility. - @alppp
    • Added: &#RRGGBB hex color code support, Gradient color format preservation, ColorFormatUtils utility class, FontRenderingCompat compatibility layer, Color code support in sign editing, Color code support in anvil naming, Format code validation in FontRenderer
    • Fixed: Color loss in chat wrapping, Color loss when scrolling in text fields, Anvil item name character limit not accounting for format codes
  • #799 Added AllocationRateHUD client-side handler and /allocationsHud command to display runtime memory allocation rates. - @Alexdoru
    • Added: AllocationRateHUD display, /allocationsHud command
  • #784 Implemented new chunk generation scheduling system with deferred population pipeline, integrated with spawner optimization and entity spawning logic. Includes debug handlers and configurable chunk generation budget. - @mitchej123
    • Added: budget-based chunk generation scheduler, deferred population pipeline, ChunkGenDebugHandler, chunk generation budget config
  • #766 Created EnumValuesTransformer and EnumValuesHook to instrument enum values() methods; supports -Dhodgepodge.logEnumValues, -Dhodgepodge.logIntervalEnumValues, and -Dhodgepodge.logStacktraceEnumValues. - @Alexdoru
    • Added: Enum values call debug instrumentation, EnumValuesDebug.csv output
  • #752 Added hodgepodge.cfg option and mixin MixinGuiNewChat_CleanChatLogs to strip color codes from GuiNewChat during logging. - @Alexdoru
    • Added: chat log color code removal option
  • #742 Added MixinBlockRedstoneWire_Hitbox with backported hitbox model from 1.12. Added toggle in TweaksConfig. - @JohnButlerThird
    • Added: improved redstone wire hitbox
  • #732 Added client-side mixin to GuiIngameMenu using @ModifyConstant to replace hardcoded 'Mod Options...' string with translatable key hodgepodge.menu.mod_options. Added translations for en_US, ru_RU, and zh_CN. - @Eldrinn-Elantey
    • Added: localization for Mod Options button, translations for en_US, ru_RU, zh_CN
  • #709 Added MixinGuiContainerCreative_TabTitle to support localization key rendering for creative mode tab labels. - @Ranzuu
    • Added: Creative tab title localization
  • #705 Added mixins MixinEntityPlayer_EatInCreative, MixinItemFood_DontConsumeCreative, and MixinItemSoup to allow food consumption in Creative while preventing normal stack depletion. - @Nikolay-Sitnikov
    • Added: Creative mode food consumption, Creative food effect application
    • Closes #688
  • #682 Ported MixinWorldType_VoidParticles, MixinContainerRepair_MaxAnvilCost, and MixinGuiRepair_MaxAnvilCost from EnderCore, exposed via TweaksConfig. - @Alexdoru
    • Added: MixinWorldType_VoidParticles, MixinContainerRepair_MaxAnvilCost, MixinGuiRepair_MaxAnvilCost
  • #679 Added MixinFMLClientHandler in new shutup package to filter texture error logging, exposed via hideTextureErrors in TweaksConfig. - @Alexdoru
    • Added: MixinFMLClientHandler shutup mixin, hideTextureErrors config option
    • Removed: texture error option from FixesConfig
  • #678 Added MixinCoFHCommandTpxFix to correct teleport command logic, and enhanced MixinMinecraft_ToggleDebugMessage with location clipboard feature, both configurable. - @SST-03
    • Added: F3+C location clipboard hotkey, MixinCoFHCommandTpxFix
    • Fixed: /cofh tpx command logic
  • #673 Modified ClientKeyListener to save fast block placement preference between sessions. - @Caedis
  • #670 Consolidated multiple debug hotkey mixins into MixinMinecraft_ToggleDebugMessage, added /cofh tpx fix mixin, and exposed settings via FixesConfig and TweaksConfig. - @SST-03
    • Added: F3+Q hotkey, F3+C location copy hotkey, MixinCoFHCommandTpxFix, NEIKeyHelper
    • Fixed: /cofh tpx teleport logic
  • #664 Added client-side keybinding handler in MixinMinecraft_ToggleDebugMessage using vanilla chat clearing function. - @SST-03
    • Added: F3+D clear chat keybinding
    • Closes GTNH#22519
  • #658 Expands MixinMinecraft_ToggleDebugMessage to support F3+Q overlay and adds new language strings for command help text. - @SST-03
    • Added: F3+Q debug overlay, F3+ command tips
    • Closes GTNH#22471
  • #646 Adds nether portal ratio config to TweaksConfig and MixinWorldProviderHell to apply custom coordinate conversion ratios. - @alppp
    • Added: Nether portal coordinate ratio config
  • #609 Added ASMConfig option to control BoP fog rendering in BOPFogHandler; disabled by default to avoid overriding user preferences. - @MellowArpeggiation
    • Added: config option for BoP fog disable
  • #604 Added debug transformer and hook to log config parsing times to .minecraft/ConfigParsingTimes.csv when flag -Dhodgepodge.logConfigTimes=true is set. - @Alexdoru
    • Added: config parsing time logging, ConfigParsingTimeTransformer, ConfigParsingTimeHook

New Content ​

  • #935 Updated zh_CN.lang with new localization entries. - @Omgise
    • Added: Chinese localization strings
  • #882 Added Czech language file (cs_CZ.lang) with 69 translations and Czech README. - @Kuliiuu
    • Added: Czech localization file, Czech README

Changes ​

  • #984 Mixin now checks for Ultramine presence and disables SPEEDUP_CHUNK_UNLOAD patch when detected. - @SKProCH
    • Fixed: Ultramine compatibility
  • #946 Changed default value of f1ShowHand configuration flag from true to false in TweaksConfig. - @SuperSoupr
  • #910 Changed default values in MemoryConfig to disable interning features by default. - @boubou19
  • #862 Reverted NBTTagCompoundHashMapTransformer to restore original 125-line ASM implementation. - @UltraProdigy
  • #847 Updated Mixins.java version check and TargetedMod enum to disable duplicate mixins for MrTJPCoreMod >= 1.1.3. - @AnsonYeung
    • Fixed: Duplicate mixin crashes with MrTJPCoreMod >= 1.1.3
  • #843 Updated ClientLeaksCleaningHook to run on dimension change events. Added dimension swap handler to HodgepodgeClient. - @Alexdoru
    • Added: Dimension swap listener for memory cleanup
  • #731 Changed default value in TweaksConfig for IC2 cell consumption behavior. - @danyadev
    • Fixed: IC2 blast furnaces consuming compressed air cells
    • Migration: Set B:enableGTLikeIC2CellBehavior=true in hodgepodge.cfg if you depend on GT-like IC2 cell consumption in blast furnaces.
    • Closes #537
  • #708 Removed mod compatibility exclusions from mixin targeting for NBT copy speedup and related optimizations. - @brandyyn
    • Removed: FastCraft/DragonAPI incompatibility flags
  • #683 Modified MixinLoadController_logModTimes to defer logging to JVM shutdown hook so server events are included in timing report. - @Alexdoru
  • #674 Disabled NBT mixins when Dragon API is present, moved NBT mixins to dedicated nbt package, and refactored MixinNetHandlerPlayClient_SquashBedMessages to reuse chat components instead of creating new ones. - @Alexdoru
    • Added: TargetedMod.DRAGON_API detection
    • Fixed: NBT mixin conflicts with Dragon API, excessive chat component allocation
  • #661 Sets varargs dissector transformer to disabled in ASMConfig. - @RecursivePineapple
  • #638 Renamed simulation distance config to ensure new default (disabled) applies to all users; updates SimulationDistanceHelper, FixesConfig, TweaksConfig, and Mixins registry. - @sisyphussy
    • Fixed: TPS loss from chunk loading/unloading cycles
    • Closes GTNH#21612

Bug Fixes ​

  • #992 Modified MixinS35PacketUpdateTileEntity_ByteArray to handle edge cases that the vanilla packet update path covers but the optimized byte-array path did not. - @AnsonYeung
    • Fixed: TE packet optimization edge cases
  • #989 Modified MixinContainerFancySign to validate stack limits during shift-click transfers, preventing items from exceeding the sign slot's maxStackSize. - @Worive
  • #988 Added a mixin to MixinPlayerControllerMP_BlockHitDelay that resets blockHitDelay to 0 when appropriate, and added a configuration flag in FixesConfig to control this behavior. - @AnsonYeung
    • Added: block hit delay reset on mode switch configuration option
    • Fixed: block hit delay persisting after creative-to-survival mode switch
  • #987 New mixin MixinBlockArmorStand_CheckedBreak validates that the block being destroyed is actually an Armor Stand before ejecting items. - @Nikolay-Sitnikov
  • #986 Added login session tracking via mixins to NetHandlerLoginServer, NetworkDispatcher, and ServerConfigurationManager. When a player reconnects during an existing session, the previous player entity is properly removed before the new one spawns, preventing duplication. - @Algent
    • Added: Login session state tracking interface and utilities, LoginSessionIndex to map players to their session IDs, Mixin to await previous session termination on reconnect, Mixin to remove player from world before new login, Test suite for login session lifecycle
    • Fixed: Player duplication on reconnect with keepInventory disabled, Duplicate inventory contents from reconnection exploits
    • Closes Dupes-Exploits-GTNH#213, Dupes-Exploits-GTNH#352
  • #979 New mixin MixinBlockRubSapling checks bone meal subtraction to prevent integer underflow; added config flag to FixesConfig. - @Worive
    • Added: IC2 rubber sapling bone meal underflow fix
    • Fixed: infinite bone meal with IC2 rubber saplings
    • Closes GTNH#3992
  • #972 EnumValuesHook reverted from enum-backed map to concurrent HashMap to avoid FastUtils dependency, fixing crashes when JarJar loads before FastUtils during multithreaded modpack loading. - @boubou19
    • Fixed: enum logging crashes on modpack load
  • #969 BOPFogHandler now uses renderViewEntity for fog origin calculation. - @Caedis
    • Fixed: fog position with Freecam
  • #968 New mixin MixinActiveRenderInfo_CameraRotation uses renderViewEntity for particle orientation; backport of Forge 1.12 fix for MC-46445. - @Caedis
    • Added: particle camera rotation config option
    • Fixed: particles misaligned with Freecam
  • #965 Mixin now correctly binds textures/gui/icons.png when skipping crosshair rendering in third-person and non-chat GUI modes. - @JackOfNoneTrades
    • Fixed: boss bar black when crosshair hidden
  • #960 Updated MixinTextureMap_AsyncIcons to be compatible with Angelica's mipmap changes; adjusted TargetedMod version matching. - @Eclipse-Sol
    • Fixed: crashes with Angelica mipmaps and async icons
  • #958 Extends mixin's physical keycode matching to all platforms (not just macOS), renamed enableMacosCmdShortcuts to enableTextFieldCtrlShortcuts to reflect wider scope. - @Eldrinn-Elantey
    • Fixed: Ctrl shortcuts broken on non-Latin keyboard layouts
  • #953 Sets asyncIconLoading default to false in SpeedupsConfig to work around issues introduced by PR #908. - @tiffit
    • Fixed: async icon loading issues
  • #950 Adds try-catch error handling in TileEntityDescriptionBatcher to gracefully handle and log tile entity sync exceptions without propagating them. - @AnsonYeung
    • Added: tile entity error isolation
    • Fixed: chunk loading failures from tile entity sync errors
    • Closes GTNH#25654, GTNH#25680
  • #943 Adds MixinKeyBinding_FixComparison with proper comparison logic to handle keybind category collisions, plus configuration flag in FixesConfig. - @Algent
    • Added: keybind category collision handling
    • Fixed: Controls menu crash with non-English localization
    • Closes GTNH#25698
  • #942 Adds missing cast in MixinEntityGolemBase following up on PR #211. - @koolkrafter5
    • Fixed: golem marker loading cast error
  • #941 Changed injection point from TAIL to BEFORE in MixinGameData_BlockArraySync so fast block lookup cache is refreshed before FMLModIdMappingEvent completes, fixing Block.getIdFromBlock accuracy for consumers like Postea. - @SuperSoupr
    • Fixed: block ID lookup returning stale IDs during mod ID mapping
  • #940 Changed default value of fixBottomFaceUV configuration flag from true to false in FixesConfig. - @koolkrafter5
    • Fixed: texture rendering issues caused by UV fix
    • Closes #920
  • #933 Adds MixinEntityUndead_SunFireImmunity to check isImmuneToFire() before applying sun damage to undead mobs. - @Nikolay-Sitnikov
    • Added: fire immunity check for sun damage
    • Fixed: Wither Skeleton flickering and armor durability loss in sunlight
  • #928 Adds MixinEntityItemFrame_FixDupe mixin to ensure item clearing in item frames happens immediately, plus configuration flag in FixesConfig. - @Algent
  • #922 Changed addCommonMixins to addClientMixins for mixin targeting client-only class, since mixin has no effect on server and produces warnings. - @Charsy89
    • Fixed: server-side log spam from client-only mixin
  • #916 Added mixin MixinEnchantmentHelper that clamps negative looting values to zero in enchantment calculations. - @ah-OOG-ah
    • Added: negative looting clamp
    • Fixed: game crash from negative Looting enchantment
  • #907 Added four mixins to restore GL_ALPHA_TEST state after item rendering and fix potion panel z-ordering by adjusting depth test behavior and render sequence in container and inventory effect renderer. - @dipo33
    • Added: InventoryEffectRendererExt interface
    • Fixed: potion effect panel transparency rendering, tooltip and stack count depth ordering
    • Closes GTNH#11259
  • #905 Added mixin MixinItem_EnchantGlint that applies glint effect only on the last render pass instead of every pass. - @koolkrafter5
    • Added: enchant glint single-pass fix
    • Fixed: Enchant glint appearing multiple times on multi-pass items
  • #904 Added mixin MixinBlockBOPColorizedSapling_FixIcon that masks bit 3 (growth stage flag) from metadata before texture lookup to preserve correct sapling type. - @dipo33
    • Added: BOP colorized sapling icon fix mixin
    • Fixed: BOP saplings rendering as Sacred Oak after growth
    • Closes GTNH#15244
  • #902 Changed arg{Index} syntax to args[Index] in MixinModAnnotation_Intern to match compatible Mixin syntax. - @Alexdoru
    • Fixed: Mixin framework syntax incompatibility
  • #898 Added ASM transformer ModAPITransformerSignaturePatch and hook that removes signatures from optional interface implementations during mod loading. - @mitchej123
    • Added: ModAPITransformerHook, ModAPITransformerSignaturePatch
    • Fixed: Forge Optional annotation verification errors
    • Closes #832
  • #897 Fixed single-character typo in MixinChunkProviderServer_DisableTerrain_EndlessIDs that was causing biome assignment logic to fail. - @june-dev-username
    • Fixed: GOG worlds with missing biome data
    • Migration: Regenerate or re-explore chunks to restore biome data in existing GOG worlds.
  • #895 Moved OreDictionary transformer registration to a late tweaker/transformer phase that executes after NEI initialization. - @mitchej123
    • Added: HodgepodgeLateTweaker
    • Removed: early OreDictionary registration from AsmTransformers
    • Fixed: JarJar VerifyError with OreDictionary and NEI
    • Closes JarJar#18
  • #891 Added three EID compatibility mixins for IC2TileEntityTerra, BOPBiomeUtils, and RiteClimateChange to prevent tooltip conflicts. - @tiffit
    • Added: EID compatibility mixins for IC2, BoP, Witchery
    • Fixed: EID incompatibilities with IC2, Biomes o' Plenty, Witchery
  • #888 Added mixin MixinPaintingUtil that properly handles special characters in file paths without removing them during encoding. - @Algent
    • Added: BiblioCraft path encoding fix
    • Fixed: BiblioCraft NoSuchFileException with special characters in path
  • #883 Modified BlockLookupHooks to invalidate fast block lookup cache before GameData.injectWorldIDMap and rebuild it after; added cache validation in MixinGameData_BlockArraySync. - @NeutronSelector
    • Added: block cache validation
    • Fixed: Chisel blocks turning flammable on world load, stale block ID cache during remapping
    • Migration: Reload old worlds in 2.9.x with this fix enabled; blocks that incorrectly became flammable will return to normal fire behavior.
    • Closes GTNH#23811
  • #877 Added mixin MixinChunkProviderServer_DisableTerrain_EndlessIDs that replaces getBiomeArray()/setBiomeArray() calls with EndlessIDs-compatible getBiomeShortArray()/setBiomeShortArray() methods. - @konkers
    • Added: EndlessIDs compatibility layer
    • Fixed: Crash with disableChunkTerrainGeneration and EndlessIDs
    • Closes #876
  • #875 Added bounds check in MixinForgeHooks_ModernPickBlock to handle cases where player.openContainer may not match player.inventoryContainer. - @DarkShadow44
    • Fixed: Pick block out-of-bounds crash
    • Closes GTNH#18777
  • #874 Modified MixinCommandBase_JoinArgs to properly join multi-word arguments while preserving all formatting codes, fixing the issue where formatting was lost after the first word. - @alppp
    • Fixed: Chat command formatting loss after first word
  • #872 Added mixin MixinOverlayTesr to clear tile entity references in IC2's overlay TESR after rendering. - @Alexdoru
    • Fixed: IC2 OverlayTESR memory leak
  • #867 Modified MixinFakePlayerFactory_FixLeak to clear the static Minecraft player field in addition to removing entries from the fake player map during world unload. - @Alexdoru
    • Fixed: FakePlayerFactory world server leak
  • #863 Modified SpeedupLongIntHashMapTransformer to exclude static fields like Thaumcraft's TeleporterThaumcraft.destinationCoordinateCache from LongHashMap transformation to prevent leaking server context. - @Alexdoru
    • Fixed: World leak in Thaumcraft teleporter via static cache
  • #859 Modified WorldProvider.resetRainAndThunder() via mixin to set rainTime and thunderTime to rand.nextInt(168000) + 12000 instead of zero, matching normal weather update behavior. - @Eldrinn-Elantey
    • Fixed: Weather toggling immediately after sleep reset
  • #858 Added mixin MixinWorldGenKelp to offset kelp generation coordinates by +8 blocks, preventing chunk boundary violations that trigger cascading worldgen. - @Charsy89
    • Fixed: Cascading worldgen caused by kelp decoration
  • #857 Added missing mixin configuration entry and fixed MixinBOPBiomeDecorator_CacheRandom annotations. - @Alexdoru
    • Fixed: Invalid mixin declarations
  • #855 Added missing @Shadow and field remap declarations to 16 BiblioCraft memory leak fix mixins from PR #853. - @Alexdoru
    • Fixed: Invalid mixin declarations
  • #853 Added 16 mixins to BiblioCraft TESR classes that null out tile entity references after rendering. For the armor stand renderer, the reference is cleared on dimension switch instead of after each render. - @Alexdoru
    • Added: Memory leak fixes in BiblioCraft TESR renderers
    • Fixed: BiblioCraft TESR world client leaks
  • #849 Added client-side food logic for IC2 tin cans via mixin to MixinIc2TinCan, mirroring the behavior of the healing axe with a 50% nutrition cap. - @tiffit
    • Added: Client-side food logic for IC2 tin cans
    • Fixed: IC2 tin cans providing no nutrition
    • Closes GTNH#18916
  • #848 Modified ServerConfigurationManager_FixTeleporter mixin to set world.findingSpawnPoint flag to true when teleporting an entity to a dimension, allowing chunk loading to proceed normally through spawn point location logic. - @Alexdoru
    • Added: TeleportEntity dimension change portal generation fix
    • Fixed: Portals not spawning when entering new dimensions
    • Closes GTNH#23980
  • #846 Fixed position map off-by-one error for 8-character hex codes. Enhanced GuiTextField_FixColorScroll with arrow key navigation, backspace/delete handling for format codes. Consolidated format code validation into ColorFormatUtils. Added LegacyColorFallback fallback handler. - @alppp
    • Added: Arrow key format code skipping, Backspace/delete format code handling, LegacyColorFallback for old GTNHLIB compatibility, Format code validation consolidation, StringUtilsTest test coverage
    • Fixed: Text field cursor off-by-one for &#RRGGBB codes, Arrow key navigation through format codes, Backspace/delete behavior on format codes
  • #845 Added MixinKeyboardClient_sendKeyUpdate_isKeyDown to handle IC2 jetpack key input checks in freecam mode. - @Luca-Guettinger
    • Added: IC2 jetpack key input handling for freecam
    • Fixed: Freecam incompatibility with IC2 jetpacks
  • #837 Modified GuiDisconnected mixin to group title, reason text, and back button vertically, calculate total height, and center the block on screen with proper spacing. Ports the 1.21 LinearLayout approach. - @alppp
    • Added: Dynamic layout calculation for disconnect screen, Button constraint logic for long messages
    • Fixed: Text overflow overlapping back button on long kick messages
  • #835 Added proper mixin annotations to MixinWorldServer_SimulationDistanceThermosFix and MixinEntityPlayerMP in fastload. - @czqwq
    • Fixed: Mixin compilation warnings
  • #830 Modified DataWatcher packet sync mixin to perform deep copy of objects in single-player mode when synchronizing to client, preventing shared references between server and client entity instances. - @Alexdoru
    • Added: Deep copy logic for DataWatcher single-player sync
    • Fixed: DataWatcher object reference sharing in single-player
  • #828 Added Compat check for Cubic Chunks presence. Modified MixinChunk to skip Y bounds validation when Cubic Chunks is detected. - @RecursivePineapple
    • Added: Cubic Chunks compatibility detection
    • Fixed: Tile entity placement restrictions with Cubic Chunks
  • #827 Refactored GuiModList mixin to consolidate sorting logic, fixed InfoButton to properly scroll and select mods, and added scroll position preservation. Removed redundant MixinGuiScrollingList and MixinGuiSlotModList that were causing conflicts. - @0hwx
    • Added: Scroll position preservation on config screen return, Mod selection scrolling in InfoButton
    • Removed: MixinGuiScrollingList (consolidated), MixinGuiSlotModList (consolidated), Interface definitions IGuiModList, IGuiScrollingList, IGuiSlotModList
    • Fixed: Mod list becoming unsorted after config screen, InfoButton not selecting mod on click, Scroll position lost on config screen return
  • #826 Modified MerchantRecipeList packet serialization to include tradeUses and maxTradeUses. Added client-side logic to increment trade counters when trading occurs, matching server behavior. - @kurrycat2004
    • Added: TradeUses and maxTradeUses transmission in recipe packets, Accessor for MerchantRecipe trade counters, Client-side trade counter increment logic
    • Fixed: Villager trade desynchronization causing ghost items
  • #819 Added a mixin to MixinFakePlayer and configuration option to handle chat message sending to fake player entities without crashing. - @koolkrafter5
    • Added: Configuration option for FakePlayer chat message handling, Mixin for FakePlayer chat safety
    • Fixed: Crash when mods send chat messages to fake players
  • #816 Added cleanup code in ChunkGenScheduler triggered via server shutdown event to release chunk generation queue and related state. - @Alexdoru
    • Fixed: memory leak in chunk generation scheduler
  • #815 Added WorldAccessor_ClearMapStorage mixin to clear the static MapStorage instance via AfterServerStoppedHook when the server stops. - @Alexdoru
    • Added: WorldAccessor_ClearMapStorage mixin
    • Fixed: memory leak from static MapStorage instance, server reference retention on world exit
  • #813 Added mixin to clear the static theAdmin reference in CommandBase when the server stops, and improved listener cleanup to prevent static reference retention. - @Alexdoru
    • Added: MixinMinecraftServer_ClearServerRef
    • Fixed: memory leak from static ServerCommandManager reference, server instance leak on world exit
  • #812 Added cleanup in server shutdown event handler to clear world-specific attributes (MESSAGETARGET, MESSAGETARGETARGS) from all FML network channels. - @Alexdoru
    • Added: FML channel attribute cleanup on server stop
    • Fixed: memory leak from FML network channel attributes, server instance leak on single-player exit
  • #811 Modified BlockLookupHooks to log missing blocks and add them to the registry as a fallback, preventing ArrayIndexOutOfBoundsException in world gen systems. - @mitchej123
    • Fixed: ArrayIndexOutOfBoundsException in underground biomes ore generation
  • #810 Changed world comparison in SimulationDistanceHelper from reference equality to dimension ID comparison, since multiplayer can have different World object instances for the same dimension. - @czqwq
    • Fixed: chunks not loading in multiplayer, players invisible to each other in MP
    • Closes #809
  • #804 Added ItemRendererAccessor mixin to clear the last rendered item reference when unloading a world, preventing class cast exceptions from stale item references. - @DarkShadow44
    • Added: ItemRendererAccessor mixin, world unload cleanup
    • Fixed: class cast exception when rendering items after world change, item renderer memory leak across world loads
  • #803 Added mixin to GuiClipboard to prevent the game pause state from being set when the clipboard GUI opens. - @Alexdoru
    • Added: MixinGuiClipboard_NoPause
    • Fixed: BiblioClraft clipboard causing game pause
  • #801 Added mixin to NBTTagSmartByteArray to prevent passing null values to NBTTagByteArray, which was causing NPEs during chunk serialization. - @koolkrafter5
    • Added: MixinNBTTagSmartByteArray null-safety check
    • Fixed: NPE when saving chunks with smart byte arrays, chunk data loss due to save failures
  • #798 Modified entity guard mixins to distinguish between chunk generation and loading from disk. Improved cleanup in ServerThreadLongHashMap for stale map instances from old threads. - @mitchej123
    • Fixed: chunks failing to load from disk, stale LongHashMap references
  • #793 Added snapshot clearing on server shutdown, ensured stale snapshots are always available, and replaced indefinite waits with timeouts in ServerThreadLongHashMap. - @mitchej123
    • Fixed: deadlock when switching SP/server/SP modes, deadlock conditions with stale snapshots
  • #792 Modified ServerThreadLongHashMap to use periodic snapshots based on thread access patterns rather than blocking all map access, reducing contention while still forcing snapshots to the server thread. - @mitchej123
    • Fixed: potential deadlock in GT5u machine update thread
  • #785 Adjusted mixin priority or implementation in MixinBlockGrass and MixinBlockMycelium to resolve conflicts with AquaAcrobatics mod. - @Alexdoru
    • Fixed: incompatibility with AquaAcrobatics mod
    • Closes #783
  • #781 Corrected class name resolution in SpeedupLongIntHashMapTransformer to handle obfuscated environments. - @Alexdoru
    • Fixed: obfuscated class transformation
  • #777 Updated cofh_at.cfg to remap field names correctly for Forge Access Transformer, which doesn't perform the name translation that CoFHCore's AT did. - @danyadev
    • Fixed: CoFH field access transformer mapping
  • #776 Refactored ForgeEventSubscriptionHook and ForgeEventSubscriptionTransformer to reuse ClassReader and cascade parent class loading like original Forge implementation. - @Alexdoru
    • Fixed: EventSubscriptionTransformer Angelica compatibility
  • #774 Reverted ForgeEventSubscriptionTransformer changes in HodgepodgeRfbPlugin to restore cascading superclass loading that Angelica depends on. - @Alexdoru
    • Fixed: AgriCraft startup with Angelica
    • Closes GTNH#23757
  • #770 Added mixin MixinGuiCreateWorld_NotWriteToExistDir that validates the world directory doesn't already exist before world creation. - @copi143
    • Added: world directory existence validation
    • Fixed: world creation overwriting existing directories
  • #761 Removed MixinCraftingManager recipe caching added in #596; RecipeSorter maintains a specific recipe order that caching violated. - @Alexdoru
    • Removed: CraftingManager recipe cache
    • Fixed: recipe matching with cached recipes
    • Closes #700
  • #760 Modified ReusableChunkDeflaterOutputStream to avoid sharing a single Deflater instance across multiple threads, which caused corruption in concurrent backup operations. - @mitchej123
    • Fixed: backup corruption with reused deflater
    • Closes GTNH#23665
  • #759 Corrected NBT tag reference in TravellersGear.java; changed cachedPlayerList = updatedList to properly persist item recovery state when saving the file. - @Alexdoru
    • Fixed: TravellersGear item duplication on login
    • Migration: Check Travellers Gear item storage after updating; items may have been duplicated or lost due to the previous bug.
  • #753 Corrected mixin target selectors and injection points in MixinTileEntityCrop and MixinGuiNewChat_CleanChatLogs. - @Alexdoru
    • Fixed: mixin target matching
  • #751 Added MixinItemPiston to force piston starting metadata to 0 during placement, preventing state conflicts with active redstone signals. - @Caedis
    • Added: piston metadata reset on placement
    • Fixed: double piston head from active redstone placement
  • #749 Refactored MixinMinecraft_ClearStaleLoadingScreenInput to clear all accumulated input events at once on SplashScreen finish instead of using a delayed blocking approach. - @danyadev
    • Fixed: input blocking delay after game load
  • #748 Bumped priority of MixinBlock_FastLookup to avoid method overwrite conflict with jss.bugtorch. - @mitchej123
    • Fixed: mixin conflict with BugTorch
  • #746 Modified MixinEntityItem_BouncingFix to also handle XP orb entities correctly. - @JohnButlerThird
    • Fixed: XP orb flying glitch
  • #743 Marked MixinBlockRedstoneWire_Hitbox as client-only since it uses client-side rendering methods. - @Caedis
    • Fixed: server crash from client-only redstone mixin
  • #741 Added MixinBlockFence_RightClick to properly check for lead item before returning true on interaction. - @JohnButlerThird
    • Added: fence interaction validation
    • Fixed: fence right-click always succeeding
  • #740 Added MixinEntityItem_BouncingFix to correct item bouncing physics. - @JohnButlerThird
    • Added: item bouncing fix
    • Fixed: item bouncing on stairs and cauldrons
  • #739 Changed local variable handling in MixinWorldServer_PendingTickIndex to use effectively final reference, preventing crashes when called from superclass constructor. - @mitchej123
    • Fixed: potential crash in super() call
  • #738 Added MixinEntityLivingBase_GravityFix to correct entity gravity calculations and motion interpolation in 1.7.10. - @JohnButlerThird
    • Added: entity gravity fix
    • Fixed: entity interpolation glitches, entities phasing through ground
  • #736 Added MixinMinecraft_ClearStaleLoadingScreenInput to clear accumulated input events from the input queue when the loading screen finishes. - @JackOfNoneTrades
    • Added: stale input clearing at splash screen completion
    • Fixed: accidental clicks on main menu after loading
  • #729 Modified MixinItemRenderer_FixInstantItemSwitch to compare NBT data when detecting item hand switches, preventing false positives when NBT properties change without the item reference changing. - @danyadev
    • Added: NBT comparison for item hand switches
    • Fixed: hand animation glitches with NBT-changing items, item bouncing with Tinkers' Construct tools
    • Closes #714
  • #726 Added mixins to MixinEnchantmentThorns_FixBreakingSpecialArmor and MixinEntityLivingBase_FixBreakingSpecialArmor to intercept Thorns damage and prevent it from affecting items tagged as special armor. Added toggle in FixesConfig. - @danyadev
    • Added: Thorns enchantment damage bypass for special armor
    • Fixed: Electric armor breaking from Thorns enchantment
    • Closes GTNH#23198
  • #721 Added MixinLOTRConfig to set updateLangFiles to false by default, preventing automatic language file regeneration. - @mist475
    • Fixed: LOTR language updates breaking Gradle cache
  • #720 Updated TargetedMod to conditionally disable fixBottomFaceUV mixin blackboard flag for Falsetweaks versions below 433. - @Alexdoru
    • Fixed: Compatibility issue with Falsetweaks < 433
  • #716 Updated EarlyConfig and added MixinUserList to handle missing configuration files on first boot without throwing NoSuchFileException. - @mist475
    • Added: First-boot configuration file creation
    • Fixed: NoSuchFileException on first server startup
  • #713 Added TargetedMod version checking for Falsetweaks to conditionally disable mixins that cause crashes with older versions. - @mitchej123
    • Added: Falsetweaks version compatibility check
    • Fixed: Crash with incompatible Falsetweaks versions
  • #707 Added MixinGuiScreen_PreventDoubleMouseGrabbing to prevent redundant mouse cursor recentering on GUI close. - @danyadev
    • Added: GUI escape key mouse handling fix
    • Fixed: Mouse cursor jumping to center on Escape in GUIs
  • #706 Changed MixinItemRenderer_FixInstantItemSwitch from common mixin to ClientMixin to prevent server-side loading of client-only class bly. - @PLASMAchicken
    • Fixed: Server startup crash from client class on server
  • #704 Added MixinEntitySlime_MaintainHealth to prevent the readFromNBT method from overwriting entity health during deserialization. - @Nikolay-Sitnikov
    • Added: Slime health persistence
    • Fixed: Slime health reset on NBT reload
    • Closes #703
  • #702 Updated MixinBlock_LighterWater to use ordinal-based bytecode matching instead of potentially fragile slice selector. - @ah-OOG-ah
    • Fixed: Mixin slice selection failure in production
  • #701 Added MixinMinecraftServer_UpdateClientDifficulty and MessageChangeDifficulty packet to broadcast difficulty updates to connected players when the setting changes. - @Nikolay-Sitnikov
    • Added: Client difficulty synchronization packet, Difficulty update broadcast
    • Fixed: Difficulty not syncing to clients after /difficulty command
  • #698 Added mixins to MixinBlockPistonBase and MixinTileEntityPiston to validate piston metadata and skip extension on invalid values. - @koolkrafter5
    • Added: Piston metadata validation
    • Fixed: Piston crash with high metadata values
  • #697 Added MixinHideDeprecatedIdNotice to suppress numeric ID deprecation warnings from both blocks and items. - @DeathFuel
    • Added: Numeric ID deprecation notice suppression
    • Fixed: Numeric ID deprecation warnings
  • #695 Added cleanup code in Hodgepodge.java to properly release CoFH world references, preventing memory accumulation. - @Alexdoru
    • Added: CoFH world reference cleanup
    • Fixed: CoFH memory leak in main mod class
  • #694 Added mixin MixinTabRegistry to correct invalid Forestry plank item references in BiblioWoods recipe registration. - @DrParadox7
    • Added: Forestry dependency, BiblioWoods recipe validation
    • Fixed: BiblioWoods Forestry recipes with invalid plank references
  • #692 Added mixins to MixinBlockSpike_PreserveNBT and MixinTileEntityEnchantedSpike_PreserveNBT to preserve NBT compound data through block placement and entity pickup cycles. - @SuperSoupr
    • Added: XU enchanted spike NBT preservation on placement/pickup
    • Fixed: XU enchanted spike NBT data loss
  • #685 Added MixinChunk_FixInvalidEntity to detect and remove entities with invalid coordinates during chunk operations, configurable via FixesConfig. - @UltraProdigy
    • Added: MixinChunk_FixInvalidEntity
    • Fixed: Entities with invalid locations crash
    • Migration: Existing worlds with entities at invalid coordinates will have those entities removed on next load; verify no important items or mobs are lost.
  • #680 Corrected mixin names in MixinTEReactorChamber and updated Gradle wrapper and build configuration. - @ah-OOG-ah
    • Fixed: Mixin remapping failures
  • #676 Added MixinRenderBlocks_FaceYNegUV to correct texture UV mapping on block bottom faces, controlled by fixBottomFaceUV config option. - @leagris
    • Added: MixinRenderBlocks_FaceYNegUV, fixBottomFaceUV config option
    • Fixed: Bottom face texture UV flip
  • #675 Added MixinMinecraftServer_ClearServerRef to null out the static server instance during shutdown, exposed via FixesConfig. - @Alexdoru
    • Added: MixinMinecraftServer_ClearServerRef
    • Fixed: MinecraftServer static reference leak
  • #669 Modified MixinContainer_FixShiftRecursion to validate slot state at each iteration rather than once at the start. - @DarkShadow44
    • Fixed: Shift recursion slot checking
  • #666 Added mixin MixinItemRenderer_FixInstantItemSwitch to delay texture rendering until the item switch animation completes, controlled via FixesConfig. - @danyadev
    • Added: MixinItemRenderer_FixInstantItemSwitch
    • Fixed: Instant item texture switch with different NBT
  • #665 Enhanced TravellersGear utility to detect uncompressed NBT files and fall back to uncompressed read method when standard compressed read fails. - @koolkrafter5
    • Fixed: Travellers Gear item recovery on servers
    • Migration: Recover Travellers Gear items from server by installing this fix; item duplication may occur on first load if files were previously corrupted.
  • #663 Corrected ASM obfuscation mapping in VarargDissector transformer and updated ASMConfig to use correct obfuscated names. - @Alexdoru
    • Fixed: Chunk loading crash in Twilight Forest
    • Closes GTNH#22518
  • #662 Moved sendNEIHelp function from MixinMinecraft_ToggleDebugMessage into a new NEIKeyHelper class to prevent class loading of NEI-dependent code when NEI is not loaded. - @MalTeeez
    • Added: NEIKeyHelper utility class
    • Fixed: Crash without NEI
  • #659 Adjusts MixinMinecraft_ToggleDebugMessage to include F3+Q help text in its own display. - @SST-03
    • Fixed: F3+Q help discoverability
  • #655 Updates TargetedMod to check mod name instead of just modId, distinguishing between IC2 and IC2 Classic which share the same modId. - @DarkShadow44
    • Fixed: IC2 Classic mixins incorrectly applied to standard IC2
  • #653 Adds remap=true to MixinKeyboardClient_sendKeyUpdate to ensure field name remapping during mixin application. - @DarkShadow44
    • Fixed: IC2 keyboard update mixin injection failure
  • #651 Corrects buffer handling in TileEntityDescriptionBatcher to copy all byte buffers instead of reusing references. - @DarkShadow44
    • Fixed: Potential buffer corruption in packet batching
  • #648 Adds MixinChunk_FixInvalidEntity to detect and remove entities with infinite/NaN coordinates before they cause crashes, likely stemming from simulation distance issues. - @sisyphussy
    • Added: Invalid entity location detection and removal
    • Fixed: Server crashes from invalid entity coordinates, Thrown potion/arrow position corruption
    • Migration: Existing worlds with entities at invalid coordinates will have those entities removed on next load; verify no important items or mobs are lost.
    • Closes GTNH#22129, GTNH#22198
  • #645 Corrects mixin target in MixinEntityPlayerMP to properly apply fast chunk handling optimization when config is enabled. - @Sopel97
    • Fixed: fastChunkHandling config ineffective
    • Closes #644
  • #642 Improves SimulationDistanceHelper and MixinWorldServer_SimulationDistance to properly clean pending tick list entries instead of relying on per-tick clearing, which was lost before CoreTweaks could persist it. - @DarkShadow44
    • Added: Enhanced logging for simulation distance
    • Fixed: Duplicate ticks cached by CoreTweaks after chunk unload
  • #637 Adds MixinItemNetherSeed and INetherSeed interface to prevent null returns from crop lookup in nether biomes. - @TheYoingLad
    • Added: Nether crop null-check fix, INetherSeed interface
    • Fixed: Pam's Nether getPlant null returns
  • #636 Adds MixinWorldServer_SimulationDistanceThermosFix and updates ISimulationDistanceWorld interface to handle simulation distance ticks correctly with Thermos. - @DarkShadow44
    • Added: Thermos simulation distance tick fix
    • Fixed: Simulation distance random ticks with Thermos
  • #635 Corrects mixin target mapping in Mixins.java registry for Last Millenium integration. - @wlhlm
    • Fixed: Last Millenium config assignment
    • Closes #633
  • #618 Adds MixinBlockSpike_PreserveNBT and MixinTileEntityEnchantedSpike_PreserveNBT to preserve full NBT compounds instead of just enchantment tags when spikes are placed/picked up. - @Kynake
    • Added: Full NBT preservation for XU spikes
    • Fixed: NBT data loss on spike placement/pickup, Overchanter + Spike exploit
  • #615 Adds mixins to MixinWorldServer_PreventChunkLoading and MixinWorld_PreventChunkLoading to intercept chunk loading requests triggered by block updates, gated by a new config option in FixesConfig. - @kuba6000
    • Added: Chunk load prevention for block updates, New config flag
    • Fixed: Excessive chunk loading on block updates
    • Closes GTNH#20821

Performance ​

  • #985 New mixin MixinS35PacketUpdateTileEntity_ByteArray bypasses NBT and compression for tile entity description packets when using byte array optimization, reducing packet size from ~73 to ~38 bytes average. - @AnsonYeung
    • Added: tile entity byte array packet optimization, SpeedupsConfig option
  • #983 FMLClientHandlerHook and SpeedupProgressBarTransformer now throttle window event pumping to 50ms (20 Hz) during pack load to avoid excessive event processing during material and texture loading. - @boubou19
    • Fixed: excessive CPU usage during pack load
  • #949 Adds MixinRenderItemFrame_CullDistantContents to apply distance culling to item frames (96 blocks) and their contents (64 blocks), plus configuration flag in SpeedupsConfig. - @Algent
    • Added: distance culling for item frames
  • #908 Added async icon loading mixins MixinTextureMap_AsyncIcons and MixinTextureMap_RemoveExtraIconLoad to process texture registration off the main thread. - @tiffit
    • Added: async texture icon loading, TextureMapAsyncIconsHook interface
  • #893 Added ASM transformer ModCandidateTransformer and multiple mixins to intern strings in ASMData, EnumHolder, and ModAnnotation. Changed ModCandidate to use Set instead of List for package storage. - @Alexdoru
    • Added: string interning for ASMDataTable, ModCandidateTransformer ASM transformer
  • #892 Added string interning mixins for ResourceLocation and UniqueIdentifier in FML to deduplicate modID string references in memory. - @Alexdoru
    • Added: string interning for ResourceLocation and UniqueIdentifier
  • #880 Replaced slow regex-based class name validation in MixinJarDiscoverer with optimized direct string parsing, reducing validation time from 129.75ms (0.41% of load time) to 10.5ms. - @danyadev
    • Fixed: Slow regex-based class name validation
  • #851 Added mixin MixinAdvancedModelLoader_CacheModels to cache advanced model renderers, reducing memory footprint by 31 MB across the full modpack and improving pack load time. - @Alexdoru
    • Added: Advanced model renderer cache
    • Fixed: Duplicate model instances in memory
  • #850 Replaced slow regular expressions in MixinWavefrontObject_OptimizeModelLoading with direct string parsing, reducing OBJ model load time from 1868ms to 633ms. Affects BiblioCraft, Galacticraft, Draconic Evolution, and other mods using OBJ models. - @danyadev
    • Added: Optimized wavefront OBJ parser
    • Fixed: Slow regex-based OBJ file parsing
  • #842 Added MixinRenderFallingBlock to clear the static world reference on world exit. - @Alexdoru
    • Added: RenderFallingBlock static world reference cleanup
    • Fixed: RenderFallingBlock static world instance leak
  • #841 Added MixinBlockReactorChamber_FixLeak to convert the retained field reference into a local variable, eliminating the long-lived reference. - @Alexdoru
    • Added: IC2 block reactor tile entity reference cleanup
    • Fixed: IC2 block reactor world leak via tile entity reference
  • #839 Added MixinEnchantmentHelper_FixLeak to clear cached enchantment references on world exit. Added access transformer entry for EnchantmentHelper. - @Alexdoru
    • Added: EnchantmentHelper cache leak fix mixin, Access transformer entry for EnchantmentHelper
    • Fixed: EnchantmentHelper memory leak
  • #831 Added RenderBlocks static instance cleanup to AfterClientExitWorldHook to clear world references on world exit. - @Alexdoru
    • Added: RenderBlocks static instance cleanup on world exit
    • Fixed: RenderBlocks static instance world reference leak
  • #823 Created AfterClientExitWorldHook that runs when exiting to main menu. Moved and added cleaning code for EntityRenderer pointed entity, NetHandlerPlayClient map storage, and RenderGlobal references. Added new mixins for MixinEntityRenderer_ClearPointedEntity and MixinMinecraft_ShutdownHook to clear retained world references. - @Alexdoru
    • Added: AfterClientExitWorldHook for world exit cleanup, EntityRenderer pointed entity clearing, NetHandlerPlayClient map storage clearing, RenderGlobal reference cleanup
    • Removed: MixinMinecraft_ClearRenderersWorldLeak (functionality moved)
    • Fixed: WorldClient memory leak (8 instances)
  • #787 Removed old static liquid mixin and added new mixins for dynamic liquids, fluid classic, and fluid finite to prevent chunk loading during liquid flow calculations. - @Alexdoru
    • Added: preventLoadingChunksWhenFlowingLiquids config option
    • Removed: MixinBlockStaticLiquid
    • Fixed: excessive chunk loading during liquid flow
  • #782 Added config option and mixin to MixinPathNavigate and MixinRandomPositionGenerator to prevent chunk loading during pathfinding calculations on the server side. - @Alexdoru
    • Added: preventLoadingChunksWhenPathfinding config option
    • Fixed: excessive chunk loading during entity pathfinding
  • #778 Added 13 chunk-boundary-aware mixins for BlockCocoa, BlockCrops, BlockFire, BlockGrass, BlockFarmland, BlockMushroom, BlockMycelium, BlockSapling, BlockStaticLiquid, BlockStem, BlockTorch, and BlockVine to check loaded neighbors before triggering chunk loads. - @Alexdoru
    • Added: 12 block chunk-loading prevention mixins
    • Removed: old BlockGrass mixin
    • Fixed: block ticks loading nearby chunks, chunk thrashing in claimed areas
    • Closes GTNH#21612, GTNH#21639
  • #775 Updated ForgeConfigurationTransformer and added ForgeConfigurationHook to eliminate redundant string allocations in Forge's Property.setValues() method. - @Alexdoru
    • Added: ForgeConfigurationHook
    • Fixed: Forge config memory bomb
  • #771 Modified MixinBlockGrass to check chunk boundaries before calling World.getBlockLightValue(), avoiding light value lookups that trigger adjacent chunk loads. - @Alexdoru
    • Fixed: grass blocks triggering chunk loading at borders
  • #769 Added CoFHCoreATDisablerTweaker and moved CoFHCore field access transformations to Forge's Access Transformer via cofh_at.cfg, eliminating recursive class loading. - @danyadev
    • Added: CoFH_at.cfg, CoFHCoreATDisablerTweaker
    • Fixed: CoFH access transformer overhead
  • #768 Created ForgeEventSubscriptionTransformer that parses superclass names directly from bytecode using ClassReader instead of loading and transforming classes recursively. - @danyadev
    • Added: ForgeEventSubscriptionTransformer optimization
    • Fixed: EventSubscriptionTransformer performance
  • #767 Added mixin MixinExtendedPlayer_EnumValuesSpam to cache enum values in Witchery's ExtendedPlayer class. - @Alexdoru
    • Added: Witchery enum values caching mixin
    • Fixed: Witchery enum allocation spam
  • #763 Added EnumASMHelper and updated ForgeConfigurationTransformer to cache enum values instead of calling the method repeatedly; removed unnecessary String.intern() calls. - @Alexdoru
    • Added: EnumASMHelper enum value caching
    • Fixed: config parsing memory bomb
  • #757 Modified LeafDecayHooks to avoid unnecessary ticking of leaf blocks in the chunk loading range. - @Alexdoru
    • Fixed: leaf decay chunk loading
  • #737 Added MixinBlockFalling_SkipUselessTick, MixinBlockLeaves_BFSDecay for breadth-first search leaf decay, MixinWorldGenLiquids_NoImmediateUpdates, MixinPlayerManager_ThrottleChunkGen, and DeferredChunkQueue. Improved pixie speed with fast atan2 approximation. Added LeafDecayHooks and per-mod leaf decay mixins (BOP, Forestry, Mystcraft). - @mitchej123
    • Added: falling block tick skipping, fast atan2 for pixies, deferred chunk queue, BFS leaf decay, chunk generation throttling
    • Fixed: worldgen performance, pixie calculation speed, recursive block updates from BOP SpringForcedGenerator
  • #735 Added optional compression level configuration. Implemented ReusableChunkDeflaterOutputStream to reuse Deflater and ByteBuffer instances, with buffer shrinking after streaks of small writes. Modified MixinAnvilChunkLoader_FastChunkWrite and MixinRegionFile_FastChunkCompression. - @mitchej123
    • Added: configurable compression level, ReusableChunkDeflaterOutputStream, buffer pooling for chunk compression
    • Fixed: chunk save performance
  • #733 Optimized unloadQueuedChunks() and getPendingBlockUpdates() to avoid TreeMap overhead. Added PendingBlockUpdateIndex interface and MixinWorldServer_PendingTickIndex to track pending updates more efficiently. Renamed old MixinChunkProviderServer to MixinChunkProviderServer_FastUnload with improved implementation. - @mitchej123
    • Added: PendingBlockUpdateIndex interface, SimulationDistanceHelper optimization, MixinWorldServer_PendingTickIndex
    • Removed: old MixinChunkProviderServer
    • Fixed: chunk loading performance
  • #724 Added PooledGzipOutputStream and updated MixinPacketBuffer to pool gzip output streams, avoiding the overhead of repeated stream initialization and closure. - @mitchej123
    • Added: PooledGzipOutputStream, Outbound gzip pooling
  • #722 Added AsyncNBTParser and PooledGzipInputStream to offload NBT parsing and gzip decompression from the main client thread, reducing blocking operations in PlayerControllerMP.updateController() and NetworkManager.processReceivePackets(). - @mitchej123
    • Added: AsyncNBTParser, PooledGzipInputStream, Async NBT parsing, Gzip stream pooling
  • #691 Added ASM-based constructor to NBTTagCompound with capacity parameter, and rewrote copy() method to use it with pre-sized HashMap and faster iteration. - @Alexdoru
    • Added: NBTTagCompound(int capacity) constructor, optimized copy() implementation
    • Removed: MixinNBTTagCompound_FastCopy (replaced by ASM)
    • Fixed: NBT copy performance
  • #677 Added mixin MixinThaumcraftApi_SpeedupGetInfusionRecipe to cache recipe lookups, controlled via SpeedupsConfig. - @Alexdoru
    • Added: MixinThaumcraftApi_SpeedupGetInfusionRecipe
    • Fixed: Thaumcraft recipe lookup performance
  • #650 Adds TileEntityDescriptionBatcher to collect S35PacketUpdateTileEntity packets per tick and flush them in batches, integrated via mixins in ForgeHooks, EntityPlayerMP, and PlayerInstance with new config in SpeedupsConfig. - @RecursivePineapple
    • Added: Tile entity update packet batching system, TileEntityDescriptionBatcher
    • Fixed: Excessive tile entity update packet flooding
  • #631 Adds MixinWorld_FastItemPhysics to optimize item entity physics calculations, with new config flag in SpeedupsConfig. - @mitchej123
    • Added: Fast item physics optimization
  • #630 Modified NBTTagCompoundHashMapTransformer to reduce initial tagMap capacity, exploiting the observation that 94% of NBTTagCompounds have size ≤6. - @sisyphussy

Internal / Refactor ​

  • #974 Adds Compat.isLwjgl3ifyLoaded() utility method; replaces repeated ClassLoader checks across multiple files with centralized call. - @Algent
    • Added: Compat.isLwjgl3ifyLoaded() utility
  • #930 Changed MixinChunkProviderServer_FastUnload to use LongSet interface instead of concrete implementation, allowing mods like Spool to substitute synchronized variants. - @BallOfEnergy1
  • #856 Refactored NBTTagCompoundHashMapTransformer to reduce ASM boilerplate by 114 lines while maintaining functionality. - @Alexdoru
  • #844 Extracted gradient-terminator validation into ColorFormatUtils.isGradientTerminator(). Created SignLimits utility for sign-related constants. Replaced magic numbers (14, 30, 15, 90, etc.) with named constants across color code mixins. - @alppp
    • Added: ColorFormatUtils.isGradientTerminator() method, SignLimits utility class with named constants
  • #814 Created MemoryConfig to consolidate memory leak fixes, moved related mixins to mixins/early/memory/ package, and injected AfterServerStoppedHook for unified cleanup execution. - @Alexdoru
    • Added: MemoryConfig category, memory package for memory-related mixins, AfterServerStoppedHook centralized cleanup
    • Removed: FixesConfig memory-related entries
  • #808 Changed type signatures in ChunkGenScheduler to use more generic types for easier interoperability with mods like Spool that may synchronize items. - @mitchej123
  • #790 Extracted LeafDecayHooks and related BFS leaf decay mixin implementations into GTNHLib dependency, updating all mixin references to use the external library. - @Alexdoru
    • Removed: LeafDecayHooks, local BFS leaf decay implementation
  • #744 Removed EmbedID mixins (MixinEmbedIDs, MixinFMLControlledNamespacedRegistry, MixinObjectIntIdentityMap, MixinGameData) and replaced with FastBlockLookup system using BlockExt_FastLookup interface, BlockLookupHooks, and MixinBlock_FastLookup. Updated mixin plugin configuration. - @mitchej123
    • Added: FastBlockLookup system, BlockExt_FastLookup interface, BlockLookupHooks
    • Removed: EmbedID system and related mixins
  • #727 Added ReentrantReadWriteLock to FastUtilIntHashMap and FastUtilLongHashMap to prevent concurrent modification issues. - @mitchej123
    • Added: read/write lock synchronization
  • #672 Migrated MixinDynamicTexture, MixinTextureAtlasSprite, and TexturesDebug utilities from GTNHLib, updated build.gradle to include removed dependency. - @Alexdoru
    • Added: MixinDynamicTexture, MixinTextureAtlasSprite, TexturesDebug utility
  • #656 Deletes IPatchedTextureAtlasSprite, updates ITexturesCache and AnimationsRenderUtils to remove references. - @sisyphussy
    • Removed: IPatchedTextureAtlasSprite functionality, AnimationsRenderUtils usage
  • #601 Reorganized ASM transformer classes into isolated packages (core/rfb, core/fml/tweakers, core/shared) to prevent cascading class loading on parent classloader, removed static config initialization from IFMLLoadingPlugin, and fixed non-functional transformer registrations. - @Alexdoru
    • Removed: static config initialization, non-functional early transformers, multiple broken transformer implementations
    • Fixed: transformers not executing, class loading across multiple class loaders

Chores ​

  • #980 Converts log statements to use parameterized logging format (markers, parameters) and replaces printStackTrace() with proper exception logging. - @boubou19
    • Removed: printStackTrace() calls
  • #951 Adds GitHub Actions workflow files for fullpack integration testing, including gate-by-required, daily integration tests, and rebuild-with-deps triggers. - @MalTeeez
    • Added: fullpack integration test workflows
  • #934 Adds required mod declarations to two Bibliocraft leak mixins so they only load when the mod is present. - @Nikolay-Sitnikov
    • Fixed: mixin warning messages on startup
  • #762 Moved debug mixin classes to mixins/early/debug/ directory and updated README with JVM argument requirements. - @Alexdoru
    • Added: debug mixins documentation
  • #711 Updated dependencies.gradle, gradle.properties, and settings.gradle for Gradle 9 and newer Blowdryer build script. - @Caedis

Contributors ​

Everyone who authored, reviewed or co-authored a change on this page, with how many of them:

@Alexdoru (92), @mitchej123 (52), @Caedis (37), @boubou19 (32), @RecursivePineapple (23), @Nikolay-Sitnikov (21), @sisyphussy (18), @MalTeeez (17), @danyadev (16), @Dream-Master (16), @koolkrafter5 (14), @DarkShadow44 (13), @Algent (12), @UltraProdigy (12), @tiffit (11), @wlhlm (9), @alppp (7), @AnsonYeung (7), @Worive (7), @DeathFuel (6), @ah-OOG-ah (5), @glowredman (5), @JohnButlerThird (5), @SST-03 (5), @SuperSoupr (5), @Eldrinn-Elantey (4), @leagris (4), @Ranzuu (4), @brandyyn (2), @Charsy89 (2), @chochem (2), @cubefury (2), @czqwq (2), @dipo33 (2), @Glease (2), @JackOfNoneTrades (2), @Kynake (2), @mist475 (2), @VortexSo4 (2), @0hwx (1), @Apis035 (1), @Auynonymous (1), @BallOfEnergy1 (1), @C0bra5 (1), @Claude (1), @copi143 (1), @Copilot (1), @DrParadox7 (1), @Eclipse-Sol (1), @eigenraven (1), @EnderProyects (1), @Ethryan (1), @Guvante (1), @ham-corp (1), @JL2210 (1), @jss2a98aj (1), @june-dev-username (1), @konkers (1), @kuba6000 (1), @Kuliiuu (1), @kurrycat2004 (1), @LazyFlesh (1), @Luca-Guettinger (1), @Lyfts (1), @MellowArpeggiation (1), @NeutronSelector (1), @ohentis (1), @OmdaCZ (1), @Omgise (1), @PLASMAchicken (1), @Sanduhr32 (1), @SKProCH (1), @Sopel97 (1), @TheYoingLad (1), @weirdreality (1)