• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~
GameDemo —— 小游戏开发模板

原创 插件 GameDemo —— 小游戏开发模板 v2.5.0

版权类型
原创
API版本
1.0.11
版权链接
#
语言支持
中文(简体)
前置组件
ScoreboardPlugin

GameDemo​

小游戏的模板框架 修改模板来快捷的开发小游戏
开源 https://github.com/SoBadFish/GameDemo

本模板已实现:

游戏房间GUI
插件自动更新(需要若水的AutoUpdate插件且在GitHub有仓库)
团队对战
单人对战(多个玩家互相对战)
自定义计分板
自定义语言提示
自定义资源刷新箱
游戏地图还原
自定义浮空字
自定义排行榜
队伍感染
游戏中途加入
无限对战(房间不会结束)
游戏内置商店
倒地与扶起功能
自定义队伍BUFF
自定义队伍装备
自定义击退
死亡尸体
自定义房间拓展(可以编写插件 增加DLC)
...


开发文档


房间管理

1.简介

本插件的房间管理通过 RoomManager 获取房间对象 (GameRoom) 以及房间的配置文件 (GameRoomConfig)来操作房间的启动。

2.房间功能配置

房间的配置在 GameRoomConfig.java 文件设置,对应的配置文件为 room.yml 。本模板已预设好如下参数

参数变量类型介绍
nameString游戏房间的名称 同时对应着插件文件夹中生成的文件
worldInfoWorldInfoConfig游戏房间的地图配置,内部封装游戏地图,等待坐标等变量
开发者可以根据游戏的地图需求增加其他的
timeint游戏总时长 超过这个时间游戏结束
waitTimeint当玩家数量满足最低人数限制的时候,就开始读取等待时长
达到等待时长后,游戏进入开始状态
reSpawnTimeint玩家的复活时长,如果这个时间为 0 则玩家死亡后
迅速回到队伍的出生点
maxWaitTimeint当房间人数到达上限后,等待时长就会相应的修改为maxWaitTime
minPlayerSizeint游戏房间开始的最低玩家数量
maxPlayerSizeint游戏房间的人数上限
isAutomaticNextRoundboolean当游戏结束或队伍失败后,当这个选项开启,则自动匹配其他游戏房间
teamCfgMap <String,TeamConfig>存放队伍的名称与队伍的数据信息 队伍的配置信息默认为
名称,队伍颜色字符,队伍方块颜色,队伍皮革套的颜色。
开发者可以根据游戏的需求对这个参数进行调整
对应的配置文件为 team.yml
teamConfigsList <TeamInfoConfig>存放队伍的配置,包含队伍的数据信息(TeamConfig),队伍的出生点
如果队伍中存在物品刷新点,可以在这个配置文件添加
hasWatchboolean游戏房间是否允许玩家进入观战
callbackYint防止玩家在游戏的等待大厅跳下虚空 当玩家低于等待大厅的y轴
一定的值后将玩家传送回等待大厅的出生点
floatTextInfoConfigsList <FloatTextInfoConfig>浮空字的配置文件 包含名称,显示的坐标,显示的文本
banCommandList <String>在游戏内禁用的指令
quitCommandList <String>玩家退出游戏房间执行的指令
victoryCommandList <String>玩家在游戏中获得胜利执行的指令
defeatCommandList <String>玩家在游戏中失败执行的指令
gameStartMessageList <String>游戏开始时,给玩家发送的一些话
如果你的游戏房间有其他的参数需求,例如空岛战争需要资源箱,就可以在地图的配置中 WorldInfoConfig 写入资源箱的位置并在WorldInfoConfig中的getInstance() 中写入读取坐标点的逻辑 WorldInfoConfig 封装了 positionToString 方法和 getPositionByString 方法,可以将坐标点转换为字符串。

如果是房间内需要增加一些参数需要在 getGameRoomConfigByFile 中写入读取文件中配置的逻辑,加载到GameRoomConfig 中,并在**save()**中写入保存

2.游戏房间逻辑

只有房间被启动后 GameRoom才会被实例化 比如玩家加入房间,此时,GameRoomConfig 被激活,RoomManager就可以获取到相应的GameRoom房间对象

启动后房间的初始状态为 WAIT 大部分都是写好的逻辑 构造方法可以不需要修改

可以在房间中增加一些变量来实现游戏的功能玩法

房间的主要逻辑为:

onUpdate() 房间更新
当房间被实例化后 这个方法每秒就会触发一次 触发类在RoomLoadRunnable 线程类中。

onWait: 房间状态为等待玩家加入
onStart: 房间状态为正在进行
onEnd: 房间状态为结束
onClose: 房间状态为正在进行回收关闭,短时间无法启动

玩家管理
  1. 简介
在游戏中的玩家使用 PlayerInfo进行控制 PlayerInfo可传入EntityHuman实体 以及Player对象

onUpdate方法为时刻监听玩家状态的方法每秒更新一次,玩家复活,计分板在这个方法中进行实现


Tips与RsNPC变量

Tips:
%gd-level% 玩家等级
%gd-exp% 玩家当前经验
%gd-nextExp% 玩家下一级经验
%gd-line% 玩家经验条
%gd-per% 玩家经验进度百分比
%gd-击杀% 玩家总击杀数
%gd-死亡% 玩家总死亡数
%gd-胜利% 玩家总胜利数
%gd-失败% 玩家总失败数
%gd-助攻% 玩家总助攻数
%gd-游戏次数% 玩家总游戏次数

RsNpc
%房间名-player% 游戏房间人数
%模式名-player% 游戏模式人数
%all-player% 全部房间游戏人数
%房间名-maxplayer% 游戏房间最大人数
%房间名-status% 游戏房间状态


拓展插件对接

在拓展插件的onEnable方法中 执行

GameRoomDlcManager.register("拓展名称",DLC类的实体类);

DLC实体类要实现接口,重写方法

IGameRoomDlc


重写结束条件

如果要重写小游戏房间的结束条件 继承接口

IGameEndJudge
//重写
boolean judgeGameEnd(GameRoom room);


当实现的方法 返回值为true 则立即结束此游戏
此时就需要你在这个方法中设置好胜利的队伍与失败的队伍,总得有胜利者不是吗 你可以调用GameRoom中的方法。

/**
*@param teamInfo 胜利的队伍
* @param more 是否为多队伍模式
*/
public void gameEnd(TeamInfo teamInfo,boolean more);


不过这个方法有局限性 你可以参考GameRoom中的demoGameEnd 来开发

重写计分板

实现接口中的方法可以重写玩家在游戏中的计分板信息

IGamePlayerScoreBoard
作者
SoBadFish
下载
1,325
查看
2,702
首次发布
最后更新

评分

5.00 星 2 次评分

SoBadFish 的其他资源

最新更新

  1. 2024/08/26 更新

    修复附魔相关问题 修复退出不返回主城问题 优化游戏结束条件
  2. 2023/8/26 更新

    修复排行榜的BUG 优化插件代码
  3. 2023-4-16 更新

    修复倒地扶起的相关BUG

最新评价

爱生活,爱咸鱼
插件太强啦!各种PVP都能做!
后退
顶部 底部