GTNHLib
The shared library every GTNH mod builds on. Most of it is invisible by design, but this release the pack moved its item transfer onto GTNHLib's item moving core, and GTNHLib gained the team system, the on-screen title overlay, central number formatting and a JSON block model loader that resource packs can use.
Modded Plants in Flower Pots
Saplings, flowers and mushrooms from Biomes O' Plenty, Twilight Forest, Pam's HarvestCraft, Natura and Botania now go into a vanilla flower pot. That is every sapling of those mods, most Biomes O' Plenty flowers and mushrooms plus its tiny cactus and thorns, Twilight Forest's fiddlehead, mushgloom and huge water lily, Natura's glowshrooms and bluebells, and Botania's mystical flowers and mushrooms. Botania's generating and functional flowers do not fit.



Shipped in: twilightforest #152, GTNHLib #435, GTNHLib #437, harvestcraft #75, Natura #46, Botania #146
GTNH Teams
You already have a team: the first time you log in, one called <name>'s Team is made with you as its owner. Any mod can keep its own data on it instead of a member list of its own. /gtnhteam invite <player> and /gtnhteam accept bring someone in, kick, promote and demote sort out the ranks, and leave puts you in a team of your own again. A member is a member, an officer or an owner: officers invite and kick members, owners do everything else, and a team can have more than one owner. /gtnhteam merge request <team> asks to fold your team into another. When that team's owner runs /gtnhteam merge accept, everyone moves across with their data, and it cannot be undone. /gtnhteam gui does all of it in a window instead.

Three mods use it already: the Vending Machine's team wallet, Visual Prospecting's shared vein and fluid discoveries, and GregTech's powerfail alerts, which now go to your GTNH team instead of your space project team. An ore vein or underground fluid you find reaches the teammates who are online at once, and the others catch up when they next log in; marking a vein depleted travels the same way.

Shipped in 15 pull requests
- GTNHTeams: Arbitrary-data team system (GTNHLib #297)
- Teams GUI (GTNHLib #384)
- Add whitelabeling to gtnh teams (GTNHLib #372)
- Update team commands (GTNHLib #407)
- Include more data client-side for UI display (GTNHLib #352)
- redo ITeamData#copyData signature (GTNHLib #344)
- Suggest offline team members for kick, promote and demote (GTNHLib #424)
- Catch same team mergers and fix command (GTNHLib #348)
- Fix new team data types not being added to old teams (GTNHLib #347)
- Fix team names with spaces not working due to greedystring (GTNHLib #346)
- Fix teams logic and introduce playerutils (GTNHLib #351)
- More team events (GTNHLib #470)
- use gtnh teams for powerfails (GT5-Unofficial #7351)
- Add team sharing of players prospection findings using GTNHLib Teams (VisualProspecting #85)
- Add admin command to upload client cache into your team (VisualProspecting #88)
Quest titles and the /title command
A finished quest now shows as a large title in the middle of the screen. BetterQuesting's Notification Style in config/betterquesting.cfg is title by default; classic brings back the small popup. Operators get /title <player> title|subtitle|times|icon|clear|reset, which takes plain text with & colour codes or a JSON chat component, and times sets fade-in, stay and fade-out in ticks (10, 70 and 20 by default). icon puts an item above the title. ServerUtilities can send any of its notifications as a title, and its restart warnings in the last minute always arrive as one.



Shipped in: GTNHLib #330, ServerUtilities #273, BetterQuesting #200, GTNHLib #365, GTNHLib #388
Resource Pack Update Notifier
A resource pack can now tell you when it has an update. Packs that opt in through their pack.mcmeta are checked against their GitHub releases once per session, a few seconds after you join your first world, and a newer release for your GTNH version shows up in chat with a link to its release page. The same check warns when a pack is made for another GTNH version. /resourcepack updateCheck runs it by hand, and enableResourcePackUpdateCheck in config/gtnhlib.cfg turns it off. More information is available in the GTNH Wiki

Shipped in: GTNHLib #260, GTNHLib #280, GTNHLib #285, GTNHLib #371
GregTech, AE2 and Jabba share one item mover
GregTech, Applied Energistics and Jabba now move items through one shared system in GTNHLib. GregTech adds Compressed Input and Output Buses from LuV to UHV and Quantum ones from UEV to UXV, which hold many stacks in each slot: the LuV Compressed Input Bus holds 256 stacks in each of its 49 slots. Alt-clicking a slot of one empties it into a single Matter Cluster, and a cluster can now hold more than 16,384 items. With blocking mode on, an AE2 interface only looks at a GregTech single-block machine's input slots, so items left in its output, circuit or battery slots no longer hold back the next pattern. Item movers can now pull from a super or quantum chest's output slot, and Jabba barrels with a hopper upgrade move 16 items every 8 ticks instead of one. Taking a whole stack out of a slot no longer copies its NBT, and looking for room no longer compares NBT against slots that are already full.

Shipped in 12 pull requests
- Item moving fixes (Applied-Energistics-2-Unofficial #932)
- Allow clusters to store more than 16k items (Avaritia #69)
- Integrate with new item moving system (Jabba #47)
- Item moving improvements (GT5-Unofficial #5388)
- Add Compressed + Quantum Busses (GT5-Unofficial #5694)
- Implement IItemSource + IItemSink & use ItemTransfer (GT5-Unofficial #5027)
- Avoid unnecessary NBT copy (GTNHLib #404)
- Avoid NBT matching (GTNHLib #378)
- Misc item moving improvements (GTNHLib #188)
- Re-add IItemDuct support (includes EIO and BC) (GTNHLib #204)
- Add a simulated item sink interator (GTNHLib #230)
- Add per-slot stack size limit to ItemSink API (GTNHLib #331)
JSON block models and shared APIs
Resource packs can replace the model of most blocks with a blockstate and model JSON in the modern format, as in later Minecraft versions; blockstates from packs older than pack format 4 are ignored. /blockstate get lists the properties of the block you are looking at, coloured by type, and /blockstate set <property> <value> changes one. The rest is API for other mods: the blockstate system, Brigadier commands, chat components for item and fluid names, colours that a resource pack overrides through a color.resource.<modid>.<name> lang key, and config annotations for field order, mod-gated entries, reloading from file and custom GUI entries.
Shipped in 54 pull requests
- Add inventoryCount to InventoryChangedEvent (GTNHLib #464)
- Allow non-block textures in JSON models (GTNHLib #438)
- Port 2d & 3d maps & sets from CC (GTNHLib #426)
- Add bukkit compatibility Layer (GTNHLib #423)
- Port ResourceUtils from GT5U to NHlib (GTNHLib #416)
- Add world conversion warning system (GTNHLib #409)
- Add a getter to GlyphReplacements (GTNHLib #398)
- LocalTessellator stuff (GTNHLib #393)
- Add method to safely enchant an itemstack (GTNHLib #387)
- Added color system to unify color resources (GTNHLib #380)
- LivingEquipmentChangeEvent init detection (GTNHLib #363)
- add u (drop shadow) to isValidAmpCode (GTNHLib #356)
- Add fast WavefrontObject loader (GTNHLib #354)
- Add Model overrideIcon (GTNHLib #343)
- Make config options reloadable from file (GTNHLib #342)
- Add world deletion event mixin (GTNHLib #338)
- Add @Config.{RequiresMod, RequiresModOr and RequiresModAnd} to the config system (GTNHLib #334)
- add colors to /blockstate property values (GTNHLib #329)
- add two helper methods to ItemStackNBT (GTNHLib #326)
- add ItemStackNBT helper (GTNHLib #323)
- Add proper automatic model detection (GTNHLib #313)
- implement CubeIterator (GTNHLib #309)
- add BFS leaf decay (GTNHLib #305)
- Move StdLCG to GTNHLib (GTNHLib #304)
- Implement blockstate to Json Model (GTNHLib #295)
- add @Config.Order() to the config system (GTNHLib #286)
- Add InventoryChangedEvent (GTNHLib #282)
- Add IConfigEntry to the Config system (GTNHLib #281)
- Add custom chat components for fluid and item names (GTNHLib #278)
- Add ability to supply custom models and add transparency support (GTNHLib #277)
- Add a method to automaticall make and register an EIR (GTNHLib #275)
- Add an enhanced infusion recipe that supports replacements (GTNHLib #270)
- Copy the FormattedResearchPage from Salis Arcana for use in other mods (GTNHLib #269)
- Formalize IItemTexture Renderer (GTNHLib #268)
- Adds pick block event mixin (GTNHLib #259)
- Add ability to check 4D map using outside range (GTNHLib #255)
- Add GuiText for customizable GUI text handling (GTNHLib #252)
- Make JVMDG api stubs available for other mods (GTNHLib #245)
- Move villager names from WAWLA (GTNHLib #228)
- Port ItemRenderUtil from Gregtech (GTNHLib #227)
- Rewrite Universium Shader; Add Texture Classes (GTNHLib #223)
- Add a glyph replacement map (GTNHLib #219)
- ItemBlock BlockBench Display (GTNHLib #216)
- Add ITranslucentItem for translucent item support (GTNHLib #215)
- Add basic itemblock JSON models renderer (GTNHLib #211)
- Implement UV locking for JSON models (GTNHLib #208)
- ports cosmicrender from avaritia to gtnhlib (GTNHLib #205)
- Add ability to dynamically control block sounds (GTNHLib #195)
- Add compiling (callback) tessellator mode (GTNHLib #193)
- Add post-processing + VAO methods (GTNHLib #186)
- BlockState System (GTNHLib #176)
- Add BakedModelBuilder + Normal helper methods (GTNHLib #175)
- Add generational timed cache (GTNHLib #171)
- Add Brigadier (GTNHLib #149)
Other changes
blockSoundMixins in config/gtnhlib.cfg (default true, needs a restart) turns off the mixins that let blocks change their step and break sounds, for modlists where they crash at startup. String-list config values synced from a server are no longer split into single characters. The rest is internal work on the JSON model and tessellator code, the config system and the font helpers that Angelica builds on.
Shipped in 11 pull requests
- Angelica patch (GTNHLib #353)
- Minor configuration system cleanup (GTNHLib #322)
- Set colorIdx to -1 default (GTNHLib #312)
- Font rendering MC parity (GTNHLib #300)
- add back and mark deprecated ClassConstantPoolParser#addString method (GTNHLib #291)
- switch to new RFB transform signature (GTNHLib #289)
- Prevent resizing the ClassConstantPoolParser during runtime (GTNHLib #288)
- Changes need to support Core Profile in Angelica (GTNHLib #284)
- Misc changes, and a few fixes (GTNHLib #236)
- Add config to disable block sound mixins (GTNHLib #203)
- Updates to JSON model API (GTNHLib #100)
Fixes
The server profiler started with /debug start no longer nests one level deeper every tick and grows until /debug stop. GTNHLib opened a jobs section on each server tick and never closed it.
Shipped in 61 pull requests
- Fix resource packs not loading at startup (GTNHLib #452)
- Only block old blockstates (GTNHLib #449)
- Improve edge cases of
@EventBusSubscriber(GTNHLib #448) - Vanilla Color Code Rules Option + Minor JSON Crash Fix (GTNHLib #447)
- Don't crash when old models are loaded (GTNHLib #443)
- Fix world leak caused by PlayerInventoryEventHandler (GTNHLib #439)
- Fix walk/fall particle icons when walking on modeled blocks (GTNHLib #434)
- Honor VertexFormat for WavefrontVBOBuilder (GTNHLib #433)
- Stop leaking the profiler (GTNHLib #422)
- Make onFinishTextureStitch static to fix client init crash (GTNHLib #420)
- Fix NumberPattern (GTNHLib #418)
- Apply ITranslucentItem when rendering equipped items (GTNHLib #413)
- Remove threadsafe annotation from ModelISBRH (GTNHLib #408)
- Fix ItemTransfer retry loop with size-dependent filters (GTNHLib #405)
- Fix thermos console logging (GTNHLib #403)
- Fix DirectTessellator AGAIN (again) (GTNHLib #397)
- wrap ChatComponentItemName text in brackets like vanilla func_151000_E() (GTNHLib #396)
- Move
canInsertcheck beforemaxStack. (GTNHLib #395) - Fix deps for mods depending on mods using jvmdg (GTNHLib #394)
- Fixed wrong file location (GTNHLib #390)
- Misc BlockState Fixes (GTNHLib #383)
- Fix model loading from folder resource packs (GTNHLib #382)
- Fix position hash for random models (GTNHLib #381)
- Fix two crashes: (GTNHLib #374)
- Add more model patches (GTNHLib #373)
- Fix display lists (GTNHLib #358)
- Fix ModelISBRH.INSTANCE ThreadLocal incompatibility (GTNHLib #341)
- Fix large quad batches by using 32-bit index buffers when needed (GTNHLib #332)
- Make ModelISBRH.INSTANCE ThreadLocal to fix race condition (GTNHLib #320)
- Fix JsonModel Loading Typo (GTNHLib #318)
- handle obfuscated names in BlockIconTransformer (GTNHLib #316)
- Fix item json model color (GTNHLib #310)
- Fix JSON Model Tint (GTNHLib #308)
- Fix Block Icon Wrapper conditional to instanceof ModelISBRH (GTNHLib #302)
- Fix block crash in postInit (GTNHLib #301)
- Fix EIr only passing the replacements once per world restart (GTNHLib #296)
- fix transformer exclusions (GTNHLib #294)
- Fix HeadlessException in BloomShader (GTNHLib #293)
- Ignore synthetic fields when walking class fields (GTNHLib #290)
- Config tooltip (GTNHLib #287)
- Add gui keybind fallback check (GTNHLib #283)
- Add lwjgl3 fallback for apple vao (GTNHLib #264)
- Fix erroneous logic in memCopy (GTNHLib #253)
- Fix Exception on Server start (GTNHLib #251)
- Check deps. (GTNHLib #248)
- Fix simulatedSink issues (GTNHLib #241)
- Update normal calcs to handle degenerate quads (GTNHLib #234)
- Fix a crash with universium shader (GTNHLib #233)
- Fix missing uniform variable in UniversiumShader (GTNHLib #231)
- Initialize UniversiumShader only when needed (GTNHLib #229)
- Fix SharedDepthFramebuffer (GTNHLib #225)
- fix ClassCastException crash in SharedDepthFramebuffer if Iris is disabled (GTNHLib #218)
- Fix ItemStackMap size not updating when removing via iterator (GTNHLib #217)
- Fix ItemBlock face side, add Model Particle, fix texture loading conflict with DragonApi (GTNHLib #212)
- add some fixes for the Universe Shader textures and some more hooks (GTNHLib #209)
- Fix VAO's (GTNHLib #207)
- More item moving fixes (GTNHLib #202)
- More item moving fixes (GTNHLib #200)
- Remove mixin-based IResourcePack detection (GTNHLib #192)
- Fix IterableBitSet iterator removal (GTNHLib #474)
- Bump nhextlib and add jvmdg child delegation (GTNHLib #478)
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@ah-OOG-ah (34), @RecursivePineapple (33), @sisyphussy (30), @Dream-Master (28), @mitchej123 (24), @Caedis (20), @boubou19 (15), @Alexdoru (13), @MalTeeez (13), @FourIsTheNumber (12), @cubefury (11), @Ruling-0 (11), @tiffit (11), @Nikolay-Sitnikov (9), @Algent (8), @chrombread (8), @Shigure-Ruiseki (8), @Ranzuu (7), @Roadhog360 (7), @alppp (6), @DarkShadow44 (6), @koolkrafter5 (6), @UltraProdigy (6), @danyadev (5), @Lyfts (5), @AnsonYeung (4), @Eldrinn-Elantey (4), @SuperSoupr (4), @Kogepan229 (3), @LazyFleshWasTaken (3), @0hwx (2), @DeathFuel (2), @eigenraven (2), @Ethryan (2), @hiroscho (2), @leagris (2), @Luca-Guettinger (2), @MassAnarchyy (2), @Sanduhr32 (2), @ABKQPO (1), @C0bra5 (1), @Cardinalstars (1), @Chitak985 (1), @Discreater (1), @EnderProyects (1), @EternalQ (1), @felixfour (1), @flamingowrangler2869 (1), @FrostyFire1 (1), @Glease (1), @glowredman (1), @jss2a98aj (1), @Justxs (1), @Kai-Z-JP (1), @KAMKEEL (1), @LazyFlesh (1), @MeiTianyou (1), @PLASMAchicken (1), @querns (1), @RealSilverMoon (1), @slprime (1), @spacebuilder2020 (1), @Spicierspace153 (1), @sunshinekitsune (1), @Taskeren (1), @wlhlm (1), @YannickMG (1)