public function onCommand(CommandSender $sender, Command $cmd, $label, array $param) { switch ($cmd->getName()) { case "startp": if (!$sender instanceof Player) { $sender->sendMessage("Please run this command in-game."); return true; } $x = (int) $sender->x; $z = (int) $sender->z; $level = $sender->getLevel()->getFolderName(); $this->start[$sender->getName()] = array("x" => $x, "z" => $z, "level" => $level); $sender->sendMessage($this->getMessage("first-position-saved")); return true; case "endp": if (!$sender instanceof Player) { $sender->sendMessage("Please run this command in-game."); return true; } if (!isset($this->start[$sender->getName()])) { $sender->sendMessage($this->getMessage("set-first-position")); return true; } if ($sender->getLevel()->getFolderName() !== $this->start[$sender->getName()]["level"]) { $sender->sendMessage($this->getMessage("cant-set-position-in-different-world")); return true; } $startX = $this->start[$sender->getName()]["x"]; $startZ = $this->start[$sender->getName()]["z"]; $endX = (int) $sender->x; $endZ = (int) $sender->z; $this->end[$sender->getName()] = array("x" => $endX, "z" => $endZ); if ($startX > $endX) { $temp = $endX; $endX = $startX; $startX = $temp; } if ($startZ > $endZ) { $temp = $endZ; $endZ = $startZ; $startZ = $temp; } $startX--; $endX++; $startZ--; $endZ++; $price = ($endX - $startX - 1) * ($endZ - $startZ - 1) * $this->config->get("price-per-y-axis"); $sender->sendMessage($this->getMessage("confirm-buy-land", array($price, "%2", "%3"))); return true; case "land": $sub = array_shift($param); switch ($sub) { case "buy": if (!$sender->hasPermission("economyland.command.land.buy")) { return true; } if (!$sender instanceof Player) { $sender->sendMessage("Please run this command in-game."); return true; } if (in_array($sender->getLevel()->getFolderName(), $this->config->get("buying-disallowed-worlds"))) { $sender->sendMessage($this->getMessage("not-allowed-to-buy")); return true; } // $result = $this->land->query("SELECT * FROM land WHERE owner = '{$sender->getName()}'"); $cnt = count($this->db->getLandsByOwner($sender->getName())); if (is_numeric($this->config->get("player-land-limit"))) { if ($cnt >= $this->config->get("player-land-limit")) { $sender->sendMessage($this->getMessage("land-limit", array($cnt, $this->config->get("player-land-limit"), "%3", "%4"))); return true; } /* while($result->fetchArray(SQLITE3_ASSOC) !== false){ ++$cnt; if($cnt >= $this->config->get("player-land-limit")){ $sender->sendMessage($this->getMessage("land-limit", array($cnt, $this->config->get("player-land-limit")))); return true; } }*/ } if (!isset($this->start[$sender->getName()])) { $sender->sendMessage($this->getMessage("set-first-position")); return true; } elseif (!isset($this->end[$sender->getName()])) { $sender->sendMessage($this->getMessage("set-second-position")); return true; } $l = $this->start[$sender->getName()]; $endp = $this->end[$sender->getName()]; $startX = (int) $l["x"]; $endX = (int) $endp["x"]; $startZ = (int) $l["z"]; $endZ = (int) $endp["z"]; if ($startX > $endX) { $backup = $startX; $startX = $endX; $endX = $backup; } if ($startZ > $endZ) { $backup = $startZ; $startZ = $endZ; $endZ = $backup; } /*$result = $this->land->query("SELECT * FROM land WHERE startX <= $endX AND endX >= $endX AND startZ <= $endZ AND endZ >= $endZ AND level = '{$sender->getLevel()->getFolderName()}'")->fetchArray(SQLITE3_ASSOC); if(!is_bool($result)){ $sender->sendMessage($this->getMessage("land-around-here", array($result["owner"], "", ""))); return true; }*/ $result = $this->db->checkOverlap($startX, $endX, $startZ, $endZ, $sender->getLevel()->getFolderName()); if ($result) { $sender->sendMessage($this->getMessage("land-around-here", array($result["owner"], "%2", "%3"))); return true; } $price = ($endX + 1 - ($startX - 1) - 1) * ($endZ + 1 - ($startZ - 1) - 1) * $this->config->get("price-per-y-axis"); if (EconomyAPI::getInstance()->reduceMoney($sender, $price, true, "EconomyLand") === EconomyAPI::RET_INVALID) { $sender->sendMessage($this->getMessage("no-money-to-buy-land")); return true; } // $this->land->exec("INSERT INTO land (startX, endX, startZ, endZ, owner, level, price, invitee) VALUES ($startX, $endX, $startZ, $endZ, '{$sender->getName()}', '{$this->start[$sender->getName()]["level"]}', $price, ',')"); $this->db->addLand($startX, $endX, $startZ, $endZ, $sender->getLevel()->getFolderName(), $price, $sender->getName()); unset($this->start[$sender->getName()], $this->end[$sender->getName()]); $sender->sendMessage($this->getMessage("bought-land", array($price, "%2", "%3"))); break; case "list": if (!$sender->hasPermission("economyland.command.land.list")) { return true; } $page = isset($param[0]) ? (int) $param[0] : 1; $land = $this->db->getAll(); $output = ""; $max = ceil(count($land) / 5); $pro = 1; $page = (int) $page; $output .= $this->getMessage("land-list-top", array($page, $max, "")); $current = 1; foreach ($land as $l) { $cur = (int) ceil($current / 5); if ($cur > $page) { continue; } if ($pro == 6) { break; } if ($page === $cur) { $output .= $this->getMessage("land-list-format", array($l["ID"], ($l["endX"] - $l["startX"]) * ($l["endZ"] - $l["startZ"]), $l["owner"])); $pro++; } $current++; } $sender->sendMessage($output); break; case "whose": if (!$sender->hasPermission("economyland.command.land.whose")) { return true; } $player = array_shift($param); $alike = true; if (str_replace(" ", "", $player) === "") { $player = $sender->getName(); $alike = false; } /// $result = $this->land->query("SELECT * FROM land WHERE owner ".($alike ? "LIKE '%".$player."%'" : "= '".$player."'")); if ($alike) { $lands = $this->db->getLandsByKeyword($player); } else { $lands = $this->db->getLandsByOwner($player); } $sender->sendMessage("Results from query : {$player}\n"); // while(($info = $result->fetchArray(SQLITE3_ASSOC)) !== false){ foreach ($lands as $info) { $sender->sendMessage($this->getMessage("land-list-format", array($info["ID"], ($info["endX"] - $info["startX"]) * ($info["endZ"] - $info["startZ"]), $info["owner"]))); } //} break; case "move": if (!$sender instanceof Player) { $sender->sendMessage("Please run this command in-game."); return true; } if (!$sender->hasPermission("economyland.command.land.move")) { return true; } $num = array_shift($param); if (trim($num) == "") { $sender->sendMessage("Usage: /land move <land num>"); return true; } if (!is_numeric($num)) { $sender->sendMessage("Usage: /land move <land num>"); return true; } //$result = $this->land->query("SELECT * FROM land WHERE ID = $num"); // $info = $result->fetchArray(SQLITE3_ASSOC); $info = $this->db->getLandById($num); if ($info === false) { $sender->sendMessage($this->getMessage("no-land-found", array($num, "", ""))); return true; } if ($info["owner"] !== $sender->getName()) { if (!$sender->hasPermission("economyland.land.move.others")) { $sender->sendMessage($this->getMessage("no-permission-move", [$info["ID"], $info["owner"], "%3"])); return true; } } $level = $this->getServer()->getLevelByName($info["level"]); if (!$level instanceof Level) { $sender->sendMessage($this->getMessage("land-corrupted", array($num, "", ""))); return true; } $x = (int) $info["startX"] + ($info["endX"] - $info["startX"]) / 2; $z = (int) $info["startZ"] + ($info["endZ"] - $info["startZ"]) / 2; $cnt = 0; for ($y = 1;; $y++) { if ($level->getBlock(new Vector3($x, $y, $z))->getID() === 0) { break; } if ($cnt === 5) { break; } if ($y > 255) { ++$cnt; ++$x; --$z; $y = 1; continue; } } $sender->teleport(new Position($x, $y, $z, $level)); $sender->sendMessage($this->getMessage("success-moving", array($num, "", ""))); return true; case "give": if (!$sender instanceof Player) { $sender->sendMessage("Please run this command in-game."); return true; } if (!$sender->hasPermission("economyland.command.land.give")) { return true; } $player = array_shift($param); $landnum = array_shift($param); if (trim($player) == "" or trim($landnum) == "" or !is_numeric($landnum)) { $sender->sendMessage("Usage: /{$cmd} give <player> <land number>"); return true; } $username = $player; $player = $this->getServer()->getPlayer($username); if (!$player instanceof Player) { $sender->sendMessage($this->getMessage("player-not-connected", [$username, "%2", "%3"])); return true; } // $info = $this->land->query("SELECT * FROM land WHERE ID = $landnum")->fetchArray(SQLITE3_ASSOC); $info = $this->db->getLandById($landnum); if ($info === false) { $sender->sendMessage($this->getMessage("no-land-found", array($landnum, "%2", "%3"))); return true; } if ($sender->getName() !== $info["owner"] and !$sender->hasPermission("economyland.land.give.others")) { $sender->sendMessage($this->getMessage("not-your-land", array($landnum, "%2", "%3"))); } else { if ($sender->getName() === $player->getName()) { $sender->sendMessage($this->getMessage("cannot-give-land-myself")); } else { // $this->land->exec("UPDATE land SET owner = '{$player->getName()}' WHERE ID = {$info["ID"]}"); $this->db->setOwnerById($info["ID"], $player->getName()); $sender->sendMessage($this->getMessage("gave-land", array($landnum, $player->getName(), "%3"))); $player->sendMessage($this->getMessage("got-land", array($sender->getName(), $landnum, "%3"))); } } return true; case "invite": if (!$sender->hasPermission("economyland.command.land.invite")) { $sender->sendMessage("You don't have permissions to use this command."); return true; } $landnum = array_shift($param); $player = array_shift($param); if (trim($player) == "" or trim($landnum) == "") { $sender->sendMessage("Usage : /land <invite> <land number> <[r:]player>"); return true; } if (!is_numeric($landnum)) { $sender->sendMessage($this->getMessage("land-num-must-numeric", array($landnum, "%2", "%3"))); return true; } //$result = $this->land->query("SELECT * FROM land WHERE ID = $landnum"); //$info = $result->fetchArray(SQLITE3_ASSOC); $info = $this->db->getLandById($landnum); if ($info === false) { $sender->sendMessage($this->getMessage("no-land-found", array($landnum, "%2", "%3"))); return true; } elseif ($info["owner"] !== $sender->getName()) { $sender->sendMessage($this->getMessage("not-your-land", array($landnum, "%2", "%3"))); return true; } elseif (substr($player, 0, 2) === "r:") { if (!$sender->hasPermission("economyland.command.land.invite.remove")) { $sender->sendMessage("You don't have permissions to use this command."); return true; } $player = substr($player, 2); //$this->land->exec("UPDATE land SET invitee = '".str_replace($player.",", "", $info["invitee"])."' WHERE ID = {$info["ID"]};"); $result = $this->db->removeInviteeById($landnum, $player); if ($result === false) { $sender->sendMessage($this->getMessage("not-invitee", array($player, $landnum, "%3"))); return true; } $sender->sendMessage($this->getMessage("removed-invitee", array($player, $landnum, "%3"))); } else { /*if(strpos($info["invitee"], ",".$player.",") !== false){ $sender->sendMessage($this->getMessage("already-invitee", array($player, "", ""))); return true; } $this->land->exec("UPDATE land SET invitee = '".$info["invitee"].$player.",' WHERE ID = {$info["ID"]};");*/ if (preg_match('#^[a-zA-Z0-9_]{3,16}$#', $player) == 0) { $sender->sendMessage($this->getMessage("invalid-invitee", [$player, "%2", "%3"])); return true; } $result = $this->db->addInviteeById($landnum, $player); if ($result === false) { $sender->sendMessage($this->getMessage("already-invitee", array($player, "%2", "%3"))); return true; } $sender->sendMessage($this->getMessage("success-invite", array($player, $landnum, "%3"))); } return true; case "invitee": $landnum = array_shift($param); if (trim($landnum) == "" or !is_numeric($landnum)) { $sender->sendMessage("Usage: /land invitee <land number>"); return true; } $info = $this->db->getInviteeById($landnum); if ($info === false) { $sender->sendMessage($this->getMessage("no-land-found", array($landnum, "%2", "%3"))); return true; } $output = "Invitee of land #{$landnum} : \n"; $output .= implode(", ", $info); $sender->sendMessage($output); return true; case "here": if (!$sender instanceof Player) { $sender->sendMessage("Please run this command in-game."); return true; } $x = $sender->x; $z = $sender->z; $info = $this->db->getByCoord($x, $z, $sender->getLevel()->getFolderName()); if ($info === false) { $sender->sendMessage($this->getMessage("no-one-owned")); return true; } $sender->sendMessage($this->getMessage("here-land", array($info["ID"], $info["owner"], "%3"))); return true; default: $sender->sendMessage("Usage: " . $cmd->getUsage()); } return true; case "landsell": $id = array_shift($param); switch ($id) { case "here": if (!$sender instanceof Player) { $sender->sendMessage("Please run this command in-game."); return true; } $x = $sender->getX(); $z = $sender->getZ(); //$result = $this->land->query("SELECT * FROM land WHERE (startX < $x AND endX > $x) AND (startZ < $z AND endZ > $z) AND level = '{$sender->getLevel()->getFolderName()}'"); //$info = $result->fetchArray(SQLITE3_ASSOC); $info = $this->db->getByCoord($x, $z, $sender->getLevel()->getFolderName()); if ($info === false) { $sender->sendMessage($this->getMessage("no-one-owned")); return true; } if ($info["owner"] !== $sender->getName() and !$sender->hasPermission("economyland.landsell.others")) { $sender->sendMessage($this->getMessage("not-my-land")); } else { EconomyAPI::getInstance()->addMoney($sender, $info["price"] / 2); $sender->sendMessage($this->getMessage("sold-land", array($info["price"] / 2, "%2", "%3"))); //$this->land->exec("DELETE FROM land WHERE ID = {$info["ID"]}"); $this->db->removeLandById($info["ID"]); } return true; default: $p = $id; if (is_numeric($p)) { //$info = $this->land->query("SELECT * FROM land WHERE ID = $p")->fetchArray(SQLITE3_ASSOC); $info = $this->db->getLandById($p); if ($info === false) { $sender->sendMessage($this->getMessage("no-land-found", array($p, "%2", "%3"))); return true; } if ($info["owner"] === $sender->getName() or $sender->hasPermission("economyland.landsell.others")) { EconomyAPI::getInstance()->addMoney($sender, $info["price"] / 2, true, "EconomyLand"); $sender->sendMessage($this->getMessage("sold-land", array($info["price"] / 2, "", ""))); //$this->land->exec("DELETE FROM land WHERE ID = $p"); $this->db->removeLandById($p); } else { $sender->sendMessage($this->getMessage("not-your-land", array($p, $info["owner"], "%3"))); } } else { $sender->sendMessage("Usage: /landsell <here|land number>"); } } return true; } return false; }
public function getLandInfo($landId) { return $this->db->getLandById($landId); }