🏛️ Архитектура и хуки аддонов (Minecraft 26.3)
📌 Отказ от ответственности за источник репозитория: Документация в этой вики отражает текущее состояние исходного кода в репозитории, которое может включать недавние невыпущенные коммиты или разрабатываемые функции, опережающие общедоступные сборки на CurseForge и Modrinth.
1. Official Infobox
| Parameter | Technical Details |
|---|---|
| Subsystem Name | Architecture & Addon Extension Hooks |
| Root Package | net.instantgratification.potionstacker |
| Core Entrypoint | PotionStackerFabric.java (ModInitializer) |
| Client Entrypoint | PotionStackerFabricClient.java (ClientModInitializer) |
| ModMenu Entrypoint | ModMenuIntegration.java (ModMenuApi) |
| Core Manager | PotionStackerManager.java |
| Network Payload | PotionLimitSyncPayload.java |
| Configuration | PotionStackerConfig.java, YaclScreenHelper.java |
| Mixin Count | 0 Mixins (100% Pure Addon Delegation) |
| Upstream Framework | Stack Size Adjuster (StackSizeManager) |
2. Step-by-Step Subsystem Lifecycle
onInitialize()Lifecycle Execution:- Step A: Load configuration baseline via
PotionStackerConfig.load(...). - Step B: Register functional override callback into
StackSizeManager.registerOverride(...). - Step C: Register
POTION_LIMITandSTEW_LIMITGameRules under namespaced category. - Step D: Register S2C payload type and codec via
PayloadTypeRegistry.clientboundPlay(). - Step E: Attach
ServerPlayConnectionEvents.JOINlistener for client sync. - Step F: Attach
ServerLifecycleEvents.SERVER_STARTEDlistener for world initialization checks.
- Step A: Load configuration baseline via
Client Initialization (
onInitializeClient):- Register global receiver for
PotionLimitSyncPayload.TYPEonClientPlayNetworking.
- Register global receiver for
Stack Query Resolution:
- When Minecraft queries item stack limit, Stack Size Adjuster iterates registered overrides.
- Potion Stacker Addon inspects item class; returns
potionLimitif potion,stewLimitif soup (and stew mod absent), or-1to continue chain.
3. Algorithmic Complexity & Zero-Allocation Path
- Time Complexity: $O(1)$ constant time lookup.
- Space Complexity: $O(1)$ zero heap allocation on the hot path.
4. Visual ASCII Architecture Diagram
+-------------------------------------------------------------------------+
| Minecraft Engine |
+------------------------------------+------------------------------------+
|
v
+-------------------------------------------------------------------------+
| Stack Size Adjuster (Core) |
| StackSizeManager.getStackSize() |
+------------------------------------+------------------------------------+
|
+----------------------+----------------------+
| CustomStackSizeOverride |
v v
+-----------------------------+ +-----------------------------+
| Potion Stacker Addon | | Stew Stacker Addon |
| PotionStackerManager.java | | (Sibling Addon) |
+--------------+--------------+ +-----------------------------+
| ^
|-- isModLoaded("stew-stacker-addon")? ------|
| If TRUE: returns -1 (defers stew logic)
|
v
+-------------------------------------------------------------------------+
| DasikLibrary (API) |
| DynamicGameRuleManager | ConfigHelper | GuiHelper |
+-------------------------------------------------------------------------+5. Addon Hook Registration Schema
java
@FunctionalInterface
public interface CustomStackSizeOverride {
int getModifiedStackSize(Item item, int originalSize);
}