Skip to content

LittleTiles ​

96 merged pull requests.

New Features ​

  • #186 DumpMeshCommand uses the new LittleTilesFaceCuller.renderedTriangles to dump the triangles the world renderer draws. Mesh3d.dumpMesh takes a name and index, and four new lang keys are added. - @DarkShadow44
    • Added: culled mesh dump in the tile dump command
  • #185 ChiselCornerMouseHandler now also fires when PreviewRenderer.hasTwoHitCorners(). PreviewRenderer.selectTwoHitCorner swaps firstHit and markedHit. LittleDeformedBoxHelper.pickLookedAtBox is extracted from the corner picking, and LittleDeformedBoxPreviewRenderer gets renderTwoHitCornerMarkers. - @DarkShadow44
    • Added: corner markers for two hit chisel preview, left click selection of the first hit
  • #178 Adds ChiselCornerMouseHandler, which cancels the left click MouseEvent while the chisel holds corners, plus LittleDeformedBoxHelper and corner picking in PreviewRenderer. Also changes ItemLittleChisel, LittleTileCutoutInfo and DumpMeshCommand, which now dumps metadata. - @DarkShadow44
    • Added: selecting and moving the first hit in chisel two hit mode, deformed box corner editing, metadata in mesh dump
  • #177 Implemented BlockTile.canSustainPlant, summing the area of top-face tiles and requiring full coverage. Added LittleTile.canSustainPlant and contributesToTopFace, and LittleTileBlock delegates to the wrapped block through IBlockAccessFake. - @DarkShadow44
    • Added: Planting on Little Tiles
  • #175 LittleTilesBlockRenderHelper wraps cutout triangle emission in AngelicaCompat.beginAmbientOcclusion/endAmbientOcclusion, which sets the applied-AO flag on Angelica's StateAwareTessellator. LittleTiles checks the installed Angelica version against 2.1.0 on init before creating the compat object. - @DarkShadow44
    • Added: smooth lighting for cutout tiles with Angelica 2.1.0+
    • Fixed: missing ambient occlusion on slopes and other cutouts
    • Closes #71
  • #169 Adds a DEFORMED_BOX shape with LittleDeformedBoxHelper, LittleDeformedBoxPreviewRenderer, ChiselCornerMouseHandler (cancels left-click MouseEvent while editing), and Mesh3dUtil. The corners are baked into LittleTileCutoutInfo on placement. ItemLittleChisel, ItemBlockTiles and PreviewRenderer are changed, and DumpMeshCommand now also dumps tile metadata. - @DarkShadow44
    • Added: deformable box Chisel shape, corner selection by left click
  • #163 Added client mixin MixinGuiContainer_PickBlock, LittleCursorBlockUpdatePacket (server validates cursor stack is the chisel and block is valid), reflection-based NEICompat, and BogoCompat cancelling BeforeSortEvent on middle click with a chisel. InventoryBogoSorter added as compileOnly. - @vermz99
    • Added: Middle click pick for the Little Chisel in inventory and NEI
  • #157 Enhances BlockOverlayRenderer to render selected shape meshes with texture mapping. Adds shape preview generation in Mesh3d and simplifies ShapeSelectorWidget. - @S4mpsa
    • Added: textured shape preview on chisel
  • #156 Extends OrientationMapper with 24 additional mirrored orientation matrices (48 total). Updates ItemBlockTiles, ItemRecipe, ItemLittleChisel, and LittleToolHandler to handle flip transformations. Adds flip support to Triangle3d. - @S4mpsa
    • Added: mesh flip support, 24 mirrored orientation matrices
  • #148 Introduces ShapeSelectorWidget with mesh-based previews. Extends BlockDisplayWidget and updates Mesh3dUtil with preview generation utilities. Modifies ItemLittleChisel GUI initialization. - @S4mpsa
    • Added: ShapeSelectorWidget, shape preview rendering, scrollbar support
  • #141 Adds a history package (LittleTilesPlacementHistory, LittleTileChangeRecorder, LittleTileChangePlan, ChangeEntry), a LittleUndoRedoPacket, and undo/redo KeyBindings polled in PreviewRenderer. History is cleared on server stop. ItemBlockTiles, LittleTilePlacementPlan and LittleDoor are reworked to record changes. - @S4mpsa
    • Added: undo placement key, redo placement key, 30-action placement history for creative players
    • Closes #88
  • #138 Extends LittleTilePlacementPlan and ItemRecipe to handle mesh geometry alongside box tiles. Adds mesh rendering support in PreviewRenderer and tool handling in LittleToolHandler. Updates ItemHammer interaction logic. - @S4mpsa
    • Added: mesh recipe support, mesh placement plans
    • Fixed: overwrite mode changing slopes unintentionally, hammer converting slopes to boxes
    • Closes #109, #110
  • #137 Adds ItemLittleBag, ItemPartialTiles, and the LittleBagItemHandler, LittleBagStorage, LittleBagStock and LittleBagGui classes (ModularUI). Material classes (LittleMaterial, LittleMaterialStack, LittleMaterialValuator) are added. LittleTilesConfig adds little_bag.maxMaterials (default 200, range 1-10000). BlockValidator gets a null check. - @DarkShadow44
    • Added: Little Bag, Tiles (partial tiles) item, little_bag maxMaterials config option
  • #131 Introduces slope_triangle_alternate.obj model and extends LittleTileShapeMode enum with new shape option. Adds utility function in Mesh3dUtil for handling the new shape. - @S4mpsa
    • Added: alternate triangle shape, slope_triangle_alternate model
  • #130 Implements ItemCollisionTool with a new CollisionHighlightRenderer to visualize collision state. Extends packet handling in LittleBlockPacket and tile data in LittleTile to track passthrough state. - @DarkShadow44
    • Added: ItemCollisionTool, collision passthrough feature, CollisionHighlightRenderer
  • #129 Adds client-side DumpMeshCommand registered through ClientCommandHandler in LittleTilesClient. It calls the new Mesh3d.dumpMesh, which writes littleTilesDumpMesh<N>.obj to logs, and adds two lang keys. - @DarkShadow44
    • Added: /ltdumpmesh command
  • #127 Added culling logic to LittleTilesFaceCuller and LittleTilesBlockRenderHelper using 3D geometry utilities (Tuple3d, Triangle3d) to detect and skip rendering occluded mesh faces. - @DarkShadow44
    • Added: mesh-mesh culling, mesh-box culling
  • #122 Added LittleTilesFaceCuller and FaceClipper rendering systems with face culling logic to ExtendedRenderBlocks and LittleTilesBlockRenderHelper; includes partial face overlap support across block boundaries. - @DarkShadow44
    • Added: LittleTilesFaceCuller face culling system, FaceClipper face clipping utility, IFaceClipper interface, FacePiece data class, Translucent tile face culling
    • Fixed: Glass tile visual connections
    • Closes #73
  • #112 Added TriangleRayIntersect for precise ray-to-geometry collision testing and integrated into TileEntityLittleTiles selection logic. - @DarkShadow44
    • Added: TriangleRayIntersect raycasting
    • Fixed: Slope selection precision
  • #105 Added 3D intersection geometry utilities (TriangleBoundingBoxIntersect, TriangleTriangleIntersect) and integrated shape-aware collision detection into LittleTilePlacementPlan and TileEntityLittleTiles. - @DarkShadow44
    • Added: Mesh3d 3D geometry class, TriangleBoundingBoxIntersect collision detection, TriangleTriangleIntersect collision detection, Shape-aware placement logic
  • #65 Added round slope geometry and rendering support across LittleTilesBlockRenderHelper, PreviewRenderer, Mesh3dUtil, ItemLittleChisel, and LittleTileShapeMode. Includes new OBJ model file and language localization. - @DarkShadow44
    • Added: round slope shape, slope_concave.obj model, localized slope description
  • #56 Added LittleTilePlaceMode enum and LittleTilePlacementPlan to handle different placement strategies with configurable behavior per mode. - @DarkShadow44
    • Added: LittleTilePlaceMode, placement mode configuration, placement mode UI strings
  • #53 Added pillar shape support with mesh generation, packet handling, and tool configuration in LittleTileCutoutInfo and LittleToolHandler. - @DarkShadow44
    • Added: pillar shape mode, pillar mesh generation, pillar language strings
  • #46 Added LittleItemUpdatePacket and modified MixinForgeHooks_PickBlock to support picking little tiles in survival mode. - @DarkShadow44
    • Added: LittleItemUpdatePacket, survival mode block picking
  • #38 Added OrientationMapper (24-orientation lookup system), updated Triangle3d and Mesh3dUtil with rotation matrices, enhanced LittleToolHandler with cutout rotation logic to handle block-picked slope fragments. - @DarkShadow44
    • Added: slope rotation, OrientationMapper
  • #37 Enhanced PreviewRenderer and LittleTilesBlockRenderHelper to render slope preview geometry, updated LittleToolHandler with slope preview data. - @DarkShadow44
    • Added: slope preview rendering
  • #35 Added 3D mesh utilities (Mesh3d, Mesh3dUtil, Plane3d, Edge3d, Triangle3d) for slope geometry, extended ItemLittleChisel and LittlePlacePacket with slope support, modified rendering pipeline for mesh-based tiles. - @DarkShadow44
    • Added: slope cutting, 3D mesh utilities, mesh-based tile system
  • #33 Enhanced PreviewRenderer, ItemLittleChisel, LittleTileBlockPos, and LittleToolHandler to support grid alignment and variable block sizes. Added TextButtonWidget for UI controls. - @DarkShadow44
    • Added: grid alignment, block size configuration, TextButtonWidget
  • #31 Added BlockOverlayRenderer client-side to display cutting previews. - @DarkShadow44
    • Added: block overlay renderer
  • #30 Added Mixin (MixinForgeHooks_PickBlock) to hook into Forge's pick block logic and allow chisel to capture block state. - @DarkShadow44
    • Added: block pick mixin, block sampling for chisel
  • #29 Added GuiToolConfig, BlockDisplayWidget, BlockStateSyncValue, and updated ItemLittleChisel and LittleToolHandler with configuration support. Added ModularUI2 dependency. - @DarkShadow44
    • Added: block selection GUI, BlockDisplayWidget
  • #27 Implemented ItemLittleChisel with core placement logic, updated PlacementHelper and LittleTileBlockPos, removed old SubGuiChisel/SubContainerChisel, added PreviewRenderer enhancements. - @DarkShadow44
    • Added: Chisel tool for stone 1x1 tiles
    • Removed: old chisel GUI

New Content ​

  • #161 Adds SLOPE_CONVEX_INNER_CORNER and SLOPE_CONVEX_OUTER_CORNER to LittleTileShapeMode, with new OBJ models slope_convex_inner and slope_convex_outer loaded in Mesh3dUtil, and lang entries. - @vermz99
    • Added: Convex Inner Corner chisel shape, Convex Outer Corner chisel shape
  • #118 Added shape definitions to LittleTileShapeMode, imported 3D models (OBJ files), and updated rendering configuration and language files. - @S4mpsa
    • Added: Slope (Convex) shape, Slope Inner Corner shape, Slope Outer Corner shape, Slope Triangle shape, Slope Triangle Corner shape, 3D model assets
    • Closes #104

Changes ​

  • #142 Refactors rotation logic in LittleToolHandler and adds rotation support to LittleTilePreview. Simplifies ItemRecipe rotation handling by centralizing logic. - @DarkShadow44
    • Fixed: multi-block tile rotation
  • #49 Adds Triangulator, which maps the cut polygon to 2D via Plane3d.mapTo2D and runs earcut4j's Earcut.earcut, replacing the fan triangulation in Mesh3d.cutByPlane. earcut4j 2.2.2 is added as a shadowImplementation dependency and usesShadowedDependencies is enabled; Mesh3d.isDegenerate becomes public static. - @DarkShadow44
    • Added: earcut triangulation of cut mesh edges
    • Removed: fan triangulation for cut meshes
  • #28 Updated tooltip formatting in all item classes (ColorTube, Hammer, Saw, Wrench, MultiTiles, Recipe, RubberMallet, TileContainer). - @czerwonogrodzki
  • #25 Moved isBlockValid from SubContainerHammer into a new BlockValidator class and updated SubContainerHammer, SubContainerTileContainer, SubContainerWrench, SubGuiChisel and ItemRubberMallet to call it. The new version returns false for Blocks.air and for blocks where hasTileEntity(0) is true, before the existing shape and glass checks. - @DarkShadow44
    • Added: BlockValidator class

Bug Fixes ​

  • #184 TileEntityLittleTiles.getMoving now sets the hit vector to the mesh hit point for cutout tiles. LittleTileBlockPos.fromMovingObjectPosition only applies the grid line side offset when the hit lies on a grid line, and the preview box is grown by Z_FIGHT_EPSILON. - @DarkShadow44
    • Fixed: tiles could not be placed against cutout shapes, z-fighting of the placement preview
  • #182 Changed the refmap entry in mixins.littletiles.json from com.creativemd.littletiles.refmap.json to mixins.littletiles.refmap.json. - @DarkShadow44
    • Fixed: LittleTiles mixin refmap name wrong in re-obfuscated environments
  • #181 Added LittleTilesBlockRenderHelper.tintsTopFaceOnly (Blocks.grass), used in renderTriangles and Mesh3d.renderIcon(color, topTintOnly) with per-triangle face direction via Triangle3d.getFaceDirection. - @DarkShadow44
    • Fixed: Wrong grass tint on cutouts and in inventory
  • #174 In LittleTilesBlockRenderHelper.renderCubes the Angelica shader material override is set before cutout rendering and reset in the finally block, instead of only around the normal render path. Commented-out test dependencies added to dependencies.gradle. - @DarkShadow44
    • Fixed: Cutout tiles rendering wrong with shaders
  • #171 SlotControl.readFromNBT ignores type 0 updates on the server and splits the server-side cursor stack instead of the client-supplied one. SubContainerHammer validates size bounds, SubContainerStructure validates the structure id and builds the new tag separately, and GuiContainerSub null-checks getTopLayer(). - @DarkShadow44
    • Fixed: clients being able to create items through slot and cursor sync packets, hammer sizes outside the tile range being accepted, null pointer crash in the structure editor, null pointer crash in Little Tiles GUI mouse handling
  • #170 SubContainerTileContainer.onGuiPacket returns early on null NBT and on a null or non-positive stack size after loadItemStackFromNBT. - @Worive
  • #165 TileEntityLittleTiles.updateTiles now calls updateLightByType when the max light value changes. IBlockAccessFake reworked to override block and meta at the tile position. Tile rendering forces max block brightness for emitting blocks. - @vermz99
    • Fixed: Light-emitting little tiles not emitting light, Light not updating when tiles change
    • Closes #108
  • #164 Added LittleTilesBlockRenderHelper.resolveRenderColor, falling back to Block.getRenderColor(meta) when the cube color is white. Used in renderTriangles, renderInventoryCubes and the BlockOverlayRenderer icon preview. - @vermz99
    • Fixed: Wrong color on meta-colored blocks in tiles and preview
  • #162 Added bounds checks on LittleTileShapeMode.values() indexing in LittleToolHandler.getShape (falls back to 0) and LittleTileCutoutInfo.loadFromNBT (returns null). - @vermz99
    • Fixed: Crash from an invalid Little Chisel shape id
  • #159 Reworks LittleTileGeometryCache, LittleTilesFaceCuller and LittleTilesBlockRenderHelper for thread safety. Tile snapshots move into TileEntityLittleTiles.getRenderingCubes, the culling context is passed as a Supplier, and Mesh3d dump counters become AtomicInteger. - @DarkShadow44
    • Fixed: thread-unsafe LittleTiles rendering with Angelica
  • #153 Updates ItemLittleChisel to pass the correct tile removal flag and adds suppression for MUI2 compiler warning in LittleBlockPacket. - @DarkShadow44
    • Fixed: hammer removing last tile, compiler warning
  • #147 Adjusts triangle-triangle intersection tolerance in TriangleTriangleIntersect to better detect overlapping slopes without rejecting valid adjacent configurations. - @DarkShadow44
    • Fixed: slope collision overlap detection
  • #143 Adds preview correction logic in LittleTilesBlockRenderHelper to properly handle multi-block tile placement plan visualization. - @DarkShadow44
    • Fixed: multi-block placement preview rendering
  • #135 Re-adds the previously deleted BlockRenderHelper class in creativecore.client.block package to maintain API compatibility. - @DarkShadow44
    • Added: BlockRenderHelper
    • Fixed: Online Pic Frame compatibility
    • Closes #120
  • #128 Adjusted rounding logic in OrientationMapper and Plane3d to fix precision issues affecting both culling correctness and texture coordinate calculation. - @DarkShadow44
    • Fixed: rounding issues in culling, UV coordinate precision
  • #125 Mesh3d.isDegenerate now compares squared distances and the cross product length against an epsilon of 1e-8 instead of exact equality. cutByPlane drops degenerate triangles that are kept below the plane. - @DarkShadow44
    • Fixed: degenerate triangles left over after mesh cutting
  • #124 Enhanced LittleTilesBlockRenderHelper to render correct preview geometry for multi-block slope cutouts. - @DarkShadow44
    • Fixed: Block-picked slope preview rendering
  • #115 Enhanced Mesh3d, Triangle3d, TriangleBoundingBoxIntersect, and TriangleTriangleIntersect to handle edge cases in geometric collision detection. - @DarkShadow44
    • Fixed: Slope-to-slope collision, Box-to-slope collision, Slope containment collision
  • #114 Refactored Edge3d edge-splitting algorithm to avoid floating-point precision issues in edge intersection detection. - @DarkShadow44
    • Fixed: Holes in complex sloped geometries
  • #101 Modified ItemBlockTiles to properly handle slope placement in marked mode. - @DarkShadow44
    • Fixed: Slope placement in marked mode
  • #97 Updated BlockStateSyncValue and ItemLittleChisel to allow sync handlers to send packets to the server. Updated ModularUI2 dependency version. - @DarkShadow44
    • Fixed: Little Chisel error when swapping blocks/modes/size (issue #25052)
    • Closes GTNH#25052
  • #66 Changed BlockLTColored material from rock to stone in LittleTiles.java, preventing Tinkers' Hammer from breaking the container while preserving correct material for individual tiles. - @DarkShadow44
    • Fixed: block duplication via Tinkers Hammer (issue #22023)
    • Closes GTNH#22023
  • #63 Modified LittleTilesBlockRenderHelper to render buggy meshes as full cubes as a fallback, preventing empty mesh rendering. - @DarkShadow44
    • Fixed: empty mesh rendering causing unremovable blocks
  • #62 Enhanced LittleTilePlacementPlan to remove empty tile entities after removal and prevent premature block destruction during overwrites. - @DarkShadow44
    • Fixed: empty tile blocks not being removed, tiles not placing during full overwrite
  • #59 Added null checks throughout tile item handling and container code to safely handle tiles without NBT tags. - @tiffit
    • Fixed: null pointer crash with tiles lacking NBT, issue #21475
    • Closes GTNH#21475
  • #58 Removed unused BlockRenderHelper, fixed world references in event bus and tick handler, and improved tile entity cleanup in block placement. - @Alexdoru
    • Removed: BlockRenderHelper, LittleTilesClient world reference
    • Fixed: world memory leaks
  • #55 Added null check in LittleToolHandler for block lookups that return null when mod is uninstalled. - @DarkShadow44
    • Fixed: null pointer crash with removed mod blocks
  • #54 Corrected inventory slot update logic in SubContainerTileContainer to use correct hand slot. - @sbancuz
    • Fixed: duplication glitch with left-hand placement, issue #23195
    • Closes GTNH#23195
  • #52 Added background color detection in SubGui to fix texture localization. - @Ranzuu
    • Fixed: texture color rendering, issue #23012
    • Closes GTNH#23012
  • #48 Mesh3d.dumpFailingMesh appends ".obj" to the littleTilesErrorMesh output filename. - @DarkShadow44
    • Fixed: error mesh dump files missing .obj extension
  • #47 Modified ItemBlockTiles to prevent chisel consumption in survival mode. - @DarkShadow44
    • Fixed: chisel deletion in survival mode
  • #42 Moved getSubBlocks() call (client-only operation) from server context to client-only context in BlockDisplayWidget. - @DarkShadow44
    • Fixed: server-side crash when opening chisel GUI on dedicated server
  • #41 Fixed scrollbar behavior and block selection display state in BlockDisplayWidget and ItemLittleChisel. - @DarkShadow44
    • Fixed: scrollbar scrolling while already scrolled, selected block appearing in search results, console warning
  • #39 GuiTileViewer.updateNormalAxis computed sizeY as maxY - minZ; it now computes maxY - minY. - @DarkShadow44
    • Fixed: wrong Y size in the tile viewer
  • #36 Added server-side mesh culling in ItemBlockTiles placement to skip blocks that would be completely empty after cutting. - @DarkShadow44
    • Fixed: empty slope block placement
  • #34 Tuple3d.equals now uses DoubleMath.fuzzyEquals with a tolerance of 1e-10 per component. Vector3d gained a constructor from and a conversion to JOML Vector3f. enableModernJavaSyntax is now true in gradle.properties. - @DarkShadow44
    • Added: Vector3d conversion to and from JOML Vector3f
    • Fixed: vector equality failing on floating point rounding differences
  • #24 Adjusted rendering logic in LittleTilesBlockRenderHelper, SpecialBlockTilesRenderer, and BlockTile to properly handle translucent block rendering. - @DarkShadow44
    • Fixed: translucent block rendering

Performance ​

  • #126 Added LittleTileRenderCache system to cache unchanged mesh geometry; integrated into LittleTile and LittleTilesBlockRenderHelper. - @DarkShadow44
    • Added: LittleTileRenderCache client-side caching
  • #117 Mesh3dUtil.createMesh computes the mesh bounds and only calls cutByPlane for sides where the mesh extends past the tile bounds. It returns an empty Mesh3d early when the mesh lies fully outside. - @DarkShadow44
  • #116 Mesh3d.classifyVertices computes the plane distance once per point and compares it directly, and Plane3d.isPointAbove is removed. - @DarkShadow44
  • #113 PreviewTile.split now fills a SplitPreviewMap (Object2ObjectLinkedOpenHashMap) instead of HashMapList, and split tiles use copyWithSharedPreview so the preview is shared rather than copied. LittleTilePlacementPlan iterates the map entries. - @DarkShadow44
  • #44 TileEntityLittleTiles.canUpdate() now returns false and updateEntity() is removed, along with LittleTile.updateEntity() and the LittleTileTileEntity override. The empty-tile cleanup (setBlockToAir on the server) moved into updateTiles(). The periodic structure loadTiles() refresh every 1200 ticks and forwarding of ticks to wrapped tile entities are gone. - @DarkShadow44
    • Removed: per-tick updates on LittleTiles blocks, periodic structure tile reload every 1200 ticks
  • #43 Removed recursive neighbor block change handling from BlockTile, LittleBlockPacket, TileEntityLittleTiles, and LittleTile that was causing excessive tile loading with no benefit. - @DarkShadow44
    • Removed: neighbor block change recursion logic
    • Fixed: stack overflow when loading worlds with many adjacent tiles

Internal / Refactor ​

  • #187 Replaces the Vector3d cutout scale arguments with integer cutout sizes in Mesh3dUtil and the render helpers. Mesh3d.rotate now takes the box size, and meshes copy their points so triangles do not share them. CollisionHighlightRenderer stores meshes with their block position. - @DarkShadow44
  • #154 LittleBlockPacket.action is now a nested Action enum (ACTIVATE, DESTROY, SAW, COLOR, SPLIT) instead of an int. It is still written as the ordinal, and an unknown ordinal reads back as ACTIVATE. Callers in BlockTile, ItemColorTube, ItemLittleSaw and ItemRubberMallet were updated. - @DarkShadow44
  • #151 Renames LittleTileRenderCache to LittleTileGeometryCache and the renderCache fields and getters to geometryCache across LittleTile, LittleTileBlock, LittleTilePreview, LittleTilesCubeObject and the client render helpers. - @DarkShadow44
  • #146 Deletes PlannedCollisionTile and getPlannedCollisionTile from LittleTilePlacementPlan and simplifies isSpaceForTiles. - @DarkShadow44
    • Removed: dead collision tile planning code
  • #145 LittleTileRenderCache takes box and cutout suppliers instead of a LittleTile. ItemBlockTiles.getRenderingCubes, ItemRecipe.getCubes and LittleTilePreview.getCubeBlock build cubes from the preview directly. - @DarkShadow44
  • #144 Removes the cutoutInfo parameter from ItemBlockTiles.placeTiles, LittleTilePlacementPlan.fillPlan and LittlePlacePacket. The cutout now travels in the preview NBT. ItemLittleChisel.getLittlePreview and PreviewRenderer are simplified. - @DarkShadow44
  • #64 Extracts Mesh3dUtil.meshFromTile(LittleTileBox, LittleTileCutoutInfo) from LittleTilePlacementPlan.getCutoutInfoCurrent. - @DarkShadow44
  • #60 Placement logic moves out of ItemBlockTiles into the new LittleTilePlacementPlan class, which builds a plan first and then applies it, so "can place" and "place" no longer repeat the same checks. - @DarkShadow44
    • Added: LittleTilePlacementPlan
  • #51 TileEntityLittleTiles.onDataPacket now clears tiles and recreates all from the packet. The needFullUpdate flag and the per-tile "f" packet flag are removed, along with the receivePacket path for existing tiles. - @DarkShadow44
    • Removed: partial tile update handling, needFullUpdate flag
  • #50 Adds Mesh3dObjLoader, which parses simple OBJ files (v and f lines with triangle faces only), and assets/littletiles/models/slope.obj. Mesh3dUtil.initializeMeshes() is called in LittleTiles.Init and replaces createSlopeMesh. Mesh3d.triangles becomes List and gains copy(); Triangle3d gains copy(). - @DarkShadow44
    • Added: generic OBJ model loader, slope.obj model
    • Removed: hardcoded slope mesh
  • #45 BlockTile.collisionRayTrace now calls TileEntityLittleTiles.getMoving(vec1, vec2, false) instead of duplicating the nearest-intercept loop inline. - @DarkShadow44
  • #40 LittleTile.boundingBoxes (a list) was replaced by a single boundingBox field, and BlockTile, ItemRecipe, ItemRubberMallet, LittleBlockPacket, LittleChair, LittleDoor, TileEntityLittleTiles, LittleTileBlock and PreviewTile were updated with null checks in place of loops. - @DarkShadow44
    • Removed: LittleTile.boundingBoxes list
    • Migration: Addons that read LittleTile.boundingBoxes must use the single boundingBox field instead.
  • #26 LittleTileSize sizeX/Y/Z changed from byte to int, the byte constructor was removed, and the NBT constructor reads the values with getInteger instead of getByte. Old byte-tagged data still reads through getInteger. - @DarkShadow44
    • Removed: byte-based LittleTileSize constructor

Chores ​

  • #136 Deletes .github/scripts/test_no_error_reports, a leftover shell script for checking crash reports and server logs. CI now lives in a central repository. - @wlhlm
    • Removed: test_no_error_reports CI script
  • #32 BlockDisplayWidget.draw now takes WidgetThemeEntry instead of WidgetTheme, and gets the WidgetTheme from getWidgetTheme(context.getTheme()).getTheme() for the draw calls. - @DarkShadow44

Contributors ​

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

@DarkShadow44 (92), @S4mpsa (39), @Dream-Master (29), @RecursivePineapple (15), @UltraProdigy (12), @vermz99 (9), @AshVz (5), @PLASMAchicken (4), @Algent (3), @glektarssza (3), @koolkrafter5 (3), @Alexdoru (2), @mitchej123 (2), @Worive (2), @Caedis (1), @czerwonogrodzki (1), @FrostyFire1 (1), @Ranzuu (1), @sbancuz (1), @sisyphussy (1), @tiffit (1), @wlhlm (1)