mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-16 06:15:09 +00:00
Compare commits
217 Commits
Alpha_1.4d
...
Alpha_1.4d
Author | SHA1 | Date | |
---|---|---|---|
4858c7d82e | |||
ecc9e1d223 | |||
a3cc676ac6 | |||
db7222976e | |||
e1ef86074e | |||
9f4582349d | |||
5dc3fe4fe9 | |||
8446bd2ba5 | |||
9f34d22013 | |||
973d6b5869 | |||
40d2f8a373 | |||
b66f49dc5e | |||
5c150f696c | |||
0246648a2c | |||
532b12c6c0 | |||
34711dc346 | |||
3c231118a6 | |||
a816234ee8 | |||
baa34a7cca | |||
daf1a8266d | |||
4e6ff81674 | |||
84a1b319c8 | |||
16774e66e6 | |||
67b97ade8b | |||
0f04f4bc8a | |||
4c7b172cbe | |||
e91781cbf2 | |||
cf0dc95a76 | |||
9fa7b9b5ea | |||
badbe75d58 | |||
5eee4f9771 | |||
52d28795fa | |||
c675605014 | |||
758a6af678 | |||
6f30cd8a22 | |||
8455e89784 | |||
eee0eb5458 | |||
7e4a191593 | |||
8725ad522f | |||
a610a86579 | |||
24134a06b8 | |||
de6f5309dc | |||
a2e231101e | |||
918024e466 | |||
9e74169d74 | |||
ec93ed3e3d | |||
a7b44e3892 | |||
31b92b392e | |||
2f9494ed52 | |||
7a5c583407 | |||
f60e2860e8 | |||
9c95441402 | |||
1f902d814e | |||
0ab3da88be | |||
e6edace944 | |||
3ee61d5ebb | |||
19d391b9b2 | |||
e462a89189 | |||
d616e73242 | |||
5ec6ccefda | |||
58d7599d6f | |||
0c5f920dfd | |||
67f6482c76 | |||
7b141b0b73 | |||
b17ce16262 | |||
fee7f5060b | |||
76cd164aa4 | |||
582f1540a7 | |||
4d7c953572 | |||
06c01f14c6 | |||
c43431c921 | |||
4e1805ae02 | |||
ac34b9eda0 | |||
3495c79c0c | |||
77799d8f3d | |||
dfdf9ddb45 | |||
86d423ae4d | |||
eff454d103 | |||
51120fdd4f | |||
5242e87026 | |||
269a10fadd | |||
232bf5ebe4 | |||
2904aa06ef | |||
e10c70e776 | |||
2cead226db | |||
2784925a5e | |||
d2a14e8303 | |||
071033ad5c | |||
1e3ed8640c | |||
60a576e541 | |||
eee7e659e9 | |||
7ddfd4394d | |||
f0f2eb9a01 | |||
839f6621eb | |||
7fcaa78de4 | |||
915443b508 | |||
e17a7005a1 | |||
c1846e3bcf | |||
81feff6d0d | |||
9b84d8c248 | |||
26ec562fbf | |||
d10274ca7c | |||
7c68e42a86 | |||
171de939cd | |||
58bded4988 | |||
cb4a970631 | |||
95b5979351 | |||
18d13fdc32 | |||
1a442b793c | |||
765d4f30c7 | |||
2eced89e6f | |||
293102d8c4 | |||
25f5d409f1 | |||
4128b22e85 | |||
487ce00542 | |||
a9cd03da2e | |||
f5fee4c909 | |||
016b08ecf2 | |||
3515a037c5 | |||
d6e413e8ca | |||
f991efd5bc | |||
913c116e7b | |||
8fafb85784 | |||
b0aad89e7a | |||
ce018fd7c8 | |||
afe44e6c6f | |||
e9311f5ceb | |||
b2978133f7 | |||
6b331535c6 | |||
3370052fac | |||
7d8a961374 | |||
e97139919a | |||
81faddafb0 | |||
d0936329aa | |||
9124513584 | |||
e860c339e2 | |||
10c67a57a7 | |||
b10e63b951 | |||
409eeda6ee | |||
bf09c48d62 | |||
aac646d343 | |||
ed90d58e32 | |||
e219f4784c | |||
b5a1c23c50 | |||
14817df2c7 | |||
cc87064915 | |||
aded24e6c6 | |||
a95f8b45f1 | |||
7a3703d8b1 | |||
ca59546ace | |||
2330f363bd | |||
042861b51f | |||
98f42a936e | |||
6d77b0883e | |||
f53d513894 | |||
e6e15ceffa | |||
9d75baf212 | |||
7b45df680e | |||
f93d5339bc | |||
677071e7cb | |||
4fa6fb0546 | |||
0ca614a2c3 | |||
bdfa6c0bc5 | |||
ccb7e86cf1 | |||
03a970e91f | |||
b3e9bb8fec | |||
48b99486b0 | |||
6921e6f2aa | |||
987f54ba08 | |||
09ef1f1721 | |||
3eae7a1875 | |||
21587ae3eb | |||
e5337d8949 | |||
c92a1ba7fe | |||
2066e92f84 | |||
cd943f52a1 | |||
c3424beda9 | |||
b6506d1db8 | |||
4cec3e7e37 | |||
2f3a011ed3 | |||
da9dfabae4 | |||
4c83e9bb56 | |||
090d159766 | |||
14d86339fc | |||
ccf34a9db8 | |||
97af1b6008 | |||
16d33b01f4 | |||
fa318ce706 | |||
accea03d52 | |||
adcdf650a3 | |||
e8e825322b | |||
1b36b10520 | |||
0d37e96678 | |||
2448405e3a | |||
2e773a32ff | |||
d8cba4f045 | |||
07c1ed1c36 | |||
d6711125a9 | |||
b8802edd6d | |||
71bf984e9e | |||
9c9d786194 | |||
bd2cb4b851 | |||
6e77901453 | |||
ebe8a902e5 | |||
304524f6d8 | |||
cb879977d2 | |||
096e238242 | |||
f2d5daffc0 | |||
12275125d2 | |||
3d3b6826e4 | |||
3a8adfe2b8 | |||
14116b6730 | |||
241d3d72af | |||
79e864f4f1 | |||
7812a3c4fc | |||
dbe5e9b4e9 | |||
d743888b8d |
6
.gitignore
vendored
6
.gitignore
vendored
@ -20,4 +20,8 @@ Desktop.ini
|
||||
|
||||
# Mac crap
|
||||
.DS_Store
|
||||
/nbproject/private/
|
||||
/nbproject/private/
|
||||
|
||||
# Sphinx-doc
|
||||
/docs/build/
|
||||
!/docs/requirements.txt
|
||||
|
@ -2,36 +2,37 @@
|
||||
|
||||
# PocketMine-MP Contribution Guidelines
|
||||
|
||||
Before contributing to PocketMine-MP, please read this. Also, take a look if your contribution fits the PocketMine-MP goals below.
|
||||
|
||||
You must follow these guidelines if you wish to contribute to the PocketMine-MP code base, or participate in issue tracking.
|
||||
|
||||
## I have a question
|
||||
* For questions, please refer to the _#pocketmine_ or _#mcpedevs_ IRC channel on Freenode. There is a [WebIRC](http://webchat.freenode.net?channels=pocketmine,mcpedevs&uio=d4) if you want.
|
||||
* You can ask directly to _[@PocketMine](https://twitter.com/PocketMine)_ in Twitter, but don't expect an inmediate reply.
|
||||
* You can ask directly to _[@PocketMine](https://twitter.com/PocketMine)_ in Twitter, but don't expect an immediate reply.
|
||||
* You may use our [Forum](http://forums.pocketmine.net) to ask questions.
|
||||
* We do not accept questions or support requests in our issue tracker.
|
||||
|
||||
## I want to create an issue
|
||||
* First, use the [Issue Search](https://github.com/PocketMine/PocketMine-MP/search?ref=cmdform&type=Issues) to check if anyone has reported it.
|
||||
* Is your issue related to a Plugin? If so, please contact their original author instead of reporting it here.
|
||||
* And no, we won't update a Plugin because you need it.
|
||||
* When reporting, give as much info as you can, and if the Issue is a crash, give the Crash Dump.
|
||||
* Issues should be written in English.
|
||||
## Creating an Issue
|
||||
- First, use the [Issue Search](https://github.com/PocketMine/PocketMine-MP/search?ref=cmdform&type=Issues) to check if anyone has reported it.
|
||||
- If your issue is related to a plugin, you must contact their original author instead of reporting it here.
|
||||
- If your issue is related to a PocketMine official plugin, or our Android application, you must create an issue on that specific repository.
|
||||
- **Support requests are not bugs.** Issues such as "How do I do this" are not bugs and are closed as soon as a collaborator spots it. They are referred to our Forum to seek assistance.
|
||||
- **No generic titles** such as "Question", "Help", "Crash Report" etc. If an issue has a generic title they will either be closed on the spot, or a collaborator will edit it to describe the actual symptom.
|
||||
- Information must be provided in the issue body, not in the title. No tags are allowed in the title, and do not change the title if the issue has been solved.
|
||||
- Similarly, no generic issue reports. It is the issue submitter's responsibility to provide us an issue that is **trackable, debuggable, reproducible, reported professionally and is an actual bug**. If you do not provide us with a summary or instructions on how to reproduce the issue, it is a support request until the actual bug has been found and therefore the issue is closed.
|
||||
|
||||
## I want a new feature / I want to contribute code
|
||||
## Contributing Code
|
||||
* Use the [Pull Request](https://github.com/PocketMine/PocketMine-MP/pull/new) system, your request will be checked and discussed.
|
||||
* __Create a single branch for that pull request__
|
||||
* If you want to be part of PocketMine-MP, we will ask you to.
|
||||
* Code using the syntax as in PocketMine-MP. See below for an example.
|
||||
* The code must be clear and written in English, comments included.
|
||||
* Use descriptive commit titles
|
||||
* __No merge commits are allowed, or multiple features per pull request__
|
||||
|
||||
**Thanks for contributing to PocketMine-MP!**
|
||||
|
||||
__Thanks for contributing to PocketMine-MP!__
|
||||
|
||||
|
||||
|
||||
### Code syntax
|
||||
### Code Syntax
|
||||
|
||||
It is mainly [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md) with a few exceptions.
|
||||
* Opening braces MUST go on the same line.
|
||||
* Opening braces MUST go on the same line, and MUST NOT have spaces before.
|
||||
* `else if` MUST be written as `elseif`. _(It is in PSR-2, but using a SHOULD)_
|
||||
* Control structure keywords or opening braces MUST NOT have one space after them.
|
||||
* Code MUST use tabs for indenting.
|
||||
@ -45,7 +46,7 @@ It is mainly [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accept
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace pocketmine\Example;
|
||||
namespace pocketmine\example;
|
||||
|
||||
class ExampleClass{
|
||||
const EXAMPLE_CLASS_CONSTANT = 1;
|
||||
@ -71,3 +72,55 @@ class ExampleClass{
|
||||
|
||||
}
|
||||
```
|
||||
## Bug Tracking for Collaborators
|
||||
|
||||
### Labels
|
||||
To provide a concise bug tracking environment, prevent the issue tracker from over flowing and to keep support requests out of the bug tracker, PocketMine-MP uses a label scheme a bit different from the default GitHub Issues labels.
|
||||
|
||||
PocketMine-MP uses GitHub Issues Labels. There are a total of 12 labels.
|
||||
|
||||
Note: For future reference, labels must not be longer than 15 letters.
|
||||
|
||||
#### Categories
|
||||
Category labels are prefixed by `C:`. Multiple category labels may be applied to a single issue(but try to keep this to a minimum and do not overuse category labels).
|
||||
- C: Core - This label is applied when the bug results in a fatal crash, or is related to neither Gameplay nor Plugin API.
|
||||
- C: Gameplay - This label is applied when the bug effects the gameplay.
|
||||
- C: API - This label is applied when the bug effects the Plugin API.
|
||||
|
||||
#### Pull Requests
|
||||
Pull Requests are prefixed by `PR:`. Only one label may be applied for a Pull Request.
|
||||
- PR: Bug Fix - This label is applied when the Pull Request fixes a bug.
|
||||
- PR: Contribution - This label is applied when the Pull Request contributes code to PocketMine-MP such as a new feature or an improvement.
|
||||
|
||||
#### Status
|
||||
Status labels show the status of the issue. Multiple status labels may be applied.
|
||||
- Reproduced - This label is applied when the bug has been reproduced, or multiple people are reporting the same issue and symptoms in which case it is automatically assumed that the bug has been reproduced in different environments.
|
||||
- Debugged - This label is applied when the cause of the bug has been found.
|
||||
- Priority - This label is applied when the bug is easy to fix, or if the scale of the bug is global.
|
||||
- Won't Fix - This label is applied if the bug has been decided not be fixed for some reason. e.g. when the bug benefits gameplay. *This label may only be applied to a closed issue.*
|
||||
|
||||
#### Miscellaneous
|
||||
Miscellaneous labels are labels that show status not related to debugging that bug. The To-Do label and the Mojang label may not be applied to a single issue at the same time.
|
||||
- To-Do - This label is applied when the issue is not a bug, but a feature request or a list of features to be implemented that count towards a milestone.
|
||||
- Mojang - This label is applied when the issue is suspected of being caused by the Minecraft: Pocket Edition client, but has not been confirmed.
|
||||
- Invalid - This label is applied when the issue is reporting a false bug that works as intended, a support request, etc. *This label may only be applied to a closed issue.*
|
||||
|
||||
### Closing Issues
|
||||
To keep the bug tracker clear of non-related issues and to prevent it from overflowing, **issues must be closed as soon as possible** (This may sound unethical, but it is MUCH better than having the BUG TRACKER filled with SUPPORT REQUESTS and "I NEED HELP").
|
||||
|
||||
If an issue does not conform to the "Creating an Issue" guidelines above, the issue should be closed.
|
||||
|
||||
### Milestones
|
||||
PocketMine-MP uses GitHub Milestones to set a goal for a new release. A milestone is set on the following occasions.
|
||||
|
||||
- A new Beta release
|
||||
- A new Stable release
|
||||
|
||||
A milestone must use the following format:
|
||||
```
|
||||
Alpha_<version_number> [release_title][release_version]
|
||||
```
|
||||
For example:
|
||||
```
|
||||
Alpha_1.4 beta2
|
||||
```
|
||||
|
@ -21,6 +21,8 @@ __PocketMine-MP is a free, open-source software that creates Minecraft: Pocket E
|
||||
|
||||
### [Forums](http://forums.pocketmine.net/)
|
||||
|
||||
### [Documentation](http://pocketmine-mp.readthedocs.org/)
|
||||
|
||||
### [Plugin Repository](http://plugins.pocketmine.net/)
|
||||
|
||||
<!--## [FAQ: Frequently Asked Questions](https://github.com/PocketMine/PocketMine-MP/wiki/Frequently-Asked-Questions)-->
|
||||
|
247
src/pocketmine/CrashDump.php
Normal file
247
src/pocketmine/CrashDump.php
Normal file
@ -0,0 +1,247 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine;
|
||||
|
||||
use pocketmine\network\protocol\Info;
|
||||
use pocketmine\plugin\PluginLoadOrder;
|
||||
use pocketmine\utils\Utils;
|
||||
use pocketmine\utils\VersionString;
|
||||
use raklib\RakLib;
|
||||
|
||||
class CrashDump{
|
||||
|
||||
/** @var Server */
|
||||
private $server;
|
||||
private $fp;
|
||||
private $time;
|
||||
private $data = [];
|
||||
private $encodedData = null;
|
||||
private $path;
|
||||
|
||||
public function __construct(Server $server){
|
||||
$this->time = time();
|
||||
$this->server = $server;
|
||||
$this->path = $this->server->getDataPath() . "CrashDump_" . date("D_M_j-H.i.s-T_Y", $this->time) . ".log";
|
||||
$this->fp = fopen($this->path, "wb");
|
||||
$this->data["time"] = $this->time;
|
||||
$this->addLine("PocketMine-MP Crash Dump " . date("D M j H:i:s T Y", $this->time));
|
||||
$this->addLine();
|
||||
$this->baseCrash();
|
||||
$this->generalData();
|
||||
$this->pluginsData();
|
||||
|
||||
$this->extraData();
|
||||
|
||||
$this->encodeData();
|
||||
}
|
||||
|
||||
public function getPath(){
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
public function getEncodedData(){
|
||||
return $this->encodedData;
|
||||
}
|
||||
|
||||
public function getData(){
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
private function encodeData(){
|
||||
$this->addLine();
|
||||
$this->addLine("----------------------REPORT THE DATA BELOW THIS LINE-----------------------");
|
||||
$this->addLine();
|
||||
$this->addLine("===BEGIN CRASH DUMP===");
|
||||
$this->encodedData = zlib_encode(json_encode($this->data, JSON_UNESCAPED_SLASHES), ZLIB_ENCODING_DEFLATE, 9);
|
||||
foreach(str_split(base64_encode($this->encodedData), 76) as $line){
|
||||
$this->addLine($line);
|
||||
}
|
||||
$this->addLine("===END CRASH DUMP===");
|
||||
}
|
||||
|
||||
private function pluginsData(){
|
||||
if(class_exists("pocketmine\\plugin\\PluginManager", false)){
|
||||
$this->addLine();
|
||||
$this->addLine("Loaded plugins:");
|
||||
$this->data["plugins"] = [];
|
||||
foreach($this->server->getPluginManager()->getPlugins() as $p){
|
||||
$d = $p->getDescription();
|
||||
$this->data["plugins"][$d->getName()] = [
|
||||
"name" => $d->getName(),
|
||||
"version" => $d->getVersion(),
|
||||
"authors" => $d->getAuthors(),
|
||||
"api" => $d->getCompatibleApis(),
|
||||
"enabled" => $p->isEnabled(),
|
||||
"depends" => $d->getDepend(),
|
||||
"softDepends" => $d->getSoftDepend(),
|
||||
"main" => $d->getMain(),
|
||||
"load" => $d->getOrder() === PluginLoadOrder::POSTWORLD ? "POSTWORLD" : "STARTUP",
|
||||
"website" => $d->getWebsite()
|
||||
];
|
||||
$this->addLine($d->getName() . " " . $d->getVersion() . " by " . implode(", ", $d->getAuthors()) . " for API(s) " . implode(", ", $d->getCompatibleApis()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function extraData(){
|
||||
global $arguments;
|
||||
|
||||
if($this->server->getProperty("auto-report.send-settings", true) !== false){
|
||||
$this->data["parameters"] = (array) $arguments;
|
||||
$this->data["server.properties"] = @file_get_contents($this->server->getDataPath() . "server.properties");
|
||||
$this->data["server.properties"] = preg_replace("#^rcon\\.password=(.*)$#m", "rcon.password=******", $this->data["server.properties"]);
|
||||
$this->data["pocketmine.yml"] = @file_get_contents($this->server->getDataPath() . "pocketmine.yml");
|
||||
}else{
|
||||
$this->data["pocketmine.yml"] = "";
|
||||
$this->data["server.properties"] = "";
|
||||
$this->data["parameters"] = [];
|
||||
}
|
||||
$extensions = [];
|
||||
foreach(get_loaded_extensions() as $ext){
|
||||
$extensions[$ext] = phpversion($ext);
|
||||
}
|
||||
$this->data["extensions"] = $extensions;
|
||||
|
||||
if($this->server->getProperty("auto-report.send-phpinfo", true) !== false){
|
||||
ob_start();
|
||||
phpinfo();
|
||||
$this->data["phpinfo"] = ob_get_contents();
|
||||
ob_end_clean();
|
||||
}
|
||||
}
|
||||
|
||||
private function baseCrash(){
|
||||
global $lastExceptionError, $lastError;
|
||||
|
||||
if(isset($lastExceptionError)){
|
||||
$error = $lastExceptionError;
|
||||
}else{
|
||||
$error = (array) error_get_last();
|
||||
$error["trace"] = getTrace(4);
|
||||
$errorConversion = array(
|
||||
E_ERROR => "E_ERROR",
|
||||
E_WARNING => "E_WARNING",
|
||||
E_PARSE => "E_PARSE",
|
||||
E_NOTICE => "E_NOTICE",
|
||||
E_CORE_ERROR => "E_CORE_ERROR",
|
||||
E_CORE_WARNING => "E_CORE_WARNING",
|
||||
E_COMPILE_ERROR => "E_COMPILE_ERROR",
|
||||
E_COMPILE_WARNING => "E_COMPILE_WARNING",
|
||||
E_USER_ERROR => "E_USER_ERROR",
|
||||
E_USER_WARNING => "E_USER_WARNING",
|
||||
E_USER_NOTICE => "E_USER_NOTICE",
|
||||
E_STRICT => "E_STRICT",
|
||||
E_RECOVERABLE_ERROR => "E_RECOVERABLE_ERROR",
|
||||
E_DEPRECATED => "E_DEPRECATED",
|
||||
E_USER_DEPRECATED => "E_USER_DEPRECATED",
|
||||
);
|
||||
$error["fullFile"] = $error["file"];
|
||||
$error["file"] = cleanPath($error["file"]);
|
||||
$error["type"] = isset($errorConversion[$error["type"]]) ? $errorConversion[$error["type"]] : $error["type"];
|
||||
if(($pos = strpos($error["message"], "\n")) !== false){
|
||||
$error["message"] = substr($error["message"], 0, $pos);
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($lastError)){
|
||||
$this->data["lastError"] = $lastError;
|
||||
}
|
||||
|
||||
$this->data["error"] = $error;
|
||||
unset($this->data["error"]["fullFile"]);
|
||||
unset($this->data["error"]["trace"]);
|
||||
$this->addLine("Error: " . $error["message"]);
|
||||
$this->addLine("File: " . $error["file"]);
|
||||
$this->addLine("Line: " . $error["line"]);
|
||||
$this->addLine("Type: " . $error["type"]);
|
||||
|
||||
if(strpos($error["file"], "src/pocketmine/") === false and strpos($error["file"], "src/raklib/") === false and file_exists($error["fullFile"])){
|
||||
$this->addLine();
|
||||
$this->addLine("THIS CRASH WAS CAUSED BY A PLUGIN");
|
||||
$this->data["plugin"] = true;
|
||||
|
||||
$reflection = new \ReflectionClass("pocketmine\\plugin\\PluginBase");
|
||||
$file = $reflection->getProperty("file");
|
||||
$file->setAccessible(true);
|
||||
foreach($this->server->getPluginManager()->getPlugins() as $plugin){
|
||||
$filePath = \pocketmine\cleanPath($file->getValue($plugin));
|
||||
if(strpos($error["file"], $filePath) === 0){
|
||||
$this->data["plugin"] = $plugin->getName();
|
||||
$this->addLine("BAD PLUGIN: " . $plugin->getDescription()->getFullName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$this->data["plugin"] = false;
|
||||
}
|
||||
|
||||
$this->addLine();
|
||||
$this->addLine("Code:");
|
||||
$this->data["code"] = [];
|
||||
|
||||
if($this->server->getProperty("auto-report.send-code", true) !== false){
|
||||
$file = @file($error["fullFile"], FILE_IGNORE_NEW_LINES);
|
||||
for($l = max(0, $error["line"] - 10); $l < $error["line"] + 10; ++$l){
|
||||
$this->addLine("[" . ($l + 1) . "] " . @$file[$l]);
|
||||
$this->data["code"][$l + 1] = @$file[$l];
|
||||
}
|
||||
}
|
||||
|
||||
$this->addLine();
|
||||
$this->addLine("Backtrace:");
|
||||
foreach(($this->data["trace"] = $error["trace"]) as $line){
|
||||
$this->addLine($line);
|
||||
}
|
||||
$this->addLine();
|
||||
}
|
||||
|
||||
private function generalData(){
|
||||
$version = new VersionString();
|
||||
$this->data["general"] = [];
|
||||
$this->data["general"]["version"] = $version->get(false);
|
||||
$this->data["general"]["build"] = $version->getBuild();
|
||||
$this->data["general"]["protocol"] = Info::CURRENT_PROTOCOL;
|
||||
$this->data["general"]["api"] = \pocketmine\API_VERSION;
|
||||
$this->data["general"]["git"] = \pocketmine\GIT_COMMIT;
|
||||
$this->data["general"]["raklib"] = RakLib::VERSION;
|
||||
$this->data["general"]["uname"] = php_uname("a");
|
||||
$this->data["general"]["php"] = phpversion();
|
||||
$this->data["general"]["zend"] = zend_version();
|
||||
$this->data["general"]["php_os"] = PHP_OS;
|
||||
$this->data["general"]["os"] = Utils::getOS();
|
||||
$this->addLine("PocketMine-MP version: " . $version->get(false) . " #" . $version->getNumber() . " [Protocol " . Info::CURRENT_PROTOCOL . "; API " . API_VERSION . "]");
|
||||
$this->addLine("Git commit: " . GIT_COMMIT);
|
||||
$this->addLine("uname -a: " . php_uname("a"));
|
||||
$this->addLine("PHP Version: " . phpversion());
|
||||
$this->addLine("Zend version: " . zend_version());
|
||||
$this->addLine("OS : " . PHP_OS . ", " . Utils::getOS());
|
||||
}
|
||||
|
||||
public function addLine($line = ""){
|
||||
fwrite($this->fp, $line . PHP_EOL);
|
||||
}
|
||||
|
||||
public function add($str){
|
||||
fwrite($this->fp, $str);
|
||||
}
|
||||
|
||||
}
|
@ -23,10 +23,12 @@ namespace pocketmine;
|
||||
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\command\CommandSender;
|
||||
use pocketmine\entity\Arrow;
|
||||
use pocketmine\entity\DroppedItem;
|
||||
use pocketmine\entity\Entity;
|
||||
use pocketmine\entity\Human;
|
||||
use pocketmine\entity\Living;
|
||||
use pocketmine\event\block\SignChangeEvent;
|
||||
use pocketmine\event\entity\EntityDamageByEntityEvent;
|
||||
use pocketmine\event\entity\EntityDamageEvent;
|
||||
use pocketmine\event\inventory\InventoryCloseEvent;
|
||||
@ -57,6 +59,7 @@ use pocketmine\inventory\InventoryHolder;
|
||||
use pocketmine\inventory\SimpleTransactionGroup;
|
||||
use pocketmine\inventory\StonecutterShapelessRecipe;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\level\format\LevelProvider;
|
||||
use pocketmine\level\Level;
|
||||
use pocketmine\level\Position;
|
||||
use pocketmine\math\Vector3;
|
||||
@ -64,6 +67,9 @@ use pocketmine\metadata\MetadataValue;
|
||||
use pocketmine\nbt\NBT;
|
||||
use pocketmine\nbt\tag\Byte;
|
||||
use pocketmine\nbt\tag\Compound;
|
||||
use pocketmine\nbt\tag\Double;
|
||||
use pocketmine\nbt\tag\Enum;
|
||||
use pocketmine\nbt\tag\Float;
|
||||
use pocketmine\nbt\tag\Int;
|
||||
use pocketmine\nbt\tag\String;
|
||||
use pocketmine\network\protocol\AdventureSettingsPacket;
|
||||
@ -80,7 +86,6 @@ use pocketmine\network\protocol\SetSpawnPositionPacket;
|
||||
use pocketmine\network\protocol\SetTimePacket;
|
||||
use pocketmine\network\protocol\StartGamePacket;
|
||||
use pocketmine\network\protocol\TakeItemEntityPacket;
|
||||
use pocketmine\network\protocol\UnloadChunkPacket;
|
||||
use pocketmine\network\protocol\UpdateBlockPacket;
|
||||
use pocketmine\network\SourceInterface;
|
||||
use pocketmine\permission\PermissibleBase;
|
||||
@ -104,7 +109,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
const SPECTATOR = 3;
|
||||
const VIEW = Player::SPECTATOR;
|
||||
|
||||
const MAX_QUEUE = 2048;
|
||||
const SURVIVAL_SLOTS = 36;
|
||||
const CREATIVE_SLOTS = 112;
|
||||
|
||||
@ -136,7 +140,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
protected $lastMovement = 0;
|
||||
protected $forceMovement = false;
|
||||
protected $connected = true;
|
||||
protected $clientID;
|
||||
protected $ip;
|
||||
protected $removeFormat = true;
|
||||
protected $port;
|
||||
@ -145,6 +148,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
protected $displayName;
|
||||
protected $startAction = false;
|
||||
protected $sleeping = false;
|
||||
protected $clientID = null;
|
||||
|
||||
public $usedChunks = [];
|
||||
protected $loadQueue = [];
|
||||
@ -160,7 +164,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
private $inAction = false;
|
||||
|
||||
|
||||
|
||||
private $needACK = [];
|
||||
|
||||
/**
|
||||
@ -282,7 +285,9 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
return;
|
||||
}
|
||||
unset($this->hiddenPlayers[$player->getName()]);
|
||||
$player->spawnTo($this);
|
||||
if($player->isOnline()){
|
||||
$player->spawnTo($this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -376,7 +381,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
|
||||
/**
|
||||
* @param SourceInterface $interface
|
||||
* @param integer $clientID
|
||||
* @param null $clientID
|
||||
* @param string $ip
|
||||
* @param integer $port
|
||||
*/
|
||||
@ -387,16 +392,14 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$this->namedtag = new Compound();
|
||||
$this->server = Server::getInstance();
|
||||
$this->lastBreak = microtime(true);
|
||||
$this->clientID = $clientID;
|
||||
$this->ip = $ip;
|
||||
$this->port = $port;
|
||||
$this->clientID = $clientID;
|
||||
$this->spawnPosition = $this->server->getDefaultLevel()->getSafeSpawn();
|
||||
$this->timeout = microtime(true) + 20;
|
||||
$this->gamemode = $this->server->getGamemode();
|
||||
$this->setLevel($this->server->getDefaultLevel(), true);
|
||||
$this->viewDistance = $this->server->getViewDistance();
|
||||
|
||||
$this->server->getLogger()->debug("New Session started with " . $ip . ":" . $port . ", Client ID " . $this->clientID);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -499,10 +502,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$entity->despawnFrom($this);
|
||||
}
|
||||
}
|
||||
/*$pk = new UnloadChunkPacket();
|
||||
$pk->chunkX = $x;
|
||||
$pk->chunkZ = $z;
|
||||
$this->dataPacket($pk);*/
|
||||
|
||||
$this->getLevel()->freeChunk($x, $z, $this);
|
||||
unset($this->usedChunks[$index]);
|
||||
|
||||
@ -519,7 +519,8 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
return $this->spawnPosition;
|
||||
}else{
|
||||
$level = $this->server->getDefaultLevel();
|
||||
return $level->getSpawn();
|
||||
|
||||
return $level->getSafeSpawn();
|
||||
}
|
||||
}
|
||||
|
||||
@ -601,7 +602,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$this->usedChunks[$index] = [false, 0];
|
||||
|
||||
$this->getLevel()->useChunk($X, $Z, $this);
|
||||
$this->getLevel()->requestChunk($X, $Z, $this);
|
||||
$this->getLevel()->requestChunk($X, $Z, $this, LevelProvider::ORDER_ZXY);
|
||||
}
|
||||
}
|
||||
|
||||
@ -625,10 +626,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
|
||||
$this->spawned = true;
|
||||
|
||||
$this->sendSettings();
|
||||
$this->inventory->sendContents($this);
|
||||
$this->inventory->sendArmorContents($this);
|
||||
|
||||
$this->blocked = false;
|
||||
|
||||
$pk = new SetTimePacket;
|
||||
@ -643,6 +640,10 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
|
||||
$this->teleport($ev->getRespawnPosition());
|
||||
|
||||
$this->sendSettings();
|
||||
$this->inventory->sendContents($this);
|
||||
$this->inventory->sendArmorContents($this);
|
||||
|
||||
$this->spawnToAll();
|
||||
|
||||
$this->server->getPluginManager()->callEvent($ev = new PlayerJoinEvent($this, TextFormat::YELLOW . $this->getName() . " joined the game"));
|
||||
@ -668,24 +669,28 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
return false;
|
||||
}
|
||||
|
||||
$radiusSquared = $this->viewDistance / M_PI;
|
||||
$radius = ceil(sqrt($radiusSquared));
|
||||
|
||||
$newOrder = [];
|
||||
$lastChunk = $this->usedChunks;
|
||||
$centerX = $this->x >> 4;
|
||||
$centerZ = $this->z >> 4;
|
||||
$startX = $centerX - $this->viewDistance;
|
||||
$startZ = $centerZ - $this->viewDistance;
|
||||
$finalX = $centerX + $this->viewDistance;
|
||||
$finalZ = $centerZ + $this->viewDistance;
|
||||
$generateQueue = new ReversePriorityQueue();
|
||||
for($X = $startX; $X <= $finalX; ++$X){
|
||||
for($Z = $startZ; $Z <= $finalZ; ++$Z){
|
||||
$distance = abs($X - $centerX) + abs($Z - $centerZ);
|
||||
$index = Level::chunkHash($X, $Z);
|
||||
for($X = -$radius; $X <= $radius; ++$X){
|
||||
for($Z = -$radius; $Z <= $radius; ++$Z){
|
||||
$distance = ($X * $X) + ($Z * $Z);
|
||||
if($distance > $radiusSquared){
|
||||
continue;
|
||||
}
|
||||
$chunkX = $X + $centerX;
|
||||
$chunkZ = $Z + $centerZ;
|
||||
$index = Level::chunkHash($chunkX, $chunkZ);
|
||||
if(!isset($this->usedChunks[$index])){
|
||||
if($this->getLevel()->isChunkPopulated($X, $Z)){
|
||||
if($this->getLevel()->isChunkPopulated($chunkX, $chunkZ)){
|
||||
$newOrder[$index] = $distance;
|
||||
}else{
|
||||
$generateQueue->insert([$X, $Z], $distance);
|
||||
$generateQueue->insert([$chunkX, $chunkZ], $distance);
|
||||
}
|
||||
}
|
||||
unset($lastChunk[$index]);
|
||||
@ -693,7 +698,18 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
}
|
||||
|
||||
asort($newOrder);
|
||||
$this->loadQueue = $newOrder;
|
||||
if(count($newOrder) > $this->viewDistance){
|
||||
$count = 0;
|
||||
$this->loadQueue = [];
|
||||
foreach($newOrder as $k => $distance){
|
||||
$this->loadQueue[$k] = $distance;
|
||||
if(++$count > $this->viewDistance){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$this->loadQueue = $newOrder;
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
while(count($this->loadQueue) < 3 and $generateQueue->count() > 0 and $i < 16){
|
||||
@ -793,7 +809,8 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$this->updateMetadata();
|
||||
}*/
|
||||
$this->setSpawn($pos);
|
||||
$this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "checkSleep")), 60);
|
||||
$this->tasks[] = $this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "checkSleep")), 60);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -956,7 +973,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$pk = new StartGamePacket;
|
||||
$pk->seed = $this->getLevel()->getSeed();
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
$pk->y = $this->y + 1.62;
|
||||
$pk->z = $this->z;
|
||||
$pk->spawnX = (int) $spawnPosition->x;
|
||||
$pk->spawnY = (int) $spawnPosition->y;
|
||||
@ -1324,7 +1341,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$pk = new MovePlayerPacket();
|
||||
$pk->eid = 0;
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
$pk->y = $this->y + $this->height; //teleport from head
|
||||
$pk->z = $this->z;
|
||||
$pk->bodyYaw = $this->yaw;
|
||||
$pk->pitch = $this->pitch;
|
||||
@ -1346,24 +1363,42 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
|
||||
if(($this->gamemode & 0x01) === 1){ //Creative mode match
|
||||
$item = Item::get($packet->item, $packet->meta, 1);
|
||||
$packet->slot = $this->getCreativeBlock($item);
|
||||
$slot = $this->getCreativeBlock($item);
|
||||
}else{
|
||||
$item = $this->inventory->getItem($packet->slot);
|
||||
$slot = $packet->slot;
|
||||
}
|
||||
|
||||
if(!isset($item) or $packet->slot === -1 or $item->getID() !== $packet->item or $item->getDamage() !== $packet->meta){
|
||||
if($packet->slot === -1){ //Air
|
||||
if(($this->gamemode & 0x01) === Player::CREATIVE){
|
||||
$found = false;
|
||||
for($i = 0; $i < $this->inventory->getHotbarSize(); ++$i){
|
||||
if($this->inventory->getHotbarSlotIndex($i) === -1){
|
||||
$this->inventory->setHeldItemIndex($i);
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!$found){ //couldn't find a empty slot (error)
|
||||
$this->inventory->sendContents($this);
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
$this->inventory->setHeldItemSlot($packet->slot); //set Air
|
||||
}
|
||||
}elseif(!isset($item) or $slot === -1 or $item->getID() !== $packet->item or $item->getDamage() !== $packet->meta){ // packet error or not implemented
|
||||
$this->inventory->sendContents($this);
|
||||
break;
|
||||
}elseif(($this->gamemode & 0x01) === Player::CREATIVE){
|
||||
$item = Item::get(
|
||||
Block::$creative[$packet->slot][0],
|
||||
Block::$creative[$packet->slot][1],
|
||||
Block::$creative[$slot][0],
|
||||
Block::$creative[$slot][1],
|
||||
1
|
||||
);
|
||||
$this->inventory->setHeldItemSlot(0);
|
||||
$this->inventory->setItemInHand($item);
|
||||
$this->inventory->setHeldItemIndex($packet->slot);
|
||||
}else{
|
||||
$this->inventory->setHeldItemSlot($packet->slot);
|
||||
$this->inventory->setHeldItemSlot($slot);
|
||||
}
|
||||
|
||||
$this->inventory->sendHeldItem($this->hasSpawned);
|
||||
@ -1411,11 +1446,11 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
if($blockVector->distance($this) > 10){
|
||||
|
||||
}elseif(($this->gamemode & 0x01) === 1){
|
||||
$item = $this->inventory->getItemInHand();;
|
||||
$item = $this->inventory->getItemInHand();
|
||||
if($this->getLevel()->useItemOn($blockVector, $item, $packet->face, $packet->fx, $packet->fy, $packet->fz, $this) === true){
|
||||
break;
|
||||
}
|
||||
}elseif($this->inventory->getItemInHand()->getID() !== $packet->item or ($this->inventory->getItemInHand()->isTool() === false and $this->inventory->getItemInHand()->getDamage() !== $packet->meta)){
|
||||
}elseif($this->inventory->getItemInHand()->getID() !== $packet->item or (($damage = $this->inventory->getItemInHand()->getDamage()) !== $packet->meta and $damage !== null)){
|
||||
$this->inventory->sendHeldItem($this);
|
||||
}else{
|
||||
$item = clone $this->inventory->getItemInHand();
|
||||
@ -1461,70 +1496,34 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$packet->eid = $this->id;
|
||||
|
||||
switch($packet->action){
|
||||
/*case 5: //Shot arrow
|
||||
if($this->entity->inAction === true){
|
||||
if($this->getSlot($this->getCurrentEquipment())->getID() === BOW){
|
||||
if($this->startAction !== false){
|
||||
$time = microtime(true) - $this->startAction;
|
||||
$d = array(
|
||||
"x" => $this->entity->x,
|
||||
"y" => $this->entity->y + 1.6,
|
||||
"z" => $this->entity->z,
|
||||
);
|
||||
$e = $this->server->api->entity->add($this->getLevel(), ENTITY_OBJECT, OBJECT_ARROW, $d);
|
||||
$e->yaw = $this->entity->yaw;
|
||||
$e->pitch = $this->entity->pitch;
|
||||
$rotation = ($this->entity->yaw - 90) % 360;
|
||||
if($rotation < 0){
|
||||
$rotation = (360 + $rotation);
|
||||
}
|
||||
$rotation = ($rotation + 180);
|
||||
if($rotation >= 360){
|
||||
$rotation = ($rotation - 360);
|
||||
}
|
||||
$X = 1;
|
||||
$Z = 1;
|
||||
$overturn = false;
|
||||
if(0 <= $rotation and $rotation < 90){
|
||||
|
||||
}elseif(90 <= $rotation and $rotation < 180){
|
||||
$rotation -= 90;
|
||||
$X = (-1);
|
||||
$overturn = true;
|
||||
}elseif(180 <= $rotation and $rotation < 270){
|
||||
$rotation -= 180;
|
||||
$X = (-1);
|
||||
$Z = (-1);
|
||||
}elseif(270 <= $rotation and $rotation < 360){
|
||||
$rotation -= 270;
|
||||
$Z = (-1);
|
||||
$overturn = true;
|
||||
}
|
||||
$rad = deg2rad($rotation);
|
||||
$pitch = (-($this->entity->pitch));
|
||||
$speed = 80;
|
||||
$speedY = (sin(deg2rad($pitch)) * $speed);
|
||||
$speedXZ = (cos(deg2rad($pitch)) * $speed);
|
||||
if($overturn){
|
||||
$speedX = (sin($rad) * $speedXZ * $X);
|
||||
$speedZ = (cos($rad) * $speedXZ * $Z);
|
||||
}
|
||||
else{
|
||||
$speedX = (cos($rad) * $speedXZ * $X);
|
||||
$speedZ = (sin($rad) * $speedXZ * $Z);
|
||||
}
|
||||
$e->speedX = $speedX;
|
||||
$e->speedZ = $speedZ;
|
||||
$e->speedY = $speedY;
|
||||
$e->spawnToAll();
|
||||
}
|
||||
}
|
||||
case 5: //Shot arrow
|
||||
//if($this->entity->inAction === true){
|
||||
if($this->inventory->getItemInHand()->getID() === Item::BOW){
|
||||
$f = 1 * 2 * 1.5;
|
||||
$nbt = new Compound("", [
|
||||
"Pos" => new Enum("Pos", [
|
||||
new Double("", $this->x),
|
||||
new Double("", $this->y + 1.62),
|
||||
new Double("", $this->z)
|
||||
]),
|
||||
"Motion" => new Enum("Motion", [
|
||||
new Double("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI) * $f),
|
||||
new Double("", -sin($this->pitch / 180 * M_PI) * $f),
|
||||
new Double("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI) * $f)
|
||||
]),
|
||||
"Rotation" => new Enum("Rotation", [
|
||||
new Float("", $this->yaw),
|
||||
new Float("", $this->pitch)
|
||||
]),
|
||||
]);
|
||||
$arrow = new Arrow($this->chunk, $nbt);
|
||||
$arrow->spawnToAll();
|
||||
}
|
||||
//}
|
||||
$this->startAction = false;
|
||||
$this->entity->inAction = false;
|
||||
$this->entity->updateMetadata();
|
||||
//$this->entity->inAction = false;
|
||||
//$this->entity->updateMetadata();
|
||||
break;
|
||||
*/
|
||||
case 6: //get out of the bed
|
||||
$this->stopSleep();
|
||||
break;
|
||||
@ -1613,8 +1612,17 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
|
||||
$target = $this->getLevel()->getEntity($packet->target);
|
||||
|
||||
$cancelled = false;
|
||||
|
||||
if(
|
||||
$target instanceof Player and
|
||||
$this->server->getConfigBoolean("pvp", true) === false
|
||||
|
||||
){
|
||||
$cancelled = true;
|
||||
}
|
||||
|
||||
if($target instanceof Entity and $this->getGamemode() !== Player::VIEW and $this->blocked === false and $this->dead !== true and $target->dead !== true){
|
||||
$cancelled = false;
|
||||
$item = $this->inventory->getItemInHand();
|
||||
$damageTable = [
|
||||
Item::WOODEN_SWORD => 4,
|
||||
@ -1643,7 +1651,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
];
|
||||
|
||||
$damage = [
|
||||
EntityDamageByEntityEvent::MODIFIER_BASE => isset($damageTable[$item->getID()]) ? $damageTable[$item->getID()] : 1,
|
||||
EntityDamageEvent::MODIFIER_BASE => isset($damageTable[$item->getID()]) ? $damageTable[$item->getID()] : 1,
|
||||
];
|
||||
|
||||
if($this->distance($target) > 8){
|
||||
@ -1651,7 +1659,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
}elseif($target instanceof Player){
|
||||
if(($target->getGamemode() & 0x01) > 0){
|
||||
break;
|
||||
}elseif($this->server->getConfigBoolean("pvp") === false or $this->server->getDifficulty() === 0){
|
||||
}elseif($this->server->getConfigBoolean("pvp") !== true or $this->server->getDifficulty() === 0){
|
||||
$cancelled = true;
|
||||
}
|
||||
|
||||
@ -1703,7 +1711,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
|
||||
if($item->isTool() and ($this->gamemode & 0x01) === 0){
|
||||
if($item->useOn($target) and $item->getDamage() >= $item->getMaxDurability()){
|
||||
$this->inventory->setItemInHand(Item::get(Item::AIR, 0 ,1));
|
||||
$this->inventory->setItemInHand(Item::get(Item::AIR, 0, 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1732,7 +1740,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
|
||||
$this->craftingType = 0;
|
||||
|
||||
$this->server->getPluginManager()->callEvent($ev = new PlayerRespawnEvent($this, $this->spawnPosition));
|
||||
$this->server->getPluginManager()->callEvent($ev = new PlayerRespawnEvent($this, $this->getSpawn()));
|
||||
|
||||
$this->teleport($ev->getRespawnPosition());
|
||||
//$this->entity->fire = 0;
|
||||
@ -1883,6 +1891,14 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
if($packet->slot > $this->inventory->getSize()){
|
||||
break;
|
||||
}
|
||||
if(($this->gamemode & 0x01) === Player::CREATIVE){
|
||||
if($this->getCreativeBlock($packet->item) !== -1){
|
||||
$this->inventory->setItem($packet->slot, $packet->item);
|
||||
$this->inventory->setHotbarSlotIndex($packet->slot, $packet->slot); //links $hotbar[$packet->slot] to $slots[$packet->slot]
|
||||
}
|
||||
}else{
|
||||
$this->inventory->setHeldItemSlot($packet->slot);
|
||||
}
|
||||
$transaction = new BaseTransaction($this->inventory, $packet->slot, $this->inventory->getItem($packet->slot), $packet->item);
|
||||
}elseif(isset($this->windowIndex[$packet->windowid])){
|
||||
$this->craftingType = 0;
|
||||
@ -1996,24 +2012,33 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
}
|
||||
$this->craftingType = 0;
|
||||
|
||||
$t = $this->getLevel()->getTile(new Vector3($packet->x, $packet->y, $packet->z));
|
||||
$t = $this->getLevel()->getTile($v = new Vector3($packet->x, $packet->y, $packet->z));
|
||||
if($t instanceof Sign){
|
||||
if(!isset($t->namedtag->Creator) or $t->namedtag["Creator"] !== $this->username){
|
||||
$nbt = new NBT(NBT::LITTLE_ENDIAN);
|
||||
$nbt->read($packet->namedtag);
|
||||
$nbt = $nbt->getData();
|
||||
if($nbt["id"] !== Tile::SIGN){
|
||||
$t->spawnTo($this);
|
||||
}else{
|
||||
$nbt = new NBT(NBT::LITTLE_ENDIAN);
|
||||
$nbt->read($packet->namedtag);
|
||||
$nbt = $nbt->getData();
|
||||
if($nbt["id"] !== Tile::SIGN){
|
||||
$t->spawnTo($this);
|
||||
$ev = new SignChangeEvent($this->getLevel()->getBlock($v), $this, [
|
||||
$nbt["Text1"], $nbt["Text2"], $nbt["Text3"], $nbt["Text4"]
|
||||
]);
|
||||
|
||||
if(!isset($t->namedtag->Creator) or $t->namedtag["Creator"] !== $this->username){
|
||||
$ev->setCancelled(true);
|
||||
}
|
||||
|
||||
$this->server->getPluginManager()->callEvent($ev);
|
||||
|
||||
if(!$ev->isCancelled()){
|
||||
$t->setText($ev->getLine(0), $ev->getLine(1), $ev->getLine(2), $ev->getLine(3));
|
||||
}else{
|
||||
$t->setText($nbt["Text1"], $nbt["Text2"], $nbt["Text3"], $nbt["Text4"]);
|
||||
$t->spawnTo($this);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$this->server->getLogger()->debug("Unhandled " . $packet->pid() . " data packet for " . $this->username . " (" . $this->clientID . "): " . print_r($packet, true));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2028,7 +2053,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
public function kick($reason = ""){
|
||||
$this->server->getPluginManager()->callEvent($ev = new PlayerKickEvent($this, $reason, TextFormat::YELLOW . $this->username . " has left the game"));
|
||||
if(!$ev->isCancelled()){
|
||||
$message = "Kicked by admin.". ($reason !== "" ? " Reason: ". $reason : "");
|
||||
$message = "Kicked by admin." . ($reason !== "" ? " Reason: " . $reason : "");
|
||||
$this->sendMessage($message);
|
||||
$this->close($ev->getQuitMessage(), $message);
|
||||
|
||||
@ -2068,7 +2093,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$pk = new MessagePacket;
|
||||
$pk->source = ""; //Do not use this ;)
|
||||
$pk->message = $this->removeFormat === false ? $m : TextFormat::clean($m);
|
||||
$this->dataPacket($pk);
|
||||
$this->directDataPacket($pk);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2078,11 +2103,17 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
* @param string $reason Reason showed in console
|
||||
*/
|
||||
public function close($message = "", $reason = "generic reason"){
|
||||
|
||||
foreach($this->tasks as $task){
|
||||
$task->cancel();
|
||||
}
|
||||
$this->tasks = [];
|
||||
|
||||
if($this->connected === true){
|
||||
parent::close();
|
||||
if($this->username != ""){
|
||||
$this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message));
|
||||
if($this->loggedIn === true){
|
||||
parent::close();
|
||||
$this->save();
|
||||
}
|
||||
}
|
||||
@ -2092,10 +2123,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$this->server->removePlayer($this);
|
||||
$this->getLevel()->freeAllChunks($this);
|
||||
$this->loggedIn = false;
|
||||
foreach($this->tasks as $task){
|
||||
$task->cancel();
|
||||
}
|
||||
$this->tasks = [];
|
||||
|
||||
if(isset($ev) and $this->username != "" and $this->spawned !== false and $ev->getQuitMessage() != ""){
|
||||
$this->server->broadcastMessage($ev->getQuitMessage());
|
||||
@ -2150,7 +2177,12 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
return;
|
||||
}
|
||||
parent::kill();
|
||||
$message = $this->getName() ." died";
|
||||
|
||||
if($this->inventory !== null){
|
||||
$this->inventory->clearAll();
|
||||
}
|
||||
|
||||
$message = $this->getName() . " died";
|
||||
$cause = $this->getLastDamageCause();
|
||||
$ev = null;
|
||||
if($cause instanceof EntityDamageEvent){
|
||||
@ -2163,29 +2195,29 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
if($ev instanceof EntityDamageByEntityEvent){
|
||||
$e = $ev->getDamager();
|
||||
if($e instanceof Player){
|
||||
$message = $this->getName() ." was killed by ".$e->getName();
|
||||
$message = $this->getName() . " was killed by " . $e->getName();
|
||||
break;
|
||||
}elseif($e instanceof Living){
|
||||
$message = $this->getName() ." was slain by ".$e->getName();
|
||||
$message = $this->getName() . " was slain by " . $e->getName();
|
||||
break;
|
||||
}
|
||||
}
|
||||
$message = $this->getName() ." was killed";
|
||||
$message = $this->getName() . " was killed";
|
||||
break;
|
||||
case EntityDamageEvent::CAUSE_SUICIDE:
|
||||
|
||||
break;
|
||||
case EntityDamageEvent::CAUSE_VOID:
|
||||
$message = $this->getName() ." fell out of the world";
|
||||
$message = $this->getName() . " fell out of the world";
|
||||
break;
|
||||
case EntityDamageEvent::CAUSE_FALL:
|
||||
if($ev instanceof EntityDamageEvent){
|
||||
if($ev->getFinalDamage() > 2){
|
||||
$message = $this->getName() ." fell from a high place";
|
||||
$message = $this->getName() . " fell from a high place";
|
||||
break;
|
||||
}
|
||||
}
|
||||
$message = $this->getName() ." hit the ground too hard";
|
||||
$message = $this->getName() . " hit the ground too hard";
|
||||
break;
|
||||
|
||||
case EntityDamageEvent::CAUSE_CONTACT:
|
||||
@ -2212,9 +2244,11 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
|
||||
public function setHealth($amount){
|
||||
parent::setHealth($amount);
|
||||
$pk = new SetHealthPacket();
|
||||
$pk->health = $this->getHealth();
|
||||
$this->dataPacket($pk);
|
||||
if($this->spawned === true){
|
||||
$pk = new SetHealthPacket();
|
||||
$pk->health = $this->getHealth();
|
||||
$this->dataPacket($pk);
|
||||
}
|
||||
}
|
||||
|
||||
public function attack($damage, $source = EntityDamageEvent::CAUSE_MAGIC){
|
||||
@ -2255,12 +2289,12 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
|
||||
$pk = new MovePlayerPacket;
|
||||
$pk->eid = 0;
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
$pk->y = $this->y + 1.62; //teleport from head
|
||||
$pk->z = $this->z;
|
||||
$pk->bodyYaw = $this->yaw;
|
||||
$pk->pitch = $this->pitch;
|
||||
$pk->yaw = $this->yaw;
|
||||
$this->dataPacket($pk);
|
||||
$this->directDataPacket($pk);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,16 +68,14 @@ namespace pocketmine {
|
||||
use LogLevel;
|
||||
use pocketmine\utils\Binary;
|
||||
use pocketmine\utils\MainLogger;
|
||||
use pocketmine\utils\TextFormat;
|
||||
use pocketmine\utils\Utils;
|
||||
use pocketmine\wizard\Installer;
|
||||
use raklib\RakLib;
|
||||
|
||||
const VERSION = "Alpha_1.4dev";
|
||||
const API_VERSION = "1.1.0";
|
||||
const API_VERSION = "1.3.0";
|
||||
const CODENAME = "絶好(Zekkou)ケーキ(Cake)";
|
||||
const MINECRAFT_VERSION = "v0.9.1 alpha";
|
||||
const PHP_VERSION = "5.5";
|
||||
const MINECRAFT_VERSION = "v0.9.5 alpha";
|
||||
|
||||
if(\Phar::running(true) !== ""){
|
||||
@define("pocketmine\\PATH", \Phar::running(true) . "/");
|
||||
@ -85,6 +83,12 @@ namespace pocketmine {
|
||||
@define("pocketmine\\PATH", \getcwd() . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
if(!extension_loaded("pthreads")){
|
||||
echo "[CRITICAL] Unable to find the pthreads extension." . PHP_EOL;
|
||||
echo "[CRITICAL] Please use the installer provided on the homepage." . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if(!class_exists("SplClassLoader", false)){
|
||||
require_once(\pocketmine\PATH . "src/spl/SplClassLoader.php");
|
||||
}
|
||||
@ -112,13 +116,13 @@ namespace pocketmine {
|
||||
$time -= $time % 60;
|
||||
//TODO: Parse different time & date formats by region. ¬¬ world
|
||||
//Example: USA
|
||||
exec("time.exe /T", $hour);
|
||||
@exec("time.exe /T", $hour);
|
||||
$i = array_map("intval", explode(":", trim($hour[0])));
|
||||
exec("date.exe /T", $date);
|
||||
@exec("date.exe /T", $date);
|
||||
$j = array_map("intval", explode(substr($date[0], 2, 1), trim($date[0])));
|
||||
$offset = round((mktime($i[0], $i[1], 0, $j[1], $j[0], $j[2]) - $time) / 60) * 60;
|
||||
}else{
|
||||
exec("date +%s", $t);
|
||||
@exec("date +%s", $t);
|
||||
$offset = round((intval(trim($t[0])) - time()) / 60) * 60;
|
||||
}
|
||||
|
||||
@ -135,14 +139,14 @@ namespace pocketmine {
|
||||
}
|
||||
}
|
||||
|
||||
gc_disable();
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
gc_enable();
|
||||
error_reporting(-1);
|
||||
ini_set("allow_url_fopen", 1);
|
||||
ini_set("display_errors", 1);
|
||||
ini_set("display_startup_errors", 1);
|
||||
ini_set("default_charset", "utf-8");
|
||||
|
||||
ini_set("memory_limit", "128M"); //Default
|
||||
ini_set("memory_limit", "256M"); //Default
|
||||
define("pocketmine\\START_TIME", microtime(true));
|
||||
|
||||
$opts = getopt("", array("enable-ansi", "disable-ansi", "data:", "plugins:", "no-wizard"));
|
||||
@ -166,25 +170,42 @@ namespace pocketmine {
|
||||
}
|
||||
}
|
||||
|
||||
function getTrace($start = 1){
|
||||
$e = new \Exception();
|
||||
$trace = $e->getTrace();
|
||||
function getTrace($start = 1, $trace = null){
|
||||
if($trace === null){
|
||||
if(function_exists("xdebug_get_function_stack")){
|
||||
$trace = array_reverse(xdebug_get_function_stack());
|
||||
}else{
|
||||
$e = new \Exception();
|
||||
$trace = $e->getTrace();
|
||||
}
|
||||
}
|
||||
|
||||
$messages = [];
|
||||
$j = 0;
|
||||
for($i = (int) $start; isset($trace[$i]); ++$i, ++$j){
|
||||
$params = "";
|
||||
if(isset($trace[$i]["args"])){
|
||||
foreach($trace[$i]["args"] as $name => $value){
|
||||
if(isset($trace[$i]["args"]) or isset($trace[$i]["params"])){
|
||||
if(isset($trace[$i]["args"])){
|
||||
$args = $trace[$i]["args"];
|
||||
}else{
|
||||
$args = $trace[$i]["params"];
|
||||
}
|
||||
foreach($args as $name => $value){
|
||||
$params .= (is_object($value) ? get_class($value) . " " . (method_exists($value, "__toString") ? $value->__toString() : "object") : gettype($value) . " " . @strval($value)) . ", ";
|
||||
}
|
||||
}
|
||||
$messages[] = "#$j " . (isset($trace[$i]["file"]) ? $trace[$i]["file"] : "") . "(" . (isset($trace[$i]["line"]) ? $trace[$i]["line"] : "") . "): " . (isset($trace[$i]["class"]) ? $trace[$i]["class"] . $trace[$i]["type"] : "") . $trace[$i]["function"] . "(" . substr($params, 0, -2) . ")";
|
||||
$messages[] = "#$j " . (isset($trace[$i]["file"]) ? cleanPath($trace[$i]["file"]) : "") . "(" . (isset($trace[$i]["line"]) ? $trace[$i]["line"] : "") . "): " . (isset($trace[$i]["class"]) ? $trace[$i]["class"] . (($trace[$i]["type"] === "dynamic" or $trace[$i]["type"] === "->") ? "->" : "::") : "") . $trace[$i]["function"] . "(" . substr($params, 0, -2) . ")";
|
||||
}
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
function error_handler($errno, $errstr, $errfile, $errline){
|
||||
function cleanPath($path){
|
||||
return rtrim(str_replace(["\\", ".php", "phar://", rtrim(str_replace(["\\", "phar://"], ["/", ""], \pocketmine\PATH), "/"), rtrim(str_replace(["\\", "phar://"], ["/", ""], \pocketmine\PLUGIN_PATH), "/")], ["/", "", "", "", ""], $path), "/");
|
||||
}
|
||||
|
||||
function error_handler($errno, $errstr, $errfile, $errline, $trace = null){
|
||||
global $lastError;
|
||||
if(error_reporting() === 0){ //@ error-control
|
||||
return false;
|
||||
}
|
||||
@ -207,11 +228,25 @@ namespace pocketmine {
|
||||
);
|
||||
$type = ($errno === E_ERROR or $errno === E_WARNING or $errno === E_USER_ERROR or $errno === E_USER_WARNING) ? LogLevel::ERROR : LogLevel::NOTICE;
|
||||
$errno = isset($errorConversion[$errno]) ? $errorConversion[$errno] : $errno;
|
||||
if(($pos = strpos($errstr, "\n")) !== false){
|
||||
$errstr = substr($errstr, 0, $pos);
|
||||
}
|
||||
$logger = MainLogger::getLogger();
|
||||
$logger->log($type, "A $errno error happened: \"$errstr\" in \"$errfile\" at line $errline");
|
||||
foreach(getTrace() as $i => $line){
|
||||
$oldFile = $errfile;
|
||||
$errfile = cleanPath($errfile);
|
||||
$logger->log($type, "An $errno error happened: \"$errstr\" in \"$errfile\" at line $errline");
|
||||
|
||||
foreach(($trace = getTrace($trace === null ? 3 : 0, $trace)) as $i => $line){
|
||||
$logger->debug($line);
|
||||
}
|
||||
$lastError = [
|
||||
"type" => $type,
|
||||
"message" => $errstr,
|
||||
"fullFile" => $oldFile,
|
||||
"file" => $errfile,
|
||||
"line" => $errline,
|
||||
"trace" => $trace
|
||||
];
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -235,18 +270,13 @@ namespace pocketmine {
|
||||
++$errors;
|
||||
}
|
||||
|
||||
if(!extension_loaded("pthreads")){
|
||||
$logger->critical("Unable to find the pthreads extension.");
|
||||
$pthreads_version = phpversion("pthreads");
|
||||
if(substr_count($pthreads_version, ".") < 2){
|
||||
$pthreads_version = "0.$pthreads_version";
|
||||
}
|
||||
if(version_compare($pthreads_version, "2.0.4") < 0){
|
||||
$logger->critical("pthreads >= 2.0.4 is required, while you have $pthreads_version.");
|
||||
++$errors;
|
||||
}else{
|
||||
$pthreads_version = phpversion("pthreads");
|
||||
if(substr_count($pthreads_version, ".") < 2){
|
||||
$pthreads_version = "0.$pthreads_version";
|
||||
}
|
||||
if(version_compare($pthreads_version, "2.0.4") < 0){
|
||||
$logger->critical("pthreads >= 2.0.4 is required, while you have $pthreads_version.");
|
||||
++$errors;
|
||||
}
|
||||
}
|
||||
|
||||
if(!extension_loaded("uopz")){
|
||||
@ -313,12 +343,36 @@ namespace pocketmine {
|
||||
$logger->warning("Non-packaged PocketMine-MP installation detected, do not use on production.");
|
||||
}
|
||||
|
||||
ThreadManager::init();
|
||||
$server = new Server($autoloader, $logger, \pocketmine\PATH, \pocketmine\DATA, \pocketmine\PLUGIN_PATH);
|
||||
$server->start();
|
||||
|
||||
$logger->info("Stopping other threads");
|
||||
|
||||
foreach(ThreadManager::getInstance()->getAll() as $id => $thread){
|
||||
if($thread->isRunning()){
|
||||
$logger->debug("Stopping " . (new \ReflectionClass($thread))->getShortName() . " thread");
|
||||
if($thread instanceof Thread){
|
||||
$thread->kill();
|
||||
|
||||
if($thread->isRunning() or !$thread->join()){
|
||||
$thread->detach();
|
||||
}
|
||||
}elseif($thread instanceof Worker){
|
||||
$thread->kill();
|
||||
sleep(1);
|
||||
if($thread->isRunning() or !$thread->join()){
|
||||
$thread->detach();
|
||||
}
|
||||
}
|
||||
}elseif(!$thread->isJoined()){
|
||||
$logger->debug("Joining " . (new \ReflectionClass($thread))->getShortName() . " thread");
|
||||
$thread->join();
|
||||
}
|
||||
}
|
||||
|
||||
$logger->shutdown();
|
||||
$logger->join();
|
||||
|
||||
kill(getmypid());
|
||||
exit(0);
|
||||
|
||||
}
|
||||
|
@ -60,7 +60,6 @@ use pocketmine\nbt\tag\Long;
|
||||
use pocketmine\nbt\tag\Short;
|
||||
use pocketmine\nbt\tag\String;
|
||||
use pocketmine\network\protocol\DataPacket;
|
||||
use pocketmine\network\protocol\Info;
|
||||
use pocketmine\network\query\QueryHandler;
|
||||
use pocketmine\network\query\QueryPacket;
|
||||
use pocketmine\network\RakLibInterface;
|
||||
@ -69,11 +68,11 @@ use pocketmine\network\SourceInterface;
|
||||
use pocketmine\network\upnp\UPnP;
|
||||
use pocketmine\permission\BanList;
|
||||
use pocketmine\permission\DefaultPermissions;
|
||||
use pocketmine\plugin\PharPluginLoader;
|
||||
use pocketmine\plugin\Plugin;
|
||||
use pocketmine\plugin\PluginLoadOrder;
|
||||
use pocketmine\plugin\PluginManager;
|
||||
use pocketmine\scheduler\CallbackTask;
|
||||
use pocketmine\scheduler\PHPGarbageCollectionTask;
|
||||
use pocketmine\scheduler\SendUsageTask;
|
||||
use pocketmine\scheduler\ServerScheduler;
|
||||
use pocketmine\tile\Tile;
|
||||
@ -276,7 +275,7 @@ class Server{
|
||||
* @return int
|
||||
*/
|
||||
public function getViewDistance(){
|
||||
return min(11, max($this->getConfigInt("view-distance", 7), 4));
|
||||
return max(56, $this->getProperty("chunk-sending.max-chunks"));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -803,9 +802,7 @@ class Server{
|
||||
* @param Player $player
|
||||
*/
|
||||
public function removePlayer(Player $player){
|
||||
if($player->isOnline() === false){
|
||||
unset($this->players[$player->getAddress() . ":" . $player->getPort()]);
|
||||
}
|
||||
unset($this->players[$player->getAddress() . ":" . $player->getPort()]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -881,6 +878,7 @@ class Server{
|
||||
public function unloadLevel(Level $level, $forceUnload = false){
|
||||
if($level->unload($forceUnload) === true and $this->isLevelLoaded($level->getFolderName())){
|
||||
unset($this->levels[$level->getID()]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -913,7 +911,7 @@ class Server{
|
||||
$provider = LevelProviderManager::getProvider($path);
|
||||
|
||||
if($provider === null){
|
||||
$this->logger->error("Could not load level \"" . $name . "\"");
|
||||
$this->logger->error("Could not load level \"" . $name . "\": Unknown provider");
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -922,7 +920,14 @@ class Server{
|
||||
// @rename($path . "tileEntities.yml", $path . "tiles.yml");
|
||||
//}
|
||||
|
||||
$level = new Level($this, $name, $path, $provider);
|
||||
try{
|
||||
$level = new Level($this, $name, $path, $provider);
|
||||
}catch(\Exception $e){
|
||||
$this->logger->error("Could not load level \"" . $name . "\": " . $e->getMessage());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->levels[$level->getID()] = $level;
|
||||
|
||||
$this->getPluginManager()->callEvent(new LevelLoadEvent($level));
|
||||
@ -1033,7 +1038,7 @@ class Server{
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function generateLevel($name, $seed = null, $generator = null, array $options = []){
|
||||
public function generateLevel($name, $seed = null, $generator = null, $options = []){
|
||||
if(trim($name) === "" or $this->isLevelGenerated($name)){
|
||||
return false;
|
||||
}
|
||||
@ -1051,7 +1056,9 @@ class Server{
|
||||
}
|
||||
}
|
||||
|
||||
$provider = "pocketmine\\level\\format\\anvil\\Anvil";
|
||||
if(($provider = LevelProviderManager::getProviderByName($providerName = $this->getProperty("level-settings.default-format", "mcregion"))) === null){
|
||||
$provider = LevelProviderManager::getProviderByName($providerName = "mcregion");
|
||||
}
|
||||
|
||||
$path = $this->getDataPath() . "worlds/" . $name . "/";
|
||||
/** @var \pocketmine\level\format\LevelProvider $provider */
|
||||
@ -1066,12 +1073,37 @@ class Server{
|
||||
|
||||
$this->getLogger()->notice("Spawn terrain for level \"$name\" is being generated in the background");
|
||||
|
||||
for($Z = 0; $Z <= 16; ++$Z){
|
||||
for($X = 0; $X <= 16; ++$X){
|
||||
$level->generateChunk($X, $Z);
|
||||
|
||||
$radiusSquared = ($this->getViewDistance() + 1) / M_PI;
|
||||
$radius = ceil(sqrt($radiusSquared));
|
||||
|
||||
$centerX = $level->getSpawn()->getX() >> 4;
|
||||
$centerZ = $level->getSpawn()->getZ() >> 4;
|
||||
|
||||
$order = [];
|
||||
|
||||
for($X = -$radius; $X <= $radius; ++$X){
|
||||
for($Z = -$radius; $Z <= $radius; ++$Z){
|
||||
$distance = ($X * $X) + ($Z * $Z);
|
||||
if($distance > $radiusSquared){
|
||||
continue;
|
||||
}
|
||||
$chunkX = $X + $centerX;
|
||||
$chunkZ = $Z + $centerZ;
|
||||
$index = Level::chunkHash($chunkX, $chunkZ);
|
||||
$order[$index] = $distance;
|
||||
}
|
||||
}
|
||||
|
||||
asort($order);
|
||||
|
||||
$chunkX = $chunkZ = null;
|
||||
|
||||
foreach($order as $index => $distance){
|
||||
Level::getXZ($index, $chunkX, $chunkZ);
|
||||
$level->generateChunk($chunkX, $chunkZ);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1402,7 +1434,6 @@ class Server{
|
||||
"white-list" => false,
|
||||
"announce-player-achievements" => true,
|
||||
"spawn-protection" => 16,
|
||||
"view-distance" => 8,
|
||||
"max-players" => 20,
|
||||
"allow-flight" => false,
|
||||
"spawn-animals" => true,
|
||||
@ -1427,7 +1458,7 @@ class Server{
|
||||
$this->scheduler = new ServerScheduler();
|
||||
|
||||
if($this->getConfigBoolean("enable-rcon", false) === true){
|
||||
$this->rcon = new RCON($this->getConfigString("rcon.password", ""), $this->getConfigInt("rcon.port", $this->getPort()), ($ip = $this->getIp()) != "" ? $ip : "0.0.0.0", $this->getConfigInt("rcon.threads", 1), $this->getConfigInt("rcon.clients-per-thread", 50));
|
||||
$this->rcon = new RCON($this, $this->getConfigString("rcon.password", ""), $this->getConfigInt("rcon.port", $this->getPort()), ($ip = $this->getIp()) != "" ? $ip : "0.0.0.0", $this->getConfigInt("rcon.threads", 1), $this->getConfigInt("rcon.clients-per-thread", 50));
|
||||
}
|
||||
|
||||
$this->maxPlayers = $this->getConfigInt("max-players", 20);
|
||||
@ -1447,7 +1478,7 @@ class Server{
|
||||
$this->setConfigInt("difficulty", 3);
|
||||
}
|
||||
|
||||
define("pocketmine\\DEBUG", $this->getProperty("debug.level", 1));
|
||||
define("pocketmine\\DEBUG", (int) $this->getProperty("debug.level", 1));
|
||||
if($this->logger instanceof MainLogger){
|
||||
$this->logger->setLogDebug(\pocketmine\DEBUG > 1);
|
||||
}
|
||||
@ -1486,6 +1517,11 @@ class Server{
|
||||
$this->pluginManager->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this->consoleSender);
|
||||
$this->pluginManager->setUseTimings($this->getProperty("settings.enable-profiling", false));
|
||||
$this->pluginManager->registerInterface("pocketmine\\plugin\\PharPluginLoader");
|
||||
|
||||
set_exception_handler([$this, "exceptionHandler"]);
|
||||
register_shutdown_function([$this, "crashDump"]);
|
||||
register_shutdown_function([$this, "forceShutdown"]);
|
||||
|
||||
$this->pluginManager->loadPlugins($this->pluginPath);
|
||||
|
||||
$this->updater = new AutoUpdater($this, $this->getProperty("auto-updater.host", "www.pocketmine.net"));
|
||||
@ -1495,12 +1531,30 @@ class Server{
|
||||
$this->generationManager = new GenerationRequestManager($this);
|
||||
|
||||
LevelProviderManager::addProvider($this, "pocketmine\\level\\format\\anvil\\Anvil");
|
||||
LevelProviderManager::addProvider($this, "pocketmine\\level\\format\\mcregion\\McRegion");
|
||||
|
||||
|
||||
Generator::addGenerator("pocketmine\\level\\generator\\Flat", "flat");
|
||||
Generator::addGenerator("pocketmine\\level\\generator\\Normal", "normal");
|
||||
Generator::addGenerator("pocketmine\\level\\generator\\Normal", "default");
|
||||
|
||||
foreach($this->getProperty("worlds", []) as $name => $worldSetting){
|
||||
if($this->loadLevel($name) === false){
|
||||
$seed = $this->getProperty("worlds.$name.seed", time());
|
||||
$options = explode(":", $this->getProperty("worlds.$name.generator", Generator::getGenerator("default")));
|
||||
$generator = Generator::getGenerator(array_shift($options));
|
||||
if(count($options) > 0){
|
||||
$options = [
|
||||
"preset" => implode(":", $options),
|
||||
];
|
||||
}else{
|
||||
$options = [];
|
||||
}
|
||||
|
||||
$this->generateLevel($name, $seed, $generator, $options);
|
||||
}
|
||||
}
|
||||
|
||||
if($this->getDefaultLevel() === null){
|
||||
$default = $this->getConfigString("level-name", "world");
|
||||
if(trim($default) == ""){
|
||||
@ -1519,6 +1573,13 @@ class Server{
|
||||
|
||||
$this->properties->save();
|
||||
|
||||
if(!($this->getDefaultLevel() instanceof Level)){
|
||||
$this->getLogger()->emergency("No default level has been loaded");
|
||||
$this->forceShutdown();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$this->scheduler->scheduleDelayedRepeatingTask(new CallbackTask("pocketmine\\utils\\Cache::cleanup"), $this->getProperty("ticks-per.cache-cleanup", 900), $this->getProperty("ticks-per.cache-cleanup", 900));
|
||||
if($this->getConfigBoolean("auto-save", true) === true and $this->getProperty("ticks-per.autosave", 6000) > 0){
|
||||
$this->scheduler->scheduleDelayedRepeatingTask(new CallbackTask(array($this, "doAutoSave")), $this->getProperty("ticks-per.autosave", 6000), $this->getProperty("ticks-per.autosave", 6000));
|
||||
@ -1528,10 +1589,9 @@ class Server{
|
||||
$this->scheduler->scheduleDelayedRepeatingTask(new CallbackTask([$this, "doLevelGC"]), $this->getProperty("chunk-gc.period-in-ticks", 600), $this->getProperty("chunk-gc.period-in-ticks", 600));
|
||||
}
|
||||
|
||||
$this->scheduler->scheduleRepeatingTask(new PHPGarbageCollectionTask(), 100);
|
||||
|
||||
$this->enablePlugins(PluginLoadOrder::POSTWORLD);
|
||||
|
||||
$this->start();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1563,8 +1623,9 @@ class Server{
|
||||
foreach($recipients as $recipient){
|
||||
$recipient->sendMessage($message);
|
||||
}
|
||||
|
||||
return count($recipients);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Broadcasts a Minecraft packet to a list of players
|
||||
@ -1610,10 +1671,9 @@ class Server{
|
||||
Timings::$serverCommandTimer->startTiming();
|
||||
if(($line = $this->console->getLine()) !== null){
|
||||
$this->pluginManager->callEvent($ev = new ServerCommandEvent($this->consoleSender, $line));
|
||||
if($ev->isCancelled()){
|
||||
return;
|
||||
if(!$ev->isCancelled()){
|
||||
$this->dispatchCommand($ev->getSender(), $ev->getCommand());
|
||||
}
|
||||
$this->dispatchCommand($this->consoleSender, $ev->getCommand());
|
||||
}
|
||||
Timings::$serverCommandTimer->stopTiming();
|
||||
}
|
||||
@ -1636,6 +1696,7 @@ class Server{
|
||||
}else{
|
||||
$sender->sendMessage("Unknown command. Type \"help\" for help.");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1687,6 +1748,7 @@ class Server{
|
||||
*/
|
||||
public function shutdown(){
|
||||
$this->isRunning = false;
|
||||
gc_collect_cycles();
|
||||
}
|
||||
|
||||
public function forceShutdown(){
|
||||
@ -1709,7 +1771,10 @@ class Server{
|
||||
foreach($this->getLevels() as $level){
|
||||
$this->unloadLevel($level, true);
|
||||
}
|
||||
$this->generationManager->shutdown();
|
||||
|
||||
if($this->generationManager instanceof GenerationRequestManager){
|
||||
$this->generationManager->shutdown();
|
||||
}
|
||||
|
||||
HandlerList::unregisterAll();
|
||||
$this->scheduler->cancelAllTasks();
|
||||
@ -1747,8 +1812,6 @@ class Server{
|
||||
|
||||
$this->tickCounter = 0;
|
||||
|
||||
//register_shutdown_function(array($this, "dumpError"));
|
||||
register_shutdown_function(array($this, "forceShutdown"));
|
||||
if(function_exists("pcntl_signal")){
|
||||
pcntl_signal(SIGTERM, array($this, "shutdown"));
|
||||
pcntl_signal(SIGINT, array($this, "shutdown"));
|
||||
@ -1761,6 +1824,8 @@ class Server{
|
||||
|
||||
$this->tickProcessor();
|
||||
$this->forceShutdown();
|
||||
|
||||
gc_collect_cycles();
|
||||
}
|
||||
|
||||
public function checkTicks(){
|
||||
@ -1779,96 +1844,67 @@ class Server{
|
||||
}
|
||||
}
|
||||
|
||||
public function dumpError(){
|
||||
//TODO
|
||||
if($this->stop === true){
|
||||
public function exceptionHandler(\Exception $e){
|
||||
if($e === null){
|
||||
return;
|
||||
}
|
||||
|
||||
error_handler(E_ERROR, $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTrace());
|
||||
global $lastExceptionError, $lastError;
|
||||
$lastExceptionError = $lastError;
|
||||
$this->crashDump();
|
||||
$this->forceShutdown();
|
||||
kill(getmypid());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
public function crashDump(){
|
||||
if($this->isRunning === false){
|
||||
return;
|
||||
}
|
||||
ini_set("memory_limit", "-1"); //Fix error dump not dumped on memory problems
|
||||
$this->logger->emergency("An unrecoverable has occurred and the server has crashed. Creating an error dump");
|
||||
$dump = "```\r\n# PocketMine-MP Error Dump " . date("D M j H:i:s T Y") . "\r\n";
|
||||
$er = error_get_last();
|
||||
$errorConversion = array(
|
||||
E_ERROR => "E_ERROR",
|
||||
E_WARNING => "E_WARNING",
|
||||
E_PARSE => "E_PARSE",
|
||||
E_NOTICE => "E_NOTICE",
|
||||
E_CORE_ERROR => "E_CORE_ERROR",
|
||||
E_CORE_WARNING => "E_CORE_WARNING",
|
||||
E_COMPILE_ERROR => "E_COMPILE_ERROR",
|
||||
E_COMPILE_WARNING => "E_COMPILE_WARNING",
|
||||
E_USER_ERROR => "E_USER_ERROR",
|
||||
E_USER_WARNING => "E_USER_WARNING",
|
||||
E_USER_NOTICE => "E_USER_NOTICE",
|
||||
E_STRICT => "E_STRICT",
|
||||
E_RECOVERABLE_ERROR => "E_RECOVERABLE_ERROR",
|
||||
E_DEPRECATED => "E_DEPRECATED",
|
||||
E_USER_DEPRECATED => "E_USER_DEPRECATED",
|
||||
);
|
||||
$er["type"] = isset($errorConversion[$er["type"]]) ? $errorConversion[$er["type"]] : $er["type"];
|
||||
$dump .= "Error: " . var_export($er, true) . "\r\n\r\n";
|
||||
if(stripos($er["file"], "plugin") !== false){
|
||||
$dump .= "THIS ERROR WAS CAUSED BY A PLUGIN. REPORT IT TO THE PLUGIN DEVELOPER.\r\n";
|
||||
}
|
||||
$this->logger->emergency("An unrecoverable error has occurred and the server has crashed. Creating a crash dump");
|
||||
$dump = new CrashDump($this);
|
||||
|
||||
$dump .= "Code: \r\n";
|
||||
$file = @file($er["file"], FILE_IGNORE_NEW_LINES);
|
||||
for($l = max(0, $er["line"] - 10); $l < $er["line"] + 10; ++$l){
|
||||
$dump .= "[" . ($l + 1) . "] " . @$file[$l] . "\r\n";
|
||||
}
|
||||
$dump .= "\r\n\r\n";
|
||||
$dump .= "Backtrace: \r\n";
|
||||
foreach(getTrace() as $line){
|
||||
$dump .= "$line\r\n";
|
||||
}
|
||||
$dump .= "\r\n\r\n";
|
||||
$version = new VersionString();
|
||||
$dump .= "PocketMine-MP version: " . $version->get(false). " #" . $version->getNumber() . " [Protocol " . Info::CURRENT_PROTOCOL . "; API " . API_VERSION . "]\r\n";
|
||||
$dump .= "Git commit: " . GIT_COMMIT . "\r\n";
|
||||
$dump .= "uname -a: " . php_uname("a") . "\r\n";
|
||||
$dump .= "PHP Version: " . phpversion() . "\r\n";
|
||||
$dump .= "Zend version: " . zend_version() . "\r\n";
|
||||
$dump .= "OS : " . PHP_OS . ", " . Utils::getOS() . "\r\n";
|
||||
$dump .= "Debug Info: " . var_export($this->debugInfo(false), true) . "\r\n\r\n\r\n";
|
||||
global $arguments;
|
||||
$dump .= "Parameters: " . var_export($arguments, true) . "\r\n\r\n\r\n";
|
||||
$p = $this->api->getProperties();
|
||||
if($p["rcon.password"] != ""){
|
||||
$p["rcon.password"] = "******";
|
||||
}
|
||||
$dump .= "server.properties: " . var_export($p, true) . "\r\n\r\n\r\n";
|
||||
if(class_exists("pocketmine\\plugin\\PluginManager", false)){
|
||||
$dump .= "Loaded plugins:\r\n";
|
||||
foreach($this->getPluginManager()->getPlugins() as $p){
|
||||
$d = $p->getDescription();
|
||||
$dump .= $d->getName() . " " . $d->getVersion() . " by " . implode(", ", $d->getAuthors()) . "\r\n";
|
||||
$this->logger->emergency("Please submit the \"" . $dump->getPath() . "\" file to the Bug Reporting page. Give as much info as you can.");
|
||||
|
||||
|
||||
if($this->getProperty("auto-report.enabled", true) !== false){
|
||||
$plugin = $dump->getData()["plugin"];
|
||||
if(is_string($plugin)){
|
||||
$p = $this->pluginManager->getPlugin($plugin);
|
||||
if($p instanceof Plugin and !($p->getPluginLoader() instanceof PharPluginLoader)){
|
||||
return;
|
||||
}
|
||||
}elseif(\Phar::running(true) == ""){
|
||||
return;
|
||||
}elseif($dump->getData()["type"] === "E_PARSE" or $dump->getData()["type"] === "E_COMPILE_ERROR"){
|
||||
return;
|
||||
}
|
||||
|
||||
$reply = Utils::postURL("http://" . $this->getProperty("auto-report.host", "crash.pocketmine.net") . "/submit/api", [
|
||||
"report" => "yes",
|
||||
"name" => "PocketMine-MP " . $this->getPocketMineVersion(),
|
||||
"email" => "crash@pocketmine.net",
|
||||
"reportPaste" => base64_encode($dump->getEncodedData())
|
||||
]);
|
||||
|
||||
if(($data = json_decode($reply)) !== false and isset($data->crashId)){
|
||||
$reportId = $data->crashId;
|
||||
$reportUrl = $data->crashUrl;
|
||||
$this->logger->emergency("The crash dump has been automatically submitted to the Crash Archive. You can view it on $reportUrl or use the ID #$reportId.");
|
||||
}
|
||||
$dump .= "\r\n\r\n";
|
||||
}
|
||||
|
||||
$extensions = [];
|
||||
foreach(get_loaded_extensions() as $ext){
|
||||
$extensions[$ext] = phpversion($ext);
|
||||
}
|
||||
//$this->checkMemory();
|
||||
//$dump .= "Memory Usage Tracking: \r\n" . chunk_split(base64_encode(gzdeflate(implode(";", $this->memoryStats), 9))) . "\r\n";
|
||||
|
||||
$dump .= "Loaded Modules: " . var_export($extensions, true) . "\r\n";
|
||||
$this->checkMemory();
|
||||
$dump .= "Memory Usage Tracking: \r\n" . chunk_split(base64_encode(gzdeflate(implode(";", $this->memoryStats), 9))) . "\r\n";
|
||||
ob_start();
|
||||
phpinfo();
|
||||
$dump .= "\r\nphpinfo(): \r\n" . chunk_split(base64_encode(gzdeflate(ob_get_contents(), 9))) . "\r\n";
|
||||
ob_end_clean();
|
||||
$dump .= "\r\n```";
|
||||
$name = "Error_Dump_" . date("D_M_j-H.i.s-T_Y");
|
||||
//log($dump, $name, true, 0, true);
|
||||
$this->logger->emergency("Please submit the \"{$name}.log\" file to the Bug Reporting page. Give as much info as you can.", true, true, 0);
|
||||
}
|
||||
|
||||
private function tickProcessor(){
|
||||
$lastLoop = 0;
|
||||
$connectionTimer = Timings::$connectionTimer;
|
||||
while($this->isRunning){
|
||||
|
||||
$connectionTimer->startTiming();
|
||||
foreach($this->interfaces as $interface){
|
||||
if($interface->process()){
|
||||
@ -1969,7 +2005,7 @@ class Server{
|
||||
"os" => Utils::getOS(),
|
||||
"memory_total" => $this->getConfigString("memory-limit"),
|
||||
"memory_usage" => memory_get_usage(),
|
||||
"php_version" => \pocketmine\PHP_VERSION,
|
||||
"php_version" => PHP_VERSION,
|
||||
"version" => $version->get(false),
|
||||
"build" => $version->getBuild(),
|
||||
"mc_version" => \pocketmine\MINECRAFT_VERSION,
|
||||
@ -1982,9 +2018,9 @@ class Server{
|
||||
$this->scheduler->scheduleAsyncTask($this->lastSendUsage);
|
||||
}
|
||||
|
||||
public function titleTick(){
|
||||
private function titleTick(){
|
||||
if(defined("pocketmine\\DEBUG") and \pocketmine\DEBUG >= 0 and \pocketmine\ANSI === true){
|
||||
echo "\x1b]0;PocketMine-MP " . $this->getPocketMineVersion() . " | Online " . count($this->players) . "/" . $this->getMaxPlayers() . " | RAM " . round((memory_get_usage() / 1024) / 1024, 2) . "/" . round((memory_get_usage(true) / 1024) / 1024, 2) . " MB | U ". round($this->mainInterface->getUploadUsage() / 1024, 2) ." D ". round($this->mainInterface->getDownloadUsage() / 1024, 2) ." kB/s | TPS " . $this->getTicksPerSecond() . "\x07";
|
||||
echo "\x1b]0;PocketMine-MP " . $this->getPocketMineVersion() . " | Online " . count($this->players) . "/" . $this->getMaxPlayers() . " | RAM " . round((memory_get_usage() / 1024) / 1024, 2) . "/" . round((memory_get_usage(true) / 1024) / 1024, 2) . " MB | U " . round($this->mainInterface->getUploadUsage() / 1024, 2) . " D " . round($this->mainInterface->getDownloadUsage() / 1024, 2) . " kB/s | TPS " . $this->getTicksPerSecond() . "\x07";
|
||||
}
|
||||
}
|
||||
|
||||
|
34
src/pocketmine/Thread.php
Normal file
34
src/pocketmine/Thread.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine;
|
||||
|
||||
/**
|
||||
* This class must be extended by all custom threading classes
|
||||
*/
|
||||
abstract class Thread extends \Thread{
|
||||
|
||||
public final function start($options = PTHREADS_INHERIT_ALL){
|
||||
ThreadManager::getInstance()->add($this);
|
||||
|
||||
return parent::start($options & ~PTHREADS_INHERIT_CLASSES);
|
||||
}
|
||||
}
|
69
src/pocketmine/ThreadManager.php
Normal file
69
src/pocketmine/ThreadManager.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine;
|
||||
|
||||
class ThreadManager extends \Threaded{
|
||||
|
||||
/** @var ThreadManager */
|
||||
private static $instance = null;
|
||||
|
||||
public static function init(){
|
||||
self::$instance = new ThreadManager();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ThreadManager
|
||||
*/
|
||||
public static function getInstance(){
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Worker|Thread $thread
|
||||
*/
|
||||
public function add($thread){
|
||||
if($thread instanceof Thread or $thread instanceof Worker){
|
||||
$this->{spl_object_hash($thread)} = $thread;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Worker|Thread $thread
|
||||
*/
|
||||
public function remove($thread){
|
||||
if($thread instanceof Thread or $thread instanceof Worker){
|
||||
unset($this->{spl_object_hash($thread)});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Worker[]|Thread[]
|
||||
*/
|
||||
public function getAll(){
|
||||
$array = [];
|
||||
foreach($this as $key => $thread){
|
||||
$array[$key] = $thread;
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
}
|
34
src/pocketmine/Worker.php
Normal file
34
src/pocketmine/Worker.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine;
|
||||
|
||||
/**
|
||||
* This class must be extended by all custom threading classes
|
||||
*/
|
||||
abstract class Worker extends \Worker{
|
||||
|
||||
public final function start($options = PTHREADS_INHERIT_ALL){
|
||||
ThreadManager::getInstance()->add($this);
|
||||
|
||||
return parent::start($options & ~PTHREADS_INHERIT_CLASSES);
|
||||
}
|
||||
}
|
@ -24,6 +24,8 @@
|
||||
*/
|
||||
namespace pocketmine\block;
|
||||
|
||||
use pocketmine\entity\Villager;
|
||||
use pocketmine\entity\Zombie;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\level\Level;
|
||||
use pocketmine\level\Position;
|
||||
@ -97,7 +99,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
const OBSIDIAN = 49;
|
||||
const TORCH = 50;
|
||||
const FIRE = 51;
|
||||
|
||||
const MONSTER_SPAWNER = 52;
|
||||
const WOOD_STAIRS = 53;
|
||||
const WOODEN_STAIRS = 53;
|
||||
const OAK_WOOD_STAIRS = 53;
|
||||
@ -166,12 +168,16 @@ abstract class Block extends Position implements Metadatable{
|
||||
const FENCE_GATE = 107;
|
||||
const BRICK_STAIRS = 108;
|
||||
const STONE_BRICK_STAIRS = 109;
|
||||
const MYCELIUM = 110;
|
||||
|
||||
const NETHER_BRICKS = 112;
|
||||
const NETHER_BRICK_BLOCK = 112;
|
||||
|
||||
const NETHER_BRICKS_STAIRS = 114;
|
||||
|
||||
const END_PORTAL = 120;
|
||||
const END_STONE = 121;
|
||||
|
||||
const SANDSTONE_STAIRS = 128;
|
||||
const EMERALD_ORE = 129;
|
||||
|
||||
@ -218,6 +224,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
const HARDENED_CLAY = 172;
|
||||
const COAL_BLOCK = 173;
|
||||
|
||||
const PODZOL = 243;
|
||||
const BEETROOT_BLOCK = 244;
|
||||
const STONECUTTER = 245;
|
||||
const GLOWING_OBSIDIAN = 246;
|
||||
@ -229,6 +236,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
[Item::STONE_BRICKS, 0],
|
||||
[Item::STONE_BRICKS, 1],
|
||||
[Item::STONE_BRICKS, 2],
|
||||
[Item::STONE_BRICKS, 3],
|
||||
[Item::MOSS_STONE, 0],
|
||||
[Item::WOODEN_PLANKS, 0],
|
||||
[Item::WOODEN_PLANKS, 1],
|
||||
@ -246,9 +254,9 @@ abstract class Block extends Position implements Metadatable{
|
||||
[Item::STONE, 5],
|
||||
[Item::STONE, 6],
|
||||
[Item::DIRT, 0],
|
||||
//TODO: PODZOL
|
||||
[Item::PODZOL, 0],
|
||||
[Item::GRASS, 0],
|
||||
//TODO: MYCELIUM
|
||||
[Item::MYCELIUM, 0],
|
||||
[Item::CLAY_BLOCK, 0],
|
||||
[Item::HARDENED_CLAY, 0],
|
||||
[Item::STAINED_CLAY, 0],
|
||||
@ -271,6 +279,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
[Item::SANDSTONE, 1],
|
||||
[Item::SANDSTONE, 2],
|
||||
[Item::SAND, 0],
|
||||
[Item::SAND, 1],
|
||||
[Item::GRAVEL, 0],
|
||||
[Item::TRUNK, 0],
|
||||
[Item::TRUNK, 1],
|
||||
@ -318,7 +327,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
[Item::OBSIDIAN, 0],
|
||||
[Item::ICE, 0],
|
||||
[Item::SNOW_BLOCK, 0],
|
||||
//TODO: ENDSTONE
|
||||
[Item::END_STONE, 0],
|
||||
|
||||
//Decoration
|
||||
[Item::COBBLESTONE_WALL, 0],
|
||||
@ -351,6 +360,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
[Item::CHEST, 0],
|
||||
[Item::FURNACE, 0],
|
||||
//TODO: End Portal
|
||||
[Item::END_PORTAL, 0],
|
||||
[Item::DANDELION, 0],
|
||||
[Item::POPPY, 0],
|
||||
//TODO: blue orchid
|
||||
@ -396,7 +406,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
[Item::LEAVES2, 1],
|
||||
[Item::CAKE, 0],
|
||||
[Item::SIGN, 0],
|
||||
//TODO: Monster Spawner
|
||||
[Item::MONSTER_SPAWNER, 0],
|
||||
[Item::WOOL, 0],
|
||||
[Item::WOOL, 7],
|
||||
[Item::WOOL, 6],
|
||||
@ -446,11 +456,11 @@ abstract class Block extends Position implements Metadatable{
|
||||
[Item::CLOCK, 0],
|
||||
[Item::COMPASS, 0],
|
||||
[Item::MINECART, 0],
|
||||
//TODO: Villager
|
||||
[Item::SPAWN_EGG, 10], //Chicken
|
||||
[Item::SPAWN_EGG, 11], //Cow
|
||||
[Item::SPAWN_EGG, 12], //Pig
|
||||
[Item::SPAWN_EGG, 13], //Sheep
|
||||
[Item::SPAWN_EGG, Villager::NETWORK_ID],
|
||||
//[Item::SPAWN_EGG, 10], //Chicken
|
||||
//[Item::SPAWN_EGG, 11], //Cow
|
||||
//[Item::SPAWN_EGG, 12], //Pig
|
||||
//[Item::SPAWN_EGG, 13], //Sheep
|
||||
//TODO: Wolf
|
||||
//TODO: Mooshroom
|
||||
//TODO: Creeper
|
||||
@ -458,7 +468,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
//TODO: Silverfish
|
||||
//TODO: Skeleton
|
||||
//TODO: Slime
|
||||
//TODO: Zombie
|
||||
[Item::SPAWN_EGG, Zombie::NETWORK_ID],
|
||||
//TODO: PigZombie
|
||||
//TODO: Replace with Entity constants
|
||||
|
||||
@ -561,7 +571,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
self::OBSIDIAN => new Obsidian(),
|
||||
self::TORCH => new Torch(),
|
||||
self::FIRE => new Fire(),
|
||||
|
||||
self::MONSTER_SPAWNER => new MonsterSpawner(),
|
||||
self::WOOD_STAIRS => new WoodStairs(),
|
||||
self::CHEST => new Chest(),
|
||||
|
||||
@ -613,10 +623,13 @@ abstract class Block extends Position implements Metadatable{
|
||||
self::BRICK_STAIRS => new BrickStairs(),
|
||||
self::STONE_BRICK_STAIRS => new StoneBrickStairs(),
|
||||
|
||||
self::MYCELIUM => new Mycelium(),
|
||||
self::NETHER_BRICKS => new NetherBrick(),
|
||||
|
||||
self::NETHER_BRICKS_STAIRS => new NetherBrickStairs(),
|
||||
|
||||
self::END_PORTAL => new EndPortal(),
|
||||
self::END_STONE => new EndStone(),
|
||||
self::SANDSTONE_STAIRS => new SandstoneStairs(),
|
||||
self::EMERALD_ORE => new EmeraldOre(),
|
||||
|
||||
@ -645,6 +658,7 @@ abstract class Block extends Position implements Metadatable{
|
||||
self::HARDENED_CLAY => new HardenedClay(),
|
||||
self::COAL_BLOCK => new Coal(),
|
||||
|
||||
self::PODZOL => new Podzol(),
|
||||
self::BEETROOT_BLOCK => new Beetroot(),
|
||||
self::STONECUTTER => new Stonecutter(),
|
||||
self::GLOWING_OBSIDIAN => new GlowingObsidian(),
|
||||
@ -889,4 +903,4 @@ abstract class Block extends Position implements Metadatable{
|
||||
$this->getLevel()->getBlockMetadata()->removeMetadata($this, $metadataKey, $plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -25,7 +25,6 @@ use pocketmine\item\Item;
|
||||
use pocketmine\level\Level;
|
||||
use pocketmine\math\Vector3 as Vector3;
|
||||
use pocketmine\Player;
|
||||
use pocketmine\Server;
|
||||
|
||||
class Cactus extends Transparent{
|
||||
public function __construct($meta = 0){
|
||||
@ -39,7 +38,7 @@ class Cactus extends Transparent{
|
||||
$down = $this->getSide(0);
|
||||
if($down->getID() !== self::SAND and $down->getID() !== self::CACTUS){ //Replace with common break method
|
||||
$this->getLevel()->setBlock($this, new Air(), false);
|
||||
Server::getInstance()->api->entity->drop($this, Item::get($this->id));
|
||||
$this->getLevel()->dropItem($this, Item::get($this->id));
|
||||
|
||||
return Level::BLOCK_UPDATE_NORMAL;
|
||||
}
|
||||
|
31
src/pocketmine/block/EndPortal.php
Normal file
31
src/pocketmine/block/EndPortal.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\block;
|
||||
|
||||
use pocketmine\item\Item;
|
||||
|
||||
class EndPortal extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
parent::__construct(self::END_PORTAL, $meta, "End Portal");
|
||||
$this->hardness = 18000000;
|
||||
}
|
||||
}
|
48
src/pocketmine/block/EndStone.php
Normal file
48
src/pocketmine/block/EndStone.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\block;
|
||||
|
||||
use pocketmine\item\Item;
|
||||
|
||||
class EndStone extends Solid{
|
||||
public function __construct(){
|
||||
parent::__construct(self::END_STONE, 0, "End Stone");
|
||||
$this->hardness = 45;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.6;
|
||||
case 4:
|
||||
return 0.75;
|
||||
case 3:
|
||||
return 1.15;
|
||||
case 2:
|
||||
return 0.4;
|
||||
case 1:
|
||||
return 2.25;
|
||||
default:
|
||||
return 15;
|
||||
}
|
||||
}
|
||||
}
|
@ -24,7 +24,6 @@ namespace pocketmine\block;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\level\Level;
|
||||
use pocketmine\Player;
|
||||
use pocketmine\Server;
|
||||
|
||||
class Generic extends Block{
|
||||
|
||||
@ -59,7 +58,6 @@ class Generic extends Block{
|
||||
"z" => $this->z + 0.5,
|
||||
"Tile" => $this->id,
|
||||
);
|
||||
$server = Server::getInstance();
|
||||
/*$this->getLevel()->setBlock($this, new Air(), false, false, true);
|
||||
//TODO
|
||||
//$e = $server->api->entity->add($this->getLevel(), ENTITY_FALLING, FALLING_SAND, $data);
|
||||
|
@ -35,7 +35,7 @@ class Lava extends Liquid{
|
||||
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
|
||||
$ret = $this->getLevel()->setBlock($this, $this, true, false, true);
|
||||
Server::getInstance()->api->block->scheduleBlockUpdate(clone $this, 40, Level::BLOCK_UPDATE_NORMAL);
|
||||
$this->getLevel()->scheduleUpdate(clone $this, 40);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
@ -85,7 +85,7 @@ class Lava extends Liquid{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
//return false;
|
||||
return false;
|
||||
$newId = $this->id;
|
||||
$level = $this->meta & 0x07;
|
||||
if($type !== Level::BLOCK_UPDATE_NORMAL){
|
||||
|
52
src/pocketmine/block/MonsterSpawner.php
Normal file
52
src/pocketmine/block/MonsterSpawner.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\block;
|
||||
|
||||
use pocketmine\item\Item;
|
||||
|
||||
class MonsterSpawner extends Solid{
|
||||
public function __construct(){
|
||||
parent::__construct(self::MONSTER_SPAWNER, 0, "Monster Spawner");
|
||||
$this->hardness = 25;
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item){
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.95;
|
||||
case 4:
|
||||
return 1.25;
|
||||
case 3:
|
||||
return 1.9;
|
||||
case 2:
|
||||
return 0.65;
|
||||
case 1:
|
||||
return 3.75;
|
||||
default:
|
||||
return 25;
|
||||
}
|
||||
}
|
||||
|
||||
public function getDrops(Item $item){
|
||||
return [];
|
||||
}
|
||||
}
|
53
src/pocketmine/block/Mycelium.php
Normal file
53
src/pocketmine/block/Mycelium.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\block;
|
||||
|
||||
use pocketmine\item\Item;
|
||||
|
||||
class Mycelium extends Solid{
|
||||
public function __construct(){
|
||||
parent::__construct(self::MYCELIUM, 0, "Mycelium");
|
||||
$this->hardness = 2.5;
|
||||
}
|
||||
|
||||
public function getDrops(Item $item){
|
||||
return [
|
||||
[Item::DIRT, 0, 1],
|
||||
];
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
if($type === Level::BLOCK_UPDATE_RANDOM){
|
||||
//TODO: light levels
|
||||
$x = mt_rand($this->x - 1, $this->x + 1);
|
||||
$y = mt_rand($this->y - 2, $this->y + 2);
|
||||
$z = mt_rand($this->z - 1, $this->z + 1);
|
||||
$block = $this->getLevel()->getBlockIdAt($x, $y, $z);
|
||||
if($block === Block::DIRT){
|
||||
$block = $this->getLevel()->getBlock(new Vector3($x, $y, $z));
|
||||
if($block->getSide(1) instanceof Transparent){
|
||||
$this->getLevel()->setBlock($block, new Mycelium());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
31
src/pocketmine/block/Podzol.php
Normal file
31
src/pocketmine/block/Podzol.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\block;
|
||||
|
||||
use pocketmine\item\Item;
|
||||
|
||||
class Podzol extends Solid{
|
||||
public function __construct(){
|
||||
parent::__construct(self::PODZOL, 0, "Podzol");
|
||||
$this->hardness = 2.5;
|
||||
}
|
||||
}
|
@ -24,7 +24,7 @@ namespace pocketmine\block;
|
||||
use pocketmine\item\Item;
|
||||
|
||||
class Stone extends Solid{
|
||||
const STONE = 0;
|
||||
const NORMAL = 0;
|
||||
const GRANITE = 1;
|
||||
const POLISHED_GRANITE = 2;
|
||||
const DIORITE = 3;
|
||||
@ -35,7 +35,7 @@ class Stone extends Solid{
|
||||
public function __construct($meta = 0){
|
||||
parent::__construct(self::STONE, $meta, "Stone");
|
||||
$names = [
|
||||
self::STONE => "Stone",
|
||||
self::NORMAL => "Stone",
|
||||
self::GRANITE => "Granite",
|
||||
self::POLISHED_GRANITE => "Polished Granite",
|
||||
self::DIORITE => "Diorite",
|
||||
@ -48,7 +48,6 @@ class Stone extends Solid{
|
||||
}
|
||||
|
||||
public function getBreakTime(Item $item){
|
||||
|
||||
switch($item->isPickaxe()){
|
||||
case 5:
|
||||
return 0.4;
|
||||
|
@ -50,28 +50,11 @@ class TallGrass extends Flowable{
|
||||
}
|
||||
|
||||
public function getDrops(Item $item){
|
||||
$drops = [];
|
||||
$possibleDrops = array(
|
||||
array(Item::WHEAT_SEEDS, 0, 1),
|
||||
array(Item::CARROT, 0, 1),
|
||||
array(Item::POTATO, 0, 1),
|
||||
array(Item::BEETROOT_SEEDS, 0, 1),
|
||||
array(Item::MELON_SEEDS, 0, 1),
|
||||
array(Item::PUMPKIN_SEEDS, 0, 1),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
);
|
||||
if(($item = $possibleDrops[mt_rand(0, count($possibleDrops) - 1)]) !== 0){
|
||||
$drops[] = $item;
|
||||
if(mt_rand(0, 15) === 0){
|
||||
return [Item::WHEAT_SEEDS, 0, 1];
|
||||
}
|
||||
|
||||
return $drops;
|
||||
return [];
|
||||
}
|
||||
|
||||
}
|
@ -35,7 +35,7 @@ class Water extends Liquid{
|
||||
|
||||
public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){
|
||||
$ret = $this->getLevel()->setBlock($this, $this, true, false, true);
|
||||
Server::getInstance()->api->block->scheduleBlockUpdate(clone $this, 10, Level::BLOCK_UPDATE_NORMAL);
|
||||
$this->getLevel()->scheduleUpdate(clone $this, 10);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
@ -92,7 +92,7 @@ class Water extends Liquid{
|
||||
}
|
||||
|
||||
public function onUpdate($type){
|
||||
//return false;
|
||||
return false;
|
||||
$newId = $this->id;
|
||||
$level = $this->meta & 0x07;
|
||||
if($type !== Level::BLOCK_UPDATE_NORMAL){
|
||||
|
@ -80,7 +80,7 @@ abstract class Command{
|
||||
$this->usageMessage = $usageMessage === null ? "/" . $name : $usageMessage;
|
||||
$this->aliases = $aliases;
|
||||
$this->activeAliases = (array) $aliases;
|
||||
$this->timings = new TimingsHandler("** Command: ". $name);
|
||||
$this->timings = new TimingsHandler("** Command: " . $name);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -161,8 +161,9 @@ abstract class Command{
|
||||
public function setLabel($name){
|
||||
$this->nextLabel = $name;
|
||||
if(!$this->isRegistered()){
|
||||
$this->timings = new TimingsHandler("** Command: ". $name);
|
||||
$this->timings = new TimingsHandler("** Command: " . $name);
|
||||
$this->label = $name;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,9 @@
|
||||
|
||||
namespace pocketmine\command;
|
||||
|
||||
class CommandReader extends \Thread{
|
||||
use pocketmine\Thread;
|
||||
|
||||
class CommandReader extends Thread{
|
||||
|
||||
private $stream;
|
||||
/** @var resource */
|
||||
@ -36,7 +38,7 @@ class CommandReader extends \Thread{
|
||||
*/
|
||||
public function __construct($stream = "php://stdin"){
|
||||
$this->stream = $stream;
|
||||
$this->start(PTHREADS_INHERIT_ALL & ~PTHREADS_INHERIT_CLASSES);
|
||||
$this->start();
|
||||
}
|
||||
|
||||
private function readLine(){
|
||||
|
@ -50,6 +50,7 @@ class FormattedCommandAlias extends Command{
|
||||
}else{
|
||||
$sender->sendMessage(TextFormat::RED . "An internal error occurred while attempting to perform this command");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -62,10 +62,21 @@ class PluginCommand extends Command implements PluginIdentifiableCommand{
|
||||
return $success;
|
||||
}
|
||||
|
||||
public function getExecutor(){
|
||||
return $this->executor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CommandExecutor $executor
|
||||
*/
|
||||
public function setExecutor(CommandExecutor $executor){
|
||||
$this->executor = ($executor != null) ? $executor : $this->owningPlugin;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Plugin
|
||||
*/
|
||||
public function getPlugin(){
|
||||
return $this->owningPlugin;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -216,7 +216,7 @@ class SimpleCommandMap implements CommandMap{
|
||||
|
||||
foreach($values as $alias => $commandStrings){
|
||||
if(strpos($alias, ":") !== false or strpos($alias, " ") !== false){
|
||||
$this->server->getLogger()->warning("Could not register alias ". $alias ." because it contains illegal characters");
|
||||
$this->server->getLogger()->warning("Could not register alias " . $alias . " because it contains illegal characters");
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -238,7 +238,7 @@ class SimpleCommandMap implements CommandMap{
|
||||
}
|
||||
|
||||
if(strlen($bad) > 0){
|
||||
$this->server->getLogger()->warning("Could not register alias ". $alias ." because it contains commands that do not exist: ". $bad);
|
||||
$this->server->getLogger()->warning("Could not register alias " . $alias . " because it contains commands that do not exist: " . $bad);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -53,6 +53,7 @@ class GamemodeCommand extends VanillaCommand{
|
||||
|
||||
if($gameMode === -1){
|
||||
$sender->sendMessage("Unknown game mode");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -53,14 +53,11 @@ class KickCommand extends VanillaCommand{
|
||||
|
||||
if(($player = $sender->getServer()->getPlayer($name)) instanceof Player){
|
||||
$player->kick($reason);
|
||||
if(strlen($reason) >= 1)
|
||||
{
|
||||
Command::broadcastCommandMessage($sender, "Kicked " . $player->getName() . " from the game: '{$reason}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
Command::broadcastCommandMessage($sender, "Kicked " . $player->getName() . " from the game.");
|
||||
}
|
||||
if(strlen($reason) >= 1){
|
||||
Command::broadcastCommandMessage($sender, "Kicked " . $player->getName() . " from the game: '{$reason}'");
|
||||
}else{
|
||||
Command::broadcastCommandMessage($sender, "Kicked " . $player->getName() . " from the game.");
|
||||
}
|
||||
}else{
|
||||
$sender->sendMessage($name . " not found.");
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ class SetWorldSpawnCommand extends VanillaCommand{
|
||||
return true;
|
||||
}
|
||||
|
||||
$level->setSpawn($pos);
|
||||
$level->setSpawnLocation($pos);
|
||||
|
||||
Command::broadcastCommandMessage($sender, "Set world " . $level->getName() . "'s spawnpoint to " . $pos->x . ", " . $pos->y . ", " . $pos->z);
|
||||
|
||||
|
@ -66,11 +66,12 @@ class SpawnpointCommand extends VanillaCommand{
|
||||
|
||||
if(count($args) === 4){
|
||||
if($level !== null){
|
||||
$x = (int) $this->getRelativeDouble($sender->x, $sender, $args[1]);
|
||||
$y = (int) $this->getRelativeDouble($sender->y, $sender, $args[2], 0, 128);
|
||||
$z = (int) $this->getRelativeDouble($sender->z, $sender, $args[3]);
|
||||
$pos = $sender instanceof Player ? $sender->getPosition() : $level->getSpawn();
|
||||
$x = (int) $this->getRelativeDouble($pos->x, $sender, $args[1]);
|
||||
$y = $this->getRelativeDouble($pos->y, $sender, $args[2], 0, 128);
|
||||
$z = $this->getRelativeDouble($pos->z, $sender, $args[3]);
|
||||
$target->setSpawn(new Position($x, $y, $z, $level));
|
||||
Command::broadcastCommandMessage($sender, "Set " . $target->getName() . "'s spawnpoint to " . $x . ", " . $y . ", " . $z);
|
||||
Command::broadcastCommandMessage($sender, "Set " . $target->getDisplayName() . "'s spawnpoint to " . $x . ", " . $y . ", " . $z);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -78,7 +79,7 @@ class SpawnpointCommand extends VanillaCommand{
|
||||
if($sender instanceof Player){
|
||||
$pos = new Position((int) $sender->x, (int) $sender->y, (int) $sender->z, $sender->getLevel());
|
||||
$target->setSpawn($pos);
|
||||
Command::broadcastCommandMessage($sender, "Set " . $target->getName() . "'s spawnpoint to " . $pos->x . ", " . $pos->y . ", " . $pos->z);
|
||||
Command::broadcastCommandMessage($sender, "Set " . $target->getDisplayName() . "'s spawnpoint to " . $pos->x . ", " . $pos->y . ", " . $pos->z);
|
||||
|
||||
return true;
|
||||
}else{
|
||||
|
@ -58,12 +58,14 @@ class TeleportCommand extends VanillaCommand{
|
||||
$target = $sender;
|
||||
}else{
|
||||
$sender->sendMessage(TextFormat::RED . "Please provide a player!");
|
||||
|
||||
return true;
|
||||
}
|
||||
if(count($args) === 1){
|
||||
$target = $sender->getServer()->getPlayer($args[0]);
|
||||
if($target === null){
|
||||
$sender->sendMessage(TextFormat::RED . "Can't find player " . $args[0]);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -71,6 +73,7 @@ class TeleportCommand extends VanillaCommand{
|
||||
$target = $sender->getServer()->getPlayer($args[0]);
|
||||
if($target === null){
|
||||
$sender->sendMessage(TextFormat::RED . "Can't find player " . $args[0]);
|
||||
|
||||
return true;
|
||||
}
|
||||
if(count($args) === 2){
|
||||
@ -78,6 +81,7 @@ class TeleportCommand extends VanillaCommand{
|
||||
$target = $sender->getServer()->getPlayer($args[1]);
|
||||
if($target === null){
|
||||
$sender->sendMessage(TextFormat::RED . "Can't find player " . $args[1]);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -86,7 +90,7 @@ class TeleportCommand extends VanillaCommand{
|
||||
if(count($args) < 3){
|
||||
$pos = new Position($target->x, $target->y, $target->z, $target->getLevel());
|
||||
$origin->teleport($pos);
|
||||
Command::broadcastCommandMessage($sender, "Teleported " . $origin->getName() . " to " . $target->getName());
|
||||
Command::broadcastCommandMessage($sender, "Teleported " . $origin->getDisplayName() . " to " . $target->getDisplayName());
|
||||
|
||||
return true;
|
||||
}elseif($target->getLevel() !== null){
|
||||
@ -95,7 +99,7 @@ class TeleportCommand extends VanillaCommand{
|
||||
$y = $this->getRelativeDouble($target->y, $sender, $args[$pos++], 0, 128);
|
||||
$z = $this->getRelativeDouble($target->z, $sender, $args[$pos]);
|
||||
$target->teleport(new Vector3($x, $y, $z));
|
||||
Command::broadcastCommandMessage($sender, "Teleported " . $target->getName() . " to " . round($x, 2) . ", " . round($y, 2) . ", " . round($z, 2));
|
||||
Command::broadcastCommandMessage($sender, "Teleported " . $target->getDisplayName() . " to " . round($x, 2) . ", " . round($y, 2) . ", " . round($z, 2));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -53,12 +53,12 @@ class TellCommand extends VanillaCommand{
|
||||
$player = $sender->getServer()->getPlayer($name);
|
||||
|
||||
if($player instanceof Player){
|
||||
$sender->sendMessage("[me -> " . $player->getName() . "] " . implode($args));
|
||||
$player->sendMessage("[" . $sender->getName() . " -> me] " . implode($args));
|
||||
$sender->sendMessage("[me -> " . $player->getName() . "] " . implode(" ", $args));
|
||||
$player->sendMessage("[" . $sender->getName() . " -> me] " . implode(" ", $args));
|
||||
}else{
|
||||
$sender->sendMessage("There's no player by that name online.");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -39,12 +39,14 @@ class TimeCommand extends VanillaCommand{
|
||||
public function execute(CommandSender $sender, $currentAlias, array $args){
|
||||
if(count($args) < 2){
|
||||
$sender->sendMessage(TextFormat::RED . "Usage: " . $this->usageMessage);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if($args[0] === "set"){
|
||||
if(!$sender->hasPermission("pocketmine.command.time.set")){
|
||||
$sender->sendMessage(TextFormat::RED . "You don't have permission to set the time");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -65,6 +67,7 @@ class TimeCommand extends VanillaCommand{
|
||||
}elseif($args[0] === "add"){
|
||||
if(!$sender->hasPermission("pocketmine.command.time.add")){
|
||||
$sender->sendMessage(TextFormat::RED . "You don't have permission to add the time");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -22,12 +22,8 @@
|
||||
namespace pocketmine\command\defaults;
|
||||
|
||||
use pocketmine\command\CommandSender;
|
||||
use pocketmine\event\HandlerList;
|
||||
use pocketmine\event\TimingsHandler;
|
||||
use pocketmine\Player;
|
||||
use pocketmine\plugin\TimedRegisteredListener;
|
||||
use pocketmine\utils\TextFormat;
|
||||
use pocketmine\utils\Utils;
|
||||
|
||||
class TimingsCommand extends VanillaCommand{
|
||||
|
||||
@ -49,6 +45,7 @@ class TimingsCommand extends VanillaCommand{
|
||||
|
||||
if(count($args) !== 1){
|
||||
$sender->sendMessage(TextFormat::RED . "Usage: " . $this->usageMessage);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -58,6 +55,7 @@ class TimingsCommand extends VanillaCommand{
|
||||
$sender->getServer()->getPluginManager()->setUseTimings(true);
|
||||
TimingsHandler::reload();
|
||||
$sender->sendMessage("Enabled Timings & Reset");
|
||||
|
||||
return true;
|
||||
}elseif($mode === "off"){
|
||||
$sender->getServer()->getPluginManager()->setUseTimings(false);
|
||||
@ -66,6 +64,7 @@ class TimingsCommand extends VanillaCommand{
|
||||
|
||||
if(!$sender->getServer()->getPluginManager()->useTimings()){
|
||||
$sender->sendMessage("Please enable timings by typing /timings on");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -74,13 +73,6 @@ class TimingsCommand extends VanillaCommand{
|
||||
if($mode === "reset"){
|
||||
TimingsHandler::reload();
|
||||
$sender->sendMessage("Timings reset");
|
||||
/*foreach(HandlerList::getHandlerLists() as $handlerList){
|
||||
foreach($handlerList->getRegisteredListeners() as $listener){
|
||||
if($listener instanceof TimedRegisteredListener){
|
||||
$listener->reset();
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}elseif($mode === "merged" or $mode === "report" or $paste){
|
||||
|
||||
$sampleTime = microtime(true) - self::$timingStart;
|
||||
@ -96,7 +88,7 @@ class TimingsCommand extends VanillaCommand{
|
||||
|
||||
TimingsHandler::printTimings($fileTimings);
|
||||
|
||||
fwrite($fileTimings, "Sample time ". round($sampleTime * 1000000000) ." (". $sampleTime ."s)" . PHP_EOL);
|
||||
fwrite($fileTimings, "Sample time " . round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . PHP_EOL);
|
||||
|
||||
if($paste){
|
||||
fseek($fileTimings, 0);
|
||||
@ -119,20 +111,21 @@ class TimingsCommand extends VanillaCommand{
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_SLASHES));
|
||||
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
|
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json", "User-Agent: PocketMine-MP ".$sender->getServer()->getPocketMineVersion()]);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json", "User-Agent: PocketMine-MP " . $sender->getServer()->getPocketMineVersion()]);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
$ret = curl_exec($ch);
|
||||
$data = json_decode($ret);
|
||||
curl_close($ch);
|
||||
if($data === false or $data === null or !isset($data->html_url)){
|
||||
$sender->sendMessage("An error happened while pasting the report");
|
||||
|
||||
return true;
|
||||
}
|
||||
$timings = $data->html_url;
|
||||
}
|
||||
|
||||
fclose($fileTimings);
|
||||
$sender->sendMessage("Timings written to ". $timings);
|
||||
$sender->sendMessage("Timings written to " . $timings);
|
||||
$sender->sendMessage("Paste contents of file into form at http://aikar.co/timings.php to read results.");
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,111 @@
|
||||
namespace pocketmine\entity;
|
||||
|
||||
|
||||
class Arrow extends Projectile{
|
||||
use pocketmine\event\entity\EntityDamageEvent;
|
||||
use pocketmine\math\Vector3;
|
||||
use pocketmine\nbt\tag\Short;
|
||||
use pocketmine\network\protocol\AddEntityPacket;
|
||||
use pocketmine\network\protocol\SetEntityMotionPacket;
|
||||
use pocketmine\Player;
|
||||
|
||||
class Arrow extends Projectile{
|
||||
const NETWORK_ID = 80;
|
||||
|
||||
public $width = 0.5;
|
||||
public $length = 0.5;
|
||||
public $height = 0.5;
|
||||
protected $gravity = 0.05;
|
||||
protected $drag = 0.01;
|
||||
|
||||
protected function initEntity(){
|
||||
$this->setMaxHealth(1);
|
||||
$this->setHealth(1);
|
||||
if(isset($this->namedtag->Age)){
|
||||
$this->age = $this->namedtag["Age"];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function onUpdate(){
|
||||
$this->entityBaseTick();
|
||||
|
||||
$this->motionY -= $this->gravity;
|
||||
|
||||
$this->inBlock = $this->checkObstruction($this->x, ($this->boundingBox->minY + $this->boundingBox->maxY) / 2, $this->z);
|
||||
$this->move($this->motionX, $this->motionY, $this->motionZ);
|
||||
|
||||
$friction = 1 - $this->drag;
|
||||
|
||||
if($this->onGround){
|
||||
$friction = $this->getLevel()->getBlock(new Vector3($this->getFloorX(), $this->getFloorY() - 1, $this->getFloorZ()))->frictionFactor * $friction;
|
||||
}
|
||||
|
||||
$this->motionX *= $friction;
|
||||
$this->motionY *= 1 - $this->drag;
|
||||
$this->motionZ *= $friction;
|
||||
|
||||
if($this->onGround){
|
||||
$this->motionY *= -0.5;
|
||||
}
|
||||
|
||||
if(abs($this->motionX) < 0.01){
|
||||
$this->motionX = 0;
|
||||
}
|
||||
if(abs($this->motionZ) < 0.01){
|
||||
$this->motionZ = 0;
|
||||
}
|
||||
|
||||
if($this->age > 1200){
|
||||
$this->kill();
|
||||
}
|
||||
$this->updateMovement();
|
||||
|
||||
//TODO: handle scheduled updates
|
||||
return true;
|
||||
}
|
||||
|
||||
public function attack($damage, $source = EntityDamageEvent::CAUSE_MAGIC){
|
||||
|
||||
}
|
||||
|
||||
public function heal($amount){
|
||||
|
||||
}
|
||||
|
||||
public function saveNBT(){
|
||||
$this->namedtag->Age = new Short("Age", $this->age);
|
||||
}
|
||||
|
||||
public function getData(){
|
||||
$flags = 0;
|
||||
$flags |= $this->fireTicks > 0 ? 1 : 0;
|
||||
|
||||
return [
|
||||
0 => array("type" => 0, "value" => $flags)
|
||||
];
|
||||
}
|
||||
|
||||
public function canCollideWith(Entity $entity){
|
||||
return $entity instanceof Living;
|
||||
}
|
||||
|
||||
public function spawnTo(Player $player){
|
||||
$pk = new AddEntityPacket();
|
||||
$pk->type = Arrow::NETWORK_ID;
|
||||
$pk->eid = $this->getID();
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
$pk->z = $this->z;
|
||||
$pk->did = 0; //TODO: send motion here
|
||||
$player->dataPacket($pk);
|
||||
|
||||
$pk = new SetEntityMotionPacket();
|
||||
$pk->entities = [
|
||||
[$this->getID(), $this->motionX, $this->motionY, $this->motionZ]
|
||||
];
|
||||
$player->dataPacket($pk);
|
||||
|
||||
parent::spawnTo($player);
|
||||
}
|
||||
}
|
@ -26,7 +26,6 @@ namespace pocketmine\entity;
|
||||
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\event\entity\EntityDamageEvent;
|
||||
use pocketmine\event\entity\EntityDeathEvent;
|
||||
use pocketmine\event\entity\EntityDespawnEvent;
|
||||
use pocketmine\event\entity\EntityLevelChangeEvent;
|
||||
use pocketmine\event\entity\EntityMotionEvent;
|
||||
@ -35,6 +34,7 @@ use pocketmine\event\entity\EntitySpawnEvent;
|
||||
use pocketmine\event\entity\EntityTeleportEvent;
|
||||
use pocketmine\event\Timings;
|
||||
use pocketmine\level\format\Chunk;
|
||||
use pocketmine\level\format\FullChunk;
|
||||
use pocketmine\level\Level;
|
||||
use pocketmine\level\Position;
|
||||
use pocketmine\math\AxisAlignedBB;
|
||||
@ -47,18 +47,20 @@ use pocketmine\nbt\tag\Double;
|
||||
use pocketmine\nbt\tag\Enum;
|
||||
use pocketmine\nbt\tag\Float;
|
||||
use pocketmine\nbt\tag\Short;
|
||||
use pocketmine\Network;
|
||||
use pocketmine\network\protocol\MoveEntityPacket;
|
||||
use pocketmine\network\protocol\MovePlayerPacket;
|
||||
use pocketmine\network\protocol\RemoveEntityPacket;
|
||||
use pocketmine\network\protocol\SetEntityMotionPacket;
|
||||
use pocketmine\network\protocol\SetTimePacket;
|
||||
use pocketmine\network\protocol\UnloadChunkPacket;
|
||||
use pocketmine\Network;
|
||||
use pocketmine\Player;
|
||||
use pocketmine\plugin\Plugin;
|
||||
use pocketmine\Server;
|
||||
|
||||
abstract class Entity extends Position implements Metadatable{
|
||||
|
||||
const NETWORK_ID = -1;
|
||||
|
||||
public static $entityCount = 1;
|
||||
|
||||
/**
|
||||
@ -146,19 +148,25 @@ abstract class Entity extends Position implements Metadatable{
|
||||
public $closed = false;
|
||||
|
||||
|
||||
public function __construct(Chunk $chunk, Compound $nbt){
|
||||
public function __construct(FullChunk $chunk, Compound $nbt){
|
||||
if($chunk === null or $chunk->getProvider() === null){
|
||||
throw new \Exception("Invalid garbage Chunk given to Entity");
|
||||
}
|
||||
|
||||
$this->id = Entity::$entityCount++;
|
||||
$this->justCreated = true;
|
||||
$this->namedtag = $nbt;
|
||||
$this->chunk = $chunk;
|
||||
$this->setLevel($chunk->getLevel()->getLevel(), true); //Create a hard reference
|
||||
$this->server = $chunk->getLevel()->getLevel()->getServer();
|
||||
$this->setLevel($chunk->getProvider()->getLevel()); //Create a hard reference
|
||||
$this->server = $chunk->getProvider()->getLevel()->getServer();
|
||||
|
||||
$this->boundingBox = new AxisAlignedBB(0, 0, 0, 0, 0, 0);
|
||||
$this->setPositionAndRotation(new Vector3(
|
||||
$this->setPositionAndRotation(
|
||||
new Vector3(
|
||||
$this->namedtag["Pos"][0],
|
||||
$this->namedtag["Pos"][1],
|
||||
$this->namedtag["Pos"][2]),
|
||||
$this->namedtag["Pos"][2]
|
||||
),
|
||||
$this->namedtag->Rotation[0],
|
||||
$this->namedtag->Rotation[1]
|
||||
);
|
||||
@ -230,6 +238,9 @@ abstract class Entity extends Position implements Metadatable{
|
||||
|
||||
protected abstract function initEntity();
|
||||
|
||||
/**
|
||||
* @return Player[]
|
||||
*/
|
||||
public function getViewers(){
|
||||
return $this->hasSpawned;
|
||||
}
|
||||
@ -414,6 +425,8 @@ abstract class Entity extends Position implements Metadatable{
|
||||
|
||||
public function entityBaseTick(){
|
||||
//TODO: check vehicles
|
||||
|
||||
|
||||
if($this->dead === true and !($this instanceof Player)){
|
||||
$this->close();
|
||||
|
||||
@ -479,7 +492,7 @@ abstract class Entity extends Position implements Metadatable{
|
||||
$pk = new MovePlayerPacket;
|
||||
$pk->eid = $this->id;
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
$pk->y = $this->y; //teleport from head
|
||||
$pk->z = $this->z;
|
||||
$pk->yaw = $this->yaw;
|
||||
$pk->pitch = $this->pitch;
|
||||
@ -491,7 +504,10 @@ abstract class Entity extends Position implements Metadatable{
|
||||
[$this->id, $this->x, $this->y, $this->z, $this->yaw, $this->pitch]
|
||||
];
|
||||
}
|
||||
Server::broadcastPacket($this->hasSpawned, $pk);
|
||||
|
||||
foreach($this->hasSpawned as $player){
|
||||
$player->directDataPacket($pk);
|
||||
}
|
||||
}
|
||||
|
||||
if(($this->lastMotionX != $this->motionX or $this->lastMotionY != $this->motionY or $this->lastMotionZ != $this->motionZ)){
|
||||
@ -646,15 +662,11 @@ abstract class Entity extends Position implements Metadatable{
|
||||
$entity->despawnFrom($this);
|
||||
}
|
||||
|
||||
/*$pk = new UnloadChunkPacket();
|
||||
$pk->chunkX = $X;
|
||||
$pk->chunkZ = $Z;
|
||||
$this->dataPacket($pk);*/
|
||||
}
|
||||
$this->getLevel()->freeAllChunks($this);
|
||||
}
|
||||
}
|
||||
$this->setLevel($targetLevel, true); //Hard reference
|
||||
$this->setLevel($targetLevel, $this instanceof Player ? true : false); //Hard reference
|
||||
$this->getLevel()->addEntity($this);
|
||||
if($this instanceof Player){
|
||||
$this->usedChunks = [];
|
||||
@ -926,7 +938,7 @@ abstract class Entity extends Position implements Metadatable{
|
||||
|
||||
|
||||
if($this->chunk === null or ($this->chunk->getX() !== ($this->x >> 4) and $this->chunk->getZ() !== ($this->z >> 4))){
|
||||
if($this->chunk instanceof Chunk){
|
||||
if($this->chunk instanceof FullChunk){
|
||||
$this->chunk->removeEntity($this);
|
||||
}
|
||||
$this->getLevel()->loadChunk($this->x >> 4, $this->z >> 4);
|
||||
@ -1004,6 +1016,9 @@ abstract class Entity extends Position implements Metadatable{
|
||||
|
||||
$this->setMotion(new Vector3(0, 0, 0));
|
||||
if($this->setPositionAndRotation($pos, $yaw === null ? $this->yaw : $yaw, $pitch === null ? $this->pitch : $pitch, true) !== false){
|
||||
$this->fallDistance = 0;
|
||||
$this->onGround = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1030,14 +1045,17 @@ abstract class Entity extends Position implements Metadatable{
|
||||
|
||||
public function close(){
|
||||
if($this->closed === false){
|
||||
$this->server->getPluginManager()->callEvent(new EntityDespawnEvent($this));
|
||||
$this->closed = true;
|
||||
unset(Entity::$needUpdate[$this->id]);
|
||||
if($this->chunk instanceof Chunk){
|
||||
if($this->chunk instanceof FullChunk){
|
||||
$this->chunk->removeEntity($this);
|
||||
}
|
||||
$this->getLevel()->removeEntity($this);
|
||||
if(($level = $this->getLevel()) instanceof Level){
|
||||
$level->removeEntity($this);
|
||||
}
|
||||
$this->despawnFromAll();
|
||||
$this->server->getPluginManager()->callEvent(new EntityDespawnEvent($this));
|
||||
$this->level->release();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1063,4 +1081,8 @@ abstract class Entity extends Position implements Metadatable{
|
||||
$this->server->getEntityMetadata()->removeMetadata($this, $metadataKey, $plugin);
|
||||
}
|
||||
|
||||
public function __toString(){
|
||||
return (new \ReflectionClass($this))->getShortName() . "(" . $this->getID() . ")";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,7 +21,6 @@
|
||||
|
||||
namespace pocketmine\entity;
|
||||
|
||||
use pocketmine\inventory\Inventory;
|
||||
use pocketmine\inventory\InventoryHolder;
|
||||
use pocketmine\inventory\PlayerInventory;
|
||||
use pocketmine\item\Item;
|
||||
@ -30,10 +29,10 @@ use pocketmine\nbt\tag\Byte;
|
||||
use pocketmine\nbt\tag\Compound;
|
||||
use pocketmine\nbt\tag\Enum;
|
||||
use pocketmine\nbt\tag\Short;
|
||||
use pocketmine\Network;
|
||||
use pocketmine\network\protocol\AddPlayerPacket;
|
||||
use pocketmine\network\protocol\RemovePlayerPacket;
|
||||
use pocketmine\network\protocol\SetEntityMotionPacket;
|
||||
use pocketmine\Network;
|
||||
use pocketmine\Player;
|
||||
use pocketmine\utils\TextFormat;
|
||||
|
||||
@ -80,6 +79,21 @@ class Human extends Creature implements ProjectileSource, InventoryHolder{
|
||||
return $this->nameTag;
|
||||
}
|
||||
|
||||
public function getDrops(){
|
||||
$drops = [];
|
||||
if($this->inventory instanceof PlayerInventory){
|
||||
foreach($this->inventory->getContents() as $item){
|
||||
$drops[] = $item;
|
||||
}
|
||||
|
||||
foreach($this->inventory->getArmorContents() as $item){
|
||||
$drops[] = $item;
|
||||
}
|
||||
}
|
||||
|
||||
return $drops;
|
||||
}
|
||||
|
||||
public function saveNBT(){
|
||||
parent::saveNBT();
|
||||
$this->namedtag->Inventory = new Enum("Inventory", []);
|
||||
|
@ -27,11 +27,11 @@ use pocketmine\event\entity\EntityDamageEvent;
|
||||
use pocketmine\event\entity\EntityDeathEvent;
|
||||
use pocketmine\event\entity\EntityRegainHealthEvent;
|
||||
use pocketmine\event\Timings;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\math\Vector3;
|
||||
use pocketmine\nbt\tag\Short;
|
||||
use pocketmine\network\protocol\EntityEventPacket;
|
||||
use pocketmine\Server;
|
||||
use pocketmine\item\Item;
|
||||
|
||||
abstract class Living extends Entity implements Damageable{
|
||||
|
||||
|
@ -22,12 +22,71 @@
|
||||
namespace pocketmine\entity;
|
||||
|
||||
|
||||
use pocketmine\nbt\tag\Int;
|
||||
use pocketmine\network\protocol\AddMobPacket;
|
||||
use pocketmine\network\protocol\SetEntityMotionPacket;
|
||||
use pocketmine\Player;
|
||||
|
||||
class Villager extends Creature implements NPC, Ageable{
|
||||
const FARMER = 0;
|
||||
const LIBRARIAN = 1;
|
||||
const PRIEST = 2;
|
||||
const BLACKSMITH = 3;
|
||||
const BUTCHER = 4;
|
||||
const PROFESSION_FARMER = 0;
|
||||
const PROFESSION_LIBRARIAN = 1;
|
||||
const PROFESSION_PRIEST = 2;
|
||||
const PROFESSION_BLACKSMITH = 3;
|
||||
const PROFESSION_BUTCHER = 4;
|
||||
const PROFESSION_GENERIC = 5;
|
||||
|
||||
const NETWORK_ID = 15;
|
||||
|
||||
public $width = 0.6;
|
||||
public $length = 0.6;
|
||||
public $height = 1.8;
|
||||
|
||||
public function getName(){
|
||||
return "Villager";
|
||||
}
|
||||
|
||||
protected function initEntity(){
|
||||
parent::initEntity();
|
||||
if(!isset($this->namedtag->Profession)){
|
||||
$this->setProfession(self::PROFESSION_GENERIC);
|
||||
}
|
||||
}
|
||||
|
||||
public function spawnTo(Player $player){
|
||||
$pk = new AddMobPacket();
|
||||
$pk->eid = $this->getID();
|
||||
$pk->type = Villager::NETWORK_ID;
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
$pk->z = $this->z;
|
||||
$pk->yaw = $this->yaw;
|
||||
$pk->pitch = $this->pitch;
|
||||
$pk->metadata = $this->getData();
|
||||
$player->dataPacket($pk);
|
||||
|
||||
$pk = new SetEntityMotionPacket();
|
||||
$pk->entities = [
|
||||
[$this->getID(), $this->motionX, $this->motionY, $this->motionZ]
|
||||
];
|
||||
$player->dataPacket($pk);
|
||||
|
||||
parent::spawnTo($player);
|
||||
}
|
||||
|
||||
public function getData(){ //TODO
|
||||
$flags = 0;
|
||||
$flags |= $this->fireTicks > 0 ? 1 : 0;
|
||||
//$flags |= ($this->crouched === true ? 0b10:0) << 1;
|
||||
//$flags |= ($this->inAction === true ? 0b10000:0);
|
||||
$d = array(
|
||||
0 => array("type" => 0, "value" => $flags),
|
||||
1 => array("type" => 1, "value" => $this->airTicks),
|
||||
16 => array("type" => 0, "value" => 0),
|
||||
17 => array("type" => 6, "value" => array(0, 0, 0)),
|
||||
);
|
||||
|
||||
return $d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the villager profession
|
||||
@ -35,6 +94,10 @@ class Villager extends Creature implements NPC, Ageable{
|
||||
* @param $profession
|
||||
*/
|
||||
public function setProfession($profession){
|
||||
$this->namedtag->Profession = new Int("Profession", $profession);
|
||||
}
|
||||
|
||||
public function getProfession(){
|
||||
return $this->namedtag["Profession"];
|
||||
}
|
||||
}
|
@ -22,6 +22,80 @@
|
||||
namespace pocketmine\entity;
|
||||
|
||||
|
||||
class Zombie extends Monster{
|
||||
use pocketmine\event\entity\EntityDamageByEntityEvent;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\network\protocol\AddMobPacket;
|
||||
use pocketmine\network\protocol\SetEntityMotionPacket;
|
||||
use pocketmine\Player;
|
||||
|
||||
class Zombie extends Monster{
|
||||
const NETWORK_ID = 32;
|
||||
|
||||
public $width = 0.6;
|
||||
public $length = 0.6;
|
||||
public $height = 1.8;
|
||||
|
||||
public function getName(){
|
||||
return "Zombie";
|
||||
}
|
||||
|
||||
public function spawnTo(Player $player){
|
||||
|
||||
$pk = new AddMobPacket();
|
||||
$pk->eid = $this->getID();
|
||||
$pk->type = Zombie::NETWORK_ID;
|
||||
$pk->x = $this->x;
|
||||
$pk->y = $this->y;
|
||||
$pk->z = $this->z;
|
||||
$pk->yaw = $this->yaw;
|
||||
$pk->pitch = $this->pitch;
|
||||
$pk->metadata = $this->getData();
|
||||
$player->dataPacket($pk);
|
||||
|
||||
$pk = new SetEntityMotionPacket();
|
||||
$pk->entities = [
|
||||
[$this->getID(), $this->motionX, $this->motionY, $this->motionZ]
|
||||
];
|
||||
$player->dataPacket($pk);
|
||||
|
||||
parent::spawnTo($player);
|
||||
}
|
||||
|
||||
public function getData(){ //TODO
|
||||
$flags = 0;
|
||||
$flags |= $this->fireTicks > 0 ? 1 : 0;
|
||||
//$flags |= ($this->crouched === true ? 0b10:0) << 1;
|
||||
//$flags |= ($this->inAction === true ? 0b10000:0);
|
||||
$d = array(
|
||||
0 => array("type" => 0, "value" => $flags),
|
||||
1 => array("type" => 1, "value" => $this->airTicks),
|
||||
16 => array("type" => 0, "value" => 0),
|
||||
17 => array("type" => 6, "value" => array(0, 0, 0)),
|
||||
);
|
||||
|
||||
return $d;
|
||||
}
|
||||
|
||||
public function getDrops(){
|
||||
$drops = [
|
||||
Item::get(Item::FEATHER, 0, 1)
|
||||
];
|
||||
if($this->lastDamageCause instanceof EntityDamageByEntityEvent and $this->lastDamageCause->getEntity() instanceof Player){
|
||||
if(mt_rand(0, 199) < 5){
|
||||
switch(mt_rand(0, 2)){
|
||||
case 0:
|
||||
$drops[] = Item::get(Item::IRON_INGOT, 0, 1);
|
||||
break;
|
||||
case 1:
|
||||
$drops[] = Item::get(Item::CARROT, 0, 1);
|
||||
break;
|
||||
case 2:
|
||||
$drops[] = Item::get(Item::POTATO, 0, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $drops;
|
||||
}
|
||||
}
|
@ -53,6 +53,7 @@ abstract class Event{
|
||||
if(!($this instanceof Cancellable)){
|
||||
throw new \BadMethodCallException("Event is not Cancellable");
|
||||
}
|
||||
|
||||
return $this->isCancelled === true;
|
||||
}
|
||||
|
||||
|
@ -74,30 +74,30 @@ class LevelTimings{
|
||||
public function __construct(Level $level){
|
||||
$name = $level->getFolderName() . " - ";
|
||||
|
||||
$this->mobSpawn = new TimingsHandler("** ". $name ."mobSpawn");
|
||||
$this->doChunkUnload = new TimingsHandler("** ". $name ."doChunkUnload");
|
||||
$this->doTickPending = new TimingsHandler("** ". $name ."doTickPending");
|
||||
$this->doTickTiles = new TimingsHandler("** ". $name ."doTickTiles");
|
||||
$this->doVillages = new TimingsHandler("** ". $name ."doVillages");
|
||||
$this->doChunkMap = new TimingsHandler("** ". $name ."doChunkMap");
|
||||
$this->doSounds = new TimingsHandler("** ". $name ."doSounds");
|
||||
$this->doChunkGC = new TimingsHandler("** ". $name ."doChunkGC");
|
||||
$this->doPortalForcer = new TimingsHandler("** ". $name ."doPortalForcer");
|
||||
$this->entityTick = new TimingsHandler("** ". $name ."entityTick");
|
||||
$this->tileEntityTick = new TimingsHandler("** ". $name ."tileEntityTick");
|
||||
$this->tileEntityPending = new TimingsHandler("** ". $name ."tileEntityPending");
|
||||
$this->mobSpawn = new TimingsHandler("** " . $name . "mobSpawn");
|
||||
$this->doChunkUnload = new TimingsHandler("** " . $name . "doChunkUnload");
|
||||
$this->doTickPending = new TimingsHandler("** " . $name . "doTickPending");
|
||||
$this->doTickTiles = new TimingsHandler("** " . $name . "doTickTiles");
|
||||
$this->doVillages = new TimingsHandler("** " . $name . "doVillages");
|
||||
$this->doChunkMap = new TimingsHandler("** " . $name . "doChunkMap");
|
||||
$this->doSounds = new TimingsHandler("** " . $name . "doSounds");
|
||||
$this->doChunkGC = new TimingsHandler("** " . $name . "doChunkGC");
|
||||
$this->doPortalForcer = new TimingsHandler("** " . $name . "doPortalForcer");
|
||||
$this->entityTick = new TimingsHandler("** " . $name . "entityTick");
|
||||
$this->tileEntityTick = new TimingsHandler("** " . $name . "tileEntityTick");
|
||||
$this->tileEntityPending = new TimingsHandler("** " . $name . "tileEntityPending");
|
||||
|
||||
$this->syncChunkLoadTimer = new TimingsHandler("** ". $name ."syncChunkLoad");
|
||||
$this->syncChunkLoadDataTimer = new TimingsHandler("** ". $name ."syncChunkLoad - Data");
|
||||
$this->syncChunkLoadStructuresTimer = new TimingsHandler("** ". $name ."syncChunkLoad - Structures");
|
||||
$this->syncChunkLoadEntitiesTimer = new TimingsHandler("** ". $name ."syncChunkLoad - Entities");
|
||||
$this->syncChunkLoadTileEntitiesTimer = new TimingsHandler("** ". $name ."syncChunkLoad - TileEntities");
|
||||
$this->syncChunkLoadTileTicksTimer = new TimingsHandler("** ". $name ."syncChunkLoad - TileTicks");
|
||||
$this->syncChunkLoadPostTimer = new TimingsHandler("** ". $name ."syncChunkLoad - Post");
|
||||
$this->syncChunkLoadTimer = new TimingsHandler("** " . $name . "syncChunkLoad");
|
||||
$this->syncChunkLoadDataTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Data");
|
||||
$this->syncChunkLoadStructuresTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Structures");
|
||||
$this->syncChunkLoadEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Entities");
|
||||
$this->syncChunkLoadTileEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - TileEntities");
|
||||
$this->syncChunkLoadTileTicksTimer = new TimingsHandler("** " . $name . "syncChunkLoad - TileTicks");
|
||||
$this->syncChunkLoadPostTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Post");
|
||||
|
||||
$this->tracker = new TimingsHandler($name ."tracker");
|
||||
$this->doTick = new TimingsHandler($name ."doTick");
|
||||
$this->tickEntities = new TimingsHandler($name ."tickEntities");
|
||||
$this->tracker = new TimingsHandler($name . "tracker");
|
||||
$this->doTick = new TimingsHandler($name . "doTick");
|
||||
$this->tickEntities = new TimingsHandler($name . "tickEntities");
|
||||
}
|
||||
|
||||
}
|
@ -22,7 +22,6 @@
|
||||
namespace pocketmine\event;
|
||||
|
||||
|
||||
|
||||
use pocketmine\entity\Entity;
|
||||
use pocketmine\plugin\PluginManager;
|
||||
use pocketmine\scheduler\PluginTask;
|
||||
@ -127,7 +126,7 @@ abstract class Timings{
|
||||
public static function getPluginTaskTimings(TaskHandler $task, $period){
|
||||
$ftask = $task->getTask();
|
||||
if($ftask instanceof PluginTask and $ftask->getOwner() !== null){
|
||||
$plugin = $ftask->getOwner()->getDescription()->getName();
|
||||
$plugin = $ftask->getOwner()->getDescription()->getFullName();
|
||||
}elseif($task->timingName !== null){
|
||||
$plugin = "Scheduler";
|
||||
}else{
|
||||
@ -136,10 +135,10 @@ abstract class Timings{
|
||||
|
||||
$taskname = $task->getTaskName();
|
||||
|
||||
$name = "Task: ". $plugin." Runnable: ". $taskname;
|
||||
$name = "Task: " . $plugin . " Runnable: " . $taskname;
|
||||
|
||||
if($period > 0){
|
||||
$name .= "(interval:".$period.")";
|
||||
$name .= "(interval:" . $period . ")";
|
||||
}else{
|
||||
$name .= "(Single)";
|
||||
}
|
||||
@ -159,7 +158,7 @@ abstract class Timings{
|
||||
public static function getEntityTimings(Entity $entity){
|
||||
$entityType = (new \ReflectionClass($entity))->getShortName();
|
||||
if(!isset(self::$entityTypeTimingMap[$entityType])){
|
||||
self::$entityTypeTimingMap[$entityType] = new TimingsHandler("** tickEntity - ". $entityType, self::$activatedEntityTimer);
|
||||
self::$entityTypeTimingMap[$entityType] = new TimingsHandler("** tickEntity - " . $entityType, self::$activatedEntityTimer);
|
||||
}
|
||||
|
||||
return self::$entityTypeTimingMap[$entityType];
|
||||
@ -173,7 +172,7 @@ abstract class Timings{
|
||||
public static function getTileEntityTimings(Tile $tile){
|
||||
$tileType = (new \ReflectionClass($tile))->getShortName();
|
||||
if(!isset(self::$tileEntityTypeTimingMap[$tileType])){
|
||||
self::$tileEntityTypeTimingMap[$tileType] = new TimingsHandler("** tickTileEntity - ". $tileType, self::$tickTileEntityTimer);
|
||||
self::$tileEntityTypeTimingMap[$tileType] = new TimingsHandler("** tickTileEntity - " . $tileType, self::$tickTileEntityTimer);
|
||||
}
|
||||
|
||||
return self::$tileEntityTypeTimingMap[$tileType];
|
||||
|
@ -67,7 +67,7 @@ class TimingsHandler{
|
||||
|
||||
$avg = $time / $count;
|
||||
|
||||
fwrite($fp, " " . $timings->name ." Time: ". round($time * 1000000000) ." Count: ". $count ." Avg: ". round($avg * 1000000000) ." Violations: ". $timings->violations . PHP_EOL);
|
||||
fwrite($fp, " " . $timings->name . " Time: " . round($time * 1000000000) . " Count: " . $count . " Avg: " . round($avg * 1000000000) . " Violations: " . $timings->violations . PHP_EOL);
|
||||
}
|
||||
|
||||
fwrite($fp, "# Version " . Server::getInstance()->getVersion() . PHP_EOL);
|
||||
@ -84,8 +84,8 @@ class TimingsHandler{
|
||||
}
|
||||
}
|
||||
|
||||
fwrite($fp, "# Entities ". $entities . PHP_EOL);
|
||||
fwrite($fp, "# LivingEntities ". $livingEntities . PHP_EOL);
|
||||
fwrite($fp, "# Entities " . $entities . PHP_EOL);
|
||||
fwrite($fp, "# LivingEntities " . $livingEntities . PHP_EOL);
|
||||
}
|
||||
|
||||
public static function reload(){
|
||||
|
@ -24,12 +24,20 @@
|
||||
*/
|
||||
namespace pocketmine\event\block;
|
||||
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\event\Event;
|
||||
|
||||
abstract class BlockEvent extends Event{
|
||||
/** @var \pocketmine\block\Block */
|
||||
protected $block;
|
||||
|
||||
/**
|
||||
* @param Block $block
|
||||
*/
|
||||
protected function __construct(Block $block){
|
||||
$this->block = $block;
|
||||
}
|
||||
|
||||
public function getBlock(){
|
||||
return $this->block;
|
||||
}
|
||||
|
80
src/pocketmine/event/block/SignChangeEvent.php
Normal file
80
src/pocketmine/event/block/SignChangeEvent.php
Normal file
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\event\block;
|
||||
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\event\Cancellable;
|
||||
use pocketmine\Player;
|
||||
|
||||
/**
|
||||
* Called when a sign is changed by a player.
|
||||
*/
|
||||
class SignChangeEvent extends BlockEvent implements Cancellable{
|
||||
public static $handlerList = null;
|
||||
|
||||
/** @var \pocketmine\Player */
|
||||
private $player;
|
||||
/** @var string[] */
|
||||
private $lines = [];
|
||||
|
||||
/**
|
||||
* @param Block $theBlock
|
||||
* @param Player $thePlayer
|
||||
* @param string[] $theLines
|
||||
*/
|
||||
public function __construct(Block $theBlock, Player $thePlayer, array $theLines){
|
||||
parent::__construct($theBlock);
|
||||
$this->player = $thePlayer;
|
||||
$this->lines = $theLines;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Player
|
||||
*/
|
||||
public function getPlayer(){
|
||||
return $this->player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getLines(){
|
||||
return $this->lines;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $index 0-3
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLine($index){
|
||||
return $this->lines[$index];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $index 0-3
|
||||
* @param string $line
|
||||
*/
|
||||
public function setLine($index, $line){
|
||||
$this->lines[$index] = $line;
|
||||
}
|
||||
}
|
@ -22,7 +22,6 @@
|
||||
namespace pocketmine\event\entity;
|
||||
|
||||
use pocketmine\entity\Entity;
|
||||
use pocketmine\event\Cancellable;
|
||||
|
||||
class EntityDamageByEntityEvent extends EntityDamageEvent{
|
||||
public static $handlerList = null;
|
||||
@ -32,7 +31,7 @@ class EntityDamageByEntityEvent extends EntityDamageEvent{
|
||||
|
||||
|
||||
/**
|
||||
* @param Entity $damager
|
||||
* @param Entity $damager
|
||||
* @param Entity $entity
|
||||
* @param int $cause
|
||||
* @param int|int[] $damage
|
||||
|
@ -119,7 +119,7 @@ class EntityDamageEvent extends EntityEvent implements Cancellable{
|
||||
*/
|
||||
public function setDamage($damage, $type = self::MODIFIER_BASE){
|
||||
if(!isset($this->modifiers[$type])){
|
||||
throw new \UnexpectedValueException($type ." is not applicable to ".$this->getEntity());
|
||||
throw new \UnexpectedValueException($type . " is not applicable to " . $this->getEntity());
|
||||
}
|
||||
$this->modifiers[$type] = $damage;
|
||||
}
|
||||
@ -141,6 +141,7 @@ class EntityDamageEvent extends EntityEvent implements Cancellable{
|
||||
foreach($this->modifiers as $type => $d){
|
||||
$damage += $d;
|
||||
}
|
||||
|
||||
return $damage;
|
||||
}
|
||||
|
||||
|
@ -21,12 +21,8 @@
|
||||
|
||||
namespace pocketmine\event\entity;
|
||||
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\entity\Entity;
|
||||
use pocketmine\entity\Living;
|
||||
use pocketmine\event\Cancellable;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\level\Position;
|
||||
|
||||
class EntityDeathEvent extends EntityEvent{
|
||||
public static $handlerList = null;
|
||||
@ -37,7 +33,7 @@ class EntityDeathEvent extends EntityEvent{
|
||||
|
||||
/**
|
||||
* @param Living $entity
|
||||
* @param Item[] $drops
|
||||
* @param Item[] $drops
|
||||
*/
|
||||
public function __construct(Living $entity, array $drops = []){
|
||||
$this->entity = $entity;
|
||||
|
@ -36,6 +36,7 @@ class CraftItemEvent extends Event implements Cancellable{
|
||||
|
||||
/**
|
||||
* @param CraftingTransactionGroup $ts
|
||||
* @param Recipe $recipe
|
||||
*/
|
||||
public function __construct(CraftingTransactionGroup $ts, Recipe $recipe){
|
||||
$this->ts = $ts;
|
||||
|
@ -27,7 +27,7 @@ use pocketmine\inventory\TransactionGroup;
|
||||
|
||||
/**
|
||||
* Called when there is a transaction between two Inventory objects.
|
||||
* The source of this can be a Player, entities, mods, or even hoppers in the future!
|
||||
* The source of this can be a Player, entities, mobs, or even hoppers in the future!
|
||||
*/
|
||||
class InventoryTransactionEvent extends Event implements Cancellable{
|
||||
public static $handlerList = null;
|
||||
@ -46,4 +46,4 @@ class InventoryTransactionEvent extends Event implements Cancellable{
|
||||
return $this->ts;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
47
src/pocketmine/event/level/ChunkEvent.php
Normal file
47
src/pocketmine/event/level/ChunkEvent.php
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Level related events
|
||||
*/
|
||||
namespace pocketmine\event\level;
|
||||
|
||||
use pocketmine\level\format\FullChunk;
|
||||
|
||||
abstract class ChunkEvent extends LevelEvent{
|
||||
/** @var FullChunk */
|
||||
private $chunk;
|
||||
|
||||
/**
|
||||
* @param FullChunk $chunk
|
||||
*/
|
||||
public function __construct(FullChunk $chunk){
|
||||
parent::__construct($chunk->getProvider()->getLevel());
|
||||
$this->chunk = $chunk;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FullChunk
|
||||
*/
|
||||
public function getChunk(){
|
||||
return $this->chunk;
|
||||
}
|
||||
}
|
45
src/pocketmine/event/level/ChunkLoadEvent.php
Normal file
45
src/pocketmine/event/level/ChunkLoadEvent.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\event\level;
|
||||
|
||||
use pocketmine\level\format\FullChunk;
|
||||
|
||||
/**
|
||||
* Called when a Chunk is loaded
|
||||
*/
|
||||
class ChunkLoadEvent extends ChunkEvent{
|
||||
public static $handlerList = null;
|
||||
|
||||
private $newChunk;
|
||||
|
||||
public function __construct(FullChunk $chunk, $newChunk){
|
||||
parent::__construct($chunk);
|
||||
$this->newChunk = (bool) $newChunk;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isNewChunk(){
|
||||
return $this->newChunk;
|
||||
}
|
||||
}
|
@ -14,17 +14,16 @@
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
*/
|
||||
|
||||
namespace pocketmine\scheduler;
|
||||
namespace pocketmine\event\level;
|
||||
|
||||
class PHPGarbageCollectionTask extends Task{
|
||||
|
||||
public function onRun($currentTicks){
|
||||
gc_collect_cycles();
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Called when a Chunk is populated (after receiving it on the main thread)
|
||||
*/
|
||||
class ChunkPopulateEvent extends ChunkEvent{
|
||||
public static $handlerList = null;
|
||||
}
|
31
src/pocketmine/event/level/ChunkUnloadEvent.php
Normal file
31
src/pocketmine/event/level/ChunkUnloadEvent.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\event\level;
|
||||
|
||||
use pocketmine\event\Cancellable;
|
||||
|
||||
/**
|
||||
* Called when a Chunk is unloaded
|
||||
*/
|
||||
class ChunkUnloadEvent extends ChunkEvent implements Cancellable{
|
||||
public static $handlerList = null;
|
||||
}
|
@ -20,10 +20,11 @@
|
||||
*/
|
||||
|
||||
namespace pocketmine\event\level;
|
||||
|
||||
use pocketmine\event\Cancellable;
|
||||
|
||||
/**
|
||||
* Called when a Level is saved
|
||||
* Called when a Level is unloaded
|
||||
*/
|
||||
class LevelUnloadEvent extends LevelEvent implements Cancellable{
|
||||
public static $handlerList = null;
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
namespace pocketmine\event\player;
|
||||
|
||||
use pocketmine\event\entity\EntityDeathEvent;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\Player;
|
||||
use pocketmine\event\entity\EntityDeathEvent;
|
||||
|
||||
class PlayerDeathEvent extends EntityDeathEvent{
|
||||
public static $handlerList = null;
|
||||
|
@ -21,8 +21,8 @@
|
||||
|
||||
namespace pocketmine\event\player;
|
||||
|
||||
use pocketmine\event\Cancellable;
|
||||
use pocketmine\Event;
|
||||
use pocketmine\event\Cancellable;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\Player;
|
||||
|
||||
|
@ -32,6 +32,6 @@ class PluginDisableEvent extends PluginEvent{
|
||||
* @param Plugin $plugin
|
||||
*/
|
||||
public function __construct(Plugin $plugin){
|
||||
$this->plugin = $plugin;
|
||||
parent::__construct($plugin);
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,6 @@ class PluginEnableEvent extends PluginEvent{
|
||||
* @param Plugin $plugin
|
||||
*/
|
||||
public function __construct(Plugin $plugin){
|
||||
$this->plugin = $plugin;
|
||||
parent::__construct($plugin);
|
||||
}
|
||||
}
|
||||
|
@ -21,8 +21,8 @@
|
||||
|
||||
namespace pocketmine\event\server;
|
||||
|
||||
use pocketmine\event;
|
||||
use pocketmine\event\Cancellable;
|
||||
use pocketmine\event;
|
||||
use pocketmine\network\protocol\DataPacket;
|
||||
use pocketmine\Player;
|
||||
|
||||
|
@ -21,8 +21,8 @@
|
||||
|
||||
namespace pocketmine\event\server;
|
||||
|
||||
use pocketmine\event;
|
||||
use pocketmine\event\Cancellable;
|
||||
use pocketmine\event;
|
||||
use pocketmine\network\protocol\DataPacket;
|
||||
use pocketmine\Player;
|
||||
|
||||
|
40
src/pocketmine/event/server/RemoteServerCommandEvent.php
Normal file
40
src/pocketmine/event/server/RemoteServerCommandEvent.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\event\server;
|
||||
|
||||
use pocketmine\command\CommandSender;
|
||||
|
||||
/**
|
||||
* This event is called when a command is received over RCON.
|
||||
*/
|
||||
class RemoteServerCommandEvent extends ServerCommandEvent{
|
||||
public static $handlerList = null;
|
||||
|
||||
/**
|
||||
* @param CommandSender $sender
|
||||
* @param string $command
|
||||
*/
|
||||
public function __construct(CommandSender $sender, $command){
|
||||
parent::__construct($sender, $command);
|
||||
}
|
||||
|
||||
}
|
@ -392,7 +392,7 @@ abstract class BaseInventory implements Inventory{
|
||||
}
|
||||
|
||||
foreach($target as $player){
|
||||
if(($id = $player->getWindowId($this)) === -1){
|
||||
if(($id = $player->getWindowId($this)) === -1 or $player->spawned !== true){
|
||||
$this->close($player);
|
||||
continue;
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ class CraftingManager{
|
||||
$this->registerRecipe((new ShapelessRecipe(Item::get(Item::GLOWSTONE_BLOCK, 0, 1)))->addIngredient(Item::get(Item::GLOWSTONE_DUST, 0, 1)));
|
||||
$this->registerRecipe((new ShapelessRecipe(Item::get(Item::LIT_PUMPKIN, 0, 1)))->addIngredient(Item::get(Item::PUMPKIN, 0, 1))->addIngredient(Item::get(Item::TORCH, 0, 1)));
|
||||
$this->registerRecipe((new ShapelessRecipe(Item::get(Item::SNOW_BLOCK, 0, 1)))->addIngredient(Item::get(Item::SNOWBALL, 0, 1)));
|
||||
$this->registerRecipe((new ShapelessRecipe(Item::get(Item::STICK, 0, 1)))->addIngredient(Item::get(Item::WOODEN_PLANK, null, 2)));
|
||||
$this->registerRecipe((new ShapelessRecipe(Item::get(Item::STICK, 0, 4)))->addIngredient(Item::get(Item::WOODEN_PLANK, null, 2)));
|
||||
$this->registerRecipe((new ShapelessRecipe(Item::get(Item::STONECUTTER, 0, 1)))->addIngredient(Item::get(Item::COBBLESTONE, 0, 1)));
|
||||
$this->registerRecipe((new ShapelessRecipe(Item::get(Item::WOODEN_PLANK, Planks::OAK, 4)))->addIngredient(Item::get(Item::WOOD, Wood::OAK, 1)));
|
||||
$this->registerRecipe((new ShapelessRecipe(Item::get(Item::WOODEN_PLANK, Planks::SPRUCE, 4)))->addIngredient(Item::get(Item::WOOD, Wood::SPRUCE, 1)));
|
||||
@ -195,7 +195,7 @@ class CraftingManager{
|
||||
];
|
||||
for($i = 1; $i < 2; ++$i){
|
||||
foreach($types[$i] as $j => $type){
|
||||
$this->registerRecipe((new BigShapelessRecipe(Item::get($type, 0, 1)))->addIngredient(Item::get($types[0][$j], 0, $cost[$i - 1]))->addIngredient(Item::get(Item::STICK, 0, 1)));
|
||||
$this->registerRecipe((new BigShapelessRecipe(Item::get($type, 0, 1)))->addIngredient(Item::get($types[0][$j], null, $cost[$i - 1]))->addIngredient(Item::get(Item::STICK, 0, 1)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -214,7 +214,7 @@ class CraftingManager{
|
||||
];
|
||||
for($i = 1; $i < 5; ++$i){
|
||||
foreach($types[$i] as $j => $type){
|
||||
$this->registerRecipe((new BigShapelessRecipe(Item::get($type, 0, 1)))->addIngredient(Item::get($types[0][$j], 0, $cost[$i - 1]))->addIngredient(Item::get(Item::STICK, 0, 2)));
|
||||
$this->registerRecipe((new BigShapelessRecipe(Item::get($type, 0, 1)))->addIngredient(Item::get($types[0][$j], null, $cost[$i - 1]))->addIngredient(Item::get(Item::STICK, 0, 2)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -447,4 +447,4 @@ class CraftingManager{
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ class PlayerInventory extends BaseInventory{
|
||||
if($item instanceof Item){
|
||||
return $item;
|
||||
}else{
|
||||
return Item::get(Item::AIR);
|
||||
return Item::get(Item::AIR, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -259,6 +259,13 @@ class PlayerInventory extends BaseInventory{
|
||||
return $armor;
|
||||
}
|
||||
|
||||
public function clearAll(){
|
||||
$limit = $this->getSize() + 4;
|
||||
for($index = 0; $index < $limit; ++$index){
|
||||
$this->clear($index);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player|Player[] $target
|
||||
*/
|
||||
@ -333,7 +340,7 @@ class PlayerInventory extends BaseInventory{
|
||||
$pk->hotbar[] = $index <= -1 ? -1 : $index + 9;
|
||||
}
|
||||
}
|
||||
if(($id = $player->getWindowId($this)) === -1){
|
||||
if(($id = $player->getWindowId($this)) === -1 or $player->spawned !== true){
|
||||
$this->close($player);
|
||||
continue;
|
||||
}
|
||||
|
@ -88,6 +88,8 @@ class SimpleTransactionGroup implements TransactionGroup{
|
||||
/**
|
||||
* @param Item[] $needItems
|
||||
* @param Item[] $haveItems
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function matchItems(array &$needItems, array &$haveItems){
|
||||
foreach($this->transactions as $key => $ts){
|
||||
@ -120,6 +122,8 @@ class SimpleTransactionGroup implements TransactionGroup{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function canExecute(){
|
||||
|
@ -33,7 +33,7 @@ class Block extends Item{
|
||||
}
|
||||
|
||||
public function setDamage($meta){
|
||||
$this->meta = $meta !== null ? $meta & 0xFF : null;
|
||||
$this->meta = $meta !== null ? $meta & 0xf : null;
|
||||
$this->block->setDamage($this->meta);
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,7 @@ class Item{
|
||||
const OBSIDIAN = 49;
|
||||
const TORCH = 50;
|
||||
const FIRE = 51;
|
||||
|
||||
const MONSTER_SPAWNER = 52;
|
||||
const WOOD_STAIRS = 53;
|
||||
const WOODEN_STAIRS = 53;
|
||||
const OAK_WOOD_STAIRS = 53;
|
||||
@ -164,12 +164,16 @@ class Item{
|
||||
const FENCE_GATE = 107;
|
||||
const BRICK_STAIRS = 108;
|
||||
const STONE_BRICK_STAIRS = 109;
|
||||
const MYCELIUM = 110;
|
||||
|
||||
const NETHER_BRICKS = 112;
|
||||
const NETHER_BRICK_BLOCK = 112;
|
||||
|
||||
const NETHER_BRICKS_STAIRS = 114;
|
||||
|
||||
const END_PORTAL = 120;
|
||||
const END_STONE = 121;
|
||||
|
||||
const SANDSTONE_STAIRS = 128;
|
||||
const EMERALD_ORE = 129;
|
||||
|
||||
@ -216,6 +220,7 @@ class Item{
|
||||
const HARDENED_CLAY = 172;
|
||||
const COAL_BLOCK = 173;
|
||||
|
||||
const PODZOL = 243;
|
||||
const BEETROOT_BLOCK = 244;
|
||||
const STONECUTTER = 245;
|
||||
const GLOWING_OBSIDIAN = 246;
|
||||
@ -620,4 +625,4 @@ class Item{
|
||||
return $this->id === $item->getID() and ($checkDamage === false or $this->getDamage() === $item->getDamage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -81,9 +81,9 @@ class Painting extends Item{
|
||||
//TODO
|
||||
//$e = $server->api->entity->add($level, ENTITY_OBJECT, OBJECT_PAINTING, $data);
|
||||
//$e->spawnToAll();
|
||||
if(($player->gamemode & 0x01) === 0x00){
|
||||
/*if(($player->gamemode & 0x01) === 0x00){
|
||||
$player->removeItem(Item::get($this->getID(), $this->getDamage(), 1));
|
||||
}
|
||||
}*/
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -22,8 +22,16 @@
|
||||
namespace pocketmine\item;
|
||||
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\Entity;
|
||||
use pocketmine\entity\Entity;
|
||||
use pocketmine\entity\Villager;
|
||||
use pocketmine\entity\Zombie;
|
||||
use pocketmine\level\format\FullChunk;
|
||||
use pocketmine\level\Level;
|
||||
use pocketmine\nbt\tag\Compound;
|
||||
use pocketmine\nbt\tag\Double;
|
||||
use pocketmine\nbt\tag\Enum;
|
||||
use pocketmine\nbt\tag\Float;
|
||||
use pocketmine\nbt\tag\Short;
|
||||
use pocketmine\Player;
|
||||
|
||||
class SpawnEgg extends Item{
|
||||
@ -34,7 +42,40 @@ class SpawnEgg extends Item{
|
||||
}
|
||||
|
||||
public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz){
|
||||
$entity = null;
|
||||
$chunk = $level->getChunkAt($block->getX() >> 4, $block->getZ() >> 4);
|
||||
|
||||
if(!($chunk instanceof FullChunk)){
|
||||
return false;
|
||||
}
|
||||
|
||||
$nbt = new Compound("", [
|
||||
"Pos" => new Enum("Pos", [
|
||||
new Double("", $block->getX()),
|
||||
new Double("", $block->getY()),
|
||||
new Double("", $block->getZ())
|
||||
]),
|
||||
"Motion" => new Enum("Motion", [
|
||||
new Double("", 0),
|
||||
new Double("", 0),
|
||||
new Double("", 0)
|
||||
]),
|
||||
"Rotation" => new Enum("Rotation", [
|
||||
new Float("", lcg_value() * 360),
|
||||
new Float("", 0)
|
||||
]),
|
||||
]);
|
||||
|
||||
switch($this->meta){
|
||||
case Villager::NETWORK_ID:
|
||||
$nbt->Health = new Short("Health", 20);
|
||||
$entity = new Villager($chunk, $nbt);
|
||||
break;
|
||||
case Zombie::NETWORK_ID:
|
||||
$nbt->Health = new Short("Health", 20);
|
||||
$entity = new Zombie($chunk, $nbt);
|
||||
break;
|
||||
/*
|
||||
//TODO: use entity constants
|
||||
case 10:
|
||||
case 11:
|
||||
@ -51,8 +92,18 @@ class SpawnEgg extends Item{
|
||||
--$this->count;
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;*/
|
||||
}
|
||||
|
||||
if($entity instanceof Entity){
|
||||
if(($player->gamemode & 0x01) === 0){
|
||||
--$this->count;
|
||||
}
|
||||
$entity->spawnToAll();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,21 +1,23 @@
|
||||
language_has_been_selected=وقد تم اختيار اللغة الإنجليزية بشكل صحيح.
|
||||
skip_installer=هل تريد تخطي معالج الإعداد؟
|
||||
language_has_been_selected = وقد تم اختيار اللغة الإنجليزية بشكل صحيح.
|
||||
skip_installer = هل تريد تخطي معالج الإعداد؟
|
||||
|
||||
welcome_to_pocketmine=مرحبا بكم في PocketMine-MP! \ nBefore بدء إعداد ملقم جديد لديك لقبول الترخيص. \ مرخص nPocketMine-MP تحت رخصة LGPL، \ n التي يمكنك أن تقرأ فتح ملف الترخيص على هذا folder.Do كنت ترغب في تخطي المعالج انشاء؟
|
||||
accept_license=هل تقبل رخصة؟
|
||||
you_have_to_accept_the_license=عليك أن تقبل رخصة LGPL إلى الاستمرار في استخدام PocketMine-MP
|
||||
welcome_to_pocketmine = مرحبا بكم في PocketMine-MP! \ nBefore بدء إعداد ملقم جديد لديك لقبول الترخيص. \ مرخص nPocketMine-MP تحت رخصة LGPL، \ n التي يمكنك أن تقرأ فتح ملف الترخيص على هذا folder.Do كنت ترغب في تخطي المعالج انشاء؟
|
||||
accept_license = هل تقبل رخصة؟
|
||||
you_have_to_accept_the_license = عليك أن تقبل رخصة LGPL إلى الاستمرار في استخدام PocketMine-MP
|
||||
|
||||
setting_up_server_now=أنت ذاهب لإعداد الخادم الخاص بك الآن.
|
||||
default_values_info=إذا كنت لا تريد تغيير القيمة الافتراضية، فقط اضغط على Enter.
|
||||
server_properties=يمكنك تحريرها في وقت لاحق على الملف server.properties.
|
||||
setting_up_server_now = أنت ذاهب لإعداد الخادم الخاص بك الآن.
|
||||
default_values_info = إذا كنت لا تريد تغيير القيمة الافتراضية، فقط اضغط على Enter.
|
||||
server_properties = يمكنك تحريرها في وقت لاحق على الملف server.properties.
|
||||
|
||||
name_your_server=إعطاء اسم على الخادم الخاص بك
|
||||
port_warning=لا تقم بتغيير قيمة المنفذ الافتراضي إذا كان هذا هو الخادم الخاص بك أولا.
|
||||
server_port=منفذ خادم
|
||||
invalid_port=منفذ خادم غير صالحة
|
||||
ram_warning=ذاكرة الوصول العشوائي هو الحد الأقصى لمقدار الذاكرة سوف تستخدم PocketMine-MP. ينصح قيمة 128-256 ميغا بايت
|
||||
server_ram=RAM الخادم في ميغا بايت
|
||||
gamemode_info=الاختيار بين العمل الإبداعي (1) أو البقاء على قيد الحياة (0)
|
||||
name_your_server = إعطاء اسم على الخادم الخاص بك
|
||||
port_warning = لا تقم بتغيير قيمة المنفذ الافتراضي إذا كان هذا هو الخادم الخاص بك أولا.
|
||||
server_port = منفذ خادم
|
||||
invalid_port = منفذ خادم غير صالحة
|
||||
ram_warning = ذاكرة الوصول العشوائي هو الحد الأقصى لمقدار الذاكرة سوف تستخدم PocketMine-MP. ينصح قيمة 128-256 ميغا بايت
|
||||
server_ram = RAM الخادم في ميغا بايت
|
||||
gamemode_info = الاختيار بين العمل الإبداعي (1) أو البقاء على قيد الحياة (0)
|
||||
default_gamemode = الوضع الاصلي للعبة
|
||||
max_players = الحد الاعلى للاعبين المتواجدين الان
|
||||
|
||||
|
||||
|
||||
|
@ -1,6 +1,18 @@
|
||||
|
||||
|
||||
|
||||
|
||||
language_has_been_selected = Čeština byla vybrána.
|
||||
|
||||
accept_license = Přijímáte Licenci ?
|
||||
|
||||
server_properties = Můžete je upravit později v souboru server.properties.
|
||||
|
||||
name_your_server = Dejte jméno serveru
|
||||
server_port = Port serveru
|
||||
server_ram = Server RAM v MB
|
||||
gamemode_info = Vyberte mezi Kreativním (1) nebo Přežití (0)
|
||||
max_players = Max. hrajících hráčů
|
||||
spawn_protection_info = Ochrana spawnu nedovolí stavět/rozbíjet bloky ve spawn zóně kromě OP
|
||||
spawn_protection = Povolit spawn ochranu?
|
||||
|
||||
op_info = OP je admin serveru. OP může spustit více příkazů než normální hráči
|
||||
whitelist_enable = Chcete umožnit bílou listinu?
|
||||
|
||||
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=Englisch haben Sie richtig ausgewählt.
|
||||
skip_installer=Möchten Sie den Setup-Assistenten überspringen?
|
||||
language_has_been_selected = Englisch haben Sie richtig ausgewählt.
|
||||
skip_installer = Möchten Sie den Setup-Assistenten überspringen?
|
||||
|
||||
welcome_to_pocketmine=Willkommen auf PocketMine-MP!\nBevor Sie die Einrichtung Ihres neuen Server starten, müssen Sie die Lizenz akzeptieren. \nPocketMine-MP ist unter der LGPL-Lizenz, \ndamit Sie die LIZENZ in diesem Ordner lesen oder öffnen können.
|
||||
accept_license=Akzeptieren Sie die Lizenz?
|
||||
you_have_to_accept_the_license=Sie müssen die LGPL Lizenz akzeptieren, um weiterhin PocketMine-MP zu nutzen
|
||||
welcome_to_pocketmine = Willkommen auf PocketMine-MP!\nBevor Sie die Einrichtung Ihres neuen Server starten, müssen Sie die Lizenz akzeptieren. \nPocketMine-MP ist unter der LGPL-Lizenz, \ndamit Sie die LIZENZ in diesem Ordner lesen oder öffnen können.
|
||||
accept_license = Akzeptieren Sie die Lizenz?
|
||||
you_have_to_accept_the_license = Sie müssen die LGPL Lizenz akzeptieren, um weiterhin PocketMine-MP zu nutzen
|
||||
|
||||
setting_up_server_now=Sie werden jetzt Ihren Server einrichten.
|
||||
default_values_info=Wenn Sie nicht den Standardwert ändern möchten, drücken Sie einfach Enter.
|
||||
server_properties=Sie können sie später in der server.properties Datei bearbeiten.
|
||||
setting_up_server_now = Sie werden jetzt Ihren Server einrichten.
|
||||
default_values_info = Wenn Sie nicht den Standardwert ändern möchten, drücken Sie einfach Enter.
|
||||
server_properties = Sie können sie später in der server.properties Datei bearbeiten.
|
||||
|
||||
name_your_server=Geben Sie einen Namen für Ihren Server ein
|
||||
port_warning=Ändern Sie den Standard-Port-Wert nicht, wenn dies Ihr erster Server ist.
|
||||
server_port=Server-Port
|
||||
invalid_port=Ungültiger Server-Port
|
||||
ram_warning=Der RAM ist die maximale Speichermenge die PocketMine-MP verwenden kann. Ein Wert zwischen 128 bis 256 MB wird empfohlen
|
||||
server_ram=Server RAM in MB
|
||||
gamemode_info=Wählen Sie zwischen Kreativ (1) oder Überleben (0)
|
||||
default_gamemode=Standard Spielmodus
|
||||
max_players=Max. Online-Spieler
|
||||
spawn_protection_info=Der Spawn-Schutz verbietet Platzierung/Zerstörung der Blöcke in der Einstiegszone, was aber nicht für OPs gilt
|
||||
spawn_protection=Aktiviere Spawn-Schutz?
|
||||
name_your_server = Geben Sie einen Namen für Ihren Server ein
|
||||
port_warning = Ändern Sie den Standard-Port-Wert nicht, wenn dies Ihr erster Server ist.
|
||||
server_port = Server-Port
|
||||
invalid_port = Ungültiger Server-Port
|
||||
ram_warning = Der RAM ist die maximale Speichermenge die PocketMine-MP verwenden kann. Ein Wert zwischen 128 bis 256 MB wird empfohlen
|
||||
server_ram = Server RAM in MB
|
||||
gamemode_info = Wählen Sie zwischen Kreativ (1) oder Überleben (0)
|
||||
default_gamemode = Standard Spielmodus
|
||||
max_players = Max. Online-Spieler
|
||||
spawn_protection_info = Der Spawn-Schutz verbietet Platzierung/Zerstörung der Blöcke in der Einstiegszone, was aber nicht für OPs gilt
|
||||
spawn_protection = Aktiviere Spawn-Schutz?
|
||||
|
||||
op_info=Ein OP ist der Admin Spieler des Servers. OPs können mehr Befehle ausführen als normale Spieler
|
||||
op_who=OP Spieler Name (z.B. dein Spiel-Name)
|
||||
op_warning=Sie werden in der Lage sein einen OP Benutzer später mit /op <player> hinzuzufügen
|
||||
whitelist_info=Nur die Spieler auf der white-list können zu ihrem Spiel verbinden.
|
||||
whitelist_enable=Möchten Sie die white-list aktivieren?
|
||||
whitelist_warning=Sie müssen die Spieler zur white-list hinzufügen
|
||||
op_info = Ein OP ist der Admin Spieler des Servers. OPs können mehr Befehle ausführen als normale Spieler
|
||||
op_who = OP Spieler Name (z.B. dein Spiel-Name)
|
||||
op_warning = Sie werden in der Lage sein einen OP Benutzer später mit /op <player> hinzuzufügen
|
||||
whitelist_info = Nur die Spieler auf der white-list können zu ihrem Spiel verbinden.
|
||||
whitelist_enable = Möchten Sie die white-list aktivieren?
|
||||
whitelist_warning = Sie müssen die Spieler zur white-list hinzufügen
|
||||
|
||||
query_warning1=Query ist ein Protokoll das von verschiedenen Tools verwendet wird, um Informationen von Ihrem Server und eingeloggten Spieler zu nehmen.
|
||||
query_warning2=Wenn Sie es deaktivieren, werden Sie nicht in der Lage sein, Server-Listen zu verwenden.
|
||||
query_disable=Wollen Sie Query deaktivieren?
|
||||
rcon_info=RCON ist ein Protokoll für eine Remote-Verbindung mit der Server-Konsole, mit der Benutzung eines Passworts.
|
||||
rcon_enable=Wollen Sie RCON aktivieren?
|
||||
rcon_password=RCON Passwort (Sie können es später ändern)
|
||||
usage_info=Die anonymen Nutzungsdaten ermöglichen es uns, globale Statistiken für PocketMine-MP und seine Plugins zu berechnen. Sie können sie auf stats.pocketmine.net ansehen
|
||||
usage_disable=Wollen Sie die anonyme Nutzung deaktivieren?
|
||||
ip_get=Bekomme deine externe IP und interne IP
|
||||
ip_warning=Ihre externe IP ist {{EXTERNAL_IP}}. Evtl. musst Du einen port-forward auf deine interne IP {{INTERNAL_IP}} machen
|
||||
ip_confirm=Achten Sie darauf, wenn Sie den Port forwarden müssen und Sie es überspringen, dass keine externen Spieler beitreten können. [Drücke Enter]
|
||||
query_warning1 = Query ist ein Protokoll das von verschiedenen Tools verwendet wird, um Informationen von Ihrem Server und eingeloggten Spieler zu nehmen.
|
||||
query_warning2 = Wenn Sie es deaktivieren, werden Sie nicht in der Lage sein, Server-Listen zu verwenden.
|
||||
query_disable = Wollen Sie Query deaktivieren?
|
||||
rcon_info = RCON ist ein Protokoll für eine Remote-Verbindung mit der Server-Konsole, mit der Benutzung eines Passworts.
|
||||
rcon_enable = Wollen Sie RCON aktivieren?
|
||||
rcon_password = RCON Passwort (Sie können es später ändern)
|
||||
usage_info = Die anonymen Nutzungsdaten ermöglichen es uns, globale Statistiken für PocketMine-MP und seine Plugins zu berechnen. Sie können sie auf stats.pocketmine.net ansehen
|
||||
usage_disable = Wollen Sie die anonyme Nutzung deaktivieren?
|
||||
ip_get = Bekomme deine externe IP und interne IP
|
||||
ip_warning = Ihre externe IP ist {{EXTERNAL_IP}}. Evtl. musst Du einen port-forward auf deine interne IP {{INTERNAL_IP}} machen
|
||||
ip_confirm = Achten Sie darauf, wenn Sie den Port forwarden müssen und Sie es überspringen, dass keine externen Spieler beitreten können. [Drücke Enter]
|
||||
|
||||
you_have_finished=Sie haben den Setup-Assistenten korrekt beendet
|
||||
pocketmine_will_start=PocketMine-MP wird nun gestartet. Tippe /help um die Liste der verfügbaren Befehle anzuzeigen.
|
||||
pocketmine_plugins=Überprüfen Sie das Plugin Repository um neue Features, Minispiele, oder einen erweiterten Schutz für Ihren Server hinzuzufügen
|
||||
you_have_finished = Sie haben den Setup-Assistenten korrekt beendet
|
||||
pocketmine_will_start = PocketMine-MP wird nun gestartet. Tippe /help um die Liste der verfügbaren Befehle anzuzeigen.
|
||||
pocketmine_plugins = Überprüfen Sie das Plugin Repository um neue Features, Minispiele, oder einen erweiterten Schutz für Ihren Server hinzuzufügen
|
||||
|
@ -1,6 +1,18 @@
|
||||
language_has_been_selected = Τα Αγγλικά έχουν επιλεχθεί σωστά.
|
||||
skip_installer = Θέλετε να παραλείψετε τον οδηγό εγκατάστασης;
|
||||
|
||||
accept_license = Αποδέχεστε την Άδεια;
|
||||
|
||||
|
||||
name_your_server = Δώστε ένα όνομα στο διακομιστή
|
||||
server_port = Θύρα διακομιστή
|
||||
invalid_port = Μη έγκυρη θύρα διακομιστή
|
||||
server_ram = RAM διακομιστή σε MB
|
||||
default_gamemode = Προεπιλεγμένη Λειτουργία Παιχνιδιού
|
||||
max_players = Μεγ. online παίκτες
|
||||
|
||||
whitelist_enable = Θέλετε να ενεργοποιήσετε τη λευκή-λίστα;
|
||||
|
||||
|
||||
rcon_password = Κωδικός πρόσβασης RCON (μπορείτε να τον αλλάξετε αργότερα)
|
||||
ip_warning = Η εξωτερική σας IP είναι {{EXTERNAL_IP}}. Ίσως να πρέπει να κάνετε port-forward στην εσωτερική σας IP {{INTERNAL_IP}}
|
||||
|
||||
|
@ -28,7 +28,7 @@ whitelist_info = The white-list only allows players in it to join.
|
||||
whitelist_enable = Do you want to enable the white-list?
|
||||
whitelist_warning = You will have to add the players to the white-list
|
||||
|
||||
query_warning1 = Query is a protocol used by diferent tools to get information of your server and players logged in.
|
||||
query_warning1 = Query is a protocol used by different tools to get information of your server and players logged in.
|
||||
query_warning2 = If you disable it, you won't be able to use server lists.
|
||||
query_disable = Do you want to disable Query?
|
||||
rcon_info = RCON is a protocol to remote connect with the server console using a password.
|
||||
@ -42,4 +42,4 @@ ip_confirm = Be sure to check it, if you have to forward and you skip that, no e
|
||||
|
||||
you_have_finished = You have finished the set-up wizard correctly
|
||||
pocketmine_will_start = PocketMine-MP will now start. Type /help to view the list of available commands.
|
||||
pocketmine_plugins = Check the Plugin Repository to add new features, minigames, or advanced protection to your server
|
||||
pocketmine_plugins = Check the Plugin Repository to add new features, minigames, or advanced protection to your server
|
||||
|
@ -1,45 +0,0 @@
|
||||
language_has_been_selected=English has been correctly selected.
|
||||
skip_installer=Do you want to skip the set-up wizard?
|
||||
|
||||
welcome_to_pocketmine=Welcome to PocketMine-MP!\nBefore starting setting up your new server you have to accept the license.\nPocketMine-MP is licensed under the LGPL License,\nthat you can read opening the LICENSE file on this folder.
|
||||
accept_license=Do you accept the License?
|
||||
you_have_to_accept_the_license=You have to accept the LGPL license to continue using PocketMine-MP
|
||||
|
||||
setting_up_server_now=You are going to set up your server now.
|
||||
default_values_info=If you don't want to change the default value, just press Enter.
|
||||
server_properties=You can edit them later on the server.properties file.
|
||||
|
||||
name_your_server=Give a name to your server
|
||||
port_warning=Do not change the default port value if this is your first server.
|
||||
server_port=Server port
|
||||
invalid_port=Invalid server port
|
||||
ram_warning=The RAM is the maximum amount of memory PocketMine-MP will use. A value of 128-256 MB is recommended
|
||||
server_ram=Server RAM in MB
|
||||
gamemode_info=Choose between Creative (1) or Survival (0)
|
||||
default_gamemode=Default Game mode
|
||||
max_players=Max. online players
|
||||
spawn_protection_info=The spawn protection disallows placing/breaking blocks in the spawn zone except for OPs
|
||||
spawn_protection=Enable spawn protection?
|
||||
|
||||
op_info=An OP is the player admin of the server. OPs can run more commands than normal players
|
||||
op_who=OP player name (example, your game name)
|
||||
op_warning=You will be able to add an OP user later using /op <player>
|
||||
whitelist_info=The white-list only allows players in it to join.
|
||||
whitelist_enable=Do you want to enable the white-list?
|
||||
whitelist_warning=You will have to add the players to the white-list
|
||||
|
||||
query_warning1=Query is a protocol used by diferent tools to get information of your server and players logged in.
|
||||
query_warning2=If you disable it, you won't be able to use server lists.
|
||||
query_disable=Do you want to disable Query?
|
||||
rcon_info=RCON is a protocol to remote connect with the server console using a password.
|
||||
rcon_enable=Do you want to enable RCON?
|
||||
rcon_password=RCON password (you can change it later)
|
||||
usage_info=The anonymous usage data allows us to calculate global statistics for PocketMine-MP and its plugins. You can view them on stats.pocketmine.net
|
||||
usage_disable=Do you want to disable the anonymous usage?
|
||||
ip_get=Getting your external IP and internal IP
|
||||
ip_warning=Your external IP is {{EXTERNAL_IP}}. You may have to port-forward to your internal IP {{INTERNAL_IP}}
|
||||
ip_confirm=Be sure to check it, if you have to forward and you skip that, no external players will be able to join. [Press Enter]
|
||||
|
||||
you_have_finished=You have finished the set-up wizard correctly
|
||||
pocketmine_will_start=PocketMine-MP will now start. Type /help to view the list of available commands.
|
||||
pocketmine_plugins=Check the Plugin Repository to add new features, minigames, or advanced protection to your server
|
@ -1,45 +0,0 @@
|
||||
language_has_been_selected=English has been correctly selected.
|
||||
skip_installer=Do you want to skip the set-up wizard?
|
||||
|
||||
welcome_to_pocketmine=Welcome to PocketMine-MP!\nBefore starting setting up your new server you have to accept the license.\nPocketMine-MP is licensed under the LGPL License,\nthat you can read opening the LICENSE file on this folder.
|
||||
accept_license=Do you accept the License?
|
||||
you_have_to_accept_the_license=You have to accept the LGPL license to continue using PocketMine-MP
|
||||
|
||||
setting_up_server_now=You are going to set up your server now.
|
||||
default_values_info=If you don't want to change the default value, just press Enter.
|
||||
server_properties=You can edit them later on the server.properties file.
|
||||
|
||||
name_your_server=Give a name to your server
|
||||
port_warning=Do not change the default port value if this is your first server.
|
||||
server_port=Server port
|
||||
invalid_port=Invalid server port
|
||||
ram_warning=The RAM is the maximum amount of memory PocketMine-MP will use. A value of 128-256 MB is recommended
|
||||
server_ram=Server RAM in MB
|
||||
gamemode_info=Choose between Creative (1) or Survival (0)
|
||||
default_gamemode=Default Game mode
|
||||
max_players=Max. online players
|
||||
spawn_protection_info=The spawn protection disallows placing/breaking blocks in the spawn zone except for OPs
|
||||
spawn_protection=Enable spawn protection?
|
||||
|
||||
op_info=An OP is the player admin of the server. OPs can run more commands than normal players
|
||||
op_who=OP player name (example, your game name)
|
||||
op_warning=You will be able to add an OP user later using /op <player>
|
||||
whitelist_info=The white-list only allows players in it to join.
|
||||
whitelist_enable=Do you want to enable the white-list?
|
||||
whitelist_warning=You will have to add the players to the white-list
|
||||
|
||||
query_warning1=Query is a protocol used by diferent tools to get information of your server and players logged in.
|
||||
query_warning2=If you disable it, you won't be able to use server lists.
|
||||
query_disable=Do you want to disable Query?
|
||||
rcon_info=RCON is a protocol to remote connect with the server console using a password.
|
||||
rcon_enable=Do you want to enable RCON?
|
||||
rcon_password=RCON password (you can change it later)
|
||||
usage_info=The anonymous usage data allows us to calculate global statistics for PocketMine-MP and its plugins. You can view them on stats.pocketmine.net
|
||||
usage_disable=Do you want to disable the anonymous usage?
|
||||
ip_get=Getting your external IP and internal IP
|
||||
ip_warning=Your external IP is {{EXTERNAL_IP}}. You may have to port-forward to your internal IP {{INTERNAL_IP}}
|
||||
ip_confirm=Be sure to check it, if you have to forward and you skip that, no external players will be able to join. [Press Enter]
|
||||
|
||||
you_have_finished=You have finished the set-up wizard correctly
|
||||
pocketmine_will_start=PocketMine-MP will now start. Type /help to view the list of available commands.
|
||||
pocketmine_plugins=Check the Plugin Repository to add new features, minigames, or advanced protection to your server
|
@ -1,47 +0,0 @@
|
||||
language_has_been_selected=English has been correctly selected.
|
||||
skip_installer=Do you want to skip the set-up wizard?
|
||||
|
||||
welcome_to_pocketmine=Welcome to PocketMine-MP!\nBefore starting setting up your new server you have to accept the license.\nPocketMine-MP is licensed under the LGPL License,\nthat you can read opening the LICENSE file on this folder.
|
||||
accept_license=Do you accept the License?
|
||||
you_have_to_accept_the_license=You have to accept the LGPL license to continue using PocketMine-MP
|
||||
|
||||
setting_up_server_now=You are going to set up your server now.
|
||||
default_values_info=If you don't want to change the default value, just press Enter.
|
||||
server_properties=You can edit them later on the server.properties file.
|
||||
|
||||
name_your_server=Give your server a name
|
||||
port_warning=Do not change the default port value if this is your first server.
|
||||
server_port=Server port
|
||||
invalid_port=Invalid server port
|
||||
ram_warning=The RAM is the maximum amount of memory PocketMine-MP can use. A value of 128-256 MB is recommended
|
||||
server_ram=Server RAM in MB
|
||||
gamemode_info=Choose between Survival Mode (0), Creative Mode (1), or Adventure Mode (2)
|
||||
default_gamemode=Default gamemode
|
||||
max_players=Maximum online players at one time
|
||||
spawn_protection_info=The spawn protection prevents the placing/breaking of blocks in the spawn area for all players with the exception of operators
|
||||
spawn_protection=Enable spawn protection?
|
||||
|
||||
op_info=An 'op' is the admin of the server. Ops can run more commands than normal players (like /ban, etc.)
|
||||
op_who=Operator player name (e.g. Steve)
|
||||
op_warning=
|
||||
You will be able to add an operators later using /op <player>
|
||||
|
||||
whitelist_info=When enabled, only players in the whitelist will have access to the server.
|
||||
whitelist_enable=Do you want to enable the whitelist?
|
||||
whitelist_warning=You will have to add the players to the whitelist
|
||||
|
||||
query_warning1=Query is a protocol used by different tools to obtain information about the server and the players logged in.
|
||||
query_warning2=If you disable it, you won't be able to use server lists.
|
||||
query_disable=Do you want to disable Query?
|
||||
rcon_info=RCON is a protocol that allows remote connections with the server console using a password.
|
||||
rcon_enable=Do you want to enable RCON?
|
||||
rcon_password=RCON password (can be changed later)
|
||||
usage_info=The anonymous usage data allows us to calculate global statistics for PocketMine-MP and its plugins. You can view them on stats.pocketmine.net
|
||||
usage_disable=Do you want to disable the anonymous usage?
|
||||
ip_get=Finding your external and internal IP adresses
|
||||
ip_warning=Your current external IP is {{EXTERNAL_IP}}. In some cases, you may have to port-forward to your internal IP ({{INTERNAL_IP}})
|
||||
ip_confirm=Be sure to check it, if you have to forward and you skip that, no external players will be able to join. [Press Enter]
|
||||
|
||||
you_have_finished=You have finished the set-up wizard correctly
|
||||
pocketmine_will_start=PocketMine-MP will now start. Type /help to view the list of available commands.
|
||||
pocketmine_plugins=Check the Plugin Repository to add new features, minigames, or advanced protection to your server
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=English has been correctly selected.
|
||||
skip_installer=Do you want to skip the set-up wizard?
|
||||
language_has_been_selected = English has been correctly selected.
|
||||
skip_installer = Do you want to skip the set-up wizard?
|
||||
|
||||
welcome_to_pocketmine=Welcome to PocketMine-MP!\nBefore starting setting up your new server you have to accept the license.\nPocketMine-MP is licensed under the LGPL License,\nthat you can read opening the LICENSE file on this folder.
|
||||
accept_license=Do you accept the License?
|
||||
you_have_to_accept_the_license=You have to accept the LGPL license to continue using PocketMine-MP
|
||||
welcome_to_pocketmine = Welcome to PocketMine-MP!\nBefore starting setting up your new server you have to accept the license.\nPocketMine-MP is licensed under the LGPL License,\nthat you can read opening the LICENSE file on this folder.
|
||||
accept_license = Do you accept the License?
|
||||
you_have_to_accept_the_license = You have to accept the LGPL license to continue using PocketMine-MP
|
||||
|
||||
setting_up_server_now=You are going to set up your server now.
|
||||
default_values_info=If you don't want to change the default value, just press Enter.
|
||||
server_properties=You can edit them later on the server.properties file.
|
||||
setting_up_server_now = You are going to set up your server now.
|
||||
default_values_info = If you don't want to change the default value, just press Enter.
|
||||
server_properties = You can edit them later on the server.properties file.
|
||||
|
||||
name_your_server=Give a name to your server
|
||||
port_warning=Do not change the default port value if this is your first server.
|
||||
server_port=Server port
|
||||
invalid_port=Invalid server port
|
||||
ram_warning=The RAM is the maximum amount of memory PocketMine-MP will use. A value of 128-256 MB is recommended
|
||||
server_ram=Server RAM in MB
|
||||
gamemode_info=Choose between Creative (1) or Survival (0)
|
||||
default_gamemode=Default Game mode
|
||||
max_players=Max. online players
|
||||
spawn_protection_info=The spawn protection disallows placing/breaking blocks in the spawn zone except for OPs
|
||||
spawn_protection=Enable spawn protection?
|
||||
name_your_server = Give a name to your server
|
||||
port_warning = Do not change the default port value if this is your first server.
|
||||
server_port = Server port
|
||||
invalid_port = Invalid server port
|
||||
ram_warning = The RAM is the maximum amount of memory PocketMine-MP will use. A value of 128-256 MB is recommended
|
||||
server_ram = Server RAM in MB
|
||||
gamemode_info = Choose between Creative (1) or Survival (0)
|
||||
default_gamemode = Default Game mode
|
||||
max_players = Max. online players
|
||||
spawn_protection_info = The spawn protection disallows placing/breaking blocks in the spawn zone except for OPs
|
||||
spawn_protection = Enable spawn protection?
|
||||
|
||||
op_info=An OP is the player admin of the server. OPs can run more commands than normal players
|
||||
op_who=OP player name (example, your game name)
|
||||
op_warning=You will be able to add an OP user later using /op <player>
|
||||
whitelist_info=The white-list only allows players in it to join.
|
||||
whitelist_enable=Do you want to enable the white-list?
|
||||
whitelist_warning=You will have to add the players to the white-list
|
||||
op_info = An OP is the player admin of the server. OPs can run more commands than normal players
|
||||
op_who = OP player name (example, your game name)
|
||||
op_warning = You will be able to add an OP user later using /op <player>
|
||||
whitelist_info = The white-list only allows players in it to join.
|
||||
whitelist_enable = Do you want to enable the white-list?
|
||||
whitelist_warning = You will have to add the players to the white-list
|
||||
|
||||
query_warning1=Query is a protocol used by diferent tools to get information of your server and players logged in.
|
||||
query_warning2=If you disable it, you won't be able to use server lists.
|
||||
query_disable=Do you want to disable Query?
|
||||
rcon_info=RCON is a protocol to remote connect with the server console using a password.
|
||||
rcon_enable=Do you want to enable RCON?
|
||||
rcon_password=RCON password (you can change it later)
|
||||
usage_info=The anonymous usage data allows us to calculate global statistics for PocketMine-MP and its plugins. You can view them on stats.pocketmine.net
|
||||
usage_disable=Do you want to disable the anonymous usage?
|
||||
ip_get=Getting your external IP and internal IP
|
||||
ip_warning=Your external IP is {{EXTERNAL_IP}}. You may have to port-forward to your internal IP {{INTERNAL_IP}}
|
||||
ip_confirm=Be sure to check it, if you have to forward and you skip that, no external players will be able to join. [Press Enter]
|
||||
query_warning1 = Query is a protocol used by diferent tools to get information of your server and players logged in.
|
||||
query_warning2 = If you disable it, you won't be able to use server lists.
|
||||
query_disable = Do you want to disable Query?
|
||||
rcon_info = RCON is a protocol to remote connect with the server console using a password.
|
||||
rcon_enable = Do you want to enable RCON?
|
||||
rcon_password = RCON password (you can change it later)
|
||||
usage_info = The anonymous usage data allows us to calculate global statistics for PocketMine-MP and its plugins. You can view them on stats.pocketmine.net
|
||||
usage_disable = Do you want to disable the anonymous usage?
|
||||
ip_get = Getting your external IP and internal IP
|
||||
ip_warning = Your external IP is {{EXTERNAL_IP}}. You may have to port-forward to your internal IP {{INTERNAL_IP}}
|
||||
ip_confirm = Be sure to check it, if you have to forward and you skip that, no external players will be able to join. [Press Enter]
|
||||
|
||||
you_have_finished=You have finished the set-up wizard correctly
|
||||
pocketmine_will_start=PocketMine-MP will now start. Type /help to view the list of available commands.
|
||||
pocketmine_plugins=Check the Plugin Repository to add new features, minigames, or advanced protection to your server
|
||||
you_have_finished = You have finished the set-up wizard correctly
|
||||
pocketmine_will_start = PocketMine-MP will now start. Type /help to view the list of available commands.
|
||||
pocketmine_plugins = Check the Plugin Repository to add new features, minigames, or advanced protection to your server
|
||||
|
@ -1,45 +0,0 @@
|
||||
language_has_been_selected=Español sido seleccionado correctamente.
|
||||
skip_installer=¿Quieres saltarte el asistente de configuración?
|
||||
|
||||
welcome_to_pocketmine=Bienvenido a PocketMine-MP!\nAntes de comenzar a configurar tu nuevo servidor, tienes que aceptar la licencia.\nPocketMine-MP está licenciado con la licencia LGPL,\nque puedes leer abriendo el archivo LICENSE en esta carpeta.
|
||||
accept_license=¿Aceptas la Licencia?
|
||||
you_have_to_accept_the_license=Tienes que aceptar la licencia LGPL antes de continuar usando PocketMine-MP
|
||||
|
||||
setting_up_server_now=La configuración del servidor va a comenzar.
|
||||
default_values_info=Si no quieres cambiar el valor por defecto, pulsa Enter.
|
||||
server_properties=Puedes editar todo despues en el fichero server.properties.
|
||||
|
||||
name_your_server=Nombre del servidor
|
||||
port_warning=No cambies el puerto por defecto si este es tu primer servidor.
|
||||
server_port=Puerto del servidor
|
||||
invalid_port=Puerto inválido
|
||||
ram_warning=La RAM es la máxima memoria que PocketMine-MP usará. Es recomendado usar un valor de 128-256 MB
|
||||
server_ram=RAM del servidor en MB
|
||||
gamemode_info=Elige entre Creativo (1) o Supervivencia (0)
|
||||
default_gamemode=Modo de juego por defecto
|
||||
max_players=Límite de jugadores
|
||||
spawn_protection_info=La protección del inicio bloquea poner/romper bloques en la zona de inicio, excepto los OPs
|
||||
spawn_protection=¿Activar protección de inicio?
|
||||
|
||||
op_info=Un OP es el jugador administrador del servidor. Los OPs pueden usar más comandos que los jugadores normales
|
||||
op_who=Jugador OP (por ejemplo, tu nombre de jugador)
|
||||
op_warning=Podrás añadir mas OPs después usando /op <jugador>
|
||||
whitelist_info=La lista blanca permite entrar únicamente a los jugadores en ella.
|
||||
whitelist_enable=¿Quieres activar la lista blanca?
|
||||
whitelist_warning=Tendrás que añadir los jugadores a la lista blanca
|
||||
|
||||
query_warning1=Query es un protocolo usado por diferentes herramientas para conseguir informacion de tu servidor y los jugadores conectados.
|
||||
query_warning2=Si lo desactivas, no podrás usar listas de servidores.
|
||||
query_disable=¿Quieres desactivar Query?
|
||||
rcon_info=RCON es un protocolo que permite conectarte a la consola del servidor usando una contraseña.
|
||||
rcon_enable=¿Queres activar RCON?
|
||||
rcon_password=Contraseña RCON (puedes cambiarla después)
|
||||
usage_info=Los datos de uso anónimos nos permiten calcular estadísticas globales para PocketMine-MP y sus plugins. Puedes verlas en stats.pocketmine.net
|
||||
usage_disable=¿Quieres desactivar las datos de uso anónimos?
|
||||
ip_get=Obteniendo tu IP externa e IP interna
|
||||
ip_warning=Tu IP externa es {{EXTERNAL_IP}}. Quizás debas redireccionar el puerto a tu IP interna {{INTERNAL_IP}}
|
||||
ip_confirm=Asegúrate de comprobarlo, ya que si debes hacerlo y lo saltas, ningún jugador externo podra entrar. [Pulsa Enter]
|
||||
|
||||
you_have_finished=Has completado el asistente de configuración correctamente
|
||||
pocketmine_will_start=PocketMine-MP se iniciará ahora. Escribe /help para ver la lista de los comandos disponibles.
|
||||
pocketmine_plugins=Ves al Repositorio de Plugins para añadir nuevas funcionalidades, minijuegos o protección avanzada a tu servidor
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=Español sido seleccionado correctamente.
|
||||
skip_installer=¿Quieres saltarte el asistente de configuración?
|
||||
language_has_been_selected = Idioma español sido seleccionado correctamente.
|
||||
skip_installer = ¿Quieres saltarte el asistente de configuración?
|
||||
|
||||
welcome_to_pocketmine=Bienvenido a PocketMine-MP!\nAntes de comenzar a configurar tu nuevo servidor, tienes que aceptar la licencia.\nPocketMine-MP está licenciado con la licencia LGPL,\nque puedes leer abriendo el archivo LICENSE en esta carpeta.
|
||||
accept_license=¿Aceptas la Licencia?
|
||||
you_have_to_accept_the_license=Tienes que aceptar la licencia LGPL antes de continuar usando PocketMine-MP
|
||||
welcome_to_pocketmine = Bienvenido a PocketMine-MP!\nAntes de comenzar a configurar tu nuevo servidor, tienes que aceptar la licencia.\nPocketMine-MP está licenciado con la licencia LGPL,\nque puedes leer abriendo el archivo LICENSE en esta carpeta.
|
||||
accept_license = ¿Aceptas la Licencia?
|
||||
you_have_to_accept_the_license = Tienes que aceptar la licencia LGPL antes de continuar usando PocketMine-MP
|
||||
|
||||
setting_up_server_now=La configuración del servidor va a comenzar.
|
||||
default_values_info=Si no quieres cambiar el valor por defecto, pulsa Enter.
|
||||
server_properties=Puedes editar todo despues en el fichero server.properties.
|
||||
setting_up_server_now = Se iniciara la configuración del servidor.
|
||||
default_values_info = Si no quieres cambiar el valor por defecto, pulsa Enter.
|
||||
server_properties = Tranquilo, podrás editarlo después en el fichero server.properties.
|
||||
|
||||
name_your_server=Nombre del servidor
|
||||
port_warning=No cambies el puerto por defecto si este es tu primer servidor.
|
||||
server_port=Puerto del servidor
|
||||
invalid_port=Puerto inválido
|
||||
ram_warning=La RAM es la máxima memoria que PocketMine-MP usará. Es recomendado usar un valor de 128-256 MB
|
||||
server_ram=RAM del servidor en MB
|
||||
gamemode_info=Elige entre Creativo (1) o Supervivencia (0)
|
||||
default_gamemode=Modo de juego por defecto
|
||||
max_players=Límite de jugadores
|
||||
spawn_protection_info=La protección del inicio bloquea poner/romper bloques en la zona de inicio, excepto los OPs
|
||||
spawn_protection=¿Activar protección de inicio?
|
||||
name_your_server = Nombre del servidor
|
||||
port_warning = No cambies el puerto por defecto si este es tu primer servidor.
|
||||
server_port = Puerto del servidor
|
||||
invalid_port = Puerto inválido
|
||||
ram_warning = La RAM es la máxima memoria que PocketMine-MP usará. Es recomendado usar un valor de 128-256 MB
|
||||
server_ram = RAM del servidor en MB
|
||||
gamemode_info = Elige entre modo creativo (1) o modo de supervivencia (0)
|
||||
default_gamemode = Modo de juego por defecto
|
||||
max_players = Límite de jugadores conectados
|
||||
spawn_protection_info = La protección del inicio bloquea poner y/o romper bloques en la zona de inicio, excepto los OPs
|
||||
spawn_protection = ¿Activar protección de inicio?
|
||||
|
||||
op_info=Un OP es el jugador administrador del servidor. Los OPs pueden usar más comandos que los jugadores normales
|
||||
op_who=Jugador OP (por ejemplo, tu nombre de jugador)
|
||||
op_warning=Podrás añadir mas OPs después usando /op <jugador>
|
||||
whitelist_info=La lista blanca permite entrar únicamente a los jugadores en ella.
|
||||
whitelist_enable=¿Quieres activar la lista blanca?
|
||||
whitelist_warning=Tendrás que añadir los jugadores a la lista blanca
|
||||
op_info = Un OP es el jugador administrador del servidor. Los OPs pueden usar más comandos que los jugadores normales
|
||||
op_who = Jugador OP (por ejemplo, tu nombre de jugador)
|
||||
op_warning = Podrás añadir mas OPs después usando /op <jugador>
|
||||
whitelist_info = La lista blanca permite entrar solo a los jugadores que estén ahí. Como una lista VIP.
|
||||
whitelist_enable = ¿Quieres activar la lista blanca?
|
||||
whitelist_warning = Tendrás que añadir los jugadores a la lista blanca
|
||||
|
||||
query_warning1=Query es un protocolo usado por diferentes herramientas para conseguir informacion de tu servidor y los jugadores conectados.
|
||||
query_warning2=Si lo desactivas, no podrás usar listas de servidores.
|
||||
query_disable=¿Quieres desactivar Query?
|
||||
rcon_info=RCON es un protocolo que permite conectarte a la consola del servidor usando una contraseña.
|
||||
rcon_enable=¿Queres activar RCON?
|
||||
rcon_password=Contraseña RCON (puedes cambiarla después)
|
||||
usage_info=Los datos de uso anónimos nos permiten calcular estadísticas globales para PocketMine-MP y sus plugins. Puedes verlas en stats.pocketmine.net
|
||||
usage_disable=¿Quieres desactivar las datos de uso anónimos?
|
||||
ip_get=Obteniendo tu IP externa e IP interna
|
||||
ip_warning=Tu IP externa es {{EXTERNAL_IP}}. Quizás debas redireccionar el puerto a tu IP interna {{INTERNAL_IP}}
|
||||
ip_confirm=Asegúrate de comprobarlo, ya que si debes hacerlo y lo saltas, ningún jugador externo podra entrar. [Pulsa Enter]
|
||||
query_warning1 = Query es un protocolo usado por diferentes herramientas para conseguir informacion de tu servidor y los jugadores conectados.
|
||||
query_warning2 = Si lo desactivas, no podrás usar listas de servidores.
|
||||
query_disable = ¿Quieres desactivar Query?
|
||||
rcon_info = RCON es un protocolo que permite conectarte a la consola del servidor usando una contraseña.
|
||||
rcon_enable = ¿Queres activar RCON?
|
||||
rcon_password = Contraseña RCON (puedes cambiarla después)
|
||||
usage_info = Los datos de uso anónimos nos permiten calcular estadísticas globales para PocketMine-MP y sus plugins. Puedes verlas en stats.pocketmine.net
|
||||
usage_disable = ¿Quieres desactivar las datos de uso anónimos?
|
||||
ip_get = Obteniendo tu IP externa e IP interna
|
||||
ip_warning = Tu IP externa es {{EXTERNAL_IP}}. Quizás debas redireccionar el puerto a tu IP interna {{INTERNAL_IP}}
|
||||
ip_confirm = Asegúrate de hacerlo y verificarlo, ya que si no lo haces, ningun otro jugador externo podra entrar. [Pulsa Enter]
|
||||
|
||||
you_have_finished=Has completado el asistente de configuración correctamente
|
||||
pocketmine_will_start=PocketMine-MP se iniciará ahora. Escribe /help para ver la lista de los comandos disponibles.
|
||||
pocketmine_plugins=Ves al Repositorio de Plugins para añadir nuevas funcionalidades, minijuegos o protección avanzada a tu servidor
|
||||
you_have_finished = Has completado el asistente de configuración correctamente
|
||||
pocketmine_will_start = PocketMine-MP se iniciará ahora. Escribe /help para ver la lista de los comandos disponibles.
|
||||
pocketmine_plugins = Ves al Repositorio de Plugins para añadir nuevas funcionalidades, minijuegos o protección avanzada para tu servidor. El resto de cosas que veras a partir de ahora sera en ingles, no te enojes si no lo encuentras en español
|
||||
|
@ -1,45 +0,0 @@
|
||||
language_has_been_selected=Español seleccionado.
|
||||
skip_installer=Deseas omitir el asistente de configuración?
|
||||
|
||||
welcome_to_pocketmine=¡Bienvenido a PocketMine-MP!\nAntes de empezar a configurar tu nuevo servidor necesitas aceptar la licensia.\nLa licensia de PocketMine-MP esta bajo la licensia LGPL,\n que puedes leer abriendo el archivo "License" en esta carpeta.
|
||||
accept_license=Aceptas la licensia?
|
||||
you_have_to_accept_the_license=Debes aceptar la licensia de LPGL para continuar utilizando PocketMine-MP
|
||||
|
||||
setting_up_server_now=Empezemos con la configuración.
|
||||
default_values_info=Si no quieres cambiar los valores predeterminados pulsa Enter.
|
||||
server_properties=Puedes editarlos despues editando el archivo "server.properties".
|
||||
|
||||
name_your_server=Escribe el nombre de tu servidor
|
||||
port_warning=No cambies el puerto predeterminado si este es tu primer servidor.
|
||||
server_port=Puerto del servidor
|
||||
invalid_port=Puerto invalido
|
||||
ram_warning=La RAM es la máxima memoria que PocketMine-MP usará. Se recomienda utilizar un mínimo de 128 MB
|
||||
server_ram=RAM del servidor en MB
|
||||
gamemode_info=Escoge entre Creativo (1) o Survival (0)
|
||||
default_gamemode=Modo de juego predeterminado
|
||||
max_players=Límite de jugadores
|
||||
spawn_protection_info=La protección del inicio impide poner/romper bloques en la zona de aparición, a excepción de los OPs
|
||||
spawn_protection=Activar la protección del spawn?
|
||||
|
||||
op_info=Un OP es el administrador del servidor. Los OPs pueden ejecutar más comandos que los usuarios normales
|
||||
op_who=OP nombre del jugador (Por ejemplo: Tu nombre de Minecraft)
|
||||
op_warning=Podrás añadir más usuarios a la lista de OPs después, utilizando el comando /op <player>
|
||||
whitelist_info=La lista blanca (white-list) permite hacer una lista de invitados, solo los usuarios en la lista podrán entrar a tu servidor.
|
||||
whitelist_enable=¿Deseas activar la lista blanca?
|
||||
whitelist_warning=Tendrás que añadir usuarios a la lista blanca
|
||||
|
||||
query_warning1=Query es un protocolo usado por diferentes herramientas para conseguir informacion de tu servidor y los jugadores conectados.
|
||||
query_warning2=Si lo desactivas, no podrás registrar tu servidor en una lista de servidores.
|
||||
query_disable=¿Quieres desactivar Query?
|
||||
rcon_info=RCON es un protocolo que te permite conectarte a la consola de tu servidor usando una contraseña.
|
||||
rcon_enable=¿Queres activar RCON?
|
||||
rcon_password=Contraseña para RCON (puedes cambiarla después)
|
||||
usage_info=Los datos de uso anónimos nos permiten calcular estadísticas globales para PocketMine-MP y sus plugins. Puedes verlas en stats.pocketmine.net
|
||||
usage_disable=¿Quieres desactivar las datos de uso anónimos?
|
||||
ip_get=Obteniendo tu IP externa e IP interna
|
||||
ip_warning=Tu IP externa es {{EXTERNAL_IP}}. Quizás debas redireccionar el puerto a tu IP interna: {{INTERNAL_IP}}
|
||||
ip_confirm=Asegúrate de que este bien, ya que si debes hacerlo y lo saltas, ningún jugador podrá entrar si esta fuera de tu red WIFI. [Pulsa Enter]
|
||||
|
||||
you_have_finished=Has completado el asistente de configuración correctamente
|
||||
pocketmine_will_start=PocketMine-MP se iniciará ahora. Escribe /help para ver la lista de los comandos disponibles.
|
||||
pocketmine_plugins=Ve al Repositorio de Plugins para añadir nuevas funciones, minijuegos o protección avanzada a tu servidor
|
@ -1,7 +1,4 @@
|
||||
|
||||
|
||||
|
||||
default_gamemode=Normaali Peli Tila
|
||||
default_gamemode = Normaali Peli Tila
|
||||
|
||||
|
||||
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=Français a été correctement sélectionné.
|
||||
skip_installer=Voulez-vous passer l'assistant d'installation?
|
||||
language_has_been_selected = Français a été correctement sélectionné.
|
||||
skip_installer = Voulez-vous passer l'assistant d'installation?
|
||||
|
||||
welcome_to_pocketmine=Bienvenue sur PocketMine-MP!\nAvant de commencer à paramétrer votre nouveau serveur, vous devez accepter la license d'utilisation.\nPocketMine-MP est sous licence LGPL,\nvous pouvez la lire en ouvrant le fichier LICENSE dans ce dossier.
|
||||
accept_license=Acceptez-vous la Licence?
|
||||
you_have_to_accept_the_license=Vous devez accepter la licence LGPL pour continuer à utiliser PocketMine-MP
|
||||
welcome_to_pocketmine = Bienvenue sur PocketMine-MP!\nAvant de commencer à paramétrer votre nouveau serveur, vous devez accepter la license d'utilisation.\nPocketMine-MP est sous licence LGPL,\nvous pouvez la lire en ouvrant le fichier LICENSE dans ce dossier.
|
||||
accept_license = Acceptez-vous la Licence?
|
||||
you_have_to_accept_the_license = Vous devez accepter la licence LGPL pour continuer à utiliser PocketMine-MP
|
||||
|
||||
setting_up_server_now=Vous êtes maintenant prêt à paramétrer votre serveur.
|
||||
default_values_info=Si vous ne voulez pas changer la valeur par défaut, pressez juste Enter.
|
||||
server_properties=Vous pouvez éditer cela plus tard dans le fichier server.properties.
|
||||
setting_up_server_now = Vous êtes maintenant prêt à paramétrer votre serveur.
|
||||
default_values_info = Si vous ne voulez pas changer la valeur par défaut, pressez juste Enter.
|
||||
server_properties = Vous pouvez éditer cela plus tard dans le fichier server.properties.
|
||||
|
||||
name_your_server=Donnez un nom à votre serveur
|
||||
port_warning=Ne changez pas la valeur par défaut du port si c'est votre premier serveur.
|
||||
server_port=Port du serveur
|
||||
invalid_port=Port du serveur invalide
|
||||
ram_warning=La RAM est au maximum de sa capacité par rapport à la mémoire utilisée par PocketMine-MP. Une valeur de 128-256 MB est recommandée
|
||||
server_ram=RAM du serveur en MB
|
||||
gamemode_info=Choisir entre Créatif (1) ou Survie (1)
|
||||
default_gamemode=Mode de jeu par défaut
|
||||
max_players=Joueurs max. en ligne
|
||||
spawn_protection_info=La protection de spawn désactive le placement/cassement de blocs dans la zone de spawn excepté pour les OPs
|
||||
spawn_protection=Activer la protection de spawn?
|
||||
name_your_server = Donnez un nom à votre serveur
|
||||
port_warning = Ne changez pas la valeur par défaut du port si c'est votre premier serveur.
|
||||
server_port = Port du serveur
|
||||
invalid_port = Port du serveur invalide
|
||||
ram_warning = La RAM est au maximum de sa capacité par rapport à la mémoire utilisée par PocketMine-MP. Une valeur de 128-256 MB est recommandée
|
||||
server_ram = RAM du serveur en MB
|
||||
gamemode_info = Choisir entre Créatif (1) ou Survie (0)
|
||||
default_gamemode = Mode de jeu par défaut
|
||||
max_players = Joueurs max. en ligne
|
||||
spawn_protection_info = La protection de spawn désactive le placement/cassement de blocs dans la zone de spawn excepté pour les OPs
|
||||
spawn_protection = Activer la protection de spawn?
|
||||
|
||||
op_info=Un OP est un administrateur du serveur. Les OPs peuvent exécuter plus de commandes que les joueurs normaux
|
||||
op_who=Nom de joueur OP (exemple, votre nom de jeu)
|
||||
op_warning=Vous serez en mesure d'ajouter un OP plus tard en utilisant /op <player>
|
||||
whitelist_info=La white-list autorise seulement les joueurs présents sur celle-ci.
|
||||
whitelist_enable=Voulez-vous activer la white-list?
|
||||
whitelist_warning=Vous devrez ajouter les joueurs à la white-list
|
||||
op_info = Un OP est un administrateur du serveur. Les OPs peuvent exécuter plus de commandes que les joueurs normaux
|
||||
op_who = Nom de joueur OP (exemple, votre nom de jeu)
|
||||
op_warning = Vous serez en mesure d'ajouter un OP plus tard en utilisant /op <player>
|
||||
whitelist_info = La white-list autorise seulement les joueurs présents sur celle-ci.
|
||||
whitelist_enable = Voulez-vous activer la white-list?
|
||||
whitelist_warning = Vous devrez ajouter les joueurs à la white-list
|
||||
|
||||
query_warning1=Query est un protocole utilisé par différents outils pour avoir des informations sur votre serveur et les joueurs connectés.
|
||||
query_warning2=Si vous le désactivez, vous ne pourrez pas utiliser les listes du serveur.
|
||||
query_disable=Voulez-vous désactiver Query?
|
||||
rcon_info=RCON est un protocole pour se connecter à distance à la console du serveur par un mot de passe.
|
||||
rcon_enable=Voulez-vous activer RCON?
|
||||
rcon_password=Mot de passe RCON (vous pouvez le changer plus tard)
|
||||
usage_info=Les données d'utilisation anonyme vous permettent de calculer les statistiques globales de PocketMine-MP et ses plugins. Vous pouvez les voir sur stats.pocketmine.net
|
||||
usage_disable=Voulez-vous désactiver l'utilisation anonyme?
|
||||
ip_get=Obtention de votre IP externe et IP interne
|
||||
ip_warning=Votre IP externe est {{EXTERNAL_IP}}. Vous pourriez avoir à transmettre au port votre IP interne {{INTERNAL_IP}}
|
||||
ip_confirm=Vérifiez-le bien, si vous avancez et sautez cette étape, les joueurs extérieurs ne pourront pas rejoindre votre serveur. [Tapez Enter]
|
||||
query_warning1 = Query est un protocole utilisé par différents outils pour avoir des informations sur votre serveur et les joueurs connectés.
|
||||
query_warning2 = Si vous le désactivez, vous ne pourrez pas utiliser les listes du serveur.
|
||||
query_disable = Voulez-vous désactiver Query?
|
||||
rcon_info = RCON est un protocole pour se connecter à distance à la console du serveur par un mot de passe.
|
||||
rcon_enable = Voulez-vous activer RCON?
|
||||
rcon_password = Mot de passe RCON (vous pouvez le changer plus tard)
|
||||
usage_info = Les données d'utilisation anonyme vous permettent de calculer les statistiques globales de PocketMine-MP et ses plugins. Vous pouvez les voir sur stats.pocketmine.net
|
||||
usage_disable = Voulez-vous désactiver l'utilisation anonyme?
|
||||
ip_get = Obtention de votre IP externe et IP interne
|
||||
ip_warning = Votre IP externe est {{EXTERNAL_IP}}. Vous pourriez avoir à transmettre au port votre IP interne {{INTERNAL_IP}}
|
||||
ip_confirm = Vérifiez-le bien, si vous avancez et sautez cette étape, les joueurs extérieurs ne pourront pas rejoindre votre serveur. [Tapez Enter]
|
||||
|
||||
you_have_finished=Vous avez correctement terminé l'assistant d'installation
|
||||
pocketmine_will_start=PocketMine-MP démarre. Tapez /help pour voir la liste des commandes disponibles.
|
||||
pocketmine_plugins=Vérification du répertoire de plugin pour ajouter des nouvelles caractéristiques, mini-jeux, ou une protection avancée de votre serveur
|
||||
you_have_finished = Vous avez correctement terminé l'assistant d'installation
|
||||
pocketmine_will_start = PocketMine-MP démarre. Tapez /help pour voir la liste des commandes disponibles.
|
||||
pocketmine_plugins = Vérification du répertoire de plugin pour ajouter des nouvelles caractéristiques, mini-jeux, ou une protection avancée de votre serveur
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=Italiano selezionato correttamente.
|
||||
skip_installer=Vuoi evitare il programma di installazione?
|
||||
language_has_been_selected = Italiano selezionato correttamente.
|
||||
skip_installer = Vuoi evitare il programma di installazione?
|
||||
|
||||
welcome_to_pocketmine=Benvenuto in PocketMine-MP!\nPrima di iniziare a impostare il tuo nuovo server devi accettare la licenza.\nPocketMine-MP è distribuito sotto licenza LGPL,\nche potrai leggere aprendo il file LICNESE in questa cartella.
|
||||
accept_license=Accetti i termini della licenza?
|
||||
you_have_to_accept_the_license=Devi accettare i termini della licenza LGPL per continuare ad usare PocketMine-MP
|
||||
welcome_to_pocketmine = Benvenuto in PocketMine-MP!\nPrima di iniziare a impostare il tuo nuovo server devi accettare la licenza.\nPocketMine-MP è distribuito sotto licenza LGPL,\nche potrai leggere aprendo il file LICNESE in questa cartella.
|
||||
accept_license = Accetti i termini della licenza?
|
||||
you_have_to_accept_the_license = Devi accettare i termini della licenza LGPL per continuare ad usare PocketMine-MP
|
||||
|
||||
setting_up_server_now=Stai per iniziare ad impostare il tuo server.
|
||||
default_values_info=Se non vuoi cambiare i valori proposti, premi Invio.
|
||||
server_properties=Potrai modificarli in seguito nel file server.properties.
|
||||
setting_up_server_now = Stai per iniziare ad impostare il tuo server.
|
||||
default_values_info = Se non vuoi cambiare i valori proposti, premi Invio.
|
||||
server_properties = Potrai modificarli in seguito nel file server.properties.
|
||||
|
||||
name_your_server=Dai un nome al tuo server
|
||||
port_warning=Non cambiare la porta predefinita se questo è il tuo primo server.
|
||||
server_port=Porta del server
|
||||
invalid_port=Porta del server non valida
|
||||
ram_warning=La RAM è la massima quantità di memoria che PocketMine-MP potrà usare. Un valore di 128-256 MB è raccomandata
|
||||
server_ram=RAM del server in MB
|
||||
gamemode_info=Scegli tra Creative (1) o Survival (0)
|
||||
default_gamemode=Modalità di gioco predefinita
|
||||
max_players=Players massimi
|
||||
spawn_protection_info=La protezione dello spawn non permette di piazzare/rompere blocchi nella zona di spawn, ad eccezione degli Operatori
|
||||
spawn_protection=Abilitare la protezione dello spawn?
|
||||
name_your_server = Dai un nome al tuo server
|
||||
port_warning = Non cambiare la porta predefinita se questo è il tuo primo server.
|
||||
server_port = Porta del server
|
||||
invalid_port = Porta del server non valida
|
||||
ram_warning = La RAM è la massima quantità di memoria che PocketMine-MP potrà usare. Un valore di 128-256 MB è raccomandata
|
||||
server_ram = RAM del server in MB
|
||||
gamemode_info = Scegli tra Creative (1) o Survival (0)
|
||||
default_gamemode = Modalità di gioco predefinita
|
||||
max_players = Players massimi
|
||||
spawn_protection_info = La protezione dello spawn non permette di piazzare/rompere blocchi nella zona di spawn, ad eccezione degli Operatori
|
||||
spawn_protection = Abilitare la protezione dello spawn?
|
||||
|
||||
op_info=Un Operatore (OP) è un player amministratore del server. Gli operatori possono usare più comandi dei players normali
|
||||
op_who=Nome del player OP (ad esempio, il tuo nome in gioco)
|
||||
op_warning=Sarà possibile aggiungere un player OP più tardi con /op <player>
|
||||
whitelist_info=La white-list permette solo ad i players in lista di entrare.
|
||||
whitelist_enable=Vuoi abilitare la white-list?
|
||||
whitelist_warning=Dovrai aggiungere i players in white-list
|
||||
op_info = Un Operatore (OP) è un player amministratore del server. Gli operatori possono usare più comandi dei players normali
|
||||
op_who = Nome del player OP (ad esempio, il tuo nome in gioco)
|
||||
op_warning = Sarà possibile aggiungere un player OP più tardi con /op <player>
|
||||
whitelist_info = La white-list permette solo ad i players in lista di entrare.
|
||||
whitelist_enable = Vuoi abilitare la white-list?
|
||||
whitelist_warning = Dovrai aggiungere i players in white-list
|
||||
|
||||
query_warning1=Query è un protocollo usato da differenti programmi per ottenere informazioni dal tuo server e dai player che ci entrano.
|
||||
query_warning2=Se lo disabiliti, non sarai in grado di usare le liste server.
|
||||
query_disable=Vuoi disabilitare Query?
|
||||
rcon_info=RCON è un protocollo per connessioni remote con la console del server grazie all'utilizzo di una password.
|
||||
rcon_enable=Vuoi abilitare RCON?
|
||||
rcon_password=Password RCON (potrai cambiarla più tardi)
|
||||
usage_info=L'invio anonimo dei dati di utilizzo ci aiuta a calcolare statistiche generali per PocketMine-MP ed i suoi plugins. Puoi vederle su stats.pocketmine.net
|
||||
usage_disable=Vuoi disabilitare l'invio anonimo dei dati di utilizzo?
|
||||
ip_get=Ottengo il tuo indirizzo IP interno ed esterno
|
||||
ip_warning=Il tuo indirizzo IP è {{EXTERNAL_IP}}. Potresti dover redirigere le porte al tuo IP interno: {{INTERNAL_IP}}
|
||||
ip_confirm=Sii sicuro di farlo, se devi redirigere le porte e non lo fai, nessun player esterno sarà in grado di entrare. [Premi Invio]
|
||||
query_warning1 = Query è un protocollo usato da differenti programmi per ottenere informazioni dal tuo server e dai player che ci entrano.
|
||||
query_warning2 = Se lo disabiliti, non sarai in grado di usare le liste server.
|
||||
query_disable = Vuoi disabilitare Query?
|
||||
rcon_info = RCON è un protocollo per connessioni remote con la console del server grazie all'utilizzo di una password.
|
||||
rcon_enable = Vuoi abilitare RCON?
|
||||
rcon_password = Password RCON (potrai cambiarla più tardi)
|
||||
usage_info = L'invio anonimo dei dati di utilizzo ci aiuta a calcolare statistiche generali per PocketMine-MP ed i suoi plugins. Puoi vederle su stats.pocketmine.net
|
||||
usage_disable = Vuoi disabilitare l'invio anonimo dei dati di utilizzo?
|
||||
ip_get = Ottengo il tuo indirizzo IP interno ed esterno
|
||||
ip_warning = Il tuo indirizzo IP è {{EXTERNAL_IP}}. Potresti dover redirigere le porte al tuo IP interno: {{INTERNAL_IP}}
|
||||
ip_confirm = Sii sicuro di farlo, se devi redirigere le porte e non lo fai, nessun player esterno sarà in grado di entrare. [Premi Invio]
|
||||
|
||||
you_have_finished=Hai completato l'installazione con successo
|
||||
pocketmine_will_start=Ora PocketMine-MP si avvierà. Digita /help per visualizzare la lista dei comandi disponibili.
|
||||
pocketmine_plugins=Controlla il Repository dei Plugins per aggiungere nuove funzionalità, minigiochi, o protezioni avanzate al tuo server
|
||||
you_have_finished = Hai completato l'installazione con successo
|
||||
pocketmine_will_start = Ora PocketMine-MP si avvierà. Digita /help per visualizzare la lista dei comandi disponibili.
|
||||
pocketmine_plugins = Controlla il Repository dei Plugins per aggiungere nuove funzionalità, minigiochi, o protezioni avanzate al tuo server
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=日本語に設定されました
|
||||
skip_installer=セットアップウィザードをスキップしますか?
|
||||
language_has_been_selected = 日本語に設定されました
|
||||
skip_installer = セットアップウィザードをスキップしますか?
|
||||
|
||||
welcome_to_pocketmine=PocketMine-MPをインストールして頂きありがとうございます!サーバのセットアップを開始するにはライセンスに同意する必要があります。PocketMine-MPはLGPLライセンスに基づいて認可されており、これについてはこのフォルダ内のLICENSEファイルから確認することができます。
|
||||
accept_license=ライセンスに同意しますか?
|
||||
you_have_to_accept_the_license=PocketMine-MPを使用するにはLGPLライセンスに同意する必要があります
|
||||
welcome_to_pocketmine = PocketMine-MPをインストールして頂きありがとうございます!サーバのセットアップを開始するにはライセンスに同意する必要があります。PocketMine-MPはLGPLライセンスに基づいて認可されており、これについてはこのフォルダ内のLICENSEファイルから確認することができます。
|
||||
accept_license = ライセンスに同意しますか?
|
||||
you_have_to_accept_the_license = PocketMine-MPを使用するにはLGPLライセンスに同意する必要があります
|
||||
|
||||
setting_up_server_now=サーバのセットアップを開始します
|
||||
default_values_info=設定を変更しない場合は、Enterキーを押してください。
|
||||
server_properties=それらの設定は後からでもserver.propertiesファイルから変更できます
|
||||
setting_up_server_now = サーバのセットアップを開始します
|
||||
default_values_info = 設定を変更しない場合は、Enterキーを押してください。
|
||||
server_properties = それらの設定は後からでもserver.propertiesファイルから変更できます
|
||||
|
||||
name_your_server=あなたのサーバに名前を付けてください
|
||||
port_warning=これが初めてのサーバの場合は、ポート番号をデフォルトから変更しないでください
|
||||
server_port=サーバポート
|
||||
invalid_port=不適切なサーバポートです
|
||||
ram_warning=RAMはPocketMine-MPが使用し得るメモリの最大値を示しています。128-256MBの範囲内で指定することを推奨します。
|
||||
server_ram=RAMの単位はMBです
|
||||
gamemode_info=クリエイティブモード(1)、またはサバイバルモード(0)を選択してください
|
||||
default_gamemode=デフォルトのゲームモード
|
||||
max_players=最大プレイヤー数
|
||||
spawn_protection_info=スポーンプロテクションは、OPでないプレイヤーによるスポーン地点付近でのブロックの設置/破壊を制限します
|
||||
spawn_protection=スポーンプロテクションを有効にしますか?
|
||||
name_your_server = あなたのサーバに名前を付けてください
|
||||
port_warning = これが初めてのサーバの場合は、ポート番号をデフォルトから変更しないでください
|
||||
server_port = サーバポート
|
||||
invalid_port = 不適切なサーバポートです
|
||||
ram_warning = RAMはPocketMine-MPが使用し得るメモリの最大値を示しています。128-256MBの範囲内で指定することを推奨します。
|
||||
server_ram = RAMの単位はMBです
|
||||
gamemode_info = クリエイティブモード(1)、またはサバイバルモード(0)を選択してください
|
||||
default_gamemode = デフォルトのゲームモード
|
||||
max_players = 最大プレイヤー数
|
||||
spawn_protection_info = スポーンプロテクションは、OPでないプレイヤーによるスポーン地点付近でのブロックの設置/破壊を制限します
|
||||
spawn_protection = スポーンプロテクションを有効にしますか?
|
||||
|
||||
op_info=OPとはそのサーバの管理権限を指します。OPを持ったプレイヤーは他のプレイヤーよりも多くのコマンドを使用できます。
|
||||
op_who=OPプレイヤー名(例: あなたのゲーム内での名前)
|
||||
op_warning=後から/op <プレイヤー名>コマンドを実行してOPプレイヤーを追加することもできます
|
||||
whitelist_info=ホワイトリストはこのサーバに入ることのできるプレイヤーを制限します。
|
||||
whitelist_enable=ホワイトリストを有効にしますか?
|
||||
whitelist_warning=プレイヤーをホワイトリストに追加してください
|
||||
op_info = OPとはそのサーバの管理権限を指します。OPを持ったプレイヤーは他のプレイヤーよりも多くのコマンドを使用できます。
|
||||
op_who = OPプレイヤー名(例: あなたのゲーム内での名前)
|
||||
op_warning = 後から/op <プレイヤー名>コマンドを実行してOPプレイヤーを追加することもできます
|
||||
whitelist_info = ホワイトリストはこのサーバに入ることのできるプレイヤーを制限します。
|
||||
whitelist_enable = ホワイトリストを有効にしますか?
|
||||
whitelist_warning = プレイヤーをホワイトリストに追加してください
|
||||
|
||||
query_warning1=クエリは他のツールによりあなたのサーバやプレイヤーの情報を取得するためのプロトコルです。
|
||||
query_warning2=それを無効にした場合、サーバリストを使用できなくなる可能性があります。
|
||||
query_disable=クエリを無効にしますか?
|
||||
rcon_info=RCONはパスワードを用いてサーバコンソールからリモート接続するためのプロトコルです。
|
||||
rcon_enable=RCONを有効にしますか?
|
||||
rcon_password=RCONパスワード(後から変更できます)
|
||||
usage_info=世界中で使われているPocketMine-MPやそのプラグインの統計を算出するために匿名の使用データが送信されます。統計はこちらから確認できます。stats.pocketmine.net
|
||||
usage_disable=匿名の使用データの送信を拒否しますか?
|
||||
ip_get=グローバルIPとプライベートIPの取得
|
||||
ip_warning=あなたのグローバルIPは{{EXTERNAL_IP}}です。プライベートIP{{INTERNAL_IP}}をポート解放してください。
|
||||
ip_confirm=必ずポート解放ができているか確認してください。ポートが解放できていなかった場合、他のプレイヤーがサーバに入れなくなる恐れがあります。[Enterキーを押してください]
|
||||
query_warning1 = クエリは他のツールによりあなたのサーバやプレイヤーの情報を取得するためのプロトコルです。
|
||||
query_warning2 = それを無効にした場合、サーバリストを使用できなくなる可能性があります。
|
||||
query_disable = クエリを無効にしますか?
|
||||
rcon_info = RCONはパスワードを用いてサーバコンソールからリモート接続するためのプロトコルです。
|
||||
rcon_enable = RCONを有効にしますか?
|
||||
rcon_password = RCONパスワード(後から変更できます)
|
||||
usage_info = 世界中で使われているPocketMine-MPやそのプラグインの統計を算出するために匿名の使用データが送信されます。統計はこちらから確認できます。stats.pocketmine.net
|
||||
usage_disable = 匿名の使用データの送信を拒否しますか?
|
||||
ip_get = グローバルIPとプライベートIPの取得
|
||||
ip_warning = あなたのグローバルIPは{{EXTERNAL_IP}}です。プライベートIP{{INTERNAL_IP}}をポート解放してください。
|
||||
ip_confirm = 必ずポート解放ができているか確認してください。ポートが解放できていなかった場合、他のプレイヤーがサーバに入れなくなる恐れがあります。[Enterキーを押してください]
|
||||
|
||||
you_have_finished=セットアップは正しく終了しました
|
||||
pocketmine_will_start=PocketMine_MPを起動します。/helpと入力すれば使用可能なコマンド一覧を表示できます。
|
||||
pocketmine_plugins=拡張機能や管理システム、ミニゲームなどを追加できるプラグインリポジトリも確認してみてください
|
||||
you_have_finished = セットアップは正しく終了しました
|
||||
pocketmine_will_start = PocketMine_MPを起動します。/helpと入力すれば使用可能なコマンド一覧を表示できます。
|
||||
pocketmine_plugins = 拡張機能や管理システム、ミニゲームなどを追加できるプラグインリポジトリも確認してみてください
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=한국어가 언어로 선택되었습니다.
|
||||
skip_installer=설치 마법사를 건너뛰겠습니까?
|
||||
language_has_been_selected = 한국어가 언어로 선택되었습니다.
|
||||
skip_installer = 설치 마법사를 건너뛰겠습니까?
|
||||
|
||||
welcome_to_pocketmine=PocketMine-MP에 오신 것을 환영합니다!\n서버 설치를 시작하기 전, 약관에 동의해야 합니다. \nPocketMine-MP는 GNU 약소 일반 공중 사용 허가서(LGPL) 하에 배포되고 있습니다. \n이 폴더에서 약관을 읽을 수 있습니다.
|
||||
accept_license=약관에 동의하십니까?
|
||||
you_have_to_accept_the_license=GNU 약소 일반 공중 사용 허가서(LGPL)에 동의하셔야 PocketMine-MP를 사용할 수 있습니다.
|
||||
welcome_to_pocketmine = PocketMine-MP에 오신 것을 환영합니다!\n서버 설치를 시작하기 전, 약관에 동의해야 합니다. \nPocketMine-MP는 GNU 약소 일반 공중 사용 허가서(LGPL) 하에 배포되고 있습니다. \n이 폴더에서 약관을 읽을 수 있습니다.
|
||||
accept_license = 약관에 동의하십니까?
|
||||
you_have_to_accept_the_license = GNU 약소 일반 공중 사용 허가서(LGPL)에 동의하셔야 PocketMine-MP를 사용할 수 있습니다.
|
||||
|
||||
setting_up_server_now=서버 설정을 시작합니다.
|
||||
default_values_info=기본값을 수정하고 싶지 않으면, 엔터를 누르십시기 바랍니다.
|
||||
server_properties=이 설정들은 server.properties 파일에서 세부적으로 변경이 가능합니다.
|
||||
setting_up_server_now = 서버 설정을 시작합니다.
|
||||
default_values_info = 기본값을 수정하고 싶지 않으면, 엔터를 누르십시기 바랍니다.
|
||||
server_properties = 이 설정들은 server.properties 파일에서 세부적으로 변경이 가능합니다.
|
||||
|
||||
name_your_server=당신의 서버 이름을 입력하시기 바랍니다.
|
||||
port_warning=만약 당신이 서버를 처음 설정한다면 포트 값을 변경하지 마세요.
|
||||
server_port=서버 포트
|
||||
invalid_port=서버 포트가 잘못 입력되었습니다.
|
||||
ram_warning=RAM 값은 PocketMine-MP에 할당할 메모리의 크기입니다. 128~256MB를 권장합니다.
|
||||
server_ram=서버의 램(RAM) (MB)
|
||||
gamemode_info=크리에이티브 (1) 또는 서바이벌 (0) 게임모드 중 하나를 고르세요.
|
||||
default_gamemode=기본 게임 모드
|
||||
max_players=최대 동시접속 인원 수
|
||||
spawn_protection_info=스폰 보호는 OP를 제외한 유저들이 스폰 지역 근처에서 블럭을 놓거나 부수는것을 방지합니다.
|
||||
spawn_protection=스폰 지역 보호를 사용하겠습니까?
|
||||
name_your_server = 당신의 서버 이름을 입력하시기 바랍니다.
|
||||
port_warning = 만약 당신이 서버를 처음 설정한다면 포트 값을 변경하지 마세요.
|
||||
server_port = 서버 포트
|
||||
invalid_port = 서버 포트가 잘못 입력되었습니다.
|
||||
ram_warning = RAM 값은 PocketMine-MP에 할당할 메모리의 크기입니다. 128~256MB를 권장합니다.
|
||||
server_ram = 서버의 램(RAM) (MB)
|
||||
gamemode_info = 크리에이티브 (1) 또는 서바이벌 (0) 게임모드 중 하나를 고르세요.
|
||||
default_gamemode = 기본 게임 모드
|
||||
max_players = 최대 동시접속 인원 수
|
||||
spawn_protection_info = 스폰 보호는 OP를 제외한 유저들이 스폰 지역 근처에서 블럭을 놓거나 부수는것을 방지합니다.
|
||||
spawn_protection = 스폰 지역 보호를 사용하겠습니까?
|
||||
|
||||
op_info=OP는 서버 관리자를 뜻합니다. OP는 일반 플레이어보다 훨씬 많은 명령어들을 사용할 수 있습니다
|
||||
op_who=OP 권한을 줄 플레이어 이름(예: 당신의 닉네임)
|
||||
op_warning=또는 이후에 /op <플레이어 이름> 을 입력해 그 유저에게 OP 권한을 줄 수도 있습니다
|
||||
whitelist_info=화이트리스트를 사용하면 허용된 플레이어들만 서버에 접속할 수 있습니다.
|
||||
whitelist_enable=화이트리스트를 사용하겠습니까?
|
||||
whitelist_warning=당신은 접속을 허용할 플레이어들의 이름을 적어야 합니다
|
||||
op_info = OP는 서버 관리자를 뜻합니다. OP는 일반 플레이어보다 훨씬 많은 명령어들을 사용할 수 있습니다
|
||||
op_who = OP 권한을 줄 플레이어 이름(예: 당신의 닉네임)
|
||||
op_warning = 또는 이후에 /op <플레이어 이름> 을 입력해 그 유저에게 OP 권한을 줄 수도 있습니다
|
||||
whitelist_info = 화이트리스트를 사용하면 허용된 플레이어들만 서버에 접속할 수 있습니다.
|
||||
whitelist_enable = 화이트리스트를 사용하겠습니까?
|
||||
whitelist_warning = 당신은 접속을 허용할 플레이어들의 이름을 적어야 합니다
|
||||
|
||||
query_warning1=쿼리 (Query)는 당신의 서버와 현재 접속한 플레이어들의 정보를 알 수 있게 해주는 여러가지 기능이 담긴 프로토콜입니다.
|
||||
query_warning2=쿼리를 사용하지 않으면, 당신은 서버 리스트를 사용할 수 없게 됩니다.
|
||||
query_disable=쿼리를 사용하지 않겠습니까?
|
||||
rcon_info=RCON은 비밀 번호를 사용하여 서버 명령창에 원격으로 접소갈 수 있는 프로토콜입니다.
|
||||
rcon_enable=RCON 을 사용하시겠습니까?
|
||||
rcon_password=RCON 비밀번호 설정 (나중에 server.properties 에서 변경이 가능합니다.)
|
||||
usage_info=익명 사용 통계 전송을 허용하면 PocketMine-MP가 세계의 서버 상황과 플러그인들을 통계화하는 데 사용할 수 있습니다. 당신은 stats.pocketmine.net에서 이를 확인할 수 있습니다
|
||||
usage_disable=익명 사용 통계 전송을 사용하지 않으시겠습니까?
|
||||
ip_get=내/외부 IP 주소 얻기
|
||||
ip_warning=당신의 외부 IP는 {{EXTERNAL_IP}}입니다. 당신의 내부 IP {{INTERNAL_IP}}로 포트포워딩이 필요할 수 있습니다
|
||||
ip_confirm=신중하게 확인하세요. 만약 포트 포워딩이 필요하지만 하지 않을 경우 외부에서 플레이어들이 접속할 수 없게 됩니다. [계속 하시려면 엔터를 누르세요]
|
||||
query_warning1 = 쿼리 (Query)는 당신의 서버와 현재 접속한 플레이어들의 정보를 알 수 있게 해주는 여러가지 기능이 담긴 프로토콜입니다.
|
||||
query_warning2 = 쿼리를 사용하지 않으면, 당신은 서버 리스트를 사용할 수 없게 됩니다.
|
||||
query_disable = 쿼리를 사용하지 않겠습니까?
|
||||
rcon_info = RCON은 비밀 번호를 사용하여 서버 명령창에 원격으로 접소갈 수 있는 프로토콜입니다.
|
||||
rcon_enable = RCON 을 사용하시겠습니까?
|
||||
rcon_password = RCON 비밀번호 설정 (나중에 server.properties 에서 변경이 가능합니다.)
|
||||
usage_info = 익명 사용 통계 전송을 허용하면 PocketMine-MP가 세계의 서버 상황과 플러그인들을 통계화하는 데 사용할 수 있습니다. 당신은 stats.pocketmine.net에서 이를 확인할 수 있습니다
|
||||
usage_disable = 익명 사용 통계 전송을 사용하지 않으시겠습니까?
|
||||
ip_get = 내/외부 IP 주소 얻기
|
||||
ip_warning = 당신의 외부 IP는 {{EXTERNAL_IP}}입니다. 당신의 내부 IP {{INTERNAL_IP}}로 포트포워딩이 필요할 수 있습니다
|
||||
ip_confirm = 신중하게 확인하세요. 만약 포트 포워딩이 필요하지만 하지 않을 경우 외부에서 플레이어들이 접속할 수 없게 됩니다. [계속 하시려면 엔터를 누르세요]
|
||||
|
||||
you_have_finished=PocketMine-MP의 설치가 모두 완료되었습니다.
|
||||
pocketmine_will_start=PocketMine-MP 서버를 구동합니다. /help로 사용 가능한 모든 명령어의 목록을 보시기 바랍니다.
|
||||
pocketmine_plugins=플러그인 저장소에서 새로운 기능을 추가하세요. 새로운 기능, 미니게임을 추가하거나 고급 기능으로 당신의 서버를 보호할 수 있습니다
|
||||
you_have_finished = PocketMine-MP의 설치가 모두 완료되었습니다.
|
||||
pocketmine_will_start = PocketMine-MP 서버를 구동합니다. /help로 사용 가능한 모든 명령어의 목록을 보시기 바랍니다.
|
||||
pocketmine_plugins = 플러그인 저장소에서 새로운 기능을 추가하세요. 새로운 기능, 미니게임을 추가하거나 고급 기능으로 당신의 서버를 보호할 수 있습니다
|
||||
|
@ -1,6 +1,45 @@
|
||||
language_has_been_selected = Bahasa Melayu telah dipilih dengan betul.
|
||||
skip_installer = Adakah anda mahu meninggalkan 'set-up' ini?
|
||||
|
||||
welcome_to_pocketmine = Selamat datang ke PocketMine-MP!\nSebelum memulakan setting untuk server baru anda, anda perlu setuju dengan lesen. \nPocketMine-MP telah dilesen dibawah LGPL License,\nthat anda boleh membaca LICENSE fail dalam folder ini.
|
||||
accept_license = Adakah anda setuju dengan lesen ini?
|
||||
you_have_to_accept_the_license = Anda peru setuju dengan lesen LGPL untuk meneruskan menggunakan PocketMine-MP
|
||||
|
||||
setting_up_server_now = Anda perlu memulakan 'set-up' server sekarang.
|
||||
default_values_info = Jika anda tidak mahu menukar bilangan 'value', hanya tekan Enter.
|
||||
server_properties = Anda boleh edit itu selepas ini di fail server.properties.
|
||||
|
||||
name_your_server = Berikan satu nama kepada pelayan anda
|
||||
port_warning = Jangan tukar 'default port value' jika ini pelayan pertama anda.
|
||||
server_port = Port pelayan
|
||||
invalid_port = Port pelayan tidak boleh digunakan
|
||||
ram_warning = Angka RAM maksimum bagi memori untuk PocketMIne-MP akan digunakan. Nilai baginya ialah 128-256 MB adalah disyorkan
|
||||
server_ram = RAM pelayan adalah di dalam MB
|
||||
gamemode_info = Pilih di antara Kreatif (1) atau Ikhtiar (0)
|
||||
default_gamemode = Mod permainan asal
|
||||
max_players = Maks. pemain dalam talian
|
||||
spawn_protection_info = Perlindungan 'spawn' tidak membenarkan meletakkan / memecah blok di zon 'spawn' kecuali OP
|
||||
spawn_protection = Aktifkan perlindungan 'spawn' ?
|
||||
|
||||
op_info = Satu OP adalah admin pemain pelayan. OP boleh menjalankan lebih arahan daripada pemain biasa
|
||||
op_who = Nama Pemain OP (contohnya, nama permainan anda)
|
||||
op_warning = Anda akan dapat untuk menambah pengguna OP kemudian menggunakan /op <player>
|
||||
whitelist_info = Senarai putih ini hanya membenarkan pemain dalam itu untuk masuk.
|
||||
whitelist_enable = Adakah anda ingin untuk membolehkan senarai putih?
|
||||
whitelist_warning = Anda perlu menambah pemain untuk senarai putih
|
||||
|
||||
query_warning1 = Query adalah protokol yang digunakan oleh alat yang berbeza untuk mendapatkan maklumat pelayan dan pemain anda log masuk.
|
||||
query_warning2 = Jika anda nyahaktifkan, anda tidak akan dapat menggunakan senarai pelayan.
|
||||
query_disable = Adakah anda ingin untuk menyahboleh Query?
|
||||
rcon_info = RCON merupakan protokol untuk menyambung jauh dengan konsol pelayan dengan menggunakan kata laluan.
|
||||
rcon_enable = Mahu aktifkan RCON?
|
||||
rcon_password = Kata laluan RCON (anda boleh tukarnya kemudian)
|
||||
usage_info = Data penggunaan tanpa nama membolehkan kita untuk mengira statistik global untuk PocketMine-MP dan plugin itu. Anda boleh melihat itu di stats.pocketmine.net
|
||||
usage_disable = Adakah anda mahu nyah-aktifkan penggunaan tanpa nama?
|
||||
ip_get = Mendapatkan external IP dan internal IP anda
|
||||
ip_warning = External IP anda ialah {{EXTERNAL_IP}} Anda perlu port-foward anda punya internal IP {{INTERNAL_IP}}
|
||||
ip_confirm = Pastikan anda menyemak ia, jika anda perlu ke depan dan skip ia, tiada pemain external akan dapat masuk. [Tekan Enter]
|
||||
|
||||
you_have_finished = Anda telah selesaikan set-up dengan betul dan selamat
|
||||
pocketmine_will_start = PocketMine-MP akan mula sekarang. Taip /help untuk melihat command-command.
|
||||
pocketmine_plugins = Semak Plugin Repository untuk menambah feature baru, permainan kecil, ataupun keselamatan untuk anda punya pelayan
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=Nederlands is nu geselecteerd.
|
||||
skip_installer=Wil je de set-up help overslaan?
|
||||
language_has_been_selected = Nederlands is nu geselecteerd.
|
||||
skip_installer = Wil je de set-up help overslaan?
|
||||
|
||||
welcome_to_pocketmine=Welkom op de PocketMine-MP!\nVoordat je je nieuwe server klaarmaakt, moet je onze gebruikersovereenkomst accepteren.\nPocketMine-MP is gelicenseerd onder LGPL License,\nwat je kunt lezen door de LICENSE file in deze map te openen.
|
||||
accept_license=Accepteer je de gebruikersvoorwaarden?
|
||||
you_have_to_accept_the_license=Je moet de LGPL gebruikersvoorwaarden accepteren voordat je verder gaat met het gebruiken van de services van PocketMine-MP
|
||||
welcome_to_pocketmine = Welkom op de PocketMine-MP!\nVoordat je je nieuwe server klaarmaakt, moet je onze gebruikersovereenkomst accepteren.\nPocketMine-MP is gelicenseerd onder LGPL License,\nwat je kunt lezen door de LICENSE file in deze map te openen.
|
||||
accept_license = Accepteer je de gebruikersvoorwaarden?
|
||||
you_have_to_accept_the_license = Je moet de LGPL gebruikersvoorwaarden accepteren voordat je verder gaat met het gebruiken van de services van PocketMine-MP
|
||||
|
||||
setting_up_server_now=Je gaat nu een server klaarmaken voor gebruik.
|
||||
default_values_info=Druk op Enter als je de gebruikelijke waarde niet wilt veranderen.
|
||||
server_properties=Je kunt ze later veranderen in het server.properties bestand.
|
||||
setting_up_server_now = Je gaat nu een server klaarmaken voor gebruik.
|
||||
default_values_info = Druk op Enter als je de gebruikelijke waarde niet wilt veranderen.
|
||||
server_properties = Je kunt ze later veranderen in het server.properties bestand.
|
||||
|
||||
name_your_server=Geef een naam aan je server
|
||||
port_warning=Verander de gebruikelijke poort niet als dit je eerste server is.
|
||||
server_port=Server poort
|
||||
invalid_port=Ongeldige server poort
|
||||
ram_warning=De RAM is het maximale aantal memory wat PocketMine-MP zal gebruiken. Een aantal tussen de 128 en de 256 MB is aanbevolen
|
||||
server_ram=Server RAM in MB
|
||||
gamemode_info=Kies tussen Creative (1) of Survival (0)
|
||||
default_gamemode=Gebruikelijke spelmodus
|
||||
max_players=Maximale online spelers
|
||||
spawn_protection_info=De spawnbeveiliging verbiedt het plaatsen/slopen van blokken in het spawn gebied behalve voor OP's
|
||||
spawn_protection=Wil je spawnbeveiliging aanzetten?
|
||||
name_your_server = Geef een naam aan je server
|
||||
port_warning = Verander de gebruikelijke poort niet als dit je eerste server is.
|
||||
server_port = Server poort
|
||||
invalid_port = Ongeldige server poort
|
||||
ram_warning = De RAM is het maximale aantal memory wat PocketMine-MP zal gebruiken. Een aantal tussen de 128 en de 256 MB is aanbevolen
|
||||
server_ram = Server RAM in MB
|
||||
gamemode_info = Kies tussen Creative (1) of Survival (0)
|
||||
default_gamemode = Gebruikelijke spelmodus
|
||||
max_players = Maximale online spelers
|
||||
spawn_protection_info = De spawnbeveiliging verbiedt het plaatsen/slopen van blokken in het spawn gebied behalve voor OP's
|
||||
spawn_protection = Wil je spawnbeveiliging aanzetten?
|
||||
|
||||
op_info=Een OP is de beheerder van de server. OP's kunnen meer commando's gebruiken dan normale spelers
|
||||
op_who=OP speler naam (voorbeeld: je username)
|
||||
op_warning=Je kunt later meerdere OP's toevoegen met het commando /op <player>
|
||||
whitelist_info=De whitelist laat alleen de spelers die in de lijst staan op de server.
|
||||
whitelist_enable=Wil je de whitelist aanzetten?
|
||||
whitelist_warning=Je moet wel spelers aan de whitelist toevoegen.
|
||||
op_info = Een OP is de beheerder van de server. OP's kunnen meer commando's gebruiken dan normale spelers
|
||||
op_who = OP speler naam (voorbeeld: je username)
|
||||
op_warning = Je kunt later meerdere OP's toevoegen met het commando /op <player>
|
||||
whitelist_info = De whitelist laat alleen de spelers die in de lijst staan op de server.
|
||||
whitelist_enable = Wil je de whitelist aanzetten?
|
||||
whitelist_warning = Je moet wel spelers aan de whitelist toevoegen.
|
||||
|
||||
query_warning1=Query is een protocol dat gebruikt wordt door verschillende programma's om informatie te verkrijgen van je server en welke spelers ingelogd zijn.
|
||||
query_warning2=Als je het uitzet, zul je geen mogelijkheid hebben om server lijsten te gebruiken.
|
||||
query_disable=Wil je Query uitschakelen?
|
||||
rcon_info=RCON is een protocol om je server op afstand te beheren via de server console door middel van een wachtwoord.
|
||||
rcon_enable=Wil je RCON aanzetten?
|
||||
rcon_password=RCON wachtwoord (deze kun je later veranderen)
|
||||
usage_info=De anonieme gebruikersdata laat ons toe om de globale statistieken voor PocketMine-ML te zien en zijn plugins. Je kunt de statistieken zien op stats.pocketmine.net
|
||||
usage_disable=Wil je anonieme data uitschakelen?
|
||||
ip_get=Je externe IP en interne IP verkrijgen
|
||||
ip_warning=Je externe IP is {{EXTERNAL_IP}}. Het is mogelijk dat je moet port-forwarden naar je interne IP:{{INTERNAL_IP}}
|
||||
ip_confirm=Wees niet bang om het te controleren, als je moet port-forwarden en je slaat dit over, kunnen externe spelers niet op de server.
|
||||
query_warning1 = Query is een protocol dat gebruikt wordt door verschillende programma's om informatie te verkrijgen van je server en welke spelers ingelogd zijn.
|
||||
query_warning2 = Als je het uitzet, zul je geen mogelijkheid hebben om server lijsten te gebruiken.
|
||||
query_disable = Wil je Query uitschakelen?
|
||||
rcon_info = RCON is een protocol om je server op afstand te beheren via de server console door middel van een wachtwoord.
|
||||
rcon_enable = Wil je RCON aanzetten?
|
||||
rcon_password = RCON wachtwoord (deze kun je later veranderen)
|
||||
usage_info = De anonieme gebruikersdata laat ons toe om de globale statistieken voor PocketMine-ML te zien en zijn plugins. Je kunt de statistieken zien op stats.pocketmine.net
|
||||
usage_disable = Wil je anonieme data uitschakelen?
|
||||
ip_get = Je externe IP en interne IP verkrijgen
|
||||
ip_warning = Je externe IP is {{EXTERNAL_IP}}. Het is mogelijk dat je moet port-forwarden naar je interne IP:{{INTERNAL_IP}}
|
||||
ip_confirm = Wees niet bang om het te controleren, als je moet port-forwarden en je slaat dit over, kunnen externe spelers niet op de server.
|
||||
|
||||
you_have_finished=Je hebt de set-up help volledig beëindigd.
|
||||
pocketmine_will_start=PocketMine-MP zal nu opstarten. Type /help om de lijst van beschikbare commando's te weergeven.
|
||||
pocketmine_plugins=Check de Plugin Opslag om nieuwe features, minigames of geavanceerde spawnbeveiliging toe te voegen aan je server
|
||||
you_have_finished = Je hebt de set-up help volledig beëindigd.
|
||||
pocketmine_will_start = PocketMine-MP zal nu opstarten. Type /help om de lijst van beschikbare commando's te weergeven.
|
||||
pocketmine_plugins = Check de Plugin Opslag om nieuwe features, minigames of geavanceerde spawnbeveiliging toe te voegen aan je server
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=Norsk har blitt valgt.
|
||||
skip_installer=Vil du hoppe over installasjons veiviseren?
|
||||
language_has_been_selected = Norsk har blitt valgt.
|
||||
skip_installer = Vil du hoppe over installasjons veiviseren?
|
||||
|
||||
welcome_to_pocketmine=Velkommen til PocketMine-MP!\nFør vi starter med å sette opp din nye server må du akseptere vår lisens.\nPocketMine-MP er lisensiert under LGPL lisensen,\nat du kan lese LISENS filen i denne mappen.
|
||||
accept_license=Aksepterer du lisensen?
|
||||
you_have_to_accept_the_license=Du må akseptere LGPL lisensen for å fortsette med å bruke PocketMine-MP
|
||||
welcome_to_pocketmine = Velkommen til PocketMine-MP!\nFør vi starter med å sette opp din nye server må du akseptere vår lisens.\nPocketMine-MP er lisensiert under LGPL lisensen,\nsom du kan lese ved å åpne LISENS filen i denne mappen.
|
||||
accept_license = Aksepterer du lisensen?
|
||||
you_have_to_accept_the_license = Du må akseptere LGPL lisensen for å fortsette med å bruke PocketMine-MP
|
||||
|
||||
setting_up_server_now=Nå skal du sette opp din server.
|
||||
default_values_info=Hvis du ikke vil gjøre forskjell med den ordinære verdien, så trenger du bare å trykke Enter.
|
||||
server_properties=Du kan redigere dem senere i server.properties filen.
|
||||
setting_up_server_now = Nå skal du sette opp din server.
|
||||
default_values_info = Hvis du ikke vil gjøre forskjell med den ordinære verdien, så trenger du bare å trykke Enter.
|
||||
server_properties = Du kan redigere dem senere i server.properties filen.
|
||||
|
||||
name_your_server=Gi et navn til din server
|
||||
port_warning=Ikke bytt på den vanlige port verdien vis dette er din første server.
|
||||
server_port=Server port
|
||||
invalid_port=Ugyldig server port
|
||||
ram_warning=RAMMEN er den maksimale beløpet PocketMine-MP vil bruke. A verdien av 128-256 MB er anbefalt
|
||||
server_ram=Server RAMMEN i MB
|
||||
gamemode_info=Velg mellom Kreativ (1) eller Overlevelse (0)
|
||||
default_gamemode=Standard spill modus
|
||||
max_players=Maks online spillere
|
||||
spawn_protection_info=Spawn-beskyttelsen deaktiverer plassering/ødeleggelse av blokker i spawn sonen bortsett fra for Operatører
|
||||
spawn_protection=Aktiver spawn-beskyttelse?
|
||||
name_your_server = Gi et navn til din server
|
||||
port_warning = Ikke bytt på den vanlige port verdien hvis dette er din første server.
|
||||
server_port = Server port
|
||||
invalid_port = Ugyldig server port
|
||||
ram_warning = RAM er den maksimale mengde med minne PocketMine-MP vil bruke. En verdi på 128-256 MB er anbefalt
|
||||
server_ram = Server RAM i MB
|
||||
gamemode_info = Velg mellom Kreativ (1) eller Overlevelse (0)
|
||||
default_gamemode = Standard spillmodus
|
||||
max_players = Maks online spillere
|
||||
spawn_protection_info = Spawn-beskyttelsen deaktiverer plassering/ødelegging av blokker i spawn-sonen foralle som ikke er OP
|
||||
spawn_protection = Aktiver spawn-beskyttelse?
|
||||
|
||||
op_info=En Operatør er en administrator spiller av serveren. Operatører kan bruke mer kommandoer enn vanlige spillere
|
||||
op_who=Operatør spiller navn (eksempel, ditt spill-navn)
|
||||
op_warning=Du vil ha muligheten til å legge til en Operatør bruker senere med /op <spiller>
|
||||
whitelist_info=Hvitelisten tillater bare brukere som er i den å bli med.
|
||||
whitelist_enable=Vil du aktivere hvitelisten?
|
||||
whitelist_warning=Du må legge til spillere til hvitelisten
|
||||
op_info = En Operatør er en administrator spiller av serveren. Operatører kan bruke mer kommandoer enn vanlige spillere
|
||||
op_who = Operatør spiller navn (eksempel, ditt spill-navn)
|
||||
op_warning = Du vil ha muligheten til å legge til en Operatør bruker senere med /op <spiller>
|
||||
whitelist_info = Hvitelisten tillater bare brukere som er i den å bli med.
|
||||
whitelist_enable = Vil du aktivere hvitelisten?
|
||||
whitelist_warning = Du må legge til spillere til hvitelisten
|
||||
|
||||
query_warning1=Query er en protokoll brukt av forskjellige verktøy for å få informasjon fra din server og spillere som er logget inn.
|
||||
query_warning2=Hvis du deaktiverer det, kan du ikke bruke server lister.
|
||||
query_disable=Vil du deaktivere Query?
|
||||
rcon_info=RCON er en protokoll for ekstern kobling til server konsollen med et passord.
|
||||
rcon_enable=Vil du aktivere RCON?
|
||||
rcon_password=RCON passord (du kan endre det senere)
|
||||
usage_info=Den anonyme bruksdata gir oss mulighet til å kalkulere global statistikk for PocketMine-MP og dens utvidelser. Du kan se dette på stats.pocketmine.net
|
||||
usage_disable=Vil du deaktivere den anonyme bruksdata?
|
||||
ip_get=Henter din eksterne IP og interne IP
|
||||
ip_warning=Din eksterne IP er {{EXTERNAL_IP}}. Du må kanskje port forwarde til din interne IP {{INTERNAL_IP}}
|
||||
ip_confirm=Pass på å sjekke det, hvis du må port forwarde og du skipper det, kan ingen eksterne spillere koble til serveren. [Trykk på Enter]
|
||||
query_warning1 = Query er en protokoll brukt av forskjellige verktøy for å få informasjon fra din server og spillere som er logget inn.
|
||||
query_warning2 = Hvis du deaktiverer det, kan du ikke bruke server lister.
|
||||
query_disable = Vil du deaktivere Query?
|
||||
rcon_info = RCON er en protokoll for ekstern kobling til server konsollen med et passord.
|
||||
rcon_enable = Vil du aktivere RCON?
|
||||
rcon_password = RCON passord (du kan endre det senere)
|
||||
usage_info = Den anonyme bruksdata gir oss mulighet til å kalkulere global statistikk for PocketMine-MP og dens utvidelser. Du kan se dette på stats.pocketmine.net
|
||||
usage_disable = Vil du deaktivere den anonyme bruksdata?
|
||||
ip_get = Henter din eksterne IP og interne IP
|
||||
ip_warning = Din eksterne IP er {{EXTERNAL_IP}}. Du må kanskje port forwarde til din interne IP {{INTERNAL_IP}}
|
||||
ip_confirm = Pass på å sjekke det, hvis du må port forwarde og du skipper det, kan ingen eksterne spillere koble til serveren. [Trykk på Enter]
|
||||
|
||||
you_have_finished=Du er nå klar. Alt har blitt gjort korrekt
|
||||
pocketmine_will_start=PocketMine-MP vil nå starte. Skriv /help for å se en liste av alle tilgjengelige kommandoer.
|
||||
pocketmine_plugins=Sjekk utvidelse depotet for å legge til nye funksjoner, minispill, eller avansert beskyttelse for din server
|
||||
you_have_finished = Du har nå fullført opsettingsveiledningen
|
||||
pocketmine_will_start = PocketMine-MP vil nå starte. Skriv /help for å se en liste av alle tilgjengelige kommandoer.
|
||||
pocketmine_plugins = Sjekk utvidelse depotet for å legge til nye funksjoner, minispill, eller avansert beskyttelse for din server
|
||||
|
@ -1,6 +1,23 @@
|
||||
language_has_been_selected = Język angielski jest aktualnie wybrany.
|
||||
skip_installer = Chcesz pominąć proces konfiguracji?
|
||||
|
||||
accept_license = Akceptujesz Licencję?
|
||||
|
||||
|
||||
name_your_server = Wpisz nazwę swojego serwera
|
||||
server_port = Serwer port
|
||||
invalid_port = Nieprawidłowy server port
|
||||
server_ram = Server RAM w MB
|
||||
default_gamemode = Domyślny Game mode
|
||||
max_players = Maksymalna ilość graczy
|
||||
spawn_protection = Aktywować ochronę spawnu?
|
||||
|
||||
whitelist_enable = Chcesz aktywować white-list?
|
||||
|
||||
query_disable = Chcesz dezaktywować Query?
|
||||
rcon_info = RCON jest protokołem do zdalnego połączenia z konsolą serwera przy użyciu hasła.
|
||||
rcon_enable = Chcesz aktywować RCON?
|
||||
rcon_password = RCON hasło (możesz zmienić je póżniej)
|
||||
|
||||
|
||||
you_have_finished = Właśnie zakończyłeś proces konfiguracji
|
||||
pocketmine_will_start = PocketMine-MP jest włączony. Wpisz /help aby zobaczyć wszystkie dostępne komendy.
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=Был выбран русский язык.
|
||||
skip_installer=Вы хотите пропустить мастер настройки?
|
||||
language_has_been_selected = Был выбран русский язык.
|
||||
skip_installer = Вы хотите пропустить мастер настройки?
|
||||
|
||||
welcome_to_pocketmine=Добро пожаловать в PocketMine-MP!\nПеред началом установки нового сервера, вы должны согласиться с лицензией. \nPocketMine-MP лицензировано на условиях LGPL лицензии, \nс которой вы можете ознакомиться, открыв файл LICENSE в этой папке.
|
||||
accept_license=Принимаете ли вы лицензию?
|
||||
you_have_to_accept_the_license=Вы должны принять LGPL лицензию, чтобы продолжить использование PocketMine-MP
|
||||
welcome_to_pocketmine = Добро пожаловать в PocketMine-MP!\nПеред началом установки нового сервера, вы должны согласиться с лицензией. \nPocketMine-MP лицензировано на условиях LGPL лицензии, \nс которой вы можете ознакомиться, открыв файл LICENSE в этой папке.
|
||||
accept_license = Принимаете ли вы лицензию?
|
||||
you_have_to_accept_the_license = Вы должны принять LGPL лицензию, чтобы продолжить использование PocketMine-MP
|
||||
|
||||
setting_up_server_now=Теперь вы можете настроить сервер.
|
||||
default_values_info=Если вы не хотите изменять стандартное значение, просто нажмите Enter.
|
||||
server_properties=Вы можете редактировать их позже в файле server.properties.
|
||||
setting_up_server_now = Теперь вы можете настроить сервер.
|
||||
default_values_info = Если вы не хотите изменять стандартное значение, просто нажмите Enter.
|
||||
server_properties = Вы можете редактировать их позже в файле server.properties.
|
||||
|
||||
name_your_server=Дайте имя вашему серверу
|
||||
port_warning=Не изменяйте значение порта по умолчанию, если это ваш первый сервер.
|
||||
server_port=Порт сервера
|
||||
invalid_port=Неверный порт сервера
|
||||
ram_warning=RAM - максимальный объем памяти, котооый будет использовать PocketMine-MP, рекомендуемое значение 128-256 МБ
|
||||
server_ram=Оперативная память сервера в МБ
|
||||
gamemode_info=Выберите между Креативом-(1), или Выживанием (0)
|
||||
default_gamemode=Режим игры по умолчанию
|
||||
max_players=Максимум онлайн игроков
|
||||
spawn_protection_info=Защита спавна запрещает размещение/разрушение блоков на спавне, за исключением операторов
|
||||
spawn_protection=Включить защиту спавна?
|
||||
name_your_server = Дайте имя вашему серверу
|
||||
port_warning = Не изменяйте значение порта по умолчанию, если это ваш первый сервер.
|
||||
server_port = Порт сервера
|
||||
invalid_port = Неверный порт сервера
|
||||
ram_warning = RAM - максимальный объем памяти, котооый будет использовать PocketMine-MP, рекомендуемое значение 128-256 МБ
|
||||
server_ram = Оперативная память сервера в МБ
|
||||
gamemode_info = Выберите между Креативом-(1), или Выживанием (0)
|
||||
default_gamemode = Режим игры по умолчанию
|
||||
max_players = Максимум онлайн игроков
|
||||
spawn_protection_info = Защита спавна запрещает размещение/разрушение блоков на спавне, за исключением операторов
|
||||
spawn_protection = Включить защиту спавна?
|
||||
|
||||
op_info=Оператор - Администратор сервера, который может использовать больше команд, чем обычный игрок
|
||||
op_who=Имя оператора (К примеру ваш ник в игре)
|
||||
op_warning=Вы можете добавить оператора позже используя команду /op <player>
|
||||
whitelist_info=White-list позволяет присоединиться только игрокам в этом списке.
|
||||
whitelist_enable=Вы хотите включить white-list?
|
||||
whitelist_warning=Вам придётся добавить игроков в white-list
|
||||
op_info = Оператор - Администратор сервера, который может использовать больше команд, чем обычный игрок
|
||||
op_who = Имя оператора (К примеру ваш ник в игре)
|
||||
op_warning = Вы можете добавить оператора позже используя команду /op <player>
|
||||
whitelist_info = White-list позволяет присоединиться только игрокам в этом списке.
|
||||
whitelist_enable = Вы хотите включить white-list?
|
||||
whitelist_warning = Вам придётся добавить игроков в white-list
|
||||
|
||||
query_warning1=Query это протокол, используемый разными инструментами, чтобы получить информацию о вашем сервере и о зашедших игроках.
|
||||
query_warning2=Если вы отключите его, вы не сможете использовать списки серверов.
|
||||
query_disable=Вы хотите отключить Query?
|
||||
rcon_info=RCON - это протокол для удаленного управления сервером через консоль, с использованием пароля.
|
||||
rcon_enable=Вы хотите включить RCON?
|
||||
rcon_password=RCON пароль (вы сможете изменить его позже)
|
||||
usage_info=Сбор анонимных данных о использовании поможет нам проанализировать глобальную статистику для PocketMine-MP и плагинов. Статистика доступна по адресу stats.pocketmine.net
|
||||
usage_disable=Вы хотите отключить сбор анонимных данных о использовании?
|
||||
ip_get=Получение вашего внешнего и внутреннего IP адреса
|
||||
ip_warning=Ваш внешний IP адрес: {{EXTERNAL_IP}}. Возможно вам необходимо открыть порты к вашему внутреннему IP адресу: {{INTERNAL_IP}}
|
||||
ip_confirm=Убедитесь в том, что вы открыли порты, в противном случае игроки вне вашей локальной сети не смогут подключится. [Нажмите Enter]
|
||||
query_warning1 = Query это протокол, используемый разными инструментами, чтобы получить информацию о вашем сервере и о зашедших игроках.
|
||||
query_warning2 = Если вы отключите его, вы не сможете использовать списки серверов.
|
||||
query_disable = Вы хотите отключить Query?
|
||||
rcon_info = RCON - это протокол для удаленного управления сервером через консоль, с использованием пароля.
|
||||
rcon_enable = Вы хотите включить RCON?
|
||||
rcon_password = RCON пароль (вы сможете изменить его позже)
|
||||
usage_info = Сбор анонимных данных о использовании поможет нам проанализировать глобальную статистику для PocketMine-MP и плагинов. Статистика доступна по адресу stats.pocketmine.net
|
||||
usage_disable = Вы хотите отключить сбор анонимных данных о использовании?
|
||||
ip_get = Получение вашего внешнего и внутреннего IP адреса
|
||||
ip_warning = Ваш внешний IP адрес: {{EXTERNAL_IP}}. Возможно вам необходимо открыть порты к вашему внутреннему IP адресу: {{INTERNAL_IP}}
|
||||
ip_confirm = Убедитесь в том, что вы открыли порты, в противном случае игроки вне вашей локальной сети не смогут подключится. [Нажмите Enter]
|
||||
|
||||
you_have_finished=Вы закончили работу с мастером установки
|
||||
pocketmine_will_start=PocketMine-MP сейчас запустится. Введите /help для просмотра доступных вам команд.
|
||||
pocketmine_plugins=Посетите репозиторий плагинов для получения новых функций, мини-игр, или повышения защиты вашего сервера
|
||||
you_have_finished = Вы закончили работу с мастером установки
|
||||
pocketmine_will_start = PocketMine-MP сейчас запустится. Введите /help для просмотра доступных вам команд.
|
||||
pocketmine_plugins = Посетите репозиторий плагинов для получения новых функций, мини-игр, или повышения защиты вашего сервера
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=Svenska har bilvit valt.
|
||||
skip_installer=Vill du hoppa över Installations programmet?
|
||||
language_has_been_selected = Svenska har bilvit valt.
|
||||
skip_installer = Vill du hoppa över Installations programmet?
|
||||
|
||||
welcome_to_pocketmine=Välkommen till PocketMine-MP! Före du börja ställa in din server måste du godkänna licensen. PocketMIne-MP är licenserat under LGPL Licensen som du kan läsa genom att öppna LICENSE filen i den här mappen.
|
||||
accept_license=Accepterar du Licensen?
|
||||
you_have_to_accept_the_license=Du måste godkänna LGPL licensen för att fortsätta använda PocketMine-MP
|
||||
welcome_to_pocketmine = Välkommen till PocketMine-MP! Före du börja ställa in din server måste du godkänna licensen. PocketMIne-MP är licenserat under LGPL Licensen som du kan läsa genom att öppna LICENSE filen i den här mappen.
|
||||
accept_license = Accepterar du Licensen?
|
||||
you_have_to_accept_the_license = Du måste godkänna LGPL licensen för att fortsätta använda PocketMine-MP
|
||||
|
||||
setting_up_server_now=Du håller på att börja ställa in din server nu.
|
||||
default_values_info=Om du inte vill ändra standard värdet, tryck bara ENTER.
|
||||
server_properties=Du kan redigera dem senare i server.properies filen.
|
||||
setting_up_server_now = Du håller på att börja ställa in din server nu.
|
||||
default_values_info = Om du inte vill ändra standard värdet, tryck bara ENTER.
|
||||
server_properties = Du kan redigera dem senare i server.properies filen.
|
||||
|
||||
name_your_server=Ge ett namn till din server
|
||||
port_warning=ändra INTE standard porten om detta är din första server.
|
||||
server_port=Server port
|
||||
invalid_port=Ogiltig Server port
|
||||
ram_warning=RAM är max mängden minne PocketMine-MP kommer använda. Ett väre av 128-256 MB är rekommenderat
|
||||
server_ram=Server RAM i MB
|
||||
gamemode_info=Välj mellan Kreativt läge (1) eller Överlevnad (0)
|
||||
default_gamemode=Standard spelläge
|
||||
max_players=Max spelare online
|
||||
spawn_protection_info=Spawn skydd stoppar spelare från att bygga / krossa block i Spawn-zonen förutom för OPs
|
||||
spawn_protection=Aktivera Spawn-skydd?
|
||||
name_your_server = Ge ett namn till din server
|
||||
port_warning = ändra INTE standard porten om detta är din första server.
|
||||
server_port = Server port
|
||||
invalid_port = Ogiltig Server port
|
||||
ram_warning = RAM är max mängden minne PocketMine-MP kommer använda. Ett väre av 128-256 MB är rekommenderat
|
||||
server_ram = Server RAM i MB
|
||||
gamemode_info = Välj mellan Kreativt läge (1) eller Överlevnad (0)
|
||||
default_gamemode = Standard spelläge
|
||||
max_players = Max spelare online
|
||||
spawn_protection_info = Spawn skydd stoppar spelare från att bygga / krossa block i Spawn-zonen förutom för OPs
|
||||
spawn_protection = Aktivera Spawn-skydd?
|
||||
|
||||
op_info=En OP är en spelar Administratör på servern. OPs kan köra fler kommandon än vanliga spelare
|
||||
op_who=OP spelar namn (Ditt IGN här)
|
||||
op_warning=Du kommer kunna lägga till fler OPs senare me /op <spelare>
|
||||
whitelist_info=whitelisten är en lista på spelare som får komma in på servern.
|
||||
whitelist_enable=Vill du aktivera whitelisten?
|
||||
whitelist_warning=Du måste i så fall lägga till spelare på whitelisten
|
||||
op_info = En OP är en spelar Administratör på servern. OPs kan köra fler kommandon än vanliga spelare
|
||||
op_who = OP spelar namn (Ditt IGN här)
|
||||
op_warning = Du kommer kunna lägga till fler OPs senare me /op <spelare>
|
||||
whitelist_info = whitelisten är en lista på spelare som får komma in på servern.
|
||||
whitelist_enable = Vill du aktivera whitelisten?
|
||||
whitelist_warning = Du måste i så fall lägga till spelare på whitelisten
|
||||
|
||||
query_warning1=Query är ett protokoll som används av olika verktyg för att samla in information om din server och spelare loggade in.
|
||||
query_warning2=Om du stänger av den så kommer du inte kunna använda serverlistor.
|
||||
query_disable=Vill du stänga av Query?
|
||||
rcon_info=RCON är ett protocol för att trådlöst ansluta till server konsolen med ett lösenord.
|
||||
rcon_enable=Vill du aktivera RCON?
|
||||
rcon_password=RCON lösenord (kan bytas senare)
|
||||
usage_info=Anonym data användning tillåter oss att räkna ut global statistik för PocketMine-MP och dess plugin. Du kan se dessa på stats.pocketmine.net
|
||||
usage_disable=Vill du stänga av anonym data använding?
|
||||
ip_get=Hämtar din externa IP och interna IP
|
||||
ip_warning=Din externa Ip är {{EXTERNAL_IP}}} Du kan behöva göra en "port-foward" till din Interna IP {{INTERNAL_IP}}
|
||||
ip_confirm=Var säker på att du kollar den. Om du måste göra en "port-foward" men skippar det så kommer inga externa spelare att kunna logga in på din server. [Tryck på ENTER]
|
||||
query_warning1 = Query är ett protokoll som används av olika verktyg för att samla in information om din server och spelare loggade in.
|
||||
query_warning2 = Om du stänger av den så kommer du inte kunna använda serverlistor.
|
||||
query_disable = Vill du stänga av Query?
|
||||
rcon_info = RCON är ett protocol för att trådlöst ansluta till server konsolen med ett lösenord.
|
||||
rcon_enable = Vill du aktivera RCON?
|
||||
rcon_password = RCON lösenord (kan bytas senare)
|
||||
usage_info = Anonym data användning tillåter oss att räkna ut global statistik för PocketMine-MP och dess plugin. Du kan se dessa på stats.pocketmine.net
|
||||
usage_disable = Vill du stänga av anonym data använding?
|
||||
ip_get = Hämtar din externa IP och interna IP
|
||||
ip_warning = Din externa Ip är {{EXTERNAL_IP}}} Du kan behöva göra en "port-foward" till din Interna IP {{INTERNAL_IP}}
|
||||
ip_confirm = Var säker på att du kollar den. Om du måste göra en "port-foward" men skippar det så kommer inga externa spelare att kunna logga in på din server. [Tryck på ENTER]
|
||||
|
||||
you_have_finished=Du är nu klar. Allt har genomförts korrekt
|
||||
pocketmine_will_start=Din Server kommer nu att starta. skriv /help eller /? för en list på tillgängliga kommandon.
|
||||
pocketmine_plugins=Kolla in Plugin Hemsidan för att lägga till nya saker till din server, minispel, eller avancerat skydd
|
||||
you_have_finished = Du är nu klar. Allt har genomförts korrekt
|
||||
pocketmine_will_start = Din Server kommer nu att starta. skriv /help eller /? för en list på tillgängliga kommandon.
|
||||
pocketmine_plugins = Kolla in Plugin Hemsidan för att lägga till nya saker till din server, minispel, eller avancerat skydd
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected=İngilizce başarıyla seçildi.
|
||||
skip_installer=Kurulum yazılımını atlamak istiyormusunuz?
|
||||
language_has_been_selected = İngilizce başarıyla seçildi.
|
||||
skip_installer = Kurulum yazılımını atlamak istiyormusunuz?
|
||||
|
||||
welcome_to_pocketmine=PocketMine-MP dünyasına hoşgeldin.\nYeni sunucunu ayarlamaya başlamadan önce lisans sözleşmesini kabul etmelisin.\nPocketMine-MP LGPL Linsansı altında lisanslıdır,\nBu klasörden LİSANS dosyasını açıp okuyabilirsin.
|
||||
accept_license=Lisans sözleşmesini kabul ediyor musunuz?
|
||||
you_have_to_accept_the_license=PocketMine-MP'yi kullanabilmeniz için LGPL lisansını kabul etmeniz gereklidir
|
||||
welcome_to_pocketmine = PocketMine-MP dünyasına hoşgeldin.\nYeni sunucunu ayarlamaya başlamadan önce lisans sözleşmesini kabul etmelisin.\nPocketMine-MP LGPL Linsansı altında lisanslıdır,\nBu klasörden LİSANS dosyasını açıp okuyabilirsin.
|
||||
accept_license = Lisans sözleşmesini kabul ediyor musunuz?
|
||||
you_have_to_accept_the_license = PocketMine-MP'yi kullanabilmeniz için LGPL lisansını kabul etmeniz gereklidir
|
||||
|
||||
setting_up_server_now=Sunucunuz şimdi kurulacak, Devam edilsin mi?
|
||||
default_values_info=Varsayılan değeri değiştirmek istemiyorsan Enter'a bas.
|
||||
server_properties=Bunları daha sonra server.properties dosyasından düzenleyebilirsin.
|
||||
setting_up_server_now = Sunucunuz şimdi kurulacak, Devam edilsin mi?
|
||||
default_values_info = Varsayılan değeri değiştirmek istemiyorsan Enter'a bas.
|
||||
server_properties = Bunları daha sonra server.properties dosyasından düzenleyebilirsin.
|
||||
|
||||
name_your_server=Sunucuna bir isim ver
|
||||
port_warning=Eğer bu senin ilk sunucun ise varsayılan port değerini değiştirme.
|
||||
server_port=Sunucu portu
|
||||
invalid_port=Hatalı sunucu portu
|
||||
ram_warning=PocketMine-MP için ayrılan maksimum RAM değeri. 128-256 MB yapman önerilir
|
||||
server_ram=Kullanılan RAM (MB)
|
||||
gamemode_info=Yaratıcılık (1) ve Hayatta Kalma (0) arasından seçim yap
|
||||
default_gamemode=Varsayılan oyun modu
|
||||
max_players=Max. online oyuncu
|
||||
spawn_protection_info=Spawn koruması, OP olmayan oyuncuların spawn bölgesinde blok kırmasını/koymasını engeller
|
||||
spawn_protection=Spawn korumasını aktif et?
|
||||
name_your_server = Sunucuna bir isim ver
|
||||
port_warning = Eğer bu senin ilk sunucun ise varsayılan port değerini değiştirme.
|
||||
server_port = Sunucu portu
|
||||
invalid_port = Hatalı sunucu portu
|
||||
ram_warning = PocketMine-MP için ayrılan maksimum RAM değeri. 128-256 MB yapman önerilir
|
||||
server_ram = Kullanılan RAM (MB)
|
||||
gamemode_info = Yaratıcılık (1) ve Hayatta Kalma (0) arasından seçim yap
|
||||
default_gamemode = Varsayılan oyun modu
|
||||
max_players = Max. online oyuncu
|
||||
spawn_protection_info = Spawn koruması, OP olmayan oyuncuların spawn bölgesinde blok kırmasını/koymasını engeller
|
||||
spawn_protection = Spawn korumasını aktif et?
|
||||
|
||||
op_info=Bir OP sunucunun admin oyuncusudur. OPlar normal oyunculardan daha fazla komut kullanabilir
|
||||
op_who=OP oyuncu adı (örnek, senin oyun adın)
|
||||
op_warning=Daha sonra /op <player> yazarak oyuncuları OP yapabilirsin
|
||||
whitelist_info=White-list yalnızca izin verilen oyuncuların giriş yapmasını sağlar.
|
||||
whitelist_enable=White-list özelliğini aktif etmek ister misin?
|
||||
whitelist_warning=White-list'e oyuncu eklemelisin
|
||||
op_info = Bir OP sunucunun admin oyuncusudur. OPlar normal oyunculardan daha fazla komut kullanabilir
|
||||
op_who = OP oyuncu adı (örnek, senin oyun adın)
|
||||
op_warning = Daha sonra /op <player> yazarak oyuncuları OP yapabilirsin
|
||||
whitelist_info = White-list yalnızca izin verilen oyuncuların giriş yapmasını sağlar.
|
||||
whitelist_enable = White-list özelliğini aktif etmek ister misin?
|
||||
whitelist_warning = White-list'e oyuncu eklemelisin
|
||||
|
||||
query_warning1=Query, farklı araçların sunucu ve bağlı oyuncu bilgilerini çekebilmesi için var olan bir protokoldür.
|
||||
query_warning2=Eğer devre dışı bırakırsan, sunucu listelerini kullanamayacaksın.
|
||||
query_disable=Query'i devre dışı bırakmak ister misin?
|
||||
rcon_info=RCON, sunucu konsoluna şifre ile bağlanmak için kullanılan bir protokoldür.
|
||||
rcon_enable=RCON'u aktif etmek ister misin?
|
||||
rcon_password=RCON şifresi (daha sonra değiştirebilirsin)
|
||||
usage_info=Anonim kullanım, PocketMine-MP ve eklentileri için global istatistikleri hesaplar. Bu istatistiklere stats.pocketmine.net adresinden bakabilirsin
|
||||
usage_disable=Anonim kullanımı kapatmak ister misin?
|
||||
ip_get=Dış IP adresi ve iç IP adresi tespit ediliyor
|
||||
ip_warning=Dış IP adresin {{EXTERNAL_IP}}. İç IP adresin olan {{INTERNAL_IP}} adresine port yönlendirme yapmalısın
|
||||
ip_confirm=Lütfen bu adımı gözden geçirin. Bu adımı atlarsanız, Lokal olmayan oyuncular sunucuya bağlanamayacak. [Enter'a Bas]
|
||||
query_warning1 = Query, farklı araçların sunucu ve bağlı oyuncu bilgilerini çekebilmesi için var olan bir protokoldür.
|
||||
query_warning2 = Eğer devre dışı bırakırsan, sunucu listelerini kullanamayacaksın.
|
||||
query_disable = Query'i devre dışı bırakmak ister misin?
|
||||
rcon_info = RCON, sunucu konsoluna şifre ile bağlanmak için kullanılan bir protokoldür.
|
||||
rcon_enable = RCON'u aktif etmek ister misin?
|
||||
rcon_password = RCON şifresi (daha sonra değiştirebilirsin)
|
||||
usage_info = Anonim kullanım, PocketMine-MP ve eklentileri için global istatistikleri hesaplar. Bu istatistiklere stats.pocketmine.net adresinden bakabilirsin
|
||||
usage_disable = Anonim kullanımı kapatmak ister misin?
|
||||
ip_get = Dış IP adresi ve iç IP adresi tespit ediliyor
|
||||
ip_warning = Dış IP adresin {{EXTERNAL_IP}}. İç IP adresin olan {{INTERNAL_IP}} adresine port yönlendirme yapmalısın
|
||||
ip_confirm = Lütfen bu adımı gözden geçirin. Bu adımı atlarsanız, Lokal olmayan oyuncular sunucuya bağlanamayacak. [Enter'a Bas]
|
||||
|
||||
you_have_finished=Kurulum başarıyla tamamlandı.
|
||||
pocketmine_will_start=PocketMine-MP şimdi başlayacak. /help yazarak kullanılbilir komutların listesini görebilirsin.
|
||||
pocketmine_plugins=Sunucuna minigames veya gelişmiş korumalar eklemek için eklenti kütüphanesine bak
|
||||
you_have_finished = Kurulum başarıyla tamamlandı.
|
||||
pocketmine_will_start = PocketMine-MP şimdi başlayacak. /help yazarak kullanılbilir komutların listesini görebilirsin.
|
||||
pocketmine_plugins = Sunucuna minigames veya gelişmiş korumalar eklemek için eklenti kütüphanesine bak
|
||||
|
@ -1,7 +1,7 @@
|
||||
language_has_been_selected=Английский был правильно выбран.
|
||||
skip_installer=Вы хотите пропустить мастер настройки?
|
||||
language_has_been_selected = Українська була вибрана правильно.
|
||||
skip_installer = Ви хочете пропустити майстер настройки?
|
||||
|
||||
welcome_to_pocketmine=Добро пожаловать в PocketMine-MP!\nПеред началом установки нового сервера, вы должны согласиться с лицензией.\nPocketMine-MP лицензирована под LGPL лицензии, \nчто вы можете прочитать, открыв файл лицензии на эту папку.
|
||||
welcome_to_pocketmine = Ласкаво просимо до PocketMine-MP!\nПеред початком встановлення нового сервера, ви повинні погодитись з ліцензією.\nPocketMine-MP ліцензована по LGPL ліцензії, \nяку ви можете прочитати, відкривши файл ліцензії в цій папці.
|
||||
|
||||
|
||||
|
||||
|
@ -1,31 +1,31 @@
|
||||
language_has_been_selected=Tiếng Anh đã được chọn.
|
||||
skip_installer=Bạn có muốn bỏ qua hướng dẫn set-up?
|
||||
language_has_been_selected = Tiếng Anh đã được chọn.
|
||||
skip_installer = Bạn có muốn bỏ qua hướng dẫn set-up?
|
||||
|
||||
welcome_to_pocketmine=Chào mừng tới PocketMine-MP!\nTrước khi bắt đầu, bạn phải chấp nhận hợp đồng. \nPocketMine-MP được hợp đồng bởi LGPL License,\nbạn có thể đọc file LICENSE trong thư mục này.
|
||||
accept_license=Bạn có chấp nhận hợp đồng ?
|
||||
you_have_to_accept_the_license=Bạn phải chấp nhận LGPL license để sử dụng PocketMine-MP
|
||||
welcome_to_pocketmine = Chào mừng tới PocketMine-MP!\nTrước khi bắt đầu, bạn phải chấp nhận hợp đồng. \nPocketMine-MP được hợp đồng bởi LGPL License,\nbạn có thể đọc file LICENSE trong thư mục này.
|
||||
accept_license = Bạn có chấp nhận hợp đồng ?
|
||||
you_have_to_accept_the_license = Bạn phải chấp nhận LGPL license để sử dụng PocketMine-MP
|
||||
|
||||
setting_up_server_now=Bạn sẽ bắt đầu set up server của bạn ngay.
|
||||
default_values_info=Nếu bạn không muốn đổi giá trị mặc định, nhấn Enter.
|
||||
server_properties=Bạn có thể chỉnh sửa lại vào file server.properties .
|
||||
setting_up_server_now = Bạn sẽ bắt đầu set up server của bạn ngay.
|
||||
default_values_info = Nếu bạn không muốn đổi giá trị mặc định, nhấn Enter.
|
||||
server_properties = Bạn có thể chỉnh sửa lại vào file server.properties .
|
||||
|
||||
name_your_server=Đặt tên server
|
||||
port_warning=Không được đổi giá trị port mặc định nếu đây là server đầu tiên của bạn.
|
||||
server_port=Server port
|
||||
invalid_port=Server port không đúng
|
||||
ram_warning=RAM là tất cả bộ nhớ mà PocketMine-MP sẽ sử dụng. 128/256 MB là cần thiết
|
||||
server_ram=Server RAM theo MB
|
||||
gamemode_info=Chọn Creative (1) hoặc Survival (0)
|
||||
default_gamemode=Chế độ mặc định
|
||||
max_players=Giới hạn lượng người chơi
|
||||
spawn_protection_info=Spawn protection không cho phép đặt/đập trong khu vực hồi sinh trừ OPs
|
||||
spawn_protection=Mở Spawn protection?
|
||||
name_your_server = Đặt tên server
|
||||
port_warning = Không được đổi giá trị port mặc định nếu đây là server đầu tiên của bạn.
|
||||
server_port = Server port
|
||||
invalid_port = Server port không đúng
|
||||
ram_warning = RAM là tất cả bộ nhớ mà PocketMine-MP sẽ sử dụng. 128/256 MB là cần thiết
|
||||
server_ram = Server RAM theo MB
|
||||
gamemode_info = Chọn Creative (1) hoặc Survival (0)
|
||||
default_gamemode = Chế độ mặc định
|
||||
max_players = Giới hạn lượng người chơi
|
||||
spawn_protection_info = Spawn protection không cho phép đặt/đập trong khu vực hồi sinh trừ OPs
|
||||
spawn_protection = Mở Spawn protection?
|
||||
|
||||
op_info=OP là chủ/quản lí server. OPs có nhiều quyền hạn hơn người thường
|
||||
op_who=Tên OP (ví dụ, tên bạn)
|
||||
op_warning=Bạn có thể thêm OP bằng lệnh /op <player>
|
||||
whitelist_info=White-list chỉ cho người có phép của quản lí tham gia.
|
||||
whitelist_enable=Bạn có muốn bật white-list?
|
||||
whitelist_warning=Bạn sẽ phải thêm người chơi vào white-list
|
||||
op_info = OP là chủ/quản lí server. OPs có nhiều quyền hạn hơn người thường
|
||||
op_who = Tên OP (ví dụ, tên bạn)
|
||||
op_warning = Bạn có thể thêm OP bằng lệnh /op <player>
|
||||
whitelist_info = White-list chỉ cho người có phép của quản lí tham gia.
|
||||
whitelist_enable = Bạn có muốn bật white-list?
|
||||
whitelist_warning = Bạn sẽ phải thêm người chơi vào white-list
|
||||
|
||||
|
||||
|
@ -1,46 +1,46 @@
|
||||
language_has_been_selected=您现在选择了简体中文.
|
||||
skip_installer=您想跳过安装向导吗?
|
||||
language_has_been_selected = 您现在选择了简体中文.
|
||||
skip_installer = 您想跳过安装向导吗?
|
||||
|
||||
welcome_to_pocketmine=欢迎来到PocketMine-MP!\n在开始使用您的新服务器之前,您需要接受以下协议\nPocketMine-MP使用了LGPL协议,\n你可以在这个文件夹中找到LICENCE文件。
|
||||
accept_license=您接受协议内容吗?
|
||||
you_have_to_accept_the_license=您要接受LGPL协议才可继续使用PocketMine-MP
|
||||
welcome_to_pocketmine = 欢迎来到PocketMine-MP!\n在开始使用您的新服务器之前,您需要接受以下协议\nPocketMine-MP使用了LGPL协议,\n你可以在这个文件夹中找到LICENCE文件。
|
||||
accept_license = 您接受协议内容吗?
|
||||
you_have_to_accept_the_license = 您要接受LGPL协议才可继续使用PocketMine-MP
|
||||
|
||||
setting_up_server_now=你现在要开始设置您的服务器了。
|
||||
default_values_info=如果您希望留住默认设置,请直接按下回车键。
|
||||
server_properties=您以后可以在server.properties中修改设置.
|
||||
setting_up_server_now = 你现在要开始设置您的服务器了。
|
||||
default_values_info = 如果您希望留住默认设置,请直接按下回车键。
|
||||
server_properties = 您以后可以在server.properties中修改设置.
|
||||
|
||||
name_your_server=命名您的服务器:
|
||||
port_warning=如果这是您第一次设置服务器,尽量不要改变端口。
|
||||
server_port=服务器端口:
|
||||
invalid_port=服务器端口不正确。
|
||||
ram_warning=RAM是PocketMine-MP可用的最大内存. 推荐范围: 128-256 MB
|
||||
server_ram=分配给服务器的内存(RAM)(MB):
|
||||
gamemode_info=选择模式: (1)生存模式 或 (2)创造模式
|
||||
default_gamemode=默认游戏模式
|
||||
max_players=最多在线人数
|
||||
spawn_protection_info=出生点保护可以在出生点范围内保护所有方块不被改變。
|
||||
spawn_protection=启用出生点保护?
|
||||
name_your_server = 命名您的服务器:
|
||||
port_warning = 如果这是您第一次设置服务器,尽量不要改变端口。
|
||||
server_port = 服务器端口:
|
||||
invalid_port = 服务器端口不正确。
|
||||
ram_warning = RAM是PocketMine-MP可用的最大内存. 推荐范围: 128-256 MB
|
||||
server_ram = 分配给服务器的内存(RAM)(MB):
|
||||
gamemode_info = 选择模式: (1)生存模式 或 (2)创造模式
|
||||
default_gamemode = 默认游戏模式
|
||||
max_players = 最多在线人数
|
||||
spawn_protection_info = 出生点保护可以在出生点范围内保护所有方块不被改變。
|
||||
spawn_protection = 启用出生点保护?
|
||||
|
||||
op_info=OP是一个服务器的管理员, 可以执行比普通玩家更多的命令.
|
||||
op_who=OP的用户名是什么?
|
||||
op_warning=你可以执行\"/op <用户名>\"来添加OP.
|
||||
whitelist_info=白名单可以只允许在其列表内的玩家加入.
|
||||
whitelist_enable=您想启用白名单吗?
|
||||
whitelist_warning=你可以用"/whitelist add <用户名>"把别人加入白名单.
|
||||
op_info = OP是一个服务器的管理员, 可以执行比普通玩家更多的命令.
|
||||
op_who = OP的用户名是什么?
|
||||
op_warning = 你可以执行\"/op <用户名>\"来添加OP.
|
||||
whitelist_info = 白名单可以只允许在其列表内的玩家加入.
|
||||
whitelist_enable = 您想启用白名单吗?
|
||||
whitelist_warning = 你可以用"/whitelist add <用户名>"把别人加入白名单.
|
||||
|
||||
query_warning1=请求是一个用于不同的程序的协议用来获取您服务器数据和登录的玩家.
|
||||
query_warning2=如果您禁止了它, 您将不能使用服务器列表.
|
||||
query_disable=您希望禁用Query请求吗?
|
||||
rcon_info=RCON是一个用来远程连接到服务器控制台的协议(需要密码).
|
||||
rcon_enable=您希望启用RCON吗?
|
||||
rcon_password=RCON密码 (您也以后更改它) :
|
||||
usage_info=匿名数据让我们可以获得全球的PocketMine-MP和它的插件的统计信息. 您可以在 stats.pocketmine.net 查看统计信息.
|
||||
query_warning1 = 请求是一个用于不同的程序的协议用来获取您服务器数据和登录的玩家.
|
||||
query_warning2 = 如果您禁止了它, 您将不能使用服务器列表.
|
||||
query_disable = 您希望禁用Query请求吗?
|
||||
rcon_info = RCON是一个用来远程连接到服务器控制台的协议(需要密码).
|
||||
rcon_enable = 您希望启用RCON吗?
|
||||
rcon_password = RCON密码 (您也以后更改它) :
|
||||
usage_info = 匿名数据让我们可以获得全球的PocketMine-MP和它的插件的统计信息. 您可以在 stats.pocketmine.net 查看统计信息.
|
||||
|
||||
usage_disable=您希望禁用匿名数据吗?
|
||||
ip_get=获得你的外部IP和内部IP
|
||||
ip_warning=您的外部IP是 {{EXTERNAL_IP}} . 您可能需要端口转发到您的内网IP {{INTERNAL_IP}} .
|
||||
ip_confirm=请确认您检查了它, 如果您直接进入下一步并跳过这一步, 没有外部的玩家可以加入. [按\"回车\"键]
|
||||
usage_disable = 您希望禁用匿名数据吗?
|
||||
ip_get = 获得你的外部IP和内部IP
|
||||
ip_warning = 您的外部IP是 {{EXTERNAL_IP}} . 您可能需要端口转发到您的内网IP {{INTERNAL_IP}} .
|
||||
ip_confirm = 请确认您检查了它, 如果您直接进入下一步并跳过这一步, 没有外部的玩家可以加入. [按\"回车\"键]
|
||||
|
||||
you_have_finished=您已经成功完成了服务器设置向导.
|
||||
pocketmine_will_start=PocketMine-MP现在开始运行. 输入 \"/help\" 来看所有可用的命令.
|
||||
pocketmine_plugins=请查看插件源来添加新的功能, 迷你游戏或者对服务器的高级保护.
|
||||
you_have_finished = 您已经成功完成了服务器设置向导.
|
||||
pocketmine_will_start = PocketMine-MP现在开始运行. 输入 \"/help\" 来看所有可用的命令.
|
||||
pocketmine_plugins = 请查看插件源来添加新的功能, 迷你游戏或者对服务器的高级保护.
|
||||
|
@ -1,45 +1,45 @@
|
||||
language_has_been_selected={crwdns106:0}{crwdne106:0}
|
||||
skip_installer={crwdns107:0}{crwdne107:0}
|
||||
language_has_been_selected = crwdns106:0crwdne106:0
|
||||
skip_installer = crwdns107:0crwdne107:0
|
||||
|
||||
welcome_to_pocketmine={crwdns108:0}{crwdne108:0}
|
||||
accept_license={crwdns109:0}{crwdne109:0}
|
||||
you_have_to_accept_the_license={crwdns110:0}{crwdne110:0}
|
||||
welcome_to_pocketmine = crwdns108:0crwdne108:0
|
||||
accept_license = crwdns109:0crwdne109:0
|
||||
you_have_to_accept_the_license = crwdns110:0crwdne110:0
|
||||
|
||||
setting_up_server_now={crwdns111:0}{crwdne111:0}
|
||||
default_values_info={crwdns112:0}{crwdne112:0}
|
||||
server_properties={crwdns113:0}{crwdne113:0}
|
||||
setting_up_server_now = crwdns111:0crwdne111:0
|
||||
default_values_info = crwdns112:0crwdne112:0
|
||||
server_properties = crwdns113:0crwdne113:0
|
||||
|
||||
name_your_server={crwdns114:0}{crwdne114:0}
|
||||
port_warning={crwdns115:0}{crwdne115:0}
|
||||
server_port={crwdns116:0}{crwdne116:0}
|
||||
invalid_port={crwdns117:0}{crwdne117:0}
|
||||
ram_warning={crwdns118:0}{crwdne118:0}
|
||||
server_ram={crwdns119:0}{crwdne119:0}
|
||||
gamemode_info={crwdns120:0}{crwdne120:0}
|
||||
default_gamemode={crwdns121:0}{crwdne121:0}
|
||||
max_players={crwdns122:0}{crwdne122:0}
|
||||
spawn_protection_info={crwdns123:0}{crwdne123:0}
|
||||
spawn_protection={crwdns124:0}{crwdne124:0}
|
||||
name_your_server = crwdns114:0crwdne114:0
|
||||
port_warning = crwdns115:0crwdne115:0
|
||||
server_port = crwdns116:0crwdne116:0
|
||||
invalid_port = crwdns117:0crwdne117:0
|
||||
ram_warning = crwdns118:0crwdne118:0
|
||||
server_ram = crwdns119:0crwdne119:0
|
||||
gamemode_info = crwdns120:0crwdne120:0
|
||||
default_gamemode = crwdns121:0crwdne121:0
|
||||
max_players = crwdns122:0crwdne122:0
|
||||
spawn_protection_info = crwdns123:0crwdne123:0
|
||||
spawn_protection = crwdns124:0crwdne124:0
|
||||
|
||||
op_info={crwdns125:0}{crwdne125:0}
|
||||
op_who={crwdns126:0}{crwdne126:0}
|
||||
op_warning={crwdns127:0}{crwdne127:0}
|
||||
whitelist_info={crwdns128:0}{crwdne128:0}
|
||||
whitelist_enable={crwdns129:0}{crwdne129:0}
|
||||
whitelist_warning={crwdns130:0}{crwdne130:0}
|
||||
op_info = crwdns125:0crwdne125:0
|
||||
op_who = crwdns126:0crwdne126:0
|
||||
op_warning = crwdns127:0crwdne127:0
|
||||
whitelist_info = crwdns128:0crwdne128:0
|
||||
whitelist_enable = crwdns129:0crwdne129:0
|
||||
whitelist_warning = crwdns130:0crwdne130:0
|
||||
|
||||
query_warning1={crwdns131:0}{crwdne131:0}
|
||||
query_warning2={crwdns132:0}{crwdne132:0}
|
||||
query_disable={crwdns133:0}{crwdne133:0}
|
||||
rcon_info={crwdns134:0}{crwdne134:0}
|
||||
rcon_enable={crwdns135:0}{crwdne135:0}
|
||||
rcon_password={crwdns136:0}{crwdne136:0}
|
||||
usage_info={crwdns137:0}{crwdne137:0}
|
||||
usage_disable={crwdns138:0}{crwdne138:0}
|
||||
ip_get={crwdns139:0}{crwdne139:0}
|
||||
ip_warning={crwdns140:0}{{EXTERNAL_IP}}{crwdnd140:0}{{INTERNAL_IP}}{crwdne140:0}
|
||||
ip_confirm={crwdns141:0}{crwdne141:0}
|
||||
query_warning1 = crwdns131:0crwdne131:0
|
||||
query_warning2 = crwdns132:0crwdne132:0
|
||||
query_disable = crwdns133:0crwdne133:0
|
||||
rcon_info = crwdns134:0crwdne134:0
|
||||
rcon_enable = crwdns135:0crwdne135:0
|
||||
rcon_password = crwdns136:0crwdne136:0
|
||||
usage_info = crwdns137:0crwdne137:0
|
||||
usage_disable = crwdns138:0crwdne138:0
|
||||
ip_get = crwdns139:0crwdne139:0
|
||||
ip_warning = crwdns140:0{{EXTERNAL_IP}}crwdnd140:0{{INTERNAL_IP}}crwdne140:0
|
||||
ip_confirm = crwdns141:0crwdne141:0
|
||||
|
||||
you_have_finished={crwdns142:0}{crwdne142:0}
|
||||
pocketmine_will_start={crwdns143:0}{crwdne143:0}
|
||||
pocketmine_plugins={crwdns144:0}{crwdne144:0}
|
||||
you_have_finished = crwdns142:0crwdne142:0
|
||||
pocketmine_will_start = crwdns143:0crwdne143:0
|
||||
pocketmine_plugins = crwdns144:0crwdne144:0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user