McShare

  • 首页
  • 随笔
  • 资源
    • MCPE
    • PocketMine
    • Nukkit
    • Multicraft
  • 教程
    • MCPE
    • MU
    • NK
    • PM
  • 更多
    • 关于我们
    • 留言板
    • 免责声明
    • 捐赠
McShare
一个我的世界教程分享网站
  1. 首页
  2. 教程
  3. PM
  4. 正文

【PM教程】基本插件编写教材

2017年10月3日 11290点热度 8人点赞 18条评论

 


插件编写教材

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方法

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2017年10月3日

Himpq

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

  • YYT Number two

    怎么打包?

    2019年1月27日
    回复
  • Himpq

    为毛我更新都没反应

    2018年2月17日
    回复
  • YYT

    其实你可以分页的,编辑器里有分页符

    2017年10月8日
    回复
    • Himpq

      @YYT YYT给我出来

      2018年2月17日
      回复
      • YYT

        @Himpq[W] 咋了

        2018年2月17日
        回复
  • YYT

    已经新增代码高亮功能了哦
    https://www.mcshare.net/codehighlight/

    2017年10月8日
    回复
  • 缠稚

    无法通过核审

    2017年10月4日
    回复
    • nujj

      @缠稚 无法通过核审

      2017年10月4日
      回复
      • 缠稚

        @nujj :evil: :evil: :evil:

        2017年10月4日
        回复
  • nujj

    :evil: :evil: :evil:

    2017年10月3日
    回复
  • nujj

    大...大...大...大佬

    2017年10月3日
    回复
  • 9527 9527

    好教程收了 :evil: :evil: :evil:

    2017年10月3日
    回复
  • WHY

    emm :evil: :evil: :evil: :evil: 辛苦啦 :evil: :evil: :evil: :evil:

    2017年10月3日
    回复
  • 9527 9527

    :evil: :evil: :evil: :evil:

    2017年10月3日
    回复
  • Himpq

    这个教材可以回家喂徒弟 :biggrin:

    2017年10月3日
    回复
  • Himpq

    发没发现点友情链接里的随机一个都会进入那个网站

    2017年10月3日
    回复
  • Himpq

    边写边看w3:evil: :evil:

    2017年10月3日
    回复
  • Himpq

    :evil: :evil:

    2017年10月3日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    YYT

    这个人很懒,什么都没留下

    最新 热点 随机
    最新 热点 随机
    【我和MC那点事】做MC站长的快乐,你想象不到~ McShare祝大家新年快乐! 我的世界: 地球 Minecraft Earth 即将停服 Minecraft Festival 受新冠肺炎疫情影响将延期举行 Minecraft Festival来啦!史诗级的Minecraft盛会预告! MineBBS团队祝大家新年快乐!
    【Witherbuster】机甲 【MCPE】我的世界手机版V1.0.5快照版本 【地图】服务器居民区地图—无限 【PM插件】WorldEdit-创世神-便捷的编辑你的世界 【教程】PocketMine手机版开服教程 【原创】Oblockshop一个方块商店
    书签
    • MCNav导航网
    • MineBBS综合社区
    • MineWiki百科计划

    COPYRIGHT © 2021 mcshare.net. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    粤ICP备2021017089号

    粤公网安备 44030702003722号