Piano - 互动钢琴
与你的朋友一起在互动钢琴模型上演奏并播放 MIDI 文件,非常适合大厅
Bukkit / Spigot
作者 RAFAELESPADA
支持版本 1.17 - 1.19
服务器使用量
1
服务玩家数
0
下载量
4,245
插件详细介绍
这是一款为 Minecraft 添加可演奏钢琴的插件。玩家可以在游戏世界中与钢琴交互,通过 Desktop app connection 使用真实键盘演奏单音或完整旋律,同时也能将钢琴作为装饰物摆放,增强创造力、音乐表现力与沉浸感。
插件简介
- 在游戏中添加可交互、可演奏的钢琴
- 钢琴的工作方式接近现实中的钢琴
- 玩家可以演奏单个音符或完整旋律
- 支持通过 Desktop app connection 使用真实键盘进行演奏
- 可用于展示玩家的音乐才能并创作自己的曲子
- 也可作为装饰性物件,为游戏世界增加真实感与沉浸感
- 总体来说,这是一个有趣且独特的插件,为玩家提供了新的互动方式和自我表达手段
下载
Oraxen
Oraxen 配置说明
- 适用于所有想要配合 Oraxen 使用 Piano 的用户
- 打开 piano 的 Oraxen 配置文件
- 以下为提供的 Oraxen configuration
#Generated template for Oraxen, It only contains models from pianopack
#Remember to refresh config when pianopack got updated
#Note that when you change LEATHER_HORSE_ARMOR to other material functionalities as Colored keys, Pianos, will not work
bench :
displayname
: bench
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/bench
custom_model_data
: 167072
flyingnote :
displayname
: flyingnote
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/flyingnote
custom_model_data
: 167073
icon :
displayname
: icon
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/icons/icon
custom_model_data
: 167074
piano-black-key :
displayname
: piano black key
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/key/piano_black_key
custom_model_data
: 167075
piano-black-key-down :
displayname
: piano black key down
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/key/piano_black_key_down
custom_model_data
: 167076
piano-key :
displayname
: piano key
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/key/piano_key
custom_model_data
: 167077
piano-key-down :
displayname
: piano key down
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/key/piano_key_down
custom_model_data
: 167078
piano-pedal :
displayname
: piano pedal
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/pedal/piano_pedal
custom_model_data
: 167079
piano-pedal-down :
displayname
: piano pedal down
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/pedal/piano_pedal_down
custom_model_data
: 167080
pianist-body :
displayname
: pianist body
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/pianist/pianist_body
custom_model_data
: 167081
pianist-hands :
displayname
: pianist hands
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/pianist/pianist_hands
custom_model_data
: 167082
pianist-head :
displayname
: pianist head
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/pianist/pianist_head
custom_model_data
: 167083
electric-piano :
displayname
: electric piano
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/piano/electric_piano
custom_model_data
: 167084
grand-piano :
displayname
: grand piano
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/piano/grand_piano
custom_model_data
: 167085
grand-piano-close :
displayname
: grand piano close
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/piano/grand_piano_close
custom_model_data
: 167086
up-right-piano-close :
displayname
: up right piano close
material
: LEATHER_HORSE_ARMOR
excludeFromInventory
: true
Pack :
generate_model
: false
model
: item/jw/piano/up_right_piano_close
custom_model_data
: 167087
note_a :
texture
: icons/notes/a
ascent
: 2
height
: 2
code
: 4096
note_aSharp :
texture
: icons/notes/a_sharp
ascent
: 2
height
: 2
code
: 4097
note_b :
texture
: icons/notes/b
ascent
: 2
height
: 2
code
: 4098
note_c :
texture
: icons/notes/c
ascent
: 2
height
: 2
code
: 4099
note_cSharp :
texture
: icons/notes/c_sharp
ascent
: 2
height
: 2
code
: 4100
note_d :
texture
: icons/notes/d
ascent
: 2
height
: 2
code
: 4101
note_dSharp :
texture
: icons/notes/d_sharp
ascent
: 2
height
: 2
code
: 4102
note_e :
texture
: icons/notes/e
ascent
: 2
height
: 2
code
: 4103
note_f :
texture
: icons/notes/f
ascent
: 2
height
: 2
code
: 4104
note_fSharp :
texture
: icons/notes/f_sharp
ascent
: 2
height
: 2
code
: 4105
note_g :
texture
: icons/notes/g
ascent
: 2
height
: 2
code
: 4112
note_gSharp :
texture
: icons/notes/g_sharp
ascent
: 2
height
: 2
code
: 4113注意事项
- 当
pianopack更新后,请记得刷新配置 - 如果你把
LEATHER_HORSE_ARMOR改成其他材质,Colored keys、Pianos 等功能将无法正常工作
开发者 API
JW_Piano 提供了用于操作钢琴行为的编程 API。
- 你可以在自己的插件中使用它
- 但需要将
JW_Piano.jar作为 soft dependency 添加到你的插件中
创建 Piano
public
void creatingPiano
( Player player
)
{
Optional
< Piano
> optional
= PianoApi.
create
( player.
getLocation
(
) ,
"new piano"
)
;
if
( optional.
isEmpty
(
)
)
{
Bukkit.
getConsoleSender
(
) .
sendMessage
(
"Unable to create piano ;<"
)
;
return
;
}
Piano piano
= optional.
get
(
)
;
} 注册新的皮肤
public
void addSkin
( Piano piano
)
{
int customModelId
=
100
;
String name
=
"custom skin"
;
ItemStack itemStack
=
new ItemStack
( Material.
STICK
)
;
PianoSkin customSkin
=
new PianoSkin
( customModelId, name, itemStack
)
;
piano.
getSkinManager
(
) .
register
( customSkin
)
;
piano.
getSkinManager
(
) .
setCurrent
( customSkin
)
;
} 注册新的特效
public
void addNewEffect
( Piano piano
)
{
EffectInvoker customEffect
=
new CustomEffect
(
)
;
piano.
getEffectManager
(
) .
register
( customEffect
)
;
piano.
getEffectManager
(
) .
setCurrent
( customEffect
)
;
}
public
class CustomEffect
implements EffectInvoker
{
@Override
public
String getName
(
)
{
return
"custom"
;
}
@Override
public
void onNote
( PianoKey pianoKey, Location location,
int noteIndex,
int velocity,
Color color
)
{
Bukkit.
getConsoleSender
(
) .
sendMessage
( color
+
"Note: "
+ noteIndex
+
" Volume:"
+ velocity
)
;
location.
getWorld
(
) .
spawnParticle
( Particle.
NOTE , location,
1
)
;
}
@Override
public
void onDestroy
(
)
{
Bukkit.
getConsoleSender
(
) .
sendMessage
( getName
(
)
+
"Destroyed"
)
;
}
@Override
public
void onCreate
(
)
{
Bukkit.
getConsoleSender
(
) .
sendMessage
( getName
(
)
+
"Created"
)
;
}
@Override
public
void refresh
(
)
{
Bukkit.
getConsoleSender
(
) .
sendMessage
( getName
(
)
+
"Refreshed"
)
;
}
}
} 常见问题
Resourcepack
- 如果你在资源包下载上遇到问题,请直接下载资源包
Desktop app 配置
- 配置位置:
config.yml>plugin.websocket.server-ip - 请确保你要使用的端口已经开放
- 如果连接有问题,尝试修改
plugin.websocket.server-ip或plugin.websocket.port - 检查是否需要在服务器托管面板中创建新端口,然后将其填入
plugin.websocket.port - 如果你的服务器使用代理,请将代理 IP 填入
plugin.websocket.server-ip - 如果你的服务器 IP 自带端口,请忽略端口部分
- Wrong:
craftplayer.com:22225 - Correct:
craftplayer.com - 如果你是在本地运行服务器,请将
plugin.websocket.server-ip设置为localhost - 如果以上方法都无效,请将你在 Minecraft 服务器列表中使用的 IP 填入
plugin.websocket.server-ip
配置说明
以下是插件配置文件中的注释说明与默认示例。
#
# <PluginConfig>
#
# piano.models-limit
# Limit of pianos that could be spawn on the server
#
# piano.piano-range
# Piano became interactive when player distance to piano is lower or equal that `piano-range`
#
#
# sounds.namespace
# Name of the folder that sounds are save in resourcepack
#
#
# sounds.sound-category
# Define sound category from minecraft settings that sound will play in.
# Allowed categories [AMBIENT, BLOCKS, HOSTILE, MASTER, MUSIC, NEUTRAL, RECORDS, VOICE, WEATHER]
#
# </PluginConfig>
#
# plugin.resourcepack.url
# If you need to replace default resourcepack with your custom one
# set this to link of you resourcepack
# ! after plugin update make sure your custom resourcepack is compatible !
#
#
# plugin.resourcepack.download-on-join
# Downloads resourcepack when player joins to server
#
#
# plugin.websocket.run
# When false websocket will not run
#
#
# plugin.saving-frequency
# Determinate how frequent data is saved to files, value in minutes
#
#
# plugin.language
# If you want add your language open `languages` folder copy `en.yml` call it as you want \n" +
# "set `language` property to your file name and /reload server
#
#
# plugin.websocket.port
# Set port for websocket
# ! Make sure that port is open
# ! When you have server on hosting, generate new port on the hosting panel
#
#
#
# plugin.websocket.server-ip
# Set own IP for websocket, by default plugin use IP of your server
# ! When you are using proxy set here proxy IP
# ! When you are running plugin locally on your PC, set 'localhost'
# ! When default IP not works try use IP that you are using in minecraft server list
#
#
plugin :
version
: 1.2.3
resourcepack :
url
: https://download.mc-packs.net/pack/5fb90b8870c925ec73f6debc7b7dfb18ec565ebc.zip
download-on-join
: false
websocket :
run
: true
port
: 443
server-ip
: localhost
saving-frequency
: 5
language
: en
piano :
models-limit
: 10
piano-range
: 3.0
skins :
value-1 :
name
:
none
custom-model-id
: 0
material
: AIR
value-2 :
name
: upright piano
custom-model-id
: 167087
material
: LEATHER_HORSE_ARMOR
value-3 :
name
: grand piano
custom-model-id
: 167085
material
: LEATHER_HORSE_ARMOR
value-4 :
name
: electric piano
custom-model-id
: 167084
material
: LEATHER_HORSE_ARMOR
value-5 :
name
: grand piano closed
custom-model-id
: 167086
material
: LEATHER_HORSE_ARMOR
sounds :
value-1 :
name
: Default
namespace
: minecraft
sound-category
: VOICE主要配置项
piano.models-limit- 限制服务器上可生成的钢琴数量
piano.piano-range- 当玩家与钢琴的距离小于或等于
piano-range时,钢琴变为可交互状态 sounds.namespace- 资源包中保存声音文件的文件夹名称
sounds.sound-category- 定义声音使用的 Minecraft 声音分类
- 允许的分类:
[AMBIENT, BLOCKS, HOSTILE, MASTER, MUSIC, NEUTRAL, RECORDS, VOICE, WEATHER] plugin.resourcepack.url- 如果你需要用自己的资源包替换默认资源包,请将其设置为你的资源包链接
- 插件更新后,请确保你的自定义资源包仍然兼容
plugin.resourcepack.download-on-join- 玩家加入服务器时自动下载资源包
plugin.websocket.run- 当为
false时,websocket 不会运行 plugin.saving-frequency- 数据保存到文件的频率,单位为分钟
plugin.language- 如果你想添加自己的语言,打开
languages文件夹,复制en.yml并改成你需要的文件名 - 然后将
language属性设置为你的文件名,并执行/reload server plugin.websocket.port- 设置 websocket 端口
- 请确保端口已开放
- 如果你使用托管服务器,请在托管面板中生成新端口
plugin.websocket.server-ip- 为 websocket 设置 IP,默认情况下插件会使用你的服务器 IP
- 如果使用代理,请填写代理 IP
- 如果在本地电脑上运行插件,请设置为
localhost - 如果默认 IP 无法使用,请尝试填写你在 Minecraft 服务器列表中使用的 IP
命令
commands
:
# /piano
piano :
children
: - lang
- colors
- update
- resourcepack
permissions
: - jw-piano.commands.piano
description
: base plugin commands, /piano opens piano list
usage
: /piano
# /piano lang <language>
lang :
permissions
: - lang
arguments :
- language :
type
: text
description
: select language
options
: - cs
- de
- en
- es
- fr
- it
- ko
- pl
- pt
- ru
- tr
- zh
description
: Changes plugin languages, changes will be applied after server reload. Change be use both be player or console
usage
: /piano lang <language
>
# colors
colors :
children
: - page
description
: command used for internal color picker system, just ignore it
# page
page :
arguments :
- color :
type
: text
# /piano update
update :
permissions
: - update
description
: download plugin latest version, can be trigger both by player or console
usage
: /piano update
# /piano resourcepack
resourcepack :
children
: - download
- link
description
: downloads plugin resourcepack
usage
: /piano resourcepack
# /piano resourcepack download
download :
description
: downloads plugin resourcepack
usage
: /piano resourcepack download
# /piano resourcepack link
link :
description
: sending to player resourcepack link
usage
: /piano resourcepack link可用命令
/piano- 基础插件命令
- 打开钢琴列表
- 权限:
jw-piano.commands.piano
/piano lang <language>- 更改插件语言
- 更改会在服务器重载后生效
- 可由玩家或控制台执行
- 可选语言:
- `cs`- `de`- `en`- `es`- `fr`- `it`- `ko`- `pl`- `pt`- `ru`- `tr`- `zh`/piano colors- 用于内部颜色选择系统
- 可忽略
/piano update- 下载插件最新版本
- 可由玩家或控制台触发
/piano resourcepack- 下载插件资源包
/piano resourcepack download- 下载插件资源包
/piano resourcepack link- 向玩家发送资源包链接
权限
permissions
:
# ======================================== jw-piano =================================
jw-piano.* :
description
: full access
# ======================================== jw-piano.piano ===========================
jw-piano.piano.* :
description
: full access
# ======================================== jw-piano.piano.keyboard ==================
jw-piano.piano.keyboard.* :
description
: full access
jw-piano.piano.keyboard.use :
description
: player click on the piano keys
# ======================================== jw-piano.piano.bench =====================
jw-piano.piano.bench.* :
description
: full access
jw-piano.piano.bench.use :
description
: player sit on the bench
# ======================================== jw-piano.piano.pedal =====================
jw-piano.piano.pedal.* :
description
: full access
jw-piano.piano.pedal.use :
description
: player can push sustain pedal with 'f' press
# ======================================== jw-piano.commands ========================
jw-piano.commands.* :
description
: full access
jw-piano.commands.piano :
description
: player can open piano list gui
jw-piano.commands.lang :
description
: Allow player to change plugin language
jw-piano.commands.update :
description
: players with this permission can update plugin
# ======================================== jw-piano.gui =============================
jw-piano.gui.* :
description
: full access
# ======================================== jw-piano.gui.midi-player =================
jw-piano.gui.midi-player.* :
description
: full access
jw-piano.gui.midi-player.speed :
description
: player can change speed of midi player
jw-piano.gui.midi-player.player-type :
description
: MIDI player type
jw-piano.gui.midi-player.next-song :
description
: player can play next song
jw-piano.gui.midi-player.previous-song :
description
: player can play previous song
jw-piano.gui.midi-player.play-stop :
description
: player can play or stop midi player
jw-piano.gui.midi-player.select-song :
description
: player can add song to MIDI player
jw-piano.gui.midi-player.remove-song :
description
: player can remove song from MIDI player
# ======================================== jw-piano.gui.bench =======================
jw-piano.gui.bench.* :
description
: full access
jw-piano.gui.bench.move :
description
: player can move bench around
# ======================================== jw-piano.gui.bench.settings ==============
jw-piano.gui.bench.settings.* :
description
: full access
jw-piano.gui.bench.settings.active :
description
: player can disable bench
# ======================================== jw-piano.gui.piano =======================
jw-piano.gui.piano.* :
description
: full access
jw-piano.gui.piano.generate-token :
description
: player can generate token for desktop app
jw-piano.gui.piano.volume :
description
: player can teleport to piano
jw-piano.gui.piano.rename :
description
: player can rename piano
jw-piano.gui.piano.teleport :
description
: player can teleport to piano
jw-piano.gui.piano.skin :
description
: player can change piano skin
jw-piano.gui.piano.effect :
description
: player can change piano particle effect
jw-piano.gui.piano.sound :
description
: player can change piano sound
jw-piano.gui.piano.clear :
description
: player can refresh piano model
# ======================================== jw-piano.gui.piano.settings ==============
jw-piano.gui.piano.settings.* :
description
: full access
jw-piano.gui.piano.settings.keyboard-pressing-active :
description
: player can enable/disable clicking at the piano keys
jw-piano.gui.piano.settings.pedal-pressing-active :
description
: player can enable/disable pushing sustain pedal after 'f' press
jw-piano.gui.piano.settings.desktop-app-active :
description
: piano will receiving data from desktop-app
jw-piano.gui.piano.settings.pianist-active :
description
: pianist will appear and start playing
# ======================================== jw-piano.gui.piano-list ==================
jw-piano.gui.piano-list.* :
description
: full access
jw-piano.gui.piano-list.create :
description
: player can create piano
jw-piano.gui.piano-list.remove :
description
: player can remove piano主要权限节点
jw-piano.*- 完整权限
jw-piano.piano.*- 钢琴相关完整权限
jw-piano.piano.keyboard.*- 键盘相关完整权限
jw-piano.piano.keyboard.use- 玩家可点击钢琴琴键
jw-piano.piano.bench.*- 琴凳相关完整权限
jw-piano.piano.bench.use- 玩家可坐在琴凳上
jw-piano.piano.pedal.*- 踏板相关完整权限
jw-piano.piano.pedal.use- 玩家可通过按
f使用延音踏板
jw-piano.commands.*- 命令相关完整权限
jw-piano.commands.piano- 玩家可打开钢琴列表 GUI
jw-piano.commands.lang- 允许玩家更改插件语言
jw-piano.commands.update- 允许玩家更新插件
jw-piano.gui.*- GUI 相关完整权限
MIDI Player 权限
jw-piano.gui.midi-player.*- 完整权限
jw-piano.gui.midi-player.speed- 玩家可调整 MIDI 播放速度
jw-piano.gui.midi-player.player-type- MIDI player 类型
jw-piano.gui.midi-player.next-song- 玩家可播放下一首
jw-piano.gui.midi-player.previous-song- 玩家可播放上一首
jw-piano.gui.midi-player.play-stop- 玩家可播放或停止 MIDI player
jw-piano.gui.midi-player.select-song- 玩家可向 MIDI player 添加歌曲
jw-piano.gui.midi-player.remove-song- 玩家可从 MIDI player 移除歌曲
Bench 权限
jw-piano.gui.bench.*- 完整权限
jw-piano.gui.bench.move- 玩家可移动琴凳
jw-piano.gui.bench.settings.*- 完整权限
jw-piano.gui.bench.settings.active- 玩家可禁用琴凳
Piano GUI 权限
jw-piano.gui.piano.*- 完整权限
jw-piano.gui.piano.generate-token- 玩家可为 desktop app 生成 token
jw-piano.gui.piano.volume- 玩家可传送到钢琴
jw-piano.gui.piano.rename- 玩家可重命名钢琴
jw-piano.gui.piano.teleport- 玩家可传送到钢琴
jw-piano.gui.piano.skin- 玩家可更改钢琴皮肤
jw-piano.gui.piano.effect- 玩家可更改钢琴粒子特效
jw-piano.gui.piano.sound- 玩家可更改钢琴声音
jw-piano.gui.piano.clear- 玩家可刷新钢琴模型
Piano Settings 权限
jw-piano.gui.piano.settings.*- 完整权限
jw-piano.gui.piano.settings.keyboard-pressing-active- 玩家可启用/禁用点击琴键
jw-piano.gui.piano.settings.pedal-pressing-active- 玩家可启用/禁用按
f触发延音踏板 jw-piano.gui.piano.settings.desktop-app-active- 钢琴可接收来自 desktop-app 的数据
jw-piano.gui.piano.settings.pianist-active- 演奏者模型会出现并开始演奏
Piano List 权限
jw-piano.gui.piano-list.*- 完整权限
jw-piano.gui.piano-list.create- 玩家可创建钢琴
jw-piano.gui.piano-list.remove- 玩家可移除钢琴
备注
- 本文仅根据提供的原始文档进行整理与翻译
- 插件名、命令、权限节点、占位符、版本号、URL 与代码内容均尽量保持原样
- 若你使用自定义资源包或第三方方案,请在插件更新后自行确认兼容性
这是该插件配置文件的中文说明,已按功能整理,便于在插件目录页面中快速查看和使用。
配置说明
`plugin.language`
- 如果你想添加自己的语言:
- 打开
languages文件夹 - 复制
en.yml - 将副本重命名为你想要的文件名
- 把
language属性设置为该文件名 - 然后执行
/reload或重载服务器
`plugin.saving-frequency`
- 用于设置数据保存到文件的频率
- 数值单位为“分钟”
`piano-config.models-limit`
- 限制服务器上可生成的钢琴数量
`plugin.auto-download-resourcepack`
- 玩家加入服务器时,是否自动下载材质包
钢琴服务器设置
`piano-server.enable`
- 启用内置钢琴服务器
- 启用后,玩家可以通过桌面应用加入
`piano-server.customer-server-ip`
- 当该值为空时,插件会自动检测你的服务器 IP
常见问题
- 如果你的服务器 IP 带有端口,请忽略端口
- 错误:
craftplayer.com:22225 - 正确:
craftplayer.com - 如果你是在本地运行服务器,请将该值设置为
localhost - 如果你的服务器使用代理,请在这里填写代理 IP
- 如果以上方法都无效,请填写玩家实际连接服务器时使用的 IP
`piano-server.port`
- 请确保该端口已在你的主机或托管服务中开放
默认配置示例
plugin:
version: 1.1.3
language: en
saving-frequency: 5
auto-download-resourcepack: true
piano-config:
models-limit: 10
minDistanceToPiano: 3.0
maxDistanceFromPiano: 3.0
maxDistanceFromKeys: 2.0
piano-server:
enable: true
customer-server-ip: ''
port: 2022配置项一览
`plugin`
version: 当前配置版本language: 使用的语言文件名saving-frequency: 数据保存频率,单位为分钟auto-download-resourcepack: 是否自动下载材质包
`piano-config`
models-limit: 可生成的钢琴数量上限minDistanceToPiano: 与钢琴的最小距离maxDistanceFromPiano: 与钢琴的最大距离maxDistanceFromKeys: 与琴键的最大距离
`piano-server`
enable: 是否启用钢琴服务器customer-server-ip: 自定义服务器 IPport: 钢琴服务器使用的端口
注意事项
- 修改
language后,需要重载服务器配置才能生效 customer-server-ip留空时会自动检测 IP- 若连接异常,优先检查 IP 填写格式和端口开放情况
测试支持版本
版本分布
基本信息
插件名称
Piano
作者
RAFAELESPADA
平台
Bukkit / Spigot
支持版本
1.17 - 1.19
点赞数
9
Modrinth 下载
1,827
最近版本
BUILD-02
1