Skip to content

TinkersConstruct ​

87 merged pull requests.

Needs action on an existing world:

  • [check your build] #279 Adds a config option that hides the Tinkers inventory tab. With the tab off, Heart Canisters, the Travel Belt and the Travel Glove go in Baubles slots, and their effects work from there. Items already in the tab are moved to Baubles slots, then to the inventory, then dropped on the ground. A Heart Canister stack is cut to 1 in the bauble slot and the rest goes to the inventory. A Heart Canister in a bauble slot drops on death.
    The pack now ships with the Tinkers inventory tab switched off, so on first login each item in it moves into a free matching Baubles slot, one per slot, and the rest of a Heart Canister stack goes to your inventory, or onto the ground if it is full. Put those canisters back into their Baubles slot, which holds 10, to get all your hearts back; per Baubles rules they now drop on death.

New Features ​

  • #344 Added IExtendedStackLimitProvider and ExtendedStackLimitHelper in tconstruct.api. CraftingStationContainer now uses item-aware capacities, and a new CraftingStationStackSyncPacket syncs stacks larger than the vanilla limit to the client. - @ABKQPO
    • Added: IExtendedStackLimitProvider API, Crafting Station stack sync packet
  • #341 Adds ModExpander (a ModBoolean limited to AOEHarvestTool), registers material items 44 and 45 in MaterialItem and TinkerTools with crafting recipes, and AOEHarvestTool.onBlockStartBreak widens the break range from the Width++ and Height++ tags. On floor and ceiling hits the axes follow the player's facing. - @Aintripin
    • Added: Expander (Horizontal) modifier item (Width++), Expander (Vertical) modifier item (Height++)
  • #334 PHConstruct adds the Looks config boolean classicCraftingStationLayout, default false. CraftingStationGui.selectChestLayout returns a six-column rectangular layout capped at CLASSIC_MAX_ROWS (10) with scrolling when the option is enabled. - @Pxx500
    • Added: classicCraftingStationLayout config option
  • #316 Registered OreDictionary entries in TinkerTools.preInit for tconstructToolStation, tconstructPartBuilder, tconstructPatternChest and tconstructStencilTable on the toolStationWood metas. Dependencies and the settings plugin were also bumped. - @mattiasploesch-cpu
    • Added: tconstructToolStation ore dictionary tag, tconstructPartBuilder ore dictionary tag, tconstructPatternChest ore dictionary tag, tconstructStencilTable ore dictionary tag
  • #312 Enhanced CraftingStationContainer and CraftingStationLogic to track ingredient sources and return items to originating connected inventories when shift-clicked, with fallback to player inventory. - @Pxx500
    • Added: ingredient source tracking, return to source feature
  • #294 Updated ModificationInfo.java, multiple modifier classes, and slot logic to batch modifier application and maximize progression in one operation. - @FrostyFire1
    • Added: modifier batching, max-out behavior
  • #281 Added SlimeIslandUseWhitelist/SlimeIslandDimWhitelist and OreBushUseWhitelist/OreBushDimWhitelist to PHConstruct. DimensionBlacklist.isDimInBlacklist checks the whitelist first, and a new isOreBushAllowedInDim is called from TBaseWorldGenerator before generateOreBushes. - @Eldrinn-Elantey
    • Added: SlimeIslandUseWhitelist config option, SlimeIslandDimWhitelist config option, OreBushUseWhitelist config option, OreBushDimWhitelist config option
  • #279 Adds PHConstruct.enableTinkerInventoryTab, which gates the tab registration and the armor GUI on both sides. HeartCanister, TravelBelt and TravelGlove now implement IBauble/IBaubleExpanded as optional interfaces. A new BaublesHelper finds worn baubles for belt swapping and glove mining speed, and Baubles Expanded slot types heartcanister_red, _yellow and _green are registered. - @Ranzuu
    • Added: Config option to disable the Tinkers inventory tab, Heart Canisters, Travel Belt and Travel Glove usable in Baubles slots, Heart Canister bauble slot types for Baubles Expanded
    • Migration: The pack now ships with the Tinkers inventory tab switched off, so on first login each item in it moves into a free matching Baubles slot, one per slot, and the rest of a Heart Canister stack goes to your inventory, or onto the ground if it is full. Put those canisters back into their Baubles slot, which holds 10, to get all your hearts back; per Baubles rules they now drop on death.
  • #278 Added smelting group support to Smeltery.java using integer group IDs; modified RecipeHandlerMelting to combine items with matching groups; updated TinkerSmeltery registration to assign groups. - @tiffit
    • Added: Smelting group API
  • #264 Added Ender Creeper detection to SmelteryLogic smelting logic; registered LoadedMods.ENDER_CREEPERS compatibility flag. - @LooseEthics
    • Added: Ender Creeper liquid ender smelting
  • #258 Added PartChestContainer, PatternShaperChestContainer, and GUI classes; modified TinkerTools registration and ToolStationBlock to support new chest blocks; updated PartCrafterGui and StencilTableGui to display chest contents. - @MCTBL
    • Added: PartChestContainer, PatternShaperChestContainer, PartChestGui, pattern chest block display
    • Fixed: Manual GUI render position
  • #257 Added max relative hardness config to PHConstruct and modified HarvestTool AOE logic to allow block breaking when mining speed permits 1-2 tick mining regardless of hardness difference. - @LazyFlesh
    • Added: AOE hardness difference config option
  • #254 Extended RecipeHandlerToolMaterials to support color localization for NEI material display elements. - @Ranzuu
    • Added: NEI color localization support
  • #236 Added explicit synchronization method to AmmoItem to notify Baubles of ItemStack changes, supporting InventoryBogoSorter integration. - @DarkShadow44
    • Added: ammo sync for Baubles inventory
  • #232 Modified FlexibleToolRenderer, DynamicToolPart, and ToolPart to support transparency; depends on GTNHLib#215 for transparency support. - @SuperSoupr
    • Added: translucent tool and part support
  • #228 Added a new button to CraftingStationGui, new packet handler CraftingStationDumpPacket, and container logic to transfer items from grid to adjacent inventory. - @ChromaPIE
    • Added: dump button on Crafting Station UI, CraftingStationDumpPacket network packet
  • #227 Added a config flag in PHConstruct and modified SearedBlock to check this flag before activating redstone-powered faucet behavior. - @brandyyn
    • Added: config option for faucet redstone activation
  • #194 Extended OreBerries with effects configuration (potion IDs, amplifiers, durations); implemented gradual amplifier scaling based on effect duration and current effect level; added support for individual berry vs. stack consumption (shift-key detection). - @Gamingb3ast
    • Added: Effects configuration system, Potion effect application logic

New Content ​

  • #221 Updated ru_RU.lang file with corrected or new Russian translations. - @Eldrinn-Elantey

Changes ​

  • #336 en_US.lang: craftedsoil1.tooltip and craftedsoil.slab1.tooltip changed from "Heals Undead" to "Heals Walking Undead". - @LazyFlesh
    • Fixed: Undead Soil tooltip not saying it heals only walking undead
  • #320 Modified collision/selection box definitions in LavaTankBlock, CraftingSlab, and ToolStationBlock to reflect updated model geometry. - @Connor-Colenso
    • Added: Hitbox collision definitions
  • #319 Adjusted minimum bookmark column constant in CraftingStationGui. - @Pxx500
  • #317 Redesigned CraftingStationGui layout logic to calculate space more efficiently, added GuiBorderWidget for overhang support, and adjusted CraftingStationStackPositioner and NEI overlay handler. - @Pxx500
    • Added: GuiBorderWidget class, GUI overhang feature
  • #313 Added ColorUtils.inventoryTitle (0x404040) and replaced hardcoded 0x404040 and 0x202020 in the Knapsack, Smeltery, Crafting Station, Frypan, Part Chest, Part Crafter, Pattern Chest and Stencil Table GUIs. - @Ranzuu
    • Added: inventoryTitle color resource
  • #309 Replaced string concatenation and the TProxyClient DecimalFormat with GTNHLib NumberFormatUtil.formatNumber and formatFluid across Arrow, Shortbow, ToolCore, ProjectileWeapon, the NEI recipe handlers and the Waila data providers. TProxyClient.df was removed. - @Connor-Colenso
    • Removed: TProxyClient.df
  • #303 Updated newhearts.png texture file with adjusted color values for improved clarity and consistency with vanilla heart textures. - @ZaykieT
    • Fixed: heart color distinction
  • #295 Changed the default of SlimeIslandUseWhitelist and OreBushUseWhitelist in PHConstruct.initProps from false to true. Existing config files that already hold a value keep it. - @Eldrinn-Elantey
  • #266 Removed rail smelting recipe registration from TinkerSmeltery. - @DarkShadow44
    • Removed: Rail smelting recipe

Balance ​

  • #268 Modified attack boost multiplier for Certus Quartz in TinkerToolEvents. - @UltraProdigy

Bug Fixes ​

  • #345 NEITConstructBookmarkContainerHandler.pullBookmarkItemsFromContainer is rewritten to read the current Slot from the container before each move and no longer works from a snapshot list of stacks. The CraftingStationGui cast is removed. - @Pxx500
    • Fixed: NullPointerException on NEI Shift+V in the Crafting Station
    • Closes GTNH#26972
  • #342 Changed CHEST_HEIGHT from 114 to 115 in PartCrafterGui. - @Ranzuu
    • Fixed: Cut-off inventory panel in the part crafter GUI
  • #339 In CraftingStationContainer.updateGridPreferences, a click on the crafting result slot that returns the same item type with different damage or NBT now restores the previous side inventory preference. - @Pxx500
    • Fixed: Crafting tool forgetting which inventory it came from after use
  • #337 Reworked shift-click handling in CraftingStationContainer and CraftingStationLogic, with per-slot inventory preferences and the setting synced from the server before the GUI opens. Added PHConstruct.craftingStationShiftClickToGrid, default false. - @Pxx500
    • Added: craftingStationShiftClickToGrid config option
    • Fixed: Crash and world corruption when pulling an item out of the Crafting Station's adjacent inventory
    • Closes GTNH#26793
  • #331 TinkerWorldEvents.onHurt changes the battlesign LivingHurtEvent damage multiplier from 1.5 to 0.25. - @Viptunbeqwfwew
    • Fixed: Battlesign adding 50% damage instead of blocking damage
  • #324 Corrected container shift-click routing in CraftingStationContainer and fixed slot indexing in HarvestTool and ToolCore. - @Pxx500
    • Fixed: Crafting Station shift-click behavior, First hotbar slot selection for tools
  • #323 Corrected the accumulation logic in ModAttack to properly account for leftover boost values and initialization, fixing integer overflow when step size exceeded threshold. - @Viptunbeqwfwew
    • Fixed: Quartz modifier damage calculation overflow
  • #315 Modified AbilityHelper.onBlockDestroyed() to check block hardness before applying damage, aligning with vanilla Minecraft behavior. - @Nana-Sakura
    • Fixed: Tinkers tools damaged when clearing instant-break blocks
    • Closes GTNH#26310
  • #314 Corrected packet data handling and GUI logic in BattlesignGui, BattlesignLogic, EquipLogic, and SignDataPacket to properly synchronize sign text rendering. - @mitchej123
    • Fixed: Battle Sign world text display corruption
  • #311 Added null check in CrosshairHandler.java before accessing getCompoundTag() result to prevent NullPointerException. - @Angry3vilbot
    • Fixed: crossbow null pointer crash
    • Closes GTNH#26303
  • #310 Added BlockSideHitListener to track the initial hit face and backported upstream fix to AOEHarvestTool and HarvestTool to prevent direction desync. - @Pxx500
    • Added: BlockSideHitListener
    • Fixed: AOE tool direction desync
  • #297 Added length validation in ModifyBuilder.java and removed stale NBT tags in slot classes to prevent OOB crashes and overconsumption caused by PR #294 regression. - @Algent
  • #296 Corrected slot and container logic in CastingBlockLogic, CraftingStationContainer, PatternShaperContainer, and StencilTableLogic to prevent item duplication and voids. - @Algent
  • #291 Modified ArmorProxyClient.java renderArmorExtras to read from Baubles inventory when Tinkers tab is disabled, instead of always reading from armorExtended inventory. - @Eldrinn-Elantey
    • Fixed: accessory rendering with disabled Tinkers tab
  • #288 Updated TabRegistry.java to show the main inventory tab when Tinkers tab is disabled and other tabs are present. - @Ranzuu
    • Fixed: inventory tab visibility
    • Closes #287
  • #286 Modified ModifyBuilder.java to check part replacement before repair operations, preventing full-durability repairs from blocking legitimate part replacements. - @Krepyn
    • Fixed: part replacement instead of repair
  • #285 Corrected ConveyorBase.java to properly override block replaceability checks, preventing accidental void of slime channels during block placement. - @loenaaaa
  • #284 Added markDirty() call in InventoryCraftingStation.java to flag inventory state changes for synchronization. - @Worive
    • Fixed: missing inventory dirty flag
  • #283 Corrected loot table registration in TinkerWorld.java to properly expose loot pools for external mod integration. - @slprime
    • Fixed: loot registration correctness
  • #280 Added null checks in PatternShaperChestContainer and PatternShaperContainer shift-click handlers. - @MCTBL
    • Fixed: Shift-click crash in stencil table
    • Closes GTNH#24474
  • #277 Adjusted temperature texture bar rendering bounds in SmelteryGui to prevent overflow. - @Ranzuu
    • Fixed: Temperature texture overflow
  • #275 Added +8 offset to random X and Z coordinates in TBaseWorldGenerator oreberry generation to reduce cascading worldgen. - @Charsy89
    • Fixed: Cascading worldgen from Oreberry generation
  • #274 Added super.keyTyped() call in ToolStationGui to allow NEI shortcuts to propagate. - @ROBERT-PARKOURCIVILIZATIONGOD
    • Fixed: NEI shortcuts blocked in Tool Station and Tool Forge
    • Closes GTNH#24387
  • #273 Modified SmelteryLogic to aggregate fuel amount and capacity across all connected lava tanks; updated SmelteryGui fuel bar rendering and tooltip; fixed LavaTankLogic to use actual filled/drained amounts. - @Eldrinn-Elantey
    • Fixed: Smeltery fuel gauge multi-tank display
  • #272 Replaced brownstone speed calculation with improved logic adapted from GT concrete blocks; adjusted speed multipliers to 30% for roads and 15% for other variants. - @Kiryu144
    • Fixed: Brownstone player movement jittering
  • #270 Refactored GlassBlockConnected and GlassPaneConnected rendering; simplified glass block registration; updated glass block connectivity logic. - @Majora320
    • Removed: GlassBlock, GlassBlockStained, GlassPane, PaneBase, old glass pane rendering
    • Fixed: Clear glass pane artifact rendering, glass connectivity display
    • Closes #267
  • #269 Added zero mining speed check in TinkerArmorEvents before applying haste effect; added config option for minimum mining speed threshold. - @ImaMapleTree
    • Fixed: Tool effectiveness bypass with haste enchantment
    • Closes GTNH#23927
  • #260 Added null check to playerDrops in TPlayerHandler; moved status remembering logic to playerDeath; reduced playerDeathWrapper event priority. - @Viptunbeqwfwew
    • Fixed: Null pointer in player drops, event priority ordering
  • #259 Adjusted tab rendering bounds in AbstractTab and InventoryTabVanilla to prevent pixel cutoff. - @Ranzuu
    • Fixed: Inventory tab pixel display
  • #255 Modified PatternShaperContainer shift-click handler to distinguish between blank patterns (transfer to stencil) and output patterns (transfer to inventory). - @MCTBL
    • Fixed: Stencil Table shift-click pattern transfers
  • #251 Added null check for ItemStack parameter in CraftingStationGui.drawToolStats to prevent NullPointerException. - @PLASMAchicken
  • #250 Corrected attack value accumulation logic in ModAttack to properly handle multiple quartz modifier applications. - @imTheSupremeOne
    • Fixed: quartz modifier attack overflow
  • #249 Refactored ToolStationGui and ToolForgeGui to properly use GuiTextField, deduplicated code and fields, and fixed language switching for tool property descriptions. - @Nikolay-Sitnikov
    • Removed: duplicate lang keys, duplicate GUI code
    • Fixed: tool station text box usability, language switching for tool properties
  • #247 Corrected player model renderer in ArmorExtendedGui to not modify the actual player's rotation state, preventing JourneyMap from detecting false label-looking conditions. - @Caedis
    • Fixed: JourneyMap waypoint flickering
    • Closes GTNH#23288
  • #245 Modified ModDurability to remove the broken tool NBT tag when adding durability to a broken tool. - @malabudi
    • Fixed: broken tool flag on durability modifier
  • #244 Added state validation in ToolStationContainer to prevent desync when items are being modified during rename operations. - @loenaaaa
    • Fixed: tool forge item voiding during rename
    • Closes GTNH#22841
  • #243 Refactored SlimeBase class to properly extend vanilla slimes and corrected XP calculations; fixed NBT serialization to preserve health; updated KingBlueSlime XP. - @ohentis
    • Removed: incorrect slime implementation
    • Fixed: slime health NBT loading, slime XP scaling, slime vanilla inheritance, king slime XP values
    • Closes #238, #239, #240, #241
  • #237 Corrected transparency rendering state management in FlexibleToolRenderer for third-person perspective. - @SuperSoupr
    • Fixed: third-person translucency rendering
  • #233 WeaponryHandler.boneanaBuilding returns early unless toolTag hasKey("display"), then reuses the fetched compound. This avoids getCompoundTag creating and attaching a new empty tag. - @Alexdoru
    • Fixed: empty display NBT tag created on tool craft
  • #230 Corrected event handling in TinkerArmorEvents and TinkerWorldEvents that was broken by a previous change. - @chochem
    • Fixed: miniature red heart drops in EEC, miniature red heart NEI display
    • Closes GTNH#22407
  • #229 Corrected loop counter usage in TinkerSmeltery where iter+1 was causing validity checks to be misaligned. - @FourIsTheNumber
    • Fixed: tough rod clay cast texture and name, full guard clay cast recipe generation
    • Closes #201
  • #226 Modified HarvestTool to return no tool classes when the tool is broken, preventing EFR from recognizing broken tools as valid for dirt path and log stripping operations. - @Kynake
    • Fixed: Broken tools enabling EFR features
  • #225 Restructured ammo item class hierarchy: moved generic ammo logic to base AmmoItem class, created specialized ArrowAmmo and BoltAmmo classes to exclude projectile weapons from quiver compatibility. - @koolkrafter5
    • Added: ArrowAmmo, BoltAmmo
    • Removed: Improper quiver slot compatibility
  • #224 Improved tree detection logic in LumberAxe to handle horizontal branches and added caching to prevent redundant block checks. - @ohentis
    • Fixed: Tree chopping with horizontal sections
    • Closes #223
  • #215 Adjusted tooltip rendering in HeartCanister class. - @tuodekun
    • Fixed: Tooltip positioning
    • Closes #214
  • #213 Corrected chest detection logic in CraftingStationLogic to properly distinguish double chests from adjacent trapped chests. - @Dredonkey
    • Fixed: Chest detection misidentification

Performance ​

  • #338 SmelteryLogic caches melting results and uses BitSets to park slots until the tank changes. Client updates carry only a compact render-data array (new SmelteryRenderData, run-length encoded) and are batched. Full item data goes to GUI viewers in a separate SmelteryGuiPacket, and SmelteryContainer syncs heat and fuel itself. - @Pxx500
    • Fixed: smeltery GUI item updates, tank fill changing other mod's fluid data
  • #329 SmelteryBlock and LavaTankBlock onNeighborBlockChange now only notify the master when the changed block is air, a smeltery block or a lava tank. Block removal moves to onBlockPreDestroy, and SmelteryLogic.notifyChange sets a queued flag that updateEntity consumes to run checkValidPlacement once. - @Pxx500
    • Fixed: repeated full smeltery structure checks from unrelated neighbour updates
  • #321 Optimized rendering allocation in FlexibleToolRenderer, BowBase, ToolCore, ProjectileWeapon, and Crossbow by reducing unnecessary object creation during render passes. - @boubou19
    • Fixed: Excessive RAM allocation during tool rendering
  • #307 Inventory block renderers now batch faces into a single Tessellator draw. Duplicated renderStandardInvBlock and renderInventoryCube code was removed from individual renderers and moved into ItemHelper, which takes an array of render bounds. - @boubou19
    • Removed: duplicated inventory render code
  • #304 Implemented last-recipe caching and recipe batching in CraftingStationContainer.java to eliminate redundant lookups during bulk crafting operations. - @Caedis
    • Added: recipe caching, recipe batching
    • Fixed: crafting station lag
    • Closes GTNH#25465
  • #292 Optimized TextureHelper.java texture existence checks and added access transformer changes to improve lookup performance. - @tiffit
    • Fixed: startup performance
  • #263 Adds LocalizedColors, which holds the tconstruct.nei.color.* values as static ints and fills them in reload(), called from TProxyClient.initialize. RecipeHandlerToolMaterials drops its per-draw getLocalizedColor lookup and reads those fields. - @Ranzuu
    • Removed: per-draw color lookup in the material recipe handler
  • #253 ToolStationGui.actionPerformed swaps String.replaceAll with a regex for a plain String.replace of the literal \n sequence. - @Nikolay-Sitnikov

Internal / Refactor ​

  • #293 Replaced LocalizedColors with ColorUtils holding ColorResource entries built from a ColorResource.Factory for the tinker namespace. RecipeHandlerToolMaterials now calls getColor(), and the LocalizedColors.reload() call in TProxyClient is removed. Requires GTNHLib PR 380. - @Ranzuu
    • Added: ColorUtils color resources for tool material text
    • Removed: LocalizedColors class
  • #217 AbstractTab gets a protected drawButton(Minecraft, ItemStack, boolean) overload that takes the icon stack and an optional GL_DEPTH_TEST toggle around item icon rendering. The existing drawButton delegates to it with depth test off. - @wlhlm
    • Added: drawButton overload for inventory tabs

Chores ​

  • #306 Added neiTemperature to ColorUtils (0x808080), used in RecipeHandlerMelting.drawExtras. Bumped GTNHLib from 0.11.16 to 0.11.30 in dependencies.gradle. - @Ranzuu
    • Added: neiTemperature color resource
  • #235 Removed MinecraftForge.EVENT_BUS.register(this) and its import from SmelteryProxyClient.initialize. - @Alexdoru
    • Removed: unused event bus registration

Contributors ​

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

@Dream-Master (24), @UltraProdigy (22), @Pxx500 (12), @Ranzuu (12), @Nikolay-Sitnikov (7), @Alexdoru (6), @Algent (6), @boubou19 (6), @Caedis (6), @koolkrafter5 (6), @danyadev (5), @Eldrinn-Elantey (5), @LazyFlesh (5), @Ethryan (4), @Ruling-0 (4), @DarkShadow44 (3), @FourIsTheNumber (3), @MCTBL (3), @mitchej123 (3), @sisyphussy (3), @Viptunbeqwfwew (3), @wlhlm (3), @Connor-Colenso (2), @cubefury (2), @FrostyFire1 (2), @Guvante (2), @ham-corp (2), @kuba6000 (2), @loenaaaa (2), @Luca-Guettinger (2), @Nana-Sakura (2), @ohentis (2), @slprime (2), @SuperSoupr (2), @tiffit (2), @VortexSo4 (2), @ABKQPO (1), @ah-OOG-ah (1), @Aintripin (1), @Angry3vilbot (1), @brandyyn (1), @C0bra5 (1), @Charsy89 (1), @chochem (1), @ChromaPIE (1), @DennisOrtin (1), @Dredonkey (1), @EnderProyects (1), @Gamingb3ast (1), @ImaMapleTree (1), @imTheSupremeOne (1), @iouter (1), @Kiryu144 (1), @Krepyn (1), @Kynake (1), @LazyFleshWasTaken (1), @lc-1337 (1), @LooseEthics (1), @Majora320 (1), @malabudi (1), @MalTeeez (1), @mattiasploesch-cpu (1), @Miklebe (1), @PLASMAchicken (1), @ROBERT-PARKOURCIVILIZATIONGOD (1), @Sanduhr32 (1), @seventh-june (1), @thehoblit (1), @tuodekun (1), @Worive (1), @ZaykieT (1), @zyf051520 (1)