feat:上传mcguide-开发指南部份

This commit is contained in:
Othniel su
2024-12-23 10:57:59 +08:00
parent 7292166c88
commit 0dc59fa4f0
3297 changed files with 63375 additions and 0 deletions

View File

@@ -0,0 +1,504 @@
# SpigotMaster文档
## `public class SpigotMaster extends JavaPlugin`
SpigotMaster
* **Package:**
com.neteasemc.spigotmaster;
* **Example:**
```
import com.neteasemc.spigotmaster.SpigotMaster;
SpigotMaster spigotMaster = (SpigotMaster)Bukkit.getPluginManager().getPlugin("SpigotMaster");
```
## `public Material getCustomItemMaterial(String customItemIdentifier)`
该接口已废弃
* **Deprecated**
## `public String getCustomItemIdentifier(ItemStack spigotItemStack)`
获取自定义物品名的identifier
* **Parameters:**
`spigotItemStack` — itemStack
* **Returns:**
String 自定义物品identifier
## `public ItemStack setCustomItemIdentifier(ItemStack spigotItemStack, String customIdentifier)`
设置自定义物品的identifier
* **Parameters:**
* `spigotItemStack` — itemStack
* `customIdentifier` — 自定义物品identifier
* **Returns:**
设置后的itemStack
## `public ItemStack setItemLayer(ItemStack itemStack, int layer, String texture)`
设置物品的叠加贴图。与ModSDK的SetItemLayer用法一致
* **Parameters:**
* `itemStack` — itemStack
* `layer` — 贴图的层级。可以为-2-1123。负数层级显示在物品下方正数的层级显示在物品上方。层级大的显示在层级小的上方。
* `texture` — 贴图的名字对应资源包item_texture.json中的key。
* **Returns:**
设置后的itemStack没设置成功会返回itemStack参数本身
## `public String getItemLayer(ItemStack itemStack, int layer)`
获取物品的叠加贴图。与ModSDK的GetItemLayer用法一致
* **Parameters:**
* `itemStack` — itemStack
* `layer` — 贴图的层级。可以为-2-1123。
* **Returns:**
贴图的名字不存在返回null
## `public ItemStack removeItemLayer(ItemStack itemStack, int layer)`
移除物品的叠加贴图。与ModSDK的RemoveItemLayer用法一致
* **Parameters:**
* `itemStack` — itemStack
* `layer` — 贴图的层级。可以为-2-1123。
* **Returns:**
移除后的itemStack没移除会返回itemStack参数本身
## `public void listenForSpigotMasterEvent(SpigotMasterEvent event, PyRpcHandler handler)`
监听spigot master的自定义事件
* **Parameters:**
* `event` — SpigotMasterEvent的枚举值
* `handler` — 回调函数
## `public void listenForEvent(String namespace, String system, String event, PyRpcHandler handler)`
注册客户端事件
* **Parameters:**
* `namespace` — 来源客户端系统的namespace
* `system` — 来源客户端系统的systemName
* `event` — 事件名
* `handler` — 回调函数
## `public void notifyToClient(Player player, String namespace, String system, String event, Map<String, Object> data)`
给指定玩家发送服务端事件
* **Parameters:**
* `player` — 接收事件的玩家
* `namespace` — 在客户端系统使用ListenForEvent监听的namespace
* `system` — 在客户端系统使用ListenForEvent监听的systemName
* `event` — 事件名
* `data` — 事件参数。注意,要使用-2指代本地玩家的entityId。
## `public void notifyToMultiClients(List<Player> players, String namespace, String system, String event, Map<String, Object> data)`
给多个玩家发送服务端事件。 因为-2的entityId对于不同玩家来说都指代本机玩家而非某个固定的实体所以不要在多播中发送这种信息。
* **Parameters:**
* `players` — 接收事件的玩家列表
* `namespace` — 在客户端系统使用ListenForEvent监听的namespace
* `system` — 在客户端系统使用ListenForEvent监听的systemName
* `event` — 事件名
* `data` — 事件参数
## `public void notifyToClientsNearby(@Nullable Player except, Location loc, double dist, String namespace, String system, String event, Map<String, Object> data)`
给某个位置附近一定半径内的所有玩家发送服务端事件。 因为-2的entityId对于不同玩家来说都指代本机玩家而非某个固定的实体所以不要在多播中发送这种信息。
* **Parameters:**
* `except` — 发送事件时排除掉这个玩家可以为null表示不排除
* `loc` — 圆心位置
* `dist` — 半径
* `namespace` — 在客户端系统使用ListenForEvent监听的namespace
* `system` — 在客户端系统使用ListenForEvent监听的systemName
* `event` — 事件名
* `data` — 事件参数
## `public void broadcastToAllClient(@Nullable Player except, World world, String namespace, String system, String event, Map<String, Object> data)`
给某个world内的所有玩家发送服务端事件。 因为-2的entityId对于不同玩家来说都指代本机玩家而非某个固定的实体所以不要在多播中发送这种信息。
* **Parameters:**
* `except` — 发送事件时排除掉这个玩家可以为null表示不排除
* `world` — 所在world
* `namespace` — 在客户端系统使用ListenForEvent监听的namespace
* `system` — 在客户端系统使用ListenForEvent监听的systemName
* `event` — 事件名
* `data` — 事件参数
## `public void broadcastToAllClient(@Nullable Player except, String namespace, String system, String event, Map<String, Object> data)`
给服务器内的所有玩家发送服务端事件。 因为-2的entityId对于不同玩家来说都指代本机玩家而非某个固定的实体所以不要在多播中发送这种信息。
* **Parameters:**
* `except` — 发送事件时排除掉这个玩家可以为null表示不排除
* `namespace` — 在客户端系统使用ListenForEvent监听的namespace
* `system` — 在客户端系统使用ListenForEvent监听的systemName
* `event` — 事件名
* `data` — 事件参数
## `public void enableCustomShopEntry(boolean useCustomShop)`
开启商城插件入口
* **Parameters:**
`useCustomShop` — 是否使用自定义商城入口为false时则使用官方商城入口
* **Since:**
1.2.3
## `public void openShop(Player player)`
打开指定玩家商城界面 注意:该接口需要使用商城插件,并调用接口开启商城插件
* **Parameters:**
`player` — 玩家
* **Since:**
1.2.3
## `public void closeShop(Player player)`
关闭指定玩家商城界面 注意:该接口需要使用商城插件,并调用接口开启商城插件
* **Parameters:**
`player` — 玩家
* **Since:**
1.2.3
## `public void showHintOne(Player player, @Nullable String text)`
推送冒泡提示给指定玩家 注意:该接口需要使用商城插件,并调用接口开启商城插件
* **Parameters:**
* `player` — 指定玩家
* `text` — 提示字符串
* **Since:**
1.2.3
## `public void showHintTwo(Player player, String head, @Nullable String tail)`
推送 拼接后的头尾两串冒泡提示 给指定玩家 注意:该接口需要使用商城插件,并调用接口开启商城插件
* **Parameters:**
* `player` — 指定玩家
* `head` — 提示字符串首
* `tail` — 提示字符串尾
* **Since:**
1.2.3
## `public void getPlayerOrderList(Player player, FutureCallback<Map<String, Object>> callback)`
获取玩家未发货订单列表
* **Parameters:**
* `player` — 指定玩家
* `callback` — FutureCallBack回调函数
* **Since:**
1.2.3
* **Example:**
回调参数为Map<String,Object>, 目前值为
| Key | Value | 解释 |
| -----------------| ---------------| ---- |
| player | Player | 玩家 |
| json_result | 订单json数据 | 玩家 |
## `public void finPlayerOrder(Player player, List<String> orderList, FutureCallback<Map<String, Object>> callback)`
通知网易服务器完成指定玩家订单
* **Parameters:**
* `player` — 指定玩家
* `orderList` — 订单id列表
* `callback` — FutureCallBack回调函数
* **Since:**
1.2.3
* **Example:**
回调参数为Map<String,Object>, 目前值为
| Key | Value | 解释 |
| -----------------| ---------------| ---- |
| player | Player | 玩家 |
| json_result | 订单json数据 | 玩家 |
## `public void enableClientChatExtension(Player player)`
开启官方聊天扩展功能,需要在CLIENT_LOAD_ADDON_FINISH事件中调用
* **Parameters:**
`player` — 指定玩家
* **Since:**
1.2.4
* **Example:**
```
SpigotMaster.listenForSpigotMasterEvent(CLIENT_LOAD_ADDON_FINISH, new PyRpcHandler() {
@Override
public void onEvent(Player player, Map<String, Object> data) {
SpigotMaster.enableClientChatExtension(player);
}
});
```
## `public void disableClientChatExtension(Player player)`
关闭官方聊天扩展功能,需要在CLIENT_LOAD_ADDON_FINISH事件中调用
* **Parameters:**
`player` — 指定玩家
* **Since:**
1.2.4
* **Example:**
```
SpigotMaster.listenForSpigotMasterEvent(CLIENT_LOAD_ADDON_FINISH, new PyRpcHandler() {
@Override
public void onEvent(Player player, Map<String, Object> data) {
SpigotMaster.disableClientChatExtension(player);
}
});
```
## `public String getCustomEntityIdentifier(Entity entity)`
获取自定义实体的identifier
* **Parameters:**
`entity` — 需要设置的entity实例
* **Returns:**
String 自定义物品identifier
* **Since:**
1.3.1
## `public Entity spawnEntity(Player player, Location loc, EntityType entityType, String neteaseClientIdentifier)`
生成自定义生物
* **Parameters:**
* `player` — 玩家
* `loc` — 生成位置
* `entityType` — 原版生物类型
* `neteaseClientIdentifier` — 自定义生物identifier
* **Returns:**
Entity 自定义生物实例
* **Since:**
1.3.1
## `public void spawnEntity(Player player, Entity entity, String neteaseClientIdentifier)`
转换成自定义生物
* **Parameters:**
* `player` — 玩家
* `entity` — 生物实例
* `neteaseClientIdentifier` — 自定义生物identifier
* **Returns:**
Entity 自定义生物实例
* **Since:**
1.3.1
## `public Entity spawnEntity(World world, Location loc, EntityType entityType, String neteaseClientIdentifier)`
生成自定义生物
* **Parameters:**
* `world` — world实例
* `loc` — 生成位置
* `entityType` — 原版生物类型
* `neteaseClientIdentifier` — 自定义生物identifier
* **Returns:**
Entity 自定义生物实例
* **Since:**
1.3.8
## `public void spawnEntity(World player, Entity entity, String neteaseClientIdentifier)`
转换成自定义生物
* **Parameters:**
* `world` — 玩家
* `entity` — 生物实例
* `neteaseClientIdentifier` — 自定义生物identifier
* **Returns:**
Entity 自定义生物实例
* **Since:**
1.3.8
## `public Entity setCustomEntityIdentifier(Entity entity, String customIdentifier)`
设置自定义实体的identifier
* **Parameters:**
* `entity` — 需要设置的entity实例
* `customIdentifier` — 自定义实体identifier
* **Returns:**
设置后的entity
* **Since:**
1.3.1
## `public boolean sendForm(Player player, Form form)`
发送formui给指定玩家
* **Parameters:**
* `player` — 指定玩家
* `form` — 表单类实例
* **Since:**
1.3.2
## `public boolean sendForm(Player player, FormBuilder<?, ?, ?> formBuilder)`
发送formui给指定玩家
* **Parameters:**
* `player` — 指定玩家
* `formBuilder` — 表单builder类实例
* **Since:**
1.3.2
## `public void setEntitySize(Entity entity, float height, float width)`
设置自定义实体的碰撞盒大小
* **Parameters:**
* `entity` — 需要设置的entity实例
* `height` — 实体高度
* `width` — 实体宽度
* **Since:**
1.3.3
## `public void setMythicMobIdentifier(Entity entity, String mobType)`
设置mythicmob的identifier
如: SkeletonKing 会自动转为客户端的 mythicmob:skeletonKing
SkeletalMinion 会自动转为客户端的 mythicmob:skeletalMinion
即为mythicmob:xxx xxx为首字母小写的mythicmob的identifier
* **Parameters:**
* `entity` — 需要设置的entity实例
* `mobType` — mythicmob的identifier
* **Since:**
1.3.3
## `public void setEntityScale(Entity entity, float scale)`
设置自定义实体的scale
注意由于Java并不提供修改Scale接口因此该接口仅为客户端暂时生效接口
玩家重登掉线重连后续进入的玩家都只能看到默认的scale不能看到通过接口修改后的scale
请留意该接口的使用时机!
* **Parameters:**
* `entity` — 需要设置的entity实例
* `scale` — scale
* **Since:**
1.3.5
## `public void sendBedrockPacket(int packetId, byte[] packetData)`
给所有玩家广播基岩版原生数据包,
网易基岩版客户端数据包协议库基于国际版MC进行修改不符合当前BE客户端的协议版本(v503 MCBE版本1.18.30)的包体数据会导致客户端异常,包括但不限于断开连接,闪退以及游戏无响应
目前建议版本为v503
* **Parameters:**
* `packetId` — 数据包id
* `packetData` — 数据包数据
* **Since:**
1.3.7
* **Example:**
```
//修改客户端时间
org.cloudburstmc.protocol.bedrock.packet.TimePacket timePacket = new TimePacket();
ByteBuf setTimeByteBuf = ByteBufAllocator.DEFAULT.heapBuffer(128);
timePacket.setTime(20000);
setTimeByteBuf = ByteBufAllocator.DEFAULT.heapBuffer(128);
org.cloudburstmc.protocol.bedrock.codec.v503.Bedrock_v503.CODEC.tryEncode(Bedrock_v503.CODEC.createHelper(), setTimeByteBuf, timePacket);
int setTimeDataLen = setTimeByteBuf.readableBytes();
byte[] setTimeData = new byte[setTimeDataLen];
setTimeByteBuf.readBytes(setTimeData, 0, setTimeDataLen);
setTimeByteBuf.release();
spigotMaster.sendBedrockPacket(setTimePacketId, setTimeData);
```
## `public void sendBedrockPacketToPlayer(int packetId, byte[] packetData, Player player)`
给指定玩家广播基岩版原生数据包
网易基岩版客户端数据包协议库基于国际版MC进行修改不符合当前BE客户端的协议版本(v503 MCBE版本1.18.30)的包体数据会导致客户端异常,包括但不限于断开连接,闪退以及游戏无响应
目前建议版本为v503
* **Parameters:**
* `packetId` — 数据包id
* `packetData` — 数据包数据数组
* `player` — 发送的玩家
* **Since:**
1.3.7
## `public void setEntityGravity(int entityId, float gravity)`
设置实体重力系数
需要注意设置实体的时机如果通过监听entityspawnevent修改则无法生效因为此时客户端还未同步到相关实体
* **Parameters:**
* `entityId` — 需要设置的entityId
* `gravity` — 重力系数如果为0则应用世界重力
* **Since:**
1.3.9
## `public String getItemIconPath(ItemStack item)`
获取物品贴图路径(只能获取到原生物品的贴图)
注: 由于大部分方块由四方向(side/front/back/top)共四张贴图组成因此该接口只会默认返回side方向贴图,而formui只能支持单独一张贴图因此对于方块而言单纯使用该接口获取贴图后显示效果并不佳建议自行绘制贴图
* **Parameters:**
`item` — 需要获取的ItemStack
* **Since:**
1.3.10