McShare

  • 首页
  • 随笔
  • 资源
    • MCPE
    • PocketMine
    • Nukkit
    • Multicraft
  • 教程
    • MCPE
    • MU
    • NK
    • PM
  • 更多
    • 关于我们
    • 留言板
    • 免责声明
    • 捐赠
MCShare
一个优质好用的Minecraft综合信息站
  1. 首页
  2. 教程
  3. PM
  4. 正文

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

2017年10月3日 22968点热度 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方法

标签: 暂无
最后更新:2017年10月3日

Himpq

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

点赞
< 上一篇
下一篇 >

文章评论

  • YYT Number two

    怎么打包?

    2019年1月27日
    回复
  • Himpq[W]

    为毛我更新都没反应

    2018年2月17日
    回复
  • YYT

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

    2017年10月8日
    回复
    • Himpq[W]

      @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

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

    2017年10月3日
    回复
  • WHY

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

    2017年10月3日
    回复
  • 9527

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

    2017年10月3日
    回复
  • Himpq[W]

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

    2017年10月3日
    回复
  • Himpq[W]

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

    2017年10月3日
    回复
  • Himpq[W]

    边写边看w3:evil: :evil:

    2017年10月3日
    回复
  • Himpq[W]

    :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
    回复 Himpq[W] 取消回复

    YYT

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

    最新 热点 随机
    最新 热点 随机
    【我和MC那点事】做MC站长的快乐,你想象不到~ McShare祝大家新年快乐! 我的世界: 地球 Minecraft Earth 即将停服 Minecraft Festival 受新冠肺炎疫情影响将延期举行 Minecraft Festival来啦!史诗级的Minecraft盛会预告! MineBBS团队祝大家新年快乐! Minecraft以千亿播放量占据2019年Youtube最多播放量游戏排行榜首 Discuz! 回归!全新产品Discuz! Q 是涅槃重生还是回光返照?
    【单机存档】FFA - PvP场 【原创NK插件】MoneySignCommand消费金钱指令木牌 【原创】自义定创造物品栏——OCreativeItem 【PM插件】WEconomyAPI 【PM插件】AuthMePE登陆插件——简洁实用的登陆插件 【原创PM插件】MoneySignCommand付费指令木牌 【汉化】新版禁用物品BanItem插件 【PM】KLockCid设备绑定
    标签聚合
    PM插件 原创资源 PocketMine内核 我的世界手机版 MCPE开服内核 PM内核 PocketMine插件 MCPE MCPE地图 橘子
    书签
    • MCNav导航网
    • MineBBS综合社区
    • MineWiki百科计划

    COPYRIGHT © 2024 MCShare 保留一切解释权

    Theme Kratos Made By Seaton Jiang

    粤ICP备2021017089号