├── plugin.yml ├── README.md └── src └── WeEnd └── ride └── Main.php /plugin.yml: -------------------------------------------------------------------------------- 1 | name: WERidePig 2 | main: WeEnd\ride\Main 3 | version: 1.3.0 4 | api: [1.13.1,2.0.0] 5 | author: WeEnd -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RidePig - PocketMine-MP Plugin 2 | 3 | 4 | ## 用法 5 | ### 拿著胡蘿蔔釣竿點豬,你可以騎,但你不能控制:P 6 | 7 | 8 | ##注意事項 9 | ###如果你的Pig有使用AI插件,請自行改Main.php中的 10 | ###use pocketmine\entity\Pig; 11 | ###並注意你使用的ai中的豬名稱是否為"Pig" 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/WeEnd/ride/Main.php: -------------------------------------------------------------------------------- 1 | getServer()->getPluginManager()->registerEvents($this, $this); 28 | 29 | Item::addCreativeItem(new Item(329)); 30 | Item::addCreativeItem(new Item(398)); 31 | } 32 | 33 | public function onPlayerQuit(PlayerQuitEvent $event){ 34 | $name = $event->getPlayer()->getName(); 35 | if(isset($this->ride[$name])){ 36 | $this->remove($event->getPlayer()); 37 | unset($this->ridepig[$name]); 38 | } 39 | } 40 | public function onPlayerDeath(PlayerDeathEvent $event){ 41 | $player = $event->getEntity(); 42 | $name = $player->getName(); 43 | if($player instanceof Player){ 44 | if(isset($this->ridepig[$name])){ 45 | $this->remove($player); 46 | unset($this->ridepig[$name]); 47 | } 48 | } 49 | } 50 | public function remove($ride){ 51 | if($ride instanceof Player){ 52 | if(isset($this->ride[$ride->getName()])){ 53 | $pk = new SetEntityLinkPacket(); 54 | foreach($this->getServer()->getOnlinePlayers() as $player){ 55 | if($player->getName() == $this->ride[$ride->getName()]){ 56 | $pk->from = $player->getId(); 57 | } 58 | } 59 | $pk->to = $ride->getId(); 60 | $pk->type = SetEntityLinkPacket::TYPE_REMOVE; 61 | foreach($this->getServer()->getOnlinePlayers() as $players){ 62 | if($player->getName() !== $ride->getName()){ 63 | $players->dataPacket($pk); 64 | } 65 | } 66 | $pk = new SetEntityLinkPacket(); 67 | foreach($this->getServer()->getOnlinePlayers() as $player){ 68 | if($player->getName() == $this->ride[$ride->getName()]){ 69 | $pk->from = $player->getId(); 70 | } 71 | } 72 | $pk->to = 0; 73 | $pk->type = SetEntityLinkPacket::TYPE_REMOVE; 74 | $ride->dataPacket($pk); 75 | } 76 | } 77 | } 78 | public function onEntityDamage(EntityDamageEvent $event){ 79 | if($event instanceof EntityDamageByEntityEvent){ 80 | $ride = $event->getDamager(); 81 | $player = $event->getEntity(); 82 | if($ride instanceof Player){ 83 | if($ride->getInventory()->getItemInHand()->getID() == 398){ 84 | $event->setCancelled(); 85 | if($player instanceof Pig){ 86 | $this->ride[$ride->getName()] = $player->getId(); 87 | 88 | $this->ridepig($ride); 89 | } 90 | } 91 | } 92 | } 93 | } 94 | public function ride($ride){ 95 | if($ride instanceof Player){ 96 | if(isset($this->ride[$ride->getName()])){ 97 | $pk = new SetEntityLinkPacket(); 98 | foreach($this->getServer()->getOnlinePlayers() as $player){ 99 | if($player->getName() == $this->ride[$ride->getName()]){ 100 | $pk->from = $player->getId(); 101 | } 102 | } 103 | $pk->to = $ride->getId(); 104 | $pk->type = SetEntityLinkPacket::TYPE_PASSENGER; 105 | foreach($this->getServer()->getOnlinePlayers() as $players){ 106 | if($player->getName() !== $ride->getName()){ 107 | $players->dataPacket($pk); 108 | } 109 | } 110 | $pk = new SetEntityLinkPacket(); 111 | foreach($this->getServer()->getOnlinePlayers() as $player){ 112 | if($player->getName() == $this->ride[$ride->getName()]){ 113 | $pk->from = $player->getId(); 114 | } 115 | } 116 | $pk->to = 0; 117 | $pk->type = SetEntityLinkPacket::TYPE_RIDE; 118 | $ride->dataPacket($pk); 119 | } 120 | } 121 | } 122 | public function ridepig($ride){ 123 | if($ride instanceof Player){ 124 | if(isset($this->ride[$ride->getName()])){ 125 | $pk = new SetEntityLinkPacket(); 126 | $pig = $ride->getLevel()->getEntity($this->ride[$ride->getName()]); 127 | $pk->from = $pig->getId(); 128 | $pk->to = $ride->getId(); 129 | $pk->type = SetEntityLinkPacket::TYPE_PASSENGER; 130 | foreach($this->getServer()->getOnlinePlayers() as $players){ 131 | if($players->getName() !== $ride->getName()){ 132 | $players->dataPacket($pk); 133 | } 134 | } 135 | $pk = new SetEntityLinkPacket(); 136 | $pig = $ride->getLevel()->getEntity($this->ride[$ride->getName()]); 137 | $pk->from = $pig->getId(); 138 | $pk->to = 0; 139 | $pk->type = SetEntityLinkPacket::TYPE_RIDE; 140 | $ride->dataPacket($pk); 141 | } 142 | } 143 | } 144 | 145 | public function onJump(DataPacketReceiveEvent $event) { 146 | $packet = $event->getPacket (); 147 | if (! $packet instanceof PlayerActionPacket) { 148 | return; 149 | } 150 | $player = $event->getPlayer (); 151 | if ($packet->action === PlayerActionPacket::ACTION_JUMP && isset ( $this->ridepig [$player->getName ()] )) { 152 | $removepk = new RemoveEntityPacket (); 153 | $removepk->eid = $this->ridepig [$player->getName ()]; 154 | $this->getServer ()->broadcastPacket ( $this->getServer ()->getOnlinePlayers (), $removepk ); 155 | $this->remove($event->getPlayer()); 156 | unset ( $this->ridepig [$player->getName ()] ); 157 | } 158 | } 159 | } 160 | ?> 161 | --------------------------------------------------------------------------------