minethon 0.1.0a1__py3-none-any.whl
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.
- minethon/__init__.py +78 -0
- minethon/_bridge/__init__.py +0 -0
- minethon/_bridge/_events.py +312 -0
- minethon/_bridge/_util.py +18 -0
- minethon/_bridge/event_relay.py +2085 -0
- minethon/_bridge/js/helpers.js +355 -0
- minethon/_bridge/js_bot.py +1377 -0
- minethon/_bridge/marshalling.py +218 -0
- minethon/_bridge/plugin_host.py +141 -0
- minethon/_bridge/runtime.py +81 -0
- minethon/_internal/__init__.py +0 -0
- minethon/api/__init__.py +7 -0
- minethon/api/navigation.py +156 -0
- minethon/api/observe.py +138 -0
- minethon/api/plugins.py +45 -0
- minethon/bot.py +2305 -0
- minethon/config.py +82 -0
- minethon/models/__init__.py +240 -0
- minethon/models/block.py +30 -0
- minethon/models/entity.py +44 -0
- minethon/models/errors.py +39 -0
- minethon/models/events.py +843 -0
- minethon/models/experience.py +18 -0
- minethon/models/game_state.py +31 -0
- minethon/models/item.py +27 -0
- minethon/models/player_info.py +23 -0
- minethon/models/recipe.py +24 -0
- minethon/models/time_state.py +24 -0
- minethon/models/vec3.py +37 -0
- minethon/models/window.py +49 -0
- minethon/py.typed +0 -0
- minethon/raw.py +75 -0
- minethon-0.1.0a1.dist-info/METADATA +145 -0
- minethon-0.1.0a1.dist-info/RECORD +36 -0
- minethon-0.1.0a1.dist-info/WHEEL +4 -0
- minethon-0.1.0a1.dist-info/licenses/LICENSE +661 -0
minethon/__init__.py
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""minethon -- A Python-first Mineflayer SDK."""
|
|
2
|
+
|
|
3
|
+
from minethon.api.navigation import NavigationAPI
|
|
4
|
+
from minethon.api.observe import ObserveAPI
|
|
5
|
+
from minethon.api.plugins import PluginAPI
|
|
6
|
+
from minethon.bot import Bot
|
|
7
|
+
from minethon.models.block import Block
|
|
8
|
+
from minethon.models.entity import Entity, EntityKind
|
|
9
|
+
from minethon.models.errors import (
|
|
10
|
+
BridgeError,
|
|
11
|
+
InventoryError,
|
|
12
|
+
MinethonConnectionError,
|
|
13
|
+
MinethonError,
|
|
14
|
+
NavigationError,
|
|
15
|
+
NotSpawnedError,
|
|
16
|
+
PluginError,
|
|
17
|
+
)
|
|
18
|
+
from minethon.models.events import (
|
|
19
|
+
BlockBrokenEvent,
|
|
20
|
+
ChatEvent,
|
|
21
|
+
CollectCompletedEvent,
|
|
22
|
+
DeathEvent,
|
|
23
|
+
EndEvent,
|
|
24
|
+
GoalFailedEvent,
|
|
25
|
+
GoalReachedEvent,
|
|
26
|
+
HealthChangedEvent,
|
|
27
|
+
KickedEvent,
|
|
28
|
+
SpawnEvent,
|
|
29
|
+
WhisperEvent,
|
|
30
|
+
)
|
|
31
|
+
from minethon.models.experience import Experience
|
|
32
|
+
from minethon.models.game_state import GameState
|
|
33
|
+
from minethon.models.item import ItemStack
|
|
34
|
+
from minethon.models.player_info import PlayerInfo
|
|
35
|
+
from minethon.models.recipe import Recipe
|
|
36
|
+
from minethon.models.time_state import TimeState
|
|
37
|
+
from minethon.models.vec3 import Vec3
|
|
38
|
+
from minethon.models.window import TradeOffer, VillagerSession, WindowHandle
|
|
39
|
+
from minethon.raw import RawBotHandle
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
"Block",
|
|
43
|
+
"BlockBrokenEvent",
|
|
44
|
+
"Bot",
|
|
45
|
+
"BridgeError",
|
|
46
|
+
"ChatEvent",
|
|
47
|
+
"CollectCompletedEvent",
|
|
48
|
+
"DeathEvent",
|
|
49
|
+
"EndEvent",
|
|
50
|
+
"Entity",
|
|
51
|
+
"EntityKind",
|
|
52
|
+
"Experience",
|
|
53
|
+
"GameState",
|
|
54
|
+
"GoalFailedEvent",
|
|
55
|
+
"GoalReachedEvent",
|
|
56
|
+
"HealthChangedEvent",
|
|
57
|
+
"InventoryError",
|
|
58
|
+
"ItemStack",
|
|
59
|
+
"KickedEvent",
|
|
60
|
+
"MinethonConnectionError",
|
|
61
|
+
"MinethonError",
|
|
62
|
+
"NavigationAPI",
|
|
63
|
+
"NavigationError",
|
|
64
|
+
"NotSpawnedError",
|
|
65
|
+
"ObserveAPI",
|
|
66
|
+
"PlayerInfo",
|
|
67
|
+
"PluginAPI",
|
|
68
|
+
"PluginError",
|
|
69
|
+
"RawBotHandle",
|
|
70
|
+
"Recipe",
|
|
71
|
+
"SpawnEvent",
|
|
72
|
+
"TimeState",
|
|
73
|
+
"TradeOffer",
|
|
74
|
+
"Vec3",
|
|
75
|
+
"VillagerSession",
|
|
76
|
+
"WhisperEvent",
|
|
77
|
+
"WindowHandle",
|
|
78
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
"""Internal bridge events for async JS operations.
|
|
2
|
+
|
|
3
|
+
These are private to the bridge layer — never import from public API.
|
|
4
|
+
Each event signals completion of a non-blocking JS action started by
|
|
5
|
+
the helpers in ``_bridge/js/helpers.js``.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
# -- Existing events --
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True, slots=True)
|
|
15
|
+
class DigDoneEvent:
|
|
16
|
+
"""Dig operation finished (success if error is None)."""
|
|
17
|
+
|
|
18
|
+
error: str | None = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass(frozen=True, slots=True)
|
|
22
|
+
class PlaceDoneEvent:
|
|
23
|
+
"""Place operation finished."""
|
|
24
|
+
|
|
25
|
+
error: str | None = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True, slots=True)
|
|
29
|
+
class EquipDoneEvent:
|
|
30
|
+
"""Equip operation finished."""
|
|
31
|
+
|
|
32
|
+
error: str | None = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass(frozen=True, slots=True)
|
|
36
|
+
class LookAtDoneEvent:
|
|
37
|
+
"""LookAt operation finished."""
|
|
38
|
+
|
|
39
|
+
error: str | None = None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# -- Movement --
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@dataclass(frozen=True, slots=True)
|
|
46
|
+
class LookDoneEvent:
|
|
47
|
+
"""Look (yaw/pitch) operation finished."""
|
|
48
|
+
|
|
49
|
+
error: str | None = None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# -- Sleep --
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclass(frozen=True, slots=True)
|
|
56
|
+
class SleepDoneEvent:
|
|
57
|
+
"""Sleep operation finished."""
|
|
58
|
+
|
|
59
|
+
error: str | None = None
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@dataclass(frozen=True, slots=True)
|
|
63
|
+
class WakeDoneEvent:
|
|
64
|
+
"""Wake operation finished."""
|
|
65
|
+
|
|
66
|
+
error: str | None = None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# -- Inventory --
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@dataclass(frozen=True, slots=True)
|
|
73
|
+
class UnequipDoneEvent:
|
|
74
|
+
"""Unequip operation finished."""
|
|
75
|
+
|
|
76
|
+
error: str | None = None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@dataclass(frozen=True, slots=True)
|
|
80
|
+
class TossStackDoneEvent:
|
|
81
|
+
"""TossStack operation finished."""
|
|
82
|
+
|
|
83
|
+
error: str | None = None
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@dataclass(frozen=True, slots=True)
|
|
87
|
+
class TossDoneEvent:
|
|
88
|
+
"""Toss operation finished."""
|
|
89
|
+
|
|
90
|
+
error: str | None = None
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
# -- Actions --
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@dataclass(frozen=True, slots=True)
|
|
97
|
+
class ConsumeDoneEvent:
|
|
98
|
+
"""Consume (eat/drink) operation finished."""
|
|
99
|
+
|
|
100
|
+
error: str | None = None
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@dataclass(frozen=True, slots=True)
|
|
104
|
+
class FishDoneEvent:
|
|
105
|
+
"""Fish operation finished."""
|
|
106
|
+
|
|
107
|
+
error: str | None = None
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
@dataclass(frozen=True, slots=True)
|
|
111
|
+
class ElytraFlyDoneEvent:
|
|
112
|
+
"""Elytra fly activation finished."""
|
|
113
|
+
|
|
114
|
+
error: str | None = None
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
# -- Crafting --
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
@dataclass(frozen=True, slots=True)
|
|
121
|
+
class CraftDoneEvent:
|
|
122
|
+
"""Craft operation finished."""
|
|
123
|
+
|
|
124
|
+
error: str | None = None
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
# -- Block interaction --
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@dataclass(frozen=True, slots=True)
|
|
131
|
+
class ActivateBlockDoneEvent:
|
|
132
|
+
"""ActivateBlock operation finished."""
|
|
133
|
+
|
|
134
|
+
error: str | None = None
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
@dataclass(frozen=True, slots=True)
|
|
138
|
+
class ActivateEntityDoneEvent:
|
|
139
|
+
"""ActivateEntity operation finished."""
|
|
140
|
+
|
|
141
|
+
error: str | None = None
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
@dataclass(frozen=True, slots=True)
|
|
145
|
+
class ActivateEntityAtDoneEvent:
|
|
146
|
+
"""ActivateEntityAt operation finished."""
|
|
147
|
+
|
|
148
|
+
error: str | None = None
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
# -- Containers (return JS window/instance proxy on success) --
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@dataclass(frozen=True, slots=True)
|
|
155
|
+
class OpenContainerDoneEvent:
|
|
156
|
+
"""OpenContainer operation finished."""
|
|
157
|
+
|
|
158
|
+
error: str | None = None
|
|
159
|
+
result: Any = None
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
@dataclass(frozen=True, slots=True)
|
|
163
|
+
class OpenFurnaceDoneEvent:
|
|
164
|
+
"""OpenFurnace operation finished."""
|
|
165
|
+
|
|
166
|
+
error: str | None = None
|
|
167
|
+
result: Any = None
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@dataclass(frozen=True, slots=True)
|
|
171
|
+
class OpenEnchantmentTableDoneEvent:
|
|
172
|
+
"""OpenEnchantmentTable operation finished."""
|
|
173
|
+
|
|
174
|
+
error: str | None = None
|
|
175
|
+
result: Any = None
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@dataclass(frozen=True, slots=True)
|
|
179
|
+
class OpenAnvilDoneEvent:
|
|
180
|
+
"""OpenAnvil operation finished."""
|
|
181
|
+
|
|
182
|
+
error: str | None = None
|
|
183
|
+
result: Any = None
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
@dataclass(frozen=True, slots=True)
|
|
187
|
+
class OpenVillagerDoneEvent:
|
|
188
|
+
"""OpenVillager operation finished."""
|
|
189
|
+
|
|
190
|
+
error: str | None = None
|
|
191
|
+
result: Any = None
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
# -- Trading --
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
@dataclass(frozen=True, slots=True)
|
|
198
|
+
class TradeDoneEvent:
|
|
199
|
+
"""Trade operation finished."""
|
|
200
|
+
|
|
201
|
+
error: str | None = None
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
# -- Tab completion (returns matches) --
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
@dataclass(frozen=True, slots=True)
|
|
208
|
+
class TabCompleteDoneEvent:
|
|
209
|
+
"""TabComplete operation finished."""
|
|
210
|
+
|
|
211
|
+
error: str | None = None
|
|
212
|
+
result: Any = None
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
# -- Writing --
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@dataclass(frozen=True, slots=True)
|
|
219
|
+
class WriteBookDoneEvent:
|
|
220
|
+
"""WriteBook operation finished."""
|
|
221
|
+
|
|
222
|
+
error: str | None = None
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
# -- World --
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
@dataclass(frozen=True, slots=True)
|
|
229
|
+
class ChunksLoadedDoneEvent:
|
|
230
|
+
"""WaitForChunksToLoad finished."""
|
|
231
|
+
|
|
232
|
+
error: str | None = None
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@dataclass(frozen=True, slots=True)
|
|
236
|
+
class WaitForTicksDoneEvent:
|
|
237
|
+
"""WaitForTicks finished."""
|
|
238
|
+
|
|
239
|
+
error: str | None = None
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
# -- Lower-level inventory --
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
@dataclass(frozen=True, slots=True)
|
|
246
|
+
class ClickWindowDoneEvent:
|
|
247
|
+
"""ClickWindow operation finished."""
|
|
248
|
+
|
|
249
|
+
error: str | None = None
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
@dataclass(frozen=True, slots=True)
|
|
253
|
+
class TransferDoneEvent:
|
|
254
|
+
"""Transfer operation finished."""
|
|
255
|
+
|
|
256
|
+
error: str | None = None
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
@dataclass(frozen=True, slots=True)
|
|
260
|
+
class MoveSlotItemDoneEvent:
|
|
261
|
+
"""MoveSlotItem operation finished."""
|
|
262
|
+
|
|
263
|
+
error: str | None = None
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
@dataclass(frozen=True, slots=True)
|
|
267
|
+
class PutAwayDoneEvent:
|
|
268
|
+
"""PutAway operation finished."""
|
|
269
|
+
|
|
270
|
+
error: str | None = None
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
# -- Creative --
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
@dataclass(frozen=True, slots=True)
|
|
277
|
+
class CreativeFlyToDoneEvent:
|
|
278
|
+
"""Creative flyTo operation finished."""
|
|
279
|
+
|
|
280
|
+
error: str | None = None
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
@dataclass(frozen=True, slots=True)
|
|
284
|
+
class CreativeSetSlotDoneEvent:
|
|
285
|
+
"""Creative setInventorySlot operation finished."""
|
|
286
|
+
|
|
287
|
+
error: str | None = None
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
@dataclass(frozen=True, slots=True)
|
|
291
|
+
class CreativeClearSlotDoneEvent:
|
|
292
|
+
"""Creative clearSlot operation finished."""
|
|
293
|
+
|
|
294
|
+
error: str | None = None
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
@dataclass(frozen=True, slots=True)
|
|
298
|
+
class CreativeClearInventoryDoneEvent:
|
|
299
|
+
"""Creative clearInventory operation finished."""
|
|
300
|
+
|
|
301
|
+
error: str | None = None
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
# -- Entity placement --
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
@dataclass(frozen=True, slots=True)
|
|
308
|
+
class PlaceEntityDoneEvent:
|
|
309
|
+
"""PlaceEntity operation finished."""
|
|
310
|
+
|
|
311
|
+
error: str | None = None
|
|
312
|
+
result: Any = None
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Internal bridge utilities."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def extract_js_stack(exc: BaseException) -> str | None:
|
|
5
|
+
"""Try to extract a JS stack trace from a JSPyBridge exception.
|
|
6
|
+
|
|
7
|
+
JSPyBridge exceptions may carry a ``stack`` attribute with the
|
|
8
|
+
JavaScript stack trace string.
|
|
9
|
+
"""
|
|
10
|
+
stack = getattr(exc, "stack", None)
|
|
11
|
+
if isinstance(stack, str):
|
|
12
|
+
return stack
|
|
13
|
+
for chained in (exc.__cause__, exc.__context__):
|
|
14
|
+
if chained is not None:
|
|
15
|
+
stack = getattr(chained, "stack", None)
|
|
16
|
+
if isinstance(stack, str):
|
|
17
|
+
return stack
|
|
18
|
+
return None
|