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
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 Enhanced
DumpTextureAtlasCommandto output TextureAtlasSprite x, y, width, and height fields alongside other sprite data. - @tiffit- Added: sprite position and dimensions to atlas dump output
- #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 Added
DumpTextureAtlasCommandclass that hooks into Hodgepodge's client code to dump texture atlas information to disk. - @sisyphussy- Added: DumpTextureAtlasCommand debug 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 Extended
DebugScreenHandlerand addedMixinIntCacheto 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
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 Created
EnumValuesTransformerandEnumValuesHookto instrument enumvalues()methods; supports-Dhodgepodge.logEnumValues,-Dhodgepodge.logIntervalEnumValues, and-Dhodgepodge.logStacktraceEnumValues. - @Alexdoru- Added: Enum values call debug instrumentation, EnumValuesDebug.csv output
- #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 Added
MixinFMLClientHandlerin newshutuppackage to filter texture error logging, exposed viahideTextureErrorsinTweaksConfig. - @Alexdoru- Added: MixinFMLClientHandler shutup mixin, hideTextureErrors config option
- Removed: texture error option from FixesConfig
- #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
- #673 Modified
ClientKeyListenerto save fast block placement preference between sessions. - @Caedis - #670 Consolidated multiple debug hotkey mixins into
MixinMinecraft_ToggleDebugMessage, added/cofh tpxfix mixin, and exposed settings viaFixesConfigandTweaksConfig. - @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_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 Adds nether portal ratio config to TweaksConfig and MixinWorldProviderHell to apply custom coordinate conversion ratios. - @alppp
- Added: Nether portal coordinate ratio config
- #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 Added debug transformer and hook to log config parsing times to
.minecraft/ConfigParsingTimes.csvwhen flag-Dhodgepodge.logConfigTimes=trueis set. - @Alexdoru- Added: config parsing time logging, ConfigParsingTimeTransformer, ConfigParsingTimeHook
New Content
- #935 Updated
zh_CN.langwith 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
f1ShowHandconfiguration flag from true to false inTweaksConfig. - @SuperSoupr - #910 Changed default values in
MemoryConfigto disable interning features by default. - @boubou19 - #862 Reverted
NBTTagCompoundHashMapTransformerto 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=truein 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_logModTimesto 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
nbtpackage, and refactoredMixinNetHandlerPlayClient_SquashBedMessagesto 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
- 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
- #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
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
- #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
- #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 Changed
addCommonMixinstoaddClientMixinsfor 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
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 Fixed single-character typo in
MixinChunkProviderServer_DisableTerrain_EndlessIDsthat 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, 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 Modified
BlockLookupHooksto invalidate fast block lookup cache beforeGameData.injectWorldIDMapand rebuild it after; added cache validation inMixinGameData_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_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 missing mixin configuration entry and fixed
MixinBOPBiomeDecorator_CacheRandomannotations. - @Alexdoru- Fixed: Invalid mixin declarations
- #855 Added missing
@Shadowand 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
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 Modified entity guard mixins to distinguish between chunk generation and loading from disk. Improved cleanup in
ServerThreadLongHashMapfor 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
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
- #777 Updated
cofh_at.cfgto 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
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 Corrected NBT tag reference in
TravellersGear.java; changedcachedPlayerList = updatedListto 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
MixinTileEntityCropandMixinGuiNewChat_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_FixInvalidEntityto detect and remove entities with invalid coordinates during chunk operations, configurable viaFixesConfig. - @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
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
- #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 Enhanced
TravellersGearutility 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
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 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_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 ASM transformer
ModCandidateTransformerand 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
ResourceLocationandUniqueIdentifierin 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
MixinJarDiscovererwith 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_CacheModelsto 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_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
- #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
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 Added ASM-based constructor to
NBTTagCompoundwith capacity parameter, and rewrotecopy()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_SpeedupGetInfusionRecipeto cache recipe lookups, controlled viaSpeedupsConfig. - @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_FastUnloadto useLongSetinterface instead of concrete implementation, allowing mods like Spool to substitute synchronized variants. - @BallOfEnergy1 - #856 Refactored
NBTTagCompoundHashMapTransformerto 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
MemoryConfigto consolidate memory leak fixes, moved related mixins tomixins/early/memory/package, and injectedAfterServerStoppedHookfor 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
ChunkGenSchedulerto use more generic types for easier interoperability with mods like Spool that may synchronize items. - @mitchej123 - #790 Extracted
LeafDecayHooksand 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, andTexturesDebugutilities 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)