@vaitosoi/minejs 0.2.1 → 0.3.1

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 (118) hide show
  1. package/assets/minecraft/26.2/packets.json +4741 -0
  2. package/dist/base/bitset.d.ts +9 -0
  3. package/dist/base/bitset.d.ts.map +1 -0
  4. package/dist/base/bitset.js +46 -0
  5. package/dist/base/bitset.js.map +1 -0
  6. package/dist/base/error.d.ts +105 -0
  7. package/dist/base/error.d.ts.map +1 -0
  8. package/dist/base/error.js +194 -0
  9. package/dist/base/error.js.map +1 -0
  10. package/dist/base/event.d.ts +7 -0
  11. package/dist/base/event.d.ts.map +1 -0
  12. package/dist/base/event.js +3 -0
  13. package/dist/base/event.js.map +1 -0
  14. package/dist/base/math.d.ts +25 -0
  15. package/dist/base/math.d.ts.map +1 -0
  16. package/dist/base/math.js +69 -0
  17. package/dist/base/math.js.map +1 -0
  18. package/dist/base/typing.d.ts +9 -0
  19. package/dist/base/typing.d.ts.map +1 -0
  20. package/dist/base/typing.js +3 -0
  21. package/dist/base/typing.js.map +1 -0
  22. package/dist/client/auth.d.ts +39 -0
  23. package/dist/client/auth.d.ts.map +1 -0
  24. package/dist/client/auth.js +307 -0
  25. package/dist/client/auth.js.map +1 -0
  26. package/dist/client/client.d.ts +73 -0
  27. package/dist/client/client.d.ts.map +1 -0
  28. package/dist/client/client.js +136 -0
  29. package/dist/client/client.js.map +1 -0
  30. package/dist/client/static.d.ts +28 -0
  31. package/dist/client/static.d.ts.map +1 -0
  32. package/dist/client/static.js +43 -0
  33. package/dist/client/static.js.map +1 -0
  34. package/dist/client/tcp.d.ts +84 -0
  35. package/dist/client/tcp.d.ts.map +1 -0
  36. package/dist/client/tcp.js +173 -0
  37. package/dist/client/tcp.js.map +1 -0
  38. package/dist/index.d.ts +21 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +12 -12
  41. package/dist/index.js.map +1 -0
  42. package/dist/packet/decoder.d.ts +293 -0
  43. package/dist/packet/decoder.d.ts.map +1 -0
  44. package/dist/packet/decoder.js +668 -0
  45. package/dist/packet/decoder.js.map +1 -0
  46. package/dist/packet/dispatcher.d.ts +46 -0
  47. package/dist/packet/dispatcher.d.ts.map +1 -0
  48. package/dist/packet/dispatcher.js +626 -0
  49. package/dist/packet/dispatcher.js.map +1 -0
  50. package/dist/packet/encoder.d.ts +163 -0
  51. package/dist/packet/encoder.d.ts.map +1 -0
  52. package/dist/packet/encoder.js +441 -0
  53. package/dist/packet/encoder.js.map +1 -0
  54. package/dist/packet/static.d.ts +33 -0
  55. package/dist/packet/static.d.ts.map +1 -0
  56. package/dist/packet/static.js +42 -0
  57. package/dist/packet/static.js.map +1 -0
  58. package/dist/physics/aabb.d.ts +197 -0
  59. package/dist/physics/aabb.d.ts.map +1 -0
  60. package/dist/physics/aabb.js +576 -0
  61. package/dist/physics/aabb.js.map +1 -0
  62. package/dist/physics/direction.d.ts +153 -0
  63. package/dist/physics/direction.d.ts.map +1 -0
  64. package/dist/physics/direction.js +288 -0
  65. package/dist/physics/direction.js.map +1 -0
  66. package/dist/physics/player.d.ts +110 -0
  67. package/dist/physics/player.d.ts.map +1 -0
  68. package/dist/physics/player.js +558 -0
  69. package/dist/physics/player.js.map +1 -0
  70. package/dist/version/codec.d.ts +18 -0
  71. package/dist/version/codec.d.ts.map +1 -0
  72. package/dist/version/codec.js +214 -0
  73. package/dist/version/codec.js.map +1 -0
  74. package/dist/version/registry.d.ts +236 -0
  75. package/dist/version/registry.d.ts.map +1 -0
  76. package/dist/version/registry.js +289 -0
  77. package/dist/version/registry.js.map +1 -0
  78. package/dist/world/block.d.ts +86 -0
  79. package/dist/world/block.d.ts.map +1 -0
  80. package/dist/world/block.js +232 -0
  81. package/dist/world/block.js.map +1 -0
  82. package/dist/world/entity.d.ts +43 -0
  83. package/dist/world/entity.d.ts.map +1 -0
  84. package/dist/world/entity.js +97 -0
  85. package/dist/world/entity.js.map +1 -0
  86. package/dist/world/state.d.ts +151 -0
  87. package/dist/world/state.d.ts.map +1 -0
  88. package/dist/world/state.js +108 -0
  89. package/dist/world/state.js.map +1 -0
  90. package/dist/world/tick.d.ts +19 -0
  91. package/dist/world/tick.d.ts.map +1 -0
  92. package/dist/world/tick.js +49 -0
  93. package/dist/world/tick.js.map +1 -0
  94. package/package.json +7 -2
  95. package/src/base/error.ts +36 -0
  96. package/src/base/typing.ts +9 -1
  97. package/src/client/client.ts +99 -42
  98. package/src/client/tcp.ts +49 -954
  99. package/src/index.ts +12 -12
  100. package/src/{translator → packet}/decoder.ts +3 -3
  101. package/src/packet/dispatcher.ts +785 -0
  102. package/src/{translator → packet}/encoder.ts +20 -9
  103. package/src/{base → physics}/aabb.ts +5 -5
  104. package/src/{base → physics}/player.ts +41 -25
  105. package/src/version/codec.ts +227 -0
  106. package/src/version/registry.ts +333 -0
  107. package/src/{base → world}/block.ts +12 -11
  108. package/src/{base → world}/entity.ts +5 -5
  109. package/src/world/state.ts +232 -0
  110. package/test/adapter/index.ts +14 -0
  111. package/test/client/index.ts +1 -1
  112. package/test/json/index.ts +3 -0
  113. package/src/base/registry.ts +0 -87
  114. /package/assets/minecraft/{blocks.json → 26.2/blocks.json} +0 -0
  115. /package/assets/minecraft/{entities.json → 26.2/entities.json} +0 -0
  116. /package/src/{translator → packet}/static.ts +0 -0
  117. /package/src/{base → physics}/direction.ts +0 -0
  118. /package/src/{base → world}/tick.ts +0 -0
@@ -1,15 +1,26 @@
1
1
  import { EventEmitter } from "node:stream";
2
- import { BlockManager, BlockState } from "../base/block";
3
- import { EntitiesManager } from "../base/entity";
4
- import { MoveDirection, Player } from "../base/player";
5
- import { TickLoop } from "../base/tick";
6
- import { Entity, Message, TCPClient, TCPClientEvents, TCPClientOption, TextComponent } from "./tcp";
7
- import { TypedEmmiter } from "../base/event";
8
- import { BlockRegistry, EntityRegistry } from "../base/registry";
9
- import { BaseVec3, Vec3 } from "../base/direction";
2
+ import { BlockManager, BlockState } from "../world/block";
3
+ import { EntitiesManager } from "../world/entity";
4
+ import { MoveDirection, Player } from "../physics/player";
5
+ import { TickLoop } from "../world/tick";
6
+ import { Message, TCPClient, TCPClientOption } from "./tcp";
7
+ import { TypedEmmiter as TypedEmitter } from "../base/event";
8
+ import { BlockRegistry, EntityRegistry, PacketRegistry, ProtocolVersionMapping } from "../version/registry";
9
+ import { BaseVec3, Vec3 } from "../physics/direction";
10
+ import { TextComponent } from "../base/typing";
11
+ import { EmittedEvent as EmittedEvent, Entity, SharedState } from "../world/state";
12
+ import { Dispatcher } from "../packet/dispatcher";
13
+ import { VersionCodec } from "../version/codec";
14
+ import { AuthClient } from "./auth";
15
+ import { computeUUID } from "../base/math";
16
+
17
+ export type ClientOption = Omit<TCPClientOption, "protocolVersion"> & { version: string }
10
18
 
11
19
  export interface ClientEvents {
12
- ready: [readyClient: Client<true>],
20
+ connect: [],
21
+ destroy: [],
22
+
23
+ ready: [],
13
24
  disconnect: [reason: string],
14
25
  disconnectRaw: [textComponent: TextComponent],
15
26
 
@@ -19,7 +30,7 @@ export interface ClientEvents {
19
30
  unloadChunk: [chunkX: number, chunkZ: number],
20
31
 
21
32
  spawnEntity: [entity: Entity],
22
- updateEntity: [entity: Entity],
33
+ updateEntity: [entityId: number],
23
34
  removeEntity: [entityId: number],
24
35
 
25
36
  // Chat
@@ -33,60 +44,106 @@ export interface ClientEvents {
33
44
  /**
34
45
  * High-level client.
35
46
  */
36
- export class Client<IsTCPReady extends boolean = boolean> extends (EventEmitter as new () => TypedEmmiter<ClientEvents>) {
47
+ export class Client<IsReady extends boolean = boolean> extends (EventEmitter as new () => TypedEmitter<ClientEvents>) {
48
+ private static loadRegistry: boolean = false;
49
+
37
50
  private tickLoop: TickLoop;
38
51
 
39
- private tcp: TCPClient<IsTCPReady>;
40
52
  private blocks: BlockManager;
41
53
  private entities: EntitiesManager;
42
54
  private player: Player;
55
+ private uuid: Buffer = Buffer.alloc(0);
56
+
57
+ private tcp: TCPClient;
58
+ private state: SharedState<IsReady>;
43
59
 
44
- constructor(options: TCPClientOption) {
60
+ constructor(private options: ClientOption) {
45
61
  super();
46
- BlockRegistry.load();
47
- EntityRegistry.load();
48
-
49
- this.tcp = new TCPClient(options);
50
- this.blocks = new BlockManager(this.tcp);
51
- this.entities = new EntitiesManager(this.tcp);
52
- this.player = new Player(this.entities, this.blocks, this.tcp);
53
- this.tickLoop = new TickLoop(() => this.player.tick());
54
- this.forwardEvents();
62
+
63
+ // For managing shared data
64
+ this.state = new SharedState(options, () => this.uuid);
65
+ // For handling packet
66
+ const dispatcher = new Dispatcher(this.state, this.emit.bind(this));
67
+ // For reading packet
68
+ const versionCodec = new VersionCodec(this.state);
69
+ // For throwing packet through internet
70
+ this.tcp = new TCPClient(
71
+ this.state,
72
+ {
73
+ ...options,
74
+ protocolVersion: ProtocolVersionMapping[options.version]!
75
+ }
76
+ );
77
+
78
+ this.tcp.forwardPacket = versionCodec.handlePacket.bind(versionCodec);
79
+ this.tcp.parsePacket = versionCodec.encodePacket.bind(versionCodec);
80
+ this.tcp.sendInitPacket = () => {
81
+ dispatcher.sendHandshake();
82
+ dispatcher.sendLoginStart();
83
+ };
84
+ dispatcher.sendPacket = this.tcp.sendPacket.bind(this.tcp);
85
+ dispatcher.tcpDisconnect = this.tcp.disconnect.bind(this.tcp);
86
+ versionCodec.consumePacket = dispatcher.handlePacket.bind(dispatcher);
87
+
88
+ // For querying data
89
+ this.blocks = new BlockManager(this.state);
90
+ this.entities = new EntitiesManager(this.state);
91
+ // For physics things
92
+ this.player = new Player(
93
+ this.state,
94
+ this.on,
95
+ this.entities,
96
+ this.blocks,
97
+ );
98
+
99
+ // For tick-tock tick-tock
100
+ this.tickLoop = new TickLoop(() => {
101
+ this.state.drainMutation();
102
+ this.state.drainEvent()
103
+ .forEach(event => this.emitEvent(event));
104
+ this.state.drainPacket()
105
+ .forEach((packet) => this.tcp.sendPacket(packet.id, packet.data));
106
+ this.player.tick();
107
+ });
55
108
  }
56
109
 
57
- private forwardEvent(eventName: keyof ClientEvents & keyof TCPClientEvents) {
58
- this.tcp.on(eventName, (...args) => this.emit(eventName, ...args));
110
+ private emitEvent(event: EmittedEvent) {
111
+ this.emit(event.event, ...event.args);
59
112
  }
60
- private forwardEvents() {
61
- this.forwardEvent("disconnect");
62
- this.forwardEvent("disconnectRaw");
63
- this.forwardEvent("loadChunk");
64
- this.forwardEvent("unloadChunk");
65
- this.forwardEvent("playerPosition");
66
- this.forwardEvent("spawnEntity");
67
- this.forwardEvent("updateEntity");
68
- this.forwardEvent("removeEntity");
69
- this.forwardEvent("message");
70
- this.forwardEvent("systemMessage");
71
- this.forwardEvent("systemMessageRaw");
72
- this.forwardEvent("actionBar");
73
- this.forwardEvent("actionBarRaw");
113
+
114
+ private async loadRegistries() {
115
+ if (Client.loadRegistry) return;
116
+ Client.loadRegistry = true;
117
+ await BlockRegistry.load(this.options.version);
118
+ await EntityRegistry.load(this.options.version);
119
+ await PacketRegistry.load(this.options.version);
74
120
  }
75
121
 
76
122
  // Start / stop
123
+
77
124
  /**
78
125
  * Create a connection to the server
79
126
  */
80
- public connect() {
127
+ public async connect() {
128
+ await this.loadRegistries();
129
+
130
+ if (!this.uuid.length) {
131
+ if (this.options.auth) {
132
+ const authClient = new AuthClient(this.options.auth);
133
+ const { uuid } = await authClient.auth();
134
+ this.uuid = Buffer.from(uuid);
135
+ } else
136
+ this.uuid = computeUUID(this.options.playerName);
137
+ }
138
+
81
139
  this.tcp.connect();
82
140
 
83
- this.tcp.once("ready", () => {
84
- this.emit("ready", this as Client<true>);
141
+ this.once("ready", () => {
85
142
  this.player.pruneInitialVal();
86
143
  this.player.setInitialVal();
87
144
  this.tickLoop.start();
88
145
  });
89
- this.tcp.once("disconnect", () => {
146
+ this.once("disconnect", () => {
90
147
  this.tickLoop.stop();
91
148
  this.player.pruneInitialVal();
92
149
  });