Skip to content

Architecture and Package Layout

Dasik (Rifaditya) edited this page Aug 9, 2026 · 1 revision

Architecture & Package Layout

1 File, 1 Purpose Architecture

Stack Size Adjuster strictly adheres to the 1 File, 1 Function Law. Each class is focused entirely on a single responsibility: network sync, config handling, item drop handling, or rendering.


๐ŸŒณ ASCII Package Hierarchy

src/main/java/net/instantgratification/stacksizeadjuster/
โ”œโ”€โ”€ StackSizeAdjusterFabric.java       # Main Fabric entrypoint & GameRules registration
โ”œโ”€โ”€ StackSizeAdjusterFabricClient.java # Client entrypoint & S2C network packet receiver
โ”œโ”€โ”€ config/
โ”‚   โ”œโ”€โ”€ ModMenuIntegration.java        # ModMenu API integration entrypoint
โ”‚   โ”œโ”€โ”€ StackSizeConfig.java           # JSON config container (config/stack-size-adjuster.json)
โ”‚   โ””โ”€โ”€ YaclScreenHelper.java          # YACL 3.9.5 reflective GUI screen builder
โ”œโ”€โ”€ mixin/
โ”‚   โ”œโ”€โ”€ AbstractContainerMenuMixin.java# Double-precision quick-crafting calculation
โ”‚   โ”œโ”€โ”€ ContainerMixin.java            # Max container stack size limit override (Integer.MAX_VALUE)
โ”‚   โ”œโ”€โ”€ ContainersMixin.java           # Containers.dropItemStack interception
โ”‚   โ”œโ”€โ”€ DataComponentsMixin.java       # DataComponents MAX_STACK_SIZE codec expansion
โ”‚   โ”œโ”€โ”€ GiveCommandMixin.java          # /give command interception
โ”‚   โ”œโ”€โ”€ ItemInstanceMixin.java         # ItemInstance.getMaxStackSize hook
โ”‚   โ”œโ”€โ”€ ItemMixin.java                 # Item.getDefaultMaxStackSize hook
โ”‚   โ”œโ”€โ”€ ItemStackMixin.java            # ItemStack.getMaxStackSize & count range redirect
โ”‚   โ”œโ”€โ”€ ItemStackTemplateMixin.java    # ItemStackTemplate count range redirect
โ”‚   โ”œโ”€โ”€ MinecraftServerMixin.java      # Server GameRule modification listener
โ”‚   โ””โ”€โ”€ client/
โ”‚       โ””โ”€โ”€ GuiGraphicsExtractorMixin.java # Item count GUI renderer override
โ”œโ”€โ”€ network/
โ”‚   โ””โ”€โ”€ StackSizeLimitSyncPayload.java # S2C payload record (stack-size-adjuster:sync_limit)
โ””โ”€โ”€ util/
    โ”œโ”€โ”€ GiveCommandHelper.java         # /give item loop with 100x stack safety multiplier
    โ”œโ”€โ”€ InventoryDropHelper.java       # Capped entity split logic on container breaks
    โ”œโ”€โ”€ ItemCountRenderer.java         # Dynamic font matrix scale-down renderer
    โ”œโ”€โ”€ ModVersionGuard.java           # Runtime class verification check
    โ””โ”€โ”€ StackSizeManager.java          # Central thread-safe limit manager & override registry

๐Ÿ”’ Threading & Concurrency Model

  • Read Operations: StackSizeManager.getModifiedStackSize is lock-free and thread-safe via volatile int fields and a CopyOnWriteArrayList override list.
  • Server-to-Client Sync: Network packets are dispatched on the main server thread and processed on the client main thread via context.client().execute(...).

Clone this wiki locally