minecraft-inventory 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +566 -0
  2. package/package.json +37 -0
  3. package/src/InventoryGUI.tsx +108 -0
  4. package/src/cache/textureCache.ts +95 -0
  5. package/src/components/CursorItem/CursorItem.tsx +94 -0
  6. package/src/components/CursorItem/index.ts +1 -0
  7. package/src/components/HUD/HUD.tsx +11 -0
  8. package/src/components/HUD/index.ts +1 -0
  9. package/src/components/Hotbar/Hotbar.tsx +180 -0
  10. package/src/components/Hotbar/index.ts +1 -0
  11. package/src/components/InventoryOverlay/InventoryOverlay.tsx +196 -0
  12. package/src/components/InventoryOverlay/index.ts +2 -0
  13. package/src/components/InventoryWindow/EnchantmentOptions.tsx +109 -0
  14. package/src/components/InventoryWindow/InventoryBackground.tsx +110 -0
  15. package/src/components/InventoryWindow/InventoryWindow.tsx +120 -0
  16. package/src/components/InventoryWindow/ProgressBar.tsx +78 -0
  17. package/src/components/InventoryWindow/VillagerTradeList.tsx +136 -0
  18. package/src/components/InventoryWindow/index.ts +5 -0
  19. package/src/components/ItemCanvas/ItemCanvas.tsx +154 -0
  20. package/src/components/ItemCanvas/index.ts +1 -0
  21. package/src/components/JEI/JEI.module.css +37 -0
  22. package/src/components/JEI/JEI.tsx +303 -0
  23. package/src/components/JEI/index.ts +2 -0
  24. package/src/components/RecipeGuide/RecipeInventoryView.tsx +293 -0
  25. package/src/components/RecipeGuide/index.ts +1 -0
  26. package/src/components/Slot/Slot.module.css +111 -0
  27. package/src/components/Slot/Slot.tsx +363 -0
  28. package/src/components/Slot/index.ts +1 -0
  29. package/src/components/Text/MessageFormatted.css +5 -0
  30. package/src/components/Text/MessageFormatted.tsx +79 -0
  31. package/src/components/Text/MessageFormattedString.tsx +74 -0
  32. package/src/components/Text/chatUtils.ts +172 -0
  33. package/src/components/Tooltip/Tooltip.module.css +56 -0
  34. package/src/components/Tooltip/Tooltip.tsx +130 -0
  35. package/src/components/Tooltip/index.ts +1 -0
  36. package/src/connector/demo.ts +213 -0
  37. package/src/connector/index.ts +4 -0
  38. package/src/connector/mineflayer.ts +113 -0
  39. package/src/connector/types.ts +41 -0
  40. package/src/context/InventoryContext.tsx +157 -0
  41. package/src/context/ScaleContext.tsx +73 -0
  42. package/src/context/TextureContext.tsx +70 -0
  43. package/src/globals.d.ts +4 -0
  44. package/src/hooks/useKeyboardShortcuts.ts +41 -0
  45. package/src/hooks/useMobile.ts +28 -0
  46. package/src/index.tsx +65 -0
  47. package/src/mount.tsx +52 -0
  48. package/src/registry/index.ts +21 -0
  49. package/src/registry/inventories.ts +612 -0
  50. package/src/styles/tokens.css +47 -0
  51. package/src/types.ts +176 -0
package/src/types.ts ADDED
@@ -0,0 +1,176 @@
1
+ export interface ItemStack {
2
+ type: number
3
+ count: number
4
+ /** Snake_case item name, e.g. "diamond_sword". Used for texture lookup. */
5
+ name?: string
6
+ metadata?: number
7
+ nbt?: Record<string, unknown>
8
+ displayName?: string
9
+ enchantments?: Array<{ name: string; level: number }>
10
+ lore?: string[]
11
+ durability?: number
12
+ maxDurability?: number
13
+ }
14
+
15
+ export interface SlotState {
16
+ index: number
17
+ item: ItemStack | null
18
+ }
19
+
20
+ export type MouseButton = 'left' | 'right' | 'middle'
21
+ export type ClickMode = 'normal' | 'shift' | 'number' | 'middle' | 'drop' | 'drag' | 'double'
22
+
23
+ export interface SlotClickEvent {
24
+ slotIndex: number
25
+ button: MouseButton
26
+ mode: ClickMode
27
+ numberKey?: number
28
+ }
29
+
30
+ export interface DragEvent {
31
+ startSlot: number
32
+ endSlot: number
33
+ button: MouseButton
34
+ }
35
+
36
+ export type InventoryAction =
37
+ | { type: 'click'; slotIndex: number; button: MouseButton; mode: ClickMode; numberKey?: number }
38
+ | { type: 'drop'; slotIndex: number; all: boolean }
39
+ | { type: 'drag'; slots: number[]; button: MouseButton }
40
+ | { type: 'close' }
41
+ | { type: 'trade'; tradeIndex: number }
42
+ | { type: 'rename'; text: string }
43
+ | { type: 'enchant'; enchantIndex: number }
44
+ | { type: 'beacon'; primaryEffect: number; secondaryEffect: number }
45
+ | { type: 'hotbar-swap'; slotIndex: number; hotbarSlot: number }
46
+
47
+ export interface InventoryWindowState {
48
+ windowId: number
49
+ type: string
50
+ title?: string
51
+ slots: SlotState[]
52
+ properties?: Record<string, number>
53
+ heldItem: ItemStack | null
54
+ }
55
+
56
+ export interface PlayerState {
57
+ activeHotbarSlot: number
58
+ inventory: SlotState[]
59
+ }
60
+
61
+ export interface TextureAtlas {
62
+ url: string
63
+ tileSize: number
64
+ tilesPerRow: number
65
+ }
66
+
67
+ export type ScaleValue = number | string
68
+
69
+ export interface InventoryGUIConfig {
70
+ scale?: ScaleValue
71
+ slotSize?: number
72
+ showJEI?: boolean
73
+ jeiPosition?: 'left' | 'right'
74
+ showTooltips?: boolean
75
+ resourcePackUrl?: string
76
+ textureAtlas?: TextureAtlas
77
+ }
78
+
79
+
80
+ export interface SlotDefinition {
81
+ index: number
82
+ x: number
83
+ y: number
84
+ size?: number
85
+ group: string
86
+ label?: string
87
+ acceptsItem?: (item: ItemStack) => boolean
88
+ resultSlot?: boolean
89
+ fuelSlot?: boolean
90
+ }
91
+
92
+ export interface ProgressBar {
93
+ id: string
94
+ x: number
95
+ y: number
96
+ width: number
97
+ height: number
98
+ direction: 'right' | 'up' | 'down' | 'left'
99
+ textureX: number
100
+ textureY: number
101
+ emptyTextureX?: number
102
+ emptyTextureY?: number
103
+ getValue: (props: Record<string, number>) => number
104
+ getMax: (props: Record<string, number>) => number
105
+ }
106
+
107
+ export interface InventoryTypeDefinition {
108
+ name: string
109
+ title: string
110
+ backgroundTexture: string
111
+ backgroundWidth: number
112
+ backgroundHeight: number
113
+ /** Minecraft version for GUI texture lookup, e.g. '1.16.4' or '1.21.4'. Defaults to base URL version. */
114
+ guiTextureVersion?: string
115
+ slots: SlotDefinition[]
116
+ progressBars?: ProgressBar[]
117
+ playerInventoryOffset?: { x: number; y: number }
118
+ properties?: Record<string, { dataSlot: number; description: string }>
119
+ windowType?: number | string
120
+ hasTitle?: boolean
121
+ extraData?: Record<string, unknown>
122
+ }
123
+
124
+ export interface RecipeGuide {
125
+ title: string
126
+ description?: string
127
+ /** 'crafting' = 3×3 grid, 'smelting' = input+fuel→result, 'custom' = description only */
128
+ type: 'crafting' | 'smelting' | 'custom'
129
+ /** For crafting: 9-element array (null = empty slot) */
130
+ ingredients?: (ItemStack | null)[]
131
+ input?: ItemStack | null
132
+ fuel?: ItemStack | null
133
+ result?: ItemStack | null
134
+ }
135
+
136
+ /** A single entry in the recipe navigation stack */
137
+ export interface RecipeNavFrame {
138
+ /** The item whose recipes/usages are being viewed */
139
+ item: { type: number; name: string; displayName: string; count?: number; metadata?: number }
140
+ mode: 'recipes' | 'usages'
141
+ guides: RecipeGuide[]
142
+ /** Currently displayed guide index within `guides` */
143
+ guideIndex: number
144
+ }
145
+
146
+ export interface TradeOffer {
147
+ inputItem1: ItemStack
148
+ inputItem2: ItemStack | null
149
+ outputItem: ItemStack
150
+ disabled: boolean
151
+ uses: number
152
+ maxUses: number
153
+ xp: number
154
+ priceMultiplier: number
155
+ demand: number
156
+ specialPrice: number
157
+ }
158
+
159
+ export interface VillagerWindowState extends InventoryWindowState {
160
+ trades: TradeOffer[]
161
+ selectedTrade: number
162
+ villagerLevel: number
163
+ villagerXp: number
164
+ isRegularVillager: boolean
165
+ canRestock: boolean
166
+ }
167
+
168
+ export interface EnchantingWindowState extends InventoryWindowState {
169
+ enchantmentOptions: Array<{
170
+ level: number
171
+ enchantmentId: number
172
+ enchantmentLevel: number
173
+ requiredXp: number
174
+ }>
175
+ seed: number
176
+ }