107 lines
3.3 KiB
Python
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")
|