ThaumicHorizons
21 merged pull requests.
New Features
- #94 Added dispenser behaviors for Alchemite block and custom boat/projectile entities via new
BehaviorDispenseBoatclass and modifications to entity classes to support dispensing. - @koolkrafter5- Added: Dispenser support for Alchemite blocks, Dispenser support for Blast Phials, Injections, Incubated Eggs, Dispenser support for Greatwood/Thaumium boats, BehaviorDispenseBoat handler class
Changes
- #134 Removed async generation thread (PocketPlaneThread), integrated generation logic back into PocketPlaneData on main thread, removed 'generating' boolean flag. - @tiffit
- Removed: async PocketPlaneThread
- Fixed: pocket dimension generation crash, async generation race conditions
- Closes GTNH#25182, GTNH#25794
- #102 Modified TileSyntheticNode to consume full stack of essense per activation. - @Caedis
- Fixed: repeated key binding requirement for essense consumption
Bug Fixes
- #137 Set damage=2 for Warded Syringe in NEI display. - @Ableytner
- Fixed: Warded Syringe recipe visibility in NEI
- Closes GTNH#26104
- #126 Updated Thaumcraft dependency version and added null safety in ThaumicHorizons main class. - @koolkrafter5
- Fixed: NullPointerException with wand components on Arcane Workbench
- Closes GTNH#24871
- #125 Fixed sidedness handling in EventHandlerEntity for block placement. - @thehoblit
- Fixed: TC Animation Focus golem dupe exploit
- Closes Dupes-Exploits-GTNH#274
- #121 Added check in TileVortexStabilizer for other active stabilizers before unconditionally calling setNodeType on deactivation. - @Eldrinn-Elantey
- Fixed: node type restoration with multiple active stabilizers
- #119 Converted colon-syntax switch cases to arrow syntax in getIcon, fixed case 0/1 swap in case 10, and ensured all sides are handled explicitly to prevent fall-through. - @Eldrinn-Elantey
- Fixed: gateway portal texture display on outer faces, lapis showing instead of stone on top corner
- #116 Fixed beam count overflow (count += 6 → Math.max(0, 6 - beams)), added S35PacketUpdateTileEntity sync with full NBT, clientSynced flag, lastSyncedBeams batching, separate if for target swaps, and rewrote vortex rotation to use screen-plane basis vectors with continuous nanosecond animation. - @Eldrinn-Elantey
- Fixed: vortex sprite flickering, beam desync on chunk reload, stabilizer target synchronization, vortex rotation jitter
- Closes GTNH#24380
- #115 Modified portal exit rotation to use TileSlot.xAligned: xAligned portals face south (yaw=0), Z-aligned portals face east (yaw=270). Replaced instanceof casts with pattern matching. - @Eldrinn-Elantey
- Fixed: random exit rotation on pocket plane portals
- #114 Fixed BlockSlot.onBlockActivated return value, ItemKeystone instanceof logic, coordinate binding formula using dimensionID, wormhole cooldown (10→200 ticks), generation thread execution (.run()→.start()), chunk marking in wrong dimension, and added null checks and portal state guards. - @Eldrinn-Elantey
- Fixed: keystone binding, pocket dimension portal interaction, wormhole teleport loop, world save corruption, portal destruction race condition
- Migration: Re-bind keystones to pocket planes if they became unbound; avoid fast repeated wormhole teleports to prevent ping-pong effects.
- #111 Added null check and manual TileEntity instantiation in PocketPlaneData.generatePocketPlane to handle asynchronous vortex block placement. - @ROBERT-PARKOURCIVILIZATIONGOD
- Fixed: NullPointerException during async pocket dimension generation
- Closes GTNH#24306
- #109 Adjusted GUI bounds in GuiCase, GuiInspiratron, and GuiSoulExtractor. - @Ranzuu
- Fixed: GUI clipping on right and bottom edges
- #100 Added null pointer check in ExplosionAlchemite to prevent crash during explosion logic. - @DarkShadow44
- Fixed: NullPointerException on Alchemite explosion
- #99 Refactored potion initialization to respect config values during syncConfig(), with fallback handling for occupied IDs and consistent initialization order (preInit → syncConfig → initPotions). - @Aerindor-of-Arcane
- Fixed: Potion IDs being overridden despite config settings, Inconsistent initialization order
- #93 Enabled Generic Injection, fixed world reference in flux explosion logic, refactored damage event handler to work with all Baubles slots instead of hardcoded 4. - @koolkrafter5
- Fixed: Soul Beacon flux spawning in wrong world
- Closes GTNH#20562
Performance
- #110 Cleaned up world references in ClientProxy and EventHandlerEntity to prevent memory leaks. - @Alexdoru
- Fixed: world memory leaks
Internal / Refactor
- #124 Replaced nested if/return patterns with ternary operators, removed labeled breaks with explicit defaults, cleaned up redundant braces, removed decompiler header. - @Eldrinn-Elantey
- #120 Replaced ~30 magic numbers (timers, heal amounts, thresholds, radii) with static final constants in TileVat and TileSoulforge. Replaced catch blocks with explicit null/instanceof checks. Fixed soul bit overflow in TileSoulforge and redundant else-if in ItemLensOrderEntropy. - @Eldrinn-Elantey
- Fixed: soul bit overflow, redundant else-if branch
- #117 Removed dead assignments, inlined pointless conditions, dropped redundant casts, made MAX_COUNT private static final, renamed var3-6 to dx/dy/dz/dist, fixed potential nextInt(0) crash, extracted repeated casts, deduplicated getTileEntity calls, and made sonicFX private. - @Eldrinn-Elantey
- Fixed: potential nextInt(0) crash when beams == 0
Chores
- #105 Corrected spelling errors in en_US.lang. - @Yoshy2002
- Fixed: typos in language file
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@Eldrinn-Elantey (8), @thehoblit (8), @koolkrafter5 (4), @Nikolay-Sitnikov (4), @Dream-Master (2), @RecursivePineapple (2), @Ruling-0 (2), @Ableytner (1), @Aerindor-of-Arcane (1), @Alexdoru (1), @Caedis (1), @danyadev (1), @DarkShadow44 (1), @LazyFlesh (1), @MalTeeez (1), @Ranzuu (1), @ROBERT-PARKOURCIVILIZATIONGOD (1), @sisyphussy (1), @tiffit (1), @UltraProdigy (1), @wlhlm (1), @Yoshy2002 (1)