Difficult-Rocket/Difficult_Rocket/mod/api/__init__.py
2023-12-03 16:54:07 +08:00

107 lines
3.3 KiB
Python

# -------------------------------
# Difficult Rocket
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
# system function
import warnings
from typing import Tuple, List, Optional, TypeVar, TYPE_CHECKING
# from DR
if TYPE_CHECKING:
from Difficult_Rocket.main import Game
from Difficult_Rocket.client import ClientWindow
else:
Game = TypeVar("Game")
ClientWindow = TypeVar("ClientWindow")
from Difficult_Rocket import DR_status
from Difficult_Rocket.api.types import Options, Version
RequireVersion = Tuple[Version, Version]
# 第一个是最低兼容版本,第二个是最高兼容版本
# 例如: ("1.0.0", "1.1.0") 表示从1.0.0版本开始兼容,到1.1.0版本结束兼容
ForceRequire = bool
class ModInfo(Options):
"""
加载mod时候的参数
"""
"""基本信息"""
mod_id: str # mod id
name: str # mod 名称
version: Version # mod 版本
"""作者、描述"""
writer: str # 作者
link: str = "" # 作者链接
description: str = "" # 描述 (务必简洁明了)
info: str = "" # 其他信息 (可以很多很多)
"""版本相关信息"""
DR_version: RequireVersion = (
DR_status.DR_version,
DR_status.DR_version,
) # DR SDK 兼容版本
DR_Api_version: RequireVersion = (
DR_status.API_version,
DR_status.API_version,
) # DR Api版本
Mod_Require_version: List[
Tuple[str, ForceRequire, RequireVersion]
] = [] # mod 依赖版本
"""mod 状态"""
is_enable: bool = True # 是否启用
is_loaded: bool = False # 是否加载
"""mod 配置"""
config: Options = Options() # mod 配置存储
old_mod: Optional["ModInfo"] = None # 旧的mod实例
def __init__(self, **kwargs):
if not self.DR_version[0] <= DR_status.DR_version <= self.DR_version[1]:
warnings.warn(
f"mod {self.mod_id} version {self.version} is not support by DR {DR_status.DR_version}\n"
f"DR {self.DR_version} is required"
)
if not self.DR_Api_version[0] <= DR_status.API_version <= self.DR_Api_version[1]:
warnings.warn(
f"mod {self.mod_id} version {self.version} is not support by DR {DR_status.API_version}\n"
f"DR {self.DR_Api_version} is required"
)
super().__init__(**kwargs)
def on_load(self, game: Game, old_self: Optional["ModInfo"] = None) -> bool:
"""加载时调用"""
return True
def on_client_start(self, game: Game, client: ClientWindow):
"""客户端启动时调用"""
print(f"Mod {self.mod_id} client start")
def on_client_stop(self, game: Game, client: ClientWindow, source: str = "window"):
"""客户端停止时调用"""
print(f"Mod {self.mod_id} client stop")
def on_server_start(self, game: Game):
"""服务器启动时调用"""
print(f"Mod {self.mod_id} server start")
def on_server_stop(self, game: Game):
"""服务器停止时调用"""
print(f"Mod {self.mod_id} server stop")
def on_unload(self, game: Game):
"""卸载时调用"""
print(f"Mod {self.mod_id} unloaded")