twilightforest
26 merged pull requests.
New Features
- #160 Added TileEntityTFTimewoodClock, which stores a Muted NBT flag, and registered it. BlockTFMagicLogSpecial now creates the tile entity for META_TIME. ItemBlockTFTree.addInformation adds the tooltip lines, with lang entries in en_US, zh_CN and zh_TW. - @DreamYao520
- Added: Timewood Clock tooltip, Timewood Clock tile entity storing mute state
- #159 BlockTFMagicLogSpecial skips updateTick for META_TIME while indirectly powered. It also adds a client getIcon override for the off sprite and an onNeighborBlockChange handler that reschedules ticks when power drops. - @DreamYao520
- Added: Redstone control for Timewood Clocks
- #158 Extended BlockTFMagicLogSpecial to recognize GregTech soft mallets and toggle sound state while consuming normal durability. Regular right-click continues to toggle acceleration. Added Mods.java config entry. - @DreamYao520
- Added: soft mallet sound toggle for Timewood Clock
- #152 Added IFlowerPottable interface; updated BlockTFSapling, BlockTFPlant, and BlockTFHugeWaterLily to support flower pot placement. Added dependency. - @FourIsTheNumber
- Added: IFlowerPottable interface, flower pot support for saplings and plants
- #133 New Coord2D helper class and rewritten portal lookup logic in TFTeleporter; uses spiral search with Manhattan distance filtering for efficiency. Portal creation and validation logic improved in BlockTFPortal. Updated gradle dependencies. - @LooseEthics
- Added: Coord2D utility class for 2D coordinate handling, configurable max portal size
- #41 Adds TFMajorFeatureProvider and TFMajorFeatureProviders, called first in StructureTFMajorFeatureStart.makeFirstComponent. ComponentTFHollowHill gets overridable getHillSize and makeRandomOreStalactite, and TFGenCaveStalactite gets an overridable placeStalactiteBlock. ItemTFMagicMap uses pattern matching for the provider cast. - @YannickMG
- Added: TF major feature provider API, overridable stalactite block placement
New Content
- #129 Updated lang files (de_DE, en_US, ru_RU, zh_CN, zh_TW) to add missing string entries and fix metadata-keyed locale keys (tile.TFMagicLogSpecial.8.name). - @Eldrinn-Elantey
- Added: localization strings for Twilight Forest blocks and items across five languages
- Fixed: tile.TFMagicLogSpecial.8.name display in multiple languages
Changes
- #149 Updated ModelTFTrophyArmor and ItemTFTrophy to use game tick-based animation timing instead of frame counting, and added sneak-state detection for animation mode. - @Eldrinn-Elantey
- #144 Updated BlockTFMagicLogSpecial tick logic; added TwilightForestMod configuration for blocked blocks list (defaults to Nether portal). Changed to match upstream Tree of Time implementation. - @Caedis
- Added: configuration option for Timewood Clock blocked blocks
- Fixed: Timewood Clock incorrectly accelerating cactus and rainbow cactus
- Closes GTNH#25287
- #131 BlockTFMagicLogSpecial.doTreeOfTimeEffect skips positions where world.blockExists is false, blocks that are not IGrowable and BlockMushroom instances. Previously it ticked any block with random ticking. - @Caedis
- Fixed: Timewood Clock loading chunks, Timewood Clock speeding up furnaces and mushrooms
Bug Fixes
- #164 BlockTFMagicLogSpecial.doSortingTreeEffect now iterates tile entities in loaded chunks in range instead of scanning every block in the search volume. A new canMergeStacks check compares item, damage and NBT tags before merging, and null checks were added. - @fehling135
- Fixed: sorting tree merging stacks with different NBT, possible NullPointerException in the sorting tree
- #163 Tree generators (TFGenHollowTree, TFGenLargeRainboak, TFGenLargeWinter, TFGenSmallTwilightOak, TFGenTreeOfTime) now check the material of the block below (grass or ground) instead of comparing against the grass and dirt blocks. TFGenSmallTwilightOak calls onPlantGrow on the soil instead of replacing it with dirt. - @Ressed
- Fixed: Twilight Forest saplings never growing on modded soils such as RandomThings Fertilized Soil
- Closes GTNH#25955
- #162 BlockTFMagicLogSpecial overrides canSilkHarvest to return true. The default Silk Touch check rejected the block after it gained a tile entity. - @DreamYao520
- Fixed: Timewood Clock could not be harvested with a Silk Touch axe
- Closes GTNH#26934
- #154 Updated TFSkyRenderer to use renderViewEntity for perspective calculations instead of EntityPlayer reference, enabling compatibility with freecam mods. - @Caedis
- Fixed: freecam compatibility in sky rendering
- #145 Adds TFWeatherData, a WorldSavedData stored per world, and TFEventListener uses it on world load to keep the Twilight Forest's WorldInfo time and weather separate. It reaches the WorldInfo field through reflection. - @koolkrafter5
- Fixed: rockets not changing the weather in the Twilight Forest
- #142 Updated TFGenericPacketHandler, BlockTFMagicLogSpecial, and ChunkProviderTwilightForest to handle extended block metadata ranges via EndlessIDs. Added EID dependency. - @UltraProdigy
- Added: EndlessIDs compatibility
- Fixed: Tree of Transformation crash with EndlessIDs
- Closes #141
- #140 TFWorldChunkManager.areBiomesViable and findBiomePosition now call IntCache.resetIntCache(). Without it the IntCache grew without bound. - @Alexdoru
- Fixed: IntCache memory leak causing OutOfMemoryError
- Closes GTNH#22708
- #139 Removed custom ItemBlockTFLeaves and ItemBlockTFLog classes that were overriding getUnlocalizedName; implemented proper localization in TFBlocks and ItemBlockTFTree instead. Simplified lang file entries. - @tiffit
- #138 TFBiomeBase constructor sets field_76754_C (the filler block meta) to 0 instead of the vanilla default 5169201. Final Plateau and Thornlands still generate the correct filler block. - @tiffit
- Fixed: biome dirt and grass using metadata 49, Silk Touch dirt not getting tags
- Closes #57, GTNH#24206
- #136 Removed unnecessary strong references to world servers in TwilightForestMod and BehaviorTFMobEggDispense, allowing proper garbage collection. - @Alexdoru
- Removed: world server memory leak references
- Fixed: world server memory leak
- #130 TFTinkerConstructIntegration moves the addToolMaterial and registerFullMaterial calls for Fiery Metal and Knightmetal above the tool part registration. The "Couldn't register fluid container" logs remain, since TConstruct checks a static final material list. - @Charsy89
- Fixed: default toolpart not added for Fiery Metal and Knightmetal
- #128 EntityTFNaga.breakBlock now reads the block hardness and skips blocks with hardness below 0. - @ModularityEnjoyer
- Fixed: Naga breaking Bedrock and other unbreakable blocks
- Closes GTNH#22990
- #127 BlockTFCritter.canPlaceBlockAt now returns false if the current block is not this critter and not replaceable. Existing critters skip the check so they can still stay. - @DarkShadow44
- Fixed: fireflies deleting chests and pipes placed under them, firefly crash
- Closes GTNH#22373, GTNH#22520
Performance
- #137 Rewrote ModelTFTrophyArmor to reuse model vertex arrays instead of allocating new ones each frame, and optimized TFClientProxy rendering code. - @Alexdoru
- Fixed: trophy armor frame allocation spam
- Closes GTNH#22959
- #134 Adds FastRandom, a non-atomic Random subclass, used in ChunkProviderTwilightForest, TFGenCaves, TFGenRavine, MapGenTFHollowTree and TFGenHugeLilyPad. Reuses RNG instances instead of allocating new ones, caches biome lookups in TFGenCaves, and adds an early exit in addDarkForestCanopy2 when no dark forest is nearby. - @mitchej123
Chores
- #135 Coord2D.spiralNextCW comment changed from 'always called with negative step' to 'always called with positive step'. - @LooseEthics
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@Caedis (5), @DreamYao520 (4), @Nana-Sakura (4), @Alexdoru (3), @DarkShadow44 (3), @koolkrafter5 (3), @Dream-Master (2), @Eldrinn-Elantey (2), @FourIsTheNumber (2), @LooseEthics (2), @Luca-Guettinger (2), @mitchej123 (2), @Ruling-0 (2), @tiffit (2), @YannickMG (2), @ABKQPO (1), @Algent (1), @boubou19 (1), @Charsy89 (1), @cubefury (1), @fehling135 (1), @glowredman (1), @Guvante (1), @micvog (1), @ModularityEnjoyer (1), @Nikolay-Sitnikov (1), @RecursivePineapple (1), @Ressed (1), @Sanduhr32 (1), @thehoblit (1), @UltraProdigy (1)