插件编写教材
By Himpq
1.基本的主类文件
主类文件是神马?是你插件的中心。
主类文件继承了PluginBase并且监听
<下面是一个基本的Main文件>
<?php namespace xxx; class xxx extends \pocketmine\plugin\PluginBase implements \pocketmine\event\Listener{}?>
这小小的一点就包含了继承(Listener是为了做后面的铺垫)
此外,以下是插件的两个局:
public function onEnable(){插件开启时
$this->getServer()->getPluginManager()->registerEvents($this,$this);
}
public function onDisable(){插件关闭时
$this->getLogger()->info("卸载完成");
}
加这一段进去后他将会在关你时提示 “卸载完成”
然而onEnable里运行的代码必须存在于你的插件内,那是注册事件。也可以把它写到onLoad内:
public function onLoad(){
$this->getServer()->getPluginManager()->registerEvents($this,$this);
}
以上建议者:Orange
2.玩家进服事件
下面讲解如何让玩家进入服务器时窗口弹出提示
public function onJoin(\pocketmine\event\player\PlayerJoinEvent $e){
$e->getPlayer()->sendTitle("这是大标题","这是小标题"."\n用\n可以换行哦");
}
上面的理解方法:从核心里获取到进服事件,然后用事件获取到玩家,并且发送大标题和小标题。
我们再来试一个--玩家死亡事件
public function onDeath(\pocketmine\event\player\PlayerDeathEvent $e){
$e->getPlayer()->sendMessage("你死亡了"."\n这是第二段,用\n可以换行");
}
上面的理解方法:从核心获取到死亡事件,然后用事件来获取到玩家,并且发送两段文字
那么如何提示玩家的名称呢?
就用$e->getPlayer()->getName();他是获取到玩家后再获取玩家的名称。
$e->getPlayer()->sendMessage($e->getPlayer()->getName()."死了");这样是正确的。这样会弹出“xxx死了”,但是只有死亡的玩家能看见。那么如何公告呢?
$this->getServer()->broadcastMessage("xxx玩家死了");
使用公告就是这么简单
今天的教程到这里了,感谢收看,谢谢。
作者qq:2042432192
---
插件编写教材下
欢迎回到本教材的下册
本教材只教学主类文件的写法!!!
1.新的语句:if{}elseif{}else{}
刚学习php的应该对此很陌生,但开发者就并不陌生了。
下面我们来看看这个语句
public function onJoin(\pocketmine\event\player\PlayerJoinEvent $e){
$name = $e->getPlayer()->getName();
if($name == "Steve"){
$e->getPlayer()->kick("不允许Steve进入服务器");
}elseif($name == "steve"){
$e->getPlayer()->kick("不允许steve进入服务器");
}else{
$e->getPlayer()->sendMessage("欢迎回到服务器");
}
}
Join事件我们上章已经学到。这个小插件有什么用呢?相信大家已经知道,不允许Steve和steve进入服务器。这里我们两次判断了Steve这个名称。第一次判断的是大写的Steve,第二次判断的事小写的steve。第三次判断是这两种情况都不是,就弹出欢呼回到服务器。
然而这个elseif并不是只能用一次的。可以使用多次,甚至无数次(只要你想)但else只能用一次(在一个连续的语句中)。
下面我们来学习switch语句:
$date = Date("Y");
switch($date){
case 2017: xxx
break;
case 2018: xxx
break;
defalut: xxx
break;
}
上面获取了现在的时间“年”,并且用switch筛选出2017和2018的年份,并且在这个年份执行xxx处的代码。注意:执行完毕后必须有break,否则他会继续执行下去。defalut起到了不在2017、2018年执行的代码。
学习了这个,我们接下来学习玩家使用指令
public function onCommand(\pocketmine\command\CommandSender $sender,\pocketmine\command\Command $command,$label,array $args){
switch($command->getName()){
case "xxx":
$sender->sendMessage("xxx");
sleep(1)
$sender->kill();
break;
}
}
上面写了筛选出指令“/xxx“,并且让使用指令者发送“xxx”的信息。过了1秒后,让使用者死亡。
sleep(time); sendMessage(message);
sleep(时间(单位:秒)); sendMessage("信息");
下面我们教学设置进服提示(不再提示“xxx玩家加入游戏“)
public function onJoin(\pocketmine\event\player\PlayerJoinEvent $e){
$e->setJoinMessage("xxx");
}
上面我们将进服提示设置为“xxx“。以后不再会提示黄字“xxx玩家加入游戏“。
下面我们将学习数组。
$a = array("名称" => "王某某","电话" => 122893929);
echo "我叫".$a["名称"]."\n";
echo "我的电话是".$a["电话"];
下面会显示:
我叫王某某
我的电话是122893929
创建数组用array();使用“$数组变量["数据键名"]”来获取。
今天的教程就到这里。
感谢观看
作者QQ:2042432192
如果你有什么意见,请在留言板提出,我们会尽快修改。
插件团队: WPluginTeam
---
插件教材2下
1.计时器
许多的rpg插件都会用到计时器来刷怪。那么一个简单的计时器怎么写呢?
<?php namespace xxx; use pocketmine\scheduler\PluginTask; class xxx extends PluginTask{ public function __construct(main $main){ parent::__construct($main);} public function onRun($c){ 运行的代码}}
这是另一个php文件,在主类文件的onLoad或者onEnable写入
$this->getServer()->getScheduler()->scheduleRepeatingTask(new 文件名($this), 每几刻运行一次);
20刻 = 1秒
2.配置与运用
大家都知道,每个插件(几乎)都会有配置文件。那么配置文件怎么创建呢?又怎么获取里面的数据呢?下面给大家做一个演示。
public function onEnable(){
@mkdir($this->getDataFolder());
$this->c = new \pocketmine\utils\Config($this->getDatFolder()."文件夹名称.yml",Config::YAML,["这是数组" => "","玩家进服提示" => "hello"]);
}
public function onJoin(\pocketmine\event\player\PlayerJoinEvent $e){
$e->getPlayer()->sendMessage($this->c->get("玩家进服提示"));
}
@mkdir($this->getDataFolder()); = 通过插件名创造一个和插件名一样的文件夹
上面通过创建数组,再通过我们学过的(但有点不一样)获取键名来弹出提示。
$this->变量->get("这是键名");
在配置(数组)中写入数字或者true/false,不需要双引号:
$a = array("数字" => 1233445,"开启" => true);
通过这节课的学习,你明白了什么?
在下方给我们提出你的笔记吧!我们会筛选好的笔记,放到这里展示。
或者提出意见,我们也会修改。
团队: WPluginTeam
作者QQ: 2042432192
---
告诉大家一个不幸的信息:WEconomyAPI,WRand等几个W系列插件的最新源码已经丢失。
最后更新日期:2017.10.20
感谢阅读
--
插件教材3
1.运用与学习function(方法)
构建方法:
class myClass{
private $year,$name;
public function __construct($year,$name){ //简单的面向对象
$this->year = $year; //一个人的年龄
$this->name = $name; //一个人的名字
}
public function say(){
echo "我叫$this->name,我今年$this->year岁";
}
}
$wangJi = new myClass(10,"王X");
$wangJi->say();
上面我们用面向对象构建函数(__construct() )创建了一个人,王X
我们通过王X来获取到他说话的方法(say() )
输出:我叫王X,我今年10岁
class | object | function
人 | 王X | say()
2.继承
继承在class声明后加extends 继承的类名
class father{
public function say(){
return "Hello";
}
}
class son extends father{
public function say(){
parent::say();
}
}
$son = new son;
$son->say();
上面儿子继承了父亲,儿子的说话方法使用了父亲的说话方法
就比如pm核心里的计时器,你的计时器parent就使用了父亲PluginTask的__construct方法
文章评论
怎么打包?
为毛我更新都没反应
其实你可以分页的,编辑器里有分页符
@YYT YYT给我出来
@Himpq[W] 咋了
已经新增代码高亮功能了哦
https://www.mcshare.net/codehighlight/
无法通过核审
@缠稚
无法通过核审
@nujj
大...大...大...大佬
好教程收了
emm 辛苦啦
这个教材可以回家喂徒弟
发没发现点友情链接里的随机一个都会进入那个网站
边写边看w3:evil: