同步部分内容,切换到学校设备来

This commit is contained in:
2026-03-02 11:58:40 +08:00
parent 3ee686c712
commit 00c445f7ad
5 changed files with 39 additions and 17 deletions

View File

@@ -109,6 +109,7 @@ class NoteDataConvert2CommandPlugin(LibraryPluginBase):
# 暂时没有适配动画内容和替换顺序
# 金羿正在处理这个,不需要改
# 但是返回值和接口内容不会变,直接用即可
#
@staticmethod
def generate_progressbar(
max_score: int,
@@ -320,21 +321,13 @@ class NoteDataConvert2CommandPlugin(LibraryPluginBase):
for i in range(orignal_style_string.count("_")):
npg_stl = (
orignal_style_string.replace("_", progressbar_style.progress_played, i + 1)
.replace("_", progressbar_style.progress_toplay)
.replace("%%N", music_name)
orignal_style_string
.replace(
"%%s",
'"},{"score":{"name":"*","objective":"'
+ scoreboard_name
+ '"}},{"text":"',
)
.replace(
"%%%",
'"},{"score":{"name":"*","objective":"'
+ sbn_pc
+ 'PercT"}},{"text":"%',
)
.replace(
"%%t",
'"},{"score":{"name":"*","objective":"{-}TMinT"}},{"text":":"},'
@@ -342,6 +335,14 @@ class NoteDataConvert2CommandPlugin(LibraryPluginBase):
"{-}", sbn_pc
),
)
.replace("%%N", music_name)
.replace(
"%%%",
'"},{"score":{"name":"*","objective":"'
+ sbn_pc
+ 'PercT"}},{"text":"%',
).replace("_", progressbar_style.progress_played, i + 1)
.replace("_", progressbar_style.progress_toplay)
)
result.append(
MineCommand(

View File

@@ -64,7 +64,7 @@ class ProgressBarStyle:
| `%^t` | 曲目总时长 |
| `%%%` | 当前进度比率 |
| `_` | 用以表示进度条占位|
| `%*%` | 指定*的动画内容 |a
| `%*%` | 指定*的动画内容 |
Parameters
------------

View File

@@ -105,6 +105,7 @@
- 感谢 ****\<QQ237667809\> 反馈在新版本的指令格式下计分板播放器的附加包无法播放的问题
- 感谢 **梦幻duang**\<QQ13753593\> 为我们提供 Java 1.12.2 版本命令格式参考
- 感谢 [_Open Note Block Studio_](https://github.com/OpenNBS/NoteBlockStudio) 项目的开发为我们提供持续的追赶动力
- 感谢 **启航与凡凡**\<QQ2777856500\> 找到 **· v2** 版本音符序列文件解码的错误并指出修正方式
> 感谢广大群友为此库提供的测试和建议等
> 若您对我们有所贡献但您的名字没有出现在此列表中请联系我们

View File

@@ -32,7 +32,7 @@ Email [TriM-Organization@hotmail.com](mailto:TriM-Organization@hotmail.com)
这就意味着承载插件的模块本质上可以是多个 Python `.py` 文件组成的带有 `__init__.py` 的一个文件夹
或者是一个简单的 `.py` 文件
我们有这种共识大家已经知道了模块的相关知识后面的教程中你已经理解 **· v3** 插件和 Python 模块的区别
我们有这种共识大家已经知道了模块的相关知识后面的教程中你将会理解 **· v3** 插件是什么东西以及它 Python 模块的关联和区别
## 开始动笔
@@ -41,7 +41,7 @@ Email [TriM-Organization@hotmail.com](mailto:TriM-Organization@hotmail.com)
如果插件需要配置项则需进行此节
`Musicreater.plugins` 导入 `PluginConfig` 并从此继承一个类且须用 dataclass 装饰器来注册之这就成为了一个插件的配置类
_对于这个 `dataclass` 数据类的使用方式可以阅读 dataclass 的官方文档或者直接在实例后面打个 `.`直接看看能干哈子_
_对于这个 `dataclass` 数据类的使用方式可以阅读 dataclass 的官方文档或者直接在实例后面打个 `.`让代码提示告诉你它能干什么_
```python
from Musicreater.plugins import PluginConfig

View File

@@ -292,7 +292,7 @@ class MusicSequence:
if bytes_buffer_in[:4] in (b"MSQ!", b"MSQ$"):
note_format_v3 = bytes_buffer_in[0] == b"MSQ$"
note_format_v3 = bytes_buffer_in[:4] == b"MSQ$"
group_1 = int.from_bytes(bytes_buffer_in[4:6], "big", signed=False)
group_2 = int.from_bytes(bytes_buffer_in[6:8], "big", signed=False)
@@ -446,6 +446,16 @@ class MusicSequence:
_t6_buffer = _t2_buffer = 0
_channel_inst_chart: Dict[str, Dict[str, int]] = {}
"""
乐器对应通道的表
{
乐器名: {
"CNT": 当前通道的音符数量,
"INDEX": 当前乐器在通道中的索引
}
}
也就是说,一个通道可以对应多个乐器(多个乐器可能分配到同一个通道)
"""
channels_: MineNoteChannelType = enumerated_stuffcopy_dictionary(staff=[])
for i in range(total_note_count):
@@ -503,17 +513,27 @@ class MusicSequence:
"所截取的音符码:", bytes_buffer_in[stt_index:end_index]
) from _err
# 按照乐器分配通道
if _read_note.sound_name in _channel_inst_chart:
# 如果本身已经有这个乐器了,那就直接加一个计数就可以了
_channel_inst_chart[_read_note.sound_name]["CNT"] += 1
else:
# 如果没有这个乐器
if len(_channel_inst_chart) >= 16:
# 已经超过了 16 个乐器,当前通道数量是装不下的
# 那就找一个音符数量最少的通道,把这个通道引用为
# 当前这个乐器的通道
_channel_inst_chart[_read_note.sound_name] = min(
_channel_inst_chart.values(), key=lambda x: x["CNT"]
) # 此处是指针式内存引用
_channel_inst_chart[_read_note.sound_name] = {
"CNT": 1,
"INDEX": len(_channel_inst_chart),
}
_channel_inst_chart[_read_note.sound_name]["CNT"] += 1
else:
# 没有超过 16 个乐器,那就加!
_channel_inst_chart[_read_note.sound_name] = {
"CNT": 1,
"INDEX": len(_channel_inst_chart),
}
# 把音符添加到对应的通道里边
channels_[_channel_inst_chart[_read_note.sound_name]["INDEX"]].append(
_read_note
)