Compare commits

..

217 Commits

Author SHA1 Message Date
4858c7d82e Merge pull request #1912 from Intyre/feature/block
EndPortal, EndStone, MonsterSpawner, Mycelium and Podzol blocks added
2014-08-21 19:34:51 +02:00
ecc9e1d223 EndPortal meta and Endstone breaktime 2014-08-21 19:26:41 +02:00
a3cc676ac6 Improved player spawn, closes #1890 2014-08-21 19:18:06 +02:00
db7222976e Code cleanup 2014-08-21 17:26:41 +02:00
e1ef86074e Merge pull request #1937 from Yosshi999/patch
Fixed #1923 sending NULL to Level::getXZ()
2014-08-20 16:03:52 +02:00
9f4582349d Fixed #1923 sending NULL to Level::getXZ() 2014-08-20 22:32:19 +09:00
5dc3fe4fe9 Fix backwards-incompatible change 2014-08-19 16:26:37 +02:00
8446bd2ba5 Added thread stop message 2014-08-19 12:55:21 +02:00
9f34d22013 Detach invalid Workers on shutdown 2014-08-19 12:46:44 +02:00
973d6b5869 Removed 'unhandled data packet' debug message 2014-08-19 12:30:12 +02:00
40d2f8a373 Save level data automatically, closes #1927 2014-08-19 11:54:12 +02:00
b66f49dc5e Fixed infinite recursion when setting a block on an EmptyChunkSection 2014-08-19 11:37:02 +02:00
5c150f696c Fixed task not being freed from player on close 2014-08-19 11:31:23 +02:00
0246648a2c Possible solution for #1703 in-game action lag 2014-08-18 23:25:46 +02:00
532b12c6c0 Mycelium spreads like grass and MonsterSpawner breaktime added 2014-08-18 20:06:18 +02:00
34711dc346 Fixed #1889 Players drop their inventory when they die 2014-08-18 14:49:53 +02:00
3c231118a6 Fixed #1674 Wooden tools only craft with Oak wood 2014-08-18 14:43:08 +02:00
a816234ee8 Merge pull request #1917 from Yosshi999/patch2
creative & survival hotbar bugfix
2014-08-18 14:33:05 +02:00
baa34a7cca creative & survival hotbar bugfix
:P
2014-08-18 21:18:14 +09:00
daf1a8266d Merge pull request #1906 from PocketMine/MoreEvents
Added more events, API 1.3.0
2014-08-18 13:55:35 +02:00
4e6ff81674 Merge branch 'master' of github.com:PocketMine/PocketMine-MP 2014-08-18 13:51:21 +02:00
84a1b319c8 Modified chunk generation garbage collector 2014-08-18 13:49:43 +02:00
16774e66e6 Fixed crashes when default level is not loaded 2014-08-18 13:42:20 +02:00
67b97ade8b Workaround crash when placing paintings 2014-08-18 13:36:59 +02:00
0f04f4bc8a creative & survival hotbar bugfix 2014-08-17 21:55:31 +09:00
4c7b172cbe creative & survival hotbar bugfix
Supports Air
Bug fix
2014-08-17 21:51:32 +09:00
e91781cbf2 EndPortal, EndStone, MonsterSpawner, Mycelium and Podzol blocks added 2014-08-17 02:00:17 +02:00
cf0dc95a76 Merge pull request #1910 from Falkirks/master
Improve behaviour of showPlayer()
2014-08-16 20:26:56 +02:00
9fa7b9b5ea Fixed indent 2014-08-16 11:03:40 -07:00
badbe75d58 Check if player is online before showing 2014-08-16 11:00:57 -07:00
5eee4f9771 Fixed AddEntityPacket, added base Arrow 2014-08-16 16:37:57 +02:00
52d28795fa Added Villager spawn egg 2014-08-16 14:25:58 +02:00
c675605014 Added item activation, zombie spawn egg 2014-08-16 14:01:07 +02:00
758a6af678 Added Chiseled stone brick, red sand, end stone 2014-08-16 13:34:58 +02:00
6f30cd8a22 Removed PHP_VERSION constant on pocketmine namespace 2014-08-16 13:17:05 +02:00
8455e89784 Bump API version to 1.3.0 2014-08-16 13:08:46 +02:00
eee0eb5458 Added RemoteServerCommandEvent 2014-08-16 13:05:20 +02:00
7e4a191593 Added SignChangeEvent 2014-08-16 12:58:16 +02:00
8725ad522f Remove player unset limitations 2014-08-16 12:47:19 +02:00
a610a86579 Fixed #1901, EmptyChunkSection gets replaced by invalid Section 2014-08-16 11:54:08 +02:00
24134a06b8 Alternate chunk generation between multiple levels 2014-08-16 11:49:37 +02:00
de6f5309dc Fixed #1882 Race-condition on multiple world generation, causing lock of the geneartion thread 2014-08-16 11:18:26 +02:00
a2e231101e Added extra information to CONTRIBUTING.md about issue titles 2014-08-16 10:58:41 +02:00
918024e466 Load later plugins with custom loader, fixes API 2014-08-16 00:30:37 +02:00
9e74169d74 Better Anvil chunk loading 2014-08-15 17:04:16 +02:00
ec93ed3e3d Fixed crash on tile unloading 2014-08-15 16:37:39 +02:00
a7b44e3892 Stop submission of plugin syntax error crashes 2014-08-15 16:18:54 +02:00
31b92b392e Throw invalid event exception when a plugin tries to declare an abstract event 2014-08-15 16:15:12 +02:00
2f9494ed52 Fixed crash caused by a race condition on Query 2014-08-15 16:07:04 +02:00
7a5c583407 Throw exception when null chunk is passed to a Tile/Entity 2014-08-15 16:04:48 +02:00
f60e2860e8 Release strong weak references on close, closes #1883 2014-08-15 13:41:13 +02:00
9c95441402 Force despawn of players on quit 2014-08-13 20:43:46 +02:00
1f902d814e Move only own player from eye level 2014-08-13 20:25:43 +02:00
0ab3da88be Send player movements as direct packets 2014-08-13 19:32:25 +02:00
e6edace944 Move players from eye level, not top of head 2014-08-13 19:26:45 +02:00
3ee61d5ebb Improved chunk cache, clean invalid chunks 2014-08-13 19:21:42 +02:00
19d391b9b2 Added Exception handling on level loading 2014-08-13 10:48:53 +02:00
e462a89189 Order chunks to be generated 2014-08-13 09:51:43 +02:00
d616e73242 Fixed chunk sending 2014-08-13 09:41:13 +02:00
5ec6ccefda Merge pull request #1875 from KnownUnown/patch-1
Fixed AddMobPacket's Type - (is now int)
2014-08-12 19:34:42 +02:00
58d7599d6f Fixed AddMobPacket's Type - (is now int)
Thanks @Intyre!
2014-08-12 12:31:07 -05:00
0c5f920dfd Level formats can send chunks without creating an AsyncTask, API 1.2.1 (small fix, no changes) 2014-08-12 17:39:39 +02:00
67f6482c76 Implemented circular chunk sending 2014-08-12 17:30:01 +02:00
7b141b0b73 Remove head offset from client-side MovePlayerPacket 2014-08-12 17:16:31 +02:00
b17ce16262 Fixed RCON usage 2014-08-10 18:35:01 +02:00
fee7f5060b Made AsyncTask::onCompletion() implementation optional 2014-08-10 18:15:06 +02:00
76cd164aa4 Fixed source servers getting invalid AutoUpdater notifications 2014-08-10 13:25:15 +02:00
582f1540a7 Players are now moved using the head, closes #1842 2014-08-10 13:22:12 +02:00
4d7c953572 Possible fix for 'Invalid Chunk given' crash 2014-08-10 13:09:41 +02:00
06c01f14c6 Merge branch 'master' of github.com:PocketMine/PocketMine-MP 2014-08-10 12:28:03 +02:00
c43431c921 Fixed #1826 Block damage values were swapped in McRegion 2014-08-10 12:27:49 +02:00
4e1805ae02 Merge pull request #1859 from PEMapModder/patch-2
Update CONTRIBUTING.md
2014-08-10 12:09:32 +02:00
ac34b9eda0 Update CONTRIBUTING.md
PocketMine namespaces are all in lowercase letters.
2014-08-10 18:08:09 +08:00
3495c79c0c Fixed crashes related to ChunkEvent 2014-08-09 10:42:03 +02:00
77799d8f3d Fixed AsyncWorker includes 2014-08-08 18:06:07 +02:00
dfdf9ddb45 Merge pull request #1846 from milo1000/issue_1843
Issue 1843 - RCON worker threads synchronization corrected
2014-08-08 16:26:47 +02:00
86d423ae4d Hide timezone guess errors 2014-08-08 12:53:31 +02:00
eff454d103 Fixed AsyncWorker not getting the proper path and not using the correct class 2014-08-08 11:51:36 +02:00
51120fdd4f Added ThreadManager, removed PHP self-kill 2014-08-08 11:36:55 +02:00
5242e87026 Issue 1843 - RCON worker threads synchronization corrected 2014-08-07 10:19:23 +02:00
269a10fadd Modified Level and Chunk deprecated methods 2014-08-06 16:22:55 +02:00
232bf5ebe4 Modified Chunk provider saving 2014-08-06 16:22:49 +02:00
2904aa06ef Merge pull request #1838 from PEMapModder/patch-2
Fixes Position::fromObject() $strong parameter neglected
2014-08-06 11:12:53 +02:00
e10c70e776 A typo fix 2014-08-06 11:06:30 +08:00
2cead226db Fixes Position::fromObject() $strong parameter neglected 2014-08-05 23:45:09 +08:00
2784925a5e Merge pull request #1822 from LukeDarling/patch-1
fixed tell command so itdoesn'tlooklikethisanymore
2014-08-03 22:38:21 +02:00
d2a14e8303 fixed tell command so itdoesn'tlooklikethisanymore 2014-08-03 13:22:41 -04:00
071033ad5c Added new installer languages 2014-08-02 18:00:36 +02:00
1e3ed8640c Updated Installer wizard language 2014-08-02 17:54:48 +02:00
60a576e541 Added proper Entity->__toString() 2014-08-02 17:48:56 +02:00
eee7e659e9 Added ChunkLoadEvent, ChunkUnloadEvent, ChunkPopulateEvent 2014-08-02 17:19:33 +02:00
7ddfd4394d Merge pull request #1818 from 64FF00/master
Added getExecutor() and setExecutor() method to PluginCommand
2014-08-02 14:43:12 +02:00
f0f2eb9a01 ... 2014-08-02 10:17:27 +09:00
839f6621eb Added getExecutor() and setExecutor() method to PluginCommand
:D
2014-08-02 10:11:36 +09:00
7fcaa78de4 Catch uncatched thrown Exceptions to get useful backtraces 2014-08-01 17:04:16 +02:00
915443b508 Disabled chunk ticking until it is stable 2014-08-01 15:25:40 +02:00
e17a7005a1 Throw exception on invalid chunk 2014-08-01 14:33:50 +02:00
c1846e3bcf Improved chunk serialization 2014-08-01 13:22:48 +02:00
81feff6d0d Merge pull request #1813 from PocketMine/revert-1748-enabled-builtin-php
Revert "Enabled built-in PHP"
2014-08-01 12:50:05 +02:00
9b84d8c248 Revert "Enabled built-in PHP" 2014-08-01 12:49:53 +02:00
26ec562fbf Added worlds directive to pocketmine.yml to load extra worlds or use a plugin-provided generator 2014-08-01 12:24:08 +02:00
d10274ca7c Improved memory usage when chunks are saved/generated 2014-08-01 11:53:24 +02:00
7c68e42a86 Fixed chunk rotation on McRegion-based worlds 2014-08-01 11:52:13 +02:00
171de939cd Fixed crash on chunks that are used by an entity after generation 2014-07-31 20:05:07 +02:00
58bded4988 Merge pull request #1801 from PocketMine/McRegion
Added multiple level formats support, implemented McRegion
2014-07-31 19:28:39 +02:00
cb4a970631 Tuned generator to use a better way to process chunks, closes #1807 #1794 #1740 #1741 #1685 2014-07-31 19:27:01 +02:00
95b5979351 Removed SimpleChunk from generator, core, use binary representation of chunks 2014-07-31 14:28:17 +02:00
18d13fdc32 Added threaded chunk sending for all formats 2014-07-31 10:19:44 +02:00
1a442b793c Fixed Tiles/Entities not using the correct chunk type 2014-07-30 18:24:59 +02:00
765d4f30c7 Added caching to non-converted network chunks 2014-07-30 17:30:22 +02:00
2eced89e6f Do not send crash reports generated from a source PM installation 2014-07-30 17:05:46 +02:00
293102d8c4 Fixed typo, BLockLight -> BlockLight 2014-07-30 16:59:52 +02:00
25f5d409f1 Fixed loading invalid plugins crashing the server 2014-07-30 16:57:31 +02:00
4128b22e85 Reuse McRegion classes on Anvil 2014-07-30 16:38:56 +02:00
487ce00542 Correctly fixed #1659 PvP settings not working 2014-07-30 16:07:21 +02:00
a9cd03da2e Changed @williamtdr syntax 2014-07-30 16:05:36 +02:00
f5fee4c909 Merge branch 'master' of github.com:PocketMine/PocketMine-MP 2014-07-30 14:10:39 +02:00
016b08ecf2 Added block order detection, added support for non-sectioned level formats 2014-07-30 12:57:00 +02:00
3515a037c5 Merge pull request #1804 from PocketMine/revert-1760-patch-1
Revert API breaking changes "Remove similar player name check from the beginning limit"
2014-07-30 00:36:12 +02:00
d6e413e8ca Revert "Remove similar player name check from the beginning limit" 2014-07-30 00:34:54 +02:00
f991efd5bc Merge pull request #1803 from Falkirks/patch-1
Spelling on crashDump()
2014-07-30 00:12:08 +02:00
913c116e7b Spelling 2014-07-29 15:10:50 -07:00
8fafb85784 Added proper chunk saving in McRegion 2014-07-29 19:36:41 +02:00
b0aad89e7a Fixed a few typos in McRegion 2014-07-29 19:11:09 +02:00
ce018fd7c8 Bumped API version to 1.2.0 (backwards-compatible changes, related to level formats) 2014-07-29 18:55:27 +02:00
afe44e6c6f Added setting to select the default level format 2014-07-29 18:54:40 +02:00
e9311f5ceb Added base McRegion classes 2014-07-29 18:43:52 +02:00
b2978133f7 Added McRegion detection to Anvil 2014-07-29 17:21:07 +02:00
6b331535c6 Merge pull request #1748 from MinecrafterJPN/enabled-builtin-php
Enabled built-in PHP
2014-07-29 09:56:05 +02:00
3370052fac Do not send crash reports from non-phar plugins 2014-07-28 23:14:29 +02:00
7d8a961374 Throw exception when an invalid chunk is set as the parent of a Tile/Entity 2014-07-28 21:40:50 +02:00
e97139919a Added new exception when a plugin creates an orphaned PluginTask 2014-07-28 20:28:50 +02:00
81faddafb0 Fixed crash when using Level scheduled block update ReversePriorityQueue 2014-07-28 19:18:28 +02:00
d0936329aa Fixed crash reports using invalid lastError data 2014-07-28 15:41:13 +02:00
9124513584 Added RakLib version to crash information 2014-07-28 14:48:26 +02:00
e860c339e2 Fixed crash when cactus was updated 2014-07-28 14:46:52 +02:00
10c67a57a7 Added extra crash dump settings, added way to disable parts of it or change the host 2014-07-28 14:42:51 +02:00
b10e63b951 Removed debug values on Crash dump 2014-07-28 13:47:38 +02:00
409eeda6ee Added plugin crash detection 2014-07-28 13:20:13 +02:00
bf09c48d62 Fixed build number on crash dumps 2014-07-28 12:57:08 +02:00
aac646d343 Fixed full path phar on logs 2014-07-28 12:20:16 +02:00
ed90d58e32 Fixed crash when placing water or lava 2014-07-28 12:18:17 +02:00
e219f4784c Merge branch 'master' of github.com:PocketMine/PocketMine-MP 2014-07-28 12:12:14 +02:00
b5a1c23c50 Moved rtfd documentation 2014-07-28 12:11:01 +02:00
14817df2c7 Merge pull request #1793 from Intyre/bug/inventory
player creative inventory bugfix
2014-07-28 11:36:32 +02:00
cc87064915 player creative inventory bugfix 2014-07-28 02:24:08 +02:00
aded24e6c6 Updated error path replace (again\!) 2014-07-27 23:05:49 +02:00
a95f8b45f1 Updated error path replace 2014-07-27 22:55:45 +02:00
7a3703d8b1 Fixed undefined $fullFile on CrashDump 2014-07-27 21:25:24 +02:00
ca59546ace Merge branch 'master' of github.com:PocketMine/PocketMine-MP 2014-07-27 21:01:06 +02:00
2330f363bd Fix for thrown EmptyChunkSection modification exception 2014-07-27 20:54:28 +02:00
042861b51f Merge pull request #1790 from RobertClarke/patch-1
Small typo fix on main language file
2014-07-27 18:40:04 +02:00
98f42a936e Small typo fix 2014-07-27 17:36:40 +01:00
6d77b0883e Fixed getTrace() on crash with xdebug 2014-07-27 17:31:39 +02:00
f53d513894 Merge pull request #1789 from PocketMine/CrashDump
Added Crash Dumps and automatic reporting
2014-07-27 15:26:36 +02:00
e6e15ceffa Fixed typo in crash text 2014-07-27 14:09:34 +02:00
9d75baf212 Added automatic reporting 2014-07-27 14:00:00 +02:00
7b45df680e Added time and plugin cause 2014-07-27 12:39:38 +02:00
f93d5339bc Use correct syntax 2014-07-26 17:06:22 +02:00
677071e7cb Merge pull request #1782 from Yosshi999/master
Updated Stick crafting recipe to give x4
2014-07-26 16:22:12 +02:00
4fa6fb0546 Updated Stick crafting recipe to give x4 2014-07-26 22:48:41 +09:00
0ca614a2c3 Merge pull request #1781 from Intyre/versionbump
Support for MCPE v0.9.5
2014-07-26 15:47:59 +02:00
bdfa6c0bc5 link to docs added to README 2014-07-26 15:08:48 +02:00
ccb7e86cf1 changed version and protocol to support v0.9.5 2014-07-26 15:07:32 +02:00
03a970e91f Merge pull request #1777 from Striker209MPE/patch-5
Fixed an error related to AIR constant
2014-07-25 07:51:27 -05:00
b3e9bb8fec Fixed an error related to AIR constant
A E_NOTICE error happened: "Use of undefined constant AIR - assumed 'AIR'"

should be fixed
2014-07-25 11:44:08 +02:00
48b99486b0 Merge pull request #1775 from Intyre/docs
docs for pocketmine-mp.readthedocs.org
2014-07-25 07:03:06 +02:00
6921e6f2aa docs for pocketmine-mp.readthedocs.org 2014-07-25 06:58:57 +02:00
987f54ba08 Edit syntax to confirm with rest of document. 2014-07-24 15:13:12 -05:00
09ef1f1721 Merge pull request #1772 from Striker209MPE/patch-3
Fixed error with useBreakOn parameters
2014-07-24 15:11:59 -05:00
3eae7a1875 Fixed error with useBreakOn parameters
A E_RECOVERABLE_ERROR error happened: "Argument 1 passed to pocketmine\block\Block::getDrops() must be an instance of pocketmine\item\Item, null given

AND

A E_RECOVERABLE_ERROR error happened: "Argument 1 passed to pocketmine\block\Generic::onBreak() must be an instance of pocketmine\item\Item, null given

are fixed
2014-07-24 22:10:33 +02:00
21587ae3eb Merge pull request #1760 from PEMapModder/patch-1
Allow player names contained in existing online player list.
2014-07-23 09:48:11 -05:00
e5337d8949 Make Fire check more efficent - by @Tschrock 2014-07-23 09:46:30 -05:00
c92a1ba7fe Release similar player name check from the beginning
For example, some would like to write `map` for `pemapmodder`, and this is what existed in amai beetroot when we used `SQLite3::query("SELECT ... ALIKE")`.
2014-07-23 22:33:45 +08:00
2066e92f84 Revert "Proper Fire ID checking. Fix #1756."
This reverts commit cd943f52a1.
2014-07-23 09:08:18 -05:00
cd943f52a1 Proper Fire ID checking. Fix #1756. 2014-07-23 08:58:26 -05:00
c3424beda9 Revert "Update Level.php"
This reverts commit da9dfabae4.
2014-07-22 13:59:23 -05:00
b6506d1db8 Revert "Corrected parameters for setBlock()"
This reverts commit 2f3a011ed3.
2014-07-22 13:59:16 -05:00
4cec3e7e37 Merge pull request #1749 from Falkirks/patch-1
Fixed fire issue
2014-07-22 13:29:12 -05:00
2f3a011ed3 Corrected parameters for setBlock() 2014-07-22 07:05:13 -07:00
da9dfabae4 Update Level.php 2014-07-21 18:15:54 -07:00
4c83e9bb56 Update Level.php 2014-07-21 20:04:58 -05:00
090d159766 Enabled built-in PHP 2014-07-22 09:46:47 +09:00
14d86339fc Fixed previous error. 2014-07-21 18:27:50 -05:00
ccf34a9db8 #1745 part 2! 2014-07-21 15:29:40 -05:00
97af1b6008 Fix #1745 2014-07-21 13:02:24 -05:00
16d33b01f4 Fix #1663 2014-07-21 10:51:30 -05:00
fa318ce706 Merge pull request #1736 from swagking47/patch-5
Fix unintentional typo in InventoryTransactionEvent.php.
2014-07-21 10:15:19 -05:00
accea03d52 Merge pull request #1741 from PEMapModder/patch-6
Added count(Enum)
2014-07-21 10:10:40 -05:00
adcdf650a3 Added count(Enum) 2014-07-21 19:25:20 +08:00
e8e825322b Update InventoryTransactionEvent.php 2014-07-20 15:28:53 -04:00
1b36b10520 Merge pull request #1729 from PEMapModder/patch-5
Fixed wrong doccomment for Vector3::add()
2014-07-19 10:32:16 +02:00
0d37e96678 Fixed wrong doccomment for Vector3::add()
Yes I know it was me who wrote it wrong.
2014-07-19 11:59:31 +08:00
2448405e3a Fixed rcon password being shown 2014-07-18 11:58:39 +02:00
2e773a32ff Removed crash() 2014-07-18 11:55:24 +02:00
d8cba4f045 Implemented new crash dumps 2014-07-18 11:54:11 +02:00
07c1ed1c36 Moved pthreads check before its usage 2014-07-18 10:49:38 +02:00
d6711125a9 Bumped MCPE version to v0.9.4 2014-07-18 10:44:14 +02:00
b8802edd6d Only allow one thread per property, fixes #1668 2014-07-17 21:22:48 +02:00
71bf984e9e Better fix for shared STONE constant, closes #1711 2014-07-17 21:20:15 +02:00
9c9d786194 Fix #1659 2014-07-16 13:07:26 -05:00
bd2cb4b851 Fixed #1614, possible solution for #1678 2014-07-15 13:17:29 +02:00
6e77901453 Fixed inventory being sent before spawning 2014-07-14 16:54:29 +02:00
ebe8a902e5 Fixed being killed on teleport 2014-07-14 15:55:16 +02:00
304524f6d8 Fixed crash on /stop 2014-07-14 14:41:19 +02:00
cb879977d2 Use Player::getDisplayName() on more commands 2014-07-14 14:12:03 +02:00
096e238242 Fixed #1628 invalid sender x,y,z on /spawnpoint, closes #1671 2014-07-14 14:07:43 +02:00
f2d5daffc0 Whoops, Markdown spacing issue 2014-07-14 20:23:46 +09:30
12275125d2 Merge branch 'master' of github.com:PocketMine/PocketMine-MP 2014-07-14 12:48:09 +02:00
3d3b6826e4 Merge pull request #1669 from sekjun9878/master
Android issues to the correct repo @PEMapModder
2014-07-14 20:18:20 +09:30
3a8adfe2b8 Merge branch 'master' of github.com:PocketMine/PocketMine-MP 2014-07-14 12:47:34 +02:00
14116b6730 Android issues to the correct repo @PEMapModder 2014-07-14 20:17:30 +09:30
241d3d72af Merge pull request #1664 from sekjun9878/master
Issue Tracking Guidelines
2014-07-14 12:47:11 +02:00
79e864f4f1 Added far-generated loaded chunk to garbage collection 2014-07-14 12:46:03 +02:00
7812a3c4fc Added Won't Fix and Invalid as per @shoghicp's suggestion. Renamed PR: RFC to PR: Contribution 2014-07-14 20:15:26 +09:30
dbe5e9b4e9 Remove informal language from Contributing Guidelines 2014-07-14 17:25:28 +09:30
d743888b8d Issue Tracking Guidelines 2014-07-14 17:11:25 +09:30
157 changed files with 4946 additions and 3057 deletions

6
.gitignore vendored
View File

@ -20,4 +20,8 @@ Desktop.ini
# Mac crap
.DS_Store
/nbproject/private/
/nbproject/private/
# Sphinx-doc
/docs/build/
!/docs/requirements.txt

View File

@ -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
```

View File

@ -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)-->

View 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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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
View 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);
}
}

View 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
View 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);
}
}

View File

@ -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);
}
}
}
}

View File

@ -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;
}

View 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;
}
}

View 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;
}
}
}

View File

@ -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);

View File

@ -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){

View 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 [];
}
}

View 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());
}
}
}
}
}

View 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;
}
}

View File

@ -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;

View File

@ -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 [];
}
}

View File

@ -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){

View File

@ -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;
}

View File

@ -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(){

View File

@ -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;
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}

View File

@ -53,6 +53,7 @@ class GamemodeCommand extends VanillaCommand{
if($gameMode === -1){
$sender->sendMessage("Unknown game mode");
return true;
}

View File

@ -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.");
}

View File

@ -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);

View File

@ -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{

View File

@ -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;
}

View File

@ -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;
}
}
}

View File

@ -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;
}

View File

@ -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.");
}

View File

@ -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);
}
}

View File

@ -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() . ")";
}
}

View File

@ -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", []);

View File

@ -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{

View File

@ -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"];
}
}

View File

@ -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;
}
}

View File

@ -53,6 +53,7 @@ abstract class Event{
if(!($this instanceof Cancellable)){
throw new \BadMethodCallException("Event is not Cancellable");
}
return $this->isCancelled === true;
}

View File

@ -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");
}
}

View File

@ -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];

View File

@ -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(){

View File

@ -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;
}

View 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;
}
}

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}
}

View 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;
}
}

View 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;
}
}

View File

@ -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;
}

View 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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -32,6 +32,6 @@ class PluginDisableEvent extends PluginEvent{
* @param Plugin $plugin
*/
public function __construct(Plugin $plugin){
$this->plugin = $plugin;
parent::__construct($plugin);
}
}

View File

@ -32,6 +32,6 @@ class PluginEnableEvent extends PluginEvent{
* @param Plugin $plugin
*/
public function __construct(Plugin $plugin){
$this->plugin = $plugin;
parent::__construct($plugin);
}
}

View File

@ -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;

View File

@ -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;

View 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);
}
}

View File

@ -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;
}

View File

@ -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{
}
}
}
}

View File

@ -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;
}

View File

@ -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(){

View File

@ -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);
}

View File

@ -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());
}
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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 = الحد الاعلى للاعبين المتواجدين الان

View File

@ -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?

View File

@ -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

View File

@ -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}}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,4 @@
default_gamemode=Normaali Peli Tila
default_gamemode = Normaali Peli Tila

View File

@ -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

View File

@ -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

View File

@ -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 = 拡張機能や管理システム、ミニゲームなどを追加できるプラグインリポジトリも確認してみてください

View File

@ -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 = 플러그인 저장소에서 새로운 기능을 추가하세요. 새로운 기능, 미니게임을 추가하거나 고급 기능으로 당신의 서버를 보호할 수 있습니다

View File

@ -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

View File

@ -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

View File

@ -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 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

View File

@ -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.

View File

@ -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 = Посетите репозиторий плагинов для получения новых функций, мини-игр, или повышения защиты вашего сервера

View File

@ -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

View File

@ -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ıı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ıı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

View File

@ -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яку ви можете прочитати, відкривши файл ліцензії в цій папці.

View File

@ -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

View File

@ -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 = 请查看插件源来添加新的功能, 迷你游戏或者对服务器的高级保护.

View File

@ -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