changes for player type, install return instance, fixes
This commit is contained in:
parent
98d3967dfe
commit
2885c3c270
3 changed files with 25 additions and 19 deletions
|
@ -1,16 +1,24 @@
|
|||
import uuid
|
||||
import datetime
|
||||
|
||||
from enum import Enum
|
||||
from typing import Dict, List
|
||||
|
||||
from aiocraft.mc.definitions import Item
|
||||
from aiocraft.mc.definitions import Player
|
||||
from aiocraft.mc.proto import PacketPlayerInfo
|
||||
|
||||
from ..scaffold import Scaffold
|
||||
from ..events import ConnectedEvent
|
||||
|
||||
class ActionType(Enum): # TODO move this in aiocraft
|
||||
ADD_PLAYER = 0
|
||||
UPDATE_GAMEMODE = 1
|
||||
UPDATE_LATENCY = 2
|
||||
UPDATE_DISPLAY_NAME = 3
|
||||
REMOVE_PLAYER = 4
|
||||
|
||||
class GameTablist(Scaffold):
|
||||
tablist : Dict[uuid.UUID, dict]
|
||||
tablist : Dict[uuid.UUID, Player]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
@ -25,18 +33,18 @@ class GameTablist(Scaffold):
|
|||
async def tablist_update(packet:PacketPlayerInfo):
|
||||
for record in packet.data:
|
||||
uid = record['UUID']
|
||||
if packet.action != 0 and uid not in self.tablist:
|
||||
if packet.action != ActionType.ADD_PLAYER.value and uid not in self.tablist:
|
||||
continue # TODO this happens kinda often but doesn't seem to be an issue?
|
||||
if packet.action == 0:
|
||||
self.tablist[uid] = record
|
||||
self.tablist[uid]['joinTime'] = datetime.datetime.now()
|
||||
elif packet.action == 1:
|
||||
self.tablist[uid]['gamemode'] = record['gamemode']
|
||||
elif packet.action == 2:
|
||||
self.tablist[uid]['ping'] = record['ping']
|
||||
elif packet.action == 3:
|
||||
self.tablist[uid]['displayName'] = record['displayName']
|
||||
elif packet.action == 4:
|
||||
if packet.action == ActionType.ADD_PLAYER.value:
|
||||
record['joinTime'] = datetime.datetime.now()
|
||||
self.tablist[uid] = Player(**record) # TODO have it be a Player type inside packet
|
||||
elif packet.action == ActionType.UPDATE_GAMEMODE.value:
|
||||
self.tablist[uid].gamemode = record['gamemode']
|
||||
elif packet.action == ActionType.UPDATE_LATENCY.value:
|
||||
self.tablist[uid].ping = record['ping']
|
||||
elif packet.action == ActionType.UPDATE_DISPLAY_NAME.value:
|
||||
self.tablist[uid].displayName = record['displayName']
|
||||
elif packet.action == ActionType.REMOVE_PLAYER.value:
|
||||
self.tablist.pop(uid, None)
|
||||
|
||||
|
||||
|
|
|
@ -49,5 +49,4 @@ class CallbacksHolder:
|
|||
|
||||
async def join_callbacks(self):
|
||||
await asyncio.gather(*list(self._tasks.values()))
|
||||
self._tasks.clear()
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ class Treepuncher(
|
|||
await super().stop()
|
||||
self.logger.info("Treepuncher stopped")
|
||||
|
||||
def install(self, module: Type[Addon]) -> Type[Addon]:
|
||||
def install(self, module: Type[Addon]) -> Addon:
|
||||
m = module(self)
|
||||
if isinstance(m, Provider):
|
||||
self.notifier.add_provider(m)
|
||||
|
@ -167,7 +167,7 @@ class Treepuncher(
|
|||
self.modules.append(m)
|
||||
else:
|
||||
raise ValueError("Given type is not an addon")
|
||||
return module
|
||||
return m
|
||||
|
||||
async def _work(self):
|
||||
try:
|
||||
|
@ -189,13 +189,12 @@ class Treepuncher(
|
|||
await self.join()
|
||||
except OSError as e:
|
||||
self.logger.error("Connection error : %s", str(e))
|
||||
except AuthException as e:
|
||||
self.logger.error("Auth exception : [%s|%d] %s (%s)", e.endpoint, e.code, e.data, e.kwargs)
|
||||
break
|
||||
|
||||
if self._processing: # don't sleep if Treepuncher is stopping
|
||||
await asyncio.sleep(self.cfg.getfloat('reconnect_delay', fallback=5))
|
||||
|
||||
except AuthException as e:
|
||||
self.logger.error("Auth exception : [%s|%d] %s (%s)", e.endpoint, e.code, e.data, e.kwargs)
|
||||
except Exception:
|
||||
self.logger.exception("Unhandled exception")
|
||||
|
||||
|
|
Loading…
Reference in a new issue