Ver código fonte

1.6 IS WORKING? WANNA TRY IT OUT?

master
Ad5001 2 anos atrás
pai
commit
520f4f8115
5 arquivos alterados com 263 adições e 76 exclusões
  1. 3
    2
      config.yml
  2. 0
    8
      index.html
  3. 2
    1
      plugin.yml
  4. 44
    18
      resources/handler.php
  5. 214
    47
      src/Ad5001/Online/Main.php

+ 3
- 2
config.yml Ver arquivo

@@ -13,10 +13,11 @@ index: index.html
denied-pages: []

# Your domains (one per time). To redirect a domain here, put one per line then go to your registar CPanel and add a CName record that redirects to it !
Domains: []
Domains: ["localhost"]

#Parked domains: Domains that redirects to one of your domains. Same setup as shown above.
Parked domains: []
Parked domains:
127.0.0.1: localhost


# Here you can choose if the server automaticly disable itself on server stop.

+ 0
- 8
index.html Ver arquivo

@@ -1,8 +0,0 @@
<html>
<head>
<title>Welcome to your new website !</title>
</head>
<body>
<h3>Welcome to your new website ! You can edit it in your new folder !</h3>
</body>
</html>

+ 2
- 1
plugin.yml Ver arquivo

@@ -2,9 +2,10 @@
name: Online
author: Ad5001
version: 1.6
api: [2.0.0]
api: [2.0.0, 3.0.0, 3.0.0-ALPHA1, 3.0.0-ALPHA2, 3.0.0-ALPHA3,]
description: "You're own website, on PocketMine.'"
main: Ad5001\Online\Main
load: STARTUP
commands: []
permissions: []
...

+ 44
- 18
resources/handler.php Ver arquivo

@@ -5,7 +5,26 @@ Copyright (C) Ad5001 2016 All rights reserved.
Do not attemped to modify this file if you're not sure on how it works.
This file process 404, 403 requests, custom index and some other stuff.
*/
$cfg = yaml_parse(file_get_contents(__DIR__ . "/config.yml"));

// Definitions
$cfg = yaml_parse(file_get_contents(__DIR__ . "/../config.yml"));
$args = json_decode(file_get_contents(__DIR__ . "/args"), true);
$_POCKETMINE = $args["POCKETMINE"];
$_PLUGINS = $args["PLUGINS"];
$_PLAYERS = $args["PLAYERS"];
$_LEVELS = $args["LEVELS"];


// Calling handlers.
foreach($args["HANDLERS"] as $handler) {
// echo $handler;
if((include $handler) == false) {
return true;
}
}


// Domains parsing
$host = $_SERVER["HTTP_HOST"];
if(isset($cfg["Parked domains"][$host])) {
$host = $cfg["Parked domains"][$host];
@@ -16,21 +35,27 @@ if(in_array($host, $cfg["Domains"])) {
unallowedDomain();
return true;
}


// Removing GET from the request
$uri = $_SERVER["REQUEST_URI"];
if(strpos($uri, "?") !== false) {
$uri = explode("?", $uri)[0];
}
if(!file_exists(__DIR__ . "/" . $uri)) {
echo file_get_contents(__DIR__ . "/" . $host . "/" . $cfg[404]);
} elseif(in_array($uri, yaml_parse(file_get_contents(__DIR__ . "/config.yml"))["denied-pages"])) {
echo file_get_contents(__DIR__ . "/" . $host . "/" . $cfg[403]);
} elseif(is_dir(__DIR__ . "/" .$uri)) {
if(file_exists(__DIR__ . "/" . $uri . "index.html")) {
include(__DIR__ . "/" . $uri . "index.html");
} elseif(file_exists(__DIR__ . "/" . $uri . "index.php")) {
include(__DIR__ . "/" . $uri . "index.php");
} elseif(file_exists(__DIR__ . "/" . $uri . $cfg["index"])) {
include(__DIR__ . "/" . $uri . $cfg["index"]);


// Getting the file & output it if possible.
if(!file_exists(__DIR__ . "/../" . $uri)) {
echo file_get_contents(__DIR__ . "/../" . $host . "/" . $cfg[404]);
} elseif(in_array($uri, $cfg["denied-pages"])) {
echo file_get_contents(__DIR__ . "/../" . $host . "/" . $cfg[403]);
} elseif(is_dir(__DIR__ . "/../" .$uri)) {
if(file_exists(__DIR__ . "/../" . $uri . "index.html")) {
include(__DIR__ . "/../" . $uri . "index.html");
} elseif(file_exists(__DIR__ . "/../" . $uri . "index.php")) {
include(__DIR__ . "/../" . $uri . "index.php");
} elseif(file_exists(__DIR__ . "/../" . $uri . $cfg["index"])) {
include(__DIR__ . "/../" . $uri . $cfg["index"]);
}
} else {
include(__DIR__ . "/" . $uri);
@@ -42,28 +67,29 @@ function unallowedDomain() {
echo <<<A
<html>
<head>
<link href="https://fonts.googleapis.com/css?family=Roboto+Condensed:300" rel="stylesheet">
<style>
body {
padding: 60px;
}
div.container {
padding: 40px;
border: 3px solid white;
border: 3px solid lightgray;
border-radius: 8px;
background-color: gray;
background: linear-gradient(45deg, gray, grey);
height: 70%;
}
h1, h2, h3, p {
font-family: Arial;
font-family: 'Roboto Condensed', sans-serif;
}
</style>
<link rel="icon" src="http://ad5001.ga/Online/icon.ico" href="http://ad5001.ga/Online/icon.ico" />
<link rel="icon" src="http://serveur.cf/Online/icon.ico" href="http://serveur.cf/Online/icon.ico" />
</head>
<body>
<div class="container">
<h1><img src="http://ad5001.ga/Online/icon.png" style="width: 30px; height: 30px;"></img>Unallowed domain</h1><hr>
<h1><img src="http://serveur.cf/Online/icon.png" style="width: 30px; height: 30px;"></img>Unallowed domain</h1><hr>
<p>This IP does not have any domain on this machine. Please refer to your server administartor if you think it's an error.</p>
<h2 style="float: right;"><a href="http://projects.ad5001.ga/Online">Online 1.5 - Eclipse edition</a></h2>
<h2 style="float: right;">Online 1.6 - Eclipse edition</a></h2>
</body>
</style>
A;

+ 214
- 47
src/Ad5001/Online/Main.php Ver arquivo

@@ -10,60 +10,119 @@ use pocketmine\Player;


class Main extends PluginBase{
public function onEnable(){
$this->saveDefaultConfig();

if(!stream_resolve_include_path("router.php")) {
file_put_contents($this->getDataFolder() . "router.php", $this->getResource("handler.php"));
}
foreach($this->getConfig()->get("Domains") as $d) {
@mkdir($this->getDataFolder() . $d);
if(!file_exists($this->getDataFolder() . $d . "/index.html") and !file_exists($this->getDataFolder() . $d . "/index.php")) {
file_put_contents($this->getDataFolder() .$d. "/index.html", $this->getResource("index.html"));
}
if(!file_exists($this->getDataFolder() .$d. "/404.html")) {
file_put_contents($this->getDataFolder() . $d . "/404.html", $this->getResource("404.html"));
protected $handlers;
protected $arguments;


public function onEnable(){
$this->saveDefaultConfig();
$this->handlers = [];
$this->arguments = [];


$this->getServer()->getScheduler()->scheduleRepeatingTask($task = new ArgFillTask($this), 20*10);
@mkdir($this->getDataFolder() . "tmp");
$task->onRun(0);

if(!file_exists($this->getDataFolder() . "tmp/router.php")) {
file_put_contents($this->getDataFolder() . "tmp/router.php", $this->getResource("handler.php"));
}
foreach($this->getConfig()->get("Domains") as $d) {
@mkdir($this->getDataFolder() . $d);
if(!file_exists($this->getDataFolder() . $d . "/index.html") and !file_exists($this->getDataFolder() . $d . "/index.php")) {
file_put_contents($this->getDataFolder() .$d. "/index.html", $this->getResource("index.html"));
}
if(!file_exists($this->getDataFolder() .$d. "/404.html")) {
file_put_contents($this->getDataFolder() . $d . "/404.html", $this->getResource("404.html"));
}
if(!file_exists($this->getDataFolder() . $d . "/403.html")) {
file_put_contents($this->getDataFolder() .$d . "/403.html", $this->getResource("403.html"));
}
}


set_time_limit(0);

$this->port = $this->getConfig()->get("port");

if(!UPnP::PortForward($this->port)) {// Beta for Windows
$this->getLogger()->info("Not able to port forward!");
}

$this->getServer()->getScheduler()->scheduleAsyncTask(new execTask($this->getServer()->getFilePath()));
}
if(!file_exists($this->getDataFolder() . $d . "/403.html")) {
file_put_contents($this->getDataFolder() .$d . "/403.html", $this->getResource("403.html"));

public function onDisable() {
if($this->getConfig()->get("KillOnShutdown") !== "false") {
$this->getLogger()->info("Shutdowning.....");
switch(true) {
case stristr(PHP_OS, "WIN"):
shell_exec('FOR /F "tokens=5" %P IN (\'netstat -a -n -o ^| findstr 0.0.0.0:'. $this->port .'\') DO TaskKill.exe /F /PID %P');
$this->getLogger()->info("Shutdowned on Windows !");
break;
case stristr(PHP_OS, "DAR") or stristr(PHP_OS, "LINUX"):
shell_exec("kill -kill `lsof -t -i tcp:$this->port`");
$this->getLogger()->info("Shutdowned on Linux or MAC !");
break;
}
}
}
}

register_shutdown_function("Ad5001\\Online\\Main::shutdown");

set_time_limit(0);
/*
Adds a PHP handler
@param $path string
@return bool
*/
public function addHandler(string $path) : bool {
if(file_exists($path)) {
$this->handlers[$path] = $path;
return true;
}
return false;
}

$this->port = $this->getConfig()->get("port");

if(!UPnP::PortForward($this->port)) {// Beta for Windows
$this->getLogger()->info("Not able to port forward!");
}
/*
Return an array with all handlers
@return array
*/
public function getHandlers() : array {
return $this->handlers;
}

$this->getServer()->getScheduler()->scheduleAsyncTask(new execTask($this->getServer()->getFilePath()));
}

public static function shutdown() {
echo "Shutdowned !";
}
/*
Sets a plugin argument
@param $plugin \pocketmine\plugin\Plugin
@param $id string
@param $value mixed
@return bool
*/
public function setArgument(\pocketmine\plugin\Plugin $plugin, string $id, $value) : bool {
if(!isset($this->arguments[$plugin->getName()])) $this->arguments[$plugin->getName()] = [];
$this->arguments[$plugin->getName()][$id] = $value;
return true;
}

public function onDisable() {
if($this->getConfig()->get("KillOnShutdown") !== "false") {
$this->getLogger()->info("Shutdowning.....");
switch(true) {
case stristr(PHP_OS, "WIN"):
shell_exec('FOR /F "tokens=5" %P IN (\'netstat -a -n -o ^| findstr 0.0.0.0:'. $this->port .'\') DO TaskKill.exe /F /PID %P');
$this->getLogger()->info("Shutdowned on Windows !");
break;
case stristr(PHP_OS, "DAR") or stristr(PHP_OS, "LINUX"):
shell_exec("kill -kill `lsof -t -i tcp:$this->port`");
$this->getLogger()->info("Shutdowned on Linux or MAC !");
break;
}

/*
Gets a plugin arguments
@param $plugin \pocketmine\plugin\Plugin
@return array
*/
public function getArguments(\pocketmine\plugin\Plugin $plugin) : array {
return isset($this->arguments[$plugin->getName()]) ? $this->arguments[$plugin->getName()] : [];
}
}



}




/**
* Setting rguments for the pocketine infos
*/
@@ -74,8 +133,9 @@ class ArgFillTask extends \pocketmine\scheduler\PluginTask {
@param $main Main
*/
public function __construct(Main $main) {
parent::__construct($main);
$this->main = $main;
$this->server = $server;
$this->server = $main->getServer();
}

/*
@@ -83,14 +143,121 @@ class ArgFillTask extends \pocketmine\scheduler\PluginTask {
@param $tick mixed
*/
public function onRun($tick) {
$args = [];
$server = $this->server;
$pmargs = [];
$pluginsargs = [];
$players = [];
$levels = [];

// Filling the arguments

// 1. Pocketmine
$pmargs["software_name"] = $server->getName();
$pmargs["software_codename"] = $server->getCodename();
$pmargs["software_version"] = $server->getPocketmineVersion();
$pmargs["mcpe_version"] = $server->getVersion();
$pmargs["API"] = $server->getApiVersion();
$pmargs["software_datapath"] = $server->getDataPath();
$pmargs["software_pluginpath"] = $server->getPluginPath();
$pmargs["max_players"] = $server->getMaxPlayers();
$pmargs["port"] = $server->getPort();
$pmargs["view_distance"] = $server->getViewDistance();
$pmargs["ip"] = $server->getIp();
$pmargs["server_unique_id"] = $server->getServerUniqueId();
$pmargs["auto_save"] = $server->getAutoSave();
$pmargs["default_gamemode"] = $server->getGamemode();
$pmargs["force_gamemode"] = $server->getForceGamemode();
$pmargs["difficulty"] = $server->getDifficulty();
$pmargs["spawn_radius"] = $server->getSpawnRadius();
$pmargs["allow_flight"] = $server->getAllowFlight();
$pmargs["ultra_hardcore"] = $server->isHardcore();
$pmargs["motd"] = $server->getMotd();
$pmargs["tps"] = $server->getTicksPerSecond();
$pmargs["lang_name"] = $server->getLanguage()->getName();
$pmargs["lang_code"] = $server->getLanguage()->getLang();

// 2. Plugins
foreach($server->getPluginManager()->getPlugins() as $plugin) {
$pl = [];
$pl["name"] = $plugin->getName();
$pl["is_enabled"] = $plugin->isEnabled();
$pl["data_folder"] = $plugin->getDataFolder();
$pl["apis"] = $plugin->getDescription()->getCompatibleApis();
$pl["authors"] = $plugin->getDescription()->getAuthors();
$pl["prefix"] = $plugin->getDescription()->getPrefix();
$pl["commands"] = $plugin->getDescription()->getCommands();
$pl["dependencies"] = $plugin->getDescription()->getDepend();
$pl["description"] = $plugin->getDescription()->getDescription();
$pl["load_before"] = $plugin->getDescription()->getLoadBefore();
$pl["main"] = $plugin->getDescription()->getMain();
$pl["order"] = $plugin->getDescription()->getOrder();
$pl["soft_depend"] = $plugin->getDescription()->getSoftDepend();
$pl["version"] = $plugin->getDescription()->getVersion();
$pl["website"] = $plugin->getDescription()->getWebsite();
foreach($this->main->getArguments($plugin) as $name => $arg) {
if(!isset($pl[$name])) {
$pl[$name] = $arg;
}
}
$pluginsargs[$plugin->getName()] = $pl;
}


// 3. Players
foreach ($server->getOnlinePlayers() as $player) {
$pl = [];
$pl["client_secret"] = $player->getClientSecret();
$pl["banned"] = $player->isBanned(); // I don't know if tis could be to false but we never know xD
$pl["whitelisted"] = $player->isWhitelisted();
$pl["client_secret"] = $player->getClientSecret();
$pl["first_played"] = $player->getFirstPlayed();
$pl["last_played"] = $player->getLastPlayed();
$pl["played_before"] = $player->hasPlayedBefore();
$pl["allow_flight"] = $player->getAllowFlight();
$pl["flying"] = $player->isFlying();
$pl["auto_jump"] = $player->hasAutoJump();
$pl["op"] = $player->isOp();
$pl["connected"] = $player->isConnected();
$pl["display_name"] = $player->getDisplayName();
$pl["ip"] = $player->getAddress();
$pl["port"] = $player->getPort();
$pl["is_sleeping"] = $player->isSleeping();
$pl["ticks_in_air"] = $player->getInAirTicks();
$pl["gamemode"] = $player->getGamemode();
$pl["name"] = $player->getName();
$pl["loader_id"] = $player->getLoaderId();
$players[$player->getName()] = $pl;
}


// 4.Levels
foreach ($server->getLevels() as $level) {
$lvl = [];
$lvl["tick_rate"] = $level->getTickRate();
$lvl["id"] = $level->getId();
$lvl["auto_save"] = $level->getAutoSave();
$lvl["tick_rate"] = $level->getTickRate();
$lvl["players"] = [];
foreach ($level->getPlayers() as $pl) {
$lvl["players"][$pl->getName()] = $players[$pl->getName()];
}
$lvl["time"] = $level->getTime();
$lvl["name"] = $level->getName();
$lvl["folder_name"] = $level->getFolderName();
$lvl["seed"] = $level->getSeed();
$levels[$lvl["name"]] = $lvl;
}

file_put_contents($this->main->getDataFolder() . "tmp/args", json_encode(["POCKETMINE" => $pmargs, "PLUGINS" => $pluginsargs, "PLAYERS" => $players, "LEVELS" => $levels, "HANDLERS" => $this->main->getHandlers()]));
}
}







class execTask extends \pocketmine\scheduler\AsyncTask {

public function __construct(string $path) {
@@ -103,13 +270,13 @@ class execTask extends \pocketmine\scheduler\AsyncTask {
switch(true) {
case stristr(PHP_OS, "WIN"):
// echo '"%CD%\\bin\\php\\php.exe -t %CD%\\plugins\\Online -n -d include_path=\'%CD%\\plugins\\Online\\\' -S ' . $address . ":" . $port . ' -f %CD%\\plugins\\Online\\router.php"';
shell_exec('start /MIN cmd /c "%CD%\\bin\\php\\php.exe -t %CD%\\plugins\\Online -n -d include_path=\'%CD%\\plugins\\Online\\\' -d extension=\'%CD%\\bin\\php\\ext\\php_yaml.dll\' -S ' . $address . ":" . $port . ' router.php"');
shell_exec('start /MIN cmd /c "%CD%\\bin\\php\\php.exe -t %CD%\\plugins\\Online -n -d include_path=\'%CD%\\plugins\\Online\\\' -d extension=\'%CD%\\bin\\php\\ext\\php_yaml.dll\' -S ' . $address . ":" . $port . ' tmp/router.php"');
break;
case stristr(PHP_OS, "DAR"):
shell_exec('open -a Terminal "' . $this->path . "bin\\php\\php.exe -t " . $this->path . "plugins\\Online -n -d include_path=\'" . $this->path . "plugins\\Online\\\' -d extension=\'" . $this->path . "bin\\php\\ext\\php_yaml.dll\' -S " . $address . ":" . $port . ' router.php"');
shell_exec('open -a Terminal php -t ' . $this->path . "plugins\\Online -n -d include_path=\'" . $this->path . "plugins\\Online\\\' -d extension=\'" . $this->path . "bin\\php\\ext\\php_yaml.dll\' -S " . $address . ":" . $port . ' tmp/router.php"');
break;
case stristr(PHP_OS, "LINUX"):
shell_exec('gnome-terminal -e "' . $this->path . "bin\\php\\php.exe -t " . $this->path . "plugins\\Online -n -d include_path=\'" . $this->path . "plugins\\Online\\\' -d extension=\'" . $this->path . "bin\\php\\ext\\php_yaml.dll\' -S " . $address . ":" . $port . ' router.php"');
shell_exec('gnome-terminal -e php -t ' . $this->path . "plugins\\Online -n -d include_path=\'" . $this->path . "plugins\\Online\\\' -d extension=\'" . $this->path . "bin\\php\\ext\\php_yaml.dll\' -S " . $address . ":" . $port . ' tmp/router.php"');
break;
}
}

Carregando…
Cancelar
Salvar