Hodgepodge
241 merged pull requests.
New Features
- #1004 New client mixin MixinNetworkManager_ReceivedProcessingLimit rewrites the loop in NetworkManager.processReceivedPackets to check System.nanoTime every 50 packets against FixesConfig.receivedPacketTimeLimit. Adds changeReceivedPacketCountLimitToTimeLimit and receivedPacketTimeLimit (1_000 to 50_000_000 ns, default 5_000_000). - @kurrycat2004
- Added: config option to limit received packet processing by time, config for the received packet time limit
- Fixed: ping growing when many packets arrive in one tick
- #1003 New PacketStatsCommand registered on the ClientCommandHandler. It reads NetworkManager's receivedPacketsQueue by reflection. MixinNetworkManager_TrackIncomingPackets counts incoming client packets, gated by DebugConfig.trackIncomingPackets (default true, needs MC restart). - @kurrycat2004
- Added: /packetstats client command, trackIncomingPackets config option
- #1000 Adds OutputDeviceSupport, which uses OpenAL Soft device reopening, plus OutputDeviceSelectionGui and new SoundConfig options. A new mixin, MixinSoundDeviceThread, replaces ArchaicFix's device thread. The client ticker polls device state every 5 ticks. - @Algent
- Added: Audio output device selection screen, Audio device disconnect and reconnect recovery
- Removed: ArchaicFix sound device handling
- #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 New client QuickPlay class registered from HodgepodgeClient.postInit. HodgepodgeLateTweaker.acceptOptions parses --quickPlay* args into Launch.blackboard, falling back to system properties. - @mitchej123
- Added: quickPlaySingleplayer launch argument, quickPlayMultiplayer launch argument
- #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
ScrollbarRendererclass 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_CrosshairGuiOpento 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_FMLQueryFPSto raise FPS cap in FML missing mapping screen, plus configuration flag inFixesConfig. - @SuperSoupr- Added: FPS limiter raise for FML missing mapping screen
- #931 Adds multiple mixins overriding
getCommandSenderName()andfunc_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 DumpTextureAtlasCommand iterates the registered sprite map entries instead of keys and builds each line with a new formatLine helper using the TextureAtlasSprite's position and size. - @tiffit
- Added: sprite x, y, width and height in texture atlas dump
- #923 Adds
SoundConfigclass 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
MixinBiomeGenLavenderFieldsthat intercepts bonemeal application in lavender fields, plus configuration option inTweaksConfig. - @MalTeeez- Added: lavender growth via bonemeal in BOP lavender fields
- Closes GTNH#21283
- #894 Added
F1Stateclass 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, updatedStringUtilto recognize §u, and added support inFontRenderer,GuiTextField, and sign rendering mixins. Includes fallback color support inLegacyColorFallback. - @alppp- Added: drop shadow format code (§u) support, LegacyColorFallback class
- #885 Added music delay config fields to
TweaksConfigand mixinMixinMusicTickerto apply configurable delays. - @Caedis- Added: music delay configuration options
- Closes #860
- #881 New client-side DumpTextureAtlasCommand registered in HodgepodgeClient. It reads the atlas GL textures and writes images and lists to files. README debug section updated. - @sisyphussy
- Added: /dumptextureatlas command
- #869 Added configurable
movedTooQuicklyThresholdtoFixesConfigvia@ModifyConstantmixin inMixinNetHandlerPlayServer_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 Added client MixinIntCache, which overwrites IntCache.getCacheSizes with a more readable string, gated by TweaksConfig.moreReadableIntCacheSize. AllocationRateHUD was reworked so DebugScreenHandler draws it in the F3 list after the allocated memory line, and DebugScreenHandler is now always registered. - @Alexdoru
- Added: IntCache size line in F3, moreReadableIntCacheSize config option
- #865 Added
disablePotionEffectIconsconfig toggle viaMixinInventoryEffectRenderer_TogglePotionIconsto 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
AllocationRateHUDclient-side handler and/allocationsHudcommand 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 Adds EnumValuesTransformer (RFB) that injects a counter into every Enum values() method, reporting through EnumValuesHook. Controlled by hodgepodge.logEnumValues, logIntervalEnumValues (default 500) and logStacktraceEnumValues. Also renames HodgepodgeClassDump.dumpRFBClass to dumpClass and drops the EarlyConfig.ensureLoaded() calls. - @Alexdoru
- Added: debug transformer for Enum values() calls, EnumValuesDebug.csv output, logEnumValues, logIntervalEnumValues and logStacktraceEnumValues JVM arguments
- #752 Added
hodgepodge.cfgoption and mixinMixinGuiNewChat_CleanChatLogsto strip color codes fromGuiNewChatduring 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, andMixinGuiRepair_MaxAnvilCostfrom EnderCore, exposed viaTweaksConfig. - @Alexdoru- Added: MixinWorldType_VoidParticles, MixinContainerRepair_MaxAnvilCost, MixinGuiRepair_MaxAnvilCost
- #679 New MixinFMLClientHandler cancels logMissingTextureErrors and logs a condensed message, gated by TweaksConfig.hideTextureErrors. TweaksConfig.skipEmptySounds replaces FixesConfig.skipEmptySounds. - @Alexdoru
- Added: hideTextureErrors config option
- Migration: If you changed skipEmptySounds in the fixes config, set it again in the tweaks config.
- #678 Added
MixinCoFHCommandTpxFixto correct teleport command logic, and enhancedMixinMinecraft_ToggleDebugMessagewith location clipboard feature, both configurable. - @SST-03- Added: F3+C location clipboard hotkey, MixinCoFHCommandTpxFix
- Fixed: /cofh tpx command logic
- #664 Added client-side keybinding handler in
MixinMinecraft_ToggleDebugMessageusing 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 New MixinWorldProviderHell overrides getMovementFactor to return TweaksConfig.netherPortalRatio (default 8.0, range 0.125 to 64.0, needs an MC restart). The mixin has no setApplyIf, so it always applies. - @alppp
- Added: netherPortalRatio config option
- #609 Added
ASMConfigoption to control BoP fog rendering inBOPFogHandler; disabled by default to avoid overriding user preferences. - @MellowArpeggiation- Added: config option for BoP fog disable
- #604 New RFB transformer ConfigParsingTimeTransformer hooks net.minecraftforge.common.config.Configuration and reports to ConfigParsingTimeHook, enabled through EarlyConfig.debugLogConfigParsingTimes. FileLogger moved to core/shared and adds the class loader name to the file name when it is not the LaunchClassLoader. - @Alexdoru
- Added: hodgepodge.logConfigTimes debug flag, ConfigParsingTimes.csv log
New Content
- #882 Added Czech language file (cs_CZ.lang) with 69 translations and Czech README. - @Kuliiuu
- Added: Czech localization file, Czech README
Changes
- #1009 New client mixins MixinGuiInventory_MoveCraftingGrid (swaps the bound texture for hodgepodge:textures/gui/inventory_new.png and offsets the crafting title with a WrapOperation) and MixinContainerPlayer_MoveCraftingGrid (shifts slots 0-4 by +2 x and -4 y). Gated by TweaksConfig.moveInventoryCraftingGrid, default true, RequiresMcRestart. - @Ranzuu
- Added: new player inventory texture, config option moveInventoryCraftingGrid
- #946 Changed default value of
f1ShowHandconfiguration flag from true to false inTweaksConfig. - @SuperSoupr - #910 Changed @Config.DefaultBoolean from true to false for deduplicateASMDataTableStrings, internResourceLocationDomain and internUniqueIdentifierModid in MemoryConfig.AllocationFixes. - @boubou19
- #814 Adds MemoryConfig (category memory) with leaks and allocs groups. Removes the leak options from FixesConfig and moves the related mixins to the memory package. New MixinMinecraftServer_ShutdownHook runs the cleanup (CoFH server reference, FML network channels, CommandBase admin commander) after FMLServerStoppedEvent, replacing the code in Hodgepodge.onServerStopped. - @Alexdoru
- Added: Memory config category, server shutdown hook for memory cleanup
- Removed: leak fix options in the Fixes config
- #744 Removed the embedid mixins, HasID, EmbedToggle, TypeSettable and ASMConfig.embedID_experimental. Added MixinBlock_FastLookup, which overwrites Block.getBlockById and getIdFromBlock to use BlockLookupHooks and a flat array, plus a preinit MixinGameData_BlockArraySync and SpeedupsConfig.fastBlockLookup (default true, RequiresMcRestart). - @mitchej123
- Added: fast block lookup option
- Removed: embedID_experimental option
- #721 New MixinLOTRConfig redirects the Configuration.get call in LOTRConfig.load (ordinal 37) to register 'Run language update helper' with default false. It is gated by the new FixesConfig.lotrLanguageHelperDefault, on by default, and requires LOTR. PREVENT_LAVA_CHUNK_LOADING now excludes LOTR. - @mist475
- Added: Option to default the LOTR language update helper to off
- #708 Removed addExcludedMod(FASTCRAFT) from OPTIMIZE_TILEENTITY_REMOVAL, the NBT compound fast copy mixin and EMBED_BLOCKIDS, and addExcludedMod(DRAGONAPI) from the fast NBT copy and STRING_POOLER_NBT_STRING in Mixins.java. Tag compound string pooling and the long/int hash map speedup keep their exclusions. - @brandyyn
- Removed: FastCraft exclusion on three speedup mixins, DragonAPI exclusion on two NBT mixins
- #661 Changed the default of ASMConfig.dissectVarargs from true to false. - @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
- #1022 Adds MixinTileEntityNuclearReactorElectric_RefreshChambers, which wraps refreshChambers with a re-entrancy guard to stop recursive refreshes. Registered under the existing IC2_REACTOR_DUPE mixin and its fixIc2ReactorDupe config. - @MarloGr
- Fixed: crash when two nuclear reactors share two reactor chambers
- Closes GTNH#27076
- #1018 Adds MixinAnvilChunkLoader_LoadDuringSave and an accessor for AnvilChunkLoader$PendingChunk. Chunks removed from the pending list in writeNextIO are tracked in an in-flight map under syncLockObject until written, so loadChunk__Async sees the newest NBT. Gated by the new fixChunkLoadDuringSave config; test added in LoginSessionLifecycleTest. - @micvog
- Added: fixChunkLoadDuringSave config option
- Fixed: BoP foliage turning into redstone lamps, chunks loading outdated data during save, chunks regenerating while being saved
- Closes GTNH#25512, GTNH#27053
- #1016 MixinS0APacketUseBed_FixHeightOverflow masks the decoded bed Y with 0xFF at the tail of readPacketData, so heights 128-255 are read as unsigned. The packet format is unchanged. - @DreamYao520
- Added: fixBedHeightOverflow config option
- Fixed: bed at Y 128-255 teleporting player below the world in multiplayer
- Closes GTNH#26839
- #1014 Added MixinBiomeEmeraldGeneration, which ANDs the isReplaceableOreGen result in decorate with BOPConfigurationTerrainGen.genOreGeneral for six BOP biome classes. - @Ressed
- Added: fixBOPEmeraldGeneration config option
- Fixed: vanilla emerald ore generating despite BOP OreGeneration config
- Closes GTNH#26863
- #1013 Replaced MixinTileEntityArmorStand_MarkDirty with MixinBibliocraftInventories_MarkDirty, which calls markDirty() after setInventorySlotContents and decrStackSize on all targeted tile entities. Renamed the FixesConfig field. - @micvog
- Added: bibliocraftInventoriesMarkDirty config option
- Removed: bibliocraftArmorStandMarkDirty config option
- Fixed: items on Bibliocraft shelves and tables not saved
- Closes GTNH#26960
- #1006 MixinMazeHandler_threadedIO wrote the parent tag key as "data" instead of the case-sensitive "Data" that Thaumcraft reads. It now writes "Data". - @Chitak985
- Fixed: labyrinth.dat data lost with threadedWorldDataSaving
- Closes #919
- #1005 New late common mixin MixinTileEntityArmorStand_MarkDirty calls markDirty at the tail of setInventorySlotContents and decrStackSize on TileEntityArmorStand. Gated by the new FixesConfig.bibliocraftArmorStandMarkDirty option. - @Nikolay-Sitnikov
- Added: config option bibliocraftArmorStandMarkDirty
- Fixed: Bibliocraft Armor Stand contents rolling back on save after hopper or shift-click changes, World reload replacing Bibliocraft Armor Stand contents with the player's armor
- Closes Dupes-Exploits-GTNH#133
- #1002 MixinAnvilChunkLoader_FastChunkWrite now synchronizes buffer use and keeps compression outside the lock. New MixinAnvilChunkLoader_SaveQueue, gated by fixChunkSaveQueueRace, keeps a pending chunk save from being dropped from the IO queue. WorldDataSaver gains a flush that /save-all flush now calls through new mixins. Regression tests are added. - @Algent
- Added: fixChunkSaveQueueRace config option, World data flush on /save-all flush
- Fixed: World corruption from concurrent chunk saves and /save-all, Chunk saves stranded in the file IO queue
- Closes GTNH#25520
- #1001 New mixin MixinFurnaceSaveItemBurnTimeToNBT writes currentItemBurnTime to the "ItemBurnTime" NBT tag on writeToNBT and reads it back in readFromNBT. It is controlled by the new furnaceSaveItemBurnTimeToNBT config, default true, which needs an MC restart. - @Faotik
- Added: furnaceSaveItemBurnTimeToNBT config option
- Fixed: Furnace current fuel burn time not saved to NBT
- #997 LibraryHodgepodgeOpenAL and SpatializeSupport now configure positional stereo and direct playback before a channel starts. SpatializeSupport adds handling for AL_DIRECT_CHANNELS_SOFT and source panning (AL_PANNING_ENABLED_SOFT, AL_PAN_SOFT), resolved reflectively, and gets an invalidate() call for context reloads. - @Algent
- Fixed: HRTF affecting menu sounds and music, Headphone HRTF effects on menu sounds
- Closes GTNH#26634
- #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
- #990 New mixin MixinTileEntityFurnace_FixFuelOverflow redirects the BurnTime setShort in writeToNBT to setInteger, and redirects the furnaceBurnTime PUTFIELD in readFromNBT to read getInteger("BurnTime"). Gated by FixesConfig.fixFuelOverflow, default true. - @playfuldoggo
- Added: config option fixFuelOverflow
- Fixed: vanilla furnace burn time overflow with high burn time fuels
- #989 Modified MixinContainerFancySign to validate stack limits during shift-click transfers, preventing items from exceeding the sign slot's maxStackSize. - @Worive
- Fixed: BiblioCraft FancySign item duplication exploit (issue #197)
- Closes Dupes-Exploits-GTNH#197
- #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
- Added: armor stand validation check
- Fixed: Bibliocraft Armor Stand dupe exploit
- Closes Dupes-Exploits-GTNH#108
- #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
- #984 Added TargetedMod.ULTRAMINE as an excluded mod on the SPEEDUP_CHUNK_UNLOAD mixin entry in Mixins.java. - @SKProCH
- Fixed: Chunk unload speedup conflicting with Ultramine
- #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
- #970 S1DPacketEntityEffect stores duration as a short. A mixin captures the real duration when it exceeds Short.MAX_VALUE, and MixinNetHandlerPlayServer_LongPotionDuration sends a follow-up MessagePotionDuration after the vanilla packet. MixinStringUtils_LongTimer overwrites ticksToElapsedTime to format h:mm:ss. Configs: fixLongPotionDuration, fixLongTimerFormat, both requiring an MC restart. - @Eldrinn-Elantey
- Added: MessagePotionDuration packet, fixLongPotionDuration config option, fixLongTimerFormat config option, h:mm:ss timer format
- Fixed: potion timers freezing at 27:18 or showing :, potion icon vanishing from the HUD for effects over 27 minutes
- #969 BOPFogHandler now uses
renderViewEntityfor fog origin calculation. - @Caedis- Fixed: fog position with Freecam
- #968 New mixin MixinActiveRenderInfo_CameraRotation uses
renderViewEntityfor 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.pngwhen 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
enableMacosCmdShortcutstoenableTextFieldCtrlShortcutsto reflect wider scope. - @Eldrinn-Elantey- Fixed: Ctrl shortcuts broken on non-Latin keyboard layouts
- #956 Adds client mixin MixinGuiCreateFlatWorld_FixItemCrash on GuiCreateFlatWorld$Details.drawSlot. It nulls an ItemStack whose item is null and uses the block's localized name as the label. Gated by fixFlatWorldLayerMissingItemBlockCrash. - @Eclipse-Sol
- Added: fixFlatWorldLayerMissingItemBlockCrash config option
- Fixed: Superflat customization crash on blocks without an ItemBlock
- #953 Sets
asyncIconLoadingdefault 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
TileEntityDescriptionBatcherto 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_FixComparisonwith proper comparison logic to handle keybind category collisions, plus configuration flag inFixesConfig. - @Algent- Added: keybind category collision handling
- Fixed: Controls menu crash with non-English localization
- Closes GTNH#25698
- #942 Adds missing cast in
MixinEntityGolemBasefollowing up on PR #211. - @koolkrafter5- Fixed: golem marker loading cast error
- #941 Changed injection point from TAIL to BEFORE in
MixinGameData_BlockArraySyncso fast block lookup cache is refreshed beforeFMLModIdMappingEventcompletes, fixingBlock.getIdFromBlockaccuracy for consumers like Postea. - @SuperSoupr- Fixed: block ID lookup returning stale IDs during mod ID mapping
- #940 Changed default value of
fixBottomFaceUVconfiguration flag from true to false inFixesConfig. - @koolkrafter5- Fixed: texture rendering issues caused by UV fix
- Closes #920
- #934 Added addRequiredMod(TargetedMod.IC2) to FIX_TESR_LEAK and addRequiredMod(TargetedMod.BIBLIOCRAFT) to the BiblioCraft leak mixin entry in Mixins.java. - @Nikolay-Sitnikov
- Fixed: console warnings for BiblioCraft leak mixins when the mod is not loaded
- #933 Adds
MixinEntityUndead_SunFireImmunityto checkisImmuneToFire()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_FixDupemixin to ensure item clearing in item frames happens immediately, plus configuration flag inFixesConfig. - @Algent- Added: item frame duplication fix
- Fixed: vanilla piston item frame duplication exploit
- Closes Dupes-Exploits-GTNH#276, Dupes-Exploits-GTNH#288
- #922 In Mixins.java, FIX_SAVE_FILE_WRITTEN_TO_EXIST_DIRECTORY now uses addClientMixins instead of addCommonMixins for MixinGuiCreateWorld_NotWriteToExistDir, since the target GuiCreateWorld is client-only. - @Charsy89
- Fixed: server log warning about invalid mixin side for the save directory fix
- #916 Added mixin
MixinEnchantmentHelperthat 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_EnchantGlintthat 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_FixIconthat 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 toargs[Index]inMixinModAnnotation_Internto match compatible Mixin syntax. - @Alexdoru- Fixed: Mixin framework syntax incompatibility
- #898 Added ASM transformer
ModAPITransformerSignaturePatchand hook that removes signatures from optional interface implementations during mod loading. - @mitchej123- Added: ModAPITransformerHook, ModAPITransformerSignaturePatch
- Fixed: Forge Optional annotation verification errors
- Closes #832
- #897 In MixinChunkProviderServer_DisableTerrain_EndlessIDs, setBiomeShortArray is now called on newChunk instead of chunk. - @june-dev-username
- Fixed: GOG worlds having only ocean biomes
- #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, andRiteClimateChangeto prevent tooltip conflicts. - @tiffit- Added: EID compatibility mixins for IC2, BoP, Witchery
- Fixed: EID incompatibilities with IC2, Biomes o' Plenty, Witchery
- #888 Added mixin
MixinPaintingUtilthat 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 BlockLookupHooks.getIdFromBlock now checks that a cached ID maps back to the same Block instance and falls back to the registry otherwise. MixinGameData_BlockArraySync invalidates the cache at the head of GameData.injectWorldIDMap and rebuilds it on return. - @NeutronSelector
- Fixed: Chisel cobblestone becoming flammable after loading an old world with fastBlockLookup enabled
- Closes GTNH#23811
- #877 Added mixin
MixinChunkProviderServer_DisableTerrain_EndlessIDsthat replacesgetBiomeArray()/setBiomeArray()calls with EndlessIDs-compatiblegetBiomeShortArray()/setBiomeShortArray()methods. - @konkers- Added: EndlessIDs compatibility layer
- Fixed: Crash with disableChunkTerrainGeneration and EndlessIDs
- Closes #876
- #875 Added bounds check in
MixinForgeHooks_ModernPickBlockto handle cases whereplayer.openContainermay not matchplayer.inventoryContainer. - @DarkShadow44- Fixed: Pick block out-of-bounds crash
- Closes GTNH#18777
- #874 Modified
MixinCommandBase_JoinArgsto 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
MixinOverlayTesrto clear tile entity references in IC2's overlay TESR after rendering. - @Alexdoru- Fixed: IC2 OverlayTESR memory leak
- #867 Modified
MixinFakePlayerFactory_FixLeakto 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
SpeedupLongIntHashMapTransformerto exclude static fields like Thaumcraft'sTeleporterThaumcraft.destinationCoordinateCachefrom LongHashMap transformation to prevent leaking server context. - @Alexdoru- Fixed: World leak in Thaumcraft teleporter via static cache
- #859 Modified
WorldProvider.resetRainAndThunder()via mixin to setrainTimeandthunderTimetorand.nextInt(168000) + 12000instead of zero, matching normal weather update behavior. - @Eldrinn-Elantey- Fixed: Weather toggling immediately after sleep reset
- #858 Added mixin
MixinWorldGenKelpto 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 addExcludedMod(DREAMCRAFT) to the Bibliowood Forestry tab registry mixin entry. In MixinBOPBiomeDecorator_CacheRandom, removed class-level remap=false and put it on the NEW injection point, so the method name still remaps. - @Alexdoru
- Fixed: invalid BOP biome decorator mixin remap, Bibliowood Forestry mixin applying in Dreamcraft
- #855 Changes @Shadow to @Shadow(remap = false) on the tile fields in the bibliocraft leaks renderer mixins. - @Alexdoru
- Fixed: missing remap flags on BiblioCraft leak mixins
- #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
- #847 Replaces TargetedMod.MRTJPCORE with MRTJPCORE_V_BEFORE_113, which matches only when MrTJPCoreMod is older than 1.1.3. FIX_HUD_LIGHTING_GLITCH and FIX_POPPING_OFF now require that target. - @AnsonYeung
- Fixed: duplicate MrTJPCore mixins crashing the ProjectRed dev environment
- #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
- #843 Renames AfterClientExitWorldHook to ClientLeaksCleaningHook and splits it into onClientExitToMainMenu and onClientWorldUnload. A new WorldEvent.Unload handler in HodgepodgeClient calls the latter for remote worlds. The item renderer and RenderBlocks cleanups move to the unload hook, and the PlayerController null-out is added to the main menu hook. - @Alexdoru
- Fixed: client world references surviving dimension switches
- #842 Adds client mixin MixinRenderFallingBlock, which sets blockAccess on the renderer's RenderBlocks to null at the end of doRender. Gated by new config fixRenderFallingBlockLeak (default true, requires restart). - @Alexdoru
- Added: fixRenderFallingBlockLeak config option
- Fixed: RenderFallingBlock leaking the world instance
- #841 Adds MixinBlockReactorChamber_FixLeak, which nulls the shadowed reactor field at the end of randomDisplayTick. Gated by new config option fixIC2BlockReactorLeak (default true, requires restart), applied only when IC2 is present. - @Alexdoru
- Added: fixIC2BlockReactorLeak config option
- Fixed: IC2 reactor chamber leaking the world instance
- #839 New MixinEnchantmentHelper_FixLeak nulls the static ModifierDamage, HurtIterator and DamageIterator fields after the enchantment calls return. Adds access transformers for the three inner classes, the fixEnchantmentHelperLeak option, and a Mixins entry that excludes ArchaicFix. - @Alexdoru
- Added: fixEnchantmentHelperLeak option, EnchantmentHelper leak fix
- Fixed: EnchantmentHelper leaking the world instance
- #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 MixinWorldServer_SimulationDistanceThermosFix gets @Dynamic, @SuppressWarnings("target") and remap = false. MixinEntityPlayerMP gets @Dynamic and the method targets become onUpdate()V and localOnUpdate()V. - @czqwq
- Fixed: mixin warnings for the Thermos and Player-API injections
- #831 AfterClientExitWorldHook sets RenderBlocks.getInstance().blockAccess to null when MemoryConfig.leaks.fixRenderBlocksWorldLeak is true. The option defaults to true. - @Alexdoru
- Added: fixRenderBlocksWorldLeak option
- Fixed: RenderBlocks static instance leaking the world
- #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
ChunkGenSchedulertriggered via server shutdown event to release chunk generation queue and related state. - @Alexdoru- Fixed: memory leak in chunk generation scheduler
- #815 Added
WorldAccessor_ClearMapStoragemixin to clear the static MapStorage instance viaAfterServerStoppedHookwhen 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
theAdminreference 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
BlockLookupHooksto 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
SimulationDistanceHelperfrom 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
ItemRendererAccessormixin 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
GuiClipboardto 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
NBTTagSmartByteArrayto prevent passing null values toNBTTagByteArray, 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 The EntityGuard mixins on ChunkProviderServer (vanilla and Bukkit variants) check AnvilChunkLoader.chunkExists and allow the load. ServerThreadLongHashMap drops instances whose owner thread is dead, clears snapshots on clearSnapshots(), and ignores stale instances in refreshSnapshot() instead of throwing IllegalStateException. - @mitchej123
- Fixed: chunks on disk returned as empty chunks while generation was blocked, stale ServerThreadLongHashMap instances from old threads throwing errors
- #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
ServerThreadLongHashMapto 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
MixinBlockGrassandMixinBlockMyceliumto resolve conflicts with AquaAcrobatics mod. - @Alexdoru- Fixed: incompatibility with AquaAcrobatics mod
- Closes #783
- #781 Corrected class name resolution in
SpeedupLongIntHashMapTransformerto handle obfuscated environments. - @Alexdoru- Fixed: obfuscated class transformation
- #776 Refactored
ForgeEventSubscriptionHookandForgeEventSubscriptionTransformerto reuseClassReaderand cascade parent class loading like original Forge implementation. - @Alexdoru- Fixed: EventSubscriptionTransformer Angelica compatibility
- #774 Reverted
ForgeEventSubscriptionTransformerchanges inHodgepodgeRfbPluginto restore cascading superclass loading that Angelica depends on. - @Alexdoru- Fixed: AgriCraft startup with Angelica
- Closes GTNH#23757
- #770 Added mixin
MixinGuiCreateWorld_NotWriteToExistDirthat 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
MixinCraftingManagerrecipe caching added in #596;RecipeSortermaintains a specific recipe order that caching violated. - @Alexdoru- Removed: CraftingManager recipe cache
- Fixed: recipe matching with cached recipes
- Closes #700
- #760 Modified
ReusableChunkDeflaterOutputStreamto avoid sharing a singleDeflaterinstance across multiple threads, which caused corruption in concurrent backup operations. - @mitchej123- Fixed: backup corruption with reused deflater
- Closes GTNH#23665
- #759 TravellersGear.returnTGItems was rewritten to edit the NBT player list in place (removeTag) instead of swapping in a new list reference that was never saved. It then calls saveDataToFile, or deleteFile when the list is empty. - @Alexdoru
- Fixed: Travellers Gear recovered items being given again on every login
- #753 MixinTileEntityCrop now targets the GETFIELD of InventoryPlayer.mainInventory and drops cancellable. MixinGuiNewChat_CleanChatLogs adds remap = false to the Logger.info target. - @Alexdoru
- Fixed: IC2 crop rightClick injection target, chat log color code stripping injection target
- #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
- #748 MixinBlock_FastLookup now uses priority = 1100 so its @Overwrite of func_149729_e wins over jss.bugtorch MixinBlock. - @mitchej123
- Fixed: mixin overwrite conflict with BugTorch on Block
- #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
- #731 TweaksConfig.ic2CellWithContainer now defaults to false instead of true. - @danyadev
- Fixed: IC2 Blast Furnaces not consuming the compressed air cell
- Closes #537
- #727 FastUtilIntHashMap and FastUtilLongHashMap wrap every access in a ReentrantReadWriteLock, with read locks for lookups and write locks for put, remove and clear. FastUtilLongHashMap.valuesIterator now iterates over a copied ArrayList. - @mitchej123
- Fixed: thread safety of the fast int and long hash maps
- #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
- #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
- #680 Corrected mixin names in
MixinTEReactorChamberand updated Gradle wrapper and build configuration. - @ah-OOG-ah- Fixed: Mixin remapping failures
- #676 Added
MixinRenderBlocks_FaceYNegUVto correct texture UV mapping on block bottom faces, controlled byfixBottomFaceUVconfig option. - @leagris- Added: MixinRenderBlocks_FaceYNegUV, fixBottomFaceUV config option
- Fixed: Bottom face texture UV flip
- #675 Added
MixinMinecraftServer_ClearServerRefto null out the static server instance during shutdown, exposed viaFixesConfig. - @Alexdoru- Added: MixinMinecraftServer_ClearServerRef
- Fixed: MinecraftServer static reference leak
- #673 ClientKeyListener calls ConfigurationManager.save(TweaksConfig.class) after toggling fastBlockPlacing. - @Caedis
- Fixed: fast block placing toggle not persisting between sessions
- #669 Modified
MixinContainer_FixShiftRecursionto validate slot state at each iteration rather than once at the start. - @DarkShadow44- Fixed: Shift recursion slot checking
- #666 Added mixin
MixinItemRenderer_FixInstantItemSwitchto delay texture rendering until the item switch animation completes, controlled viaFixesConfig. - @danyadev- Added: MixinItemRenderer_FixInstantItemSwitch
- Fixed: Instant item texture switch with different NBT
- #665 TravellersGear.initialize checks for the gzip magic bytes (0x1F 0x8B) and uses CompressedStreamTools.readCompressed or read accordingly. saveIfDirty now writes through writeCompressed to a FileOutputStream. - @koolkrafter5
- Fixed: Travellers Gear item recovery failing on uncompressed TG-SaveData.dat files
- #663 Corrected ASM obfuscation mapping in
VarargDissectortransformer and updatedASMConfigto use correct obfuscated names. - @Alexdoru- Fixed: Chunk loading crash in Twilight Forest
- Closes GTNH#22518
- #662 Moved
sendNEIHelpfunction fromMixinMinecraft_ToggleDebugMessageinto a newNEIKeyHelperclass 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, injecting into Chunk.addEntity before the dumpStack call and cancelling for NaN/infinite coordinates or a chunk offset over 1000. New FixesConfig option removeInvalidChunkEntites (default true, needs MC restart) gates the mixin. - @sisyphussy
- Added: config option removeInvalidChunkEntites
- Fixed: 2.8.1 server not starting because of entities with invalid coordinates, thrown potions and arrows at the wrong location
- 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
- #1008 WorldDataSaver.writeData serializes forcedchunks.dat data to a byte array on the IO worker and compares it to the file on disk with Guava's ByteSource.contentEquals. It returns early when the bytes match. A missing or unreadable file still goes through the normal write. Adds a test in WorldDataSaverTest. - @Algent
- Fixed: forcedchunks.dat rewritten on every save when unchanged
- #998 SpeedupOreDictionaryTransformer now uses deobfuscated names for ItemStack and Item and drops the isObf logic. It swaps IntOpenHashSet for IntArraySet and sizes IntArrayList to 2. - @danyadev
- Fixed: OreDictionary transformer not applying because obfuscated names were used
- #995 New client mixin MixinAbstractResourcePack overwrites AbstractResourcePack.locationToName with plain string concatenation instead of String.format. Gated by SpeedupsConfig.optimizeResourcePackPath, default true, RequiresMcRestart. - @danyadev
- Added: config option optimizeResourcePackPath
- #985 Adds MixinS35PacketUpdateTileEntity_ByteArray, which redirects readPacketData and writePacketData to send NBT of the form {one char: byte array} as a key byte plus raw bytes. The mixin is gated by the new SpeedupsConfig.directTileEntityArraySerialization option, and batchDescriptionPacketsCode now defaults to false. - @AnsonYeung
- Added: directTileEntityArraySerialization config 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_CullDistantContentsto apply distance culling to item frames (96 blocks) and their contents (64 blocks), plus configuration flag inSpeedupsConfig. - @Algent- Added: distance culling for item frames
- #908 Added async icon loading mixins
MixinTextureMap_AsyncIconsandMixinTextureMap_RemoveExtraIconLoadto process texture registration off the main thread. - @tiffit- Added: async texture icon loading, TextureMapAsyncIconsHook interface
- #893 Added mixins for ASMData, EnumHolder and ModAnnotation that route strings through ASMDataStringPooler, freed in Hodgepodge.init. Added ModCandidateTransformer, registered manually in HodgepodgeCore because cofh loads ModCandidate too early, which swaps the package List for a Set. Gated by MemoryConfig.allocs.deduplicateASMDataTableStrings. - @Alexdoru
- Added: deduplicateASMDataTableStrings config option
- #892 Added MixinResourceLocation_Intern and MixinUniqueIdentifier_Intern, which use MixinExtras expressions to call String.intern on the assigned fields. Gated by MemoryConfig.allocs.internResourceLocationDomain and internUniqueIdentifierModid. - @Alexdoru
- Added: internResourceLocationDomain config option, internUniqueIdentifierModid config option
- #880 Added MixinJarDiscoverer, which redirects the Pattern.matcher call in JarDiscoverer.discover to null and replaces the matches() check with a manual scan of the entry name. Gated by SpeedupsConfig.optimizeJarDiscovererRegexOverhead. - @danyadev
- Added: optimizeJarDiscovererRegexOverhead config option
- #851 Adds client mixin MixinAdvancedModelLoader_CacheModels, which keeps a ConcurrentHashMap of ResourceLocation to WeakReference<IModelCustom> and returns the cached model from loadModel when present. Gated by new config cacheAdvancedModels in the allocs section (default true, requires restart). - @Alexdoru
- Added: cacheAdvancedModels config option
- #850 Replaced slow regular expressions in
MixinWavefrontObject_OptimizeModelLoadingwith 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
- #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
MixinPathNavigateandMixinRandomPositionGeneratorto 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, andBlockVineto 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
ForgeConfigurationTransformerand addedForgeConfigurationHookto eliminate redundant string allocations in Forge'sProperty.setValues()method. - @Alexdoru- Added: ForgeConfigurationHook
- Fixed: Forge config memory bomb
- #771 Modified
MixinBlockGrassto check chunk boundaries before callingWorld.getBlockLightValue(), avoiding light value lookups that trigger adjacent chunk loads. - @Alexdoru- Fixed: grass blocks triggering chunk loading at borders
- #769 Added
CoFHCoreATDisablerTweakerand moved CoFHCore field access transformations to Forge's Access Transformer viacofh_at.cfg, eliminating recursive class loading. - @danyadev- Added: CoFH_at.cfg, CoFHCoreATDisablerTweaker
- Fixed: CoFH access transformer overhead
- #768 Created
ForgeEventSubscriptionTransformerthat parses superclass names directly from bytecode usingClassReaderinstead of loading and transforming classes recursively. - @danyadev- Added: ForgeEventSubscriptionTransformer optimization
- Fixed: EventSubscriptionTransformer performance
- #767 Added mixin
MixinExtendedPlayer_EnumValuesSpamto cache enum values in Witchery'sExtendedPlayerclass. - @Alexdoru- Added: Witchery enum values caching mixin
- Fixed: Witchery enum allocation spam
- #763 Added
EnumASMHelperand updatedForgeConfigurationTransformerto cache enum values instead of calling the method repeatedly; removed unnecessaryString.intern()calls. - @Alexdoru- Added: EnumASMHelper enum value caching
- Fixed: config parsing memory bomb
- #757 Modified
LeafDecayHooksto 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 NBTTagCompoundHashMapTransformer now adds an NBTTagCompound(int capacity) constructor and replaces copy() via ASM. The MixinNBTTagCompound_FastCopy mixin was deleted and SpeedupLongIntHashMapTransformer was cleaned up. - @Alexdoru
- Removed: NBTTagCompound FastCopy mixin
- #677 New mixin MixinThaumcraftApi_SpeedupGetInfusionRecipe overwrites ThaumcraftApi.getInfusionRecipe with an indexed loop. It is gated by the new speedupThaumGetInfusionRecipes config, default true, requires restart. - @Alexdoru
- Added: speedupThaumGetInfusionRecipes config option
- #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 New MixinWorld_FastItemPhysics wraps the getEntitiesWithinAABBExcludingEntity call in World.getCollidingBoundingBoxes and returns an empty list when the entity is an EntityItem. It is controlled by SpeedupsConfig.fastItemEntityPhysics (default true, needs an MC restart) and excluded when FalseTweaks is present. - @mitchej123
- Added: fastItemEntityPhysics config option
- Fixed: item physics lag with many dropped items
- #630 NBTTagCompoundHashMapTransformer now calls the fastutil HashMap constructor with an initial capacity of 4 instead of the no-argument one. With a load factor of 0.75 that holds 6 entries before resizing. - @sisyphussy
Internal / Refactor
- #980 Replaced printStackTrace calls with Common.log.error or FMLLog logger calls, and converted string concatenation and String.format log calls to parametrized logging across mixins, commands, FileLogger and the client code. - @boubou19
- Removed: printStackTrace calls
- #974 Added Compat.isLwjgl3ifyPresent() cached in Compat.init and replaced Loader.isModLoaded("lwjgl3ify") calls in HodgepodgeSoundOptionsGui, SoundDeviceTweaks, SpatializeSupport and MixinWaypointManager. - @Algent
- #930 MixinChunkProviderServer_FastUnload now shadows chunksToUnload as Set<Long> and casts it to the LongSet interface instead of LongOpenHashSet. - @BallOfEnergy1
- #862 Reverts #856 in NBTTagCompoundHashMapTransformer: restores the public NBTTagCompound(int capacity) constructor generated via ASM, and the setTag name and descriptor fields, in place of the private Map constructor. - @UltraProdigy
- #856 NBTTagCompoundHashMapTransformer now adds a private NBTTagCompound(Map) constructor that builds an Object2ObjectOpenHashMap from the map, replacing the capacity constructor. The setTag-based copy code and its name fields are removed, about 125 lines deleted. - @Alexdoru
- Removed: setTag-based NBT copy ASM code
- #844 Adds ColorFormatUtils.isGradientTerminator(char), gradient length and offset constants, and a SignLimits class (RAW 90, VISIBLE 15). The color-code mixins use these instead of duplicated checks and magic numbers. - @alppp
- #808 ChunkGenScheduler fields and signatures switch from concrete fastutil and JDK classes (Int2ObjectOpenHashMap, LongOpenHashSet, IdentityHashMap and so on) to the Int2ObjectMap, LongSet, LongList, Long2IntMap and Map interfaces, so other mods such as Spool can synchronize them. - @mitchej123
- #790 Deletes LeafDecayHooks and points the vanilla, BOP, Magical Crops-style and Witchery leaf mixins at GTNHLib's BFSLeafDecay.handleDecayChecked, with ci.cancel() now called in each mixin. Bumps GTNHLib to 0.9.41 in dependencies.gradle and the required-after version in the @Mod annotation. - @Alexdoru
- Removed: LeafDecayHooks
- #762 Moved MixinDimensionManager, MixinDynamicTexture, MixinEventBus_DebugRegistration, MixinNBTTagCompound_CheckCME, MixinRenderGlobal and MixinTextureAtlasSprite to mixins.early.debug and updated Mixins.java references. README gains a Debug JVM args section. - @Alexdoru
- Added: README section on debug JVM args
- #674 Added a DRAGONAPI TargetedMod and excluded it from the NBT mixins, moved the NBT and packet mixins into nbt and packets packages, and changed MixinNetHandlerPlayClient_SquashBedMessages to compare the translation key instead of building new ChatComponentTranslation objects. - @Alexdoru
- #601 Moved coremod classes into standalone packages core/rfb, core/fml/tweakers and core/shared, and replaced the old asm transformers with new ones under core/fml (for example ModContainerFactoryTransformer). Deleted EarlyClassTransformer and its CCTransformer manifest entry, removed the static config initialiser on the loading plugin, and added a -Dhodgepodge.dumpClass run argument. - @Alexdoru
- Added: core/rfb, core/fml/tweakers and core/shared packages, ModContainerFactoryTransformer
- Removed: EarlyClassTransformer, CCTransformer manifest attribute
- Fixed: coremod transformers not applying, class loading issues with multiple class loaders
Chores
- #951 Sets external-deps-inclusion in build-and-test.yml and adds the gate-by-required, latest-daily-integration-test and trigger-rebuild-with-deps workflow shims. - @MalTeeez
- #935 zh_CN.lang gained 43 lines. - @Omgise
- #711 dependencies.gradle injects ExecOperations through an interface instead of calling the removed project exec. gradle.properties switches enableModernJavaSyntax to jabel and documents the jvmDowngrader options. settings.gradle bumps gtnhsettingsconvention to 2.0.13. - @Caedis
- Fixed: Gradle 9 build
- #683 MixinLoadController_logModTimes registers a shutdown hook that writes modtimes_shutdown.csv. The startup results now go to modtimes_startup.csv, and the null checks were removed. - @Alexdoru
- Added: modtimes_shutdown.csv output
- #672 Added MixinDynamicTexture and MixinTextureAtlasSprite plus a TexturesDebug logger, gated by the hodgepodge.debugtextures system property via a new DEBUG_DUMP_TEXTURES_SIZES mixin entry. - @Alexdoru
- Added: texture size debug logging behind a JVM flag
- #656 Marked IPatchedTextureAtlasSprite and ITexturesCache as @Deprecated and deleted AnimationsRenderUtils. - @sisyphussy
- Removed: AnimationsRenderUtils
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@Alexdoru (92), @mitchej123 (53), @Caedis (36), @boubou19 (35), @Nikolay-Sitnikov (30), @RecursivePineapple (22), @Dream-Master (18), @Algent (17), @sisyphussy (17), @MalTeeez (16), @danyadev (15), @koolkrafter5 (14), @DarkShadow44 (13), @tiffit (11), @UltraProdigy (11), @wlhlm (10), @Worive (8), @alppp (7), @AnsonYeung (7), @DeathFuel (6), @Eldrinn-Elantey (6), @ah-OOG-ah (5), @glowredman (5), @JohnButlerThird (5), @Ranzuu (5), @leagris (4), @SST-03 (4), @SuperSoupr (4), @kurrycat2004 (3), @brandyyn (2), @Charsy89 (2), @chochem (2), @cubefury (2), @czqwq (2), @dipo33 (2), @Eclipse-Sol (2), @Glease (2), @Guvante (2), @JackOfNoneTrades (2), @micvog (2), @mist475 (2), @VortexSo4 (2), @0hwx (1), @Apis035 (1), @Auynonymous (1), @BallOfEnergy1 (1), @C0bra5 (1), @Chitak985 (1), @Claude (1), @copi143 (1), @Copilot (1), @DreamYao520 (1), @DrParadox7 (1), @DylanTaylor1 (1), @eigenraven (1), @EnderProyects (1), @Ethryan (1), @Faotik (1), @ham-corp (1), @JL2210 (1), @jss2a98aj (1), @june-dev-username (1), @konkers (1), @kuba6000 (1), @Kuliiuu (1), @Kynake (1), @LazyFlesh (1), @Luca-Guettinger (1), @Lyfts (1), @MarloGr (1), @MellowArpeggiation (1), @NeutronSelector (1), @ohentis (1), @OmdaCZ (1), @Omgise (1), @PLASMAchicken (1), @playfuldoggo (1), @Ressed (1), @Sanduhr32 (1), @SKProCH (1), @Sopel97 (1), @TheYoingLad (1), @weirdreality (1)