@@ -4,6 +4,7 @@ import tracker from '@nxg-org/mineflayer-tracker'
4
4
import { loader as autoJumpPlugin } from '@nxg-org/mineflayer-auto-jump'
5
5
import { subscribeKey } from 'valtio/utils'
6
6
import { getThreeJsRendererMethods } from 'renderer/viewer/three/threeJsMethods'
7
+ import { Team } from 'mineflayer'
7
8
import { options , watchValue } from './optionsStorage'
8
9
import { gameAdditionalState , miscUiState } from './globalState'
9
10
import { EntityStatus } from './mineflayer/entityStatus'
@@ -237,4 +238,67 @@ customEvents.on('gameLoaded', () => {
237
238
}
238
239
239
240
} )
241
+
242
+ bot . on ( 'teamUpdated' , ( team : Team ) => {
243
+ for ( const entity of Object . values ( bot . entities ) ) {
244
+ if ( entity . type === 'player' && entity . username && team . members . includes ( entity . username ) || entity . uuid && team . members . includes ( entity . uuid ) ) {
245
+ bot . emit ( 'entityUpdate' , entity )
246
+ }
247
+ }
248
+ } )
249
+
250
+ const updateEntityNameTags = ( team : Team ) => {
251
+ for ( const entity of Object . values ( bot . entities ) ) {
252
+ const entityTeam = entity . type === 'player' && entity . username ? bot . teamMap [ entity . username ] : entity . uuid ? bot . teamMap [ entity . uuid ] : undefined
253
+ if ( ( entityTeam ?. nameTagVisibility === 'hideForOwnTeam' && entityTeam . name === team . name )
254
+ || ( entityTeam ?. nameTagVisibility === 'hideForOtherTeams' && entityTeam . name !== team . name ) ) {
255
+ bot . emit ( 'entityUpdate' , entity )
256
+ }
257
+ }
258
+ }
259
+
260
+ const doEntitiesNeedUpdating = ( team : Team ) => {
261
+ return team . nameTagVisibility === 'never'
262
+ || ( team . nameTagVisibility === 'hideForOtherTeams' && appViewer . playerState . reactive . team ?. team !== team . team )
263
+ || ( team . nameTagVisibility === 'hideForOwnTeam' && appViewer . playerState . reactive . team ?. team === team . team )
264
+ }
265
+
266
+ bot . on ( 'teamMemberAdded' , ( team : Team , members : string [ ] ) => {
267
+ if ( members . includes ( bot . username ) && appViewer . playerState . reactive . team ?. team !== team . team ) {
268
+ appViewer . playerState . reactive . team = team
269
+ // Player was added to a team, need to check if any entities need updating
270
+ updateEntityNameTags ( team )
271
+ } else if ( doEntitiesNeedUpdating ( team ) ) {
272
+ // Need to update all entities that were added
273
+ for ( const entity of Object . values ( bot . entities ) ) {
274
+ if ( entity . type === 'player' && entity . username && members . includes ( entity . username ) || entity . uuid && members . includes ( entity . uuid ) ) {
275
+ bot . emit ( 'entityUpdate' , entity )
276
+ }
277
+ }
278
+ }
279
+ } )
280
+
281
+ bot . on ( 'teamMemberRemoved' , ( team : Team , members : string [ ] ) => {
282
+ if ( members . includes ( bot . username ) && appViewer . playerState . reactive . team ?. team === team . team ) {
283
+ appViewer . playerState . reactive . team = undefined
284
+ // Player was removed from a team, need to check if any entities need updating
285
+ updateEntityNameTags ( team )
286
+ } else if ( doEntitiesNeedUpdating ( team ) ) {
287
+ // Need to update all entities that were removed
288
+ for ( const entity of Object . values ( bot . entities ) ) {
289
+ if ( entity . type === 'player' && entity . username && members . includes ( entity . username ) || entity . uuid && members . includes ( entity . uuid ) ) {
290
+ bot . emit ( 'entityUpdate' , entity )
291
+ }
292
+ }
293
+ }
294
+ } )
295
+
296
+ bot . on ( 'teamRemoved' , ( team : Team ) => {
297
+ if ( appViewer . playerState . reactive . team ?. team === team . team ) {
298
+ appViewer . playerState . reactive . team = undefined
299
+ // Player's team was removed, need to update all entities that are in a team
300
+ updateEntityNameTags ( team )
301
+ }
302
+ } )
303
+
240
304
} )
0 commit comments