BossShopPro
ServerPinging | 服务器Ping
字数统计: 1678字
注:Ping的定义过于复杂/难懂,所以选择性的使用了英文而不是中文
Ping: 互联网包探索器
Serverpinging允许你在BossShopPro文本中显示玩家数量和一个特定服务器的描述, 例如一个物品的描述lore或者消息
在BossShopPro 中,有些地方与 BossShop不同.
注意:
在新版Minecraft版本中,ServerPinging不一定适合你。这个问题已被察觉并会被尽快修复。
我建议你使用下方方法(暂时)来使用PlaceholderAPI来替代:
· 如果你在使用BC端: https://www.spigotmc.org/wiki/placeholderapi-placeholders/#bungeecord-placeholders
· 通用"Pinger": https://www.spigotmc.org/wiki/placeholderapi-placeholders/#pinger-placeholders
另外一种“修复”这个问题的方法可能是添加占位符(例如 "%player%") 来匹配商店物品,使占位符更新。
否认声明: 我并没有自己测试这些PAPI占位符。如果你有任何相关的问题可以发消息给我。
Guide|使用方法
你可以在config.yml发现你的一个服务器的通用列表:
- ServerPinging:
- Enabled: false
- Delay: 45
- FixConnector: false
- Timeout: 4000
- WaitTimeAfterFail: 4500
- List:
- - becto.net:25565
- Enabled: true
“帧”定义(20帧 = 1秒)。默认为45帧 = 2.25秒,但是你当然也可以增加或减少这个数字。
Code (Text):
Delay: 45
因为Minecraft有很多不同的版本,所有有些服务器需要使用不同的方法来ping。这里有很多不同类型的连接器不断测试正确项来实现支持所有的版本。当ServerPinging第一次被运行时,它会测试所有可用的连接器类型直到发现正确的一个。然后ID就会被保存到 "BossShopPro/data"文件中。在将来ServerPinging会被直接使用保存的ID来快速加载。
当ServerPing在50次尝试中依然无法找到任何可用的服务器是,它会尝试其他的连接器因为可能会有些变动(例如服务器更新)会需要一个新的连接器。为了防止 BossShopPro 在成功找到正确项时继续尝试新的连接器,你可以设置"FixConnector: true".
- FixConnector: false
- Timeout: 4000
- WaitTimeAfterFail: 4500
最后,这里有一个ping服务器对象列表。这里有两种你可以添加到列表中的服务器:
3. 任何服务器: '<服务器名>:<ip>:<端口>' (你可以使用任何的服务器名)
4. 通过BC来连接服务器: '<BC配置中的服务器名>' (使用BungeeCord时无法使用motd占位符)
任何服务器列表例子:
- List:
- - becto:mc.becto.net:25565
- - snapcraft:mc.snapcraft.net:25565
- List:
- - survival
- - creative
你可以在任何地方使用下方变量来显示玩家数量或者服务器motd:
· %players_<服务器名>% - 这个会替换成服务器中拥有的玩家数
· %motd_<服务器名>% - 这会替换成服务器的motd
提示: 你可以将不同服务器叠加在一起来显示服务器总玩家数(需要v1.0.1!)例子::
· Becto 服务器玩家数: %players_becto%
· Snapcraft服务器玩家数: %players_snapcraft%
· 两个服务器的总玩家数: %players_becto:snapcraft%
Example|例子
config.yml:
- ServerPinging:
- Enabled: true
- Delay: 45
- List:
- - hypixel:mc.hypixel.net:25565
- - mineplex:us.mineplex.com:25565
- - cubecraft:play.cubecraftgames.net:25565
- - hivemc:eu.hivemc.com:25565
- - badlion:na.badlion.net:25565
- ShopName: ping
- DisplayName: 'Ping菜单'
- InventorySize: 45
- signs:
- text: '[]'
- NeedPermissionToCreateSign: true
- shop:
- '1':
- RewardType: NOTHING
- PriceType: NOTHING
- MenuItem:
- - name:&6Hypixel
- - amount:1
- - type:FEATHER
- - lore:&f%players_hypixel% #Hypixel服务器玩家数
- Message: ''
- ExtraPermission: ''
- InventoryLocation: 1
- '10':
- RewardType: NOTHING
- PriceType: NOTHING
- MenuItem:
- - name:&6Mineplex
- - amount:1
- - type:FEATHER
- - lore:&f%players_mineplex% #Mineplex总玩家数
- Message: ''
- ExtraPermission: ''
- InventoryLocation: 10
- '19':
- RewardType: NOTHING
- PriceType: NOTHING
- MenuItem:
- - name:&6Cubecraft
- - amount:1
- - type:FEATHER
- - lore:&f%players_cubecraft% #Cubecraft总玩家数
- Message: ''
- ExtraPermission: ''
- InventoryLocation: 19
- '21':
- RewardType: NOTHING
- PriceType: NOTHING
- MenuItem:
- - name:&6Total
- - amount:1
- - type:FEATHER
- - lore:&f%players_hypixel:minexplex:cubecraft:hivemc:badlion% #多个服务器玩家总和
- Message: ''
- ExtraPermission: ''
- InventoryLocation: 21
- '28':
- RewardType: NOTHING
- PriceType: NOTHING
- MenuItem:
- - name:&6HiveMC
- - amount:1
- - type:FEATHER
- - lore:&f%players_hivemc%
- Message: ''
- ExtraPermission: ''
- InventoryLocation: 28
- '37':
- RewardType: NOTHING
- PriceType: NOTHING
- MenuItem:
- - name:&6Badlion
- - amount:1
- - type:FEATHER
- - lore:&f%players_badlion%
- Message: ''
- ExtraPermission: ''
- InventoryLocation: 37
输出:
这可能不支持老服务器(1.7或以下)来ping很新的服务器(1.9或以上),支持与其他服务器相同版本的服务器永远是可行的。
BungeeCord 全球聊天&玩家聊天输入
BossShopPro API 允许让其他插件通过玩家聊天来获得玩家输入(input)。这就是 PlayerShops addon 的方法,可以让玩家输入他们商店的名字和物品的价格。如果你正在使用 BungeeCord(BC),你可能会想要通过所有的玩家聊天消息,例如使用BC来连接不同服务器的聊天信息,实现全服聊天。为了可以区分普通聊天信息和特殊玩家输入,BossShopPro 使用了插件聊天频道并了解玩家的消息是否属于普通聊天。
下方是一个BC插件的例子,可以检测玩家的输入(input):
- import java.io.ByteArrayInputStream;
- import java.io.DataInputStream;
- import java.io.IOException;
- import net.md_5.bungee.api.event.PluginMessageEvent;
- import net.md_5.bungee.api.plugin.Listener;
- import net.md_5.bungee.event.EventHandler;
- public class BungeeCordPluginListener implements Listener {
- @EventHandler
- public void onPluginMessage(PluginMessageEvent e) {
- if(e.getTag().equalsIgnoreCase("BungeeCord")){
- DataInputStream dis = new DataInputStream(new ByteArrayInputStream(e.getData()));
- try{
- String subchannel = dis.readUTF();
- if (subchannel.equalsIgnoreCase("BossShopPro")){
- String type = dis.readUTF();
- if (type.equalsIgnoreCase("PlayerInput")){
- String playerUUID = dis.readUTF();
- String inputType = dis.readUTF();
- if(inputType.equalsIgnoreCase("start")){
- String endTimeMillis = dis.readUTF();
- System.out.println("Received plugin message by BossShopPro of type "PlayerInput Start" with player " + playerUUID+". Knowing that incoming message should not be sent to the global chat until either a stop message is received or time '" + endTimeMillis + "' is reached.");
- }else if(inputType.equalsIgnoreCase("end")){
- System.out.println("Received plugin message by BossShopPro of type "PlayerInput End" with player " + playerUUID+". Knowing that messages of that player no longer belong to BossShopPro input and can be sent to the chat.");
- }
- }
- }
- }
- catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- }
- }