SHOW:
|
|
- or go back to the newest paste.
| 1 | <?php | |
| 2 | ||
| 3 | /* | |
| 4 | __PocketMine Plugin__ | |
| 5 | name=SocialSign | |
| 6 | description= | |
| 7 | version=1.1 | |
| 8 | author=Dinokiller | |
| 9 | class=SocialSign | |
| 10 | apiversion=12 | |
| 11 | */ | |
| 12 | ||
| 13 | class SocialSign implements Plugin{
| |
| 14 | private $api, $config, $tap; | |
| 15 | private $help = array( | |
| 16 | "Commands:\n", | |
| 17 | " /socialsign create - Creates a social sign.\n", | |
| 18 | " /ss - Alias for socialsign\n" | |
| 19 | ); | |
| 20 | ||
| 21 | public function __construct(ServerAPI $api, $server = false){
| |
| 22 | $this->api = $api; | |
| 23 | } | |
| 24 | ||
| 25 | public function init(){
| |
| 26 | $this->config = new Config($this->api->plugin->configPath($this) . "config.yml", CONFIG_YAML, array( | |
| 27 | "op-only-create-signs" => true, | |
| 28 | "op-only-destroy-signs" => true, | |
| 29 | "sign-update-interval" => 10, | |
| 30 | "save-interval" => 5 | |
| 31 | )); | |
| 32 | $this->config = $this->api->plugin->readYAML($this->api->plugin->configPath($this) . "config.yml"); | |
| 33 | $this->api->addHandler("player.block.touch", array($this, "eventHandler"));
| |
| 34 | $this->api->addHandler("player.block.break", array($this, "eventHandler"));
| |
| 35 | $this->api->console->register("socialsign", "[function] [args]", array($this, "handleCommand"));
| |
| 36 | $this->api->console->alias("ss", "socialsign");
| |
| 37 | $this->api->schedule(20 * $this->config["sign-update-interval"], array($this, "updateSigns"), array(), false); | |
| 38 | } | |
| 39 | ||
| 40 | public function eventHandler(&$data, $event){
| |
| 41 | switch($event){
| |
| 42 | case "player.block.break": | |
| 43 | $block = $data["target"]; | |
| 44 | $player = $data["player"]; | |
| 45 | foreach($this->config as &$sign){
| |
| 46 | if(isset($sign["x"]) && isset($sign["y"]) && isset($sign["z"]) && isset($sign["level"])){
| |
| 47 | if($sign["x"] == $block->x && $sign["y"] == $block->y && $sign["z"] == $block->z && $sign["level"] == $block->level->getName()){
| |
| 48 | if(!$this->config["op-only-destroy-signs"] || $this->config["op-only-destroy-signs"] && $this->api->ban->isOp($player->username)){
| |
| 49 | unset($sign); | |
| 50 | $player->sendChat("This social sign has been unregistered.\n");
| |
| 51 | $this->api->plugin->writeYAML($this->api->plugin->configPath($this) . "signs.yml", $this->config); | |
| 52 | }else{
| |
| 53 | $player->sendChat("You don't have permission to destroy social signs.\n");
| |
| 54 | return false; | |
| 55 | } | |
| 56 | } | |
| 57 | } | |
| 58 | } | |
| 59 | break; | |
| 60 | case "player.block.touch": | |
| 61 | $player = $data["player"]; | |
| 62 | $block = $data["target"]; | |
| 63 | if(isset()isset($this->tap[$player->username]["type"]) && isset($this->tap[$player->username]["username"]) && $block->getID() == WALL_SIGN || $block->getID() == SIGN_POST){
| |
| 64 | $pos = new Position($block->x, $block->y, $block->z, $block->level); | |
| 65 | $tile = $this->api->tile->get($pos); | |
| 66 | if(!$tile instanceof Tile){
| |
| 67 | $tile = $this->api->tile->add($block->level, TILE_SIGN, $block->x, $block->y, $block->z); | |
| 68 | } | |
| 69 | foreach($this->config as $sign){
| |
| 70 | if($sign["x"] == $block->x && $sign["y"] == $block->y && $sign["z"] == $block->z && $sign["level"] = $block->level->getName()){
| |
| 71 | $player->sendChat("There's already a social sign here!\n");
| |
| 72 | return; | |
| 73 | } | |
| 74 | } | |
| 75 | array_push($this->config, array( | |
| 76 | "type" => $this->tap[$player->username]["type"], | |
| 77 | "username" => $this->tap[$player->username]["username"], | |
| 78 | "x" => $block->x, | |
| 79 | "y" => $block->y, | |
| 80 | "z" => $block->z, | |
| 81 | "level" => $block->level->getName() | |
| 82 | )); | |
| 83 | $this->api->plugin->writeYAML($this->api->plugin->configPath($this) . "signs.yml", $this->config); | |
| 84 | unset($this->tap[$player->username]); | |
| 85 | $player->sendChat("Social sign created successfully!\n");
| |
| 86 | } | |
| 87 | break; | |
| 88 | } | |
| 89 | } | |
| 90 | ||
| 91 | public function handleCommand($cmd, $params, $issuer){
| |
| 92 | $out = ""; | |
| 93 | if($cmd == "socialsign"){
| |
| 94 | if(count($params) == 0){
| |
| 95 | $params[0] = "help"; | |
| 96 | } | |
| 97 | switch($params[0]){
| |
| 98 | case "create": | |
| 99 | if($issuer instanceof Player){
| |
| 100 | if(!$this->config["op-only-create-signs"] || $this->config["op-only-create-signs"] && $this->api->ban->isOp($issuer->username)){
| |
| 101 | if(isset($params[1]) && isset($params[2])){
| |
| 102 | $params[1] = strtolower($params[1]); | |
| 103 | - | if($params[1] != "youtube" && $params[1] != "facebook" && $params[1] != "twitter" && $params[1] != "twitch"){
|
| 103 | + | if($params[1] != "youtube" && $params[1] != "facebook" && $params[1] != "twitter"){
|
| 104 | $out .= "That social network doesn't exist or isn't supported.\n"; | |
| 105 | }else{
| |
| 106 | $this->tap[$issuer->username]["type"] = $params[1]; | |
| 107 | $this->tap[$issuer->username]["username"] = $params[2]; | |
| 108 | $out .= "Tap a sign to create a social sign!\n"; | |
| 109 | } | |
| 110 | }else{
| |
| 111 | $out .= "Usage: /socialsign create <socialnetwork> <username>\n"; | |
| 112 | } | |
| 113 | }else{
| |
| 114 | $out .= "You don't have permission to create social signs.\n"; | |
| 115 | } | |
| 116 | }else{
| |
| 117 | $out .= "[CMD] This can only be run in-game.\n"; | |
| 118 | } | |
| 119 | break; | |
| 120 | case "help": | |
| 121 | foreach($this->help as $line){
| |
| 122 | $out .= $line; | |
| 123 | } | |
| 124 | break; | |
| 125 | default: | |
| 126 | $out .= "Command doesn't exist! Use /help\n"; | |
| 127 | } | |
| 128 | return $out; | |
| 129 | } | |
| 130 | } | |
| 131 | ||
| 132 | public function updateSigns(){
| |
| 133 | foreach($this->config as &$sign){
| |
| 134 | if(isset($sign["type"]) && isset($sign["x"]) && isset($sign["y"]) && isset($sign["z"]) && isset($sign["level"]) && isset($sign["username"])){
| |
| 135 | switch(strtolower($sign["type"])){
| |
| 136 | case "youtube": | |
| 137 | $level = $this->api->level->get($sign["level"]); | |
| 138 | if(!$level instanceof Level){
| |
| 139 | unset($tile); | |
| 140 | continue; | |
| 141 | } | |
| 142 | $pos = new Position($sign["x"], $sign["y"], $sign["z"], $level); | |
| 143 | $tile = $this->api->tile->get($pos); | |
| 144 | if(!$tile instanceof Tile){
| |
| 145 | unset($tile); | |
| 146 | continue; | |
| 147 | } | |
| 148 | $tile->setText("[YouTube]", $sign["username"], "has " . $this->getYouTubeSubs($sign["username"]), "subscribers.");
| |
| 149 | break; | |
| 150 | case "twitter": | |
| 151 | $level = $this->api->level->get($sign["level"]); | |
| 152 | if(!$level instanceof Level){
| |
| 153 | unset($tile); | |
| 154 | continue; | |
| 155 | } | |
| 156 | $pos = new Position($sign["x"], $sign["y"], $sign["z"], $level); | |
| 157 | $tile = $this->api->tile->get($pos); | |
| 158 | if(!$tile instanceof Tile){
| |
| 159 | unset($tile); | |
| 160 | continue; | |
| 161 | } | |
| 162 | $tile->setText("[Twitter]", $sign["username"], "has " . $this->getTwitterFollowers($sign["username"]), "followers.");
| |
| 163 | break; | |
| 164 | case "facebook": | |
| 165 | $level = $this->api->level->get($sign["level"]); | |
| 166 | if(!$level instanceof Level){
| |
| 167 | unset($tile); | |
| 168 | continue; | |
| 169 | } | |
| 170 | $pos = new Position($sign["x"], $sign["y"], $sign["z"], $level); | |
| 171 | $tile = $this->api->tile->get($pos); | |
| 172 | if(!$tile instanceof Tile){
| |
| 173 | unset($tile); | |
| 174 | continue; | |
| 175 | } | |
| 176 | $tile->setText("[Facebook]", $sign["username"], "has " . $this->getFacebookLikes($sign["username"]), "likes.");
| |
| 177 | break; | |
| 178 | case "twitch": | |
| 179 | $level = $this->api->level->get($sign["level"]); | |
| 180 | if(!$level instanceof Level){
| |
| 181 | unset($tile); | |
| 182 | continue; | |
| 183 | } | |
| 184 | $pos = new Position($sign["x"], $sign["y"], $sign["z"], $level); | |
| 185 | $tile = $this->api->tile->get($pos); | |
| 186 | if(!$tile instanceof Tile){
| |
| 187 | unset($tile); | |
| 188 | continue; | |
| 189 | } | |
| 190 | $tile->setText("[Twitch]", $sign["username"], "has " . $this->getTwitchFollowers($sign["username"]), "followers.");
| |
| 191 | break; | |
| 192 | default: | |
| 193 | unset($tile); | |
| 194 | } | |
| 195 | }else{
| |
| 196 | unset($sign); | |
| 197 | } | |
| 198 | } | |
| 199 | $this->api->schedule(20 * $this->config["sign-update-interval"], array($this, "updateSigns"), array(), false); | |
| 200 | } | |
| 201 | ||
| 202 | public function getTwitchFollowers($username){
| |
| 203 | $data = Utils::curl_get("https://api.twitch.tv/kraken/channels/" . strtolower($username) . "/follows.json");
| |
| 204 | $data = json_decode($data, true); | |
| 205 | if(isset($data["error"]) || !isset($data["_total"])){ // If the user doesn't exist.
| |
| 206 | return 0; | |
| 207 | } | |
| 208 | return $data["_total"]; | |
| 209 | } | |
| 210 | ||
| 211 | public function getYouTubeSubs($username){
| |
| 212 | $data = file_get_contents("http://gdata.youtube.com/feeds/api/users/" . strtolower($username) ."?alt=json");
| |
| 213 | if($data = "User not found"){
| |
| 214 | return 0; | |
| 215 | } | |
| 216 | $data = json_decode($data, true); | |
| 217 | return $data["entry"]["yt$statistics"]["subscriberCount"]; | |
| 218 | } | |
| 219 | ||
| 220 | public function getTwitterFollowers($username){
| |
| 221 | $data = Utils::curl_get("https://cdn.api.twitter.com/1/users/lookup.json?screen_name=" . strtolower($username));
| |
| 222 | $data = json_decode($data, true); | |
| 223 | if(isset($data["errors"]) || !isset($data[0]["followers_count"])){ // If the user doesn't exist.
| |
| 224 | return 0; | |
| 225 | } | |
| 226 | return $data[0]["followers_count"]; | |
| 227 | } | |
| 228 | ||
| 229 | public function getFacebookLikes($username){
| |
| 230 | $data = file_get_contents("http://graph.facebook.com/" . strtolower($username));
| |
| 231 | $data = json_decode($data, true); | |
| 232 | if(isset($data["error"]) || !isset($data["likes"])){ // If the user doesn't exist.
| |
| 233 | return 0; | |
| 234 | } | |
| 235 | return $data["likes"]; | |
| 236 | } | |
| 237 | ||
| 238 | public function __destruct(){
| |
| 239 | ||
| 240 | } | |
| 241 | ||
| 242 | } |