Full Code of H4PM/Elywing for AI

master 2308c301023b cached
1161 files
3.6 MB
994.3k tokens
6922 symbols
1 requests
Download .txt
Showing preview only (4,028K chars total). Download the full file or copy to clipboard to get everything.
Repository: H4PM/Elywing
Branch: master
Commit: 2308c301023b
Files: 1161
Total size: 3.6 MB

Directory structure:
gitextract_wdvdv96d/

├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── src/
│   ├── pocketmine/
│   │   ├── Achievement.php
│   │   ├── Collectable.php
│   │   ├── CompatibleClassLoader.php
│   │   ├── CrashDump.php
│   │   ├── IPlayer.php
│   │   ├── MemoryManager.php
│   │   ├── OfflinePlayer.php
│   │   ├── Player.php
│   │   ├── PocketMine.php
│   │   ├── Server.php
│   │   ├── Thread.php
│   │   ├── ThreadManager.php
│   │   ├── Worker.php
│   │   ├── block/
│   │   │   ├── AcaciaDoor.php
│   │   │   ├── AcaciaDoorBlock.php
│   │   │   ├── AcaciaWoodStairs.php
│   │   │   ├── ActivatorRail.php
│   │   │   ├── ActiveRedstoneLamp.php
│   │   │   ├── Air.php
│   │   │   ├── Anvil.php
│   │   │   ├── Beacon.php
│   │   │   ├── Bed.php
│   │   │   ├── Bedrock.php
│   │   │   ├── Beetroot.php
│   │   │   ├── BirchDoor.php
│   │   │   ├── BirchDoorBlock.php
│   │   │   ├── BirchWoodStairs.php
│   │   │   ├── Block.php
│   │   │   ├── BlockIds.php
│   │   │   ├── Bookshelf.php
│   │   │   ├── BrewingStand.php
│   │   │   ├── BrickStairs.php
│   │   │   ├── Bricks.php
│   │   │   ├── BrownMushroom.php
│   │   │   ├── BrownMushroomBlock.php
│   │   │   ├── BurningFurnace.php
│   │   │   ├── Cactus.php
│   │   │   ├── Cake.php
│   │   │   ├── Carpet.php
│   │   │   ├── Carrot.php
│   │   │   ├── Cauldron.php
│   │   │   ├── CauldronBlock.php
│   │   │   ├── Chest.php
│   │   │   ├── ChorusPlant.php
│   │   │   ├── Clay.php
│   │   │   ├── Coal.php
│   │   │   ├── CoalOre.php
│   │   │   ├── Cobblestone.php
│   │   │   ├── CobblestoneStairs.php
│   │   │   ├── Cobweb.php
│   │   │   ├── CocoaBlock.php
│   │   │   ├── ComparatorBlock.php
│   │   │   ├── Crops.php
│   │   │   ├── Dandelion.php
│   │   │   ├── DarkOakDoor.php
│   │   │   ├── DarkOakDoorBlock.php
│   │   │   ├── DarkOakWoodStairs.php
│   │   │   ├── DaylightDetector.php
│   │   │   ├── DaylightDetectorInverted.php
│   │   │   ├── DaylightSensor.php
│   │   │   ├── DaylightSensorInverted.php
│   │   │   ├── DeadBush.php
│   │   │   ├── DetectorRail.php
│   │   │   ├── Diamond.php
│   │   │   ├── DiamondOre.php
│   │   │   ├── Dirt.php
│   │   │   ├── Dispenser.php
│   │   │   ├── Door.php
│   │   │   ├── DoublePlant.php
│   │   │   ├── DoubleRedSandstoneSlab.php
│   │   │   ├── DoubleSlab.php
│   │   │   ├── DoubleWoodSlab.php
│   │   │   ├── DragonEgg.php
│   │   │   ├── Dropper.php
│   │   │   ├── ElectricalAppliance.php
│   │   │   ├── Emerald.php
│   │   │   ├── EmeraldOre.php
│   │   │   ├── EnchantingTable.php
│   │   │   ├── EndPortalFrame.php
│   │   │   ├── EndRod.php
│   │   │   ├── EndStone.php
│   │   │   ├── EndStoneBricks.php
│   │   │   ├── EnderChest.php
│   │   │   ├── Fallable.php
│   │   │   ├── Farmland.php
│   │   │   ├── Fence.php
│   │   │   ├── FenceGate.php
│   │   │   ├── FenceGateAcacia.php
│   │   │   ├── FenceGateBirch.php
│   │   │   ├── FenceGateDarkOak.php
│   │   │   ├── FenceGateJungle.php
│   │   │   ├── FenceGateSpruce.php
│   │   │   ├── Fire.php
│   │   │   ├── Flowable.php
│   │   │   ├── Flower.php
│   │   │   ├── FlowerPot.php
│   │   │   ├── Furnace.php
│   │   │   ├── Glass.php
│   │   │   ├── GlassPane.php
│   │   │   ├── GlowingObsidian.php
│   │   │   ├── GlowingRedstoneOre.php
│   │   │   ├── Glowstone.php
│   │   │   ├── Gold.php
│   │   │   ├── GoldOre.php
│   │   │   ├── Grass.php
│   │   │   ├── GrassPath.php
│   │   │   ├── Gravel.php
│   │   │   ├── HardenedClay.php
│   │   │   ├── HayBale.php
│   │   │   ├── HeavyWeightedPressurePlate.php
│   │   │   ├── Hopper.php
│   │   │   ├── HopperBlock.php
│   │   │   ├── Ice.php
│   │   │   ├── InactiveRedstoneLamp.php
│   │   │   ├── InvisibleBedrock.php
│   │   │   ├── Iron.php
│   │   │   ├── IronBars.php
│   │   │   ├── IronDoor.php
│   │   │   ├── IronOre.php
│   │   │   ├── IronTrapdoor.php
│   │   │   ├── ItemFrame.php
│   │   │   ├── ItemFrameBlock.php
│   │   │   ├── JungleDoor.php
│   │   │   ├── JungleDoorBlock.php
│   │   │   ├── JungleWoodStairs.php
│   │   │   ├── Ladder.php
│   │   │   ├── Lapis.php
│   │   │   ├── LapisOre.php
│   │   │   ├── Lava.php
│   │   │   ├── Leaves.php
│   │   │   ├── Leaves2.php
│   │   │   ├── Lever.php
│   │   │   ├── LightWeightedPressurePlate.php
│   │   │   ├── Liquid.php
│   │   │   ├── LitPumpkin.php
│   │   │   ├── LitRedstoneLamp.php
│   │   │   ├── LitRedstoneTorch.php
│   │   │   ├── Melon.php
│   │   │   ├── MelonStem.php
│   │   │   ├── MobHead.php
│   │   │   ├── MonsterEggBlock.php
│   │   │   ├── MonsterSpawner.php
│   │   │   ├── MossStone.php
│   │   │   ├── Mycelium.php
│   │   │   ├── NetherBrick.php
│   │   │   ├── NetherBrickFence.php
│   │   │   ├── NetherBrickStairs.php
│   │   │   ├── NetherQuartzOre.php
│   │   │   ├── NetherReactor.php
│   │   │   ├── NetherWart.php
│   │   │   ├── NetherWartBlock.php
│   │   │   ├── Netherrack.php
│   │   │   ├── Noteblock.php
│   │   │   ├── Obsidian.php
│   │   │   ├── PackedIce.php
│   │   │   ├── Piston.php
│   │   │   ├── PistonHead.php
│   │   │   ├── Planks.php
│   │   │   ├── Podzol.php
│   │   │   ├── Portal.php
│   │   │   ├── PortalBlock.php
│   │   │   ├── Potato.php
│   │   │   ├── PoweredComparatorBlock.php
│   │   │   ├── PoweredRail.php
│   │   │   ├── PoweredRepeater.php
│   │   │   ├── PoweredRepeaterBlock.php
│   │   │   ├── PressurePlate.php
│   │   │   ├── Prismarine.php
│   │   │   ├── Pumpkin.php
│   │   │   ├── PumpkinStem.php
│   │   │   ├── PurpurBlock.php
│   │   │   ├── PurpurStairs.php
│   │   │   ├── Quartz.php
│   │   │   ├── QuartzStairs.php
│   │   │   ├── Rail.php
│   │   │   ├── RedMushroom.php
│   │   │   ├── RedMushroomBlock.php
│   │   │   ├── RedSandstone.php
│   │   │   ├── RedSandstoneSlab.php
│   │   │   ├── RedSandstoneStairs.php
│   │   │   ├── Redstone.php
│   │   │   ├── RedstoneLamp.php
│   │   │   ├── RedstoneOre.php
│   │   │   ├── RedstoneSource.php
│   │   │   ├── RedstoneTorch.php
│   │   │   ├── RedstoneWire.php
│   │   │   ├── RepeaterBlock.php
│   │   │   ├── Sand.php
│   │   │   ├── Sandstone.php
│   │   │   ├── SandstoneStairs.php
│   │   │   ├── Sapling.php
│   │   │   ├── SeaLantern.php
│   │   │   ├── SignPost.php
│   │   │   ├── SkullBlock.php
│   │   │   ├── Slab.php
│   │   │   ├── Slab2.php
│   │   │   ├── SlimeBlock.php
│   │   │   ├── Snow.php
│   │   │   ├── SnowLayer.php
│   │   │   ├── Solid.php
│   │   │   ├── SolidLight.php
│   │   │   ├── SoulSand.php
│   │   │   ├── Sponge.php
│   │   │   ├── SpruceDoor.php
│   │   │   ├── SpruceDoorBlock.php
│   │   │   ├── SpruceWoodStairs.php
│   │   │   ├── StainedClay.php
│   │   │   ├── Stair.php
│   │   │   ├── StickyPiston.php
│   │   │   ├── StillLava.php
│   │   │   ├── StillWater.php
│   │   │   ├── Stone.php
│   │   │   ├── StoneBrickStairs.php
│   │   │   ├── StoneBricks.php
│   │   │   ├── StoneButton.php
│   │   │   ├── StonePressurePlate.php
│   │   │   ├── StoneWall.php
│   │   │   ├── Stonecutter.php
│   │   │   ├── Sugarcane.php
│   │   │   ├── TNT.php
│   │   │   ├── TallGrass.php
│   │   │   ├── Thin.php
│   │   │   ├── Torch.php
│   │   │   ├── Transparent.php
│   │   │   ├── Trapdoor.php
│   │   │   ├── TrappedChest.php
│   │   │   ├── Tripwire.php
│   │   │   ├── TripwireHook.php
│   │   │   ├── UnlitRedstoneTorch.php
│   │   │   ├── UnpoweredRepeater.php
│   │   │   ├── Vine.php
│   │   │   ├── WallSign.php
│   │   │   ├── Water.php
│   │   │   ├── WaterLily.php
│   │   │   ├── WeightedPressurePlateHeavy.php
│   │   │   ├── WeightedPressurePlateLight.php
│   │   │   ├── Wheat.php
│   │   │   ├── Wood.php
│   │   │   ├── Wood2.php
│   │   │   ├── WoodDoor.php
│   │   │   ├── WoodSlab.php
│   │   │   ├── WoodStairs.php
│   │   │   ├── WoodenButton.php
│   │   │   ├── WoodenPressurePlate.php
│   │   │   ├── Wool.php
│   │   │   └── Workbench.php
│   │   ├── command/
│   │   │   ├── Command.php
│   │   │   ├── CommandExecutor.php
│   │   │   ├── CommandMap.php
│   │   │   ├── CommandReader.php
│   │   │   ├── CommandSender.php
│   │   │   ├── ConsoleCommandSender.php
│   │   │   ├── FormattedCommandAlias.php
│   │   │   ├── PluginCommand.php
│   │   │   ├── PluginIdentifiableCommand.php
│   │   │   ├── RemoteConsoleCommandSender.php
│   │   │   ├── SimpleCommandMap.php
│   │   │   └── defaults/
│   │   │       ├── BanCidByNameCommand.php
│   │   │       ├── BanCidCommand.php
│   │   │       ├── BanCommand.php
│   │   │       ├── BanIpByNameCommand.php
│   │   │       ├── BanIpCommand.php
│   │   │       ├── BanListCommand.php
│   │   │       ├── DefaultGamemodeCommand.php
│   │   │       ├── DeopCommand.php
│   │   │       ├── DifficultyCommand.php
│   │   │       ├── DumpMemoryCommand.php
│   │   │       ├── EffectCommand.php
│   │   │       ├── EnchantCommand.php
│   │   │       ├── GamemodeCommand.php
│   │   │       ├── GarbageCollectorCommand.php
│   │   │       ├── GiveCommand.php
│   │   │       ├── HelpCommand.php
│   │   │       ├── KickCommand.php
│   │   │       ├── KillCommand.php
│   │   │       ├── ListCommand.php
│   │   │       ├── MeCommand.php
│   │   │       ├── OpCommand.php
│   │   │       ├── PardonCidCommand.php
│   │   │       ├── PardonCommand.php
│   │   │       ├── PardonIpCommand.php
│   │   │       ├── ParticleCommand.php
│   │   │       ├── PluginsCommand.php
│   │   │       ├── ReloadCommand.php
│   │   │       ├── SaveCommand.php
│   │   │       ├── SaveOffCommand.php
│   │   │       ├── SaveOnCommand.php
│   │   │       ├── SayCommand.php
│   │   │       ├── SeedCommand.php
│   │   │       ├── SetBlockCommand.php
│   │   │       ├── SetWorldSpawnCommand.php
│   │   │       ├── SpawnpointCommand.php
│   │   │       ├── StatusCommand.php
│   │   │       ├── StopCommand.php
│   │   │       ├── SummonCommand.php
│   │   │       ├── TeleportCommand.php
│   │   │       ├── TellCommand.php
│   │   │       ├── TimeCommand.php
│   │   │       ├── TimingsCommand.php
│   │   │       ├── TransferCommand.php
│   │   │       ├── VanillaCommand.php
│   │   │       ├── VersionCommand.php
│   │   │       ├── WeatherCommand.php
│   │   │       ├── WhitelistCommand.php
│   │   │       └── XpCommand.php
│   │   ├── entity/
│   │   │   ├── Ageable.php
│   │   │   ├── Animal.php
│   │   │   ├── Arrow.php
│   │   │   ├── Attachable.php
│   │   │   ├── Attribute.php
│   │   │   ├── AttributeMap.php
│   │   │   ├── Bat.php
│   │   │   ├── Blaze.php
│   │   │   ├── Boat.php
│   │   │   ├── CaveSpider.php
│   │   │   ├── Chicken.php
│   │   │   ├── Colorable.php
│   │   │   ├── Cow.php
│   │   │   ├── Creature.php
│   │   │   ├── Creeper.php
│   │   │   ├── Damageable.php
│   │   │   ├── Dragon.php
│   │   │   ├── DragonFireBall.php
│   │   │   ├── Effect.php
│   │   │   ├── Egg.php
│   │   │   ├── EnderCrystal.php
│   │   │   ├── EnderPearl.php
│   │   │   ├── Enderman.php
│   │   │   ├── Entity.php
│   │   │   ├── Explosive.php
│   │   │   ├── FallingSand.php
│   │   │   ├── FishingHook.php
│   │   │   ├── FlyingAnimal.php
│   │   │   ├── Ghast.php
│   │   │   ├── Hanging.php
│   │   │   ├── Human.php
│   │   │   ├── Husk.php
│   │   │   ├── InstantEffect.php
│   │   │   ├── IronGolem.php
│   │   │   ├── Item.php
│   │   │   ├── LavaSlime.php
│   │   │   ├── Lightning.php
│   │   │   ├── Living.php
│   │   │   ├── Minecart.php
│   │   │   ├── MinecartChest.php
│   │   │   ├── MinecartHopper.php
│   │   │   ├── MinecartTNT.php
│   │   │   ├── Monster.php
│   │   │   ├── Mooshroom.php
│   │   │   ├── NPC.php
│   │   │   ├── Ocelot.php
│   │   │   ├── Painting.php
│   │   │   ├── Pig.php
│   │   │   ├── PigZombie.php
│   │   │   ├── PolarBear.php
│   │   │   ├── PrimedTNT.php
│   │   │   ├── Projectile.php
│   │   │   ├── ProjectileSource.php
│   │   │   ├── Rabbit.php
│   │   │   ├── Rideable.php
│   │   │   ├── Sheep.php
│   │   │   ├── Shulker.php
│   │   │   ├── ShulkerBullet.php
│   │   │   ├── Silverfish.php
│   │   │   ├── Skeleton.php
│   │   │   ├── Slime.php
│   │   │   ├── SnowGolem.php
│   │   │   ├── Snowball.php
│   │   │   ├── Spider.php
│   │   │   ├── Squid.php
│   │   │   ├── Stray.php
│   │   │   ├── Tameable.php
│   │   │   ├── ThrownExpBottle.php
│   │   │   ├── ThrownPotion.php
│   │   │   ├── Vehicle.php
│   │   │   ├── Villager.php
│   │   │   ├── WaterAnimal.php
│   │   │   ├── Witch.php
│   │   │   ├── WitherSkeleton.php
│   │   │   ├── Wolf.php
│   │   │   ├── XPOrb.php
│   │   │   ├── Zombie.php
│   │   │   └── ZombieVillager.php
│   │   ├── event/
│   │   │   ├── Cancellable.php
│   │   │   ├── Event.php
│   │   │   ├── EventPriority.php
│   │   │   ├── HandlerList.php
│   │   │   ├── LevelTimings.php
│   │   │   ├── Listener.php
│   │   │   ├── TextContainer.php
│   │   │   ├── Timings.php
│   │   │   ├── TimingsHandler.php
│   │   │   ├── TranslationContainer.php
│   │   │   ├── block/
│   │   │   │   ├── BlockBreakEvent.php
│   │   │   │   ├── BlockBurnEvent.php
│   │   │   │   ├── BlockEvent.php
│   │   │   │   ├── BlockFormEvent.php
│   │   │   │   ├── BlockGrowEvent.php
│   │   │   │   ├── BlockPlaceEvent.php
│   │   │   │   ├── BlockSpreadEvent.php
│   │   │   │   ├── BlockUpdateEvent.php
│   │   │   │   ├── ItemFrameDropItemEvent.php
│   │   │   │   ├── LeavesDecayEvent.php
│   │   │   │   └── SignChangeEvent.php
│   │   │   ├── entity/
│   │   │   │   ├── CreeperPowerEvent.php
│   │   │   │   ├── EntityArmorChangeEvent.php
│   │   │   │   ├── EntityBlockChangeEvent.php
│   │   │   │   ├── EntityCombustByBlockEvent.php
│   │   │   │   ├── EntityCombustByEntityEvent.php
│   │   │   │   ├── EntityCombustEvent.php
│   │   │   │   ├── EntityDamageByBlockEvent.php
│   │   │   │   ├── EntityDamageByChildEntityEvent.php
│   │   │   │   ├── EntityDamageByEntityEvent.php
│   │   │   │   ├── EntityDamageEvent.php
│   │   │   │   ├── EntityDeathEvent.php
│   │   │   │   ├── EntityDespawnEvent.php
│   │   │   │   ├── EntityDrinkPotionEvent.php
│   │   │   │   ├── EntityEatBlockEvent.php
│   │   │   │   ├── EntityEatEvent.php
│   │   │   │   ├── EntityEatItemEvent.php
│   │   │   │   ├── EntityEffectAddEvent.php
│   │   │   │   ├── EntityEffectRemoveEvent.php
│   │   │   │   ├── EntityEvent.php
│   │   │   │   ├── EntityExplodeEvent.php
│   │   │   │   ├── EntityGenerateEvent.php
│   │   │   │   ├── EntityInventoryChangeEvent.php
│   │   │   │   ├── EntityLevelChangeEvent.php
│   │   │   │   ├── EntityMotionEvent.php
│   │   │   │   ├── EntityRegainHealthEvent.php
│   │   │   │   ├── EntityShootBowEvent.php
│   │   │   │   ├── EntitySpawnEvent.php
│   │   │   │   ├── EntityTeleportEvent.php
│   │   │   │   ├── ExplosionPrimeEvent.php
│   │   │   │   ├── ItemDespawnEvent.php
│   │   │   │   ├── ItemSpawnEvent.php
│   │   │   │   ├── ProjectileHitEvent.php
│   │   │   │   └── ProjectileLaunchEvent.php
│   │   │   ├── inventory/
│   │   │   │   ├── CraftItemEvent.php
│   │   │   │   ├── FurnaceBurnEvent.php
│   │   │   │   ├── FurnaceSmeltEvent.php
│   │   │   │   ├── InventoryCloseEvent.php
│   │   │   │   ├── InventoryEvent.php
│   │   │   │   ├── InventoryOpenEvent.php
│   │   │   │   ├── InventoryPickupArrowEvent.php
│   │   │   │   ├── InventoryPickupItemEvent.php
│   │   │   │   └── InventoryTransactionEvent.php
│   │   │   ├── level/
│   │   │   │   ├── ChunkEvent.php
│   │   │   │   ├── ChunkLoadEvent.php
│   │   │   │   ├── ChunkPopulateEvent.php
│   │   │   │   ├── ChunkUnloadEvent.php
│   │   │   │   ├── LevelEvent.php
│   │   │   │   ├── LevelInitEvent.php
│   │   │   │   ├── LevelLoadEvent.php
│   │   │   │   ├── LevelSaveEvent.php
│   │   │   │   ├── LevelUnloadEvent.php
│   │   │   │   ├── SpawnChangeEvent.php
│   │   │   │   └── WeatherChangeEvent.php
│   │   │   ├── player/
│   │   │   │   ├── PlayerAchievementAwardedEvent.php
│   │   │   │   ├── PlayerAnimationEvent.php
│   │   │   │   ├── PlayerBedEnterEvent.php
│   │   │   │   ├── PlayerBedLeaveEvent.php
│   │   │   │   ├── PlayerBucketEmptyEvent.php
│   │   │   │   ├── PlayerBucketEvent.php
│   │   │   │   ├── PlayerBucketFillEvent.php
│   │   │   │   ├── PlayerChatEvent.php
│   │   │   │   ├── PlayerCommandPreprocessEvent.php
│   │   │   │   ├── PlayerCreationEvent.php
│   │   │   │   ├── PlayerDeathEvent.php
│   │   │   │   ├── PlayerDropItemEvent.php
│   │   │   │   ├── PlayerEvent.php
│   │   │   │   ├── PlayerExhaustEvent.php
│   │   │   │   ├── PlayerExperienceChangeEvent.php
│   │   │   │   ├── PlayerFishEvent.php
│   │   │   │   ├── PlayerGameModeChangeEvent.php
│   │   │   │   ├── PlayerGlassBottleEvent.php
│   │   │   │   ├── PlayerHungerChangeEvent.php
│   │   │   │   ├── PlayerInteractEvent.php
│   │   │   │   ├── PlayerItemConsumeEvent.php
│   │   │   │   ├── PlayerItemHeldEvent.php
│   │   │   │   ├── PlayerJoinEvent.php
│   │   │   │   ├── PlayerKickEvent.php
│   │   │   │   ├── PlayerLoginEvent.php
│   │   │   │   ├── PlayerMoveEvent.php
│   │   │   │   ├── PlayerPickupExpOrbEvent.php
│   │   │   │   ├── PlayerPreLoginEvent.php
│   │   │   │   ├── PlayerQuitEvent.php
│   │   │   │   ├── PlayerRespawnEvent.php
│   │   │   │   ├── PlayerTextPreSendEvent.php
│   │   │   │   ├── PlayerToggleFlightEvent.php
│   │   │   │   ├── PlayerToggleGlideEvent.php
│   │   │   │   ├── PlayerToggleSneakEvent.php
│   │   │   │   ├── PlayerToggleSprintEvent.php
│   │   │   │   └── PlayerUseFishingRodEvent.php
│   │   │   ├── plugin/
│   │   │   │   ├── PluginDisableEvent.php
│   │   │   │   ├── PluginEnableEvent.php
│   │   │   │   └── PluginEvent.php
│   │   │   └── server/
│   │   │       ├── DataPacketReceiveEvent.php
│   │   │       ├── DataPacketSendEvent.php
│   │   │       ├── LowMemoryEvent.php
│   │   │       ├── QueryRegenerateEvent.php
│   │   │       ├── RemoteServerCommandEvent.php
│   │   │       ├── ServerCommandEvent.php
│   │   │       └── ServerEvent.php
│   │   ├── inventory/
│   │   │   ├── AnvilInventory.php
│   │   │   ├── BaseInventory.php
│   │   │   ├── BaseTransaction.php
│   │   │   ├── BigShapedRecipe.php
│   │   │   ├── BigShapelessRecipe.php
│   │   │   ├── BrewingInventory.php
│   │   │   ├── BrewingRecipe.php
│   │   │   ├── ChestInventory.php
│   │   │   ├── ContainerInventory.php
│   │   │   ├── CraftingInventory.php
│   │   │   ├── CraftingManager.php
│   │   │   ├── CustomInventory.php
│   │   │   ├── DispenserInventory.php
│   │   │   ├── DoubleChestInventory.php
│   │   │   ├── DropItemTransaction.php
│   │   │   ├── DropperInventory.php
│   │   │   ├── EnchantInventory.php
│   │   │   ├── EnderChestInventory.php
│   │   │   ├── FakeBlockMenu.php
│   │   │   ├── FloatingInventory.php
│   │   │   ├── Fuel.php
│   │   │   ├── FurnaceInventory.php
│   │   │   ├── FurnaceRecipe.php
│   │   │   ├── HopperInventory.php
│   │   │   ├── Inventory.php
│   │   │   ├── InventoryHolder.php
│   │   │   ├── InventoryType.php
│   │   │   ├── MultiRecipe.php
│   │   │   ├── PlayerInventory.php
│   │   │   ├── Recipe.php
│   │   │   ├── ShapedRecipe.php
│   │   │   ├── ShapedRecipeFromJson.php
│   │   │   ├── ShapelessRecipe.php
│   │   │   ├── SimpleTransactionQueue.php
│   │   │   ├── TemporaryInventory.php
│   │   │   ├── Transaction.php
│   │   │   └── TransactionQueue.php
│   │   ├── item/
│   │   │   ├── AcaciaDoor.php
│   │   │   ├── Apple.php
│   │   │   ├── Armor.php
│   │   │   ├── Arrow.php
│   │   │   ├── BakedPotato.php
│   │   │   ├── Bed.php
│   │   │   ├── Beetroot.php
│   │   │   ├── BeetrootSeeds.php
│   │   │   ├── BeetrootSoup.php
│   │   │   ├── BirchDoor.php
│   │   │   ├── BlazePowder.php
│   │   │   ├── Boat.php
│   │   │   ├── Bone.php
│   │   │   ├── Book.php
│   │   │   ├── Bow.php
│   │   │   ├── Bowl.php
│   │   │   ├── Bread.php
│   │   │   ├── BrewingStand.php
│   │   │   ├── Brick.php
│   │   │   ├── Bucket.php
│   │   │   ├── Cake.php
│   │   │   ├── Camera.php
│   │   │   ├── Carrot.php
│   │   │   ├── Cauldron.php
│   │   │   ├── ChainBoots.php
│   │   │   ├── ChainChestplate.php
│   │   │   ├── ChainHelmet.php
│   │   │   ├── ChainLeggings.php
│   │   │   ├── ChorusFruit.php
│   │   │   ├── Clay.php
│   │   │   ├── Clock.php
│   │   │   ├── Coal.php
│   │   │   ├── Compass.php
│   │   │   ├── CookedChicken.php
│   │   │   ├── CookedFish.php
│   │   │   ├── CookedMutton.php
│   │   │   ├── CookedPorkchop.php
│   │   │   ├── CookedRabbit.php
│   │   │   ├── Cookie.php
│   │   │   ├── DarkOakDoor.php
│   │   │   ├── Diamond.php
│   │   │   ├── DiamondAxe.php
│   │   │   ├── DiamondBoots.php
│   │   │   ├── DiamondChestplate.php
│   │   │   ├── DiamondHelmet.php
│   │   │   ├── DiamondHoe.php
│   │   │   ├── DiamondLeggings.php
│   │   │   ├── DiamondPickaxe.php
│   │   │   ├── DiamondShovel.php
│   │   │   ├── DiamondSword.php
│   │   │   ├── Door.php
│   │   │   ├── Dye.php
│   │   │   ├── Egg.php
│   │   │   ├── Elytra.php
│   │   │   ├── Emerald.php
│   │   │   ├── EnchantedBook.php
│   │   │   ├── EnchantedGoldenApple.php
│   │   │   ├── EnchantingBottle.php
│   │   │   ├── EnderPearl.php
│   │   │   ├── EyeOfEnder.php
│   │   │   ├── Feather.php
│   │   │   ├── FermentedSpiderEye.php
│   │   │   ├── Fish.php
│   │   │   ├── FishingRod.php
│   │   │   ├── Flint.php
│   │   │   ├── FlintSteel.php
│   │   │   ├── FlowerPot.php
│   │   │   ├── Food.php
│   │   │   ├── FoodSource.php
│   │   │   ├── GlassBottle.php
│   │   │   ├── GlisteringMelon.php
│   │   │   ├── GlowstoneDust.php
│   │   │   ├── GoldAxe.php
│   │   │   ├── GoldBoots.php
│   │   │   ├── GoldChestplate.php
│   │   │   ├── GoldHelmet.php
│   │   │   ├── GoldHoe.php
│   │   │   ├── GoldIngot.php
│   │   │   ├── GoldLeggings.php
│   │   │   ├── GoldNugget.php
│   │   │   ├── GoldPickaxe.php
│   │   │   ├── GoldShovel.php
│   │   │   ├── GoldSword.php
│   │   │   ├── GoldenApple.php
│   │   │   ├── GoldenCarrot.php
│   │   │   ├── Gunpowder.php
│   │   │   ├── Hopper.php
│   │   │   ├── IronAxe.php
│   │   │   ├── IronBoots.php
│   │   │   ├── IronChestplate.php
│   │   │   ├── IronDoor.php
│   │   │   ├── IronHelmet.php
│   │   │   ├── IronHoe.php
│   │   │   ├── IronIngot.php
│   │   │   ├── IronLeggings.php
│   │   │   ├── IronPickaxe.php
│   │   │   ├── IronShovel.php
│   │   │   ├── IronSword.php
│   │   │   ├── Item.php
│   │   │   ├── ItemBlock.php
│   │   │   ├── ItemFrame.php
│   │   │   ├── ItemIds.php
│   │   │   ├── ItemString.php
│   │   │   ├── JungleDoor.php
│   │   │   ├── Leather.php
│   │   │   ├── LeatherBoots.php
│   │   │   ├── LeatherCap.php
│   │   │   ├── LeatherPants.php
│   │   │   ├── LeatherTunic.php
│   │   │   ├── MagmaCream.php
│   │   │   ├── Melon.php
│   │   │   ├── MelonSeeds.php
│   │   │   ├── Minecart.php
│   │   │   ├── MobHead.php
│   │   │   ├── MushroomStew.php
│   │   │   ├── NetherBrick.php
│   │   │   ├── NetherQuartz.php
│   │   │   ├── NetherStar.php
│   │   │   ├── NetherWart.php
│   │   │   ├── Painting.php
│   │   │   ├── Paper.php
│   │   │   ├── Potato.php
│   │   │   ├── Potion.php
│   │   │   ├── PrismarineCrystals.php
│   │   │   ├── PrismarineShard.php
│   │   │   ├── PumpkinPie.php
│   │   │   ├── PumpkinSeeds.php
│   │   │   ├── Quartz.php
│   │   │   ├── RabbitStew.php
│   │   │   ├── RawBeef.php
│   │   │   ├── RawChicken.php
│   │   │   ├── RawMutton.php
│   │   │   ├── RawPorkchop.php
│   │   │   ├── RawRabbit.php
│   │   │   ├── Redstone.php
│   │   │   ├── Repeater.php
│   │   │   ├── RottenFlesh.php
│   │   │   ├── Shears.php
│   │   │   ├── Sign.php
│   │   │   ├── Skull.php
│   │   │   ├── Slimeball.php
│   │   │   ├── Snowball.php
│   │   │   ├── SpawnEgg.php
│   │   │   ├── SpiderEye.php
│   │   │   ├── SplashPotion.php
│   │   │   ├── SpruceDoor.php
│   │   │   ├── Steak.php
│   │   │   ├── Stick.php
│   │   │   ├── StoneAxe.php
│   │   │   ├── StoneHoe.php
│   │   │   ├── StonePickaxe.php
│   │   │   ├── StoneShovel.php
│   │   │   ├── StoneSword.php
│   │   │   ├── StringItem.php
│   │   │   ├── Sugar.php
│   │   │   ├── Sugarcane.php
│   │   │   ├── Tool.php
│   │   │   ├── Wheat.php
│   │   │   ├── WheatSeeds.php
│   │   │   ├── WoodenAxe.php
│   │   │   ├── WoodenDoor.php
│   │   │   ├── WoodenHoe.php
│   │   │   ├── WoodenPickaxe.php
│   │   │   ├── WoodenShovel.php
│   │   │   ├── WoodenSword.php
│   │   │   └── enchantment/
│   │   │       ├── Enchantment.php
│   │   │       ├── EnchantmentEntry.php
│   │   │       ├── EnchantmentLevelTable.php
│   │   │       └── EnchantmentList.php
│   │   ├── lang/
│   │   │   ├── BaseLang.php
│   │   │   ├── Installer/
│   │   │   │   ├── chs.ini
│   │   │   │   ├── deu.ini
│   │   │   │   ├── eng.ini
│   │   │   │   ├── fra.ini
│   │   │   │   ├── ita.ini
│   │   │   │   ├── jpn.ini
│   │   │   │   ├── kor.ini
│   │   │   │   ├── rus.ini
│   │   │   │   ├── ukr.ini
│   │   │   │   └── zho.ini
│   │   │   └── locale/
│   │   │       ├── ces.ini
│   │   │       ├── chs.ini
│   │   │       ├── deu.ini
│   │   │       ├── eng.ini
│   │   │       ├── fra.ini
│   │   │       ├── jpn.ini
│   │   │       ├── kor.ini
│   │   │       ├── rus.ini
│   │   │       ├── tur.ini
│   │   │       ├── ukr.ini
│   │   │       ├── vie.ini
│   │   │       └── zho.ini
│   │   ├── level/
│   │   │   ├── ChunkLoader.php
│   │   │   ├── ChunkManager.php
│   │   │   ├── Explosion.php
│   │   │   ├── Level.php
│   │   │   ├── LevelException.php
│   │   │   ├── Location.php
│   │   │   ├── MovingObjectPosition.php
│   │   │   ├── Position.php
│   │   │   ├── SimpleChunkManager.php
│   │   │   ├── WeakPosition.php
│   │   │   ├── format/
│   │   │   │   ├── Chunk.php
│   │   │   │   ├── EmptySubChunk.php
│   │   │   │   ├── SubChunk.php
│   │   │   │   └── io/
│   │   │   │       ├── BaseLevelProvider.php
│   │   │   │       ├── ChunkException.php
│   │   │   │       ├── ChunkRequestTask.php
│   │   │   │       ├── ChunkUtils.php
│   │   │   │       ├── LevelProvider.php
│   │   │   │       ├── LevelProviderManager.php
│   │   │   │       └── region/
│   │   │   │           ├── Anvil.php
│   │   │   │           ├── McRegion.php
│   │   │   │           ├── PMAnvil.php
│   │   │   │           └── RegionLoader.php
│   │   │   ├── generator/
│   │   │   │   ├── Flat.php
│   │   │   │   ├── GenerationTask.php
│   │   │   │   ├── Generator.php
│   │   │   │   ├── GeneratorRegisterTask.php
│   │   │   │   ├── GeneratorUnregisterTask.php
│   │   │   │   ├── LightPopulationTask.php
│   │   │   │   ├── PopulationTask.php
│   │   │   │   ├── Void.php
│   │   │   │   ├── biome/
│   │   │   │   │   ├── Biome.php
│   │   │   │   │   └── BiomeSelector.php
│   │   │   │   ├── nether/
│   │   │   │   │   ├── Nether.php
│   │   │   │   │   ├── biome/
│   │   │   │   │   │   └── HellBiome.php
│   │   │   │   │   ├── object/
│   │   │   │   │   │   └── NetherOre.php
│   │   │   │   │   └── populator/
│   │   │   │   │       ├── GroundFire.php
│   │   │   │   │       ├── NetherGlowStone.php
│   │   │   │   │       ├── NetherLava.php
│   │   │   │   │       └── NetherOre.php
│   │   │   │   ├── noise/
│   │   │   │   │   ├── Noise.php
│   │   │   │   │   ├── Perlin.php
│   │   │   │   │   └── Simplex.php
│   │   │   │   ├── normal/
│   │   │   │   │   ├── Normal.php
│   │   │   │   │   ├── Normal2.php
│   │   │   │   │   ├── biome/
│   │   │   │   │   │   ├── BeachBiome.php
│   │   │   │   │   │   ├── DesertBiome.php
│   │   │   │   │   │   ├── ForestBiome.php
│   │   │   │   │   │   ├── GrassyBiome.php
│   │   │   │   │   │   ├── IcePlainsBiome.php
│   │   │   │   │   │   ├── MesaBiome.php
│   │   │   │   │   │   ├── MountainsBiome.php
│   │   │   │   │   │   ├── NormalBiome.php
│   │   │   │   │   │   ├── OceanBiome.php
│   │   │   │   │   │   ├── PlainBiome.php
│   │   │   │   │   │   ├── RiverBiome.php
│   │   │   │   │   │   ├── SandyBiome.php
│   │   │   │   │   │   ├── SmallMountainsBiome.php
│   │   │   │   │   │   ├── SnowyBiome.php
│   │   │   │   │   │   ├── SwampBiome.php
│   │   │   │   │   │   ├── TaigaBiome.php
│   │   │   │   │   │   └── WateryBiome.php
│   │   │   │   │   ├── object/
│   │   │   │   │   │   ├── AcaciaTree.php
│   │   │   │   │   │   ├── BigTree.php
│   │   │   │   │   │   ├── BirchTree.php
│   │   │   │   │   │   ├── CactusStack.php
│   │   │   │   │   │   ├── DarkOakTree.php
│   │   │   │   │   │   ├── JungleTree.php
│   │   │   │   │   │   ├── OakTree.php
│   │   │   │   │   │   ├── Ore.php
│   │   │   │   │   │   ├── OreType.php
│   │   │   │   │   │   ├── Pond.php
│   │   │   │   │   │   ├── SpruceTree.php
│   │   │   │   │   │   ├── SugarCaneStack.php
│   │   │   │   │   │   ├── TallGrass.php
│   │   │   │   │   │   └── Tree.php
│   │   │   │   │   └── populator/
│   │   │   │   │       ├── Cactus.php
│   │   │   │   │       ├── Cave.php
│   │   │   │   │       ├── DeadBush.php
│   │   │   │   │       ├── Flower.php
│   │   │   │   │       ├── GroundCover.php
│   │   │   │   │       ├── LilyPad.php
│   │   │   │   │       ├── Mineshaft.php
│   │   │   │   │       ├── MossStone.php
│   │   │   │   │       ├── Mushroom.php
│   │   │   │   │       ├── Ore.php
│   │   │   │   │       ├── Pond.php
│   │   │   │   │       ├── SugarCane.php
│   │   │   │   │       ├── TallGrass.php
│   │   │   │   │       ├── Tree.php
│   │   │   │   │       └── WaterPit.php
│   │   │   │   ├── object/
│   │   │   │   │   └── Object.php
│   │   │   │   └── populator/
│   │   │   │       ├── Populator.php
│   │   │   │       └── VariableAmountPopulator.php
│   │   │   ├── particle/
│   │   │   │   ├── AngryVillagerParticle.php
│   │   │   │   ├── BlockForceFieldParticle.php
│   │   │   │   ├── BubbleParticle.php
│   │   │   │   ├── CriticalParticle.php
│   │   │   │   ├── DestroyBlockParticle.php
│   │   │   │   ├── DustParticle.php
│   │   │   │   ├── EnchantParticle.php
│   │   │   │   ├── EnchantmentTableParticle.php
│   │   │   │   ├── EntityFlameParticle.php
│   │   │   │   ├── ExplodeParticle.php
│   │   │   │   ├── FlameParticle.php
│   │   │   │   ├── FloatingTextParticle.php
│   │   │   │   ├── GenericParticle.php
│   │   │   │   ├── HappyVillagerParticle.php
│   │   │   │   ├── HeartParticle.php
│   │   │   │   ├── HugeExplodeParticle.php
│   │   │   │   ├── HugeExplodeSeedParticle.php
│   │   │   │   ├── InkParticle.php
│   │   │   │   ├── InstantEnchantParticle.php
│   │   │   │   ├── ItemBreakParticle.php
│   │   │   │   ├── LavaDripParticle.php
│   │   │   │   ├── LavaParticle.php
│   │   │   │   ├── MobSpawnParticle.php
│   │   │   │   ├── MobSpellParticle.php
│   │   │   │   ├── Particle.php
│   │   │   │   ├── PortalParticle.php
│   │   │   │   ├── RainSplashParticle.php
│   │   │   │   ├── RedstoneParticle.php
│   │   │   │   ├── SmokeParticle.php
│   │   │   │   ├── SpellParticle.php
│   │   │   │   ├── SplashParticle.php
│   │   │   │   ├── SporeParticle.php
│   │   │   │   ├── TerrainParticle.php
│   │   │   │   ├── WaterDripParticle.php
│   │   │   │   ├── WaterParticle.php
│   │   │   │   └── WhiteSmokeParticle.php
│   │   │   ├── sound/
│   │   │   │   ├── AnvilFallSound.php
│   │   │   │   ├── AnvilUseSound.php
│   │   │   │   ├── BatSound.php
│   │   │   │   ├── BlazeShootSound.php
│   │   │   │   ├── BlockPlaceSound.php
│   │   │   │   ├── ButtonClickSound.php
│   │   │   │   ├── ClickSound.php
│   │   │   │   ├── DoorBumpSound.php
│   │   │   │   ├── DoorCrashSound.php
│   │   │   │   ├── DoorSound.php
│   │   │   │   ├── EndermanTeleportSound.php
│   │   │   │   ├── ExpPickupSound.php
│   │   │   │   ├── ExplodeSound.php
│   │   │   │   ├── FizzSound.php
│   │   │   │   ├── GenericSound.php
│   │   │   │   ├── GhastShootSound.php
│   │   │   │   ├── GhastSound.php
│   │   │   │   ├── GraySplashSound.php
│   │   │   │   ├── LaunchSound.php
│   │   │   │   ├── NoteblockSound.php
│   │   │   │   ├── PopSound.php
│   │   │   │   ├── Sound.php
│   │   │   │   ├── SpellSound.php
│   │   │   │   ├── SplashSound.php
│   │   │   │   ├── TNTPrimeSound.php
│   │   │   │   ├── ZombieHealSound.php
│   │   │   │   └── ZombieInfectSound.php
│   │   │   └── weather/
│   │   │       └── Weather.php
│   │   ├── math/
│   │   │   ├── AxisAlignedBB.php
│   │   │   ├── Math.php
│   │   │   ├── Matrix.php
│   │   │   ├── Vector2.php
│   │   │   ├── Vector3.php
│   │   │   └── VectorMath.php
│   │   ├── metadata/
│   │   │   ├── BlockMetadataStore.php
│   │   │   ├── EntityMetadataStore.php
│   │   │   ├── LevelMetadataStore.php
│   │   │   ├── MetadataStore.php
│   │   │   ├── MetadataValue.php
│   │   │   ├── Metadatable.php
│   │   │   └── PlayerMetadataStore.php
│   │   ├── nbt/
│   │   │   ├── NBT.php
│   │   │   └── tag/
│   │   │       ├── ByteArrayTag.php
│   │   │       ├── ByteTag.php
│   │   │       ├── CompoundTag.php
│   │   │       ├── DoubleTag.php
│   │   │       ├── EndTag.php
│   │   │       ├── FloatTag.php
│   │   │       ├── IntArrayTag.php
│   │   │       ├── IntTag.php
│   │   │       ├── ListTag.php
│   │   │       ├── LongTag.php
│   │   │       ├── NamedTag.php
│   │   │       ├── ShortTag.php
│   │   │       ├── StringTag.php
│   │   │       └── Tag.php
│   │   ├── network/
│   │   │   ├── AdvancedSourceInterface.php
│   │   │   ├── CachedEncapsulatedPacket.php
│   │   │   ├── CompressBatchedTask.php
│   │   │   ├── Network.php
│   │   │   ├── RakLibInterface.php
│   │   │   ├── SourceInterface.php
│   │   │   ├── protocol/
│   │   │   │   ├── AddEntityPacket.php
│   │   │   │   ├── AddHangingEntityPacket.php
│   │   │   │   ├── AddItemEntityPacket.php
│   │   │   │   ├── AddItemPacket.php
│   │   │   │   ├── AddPaintingPacket.php
│   │   │   │   ├── AddPlayerPacket.php
│   │   │   │   ├── AdventureSettingsPacket.php
│   │   │   │   ├── AnimatePacket.php
│   │   │   │   ├── AvailableCommandsPacket.php
│   │   │   │   ├── BatchPacket.php
│   │   │   │   ├── BlockEntityDataPacket.php
│   │   │   │   ├── BlockEventPacket.php
│   │   │   │   ├── BossEventPacket.php
│   │   │   │   ├── CameraPacket.php
│   │   │   │   ├── ChangeDimensionPacket.php
│   │   │   │   ├── ChunkRadiusUpdatedPacket.php
│   │   │   │   ├── CommandStepPacket.php
│   │   │   │   ├── ContainerClosePacket.php
│   │   │   │   ├── ContainerOpenPacket.php
│   │   │   │   ├── ContainerSetContentPacket.php
│   │   │   │   ├── ContainerSetDataPacket.php
│   │   │   │   ├── ContainerSetSlotPacket.php
│   │   │   │   ├── CraftingDataPacket.php
│   │   │   │   ├── CraftingEventPacket.php
│   │   │   │   ├── DataPacket.php
│   │   │   │   ├── DisconnectPacket.php
│   │   │   │   ├── DropItemPacket.php
│   │   │   │   ├── EntityEventPacket.php
│   │   │   │   ├── ExplodePacket.php
│   │   │   │   ├── FullChunkDataPacket.php
│   │   │   │   ├── HurtArmorPacket.php
│   │   │   │   ├── Info.php
│   │   │   │   ├── InteractPacket.php
│   │   │   │   ├── InventoryActionPacket.php
│   │   │   │   ├── ItemFrameDropItemPacket.php
│   │   │   │   ├── LevelEventPacket.php
│   │   │   │   ├── LevelSoundEventPacket.php
│   │   │   │   ├── LoginPacket.php
│   │   │   │   ├── MobArmorEquipmentPacket.php
│   │   │   │   ├── MobEffectPacket.php
│   │   │   │   ├── MobEquipmentPacket.php
│   │   │   │   ├── MoveEntityPacket.php
│   │   │   │   ├── MovePlayerPacket.php
│   │   │   │   ├── PlayStatusPacket.php
│   │   │   │   ├── PlayerActionPacket.php
│   │   │   │   ├── PlayerFallPacket.php
│   │   │   │   ├── PlayerInputPacket.php
│   │   │   │   ├── PlayerListPacket.php
│   │   │   │   ├── RemoveBlockPacket.php
│   │   │   │   ├── RemoveEntityPacket.php
│   │   │   │   ├── ReplaceItemInSlotPacket.php
│   │   │   │   ├── RequestChunkRadiusPacket.php
│   │   │   │   ├── ResourcePackClientResponsePacket.php
│   │   │   │   ├── ResourcePacksInfoPacket.php
│   │   │   │   ├── RespawnPacket.php
│   │   │   │   ├── SetCommandsEnabledPacket.php
│   │   │   │   ├── SetDifficultyPacket.php
│   │   │   │   ├── SetEntityDataPacket.php
│   │   │   │   ├── SetEntityLinkPacket.php
│   │   │   │   ├── SetEntityMotionPacket.php
│   │   │   │   ├── SetHealthPacket.php
│   │   │   │   ├── SetPlayerGameTypePacket.php
│   │   │   │   ├── SetSpawnPositionPacket.php
│   │   │   │   ├── SetTimePacket.php
│   │   │   │   ├── ShowCreditsPacket.php
│   │   │   │   ├── SpawnExperienceOrbPacket.php
│   │   │   │   ├── StartGamePacket.php
│   │   │   │   ├── StrangePacket.php
│   │   │   │   ├── TakeItemEntityPacket.php
│   │   │   │   ├── TextPacket.php
│   │   │   │   ├── TransferPacket.php
│   │   │   │   ├── UpdateAttributesPacket.php
│   │   │   │   ├── UpdateBlockPacket.php
│   │   │   │   └── UseItemPacket.php
│   │   │   ├── query/
│   │   │   │   └── QueryHandler.php
│   │   │   ├── rcon/
│   │   │   │   ├── RCON.php
│   │   │   │   └── RCONInstance.php
│   │   │   └── upnp/
│   │   │       └── UPnP.php
│   │   ├── permission/
│   │   │   ├── BanEntry.php
│   │   │   ├── BanList.php
│   │   │   ├── DefaultPermissions.php
│   │   │   ├── Permissible.php
│   │   │   ├── PermissibleBase.php
│   │   │   ├── Permission.php
│   │   │   ├── PermissionAttachment.php
│   │   │   ├── PermissionAttachmentInfo.php
│   │   │   ├── PermissionRemovedExecutor.php
│   │   │   └── ServerOperator.php
│   │   ├── plugin/
│   │   │   ├── EventExecutor.php
│   │   │   ├── MethodEventExecutor.php
│   │   │   ├── PharPluginLoader.php
│   │   │   ├── Plugin.php
│   │   │   ├── PluginBase.php
│   │   │   ├── PluginDescription.php
│   │   │   ├── PluginLoadOrder.php
│   │   │   ├── PluginLoader.php
│   │   │   ├── PluginLogger.php
│   │   │   ├── PluginManager.php
│   │   │   ├── RegisteredListener.php
│   │   │   └── ScriptPluginLoader.php
│   │   ├── resourcepacks/
│   │   │   └── ResourcePackInfoEntry.php
│   │   ├── resources/
│   │   │   ├── command_default.json
│   │   │   ├── creativeitems.json
│   │   │   ├── genisys_chs.yml
│   │   │   ├── genisys_eng.yml
│   │   │   ├── genisys_kor.yml
│   │   │   ├── genisys_vie.yml
│   │   │   ├── genisys_zho.yml
│   │   │   ├── pocketmine.yml
│   │   │   └── recipes.json
│   │   ├── scheduler/
│   │   │   ├── AsyncPool.php
│   │   │   ├── AsyncTask.php
│   │   │   ├── AsyncWorker.php
│   │   │   ├── CallbackTask.php
│   │   │   ├── DServerTask.php
│   │   │   ├── FileWriteTask.php
│   │   │   ├── GarbageCollectionTask.php
│   │   │   ├── PluginTask.php
│   │   │   ├── SendUsageTask.php
│   │   │   ├── ServerScheduler.php
│   │   │   ├── Task.php
│   │   │   └── TaskHandler.php
│   │   ├── tile/
│   │   │   ├── Beacon.php
│   │   │   ├── BrewingStand.php
│   │   │   ├── Cauldron.php
│   │   │   ├── Chest.php
│   │   │   ├── Container.php
│   │   │   ├── DLDetector.php
│   │   │   ├── Dispenser.php
│   │   │   ├── Dropper.php
│   │   │   ├── EnchantTable.php
│   │   │   ├── EnderChest.php
│   │   │   ├── FlowerPot.php
│   │   │   ├── Furnace.php
│   │   │   ├── Hopper.php
│   │   │   ├── ItemFrame.php
│   │   │   ├── MobSpawner.php
│   │   │   ├── Nameable.php
│   │   │   ├── Sign.php
│   │   │   ├── Skull.php
│   │   │   ├── Spawnable.php
│   │   │   └── Tile.php
│   │   ├── utils/
│   │   │   ├── Binary.php
│   │   │   ├── BinaryStream.php
│   │   │   ├── BlockIterator.php
│   │   │   ├── ChunkException.php
│   │   │   ├── Color.php
│   │   │   ├── Config.php
│   │   │   ├── LevelException.php
│   │   │   ├── MainLogger.php
│   │   │   ├── MonkeyPatch.php
│   │   │   ├── Patchable.php
│   │   │   ├── PluginException.php
│   │   │   ├── Random.php
│   │   │   ├── Range.php
│   │   │   ├── ReversePriorityQueue.php
│   │   │   ├── ServerException.php
│   │   │   ├── ServerKiller.php
│   │   │   ├── Terminal.php
│   │   │   ├── TextFormat.php
│   │   │   ├── UUID.php
│   │   │   ├── Utils.php
│   │   │   ├── VectorIterator.php
│   │   │   └── VersionString.php
│   │   └── wizard/
│   │       ├── Installer.php
│   │       └── InstallerLang.php
│   ├── raklib/
│   │   ├── Binary.php
│   │   ├── RakLib.php
│   │   ├── protocol/
│   │   │   ├── ACK.php
│   │   │   ├── ADVERTISE_SYSTEM.php
│   │   │   ├── AcknowledgePacket.php
│   │   │   ├── CLIENT_CONNECT_DataPacket.php
│   │   │   ├── CLIENT_DISCONNECT_DataPacket.php
│   │   │   ├── CLIENT_HANDSHAKE_DataPacket.php
│   │   │   ├── DATA_PACKET_0.php
│   │   │   ├── DATA_PACKET_1.php
│   │   │   ├── DATA_PACKET_2.php
│   │   │   ├── DATA_PACKET_3.php
│   │   │   ├── DATA_PACKET_4.php
│   │   │   ├── DATA_PACKET_5.php
│   │   │   ├── DATA_PACKET_6.php
│   │   │   ├── DATA_PACKET_7.php
│   │   │   ├── DATA_PACKET_8.php
│   │   │   ├── DATA_PACKET_9.php
│   │   │   ├── DATA_PACKET_A.php
│   │   │   ├── DATA_PACKET_B.php
│   │   │   ├── DATA_PACKET_C.php
│   │   │   ├── DATA_PACKET_D.php
│   │   │   ├── DATA_PACKET_E.php
│   │   │   ├── DATA_PACKET_F.php
│   │   │   ├── DataPacket.php
│   │   │   ├── EncapsulatedPacket.php
│   │   │   ├── NACK.php
│   │   │   ├── OPEN_CONNECTION_REPLY_1.php
│   │   │   ├── OPEN_CONNECTION_REPLY_2.php
│   │   │   ├── OPEN_CONNECTION_REQUEST_1.php
│   │   │   ├── OPEN_CONNECTION_REQUEST_2.php
│   │   │   ├── PING_DataPacket.php
│   │   │   ├── PONG_DataPacket.php
│   │   │   ├── Packet.php
│   │   │   ├── PacketReliability.php
│   │   │   ├── SERVER_HANDSHAKE_DataPacket.php
│   │   │   ├── UNCONNECTED_PING.php
│   │   │   ├── UNCONNECTED_PING_OPEN_CONNECTIONS.php
│   │   │   └── UNCONNECTED_PONG.php
│   │   └── server/
│   │       ├── RakLibServer.php
│   │       ├── ServerHandler.php
│   │       ├── ServerInstance.php
│   │       ├── Session.php
│   │       ├── SessionManager.php
│   │       └── UDPServerSocket.php
│   └── spl/
│       ├── ArrayOutOfBoundsException.php
│       ├── AttachableLogger.php
│       ├── AttachableThreadedLogger.php
│       ├── BaseClassLoader.php
│       ├── ClassCastException.php
│       ├── ClassLoader.php
│       ├── ClassNotFoundException.php
│       ├── InvalidArgumentCountException.php
│       ├── InvalidKeyException.php
│       ├── InvalidStateException.php
│       ├── LogLevel.php
│       ├── Logger.php
│       ├── LoggerAttachment.php
│       ├── SplFixedByteArray.php
│       ├── StringOutOfBoundsException.php
│       ├── ThreadedLogger.php
│       ├── ThreadedLoggerAttachment.php
│       ├── UndefinedConstantException.php
│       ├── UndefinedPropertyException.php
│       └── UndefinedVariableException.php
├── start.cmd
└── start.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.iml
.idea/misc.xml
*.xml
.buildpath
.project
.settings/org.eclipse.php.core.prefs

================================================
FILE: CONTRIBUTING.md
================================================
![](http://cdn.pocketmine.net/img/PocketMine-MP-h.png)

# PocketMine-MP Contribution Guidelines

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 _#pmmp_ or _#pocketmine_ IRC channel on Freenode. There is a [WebIRC](http://webchat.freenode.net?channels=pmmp,pocketmine&uio=d4) if you do not want to install an IRC client.
* 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.

## Creating an Issue
* First, use the [Issue Search](https://github.com/pmmp/PocketMine-MP/search?ref=cmdform&type=Issues) to check if anyone has reported it. Check also closed issues, as an issue you think is valid may actually be invalid.
  * If an issue has been _fixed_ and closed, create another issue.
* If your issue is related to a plugin, do **not** report here. Contact the plugin's original author instead.
* **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. Please refer to the section [I have a quesetion](#i-have-a-question) instead.
* **No generic titles** such as "Question", "Help", "Crash Report" etc.
  * If you just got a crash report but you don't understand it, please look for a line starting with `Message`. It summarizes the bug.
* Information must be provided in the issue body, not in the title. No tags like `[BUG]` are allowed in the title, including `[SOLVED]` for solved issues.
* Similarly, no generic issue reports. For bugs, it is the issue author'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.
  * In simple words, if your issue does not appear to be a bug or a feature request, or if the issue cannot be properly confirmed to be valid, the issue will be closed until further information is provided.
* To express appreciation, objection, confusion or other supported reactions on pull requests, issues or comments on them, use GitHub [reactions](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments) rather than posting an individual comment with an emoji only. This helps keeping the issue/pull rqeuest conversation clean and readable.
* If your issue is related to the Pocketmine-MP website, forums, etc., please [talk to a human directly](#i-have-a-question).

## Contributing Code
* Use the [Pull Request](https://github.com/pmmp/PocketMine-MP/pull/new) system, your request will be checked and discussed.
* Create each pull request on a new branch. Do not create a pull request on commits that exist in another pull request.
* Code should use the same 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
* **Keep each pull request only contain one feature**. The only exception is when all features in the pull request are related to each other, and share the same core changes.
* **Do not create pull requests that only bump the MCPE version**. If it is ready to be updated, the team will update the values directly. Do not change the MCPE version or protocol version in a pull request, unless you have updated the protocol (all packets) entirely.

**Thanks for contributing to PocketMine-MP!**

### 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, 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 before or after them.
* Code MUST use tabs for indenting.
* Long arrays MAY be split across multiple lines, where each subsequent line is indented once. 
* Files MUST use only the `<?php` tag.
* Files MUST NOT have an ending `?>` tag.
* Code MUST use namespaces.
* Strings SHOULD use the double quote `"` except when the single quote is required.

```php
<?php 

namespace pocketmine\example;

class ExampleClass{
	const EXAMPLE_CLASS_CONSTANT = 1;
	public $examplePublicVariable = "defaultValue";
	private $examplePrivateVariable;
	
	/**
	 * Creates an instance of ExampleClass
	 * @param string      $firstArgument  the first argument
	 * @param string|null $secondArgument default null
	 */
	public function __construct($firstArgument, &$secondArgument = null){
		if($firstArgument === "exampleValue"){ //Remember to use === instead == when possible
			//do things
		}elseif($firstArgument === "otherValue"){
			$secondArgument = function(){
				$this->examplePrivateVariable = [
					0 => "value1",
					1 => "value2",
					2 => "value3",
					3 => "value4",
					4 => "value5",
					5 => "value6",
				];
			};
		}
	}

}
```

### RFC and Voting
* These are big Pull Requests or contributions that change important behavior.
* RFCs will be tagged with the *PR: RFC* label
* A vote will be held once the RFC is ready. All users can vote commenting on the Pull Request
* Comments MUST use "Yes" or "No" on the FIRST sentence to signify the vote, except when they don't want it to be counted.
* If your comment is a voting comment, specify the reason of your vote or it won't be counted.
* After voting has been closed, no further votes will be counted.
* An RFC will be rejected if less than 50% + 1 (simple majority) has voted Yes.
* If the RFC is approved, Team Members have the final word on its implementation or rejection.
* RFCs with complex voting options will specify the vote percentage or other details.


## 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 Labels to identify the types and status of issues and pull requests.

#### Categories
Category labels are prefixed by `Related:`. Multiple category labels may be applied to a single issue(but try to keep this to a minimum and do not overuse category labels).

* `Related: Core` - This label is applied when the bug results in a fatal crash, or is related to neither Gameplay nor Plugin API.
* `Related: Gameplay` - This label is applied when the bug effects the gameplay.
* `Related: Plugin 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: Addition - This label is applied when the Pull Request contributes new features or improvements, but does not fix a bug, nor controversial enough to be an RFC.
* PR: RFC - Request for Comments. Refer to [RFC and Voting](#rfc-and-voting).

#### Status
Status labels show the status of the issue. Multiple status labels may be applied.

* `Status: 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.
* `Status: Debugged` - This label is applied when the cause of the bug has been found.
* `Status: High Priority` - This label is applied when the bug is easy to fix, or if the scale of the bug is global.
* `Status: Insufficiently tested` - This label is applied for pull requests that have not undergone tests strict enough.

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

* `Affiliation: Mojang` - This label is applied when the issue is suspected of being caused by the Minecraft client, but has not been confirmed.
* `Affiliation: MCPE` - Same as `Affiliated: Mojang`, but only applied if the issue is only specific to the Pocket Edition (but not the Windows 10 Edition)
* `Affiliation: Windows 10` - Same as `Affiliated: Mojang`, but only applied if the issue is only specific to the Windows 10 Edition (but not the Pocket Edition)
* `Affiliation: Meta` - This label is applied for issues or pull requests that are related to this GitHub repo. **Still, do not report bugs related to other parts of PocketMine-MP.**
* `Category: Bug` - This label is applied to issues that are bugs, but not necessarily reproduced.
* `Category: 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.
* `Category: Protocol update` - This label is applied if the issue or pull request is related to client protocol updates.
* `Category: 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.*
* `Category: 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._

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


================================================
FILE: LICENSE
================================================
                   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

================================================
FILE: README.md
================================================
##Elywing has been discontinued. Thanks for everything !


================================================
FILE: src/pocketmine/Achievement.php
================================================
<?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;

use pocketmine\event\TranslationContainer;
use pocketmine\utils\TextFormat;

/**
 * Handles the achievement list and a bit more
 */
abstract class Achievement{
	/**
	 * @var array[]
	 */
	public static $list = [
		/*"openInventory" => array(
			"name" => "Taking Inventory",
			"requires" => [],
		),*/
		"mineWood" => [
			"name" => "Getting Wood",
			"requires" => [ //"openInventory",
			],
		],
		"buildWorkBench" => [
			"name" => "Benchmarking",
			"requires" => [
				"mineWood",
			],
		],
		"buildPickaxe" => [
			"name" => "Time to Mine!",
			"requires" => [
				"buildWorkBench",
			],
		],
		"buildFurnace" => [
			"name" => "Hot Topic",
			"requires" => [
				"buildPickaxe",
			],
		],
		"acquireIron" => [
			"name" => "Acquire hardware",
			"requires" => [
				"buildFurnace",
			],
		],
		"buildHoe" => [
			"name" => "Time to Farm!",
			"requires" => [
				"buildWorkBench",
			],
		],
		"makeBread" => [
			"name" => "Bake Bread",
			"requires" => [
				"buildHoe",
			],
		],
		"bakeCake" => [
			"name" => "The Lie",
			"requires" => [
				"buildHoe",
			],
		],
		"buildBetterPickaxe" => [
			"name" => "Getting an Upgrade",
			"requires" => [
				"buildPickaxe",
			],
		],
		"buildSword" => [
			"name" => "Time to Strike!",
			"requires" => [
				"buildWorkBench",
			],
		],
		"diamonds" => [
			"name" => "DIAMONDS!",
			"requires" => [
				"acquireIron",
			],
		],

	];


	public static function broadcast(Player $player, $achievementId){
		if(isset(Achievement::$list[$achievementId])){
			$translation = new TranslationContainer("chat.type.achievement", [$player->getDisplayName(), TextFormat::GREEN . Achievement::$list[$achievementId]["name"]]);
			if(Server::getInstance()->getConfigString("announce-player-achievements", true) === true){
				Server::getInstance()->broadcastMessage($translation);
			}else{
				$player->sendMessage($translation);
			}

			return true;
		}

		return false;
	}

	public static function add($achievementId, $achievementName, array $requires = []){
		if(!isset(Achievement::$list[$achievementId])){
			Achievement::$list[$achievementId] = [
				"name" => $achievementName,
				"requires" => $requires,
			];

			return true;
		}

		return false;
	}


}


================================================
FILE: src/pocketmine/Collectable.php
================================================
<?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;

abstract class Collectable extends \Threaded implements \Collectable{

	private $isGarbage = false;

	public function isGarbage() : bool{
		return $this->isGarbage;
	}

	public function setGarbage(){
		$this->isGarbage = true;
	}
}


================================================
FILE: src/pocketmine/CompatibleClassLoader.php
================================================
<?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 CompatibleClassLoader extends \BaseClassLoader{

}

================================================
FILE: src/pocketmine/CrashDump.php
================================================
<?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;

use pocketmine\network\protocol\Info;
use pocketmine\plugin\PluginBase;
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->getCrashPath() . "CrashDump_" . date("D_M_j-H.i.s-T_Y", $this->time) . ".log";
		$this->fp = @fopen($this->path, "wb");
		if(!is_resource($this->fp)){
			throw new \RuntimeException("Could not create Crash Dump");
		}
		$this->data["time"] = $this->time;
		$this->addLine($this->server->getName() . " Crash Dump " . date("D M j H:i:s T Y", $this->time));
		$this->addLine();
		try{
			$this->baseCrash();
		}catch(\Exception $e){
			//Attempt to fix incomplete crashdumps
			$this->addLine("CrashDump crashed while generating base crash data");
			$this->addLine();
		}
		
		$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(3);
			$errorConversion = [
				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(PluginBase::class);
			$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"]["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("Genisys version: " . \pocketmine\GIT_COMMIT . " [Protocol " . Info::CURRENT_PROTOCOL . "; API " . API_VERSION . "]");
		$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());
		$this->addLine();
		$this->addLine("Server uptime: " . $this->server->getUptime());
		$this->addLine("Number of loaded worlds: " . count($this->server->getLevels()));
		$this->addLine("Players online: ".count($this->server->getOnlinePlayers())."/".$this->server->getMaxPlayers());
	}

	public function addLine($line = ""){
		fwrite($this->fp, $line . PHP_EOL);
	}

	public function add($str){
		fwrite($this->fp, $str);
	}

}


================================================
FILE: src/pocketmine/IPlayer.php
================================================
<?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;

use pocketmine\permission\ServerOperator;

interface IPlayer extends ServerOperator{

	/**
	 * @return bool
	 */
	public function isOnline();

	/**
	 * @return string
	 */
	public function getName();

	/**
	 * @return bool
	 */
	public function isBanned();

	/**
	 * @param bool $banned
	 */
	public function setBanned($banned);

	/**
	 * @return bool
	 */
	public function isWhitelisted();

	/**
	 * @param bool $value
	 */
	public function setWhitelisted($value);

	/**
	 * @return Player|null
	 */
	public function getPlayer();

	/**
	 * @return int|double
	 */
	public function getFirstPlayed();

	/**
	 * @return int|double
	 */
	public function getLastPlayed();

	/**
	 * @return mixed
	 */
	public function hasPlayedBefore();

}


================================================
FILE: src/pocketmine/MemoryManager.php
================================================
<?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;

use pocketmine\event\server\LowMemoryEvent;
use pocketmine\event\Timings;
use pocketmine\scheduler\GarbageCollectionTask;
use pocketmine\utils\Utils;


class MemoryManager{

	/** @var Server */
	private $server;

	private $memoryLimit;
	private $globalMemoryLimit;
	private $checkRate;
	private $checkTicker = 0;
	private $lowMemory = false;

	private $continuousTrigger = true;
	private $continuousTriggerRate;
	private $continuousTriggerCount = 0;
	private $continuousTriggerTicker = 0;

	private $garbageCollectionPeriod;
	private $garbageCollectionTicker = 0;
	private $garbageCollectionTrigger;
	private $garbageCollectionAsync;

	private $chunkLimit;
	private $chunkCollect;
	private $chunkTrigger;

	private $chunkCache;
	private $cacheTrigger;

	/** @var \WeakRef[] */
	private $leakWatch = [];

	private $leakInfo = [];

	private $leakSeed = 0;

	public function __construct(Server $server){
		$this->server = $server;

		$this->init();
	}

	private function init(){
		$this->memoryLimit = ((int) $this->server->getProperty("memory.main-limit", 0)) * 1024 * 1024;

		$defaultMemory = 1024;

		if(preg_match("/([0-9]+)([KMGkmg])/", $this->server->getConfigString("memory-limit", ""), $matches) > 0){
			$m = (int) $matches[1];
			if($m <= 0){
				$defaultMemory = 0;
			}else{
				switch(strtoupper($matches[2])){
					case "K":
						$defaultMemory = $m / 1024;
						break;
					case "M":
						$defaultMemory = $m;
						break;
					case "G":
						$defaultMemory = $m * 1024;
						break;
					default:
						$defaultMemory = $m;
						break;
				}
			}
		}

		$hardLimit = ((int) $this->server->getProperty("memory.main-hard-limit", $defaultMemory));

		if($hardLimit <= 0){
			ini_set("memory_limit", -1);
		}else{
			ini_set("memory_limit", $hardLimit . "M");
		}

		$this->globalMemoryLimit = ((int) $this->server->getProperty("memory.global-limit", 0)) * 1024 * 1024;
		$this->checkRate = (int) $this->server->getProperty("memory.check-rate", 20);
		$this->continuousTrigger = (bool) $this->server->getProperty("memory.continuous-trigger", true);
		$this->continuousTriggerRate = (int) $this->server->getProperty("memory.continuous-trigger-rate", 30);

		$this->garbageCollectionPeriod = (int) $this->server->getProperty("memory.garbage-collection.period", 36000);
		$this->garbageCollectionTrigger = (bool) $this->server->getProperty("memory.garbage-collection.low-memory-trigger", true);
		$this->garbageCollectionAsync = (bool) $this->server->getProperty("memory.garbage-collection.collect-async-worker", true);

		$this->chunkLimit = (int) $this->server->getProperty("memory.max-chunks.trigger-limit", 96);
		$this->chunkCollect = (bool) $this->server->getProperty("memory.max-chunks.trigger-chunk-collect", true);
		$this->chunkTrigger = (bool) $this->server->getProperty("memory.max-chunks.low-memory-trigger", true);

		$this->chunkCache = (bool) $this->server->getProperty("memory.world-caches.disable-chunk-cache", true);
		$this->cacheTrigger = (bool) $this->server->getProperty("memory.world-caches.low-memory-trigger", true);

		gc_enable();
	}

	public function isLowMemory(){
		return $this->lowMemory;
	}

	public function canUseChunkCache(){
		return !($this->lowMemory and $this->chunkTrigger);
	}

	public function getViewDistance($distance){
		return $this->lowMemory ? min($this->chunkLimit, $distance) : $distance;
	}

	public function trigger($memory, $limit, $global = false, $triggerCount = 0){
		$this->server->getLogger()->debug("[Memory Manager] ".($global ? "Global " : "") ."Low memory triggered, limit ". round(($limit / 1024) / 1024, 2)."MB, using ". round(($memory / 1024) / 1024, 2)."MB");

		if($this->cacheTrigger){
			foreach($this->server->getLevels() as $level){
				$level->clearCache(true);
			}
		}

		if($this->chunkTrigger and $this->chunkCollect){
			foreach($this->server->getLevels() as $level){
				$level->doChunkGarbageCollection();
			}
		}

		$ev = new LowMemoryEvent($memory, $limit, $global, $triggerCount);
		$this->server->getPluginManager()->callEvent($ev);

		$cycles = 0;
		if($this->garbageCollectionTrigger){
			$cycles = $this->triggerGarbageCollector();
		}

		$this->server->getLogger()->debug("[Memory Manager] Freed " . round(($ev->getMemoryFreed() / 1024) / 1024, 2)."MB, $cycles cycles");
	}

	public function check(){
		Timings::$memoryManagerTimer->startTiming();

		if(($this->memoryLimit > 0 or $this->globalMemoryLimit > 0) and ++$this->checkTicker >= $this->checkRate){
			$this->checkTicker = 0;
			$memory = Utils::getMemoryUsage(true);
			$trigger = false;
			if($this->memoryLimit > 0 and $memory[0] > $this->memoryLimit){
				$trigger = 0;
			}elseif($this->globalMemoryLimit > 0 and $memory[1] > $this->globalMemoryLimit){
				$trigger = 1;
			}

			if($trigger !== false){
				if($this->lowMemory and $this->continuousTrigger){
					if(++$this->continuousTriggerTicker >= $this->continuousTriggerRate){
						$this->continuousTriggerTicker = 0;
						$this->trigger($memory[$trigger], $this->memoryLimit, $trigger > 0, ++$this->continuousTriggerCount);
					}
				}else{
					$this->lowMemory = true;
					$this->continuousTriggerCount = 0;
					$this->trigger($memory[$trigger], $this->memoryLimit, $trigger > 0);
				}
			}else{
				$this->lowMemory = false;
			}
		}

		if($this->garbageCollectionPeriod > 0 and ++$this->garbageCollectionTicker >= $this->garbageCollectionPeriod){
			$this->garbageCollectionTicker = 0;
			$this->triggerGarbageCollector();
		}

		Timings::$memoryManagerTimer->stopTiming();
	}

	public function triggerGarbageCollector(){
		Timings::$garbageCollectorTimer->startTiming();

		if($this->garbageCollectionAsync){
			$size = $this->server->getScheduler()->getAsyncTaskPoolSize();
			for($i = 0; $i < $size; ++$i){
				$this->server->getScheduler()->scheduleAsyncTaskToWorker(new GarbageCollectionTask(), $i);
			}
		}

		$cycles = gc_collect_cycles();

		foreach($this->server->getLevels() as $level){
			$level->doChunkGarbageCollection();
		}

		Timings::$garbageCollectorTimer->stopTiming();

		return $cycles;
	}

	/**
	 * @param object $object
	 *
	 * @return string Object identifier for future checks
	 */
	public function addObjectWatcher($object){
		if(!is_object($object)){
			throw new \InvalidArgumentException("Not an object!");
		}


		$identifier = spl_object_hash($object) . ":" . get_class($object);

		if(isset($this->leakInfo[$identifier])){
			return $this->leakInfo["id"];
		}

		$this->leakInfo[$identifier] = [
			"id" => $id = md5($identifier . ":" . $this->leakSeed++),
			"class" => get_class($object),
			"hash" => $identifier
		];
		$this->leakInfo[$id] = $this->leakInfo[$identifier];

		$this->leakWatch[$id] = new \WeakRef($object);

		return $id;
	}

	public function isObjectAlive($id){
		if(isset($this->leakWatch[$id])){
			return $this->leakWatch[$id]->valid();
		}

		return false;
	}

	public function removeObjectWatch($id){
		if(!isset($this->leakWatch[$id])){
			return;
		}
		unset($this->leakInfo[$this->leakInfo[$id]["hash"]]);
		unset($this->leakInfo[$id]);
		unset($this->leakWatch[$id]);
	}

	public function doObjectCleanup(){
		foreach($this->leakWatch as $id => $w){
			if(!$w->valid()){
				$this->removeObjectWatch($id);
			}
		}
	}

	public function getObjectInformation($id, $includeObject = false){
		if(!isset($this->leakWatch[$id])){
			return null;
		}

		$valid = false;
		$references = 0;
		$object = null;

		if($this->leakWatch[$id]->acquire()){
			$object = $this->leakWatch[$id]->get();
			$this->leakWatch[$id]->release();

			$valid = true;
			$references = getReferenceCount($object, false);
		}

		return [
			"id" => $id,
			"class" => $this->leakInfo[$id]["class"],
			"hash" => $this->leakInfo[$id]["hash"],
			"valid" => $valid,
			"references" => $references,
			"object" => $includeObject ? $object : null
		];
	}

	public function dumpServerMemory($outputFolder, $maxNesting, $maxStringSize){
		gc_disable();
		ini_set("memory_limit",-1);
		if(!file_exists($outputFolder)){
			mkdir($outputFolder, 0777, true);
		}
		$this->server->getLogger()->notice("[Dump] After the memory dump is done, the server will shut down");

		$obData = fopen($outputFolder . "/objects.js", "wb+");

		$staticProperties = [];

		$data = [];

		$objects = [];

		$refCounts = [];

		$this->continueDump($this->server, $data, $objects, $refCounts, 0, $maxNesting, $maxStringSize);

		do{
			$continue = false;
			foreach($objects as $hash => $object){
				if(!is_object($object)){
					continue;
				}
				$continue = true;

				$className = get_class($object);

				$objects[$hash] = true;

				$reflection = new \ReflectionObject($object);

				$info = [
					"information" => "$hash@$className",
					"properties" => []
				];

				if($reflection->getParentClass()){
					$info["parent"] = $reflection->getParentClass()->getName();
				}

				if(count($reflection->getInterfaceNames()) > 0){
					$info["implements"] = implode(", ", $reflection->getInterfaceNames());
				}

				foreach($reflection->getProperties() as $property){
					if($property->isStatic()){
						continue;
					}

					if(!$property->isPublic()){
						$property->setAccessible(true);
					}
					$this->continueDump($property->getValue($object), $info["properties"][$property->getName()], $objects, $refCounts, 0, $maxNesting, $maxStringSize);
				}

				fwrite($obData, "$hash@$className: ". json_encode($info, JSON_UNESCAPED_SLASHES) . "\n");

				if(!isset($objects["staticProperties"][$className])){
					$staticProperties[$className] = [];
					foreach($reflection->getProperties() as $property){
						if(!$property->isStatic() or $property->getDeclaringClass()->getName() !== $className){
							continue;
						}

						if(!$property->isPublic()){
							$property->setAccessible(true);
						}
						$this->continueDump($property->getValue($object), $staticProperties[$className][$property->getName()], $objects, $refCounts, 0, $maxNesting, $maxStringSize);
					}
				}
			}

			echo "[Dump] Wrote " . count($objects) . " objects\n";
		}while($continue);

		file_put_contents($outputFolder . "/staticProperties.js", json_encode($staticProperties, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
		file_put_contents($outputFolder . "/serverEntry.js", json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
		file_put_contents($outputFolder . "/referenceCounts.js", json_encode($refCounts, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));

		echo "[Dump] Finished!\n";

		gc_enable();

		$this->server->forceShutdown();
	}

	private function continueDump($from, &$data, &$objects, &$refCounts, $recursion, $maxNesting, $maxStringSize){
		if($maxNesting <= 0){
			$data = "(error) NESTING LIMIT REACHED";
			return;
		}

		--$maxNesting;

		if(is_object($from)){
			if(!isset($objects[$hash = spl_object_hash($from)])){
				$objects[$hash] = $from;
				$refCounts[$hash] = 0;
			}

			++$refCounts[$hash];

			$data = "(object) $hash@" . get_class($from);
		}elseif(is_array($from)){
			if($recursion >= 5){
				$data = "(error) ARRAY RECURSION LIMIT REACHED";
				return;
			}
			$data = [];
			foreach($from as $key => $value){
				$this->continueDump($value, $data[$key], $objects, $refCounts, $recursion + 1, $maxNesting, $maxStringSize);
			}
		}elseif(is_string($from)){
			$data = "(string) len(". strlen($from) .") " . substr(Utils::printable($from), 0, $maxStringSize);
		}elseif(is_resource($from)){
			$data = "(resource) " . print_r($from, true);
		}else{
			$data = $from;
		}
	}
}

================================================
FILE: src/pocketmine/OfflinePlayer.php
================================================
<?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;


use pocketmine\metadata\MetadataValue;
use pocketmine\metadata\Metadatable;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\plugin\Plugin;

class OfflinePlayer implements IPlayer, Metadatable{

	private $name;
	private $server;
	private $namedtag;

	/**
	 * @param Server $server
	 * @param string $name
	 */
	public function __construct(Server $server, $name){
		$this->server = $server;
		$this->name = $name;
		if(file_exists($this->server->getDataPath() . "players/" . strtolower($this->getName()) . ".dat")){
			$this->namedtag = $this->server->getOfflinePlayerData($this->name);
		}else{
			$this->namedtag = null;
		}
	}

	public function isOnline(){
		return $this->getPlayer() !== null;
	}

	public function getName(){
		return $this->name;
	}

	public function getServer(){
		return $this->server;
	}

	public function isOp(){
		return $this->server->isOp(strtolower($this->getName()));
	}

	public function setOp($value){
		if($value === $this->isOp()){
			return;
		}

		if($value === true){
			$this->server->addOp(strtolower($this->getName()));
		}else{
			$this->server->removeOp(strtolower($this->getName()));
		}
	}

	public function isBanned(){
		return $this->server->getNameBans()->isBanned(strtolower($this->getName()));
	}

	public function setBanned($value){
		if($value === true){
			$this->server->getNameBans()->addBan($this->getName(), null, null, null);
		}else{
			$this->server->getNameBans()->remove($this->getName());
		}
	}

	public function isWhitelisted(){
		return $this->server->isWhitelisted(strtolower($this->getName()));
	}

	public function setWhitelisted($value){
		if($value === true){
			$this->server->addWhitelist(strtolower($this->getName()));
		}else{
			$this->server->removeWhitelist(strtolower($this->getName()));
		}
	}

	public function getPlayer(){
		return $this->server->getPlayerExact($this->getName());
	}

	public function getFirstPlayed(){
		return $this->namedtag instanceof CompoundTag ? $this->namedtag["firstPlayed"] : null;
	}

	public function getLastPlayed(){
		return $this->namedtag instanceof CompoundTag ? $this->namedtag["lastPlayed"] : null;
	}

	public function hasPlayedBefore(){
		return $this->namedtag instanceof CompoundTag;
	}

	public function setMetadata($metadataKey, MetadataValue $metadataValue){
		$this->server->getPlayerMetadata()->setMetadata($this, $metadataKey, $metadataValue);
	}

	public function getMetadata($metadataKey){
		return $this->server->getPlayerMetadata()->getMetadata($this, $metadataKey);
	}

	public function hasMetadata($metadataKey){
		return $this->server->getPlayerMetadata()->hasMetadata($this, $metadataKey);
	}

	public function removeMetadata($metadataKey, Plugin $plugin){
		$this->server->getPlayerMetadata()->removeMetadata($this, $metadataKey, $plugin);
	}


}


================================================
FILE: src/pocketmine/Player.php
================================================
<?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;

use pocketmine\block\Air;
use pocketmine\block\Block;
use pocketmine\block\Fire;
use pocketmine\block\PressurePlate;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\entity\Animal;
use pocketmine\entity\Arrow;
use pocketmine\entity\Attribute;
use pocketmine\entity\Boat;
use pocketmine\entity\Effect;
use pocketmine\entity\Entity;
use pocketmine\entity\FishingHook;
use pocketmine\entity\Human;
use pocketmine\entity\Item as DroppedItem;
use pocketmine\entity\Living;
use pocketmine\entity\Minecart;
use pocketmine\entity\Projectile;
use pocketmine\entity\ThrownExpBottle;
use pocketmine\entity\ThrownPotion;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\event\block\ItemFrameDropItemEvent;
use pocketmine\event\block\SignChangeEvent;
use pocketmine\event\entity\EntityCombustByEntityEvent;
use pocketmine\event\entity\EntityDamageByBlockEvent;
use pocketmine\event\entity\EntityDamageByEntityEvent;
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityShootBowEvent;
use pocketmine\event\entity\ProjectileLaunchEvent;
use pocketmine\event\inventory\CraftItemEvent;
use pocketmine\event\inventory\InventoryCloseEvent;
use pocketmine\event\inventory\InventoryPickupArrowEvent;
use pocketmine\event\inventory\InventoryPickupItemEvent;
use pocketmine\event\player\PlayerExhaustEvent;
use pocketmine\event\player\PlayerTextPreSendEvent;
use pocketmine\event\player\PlayerAchievementAwardedEvent;
use pocketmine\event\player\PlayerAnimationEvent;
use pocketmine\event\player\PlayerBedEnterEvent;
use pocketmine\event\player\PlayerBedLeaveEvent;
use pocketmine\event\player\PlayerChatEvent;
use pocketmine\event\player\PlayerCommandPreprocessEvent;
use pocketmine\event\player\PlayerDeathEvent;
use pocketmine\event\player\PlayerDropItemEvent;
use pocketmine\event\player\PlayerGameModeChangeEvent;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\player\PlayerItemConsumeEvent;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\event\player\PlayerKickEvent;
use pocketmine\event\player\PlayerLoginEvent;
use pocketmine\event\player\PlayerMoveEvent;
use pocketmine\event\player\PlayerPreLoginEvent;
use pocketmine\event\player\PlayerQuitEvent;
use pocketmine\event\player\PlayerRespawnEvent;
use pocketmine\event\player\PlayerToggleFlightEvent;
use pocketmine\event\player\PlayerToggleSneakEvent;
use pocketmine\event\player\PlayerToggleSprintEvent;
use pocketmine\event\player\PlayerUseFishingRodEvent;
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\event\server\DataPacketSendEvent;
use pocketmine\event\player\PlayerToggleGlideEvent;
use pocketmine\event\TextContainer;
use pocketmine\event\Timings;
use pocketmine\event\TranslationContainer;
use pocketmine\inventory\AnvilInventory;
use pocketmine\inventory\BaseTransaction;
use pocketmine\inventory\BigShapedRecipe;
use pocketmine\inventory\BigShapelessRecipe;
use pocketmine\inventory\DropItemTransaction;
use pocketmine\inventory\EnchantInventory;
use pocketmine\inventory\FurnaceInventory;
use pocketmine\inventory\Inventory;
use pocketmine\inventory\InventoryHolder;
use pocketmine\inventory\ShapedRecipe;
use pocketmine\inventory\ShapelessRecipe;
use pocketmine\item\enchantment\Enchantment;
use pocketmine\item\Item;
use pocketmine\item\Elytra;
use pocketmine\level\ChunkLoader;
use pocketmine\level\format\Chunk;
use pocketmine\level\Level;
use pocketmine\level\Location;
use pocketmine\level\Position;
use pocketmine\level\sound\LaunchSound;
use pocketmine\level\WeakPosition;
use pocketmine\math\AxisAlignedBB;
use pocketmine\math\Vector2;
use pocketmine\math\Vector3;
use pocketmine\metadata\MetadataValue;
use pocketmine\nbt\NBT;
use pocketmine\nbt\tag\ByteTag;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\nbt\tag\DoubleTag;
use pocketmine\nbt\tag\ListTag;
use pocketmine\nbt\tag\FloatTag;
use pocketmine\nbt\tag\IntTag;
use pocketmine\nbt\tag\LongTag;
use pocketmine\nbt\tag\ShortTag;
use pocketmine\nbt\tag\StringTag;
use pocketmine\network\Network;
use pocketmine\network\protocol\AdventureSettingsPacket;
use pocketmine\network\protocol\AnimatePacket;
use pocketmine\network\protocol\AvailableCommandsPacket;
use pocketmine\network\protocol\BatchPacket;
use pocketmine\network\protocol\ChunkRadiusUpdatedPacket;
use pocketmine\network\protocol\ContainerSetContentPacket;
use pocketmine\network\protocol\ChangeDimensionPacket;
use pocketmine\network\protocol\DataPacket;
use pocketmine\network\protocol\DisconnectPacket;
use pocketmine\network\protocol\EntityEventPacket;
use pocketmine\network\protocol\FullChunkDataPacket;
use pocketmine\network\protocol\Info as ProtocolInfo;
use pocketmine\network\protocol\InteractPacket;
use pocketmine\network\protocol\MovePlayerPacket;
use pocketmine\network\protocol\PlayerActionPacket;
use pocketmine\network\protocol\PlayStatusPacket;
use pocketmine\network\protocol\ResourcePacksInfoPacket;
use pocketmine\network\protocol\RespawnPacket;
use pocketmine\network\protocol\SetEntityMotionPacket;
use pocketmine\network\protocol\SetSpawnPositionPacket;
use pocketmine\network\protocol\SetTimePacket;
use pocketmine\network\protocol\StartGamePacket;
use pocketmine\network\protocol\SetPlayerGameTypePacket;
use pocketmine\network\protocol\TakeItemEntityPacket;
use pocketmine\network\protocol\TextPacket;
use pocketmine\network\protocol\UpdateAttributesPacket;
use pocketmine\network\protocol\UpdateBlockPacket;
use pocketmine\network\SourceInterface;
use pocketmine\permission\PermissibleBase;
use pocketmine\permission\PermissionAttachment;
use pocketmine\plugin\Plugin;
use pocketmine\tile\ItemFrame;
use pocketmine\tile\Spawnable;
use pocketmine\tile\Tile;
use pocketmine\utils\Binary;
use pocketmine\utils\TextFormat;
use pocketmine\utils\UUID;

/**
 * Main class that handles networking, recovery, and packet sending to the server part
 */
class Player extends Human implements CommandSender, InventoryHolder, ChunkLoader, IPlayer{

	const SURVIVAL = 0;
	const CREATIVE = 1;
	const ADVENTURE = 2;
	const SPECTATOR = 3;
	const VIEW = Player::SPECTATOR;

	const CRAFTING_SMALL = 0;
	const CRAFTING_BIG = 1;
	const CRAFTING_ANVIL = 2;
	const CRAFTING_ENCHANT = 3;

	/** @var SourceInterface */
	protected $interface;

	/** @var bool */
	public $playedBefore = false;
	public $spawned = false;
	public $loggedIn = false;
	public $gamemode;
	public $lastBreak;

	protected $windowCnt = 2;
	/** @var \SplObjectStorage<Inventory> */
	protected $windows;
	/** @var Inventory[] */
	protected $windowIndex = [];

	protected $messageCounter = 2;

	protected $sendIndex = 0;

	private $clientSecret;

	/** @var Vector3 */
	public $speed = null;

	public $blocked = false;
	public $achievements = [];
	public $lastCorrect;

	public $craftingType = self::CRAFTING_SMALL; //0 = 2x2 crafting, 1 = 3x3 crafting, 2 = anvil, 3 = enchanting

	protected $isCrafting = false;

	public $creationTime = 0;

	protected $randomClientId;

	protected $protocol;

	protected $lastMovement = 0;
	/** @var Vector3 */
	protected $forceMovement = null;
	/** @var Vector3 */
	protected $teleportPosition = null;
	protected $connected = true;
	protected $ip;
	protected $removeFormat = false;
	protected $port;
	protected $username;
	protected $iusername;
	protected $displayName;
	protected $deviceModel;
	protected $startAction = -1;
	/** @var Vector3 */
	protected $sleeping = null;
	protected $clientID = null;

	private $loaderId = null;

	protected $stepHeight = 0.6;

	public $usedChunks = [];
	protected $chunkLoadCount = 0;
	protected $loadQueue = [];
	protected $nextChunkOrderRun = 5;

	/** @var Player[] */
	protected $hiddenPlayers = [];

	/** @var Vector3 */
	protected $newPosition;

	protected $viewDistance;
	protected $chunksPerTick;
	protected $spawnThreshold;
	/** @var null|WeakPosition */
	private $spawnPosition = null;

	protected $inAirTicks = 0;
	protected $startAirTicks = 5;

	//TODO: Abilities
	protected $autoJump = true;
	protected $allowFlight = false;
	protected $flying = false;

	private $needACK = [];

	private $batchedPackets = [];

	/** @var PermissibleBase */
	private $perm = null;

	public $weatherData = [0, 0, 0];

	/** @var Vector3 */
	public $fromPos = null;
	private $portalTime = 0;
	protected $shouldSendStatus = false;
	/** @var  Position */
	private $shouldResPos;

	/** @var FishingHook */
	public $fishingHook = null;

	/** @var Position[] */
	public $selectedPos = [];
	/** @var Level[] */
	public $selectedLev = [];

	/** @var Item[] */
	protected $personalCreativeItems = [];

	public function linkHookToPlayer(FishingHook $entity){
		if($entity->isAlive()){
			$this->setFishingHook($entity);
			$pk = new EntityEventPacket();
			$pk->eid = $this->getFishingHook()->getId();
			$pk->event = EntityEventPacket::FISH_HOOK_POSITION;
			$this->server->broadcastPacket($this->level->getPlayers(), $pk);
			return true;
		}
		return false;
	}

	public function unlinkHookFromPlayer(){
		if($this->fishingHook instanceof FishingHook){
			$pk = new EntityEventPacket();
			$pk->eid = $this->fishingHook->getId();
			$pk->event = EntityEventPacket::FISH_HOOK_TEASE;
			$this->server->broadcastPacket($this->level->getPlayers(), $pk);
			$this->setFishingHook();
			return true;
		}
		return false;
	}

	public function isFishing(){
		return ($this->fishingHook instanceof FishingHook);
	}

	public function getFishingHook(){
		return $this->fishingHook;
	}

	public function setFishingHook(FishingHook $entity = null){
		if($entity == null and $this->fishingHook instanceof FishingHook){
			$this->fishingHook->close();
		}
		$this->fishingHook = $entity;
	}

	public function getItemInHand(){
		return $this->inventory->getItemInHand();
	}

	public function getLeaveMessage(){
		return new TranslationContainer(TextFormat::YELLOW . "%multiplayer.player.left", [
			$this->getDisplayName()
		]);
	}

	/**
	 * @deprecated Use Human::setTotalXp($xp), this method will be removed in the future.
	 */
	public function setExperienceAndLevel(int $exp, int $level){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return $this->setTotalXp(self::getTotalXpRequirement($level) + $exp);
	}

	/**
	 * @deprecated Use Human::setTotalXp($xp), this method will be removed in the future.
	 */
	public function setExp(int $exp){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return $this->setTotalXp($exp);
	}

	/**
	 * @deprecated Use Human::setXpLevel($level), this method will be removed in the future.
	 */
	public function setExpLevel(int $level){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return $this->setXpLevel($level);
	}

	/**
	 * @deprecated Use Human::getTotalXpRequirement($level), this method will be removed in the future.
	 */
	public function getExpectedExperience(){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return self::getTotalXpRequirement($this->getXpLevel() + 1);
	}

	/**
	 * @deprecated Use Human::getLevelXpRequirement($level), this method will be removed in the future.
	 */
	public function getLevelUpExpectedExperience(){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return self::getLevelXpRequirement($this->getXpLevel() + 1);
	}

	/**
	 * @deprecated
	 */
	public function calcExpLevel(){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
	}

	/**
	 * @deprecated Use Human::addXp($xp), this method will be removed in the future.
	 */
	public function addExperience(int $exp){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return $this->addXp($exp);
	}

	/**
	 * @deprecated Use Human::addXpLevel(), this method will be removed in the future.
	 */
	public function addExpLevel(int $level){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return $this->addXpLevel($level);
	}

	/**
	 * @deprecated Use Human::getTotalXp(), this method will be removed in the future.
	 */
	public function getExp(){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return $this->getTotalXp();
	}

	/**
	 * @deprecated Use Human::getXpLevel(), this method will be removed in the future.
	 */
	public function getExpLevel(){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return $this->getXpLevel();
	}

	/**
	 * @deprecated Use Human::canPickupXp(), this method will be removed in the future.
	 */
	public function canPickupExp(): bool{
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		return $this->canPickupXp();
	}

	/**
	 * @deprecated Use Human::resetXpCooldown(), this method will be removed in the future.
	 */
	public function resetExpCooldown(){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
		$this->resetXpCooldown();
	}

	/**
	 * @deprecated
	 */
	public function updateExperience(){
		trigger_error("This method is deprecated, do not use it", E_USER_DEPRECATED);
	}

	/**
	 * This might disappear in the future.
	 * Please use getUniqueId() instead (IP + clientId + name combo, in the future it'll change to real UUID for online
	 * auth)
	 */
	public function getClientId(){
		return $this->randomClientId;
	}
	
	public function getDeviceModel(){
		return $this->deviceModel;
	}

	public function getClientSecret(){
		return $this->clientSecret;
	}

	public function isBanned(){
		return $this->server->getNameBans()->isBanned(strtolower($this->getName()));
	}

	public function setBanned($value){
		if($value === true){
			$this->server->getNameBans()->addBan($this->getName(), null, null, null);
			$this->kick(TextFormat::RED . "You have been banned");
		}else{
			$this->server->getNameBans()->remove($this->getName());
		}
	}

	public function isWhitelisted() : bool{
		return $this->server->isWhitelisted(strtolower($this->getName()));
	}

	public function setWhitelisted($value){
		if($value === true){
			$this->server->addWhitelist(strtolower($this->getName()));
		}else{
			$this->server->removeWhitelist(strtolower($this->getName()));
		}
	}

	public function getPlayer(){
		return $this;
	}

	public function getFirstPlayed(){
		return $this->namedtag instanceof CompoundTag ? $this->namedtag["firstPlayed"] : null;
	}

	public function getLastPlayed(){
		return $this->namedtag instanceof CompoundTag ? $this->namedtag["lastPlayed"] : null;
	}

	public function hasPlayedBefore(){
		return $this->playedBefore;
	}

	public function setAllowFlight($value){
		$this->allowFlight = (bool) $value;
		$this->sendSettings();
	}

	public function usingElytra() {
 		if ($this->getInventory()->getChestplate() instanceof Elytra) {
 			return true;
 		}
 		return false;
 	}
 
	public function getAllowFlight() : bool{
		return $this->allowFlight;
	}

	public function setFlying(bool $value){
		$this->flying = $value;
		$this->sendSettings();
	}

	public function isFlying() : bool{
		return $this->flying;
	}

	public function setAutoJump($value){
		$this->autoJump = $value;
		$this->sendSettings();
	}

	public function hasAutoJump() : bool{
		return $this->autoJump;
	}

	/**
	 * @param Player $player
	 */
	public function spawnTo(Player $player){
		if($this->spawned and $player->spawned and $this->isAlive() and $player->isAlive() and $player->getLevel() === $this->level and $player->canSee($this) and !$this->isSpectator()){
			parent::spawnTo($player);
		}
	}

	/**
	 * @return Server
	 */
	public function getServer(){
		return $this->server;
	}

	/**
	 * @return bool
	 */
	public function getRemoveFormat(){
		return $this->removeFormat;
	}

	/**
	 * @param bool $remove
	 */
	public function setRemoveFormat($remove = true){
		$this->removeFormat = (bool) $remove;
	}

	/**
	 * @param Player $player
	 *
	 * @return bool
	 */
	public function canSee(Player $player) : bool{
		return !isset($this->hiddenPlayers[$player->getRawUniqueId()]);
	}

	/**
	 * @param Player $player
	 */
	public function hidePlayer(Player $player){
		if($player === $this){
			return;
		}
		$this->hiddenPlayers[$player->getRawUniqueId()] = $player;
		$player->despawnFrom($this);
	}

	/**
	 * @param Player $player
	 */
	public function showPlayer(Player $player){
		if($player === $this){
			return;
		}
		unset($this->hiddenPlayers[$player->getRawUniqueId()]);
		if($player->isOnline()){
			$player->spawnTo($this);
		}
	}

	public function canCollideWith(Entity $entity) : bool{
		return false;
	}

	public function resetFallDistance(){
		parent::resetFallDistance();
		if($this->inAirTicks !== 0){
			$this->startAirTicks = 5;
		}
		$this->inAirTicks = 0;
	}

	/**
	 * @return bool
	 */
	public function isOnline() : bool{
		return $this->connected === true and $this->loggedIn === true;
	}

	/**
	 * @return bool
	 */
	public function isOp() : bool{
		return $this->server->isOp($this->getName());
	}

	/**
	 * @param bool $value
	 */
	public function setOp($value){
		if($value === $this->isOp()){
			return;
		}

		if($value === true){
			$this->server->addOp($this->getName());
		}else{
			$this->server->removeOp($this->getName());
		}

		$this->recalculatePermissions();
		$this->sendSettings();
	}

	/**
	 * @param permission\Permission|string $name
	 *
	 * @return bool
	 */
	public function isPermissionSet($name){
		return $this->perm->isPermissionSet($name);
	}

	/**
	 * @param permission\Permission|string $name
	 *
	 * @return bool
	 */
	public function hasPermission($name) : bool{
		if($this->perm == null) return false;else return $this->perm->hasPermission($name);
	}

	/**
	 * @param Plugin $plugin
	 * @param string $name
	 * @param bool   $value
	 *
	 * @return permission\PermissionAttachment
	 */
	public function addAttachment(Plugin $plugin, $name = null, $value = null){
		if($this->perm == null) return false;
		return $this->perm->addAttachment($plugin, $name, $value);
	}


	/**
	 * @param PermissionAttachment $attachment
	 * @return bool
	 */
	public function removeAttachment(PermissionAttachment $attachment){
		if($this->perm == null){
			return false;
		}
		$this->perm->removeAttachment($attachment);
		return true;
	}

	public function recalculatePermissions(){
		$this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this);
		$this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this);

		if($this->perm === null){
			return;
		}

		$this->perm->recalculatePermissions();

		if($this->hasPermission(Server::BROADCAST_CHANNEL_USERS)){
			$this->server->getPluginManager()->subscribeToPermission(Server::BROADCAST_CHANNEL_USERS, $this);
		}
		if($this->hasPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE)){
			$this->server->getPluginManager()->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this);
		}

		$this->sendCommandData();
	}

	/**
	 * @return permission\PermissionAttachmentInfo[]
	 */
	public function getEffectivePermissions(){
		return $this->perm->getEffectivePermissions();
	}

	public function sendCommandData(){
		$data = new \stdClass();
		$count = 0;
		foreach($this->server->getCommandMap()->getCommands() as $command){
			if(($cmdData = $command->generateCustomCommandData($this)) !== null){
				++$count;
				$data->{$command->getName()}->versions[0] = $cmdData;
			}
		}

		if($count > 0){
			//TODO: structure checking
			$pk = new AvailableCommandsPacket();
			$pk->commands = json_encode($data);
			$this->dataPacket($pk);
		}
	}

	/**
	 * @param SourceInterface $interface
	 * @param null            $clientID
	 * @param string          $ip
	 * @param int             $port
	 */
	public function __construct(SourceInterface $interface, $clientID, $ip, $port){
		$this->interface = $interface;
		$this->windows = new \SplObjectStorage();
		$this->perm = new PermissibleBase($this);
		$this->namedtag = new CompoundTag();
		$this->server = Server::getInstance();
		$this->lastBreak = PHP_INT_MAX;
		$this->ip = $ip;
		$this->port = $port;
		$this->clientID = $clientID;
		$this->loaderId = Level::generateChunkLoaderId($this);
		$this->chunksPerTick = (int) $this->server->getProperty("chunk-sending.per-tick", 4);
		$this->spawnThreshold = (int) $this->server->getProperty("chunk-sending.spawn-threshold", 56);
		$this->spawnPosition = null;
		$this->gamemode = $this->server->getGamemode();
		$this->setLevel($this->server->getDefaultLevel());
		$this->viewDistance = $this->server->getViewDistance();
		$this->newPosition = new Vector3(0, 0, 0);
		$this->boundingBox = new AxisAlignedBB(0, 0, 0, 0, 0, 0);

		$this->uuid = null;
		$this->rawUUID = null;

		$this->creationTime = microtime(true);

		$this->exp = 0;
		$this->expLevel = 0;
		$this->food = 20;
		Entity::setHealth(20);
	}

	/**
	 * @param string $achievementId
	 */
	public function removeAchievement($achievementId){
		if($this->hasAchievement($achievementId)){
			$this->achievements[$achievementId] = false;
		}
	}

	/**
	 * @param string $achievementId
	 *
	 * @return bool
	 */
	public function hasAchievement($achievementId) : bool{
		if(!isset(Achievement::$list[$achievementId]) or !isset($this->achievements)){
			$this->achievements = [];

			return false;
		}

		return isset($this->achievements[$achievementId]) and $this->achievements[$achievementId] != false;
	}

	/**
	 * @return bool
	 */
	public function isConnected() : bool{
		return $this->connected === true;
	}

	/**
	 * Gets the "friendly" name to display of this player to use in the chat.
	 *
	 * @return string
	 */
	public function getDisplayName(){
		return $this->displayName;
	}

	/**
	 * @param string $name
	 */
	public function setDisplayName($name){
		$this->displayName = $name;
		if($this->spawned){
			$this->server->updatePlayerListData($this->getUniqueId(), $this->getId(), $this->getDisplayName(), $this->getSkinId(), $this->getSkinData());
		}
	}

	public function setSkin($str, $skinId){
		parent::setSkin($str, $skinId);
		if($this->spawned){
			$this->server->updatePlayerListData($this->getUniqueId(), $this->getId(), $this->getDisplayName(), $skinId, $str);
		}
	}

	/**
	 * Gets the player IP address
	 *
	 * @return string
	 */
	public function getAddress() : string{
		return $this->ip;
	}

	/**
	 * @return int
	 */
	public function getPort() : int{
		return $this->port;
	}

	public function getNextPosition(){
		return $this->newPosition !== null ? new Position($this->newPosition->x, $this->newPosition->y, $this->newPosition->z, $this->level) : $this->getPosition();
	}

	/**
	 * @return bool
	 */
	public function isSleeping() : bool{
		return $this->sleeping !== null;
	}

	public function getInAirTicks(){
		return $this->inAirTicks;
	}

	protected function switchLevel(Level $targetLevel){
		$oldLevel = $this->level;
		if(parent::switchLevel($targetLevel)){
			foreach($this->usedChunks as $index => $d){
				Level::getXZ($index, $X, $Z);
				$this->unloadChunk($X, $Z, $oldLevel);
			}

			$this->usedChunks = [];
			$pk = new SetTimePacket();
			$pk->time = $this->level->getTime();
			$pk->started = $this->level->stopTime == false;
			$this->dataPacket($pk);

			if($targetLevel->getDimension() != $oldLevel->getDimension()){
				$pk = new ChangeDimensionPacket();
				$pk->dimension = $targetLevel->getDimension();
				$pk->x = $this->x;
				$pk->y = $this->y;
				$pk->z = $this->z;
				$this->dataPacket($pk);
				$this->shouldSendStatus = true;
			}
			$targetLevel->getWeather()->sendWeather($this);

			if($this->spawned){
				$this->spawnToAll();
			}
		}
	}

	private function unloadChunk($x, $z, Level $level = null){
		$level = $level === null ? $this->level : $level;
		$index = Level::chunkHash($x, $z);
		if(isset($this->usedChunks[$index])){
			$chunk = $level->getChunk($x, $z);
			foreach($chunk->getEntities() as $entity){
				if($entity !== $this){
					$entity->despawnFrom($this);
				}
			}
			
			if($level !== $this->level){
				$pk = new FullChunkDataPacket();
				$pk->chunkX = $x;
				$pk->chunkZ = $z;
				$pk->data = chr($chunk->getSubChunkSendCount());
				$this->dataPacket($pk);
			}

			unset($this->usedChunks[$index]);
		}
		$level->unregisterChunkLoader($this, $x, $z);
		unset($this->loadQueue[$index]);
	}

	/**
	 * @return Position
	 */
	public function getSpawn(){
		if($this->hasValidSpawnPosition()){
			return $this->spawnPosition;
		}else{
			$level = $this->server->getDefaultLevel();

			return $level->getSafeSpawn();
		}
	}

	/**
	 * @return bool
	 */
	public function hasValidSpawnPosition() : bool{
		return $this->spawnPosition instanceof WeakPosition and $this->spawnPosition->isValid();
	}

	public function sendChunk($x, $z, $payload){
		if($this->connected === false){
			return;
		}

		$this->usedChunks[Level::chunkHash($x, $z)] = true;
		$this->chunkLoadCount++;

		if($payload instanceof DataPacket){
			$this->dataPacket($payload);
		}else{
			$pk = new FullChunkDataPacket();
			$pk->chunkX = $x;
			$pk->chunkZ = $z;
			$pk->data = $payload;
			$this->batchDataPacket($pk);
		}

		if($this->spawned){
			foreach($this->level->getChunkEntities($x, $z) as $entity){
				if($entity !== $this and !$entity->closed and $entity->isAlive()){
					$entity->spawnTo($this);
				}
			}
		}
	}

	protected function sendNextChunk(){
		if($this->connected === false){
			return;
		}

		Timings::$playerChunkSendTimer->startTiming();

		$count = 0;
		foreach($this->loadQueue as $index => $distance){
			if($count >= $this->chunksPerTick){
				break;
			}

			$X = null;
			$Z = null;
			Level::getXZ($index, $X, $Z);

			++$count;

			$this->usedChunks[$index] = false;
			$this->level->registerChunkLoader($this, $X, $Z, true);

			if(!$this->level->populateChunk($X, $Z)){
				if($this->spawned and $this->teleportPosition === null){
					continue;
				}else{
					break;
				}
			}

			unset($this->loadQueue[$index]);
			$this->level->requestChunk($X, $Z, $this);
			if((count($this->loadQueue) == 0) and $this->shouldSendStatus){
				$this->shouldSendStatus = false;

				$pk = new PlayStatusPacket();
				$pk->status = PlayStatusPacket::PLAYER_SPAWN;
				$this->dataPacket($pk);

				/*$pk = new RespawnPacket();
				$pk->x = $this->x;
				$pk->y = $this->y;
				$pk->z = $this->z;
				$this->dataPacket($pk);*/
			}
		}

		if($this->chunkLoadCount >= $this->spawnThreshold and $this->spawned === false and $this->teleportPosition === null){
			$this->doFirstSpawn();
		}

		Timings::$playerChunkSendTimer->stopTiming();
	}

	protected function doFirstSpawn(){
		$this->spawned = true;

		$this->sendPotionEffects($this);
		$this->sendData($this);

		$pk = new SetTimePacket();
		$pk->time = $this->level->getTime();
		$pk->started = $this->level->stopTime == false;
		$this->dataPacket($pk);

		$pos = $this->level->getSafeSpawn($this);

		$this->server->getPluginManager()->callEvent($ev = new PlayerRespawnEvent($this, $pos));

		$pos = $ev->getRespawnPosition();
		if($pos->getY() < 127) $pos = $pos->add(0, 0.2, 0);

		/*$pk = new RespawnPacket();
		$pk->x = $pos->x;
		$pk->y = $pos->y;
		$pk->z = $pos->z;
		$this->dataPacket($pk);*/

		$pk = new PlayStatusPacket();
		$pk->status = PlayStatusPacket::PLAYER_SPAWN;
		$this->dataPacket($pk);

		$this->noDamageTicks = 60;

		foreach($this->usedChunks as $index => $c){
			Level::getXZ($index, $chunkX, $chunkZ);
			foreach($this->level->getChunkEntities($chunkX, $chunkZ) as $entity){
				if($entity !== $this and !$entity->closed and $entity->isAlive()){
					$entity->spawnTo($this);
				}
			}
		}

		$this->teleport($pos);

		$this->allowFlight = (($this->gamemode == 3) or ($this->gamemode == 1));
		$this->setHealth($this->getHealth());

		$this->server->getPluginManager()->callEvent($ev = new PlayerJoinEvent($this, new TranslationContainer(TextFormat::YELLOW . "%multiplayer.player.joined", [
			$this->getDisplayName()
		])));

		$this->sendSettings();

		if(strlen(trim($msg = $ev->getJoinMessage())) > 0){
			if($this->server->playerMsgType === Server:: PLAYER_MSG_TYPE_MESSAGE) $this->server->broadcastMessage($msg);
			elseif($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_TIP) $this->server->broadcastTip(str_replace("@player", $this->getName(), $this->server->playerLoginMsg));
			elseif($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_POPUP) $this->server->broadcastPopup(str_replace("@player", $this->getName(), $this->server->playerLoginMsg));
		}

		$this->server->onPlayerLogin($this);
		$this->spawnToAll();

		$this->level->getWeather()->sendWeather($this);

		if($this->server->dserverConfig["enable"] and $this->server->dserverConfig["queryAutoUpdate"]){
			$this->server->updateQuery();
		}

		/*if($this->server->getUpdater()->hasUpdate() and $this->hasPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE)){
			$this->server->getUpdater()->showPlayerUpdate($this);
		}*/

		if($this->getHealth() <= 0){
			$pk = new RespawnPacket();
			$pos = $this->getSpawn();
			$pk->x = $pos->x;
			$pk->y = $pos->y;
			$pk->z = $pos->z;
			$this->dataPacket($pk);
		}

		$this->inventory->sendContents($this);
		$this->inventory->sendArmorContents($this);
	}

	protected function orderChunks(){
		if($this->connected === false){
			return false;
		}

		Timings::$playerChunkOrderTimer->startTiming();

		$this->nextChunkOrderRun = 200;

		$viewDistance = $this->server->getMemoryManager()->getViewDistance($this->viewDistance);

		$newOrder = [];
		$lastChunk = $this->usedChunks;

		$centerX = $this->x >> 4;
		$centerZ = $this->z >> 4;

		$layer = 1;
		$leg = 0;
		$x = 0;
		$z = 0;

		for($i = 0; $i < $viewDistance; ++$i){

			$chunkX = $x + $centerX;
			$chunkZ = $z + $centerZ;

			if(!isset($this->usedChunks[$index = Level::chunkHash($chunkX, $chunkZ)]) or $this->usedChunks[$index] === false){
				$newOrder[$index] = true;
			}
			unset($lastChunk[$index]);

			switch($leg){
				case 0:
					++$x;
					if($x === $layer){
						++$leg;
					}
					break;
				case 1:
					++$z;
					if($z === $layer){
						++$leg;
					}
					break;
				case 2:
					--$x;
					if(-$x === $layer){
						++$leg;
					}
					break;
				case 3:
					--$z;
					if(-$z === $layer){
						$leg = 0;
						++$layer;
					}
					break;
			}
		}

		foreach($lastChunk as $index => $bool){
			Level::getXZ($index, $X, $Z);
			$this->unloadChunk($X, $Z);
		}

		$this->loadQueue = $newOrder;


		Timings::$playerChunkOrderTimer->stopTiming();

		return true;
	}

	/**
	 * Batch a Data packet into the channel list to send at the end of the tick
	 *
	 * @param DataPacket $packet
	 *
	 * @return bool
	 */
	public function batchDataPacket(DataPacket $packet){
		if($this->connected === false){
			return false;
		}

		$timings = Timings::getSendDataPacketTimings($packet);
		$timings->startTiming();
		$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
		if($ev->isCancelled()){
			$timings->stopTiming();
			return false;
		}

		if(!isset($this->batchedPackets)){
			$this->batchedPackets = [];
		}

		$this->batchedPackets[] = clone $packet;
		$timings->stopTiming();
		return true;
	}

	/**
	 * Sends an ordered DataPacket to the send buffer
	 *
	 * @param DataPacket $packet
	 * @param bool       $needACK
	 *
	 * @return int|bool
	 */
	public function dataPacket(DataPacket $packet, $needACK = false){
		if(!$this->connected){
			return false;
		}

		$timings = Timings::getSendDataPacketTimings($packet);
		$timings->startTiming();

		$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
		if($ev->isCancelled()){
			$timings->stopTiming();
			return false;
		}

		$identifier = $this->interface->putPacket($this, $packet, $needACK, false);

		if($needACK and $identifier !== null){
			$this->needACK[$identifier] = false;

			$timings->stopTiming();
			return $identifier;
		}

		$timings->stopTiming();
		return true;
	}

	/**
	 * @param DataPacket $packet
	 * @param bool       $needACK
	 *
	 * @return bool|int
	 */
	public function directDataPacket(DataPacket $packet, $needACK = false){
		if($this->connected === false){
			return false;
		}

		$timings = Timings::getSendDataPacketTimings($packet);
		$timings->startTiming();
		$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
		if($ev->isCancelled()){
			$timings->stopTiming();
			return false;
		}

		$identifier = $this->interface->putPacket($this, $packet, $needACK, true);

		if($needACK and $identifier !== null){
			$this->needACK[$identifier] = false;

			$timings->stopTiming();
			return $identifier;
		}

		$timings->stopTiming();
		return true;
	}

	/**
	 * @param Vector3 $pos
	 *
	 * @return boolean
	 */
	public function sleepOn(Vector3 $pos){
		if(!$this->isOnline()){
			return false;
		}

		foreach($this->level->getNearbyEntities($this->boundingBox->grow(2, 1, 2), $this) as $p){
			if($p instanceof Player){
				if($p->sleeping !== null and $pos->distance($p->sleeping) <= 0.1){
					return false;
				}
			}
		}

		$this->server->getPluginManager()->callEvent($ev = new PlayerBedEnterEvent($this, $this->level->getBlock($pos)));
		if($ev->isCancelled()){
			return false;
		}

		$this->sleeping = clone $pos;

		$this->setDataProperty(self::DATA_PLAYER_BED_POSITION, self::DATA_TYPE_POS, [$pos->x, $pos->y, $pos->z]);
		$this->setDataFlag(self::DATA_PLAYER_FLAGS, self::DATA_PLAYER_FLAG_SLEEP, true, self::DATA_TYPE_BYTE);

		$this->setSpawn($pos);

		$this->level->sleepTicks = 60;


		return true;
	}

	/**
	 * Sets the spawnpoint of the player (and the compass direction) to a Vector3, or set it on another world with a
	 * Position object
	 *
	 * @param Vector3|Position $pos
	 */
	public function setSpawn(Vector3 $pos){
		if(!($pos instanceof Position)){
			$level = $this->level;
		}else{
			$level = $pos->getLevel();
		}
		$this->spawnPosition = new WeakPosition($pos->x, $pos->y, $pos->z, $level);
		$pk = new SetSpawnPositionPacket();
		$pk->x = (int) $this->spawnPosition->x;
		$pk->y = (int) $this->spawnPosition->y;
		$pk->z = (int) $this->spawnPosition->z;
		$this->dataPacket($pk);
	}

	public function stopSleep(){
		if($this->sleeping instanceof Vector3){
			$this->server->getPluginManager()->callEvent($ev = new PlayerBedLeaveEvent($this, $this->level->getBlock($this->sleeping)));

			$this->sleeping = null;
			$this->setDataProperty(self::DATA_PLAYER_BED_POSITION, self::DATA_TYPE_POS, [0, 0, 0]);
			$this->setDataFlag(self::DATA_PLAYER_FLAGS, self::DATA_PLAYER_FLAG_SLEEP, false, self::DATA_TYPE_BYTE);


			$this->level->sleepTicks = 0;

			$pk = new AnimatePacket();
			$pk->eid = 0;
			$pk->action = PlayerAnimationEvent::WAKE_UP;
			$this->dataPacket($pk);
		}

	}

	/**
	 * @param string $achievementId
	 *
	 * @return bool
	 */
	public function awardAchievement($achievementId){
		if(isset(Achievement::$list[$achievementId]) and !$this->hasAchievement($achievementId)){
			foreach(Achievement::$list[$achievementId]["requires"] as $requirementId){
				if(!$this->hasAchievement($requirementId)){
					return false;
				}
			}
			$this->server->getPluginManager()->callEvent($ev = new PlayerAchievementAwardedEvent($this, $achievementId));
			if(!$ev->isCancelled()){
				$this->achievements[$achievementId] = true;
				Achievement::broadcast($this, $achievementId);

				return true;
			}else{
				return false;
			}
		}

		return false;
	}

	/**
	 * @return int
	 */
	public function getGamemode() : int{
		return $this->gamemode;
	}

	/**
	 * Sets the gamemode, and if needed, kicks the Player.
	 *
	 * @param int  $gm
	 * @param bool $client if the client made this change in their GUI
	 *
	 * @return bool
	 */
	public function setGamemode(int $gm, bool $client = false){
		if($gm < 0 or $gm > 3 or $this->gamemode === $gm){
			return false;
		}

		$this->server->getPluginManager()->callEvent($ev = new PlayerGameModeChangeEvent($this, $gm));
		if($ev->isCancelled()){
			if($client){ //gamemode change by client in the GUI
				$pk = new SetPlayerGameTypePacket();
				$pk->gamemode = $this->gamemode & 0x01;
				$this->dataPacket($pk);
				$this->sendSettings();
			}
			return false;
		}

		if($this->server->autoClearInv){
			$this->inventory->clearAll();
		}

		$this->gamemode = $gm;

		$this->allowFlight = $this->isCreative();
		if($this->isSpectator()){
			$this->flying = true;
			$this->despawnFromAll();

			// Client automatically turns off flight controls when on the ground.
			// A combination of this hack and a new AdventureSettings flag FINALLY
			// fixes spectator flight controls. Thank @robske110 for this hack.
			$this->teleport($this->temporalVector->setComponents($this->x, $this->y + 0.1, $this->z));
		}else{
			if($this->isSurvival()){
				$this->flying = false;
			}
			$this->spawnToAll();
		}

		$this->resetFallDistance();

		$this->namedtag->playerGameType = new IntTag("playerGameType", $this->gamemode);

		if(!$client){ //Gamemode changed by server, do not send for client changes
			$pk = new SetPlayerGameTypePacket();
			$pk->gamemode = $this->gamemode & 0x01;
			$this->dataPacket($pk);
		}else{
			Command::broadcastCommandMessage($this, new TranslationContainer("commands.gamemode.success.self", [Server::getGamemodeString($gm)]));
		}

		if($this->gamemode === Player::SPECTATOR){
			$pk = new ContainerSetContentPacket();
			$pk->windowid = ContainerSetContentPacket::SPECIAL_CREATIVE;
			$this->dataPacket($pk);
		}else{
			$pk = new ContainerSetContentPacket();
			$pk->windowid = ContainerSetContentPacket::SPECIAL_CREATIVE;
			$pk->slots = array_merge(Item::getCreativeItems(), $this->personalCreativeItems);
			$this->dataPacket($pk);
		}

		$this->sendSettings();

		$this->inventory->sendContents($this);
		$this->inventory->sendContents($this->getViewers());
		$this->inventory->sendHeldItem($this->hasSpawned);
		return true;
	}

	/**
	 * Sends all the option flags
	 */
	public function sendSettings(){
		$pk = new AdventureSettingsPacket();
		$pk->flags = 0;
		$pk->worldImmutable = $this->isAdventure();
		$pk->autoJump = $this->autoJump;
		$pk->allowFlight = $this->allowFlight;
		$pk->noClip = $this->isSpectator();
		$pk->isFlying = $this->flying;
		$pk->userPermission = ($this->isOp() ? AdventureSettingsPacket::PERMISSION_OPERATOR : AdventureSettingsPacket::PERMISSION_NORMAL);
		$this->dataPacket($pk);
	}

	public function isSurvival() : bool{
		return ($this->gamemode & 0x01) === 0;
	}

	public function isCreative() : bool{
		return ($this->gamemode & 0x01) > 0;
	}

	public function isSpectator() : bool{
		return $this->gamemode === 3;
	}

	public function isAdventure() : bool{
		return ($this->gamemode & 0x02) > 0;
	}

	public function isFireProof() : bool{
		return $this->isCreative();
	}

	public function getDrops(){
		if(!$this->isCreative()){
			return parent::getDrops();
		}

		return [];
	}

	public function setDataProperty($id, $type, $value){
		if(parent::setDataProperty($id, $type, $value)){
			$this->sendData($this, [$id => $this->dataProperties[$id]]);
			return true;
		}

		return false;
	}

	protected function checkGroundState($movX, $movY, $movZ, $dx, $dy, $dz){
		if(!$this->onGround or $movY != 0){
			$bb = clone $this->boundingBox;
			$bb->maxY = $bb->minY + 0.5;
			$bb->minY -= 1;
			if(count($this->level->getCollisionBlocks($bb, true)) > 0){
				$this->onGround = true;
			}else{
				$this->onGround = false;
			}
		}
		$this->isCollided = $this->onGround;
	}

	protected function checkBlockCollision(){
		foreach($blocksaround = $this->getBlocksAround() as $block){
			$block->onEntityCollide($this);
			if($this->getServer()->redstoneEnabled){
				if($block instanceof PressurePlate){
					$this->activatedPressurePlates[Level::blockHash($block->x, $block->y, $block->z)] = $block;
				}
			}
		}

		if($this->getServer()->redstoneEnabled){
			/** @var \pocketmine\block\PressurePlate $block * */
			foreach($this->activatedPressurePlates as $key => $block){
				if(!isset($blocksaround[$key])) $block->checkActivation();
			}
		}
	}

	protected function checkNearEntities($tickDiff){
		foreach($this->level->getNearbyEntities($this->boundingBox->grow(0.5, 0.5, 0.5), $this) as $entity){
			$entity->scheduleUpdate();

			if(!$entity->isAlive()){
				continue;
			}

			if($entity instanceof Arrow and $entity->hadCollision){
				$item = Item::get(Item::ARROW, $entity->getPotionId(), 1);

				$add = false;
				if(!$this->server->allowInventoryCheats and !$this->isCreative()){
					if(!$this->getFloatingInventory()->canAddItem($item) or !$this->inventory->canAddItem($item)){
						//The item is added to the floating inventory to allow client to handle the pickup
						//We have to also check if it can be added to the real inventory before sending packets.
						continue;
					}
					$add = true;
				}

				$this->server->getPluginManager()->callEvent($ev = new InventoryPickupArrowEvent($this->inventory, $entity));
				if($ev->isCancelled()){
					continue;
				}

				$pk = new TakeItemEntityPacket();
				$pk->eid = $this->getId();
				$pk->target = $entity->getId();
				$this->server->broadcastPacket($entity->getViewers(), $pk);

				$pk = new TakeItemEntityPacket();
				$pk->eid = 0;
				$pk->target = $entity->getId();
				$this->dataPacket($pk);

				if($add){
					$this->getFloatingInventory()->addItem(clone $item);
				}
				$entity->kill();
			}elseif($entity instanceof DroppedItem){
				if($entity->getPickupDelay() <= 0){
					$item = $entity->getItem();

					if($item instanceof Item){
						$add = false;
						if(!$this->server->allowInventoryCheats and !$this->isCreative()){
							if(!$this->getFloatingInventory()->canAddItem($item) or !$this->inventory->canAddItem($item)){
								continue;
							}
							$add = true;
						}

						$this->server->getPluginManager()->callEvent($ev = new InventoryPickupItemEvent($this->inventory, $entity));
						if($ev->isCancelled()){
							continue;
						}

						switch($item->getId()){
							case Item::WOOD:
								$this->awardAchievement("mineWood");

								break;
							case Item::DIAMOND:
								$this->awardAchievement("diamond");
								break;
						}

						$pk = new TakeItemEntityPacket();
						$pk->eid = $this->getId();
						$pk->target = $entity->getId();
						$this->server->broadcastPacket($entity->getViewers(), $pk);

						$pk = new TakeItemEntityPacket();
						$pk->eid = 0;
						$pk->target = $entity->getId();
						$this->dataPacket($pk);

						if($add){
							$this->getFloatingInventory()->addItem(clone $item);
						}
						$entity->kill();
					}
				}
			}
		}
	}

	protected function processMovement($tickDiff){
		if(!$this->isAlive() or !$this->spawned or $this->newPosition === null or $this->teleportPosition !== null or $this->isSleeping()){
			$this->setMoving(false);
			return;
		}

		$newPos = $this->newPosition;
		$distanceSquared = $newPos->distanceSquared($this);

		$revert = false;

		if($this->server->checkMovement){
			if(($distanceSquared / ($tickDiff ** 2)) > 200){
				$revert = true;
			}else{
				if($this->chunk === null or !$this->chunk->isGenerated()){
					$chunk = $this->level->getChunk($newPos->x >> 4, $newPos->z >> 4, false);
					if($chunk === null or !$chunk->isGenerated()){
						$revert = true;
						$this->nextChunkOrderRun = 0;
					}else{
						if($this->chunk !== null){
							$this->chunk->removeEntity($this);
						}
						$this->chunk = $chunk;
					}
				}
			}
		}else{
			if($this->chunk === null or !$this->chunk->isGenerated()){
				$chunk = $this->level->getChunk($newPos->x >> 4, $newPos->z >> 4, false);
				if($chunk === null or !$chunk->isGenerated()){
					$revert = true;
					$this->nextChunkOrderRun = 0;
				}else{
					if($this->chunk !== null){
						$this->chunk->removeEntity($this);
					}
					$this->chunk = $chunk;
				}
			}
		}
	

		if(!$revert and $distanceSquared != 0){
			$dx = $newPos->x - $this->x;
			$dy = $newPos->y - $this->y;
			$dz = $newPos->z - $this->z;

			$this->move($dx, $dy, $dz);

			$diffX = $this->x - $newPos->x;
			$diffY = $this->y - $newPos->y;
			$diffZ = $this->z - $newPos->z;
			
			$yS = 0.5 + $this->ySize;
			if($diffY >= -$yS or $diffY <= $yS){
				$diffY = 0;
			}

			$diff = ($diffX ** 2 + $diffY ** 2 + $diffZ ** 2) / ($tickDiff ** 2);

			if($diff > 0){
				$this->x = $newPos->x;
				$this->y = $newPos->y;
				$this->z = $newPos->z;
				$radius = $this->width / 2;
				$this->boundingBox->setBounds($this->x - $radius, $this->y, $this->z - $radius, $this->x + $radius, $this->y + $this->height, $this->z + $radius);
			}
		}

		$from = new Location($this->lastX, $this->lastY, $this->lastZ, $this->lastYaw, $this->lastPitch, $this->level);
		$to = $this->getLocation();

		$delta = pow($this->lastX - $to->x, 2) + pow($this->lastY - $to->y, 2) + pow($this->lastZ - $to->z, 2);
		$deltaAngle = abs($this->lastYaw - $to->yaw) + abs($this->lastPitch - $to->pitch);

		if(!$revert and ($delta > (1 / 16) or $deltaAngle > 10)){

			$isFirst = ($this->lastX === null or $this->lastY === null or $this->lastZ === null);

			$this->lastX = $to->x;
			$this->lastY = $to->y;
			$this->lastZ = $to->z;

			$this->lastYaw = $to->yaw;
			$this->lastPitch = $to->pitch;

			if(!$isFirst){
				$ev = new PlayerMoveEvent($this, $from, $to);
				$this->setMoving(true);

				$this->server->getPluginManager()->callEvent($ev);

				if(!($revert = $ev->isCancelled())){ //Yes, this is intended
					if($this->server->netherEnabled){
						if($this->isInsideOfPortal()){
							if($this->portalTime == 0){
								$this->portalTime = $this->server->getTick();
							}
						}else{
							$this->portalTime = 0;
						}
					}

					if($to->distanceSquared($ev->getTo()) > 0.01){ //If plugins modify the destination
						$this->teleport($ev->getTo());
					}else{
						$this->addMovement($this->x, $this->y + $this->getEyeHeight(), $this->z, $this->yaw, $this->pitch, $this->yaw);
					}

					if($this->fishingHook instanceof FishingHook){
						if($this->distance($this->fishingHook) > 33 or $this->inventory->getItemInHand()->getId() !== Item::FISHING_ROD){
							$this->setFishingHook();
						}
					}
				}
			}

			if(!$this->isSpectator()){
				$this->checkNearEntities($tickDiff);
			}

			$this->speed = ($to->subtract($from))->divide($tickDiff);
		}elseif($distanceSquared == 0){
			$this->speed = new Vector3(0, 0, 0);
			$this->setMoving(false);
		}

		if($revert){

			$this->lastX = $from->x;
			$this->lastY = $from->y;
			$this->lastZ = $from->z;

			$this->lastYaw = $from->yaw;
			$this->lastPitch = $from->pitch;

			$this->sendPosition($from, $from->yaw, $from->pitch, MovePlayerPacket::MODE_RESET);
			$this->forceMovement = new Vector3($from->x, $from->y, $from->z);
		}else{
			$this->forceMovement = null;
			if($distanceSquared != 0 and $this->nextChunkOrderRun > 20){
				$this->nextChunkOrderRun = 20;
			}
		}

		$this->newPosition = null;
	}
	
	public function addMovement($x, $y, $z, $yaw, $pitch, $headYaw = null){
		if($this->chunk !== null){
			$this->level->addPlayerMovement($this->chunk->getX(), $this->chunk->getZ(), $this->id, $x, $y, $z, $yaw, $pitch, $this->onGround, $headYaw === null ? $yaw : $headYaw);
		}
	}

	public function setMotion(Vector3 $mot){
		if(parent::setMotion($mot)){
			if($this->chunk !== null){
				$this->level->addEntityMotion($this->chunk->getX(), $this->chunk->getZ(), $this->getId(), $this->motionX, $this->motionY, $this->motionZ);
				$pk = new SetEntityMotionPacket();
				$pk->eid = 0;
				$pk->motionX = $mot->x;
				$pk->motionY = $mot->y;
				$pk->motionZ = $mot->z;
				$this->dataPacket($pk);
			}

			if($this->motionY > 0){
				$this->startAirTicks = (-(log($this->gravity / ($this->gravity + $this->drag * $this->motionY))) / $this->drag) * 2 + 5;
			}

			return true;
		}
		return false;
	}


	protected function updateMovement(){

	}

	public $foodTick = 0;

	public $starvationTick = 0;

	public $foodUsageTime = 0;

	protected $moving = false;

	public function setMoving($moving){
		$this->moving = $moving;
	}

	public function isMoving() : bool{
		return $this->moving;
	}

	public function sendAttributes(bool $sendAll = false){
		$entries = $sendAll ? $this->attributeMap->getAll() : $this->attributeMap->needSend();
		if(count($entries) > 0){
			$pk = new UpdateAttributesPacket();
			$pk->entityId = 0;
			$pk->entries = $entries;
			$this->dataPacket($pk);
			foreach($entries as $entry){
				$entry->markSynchronized();
			}
		}
	}

	public function onUpdate($currentTick){
		if(!$this->loggedIn){
			return false;
		}

		$tickDiff = $currentTick - $this->lastUpdate;

		if($tickDiff <= 0){
			return true;
		}

		$this->messageCounter = 2;

		$this->lastUpdate = $currentTick;

		$this->sendAttributes();

		if(!$this->isAlive() and $this->spawned){
			++$this->deadTicks;
			if($this->deadTicks >= 10){
				$this->despawnFromAll();
			}
			return true;
		}

		$this->timings->startTiming();

		if($this->spawned){
			if($this->server->netherEnabled){
				if(($this->isCreative() or $this->isSurvival() and $this->server->getTick() - $this->portalTime >= 80) and $this->portalTime > 0){
					$netherLevel = null;
					if($this->server->isLevelLoaded($this->server->netherName) or $this->server->loadLevel($this->server->netherName)){
						$netherLevel = $this->server->getLevelByName($this->server->netherName);
					}

					if($netherLevel instanceof Level){
						if($this->getLevel() !== $netherLevel){
							$this->fromPos = $this->getPosition();
							$this->fromPos->x = ((int) $this->fromPos->x) + 0.5;
							$this->fromPos->z = ((int) $this->fromPos->z) + 0.5;
							$this->teleport($this->shouldResPos = $netherLevel->getSafeSpawn());
						}elseif($this->fromPos instanceof Position){
							if(!($this->getLevel()->isChunkLoaded($this->fromPos->x, $this->fromPos->z))){
								$this->getLevel()->loadChunk($this->fromPos->x, $this->fromPos->z);
							}
							$add = [1, 0, -1, 0, 0, 1, 0, -1];
							$tempos = null;
							for($j = 2; $j < 5; $j++){
								for($i = 0; $i < 4; $i++){
									if($this->fromPos->getLevel()->getBlock($this->temporalVector->fromObjectAdd($this->fromPos, $add[$i] * $j, 0, $add[$i + 4] * $j))->getId() === Block::AIR){
										if($this->fromPos->getLevel()->getBlock($this->temporalVector->fromObjectAdd($this->fromPos, $add[$i] * $j, 1, $add[$i + 4] * $j))->getId() === Block::AIR){
											$tempos = $this->fromPos->add($add[$i] * $j, 0, $add[$i + 4] * $j);
											//$this->getLevel()->getServer()->getLogger()->debug($tempos);
											break;
										}
									}
								}
								if($tempos != null){
									break;
								}
							}
							if($tempos === null){
								$tempos = $this->fromPos->add(mt_rand(-2, 2), 0, mt_rand(-2, 2));
							}
							$this->teleport($this->shouldResPos = $tempos);
							$add = null;
							$tempos = null;
							$this->fromPos = null;
						}else{
							$this->teleport($this->shouldResPos = $this->server->getDefaultLevel()->getSafeSpawn());
						}
						$this->portalTime = 0;
					}
				}
			}

			$this->processMovement($tickDiff);
			$this->entityBaseTick($tickDiff);

			if($this->isOnFire() or $this->lastUpdate % 10 == 0){
				if($this->isCreative() and !$this->isInsideOfFire()){
					$this->extinguish();
				}elseif($this->getLevel()->getWeather()->isRainy()){
					if($this->getLevel()->canBlockSeeSky($this)){
						$this->extinguish();
					}
				}
			}

			if($this->server->antiFly){
				if(!$this->isSpectator() and $this->speed !== null){
					if($this->onGround){
						if($this->inAirTicks !== 0){
							$this->startAirTicks = 5;
						}
						$this->inAirTicks = 0;
					}else{
						if(!$this->usingElytra() and !$this->allowFlight and $this->inAirTicks > 10 and !$this->isSleeping() and !$this->isImmobile()){
							//expectedVelocity here is not calculated correctly
							//This causes players to fall too fast when bouncing on slime when antiFly is enabled
							$expectedVelocity = (-$this->gravity) / $this->drag - ((-$this->gravity) / $this->drag) * exp(-$this->drag * ($this->inAirTicks - $this->startAirTicks));
							$diff = ($this->speed->y - $expectedVelocity) ** 2;
							if(!$this->hasEffect(Effect::JUMP) and $diff > 0.6 and $expectedVelocity < $this->speed->y and !$this->server->getAllowFlight()){
								$this->setMotion($this->temporalVector->setComponents(0, $expectedVelocity, 0));
							}
						}
						++$this->inAirTicks;
					}
				}
			}

			if($this->getTransactionQueue() !== null){
				$this->getTransactionQueue()->execute();
			}
		}

		$this->checkTeleportPosition();

		$this->timings->stopTiming();

		return true;
	}

	public function checkNetwork(){
		if(!$this->isOnline()){
			return;
		}

		if($this->nextChunkOrderRun-- <= 0 or $this->chunk === null){
			$this->orderChunks();
		}

		if(count($this->loadQueue) > 0 or !$this->spawned){
			$this->sendNextChunk();
		}

		if(count($this->batchedPackets) > 0){
			$this->server->batchPackets([$this], $this->batchedPackets, false);
			$this->batchedPackets = [];
		}

	}

	public function canInteract(Vector3 $pos, $maxDistance, $maxDiff = 0.5){
		$eyePos = $this->getPosition()->add(0, $this->getEyeHeight(), 0);
		if($eyePos->distanceSquared($pos) > $maxDistance ** 2){
			return false;
		}

		$dV = $this->getDirectionPlane();
		$dot = $dV->dot(new Vector2($eyePos->x, $eyePos->z));
		$dot1 = $dV->dot(new Vector2($pos->x, $pos->z));
		return ($dot1 - $dot) >= -$maxDiff;
	}

	public function onPlayerPreLogin(){
		$pk = new PlayStatusPacket();
		$pk->status = PlayStatusPacket::LOGIN_SUCCESS;
		$this->dataPacket($pk);

		$this->processLogin();
	}

	public function clearCreativeItems(){
		$this->personalCreativeItems = [];
	}

	public function getCreativeItems() : array{
		return $this->personalCreativeItems;
	}

	public function addCreativeItem(Item $item){
		$this->personalCreativeItems[] = Item::get($item->getId(), $item->getDamage());
	}

	public function removeCreativeItem(Item $item){
		$index = $this->getCreativeItemIndex($item);
		if($index !== -1){
			unset($this->personalCreativeItems[$index]);
		}
	}

	public function getCreativeItemIndex(Item $item) : int{
		foreach($this->personalCreativeItems as $i => $d){
			if($item->equals($d, !$item->isTool())){
				return $i;
			}
		}

		return -1;
	}

	protected function processLogin(){
		if(!$this->server->isWhitelisted(strtolower($this->getName()))){
			$this->close($this->getLeaveMessage(), "Server is white-listed");

			return;
		}elseif($this->server->getNameBans()->isBanned(strtolower($this->getName())) or $this->server->getIPBans()->isBanned($this->getAddress()) or $this->server->getCIDBans()->isBanned($this->randomClientId)){
			$this->close($this->getLeaveMessage(), TextFormat::RED . "You are banned");

			return;
		}

		if($this->hasPermission(Server::BROADCAST_CHANNEL_USERS)){
			$this->server->getPluginManager()->subscribeToPermission(Server::BROADCAST_CHANNEL_USERS, $this);
		}
		if($this->hasPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE)){
			$this->server->getPluginManager()->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this);
		}

		foreach($this->server->getOnlinePlayers() as $p){
			if($p !== $this and strtolower($p->getName()) === strtolower($this->getName())){
				if($p->kick("logged in from another location") === false){
					$this->close($this->getLeaveMessage(), "Logged in from another location");
					return;
				}
			}elseif($p->loggedIn and $this->getUniqueId()->equals($p->getUniqueId())){
				if($p->kick("logged in from another location") === false){
					$this->close($this->getLeaveMessage(), "Logged in from another location");
					return;
				}
			}
		}
		$this->setNameTag($this->getDisplayName());

		$nbt = $this->server->getOfflinePlayerData($this->username);
		$this->playedBefore = ($nbt["lastPlayed"] - $nbt["firstPlayed"]) > 1;
		if(!isset($nbt->NameTag)){
			$nbt->NameTag = new StringTag("NameTag", $this->username);
		}else{
			$nbt["NameTag"] = $this->username;
		}
		if(!isset($nbt->Hunger) or !isset($nbt->Health) or !isset($nbt->MaxHealth)){
			$nbt->Hunger = new ShortTag("Hunger", 20);
			$nbt->Health = new ShortTag("Health", 20);
			$nbt->MaxHealth = new ShortTag("MaxHealth", 20);
		}
		$this->food = $nbt["Hunger"];
		$this->setMaxHealth($nbt["MaxHealth"]);
		Entity::setHealth(($nbt["Health"] <= 0) ? 20 : $nbt["Health"]);

		$this->gamemode = $nbt["playerGameType"] & 0x03;
		if($this->server->getForceGamemode()){
			$this->gamemode = $this->server->getGamemode();
			$nbt->playerGameType = new IntTag("playerGameType", $this->gamemode);
		}

		$this->allowFlight = $this->isCreative();

		if(($level = $this->server->getLevelByName($nbt["Level"])) === null){
			$this->setLevel($this->server->getDefaultLevel());
			$nbt["Level"] = $this->level->getName();
			$nbt["Pos"][0] = $this->level->getSpawnLocation()->x;
			$nbt["Pos"][1] = $this->level->getSpawnLocation()->y;
			$nbt["Pos"][2] = $this->level->getSpawnLocation()->z;
		}else{
			$this->setLevel($level);
		}

		if(!($nbt instanceof CompoundTag)){
			$this->close($this->getLeaveMessage(), "Invalid data");

			return;
		}

		$this->achievements = [];

		/** @var ByteTag $achievement */
		foreach($nbt->Achievements as $achievement){
			$this->achievements[$achievement->getName()] = $achievement->getValue() > 0 ? true : false;
		}

		$nbt->lastPlayed = new LongTag("lastPlayed", floor(microtime(true) * 1000));
		if($this->server->getAutoSave()){
			$this->server->saveOfflinePlayerData($this->username, $nbt, true);
		}

		parent::__construct($this->level->getChunk($nbt["Pos"][0] >> 4, $nbt["Pos"][2] >> 4, true), $nbt);
		$this->loggedIn = true;
		$this->server->addOnlinePlayer($this);

		$this->server->getPluginManager()->callEvent($ev = new PlayerLoginEvent($this, "Plugin reason"));
		if($ev->isCancelled()){
			$this->close($this->getLeaveMessage(), $ev->getKickMessage());

			return;
		}

		if(!$this->isConnected()){
			return;
		}

		$this->dataPacket(new ResourcePacksInfoPacket());

		if(!$this->hasValidSpawnPosition() and isset($this->namedtag->SpawnLevel) and ($level = $this->server->getLevelByName($this->namedtag["SpawnLevel"])) instanceof Level){
			$this->spawnPosition = new WeakPosition($this->namedtag["SpawnX"], $this->namedtag["SpawnY"], $this->namedtag["SpawnZ"], $level);
		}
		$spawnPosition = $this->getSpawn();

		$pk = new StartGamePacket();
		$pk->entityUniqueId = 0;
		$pk->entityRuntimeId = 0;
		$pk->x = $this->x;
		$pk->y = $this->y;
		$pk->z = $this->z;
		$pk->seed = -1;
		$pk->dimension = $this->level->getDimension();
		$pk->gamemode = $this->gamemode & 0x01;
		$pk->difficulty = $this->server->getDifficulty();
		$pk->spawnX = $spawnPosition->getFloorX();
		$pk->spawnY = $spawnPosition->getFloorY();
		$pk->spawnZ = $spawnPosition->getFloorZ();
		$pk->hasBeenLoadedInCreative = 1;
		$pk->dayCycleStopTime = -1; //TODO: implement this properly
		$pk->eduMode = 0;
		$pk->rainLevel = 0; //TODO: implement these properly
		$pk->lightningLevel = 0;
		$pk->commandsEnabled = 1;
		$pk->unknown = "UNKNOWN";
		$pk->worldName = $this->server->getMotd();
		$this->dataPacket($pk);

		$pk = new SetTimePacket();
		$pk->time = $this->level->getTime();
		$pk->started = $this->level->stopTime == false;
		$this->dataPacket($pk);

		$this->sendAttributes(true);
		$this->setNameTagVisible(true);
		$this->setNameTagAlwaysVisible(true);

		$this->server->getLogger()->info($this->getServer()->getLanguage()->translateString("pocketmine.player.logIn", [
			TextFormat::AQUA . $this->username . TextFormat::WHITE,
			$this->ip,
			$this->port,
			TextFormat::GREEN . $this->randomClientId . TextFormat::WHITE,
			$this->id,
			$this->level->getName(),
			round($this->x, 4),
			round($this->y, 4),
			round($this->z, 4),
			TextFormat::YELLOW . $this->deviceModel . TextFormat::WHITE,
		]));
		/*if($this->isOp()){
			$this->setRemoveFormat(false);
		}*/
		if($this->gamemode === Player::SPECTATOR){
			$pk = new ContainerSetContentPacket();
			$pk->windowid = ContainerSetContentPacket::SPECIAL_CREATIVE;
			$this->dataPacket($pk);
		}else{
			$pk = new ContainerSetContentPacket();
			$pk->windowid = ContainerSetContentPacket::SPECIAL_CREATIVE;
			$pk->slots = array_merge(Item::getCreativeItems(), $this->personalCreativeItems);
			$this->dataPacket($pk);
		}

		$this->sendCommandData();

		$this->level->getWeather()->sendWeather($this);
		$this->forceMovement = $this->teleportPosition = $this->getPosition();
	}

	public function getProtocol(){
		return $this->protocol;
	}

	/**
	 * Handles a Minecraft packet
	 * TODO: Separate all of this in handlers
	 *
	 * WARNING: Do not use this, it's only for internal use.
	 * Changes to this function won't be recorded on the version.
	 *
	 * @param DataPacket $packet
	 */
	public function handleDataPacket(DataPacket $packet){

		if($this->connected === false){
			return;
		}

		if($packet::NETWORK_ID === ProtocolInfo::BATCH_PACKET){
			/** @var BatchPacket $packet */
			$this->server->getNetwork()->processBatch($packet, $this);
			return;
		}

		$timings = Timings::getReceiveDataPacketTimings($packet);

		$timings->startTiming();

		$this->server->getPluginManager()->callEvent($ev = new DataPacketReceiveEvent($this, $packet));
		if($ev->isCancelled()){
			$timings->stopTiming();
			return;
		}

		switch($packet::NETWORK_ID){
			case ProtocolInfo::ITEM_FRAME_DROP_ITEM_PACKET:
				$tile = $this->level->getTile($this->temporalVector->setComponents($packet->x, $packet->y, $packet->z));
				if($tile instanceof ItemFrame){
					$block = $this->level->getBlock($tile);
					$this->server->getPluginManager()->callEvent($ev = new BlockBreakEvent($this, $block, $this->getInventory()->getItemInHand(), true));
					if(!$ev->isCancelled()){
						$item = $tile->getItem();
						$this->server->getPluginManager()->callEvent($ev = new ItemFrameDropItemEvent($this, $block, $tile, $item));
						if(!$ev->isCancelled()){
							if($item->getId() !== Item::AIR){
								if((mt_rand(0, 10) / 10) < $tile->getItemDropChance()){
									$this->level->dropItem($tile, $item);
								}
								$tile->setItem(Item::get(Item::AIR));
								$tile->setItemRotation(0);
							}
						}else $tile->spawnTo($this);
					}else $tile->spawnTo($this);
				}
				break;
			case ProtocolInfo::REQUEST_CHUNK_RADIUS_PACKET:
				/*if($this->spawned){
					$this->viewDistance = $packet->radius ** 2;
				}*/
				$pk = new ChunkRadiusUpdatedPacket();
				$pk->radius = ($this->server->chunkRadius != -1) ? $this->server->chunkRadius : $packet->radius;
				$this->dataPacket($pk);
				break;
			case ProtocolInfo::PLAYER_INPUT_PACKET:
				break;
			case ProtocolInfo::LOGIN_PACKET:
				if($this->loggedIn){
					break;
				}

				$pk = new PlayStatusPacket();
				$pk->status = PlayStatusPacket::LOGIN_SUCCESS;
				$this->dataPacket($pk);

				$this->username = TextFormat::clean($packet->username);
				$this->displayName = $this->username;
				$this->setNameTag($this->username);
				$this->iusername = strtolower($this->username);
				$this->protocol = $packet->protocol;
				$this->deviceModel = $packet->deviceModel;

				if($this->server->getConfigBoolean("online-mode", false) && $packet->identityPublicKey === null){
					$this->kick("disconnectionScreen.notAuthenticated", false);
					break;
				}

				if(count($this->server->getOnlinePlayers()) >= $this->server->getMaxPlayers() and $this->kick("disconnectionScreen.serverFull", false)){
					break;
				}

				if($packet->protocol !== ProtocolInfo::CURRENT_PROTOCOL){
					if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){
						$message = "disconnectionScreen.outdatedClient";

						$pk = new PlayStatusPacket();
						$pk->status = PlayStatusPacket::LOGIN_FAILED_CLIENT;
						$this->directDataPacket($pk);
					}else{
						$message = "disconnectionScreen.outdatedServer";

						$pk = new PlayStatusPacket();
						$pk->status = PlayStatusPacket::LOGIN_FAILED_SERVER;
						$this->directDataPacket($pk);
					}
					$this->close("", $message, false);

					break;
				}

				$this->randomClientId = $packet->clientId;

				$this->uuid = UUID::fromString($packet->clientUUID);
				$this->rawUUID = $this->uuid->toBinary();

				$valid = true;
				$len = strlen($packet->username);
				if($len > 16 or $len < 3){
					$valid = false;
				}
				for($i = 0; $i < $len and $valid; ++$i){
					$c = ord($packet->username{$i});
					if(($c >= ord("a") and $c <= ord("z")) or ($c >= ord("A") and $c <= ord("Z")) or ($c >= ord("0") and $c <= ord("9")) or $c === ord("_")){
						continue;
					}

					$valid = false;
					break;
				}

				if(!$valid or $this->iusername === "rcon" or $this->iusername === "console"){
					$this->close("", "disconnectionScreen.invalidName");

					break;
				}

				if((strlen($packet->skin) != 64 * 64 * 4) and (strlen($packet->skin) != 64 * 32 * 4)){
					$this->close("", "disconnectionScreen.invalidSkin");

					break;
				}

				$this->setSkin($packet->skin, $packet->skinId);

				$this->server->getPluginManager()->callEvent($ev = new PlayerPreLoginEvent($this, "Plugin reason"));
				if($ev->isCancelled()){
					$this->close("", $ev->getKickMessage());

					break;
				}

				if($this->isConnected()){
					$this->onPlayerPreLogin();
				}

				break;
			case ProtocolInfo::MOVE_PLAYER_PACKET:

				if($this->linkedEntity instanceof Entity){
					$entity = $this->linkedEntity;
					if($entity instanceof Boat){
						$entity->setPosition($this->temporalVector->setComponents($packet->x, $packet->y - 0.3, $packet->z));
					}
					/*if($entity instanceof Minecart){
						$entity->isFreeMoving = true;
						$entity->motionX = -sin($packet->yaw / 180 * M_PI);
						$entity->motionZ = cos($packet->yaw / 180 * M_PI);
					}*/
				}

				$newPos = new Vector3($packet->x, $packet->y - $this->getEyeHeight(), $packet->z);

				if($newPos->distanceSquared($this) < 0.01 and ($packet->yaw % 360) === $this->yaw and ($packet->pitch % 360) === $this->pitch){ //player hasn't moved, just client spamming packets
					break;
				}

				$revert = false;
				if(!$this->isAlive() or $this->spawned !== true){
					$revert = true;
					$this->forceMovement = new Vector3($this->x, $this->y, $this->z);
				}

				if($this->forceMovement instanceof Vector3 and (($dist = $newPos->distanceSquared($this->forceMovement)) > 0.1 or $revert)){
					$this->sendPosition($this->forceMovement, $packet->yaw, $packet->pitch, MovePlayerPacket::MODE_RESET);
				}else{
					$packet->yaw %= 360;
					$packet->pitch %= 360;

					if($packet->yaw < 0){
						$packet->yaw += 360;
					}

					$this->setRotation($packet->yaw, $packet->pitch);
					$this->newPosition = $newPos;
					$this->forceMovement = null;
				}

				break;
			case ProtocolInfo::ADVENTURE_SETTINGS_PACKET:
				//TODO: player abilities, check for other changes
				if($packet->isFlying and !$this->allowFlight){
					$this->kick("Flying is not enabled on this server");
					break;
				}else{
					$this->server->getPluginManager()->callEvent($ev = new PlayerToggleFlightEvent($this, $packet->isFlying));
					if($ev->isCancelled()){
						$this->sendSettings();
					}else{
						$this->flying = $ev->isFlying();
					}
					break;
				}
				break;
			case ProtocolInfo::MOB_EQUIPMENT_PACKET:
				if($this->spawned === false or !$this->isAlive()){
					break;
				}
				/**
				 * Handle hotbar slot remapping
				 * This is the only time and place when hotbar mapping should ever be changed.
				 * Changing hotbar slot mapping at will has been deprecated because it causes far too many
				 * issues with Windows 10 Edition Beta.
				 */
				$this->inventory->setHeldItemIndex($packet->selectedSlot, false, $packet->slot);

				$this->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION, false);
				break;
			case ProtocolInfo::USE_ITEM_PACKET:
				if($this->spawned === false or !$this->isAlive() or $this->blocked){
					break;
				}

				$blockVector = new Vector3($packet->x, $packet->y, $packet->z);

				$this->craftingType = self::CRAFTING_SMALL;

				if($packet->face >= 0 and $packet->face <= 5){ //Use Block, place
					$this->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION, false);

					if(!$this->canInteract($blockVector->add(0.5, 0.5, 0.5), 13) or $this->isSpectator()){

					}elseif($this->isCreative()){
						$item = $this->inventory->getItemInHand();
						if($this->level->useItemOn($blockVector, $item, $packet->face, $packet->fx, $packet->fy, $packet->fz, $this) === true){
							break;
						}
					}elseif(!$this->inventory->getItemInHand()->deepEquals($packet->item)){
						$this->inventory->sendHeldItem($this);
					}else{
						$item = $this->inventory->getItemInHand();
						$oldItem = clone $item;
						if($this->level->useItemOn($blockVector, $item, $packet->face, $packet->fx, $packet->fy, $packet->fz, $this)){
							if(!$item->deepEquals($oldItem) or $item->getCount() !== $oldItem->getCount()){
								$this->inventory->setItemInHand($item);
								$this->inventory->sendHeldItem($this->hasSpawned);
							}
							break;
						}
					}

					$this->inventory->sendHeldItem($this);

					if($blockVector->distanceSquared($this) > 10000){
						break;
					}
					$target = $this->level->getBlock($blockVector);
					$block = $target->getSide($packet->face);

					$this->level->sendBlocks([$this], [$target, $block], UpdateBlockPacket::FLAG_ALL_PRIORITY);
					break;
				}elseif($packet->face === -1){
					$aimPos = (new Vector3($packet->x / 32768, $packet->y / 32768, $packet->z / 32768))->normalize();

					if($this->isCreative()){
						$item = $this->inventory->getItemInHand();
					}elseif(!$this->inventory->getItemInHand()->deepEquals($packet->item)){
						$this->inventory->sendHeldItem($this);
						break;
					}else{
						$item = $this->inventory->getItemInHand();
					}

					$ev = new PlayerInteractEvent($this, $item, $aimPos, $packet->face, PlayerInteractEvent::RIGHT_CLICK_AIR);

					$this->server->getPluginManager()->callEvent($ev);

					if($ev->isCancelled()){
						$this->inventory->sendHeldItem($this);
						break;
					}

					if($item->getId() === Item::FISHING_ROD){
						if($this->isFishing()){
							$this->server->getPluginManager()->callEvent($ev = new PlayerUseFishingRodEvent($this, PlayerUseFishingRodEvent::ACTION_STOP_FISHING));
						}else{
							$this->server->getPluginManager()->callEvent($ev = new PlayerUseFishingRodEvent($this, PlayerUseFishingRodEvent::ACTION_START_FISHING));
						}
						if(!$ev->isCancelled()){
							if($this->isFishing()){
								$this->setFishingHook();
							}else{
								$nbt = new CompoundTag("", [
									"Pos" => new ListTag("Pos", [
										new DoubleTag("", $this->x),
										new DoubleTag("", $this->y + $this->getEyeHeight()),
										new DoubleTag("", $this->z)
									]),
									"Motion" => new ListTag("Motion", [
										new DoubleTag("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI)),
										new DoubleTag("", -sin($this->pitch / 180 * M_PI)),
										new DoubleTag("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI))
									]),
									"Rotation" => new ListTag("Rotation", [
										new FloatTag("", $this->yaw),
										new FloatTag("", $this->pitch)
									])
								]);

								$f = 0.6;
								$this->fishingHook = new FishingHook($this->chunk, $nbt, $this);
								$this->fishingHook->setMotion($this->fishingHook->getMotion()->multiply($f));
								$this->fishingHook->spawnToAll();
							}
						}
					}elseif($item->getId() === Item::SNOWBALL){
						$nbt = new CompoundTag("", [
							"Pos" => new ListTag("Pos", [
								new DoubleTag("", $this->x),
								new DoubleTag("", $this->y + $this->getEyeHeight()),
								new DoubleTag("", $this->z)
							]),
							"Motion" => new ListTag("Motion", [
								/*new DoubleTag("", $aimPos->x),
								new DoubleTag("", $aimPos->y),
								new DoubleTag("", $aimPos->z)*/
								//TODO: remove this because of a broken client
								new DoubleTag("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI)),
								new DoubleTag("", -sin($this->pitch / 180 * M_PI)),
								new DoubleTag("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI))
							]),
							"Rotation" => new ListTag("Rotation", [
								new FloatTag("", $this->yaw),
								new FloatTag("", $this->pitch)
							]),
						]);

						$f = 1.5;
						$snowball = Entity::createEntity("Snowball", $this->chunk, $nbt, $this);
						$snowball->setMotion($snowball->getMotion()->multiply($f));
						if($this->isSurvival()){
							$item->setCount($item->getCount() - 1);
							$this->inventory->setItemInHand($item->getCount() > 0 ? $item : Item::get(Item::AIR));
						}
						if($snowball instanceof Projectile){
							$this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($snowball));
							if($projectileEv->isCancelled()){
								$snowball->kill();
							}else{
								$snowball->spawnToAll();
								$this->level->addSound(new LaunchSound($this), $this->getViewers());
							}
						}else{
							$snowball->spawnToAll();
						}
					}elseif($item->getId() === Item::EGG){
						$nbt = new CompoundTag("", [
							"Pos" => new ListTag("Pos", [
								new DoubleTag("", $this->x),
								new DoubleTag("", $this->y + $this->getEyeHeight()),
								new DoubleTag("", $this->z)
							]),
							"Motion" => new ListTag("Motion", [
								new DoubleTag("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI)),
								new DoubleTag("", -sin($this->pitch / 180 * M_PI)),
								new DoubleTag("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI))
							]),
							"Rotation" => new ListTag("Rotation", [
								new FloatTag("", $this->yaw),
								new FloatTag("", $this->pitch)
							]),
						]);

						$f = 1.5;
						$egg = Entity::createEntity("Egg", $this->chunk, $nbt, $this);
						$egg->setMotion($egg->getMotion()->multiply($f));
						if($this->isSurvival()){
							$item->setCount($item->getCount() - 1);
							$this->inventory->setItemInHand($item->getCount() > 0 ? $item : Item::get(Item::AIR));
						}
						if($egg instanceof Projectile){
							$this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($egg));
							if($projectileEv->isCancelled()){
								$egg->kill();
							}else{
								$egg->spawnToAll();
								$this->level->addSound(new LaunchSound($this), $this->getViewers());
							}
						}else{
							$egg->spawnToAll();
						}
					}elseif($item->getId() == Item::ENCHANTING_BOTTLE){
						$nbt = new CompoundTag("", [
							"Pos" => new ListTag("Pos", [
								new DoubleTag("", $this->x),
								new DoubleTag("", $this->y + $this->getEyeHeight()),
								new DoubleTag("", $this->z)
							]),
							"Motion" => new ListTag("Motion", [
								new DoubleTag("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI)),
								new DoubleTag("", -sin($this->pitch / 180 * M_PI)),
								new DoubleTag("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI))
							]),
							"Rotation" => new ListTag("Rotation", [
								new FloatTag("", $this->yaw),
								new FloatTag("", $this->pitch)
							]),
						]);

						$f = 1.1;
						$thrownExpBottle = new ThrownExpBottle($this->chunk, $nbt, $this);
						$thrownExpBottle->setMotion($thrownExpBottle->getMotion()->multiply($f));
						if($this->isSurvival()){
							$item->setCount($item->getCount() - 1);
							$this->inventory->setItemInHand($item->getCount() > 0 ? $item : Item::get(Item::AIR));
						}
						if($thrownExpBottle instanceof Projectile){
							$this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($thrownExpBottle));
							if($projectileEv->isCancelled()){
								$thrownExpBottle->kill();
							}else{
								$thrownExpBottle->spawnToAll();
								$this->level->addSound(new LaunchSound($this), $this->getViewers());
							}
						}else{
							$thrownExpBottle->spawnToAll();
						}
					}elseif($item->getId() == Item::SPLASH_POTION and $this->server->allowSplashPotion){
						$nbt = new CompoundTag("", [
							"Pos" => new ListTag("Pos", [
								new DoubleTag("", $this->x),
								new DoubleTag("", $this->y + $this->getEyeHeight()),
								new DoubleTag("", $this->z)
							]),
							"Motion" => new ListTag("Motion", [
								new DoubleTag("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI)),
								new DoubleTag("", -sin($this->pitch / 180 * M_PI)),
								new DoubleTag("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI))
							]),
							"Rotation" => new ListTag("Rotation", [
								new FloatTag("", $this->yaw),
								new FloatTag("", $this->pitch)
							]),
							"PotionId" => new ShortTag("PotionId", $item->getDamage()),
						]);

						$f = 1.1;
						$thrownPotion = new ThrownPotion($this->chunk, $nbt, $this);
						$thrownPotion->setMotion($thrownPotion->getMotion()->multiply($f));
						if($this->isSurvival()){
							$item->setCount($item->getCount() - 1);
							$this->inventory->setItemInHand($item->getCount() > 0 ? $item : Item::get(Item::AIR));
						}
						if($thrownPotion instanceof Projectile){
							$this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($thrownPotion));
							if($projectileEv->isCancelled()){
								$thrownPotion->kill();
							}else{
								$thrownPotion->spawnToAll();
								$this->level->addSound(new LaunchSound($this), $this->getViewers());
							}
						}else{
							$thrownPotion->spawnToAll();
						}
					}elseif($item->getId() === Item::ENDER_PEARL){
						$nbt = new CompoundTag("", [
							"Pos" => new ListTag("Pos", [
								new DoubleTag("", $this->x),
								new DoubleTag("", $this->y + $this->getEyeHeight()),
								new DoubleTag("", $this->z)
							]),
							"Motion" => new ListTag("Motion", [
								new DoubleTag("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI)),
								new DoubleTag("", -sin($this->pitch / 180 * M_PI)),
								new DoubleTag("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI))
							]),
							"Rotation" => new ListTag("Rotation", [
								new FloatTag("", $this->yaw),
								new FloatTag("", $this->pitch)
							]),
						]);

						$f = 1.5;
						$enderpearl = Entity::createEntity("EnderPearl", $this->chunk, $nbt, $this);
						$enderpearl->setMotion($enderpearl->getMotion()->multiply($f));
						$enderpearl->setSpawner($this);
						if($this->isSurvival()){
							$item->setCount($item->getCount() - 1);
							$this->inventory->setItemInHand($item->getCount() > 0 ? $item : Item::get(Item::AIR));
						}
						if($enderpearl instanceof Projectile){
							$this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($enderpearl));
							if($projectileEv->isCancelled()){
								$enderpearl->close();
								$this->teleport($enderpearl);
							}else{
								$enderpearl->spawnToAll();
								$this->level->addSound(new LaunchSound($this), $this->getViewers());
							}
						}else{
							$enderpearl->spawnToAll();
						}
					}

					$this->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION, true);
					$this->startAction = $this->server->getTick();
				}
				break;
			case ProtocolInfo::PLAYER_ACTION_PACKET:
				if($this->spawned === false or $this->blocked === true or (!$this->isAlive() and $packet->action !== PlayerActionPacket::ACTION_SPAWN_SAME_DIMENSION and $packet->action !== PlayerActionPacket::ACTION_SPAWN_OVERWORLD)){
					break;
				}

				$packet->eid = $this->id;
				$pos = new Vector3($packet->x, $packet->y, $packet->z);

				switch($packet->action){
					case PlayerActionPacket::ACTION_START_BREAK:
						if($this->lastBreak !== PHP_INT_MAX or $pos->distanceSquared($this) > 10000){
							break;
						}
						$target = $this->level->getBlock($pos);
						$ev = new PlayerInteractEvent($this, $this->inventory->getItemInHand(), $target, $packet->face, $target->getId() === 0 ? PlayerInteractEvent::LEFT_CLICK_AIR : PlayerInteractEvent::LEFT_CLICK_BLOCK);
						$this->getServer()->getPluginManager()->callEvent($ev);
						if(!$ev->isCancelled()){
							$side = $target->getSide($packet->face);
							if($side instanceof Fire){
								$side->getLevel()->setBlock($side, new Air());
								break;
							}
							$this->lastBreak = microtime(true);
						}else{
							$this->inventory->sendHeldItem($this);
						}
						break;
					case PlayerActionPacket::ACTION_ABORT_BREAK:
						$this->lastBreak = PHP_INT_MAX;
						break;
					case PlayerActionPacket::ACTION_STOP_BREAK:
						break;
					case PlayerActionPacket::ACTION_RELEASE_ITEM:
						if($this->startAction > -1 and $this->getDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION)){
							if($this->inventory->getItemInHand()->getId() === Item::BOW){
								$bow = $this->inventory->getItemInHand();
								if($this->isSurvival() and !$this->inventory->contains(Item::get(Item::ARROW, -1))){
									$this->inventory->sendContents($this);
									break;
								}
								$arrow = null;

								$index = $this->inventory->first(Item::get(Item::ARROW, -1));

								if($index !== -1){
									$arrow = $this->inventory->getItem($index);
									$arrow->setCount(1);
								}elseif($this->isCreative()){
									$arrow = Item::get(Item::ARROW, 0, 1);
								}else{
									$this->inventory->sendContents($this);
									break;
								}

								$nbt = new CompoundTag("", [
									"Pos" => new ListTag("Pos", [
										new DoubleTag("", $this->x),
										new DoubleTag("", $this->y + $this->getEyeHeight()),
										new DoubleTag("", $this->z)
									]),
									"Motion" => new ListTag("Motion", [
										new DoubleTag("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI)),
										new DoubleTag("", -sin($this->pitch / 180 * M_PI)),
										new DoubleTag("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI))
									]),
									"Rotation" => new ListTag("Rotation", [
										new FloatTag("", $this->yaw),
										new FloatTag("", $this->pitch)
									]),
									"Fire" => new ShortTag("Fire", $this->isOnFire() ? 45 * 60 : 0),
									"Potion" => new ShortTag("Potion", $arrow->getDamage())
								]);

								$diff = ($this->server->getTick() - $this->startAction);
								$p = $diff / 20;
								$f = min((($p ** 2) + $p * 2) / 3, 1) * 2;
								$ev = new EntityShootBowEvent($this, $bow, Entity::createEntity("Arrow", $this->chunk, $nbt, $this, $f == 2 ? true : false), $f);

								if($f < 0.1 or $diff < 5){
									$ev->setCancelled();
								}

								$this->server->getPluginManager()->callEvent($ev);

								if($ev->isCancelled()){
									$ev->getProjectile()->kill();
									$this->inventory->sendContents($this);
								}else{
									$ev->getProjectile()->setMotion($ev->getProjectile()->getMotion()->multiply($ev->getForce()));
									if($this->isSurvival()){
										$this->inventory->removeItem(Item::get(Item::ARROW, $arrow->getDamage(), 1));
										$bow->setDamage($bow->getDamage() + 1);
										if($bow->getDamage() >= 385){
											$this->inventory->setItemInHand(Item::get(Item::AIR, 0, 0));
										}else{
											$this->inventory->setItemInHand($bow);
										}
									}
									if($ev->getProjectile() instanceof Projectile){
										$this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($ev->getProjectile()));
										if($projectileEv->isCancelled()){
											$ev->getProjectile()->kill();
										}else{
											$ev->getProjectile()->spawnToAll();
											$this->level->addSound(new LaunchSound($this), $this->getViewers());
										}
									}else{
										$ev->getProjectile()->spawnToAll();
									}
								}
							}
						}elseif($this->inventory->getItemInHand()->getId() === Item::BUCKET and $this->inventory->getItemInHand()->getDamage() === 1){ //Milk!
							$this->server->getPluginManager()->callEvent($ev = new PlayerItemConsumeEvent($this, $this->inventory->getItemInHand()));
							if($ev->isCancelled()){
								$this->inventory->sendContents($this);
								break;
							}

							$pk = new EntityEventPacket();
							$pk->eid = $this->getId();
							$pk->event = EntityEventPacket::USE_ITEM;
							//$pk;
							$this->dataPacket($pk);
							$this->server->broadcastPacket($this->getViewers(), $pk);

							if($this->isSurvival()){
								$slot = $this->inventory->getItemInHand();
								--$slot->count;
								$this->inventory->setItemInHand($slot);
								$this->inventory->addItem(Item::get(Item::BUCKET, 0, 1));
							}

							$this->removeAllEffects();
						}else{
							$this->inventory->sendContents($this);
						}
						break;
					case PlayerActionPacket::ACTION_STOP_SLEEPING:
						$this->stopSleep();
						break;
					case PlayerActionPacket::ACTION_SPAWN_SAME_DIMENSION:
					case PlayerActionPacket::ACTION_SPAWN_OVERWORLD:
						if($this->isAlive() or !$this->isOnline()){
							break;
						}

						if($this->server->isHardcore()){
							$this->setBanned(true);
							break;
						}

						$this->craftingType = self::CRAFTING_SMALL;

						if($this->server->netherEnabled){
							if($this->level === $this->server->getLevelByName($this->server->netherName)){
								$this->teleport($pos = $this->server->getDefaultLevel()->getSafeSpawn());
							}
						}

						$this->server->getPluginManager()->callEvent($ev = new PlayerRespawnEvent($this, $this->getSpawn()));

						$this->teleport($ev->getRespawnPosition());

						$this->setSprinting(false);
						$this->setSneaking(false);
						$this->setGliding(false);

						$this->extinguish();
						$this->setDataProperty(self::DATA_AIR, self::DATA_TYPE_SHORT, 400);
						$this->deadTicks = 0;
						$this->noDamageTicks = 60;

						$this->removeAllEffects();
						$this->setHealth($this->getMaxHealth());
						$this->setFood(20);
						$this->starvationTick = 0;
						$this->foodTick = 0;
						$this->foodUsageTime = 0;

						$this->sendData($this);

						$this->sendSettings();
						$this->inventory->sendContents($this);
						$this->inventory->sendArmorContents($this);

						$this->blocked = false;

						$this->spawnToAll();
						$this->scheduleUpdate();
						break;
					case PlayerActionPacket::ACTION_JUMP:
						break 2;
					case PlayerActionPacket::ACTION_START_SPRINT:
						$ev = new PlayerToggleSprintEvent($this, true);
						$this->server->getPluginManager()->callEvent($ev);
						if($ev->isCancelled()){
							$this->sendData($this);
						}else{
							$this->setSprinting(true);
						}
						break 2;
					case PlayerActionPacket::ACTION_STOP_SPRINT:
						$ev = new PlayerToggleSprintEvent($this, false);
						$this->server->getPluginManager()->callEvent($ev);
						if($ev->isCancelled()){
							$this->sendData($this);
						}else{
							$this->setSprinting(false);
						}
						break 2;
					case PlayerActionPacket::ACTION_START_SNEAK:
						$ev = new PlayerToggleSneakEvent($this, true);
						$this->server->getPluginManager()->callEvent($ev);
						if($ev->isCancelled()){
							$this->sendData($this);
						}else{
							$this->setSneaking(true);
						}
						break 2;
					case PlayerActionPacket::ACTION_STOP_SNEAK:
						$ev = new PlayerToggleSneakEvent($this, false);
						$this->server->getPluginManager()->callEvent($ev);
						if($ev->isCancelled()){
							$this->sendData($this);
						}else{
							$this->setSneaking(false);
						}
						break 2;
						case PlayerActionPacket::ACTION_START_GLIDE:
  						$ev = new PlayerToggleGlideEvent($this, true);
  						$this->server->getPluginManager()->callEvent($ev);
  						if($ev->isCancelled()){
  							$this->sendData($this);
  						}else{
  							$this->setGliding(true);
  						}
  						break 2;
  					case PlayerActionPacket::ACTION_STOP_GLIDE:
  						$ev = new PlayerToggleGlideEvent($this, false);
  						$this->server->getPluginManager()->callEvent($ev);
  						if($ev->isCancelled()){
  							$this->sendData($this);
  						}else{
  							$this->setGliding(false);
  						}
  						break 2;
					default:
						assert(false, "Unhandled player action " . $packet->action . " from " . $this->getName());
				}

				$this->startAction = -1;
				$this->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION, false);
				break;

			case ProtocolInfo::REMOVE_BLOCK_PACKET:
				if($this->spawned === false or $this->blocked === true or !$this->isAlive()){
					break;
				}
				$this->craftingType = self::CRAFTING_SMALL;

				$vector = new Vector3($packet->x, $packet->y, $packet->z);

				$item = $this->inventory->getItemInHand();
				$oldItem = clone $item;

				if($this->canInteract($vector->add(0.5, 0.5, 0.5), $this->isCreative() ? 13 : 6) and $this->level->useBreakOn($vector, $item, $this, $this->server->destroyBlockParticle)){
					if($this->isSurvival()){
						if(!$item->equals($oldItem) or $item->getCount() !== $oldItem->getCount()){
							$this->inventory->setItemInHand($item);
							$this->inventory->sendHeldItem($this);
						}

						$this->exhaust(0.025, PlayerExhaustEvent::CAUSE_MINING);
					}
					break;
				}

				$this->inventory->sendContents($this);
				$target = $this->level->getBlock($vector);
				$tile = $this->level->getTile($vector);

				$this->level->sendBlocks([$this], [$target], UpdateBlockPacket::FLAG_ALL_PRIORITY);

				$this->inventory->sendHeldItem($this);

				if($tile instanceof Spawnable){
					$tile->spawnTo($this);
				}
				break;

			case ProtocolInfo::MOB_ARMOR_EQUIPMENT_PACKET:
				//This packet is ignored. Armour changes are also sent by ContainerSetSlotPackets, and are handled there instead.
				break;

			case ProtocolInfo::INTERACT_PACKET:
				if($this->spawned === false or !$this->isAlive() or $this->blocked){
					break;
				}

				$this->craftingType = self::CRAFTING_SMALL;

				$target = $this->level->getEntity($packet->target);

				$cancelled = false;

				if($target instanceof Player and $this->server->getConfigBoolean("pvp", true) === false){
					$cancelled = true;
				}

				if($target instanceof Boat or ($target instanceof Minecart and $target->getType() == Minecart::TYPE_NORMAL)){
					if($packet->action === InteractPacket::ACTION_RIGHT_CLICK){
						$this->linkEntity($target);
					}elseif($packet->action === InteractPacket::ACTION_LEFT_CLICK){
						if($this->linkedEntity == $target){
							$target->setLinked(0, $this);
						}
						$target->close();
					}elseif($packet->action === InteractPacket::ACTION_LEAVE_VEHICLE){
						$this->setLinked(0, $target);
					}
					return;
				}

				if($packet->action === InteractPacket::ACTION_RIGHT_CLICK){
					if($target instanceof Animal and $this->getInventory()->getItemInHand()){
						//TODO: Feed
					}
					break;
				}elseif($packet->action === InteractPacket::ACTION_MOUSEOVER){
					break;
				}

				if($target instanceof Entity and $this->getGamemode() !== Player::VIEW and $this->isAlive() and $target->isAlive()){
					if($target instanceof DroppedItem or $target instanceof Arrow){
						$this->kick("Attempting to attack an invalid entity");
						$this->server->getLogger()->warning($this->getServer()->getLanguage()->translateString("pocketmine.player.invalidEntity", [$this->getName()]));
						break;
					}

					$item = $this->inventory->getItemInHand();
					$damage = [
						EntityDamageEvent::MODIFIER_BASE => $item->getModifyAttackDamage($target),
					];

					if(!$this->canInteract($target, 8)){
						$cancelled = true;
					}elseif($target instanceof Player){
						if(($target->getGamemode() & 0x01) > 0){
							break;
						}elseif($this->server->getConfigBoolean("pvp") !== true or $this->server->getDifficulty() === 0){
							$cancelled = true;
						}
					}

					$ev = new EntityDamageByEntityEvent($this, $target, EntityDamageEvent::CAUSE_ENTITY_ATTACK, $damage, 0.4 + $item->getEnchantmentLevel(Enchantment::TYPE_WEAPON_KNOCKBACK) * 0.15);
					if($cancelled){
						$ev->setCancelled();
					}

					if($target->attack($ev->getFinalDamage(), $ev) === true){
						$fireAspectL = $item->getEnchantmentLevel(Enchantment::TYPE_WEAPON_FIRE_ASPECT);
						if($fireAspectL > 0){
							$fireEv = new EntityCombustByEntityEvent($this, $target, $fireAspectL * 4, $ev->getFireProtectL());
							Server::getInstance()->getPluginManager()->callEvent($fireEv);
							if(!$fireEv->isCancelled()){
								$target->setOnFire($fireEv->getDuration());
							}
						}
						//Thorns
						if($this->isSurvival()){
							$ev->createThornsDamage();
							if($ev->getThornsDamage() > 0){
								$thornsEvent = new EntityDamageByEntityEvent($target, $this, EntityDamageEvent::CAUSE_ENTITY_ATTACK, $ev->getThornsDamage(), 0);
								if(!$thornsEvent->isCancelled()){
									if($this->attack($thornsEvent->getFinalDamage(), $thornsEvent) === true){
										$thornsEvent->useArmors();
										$ev->setThornsArmorUse();
									}
								}
							}
						}
						$ev->useArmors();
					}

					if($ev->isCancelled()){
						if($item->isTool() and $this->isSurvival()){
							$this->inventory->sendContents($this);
						}
						break;
					}

					if($this->isSurvival()){
						if($item->isTool()){
							if($item->useOn($target) and $item->getDamage() >= $item->getMaxDurability()){
								$this->inventory->setItemInHand(Item::get(Item::AIR, 0, 1));
							}else{
								$this->inventory->setItemInHand($item);
							}
						}

						$this->exhaust(0.3, PlayerExhaustEvent::CAUSE_ATTACK);
					}
				}


				break;
			case ProtocolInfo::ANIMATE_PACKET:
				if($this->spawned === false or !$this->isAlive()){
					break;
				}

				$this->server->getPluginManager()->callEvent($ev = new PlayerAnimationEvent($this, $packet->action));
				if($ev->isCancelled()){
					break;
				}

				$pk = new AnimatePacket();
				$pk->eid = $this->getId();
				$pk->action = $ev->getAnimationType();
				$this->server->broadcastPacket($this->getViewers(), $pk);
				break;
			case ProtocolInfo::SET_HEALTH_PACKET: //Not used
				break;
			case ProtocolInfo::ENTITY_EVENT_PACKET:
				if($this->spawned === false or $this->blocked === true or !$this->isAlive()){
					break;
				}
				$this->craftingType = self::CRAFTING_SMALL;

				$this->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION, false); //TODO: check if this should be true

				switch($packet->event){
					case EntityEventPacket::USE_ITEM: //Eating
						$slot = $this->inventory->getItemInHand();

						if($slot->canBeConsumed()){
							$ev = new PlayerItemConsumeEvent($this, $slot);
							if(!$slot->canBeConsumedBy($this)){
								$ev->setCancelled();
							}
							$this->server->getPluginManager()->callEvent($ev);
							if(!$ev->isCancelled()){
								$slot->onConsume($this);
							}else{
								$this->inventory->sendContents($this);
							}
						}
						break;
				}
				break;
			case ProtocolInfo::DROP_ITEM_PACKET:
				if($this->spawned === false or $this->blocked === true or !$this->isAlive()){
					break;
				}
				if($packet->item->getId() === Item::AIR){
					/**
					 * This is so stupid it's unreal.
					 * Windows 10 Edition Beta drops the contents of the crafting grid when the inventory closes - including air.
					 */
					break;
				}

				if(($this->isCreative() and $this->server->limitedCreative)){
					break;
				}

				$this->getTransactionQueue()->addTransaction(new DropItemTransaction($packet->item));
				break;
			case ProtocolInfo::COMMAND_STEP_PACKET:
				if($this->spawned === false or !$this->isAlive()){
					break;
				}
				$this->craftingType = 0;
				$commandText = $packet->command;
				if($packet->args !== null){
					foreach($packet->args as $arg){ //command ordering will be an issue
						$commandText .= " " . $arg;
					}
				}
				$this->server->getPluginManager()->callEvent($ev = new PlayerCommandPreprocessEvent($this, "/" . $commandText));
				if($ev->isCancelled()){
					break;
				}

				Timings::$playerCommandTimer->startTiming();
				$this->server->dispatchCommand($ev->getPlayer(), substr($ev->getMessage(), 1));
				Timings::$playerCommandTimer->stopTiming();
				break;
			case ProtocolInfo::TEXT_PACKET:
				if($this->spawned === false or !$this->isAlive()){
					break;
				}
				$this->craftingType = self::CRAFTING_SMALL;
				if($packet->type === TextPacket::TYPE_CHAT){
					$packet->message = TextFormat::clean($packet->message, $this->removeFormat);
					foreach(explode("\n", $packet->message) as $message){
						if(trim($message) != "" and strlen($message) <= 255 and $this->messageCounter-- > 0){
							if(substr($message, 0, 2) === "./"){ //Command (./ = fast hack for old plugins post 0.16)
								$message = substr($message, 1);
							}

							$ev = new PlayerCommandPreprocessEvent($this, $message);

							if(mb_strlen($ev->getMessage(), "UTF-8") > 320){
								$ev->setCancelled();
							}
							$this->server->getPluginManager()->callEvent($ev);

							if($ev->isCancelled()){
								break;
							}

							if(substr($ev->getMessage(), 0, 1) === "/"){
								Timings::$playerCommandTimer->startTiming();
								$this->server->dispatchCommand($ev->getPlayer(), substr($ev->getMessage(), 1));
								Timings::$playerCommandTimer->stopTiming();
							}else{
								$this->server->getPluginManager()->callEvent($ev = new PlayerChatEvent($this, $ev->getMessage()));
								if(!$ev->isCancelled()){
									$this->server->broadcastMessage($this->getServer()->getLanguage()->translateString($ev->getFormat(), [
										$ev->getPlayer()->getDisplayName(),
										$ev->getMessage()
									]), $ev->getRecipients());
								}
							}
						}
					}
				}
				break;
			case ProtocolInfo::CONTAINER_CLOSE_PACKET:
				if($this->spawned === false or $packet->windowid === 0){
					break;
				}
				$this->craftingType = self::CRAFTING_SMALL;
				if(isset($this->windowIndex[$packet->windowid])){
					$this->server->getPluginManager()->callEvent(new InventoryCloseEvent($this->windowIndex[$packet->windowid], $this));
					$this->removeWindow($this->windowIndex[$packet->windowid]);
				}

				/**
				 * Drop anything still left in the crafting inventory
				 * This will usually never be needed since Windows 10 clients will send DropItemPackets
				 * which will cause this to happen anyway, but this is here for when transactions
				 * fail and items end up stuck in the crafting inventory.
				 */
				foreach($this->getFloatingInventory()->getContents() as $item){
					$this->getTransactionQueue()->addTransaction(new DropItemTransaction($item));
				}
				break;

			case ProtocolInfo::CRAFTING_EVENT_PACKET:
				if($this->spawned === false or !$this->isAlive()){
					break;
				}
				/**
				 * For some annoying reason, anvils send window ID 255 when crafting with them instead of the _actual_ anvil window ID
				 * The result of this is anvils immediately closing when used. This is highly unusual, especially since the
				 * container set slot packets send the correct window ID, but... eh
				 */
				/*elseif(!isset($this->windowIndex[$packet->windowId])){
					$this->inventory->sendContents($this);
					$pk = new ContainerClosePacket();
					$pk->windowid = $packet->windowId;
					$this->dataPacket($pk);
					break;
				}*/

				$recipe = $this->server->getCraftingManager()->getRecipe($packet->id);

				if($this->craftingType === self::CRAFTING_ANVIL){
					$anvilInventory = $this->windowIndex[$packet->windowId] ?? null;
					if($anvilInventory === null){
						foreach($this->windowIndex as $window){
							if($window instanceof AnvilInventory){
								$anvilInventory = $window;
								break;
							}
						}
						if($anvilInventory === null){ //If it's _still_ null, then the player doesn't have a valid anvil window, cannot proceed.
							$this->getServer()->getLogger()->debug("Couldn't find an anvil window for ".$this->getName().", exiting");
							$this->inventory->sendContents($this);
							break;
						}
					}

					if($recipe === null){
						//Item renamed
						if(!$anvilInventory->onRename($this, $packet->output[0])){
							$this->getServer()->getLogger()->debug($this->getName()." failed to rename an item in an anvil");
							$this->inventory->sendContents($this);
						}
					}else{
						//TODO: Anvil crafting recipes
					}
					break;
				}elseif(($recipe instanceof BigShapelessRecipe or $recipe instanceof BigShapedRecipe) and $this->craftingType === 0){
					$this->server->getLogger()->debug("Received big crafting recipe from ".$this->getName()." with no crafting table open");
					$this->inventory->sendContents($this);
					break;
				}elseif($recipe === null){
					$this->server->getLogger()->debug("Null (unknown) crafting recipe received from ".$this->getName()." for ".$packet->output[0]);
					$this->inventory->sendContents($this);
					break;
				}

				$canCraft = true;

				if(count($packet->input) === 0){
					/* If the packet "input" field is empty this needs to be handled differently.
					 * "input" is used to tell the server what items to remove from the client's inventory
					 * Because crafting takes the materials in the crafting grid, nothing needs to be taken from the inventory
					 * Instead, we take the materials from the crafting inventory
					 * To know what materials we need to take, we have to guess the crafting recipe used based on the
					 * output item and the materials stored in the crafting items
					 * The reason we have to guess is because Win10 sometimes sends a different recipe UUID
					 * say, if you put the wood for a door in the right hand side of the crafting grid instead of the left
					 * it will send the recipe UUID for a wooden pressure plate. Unknown currently whether this is a client
					 * bug or if there is something wrong with the way the server handles recipes.
					 * TODO: Remove recipe correction and fix desktop crafting recipes properly.
					 * In fact, TODO: Rewrite crafting entirely.
					 */
					$possibleRecipes = $this->server->getCraftingManager()->getRecipesByResult($packet->output[0]);
					if(!$packet->output[0]->equals($recipe->getResult())){
						$this->server->getLogger()->debug("Mismatched desktop recipe received from player ".$this->getName().", expected ".$recipe->getResult().", got ".$packet->output[0]);
					}
					$recipe = null;
					foreach($possibleRecipes as $r){
						/* Check the ingredient list and see if it matches the ingredients we've put into the crafting grid
						 * As soon as we find a recipe that we have all the ingredients for, take it and run with it. */

						//Make a copy of the floating inventory that we can make changes to.
						$floatingInventory = clone $this->floatingInventory;
						$ingredients = $r->getIngredientList();

						//Check we have all the necessary ingredients.
						foreach($ingredients as $ingredient){
							if(!$floatingInventory->contains($ingredient)){
								//We're short on ingredients, try the next recipe
								$canCraft = false;
								break;
							}
							//This will only be reached if we have the item to take away.
							$floatingInventory->removeItem($ingredient);
						}
						if($canCraft){
							//Found a recipe that works, take it and run with it.
							$recipe = $r;
							break;
						}
					}

					if($recipe !== null){
						$this->server->getPluginManager()->callEvent($ev = new CraftItemEvent($this, $ingredients, $recipe));

						if($ev->isCancelled()){
							$this->inventory->sendContents($this);
							break;
						}

						$this->floatingInventory = $floatingInventory; //Set player crafting inv to the idea one created in this process
						$this->floatingInventory->addItem(clone $recipe->getResult()); //Add the result to our picture of the crafting inventory
					}else{
						$this->server->getLogger()->debug("Unmatched desktop crafting recipe " . $packet->id . " from player " . $this->getName());
						$this->inventory->sendContents($this);
						break;
					}
				}else{
					if($recipe instanceof ShapedRecipe){
						for($x = 0; $x < 3 and $canCraft; ++$x){
							for($y = 0; $y < 3; ++$y){
								$item = $packet->input[$y * 3 + $x];
								$ingredient = $recipe->getIngredient($x, $y);
								if($item->getCount() > 0 and $item->getId() > 0){
									if($ingredient == null){
										$canCraft = false;
										break;
									}
									if($ingredient->getId() != 0 and !$ingredient->equals($item, !$ingredient->hasAnyDamageValue(), $ingredient->hasCompoundTag())){
										$canCraft = false;
										break;
									}

								}elseif($ingredient !== null and $item->getId() !== 0){
									$canCraft = false;
									break;
								}
							}
						}
					}elseif($recipe instanceof ShapelessRecipe){
						$needed = $recipe->getIngredientList();

						for($x = 0; $x < 3 and $canCraft; ++$x){
							for($y = 0; $y < 3; ++$y){
								$item = clone $packet->input[$y * 3 + $x];

								foreach($needed as $k => $n){
									if($n->deepEquals($item, !$n->hasAnyDamageValue(), $n->hasCompoundTag())){
										$remove = min($n->getCount(), $item->getCount());
										$n->setCount($n->getCount() - $remove);
										$item->setCount($item->getCount() - $remove);

										if($n->getCount() === 0){
											unset($needed[$k]);
										}
									}
								}

								if($item->getCount() > 0){
									$canCraft = false;
									break;
								}
							}
						}
						if(count($needed) > 0){
							$canCraft = false;
						}
					}else{
						$canCraft = false;
					}

					/** @var Item[] $ingredients */
					$ingredients = $packet->input;
					$result = $packet->output[0];

					if(!$canCraft or !$recipe->getResult()->deepEquals($result)){
						$this->server->getLogger()->debug("Unmatched recipe " . $recipe->getId() . " from player " . $this->getName() . ": expected " . $recipe->getResult() . ", got " . $result . ", using: " . implode(", ", $ingredients));
						$this->inventory->sendContents($this);
						break;
					}

					$used = array_fill(0, $this->inventory->getSize(), 0);

					foreach($ingredients as $ingredient){
						$slot = -1;
						foreach($this->inventory->getContents() as $index => $item){
							if($ingredient->getId() !== 0 and $ingredient->deepEquals($item, !$ingredient->hasAnyDamageValue(), $ingredient->hasCompoundTag()) and ($item->getCount() - $used[$index]) >= 1){
								$slot = $index;
								$used[$index]++;
								break;
							}
						}

						if($ingredient->getId() !== 0 and $slot === -1){
							$canCraft = false;
							break;
						}
					}

					if(!$canCraft){
						$this->server->getLogger()->debug("Unmatched recipe " . $recipe->getId() . " from player " . $this->getName() . ": client does not have enough items, using: " . implode(", ", $ingredients));
						$this->inventory->sendContents($this);
						break;
					}

					$this->server->getPluginManager()->callEvent($ev = new CraftItemEvent($this, $ingredients, $recipe));

					if($ev->isCancelled()){
						$this->inventory->sendContents($this);
						break;
					}

					foreach($used as $slot => $count){
						if($count === 0){
							continue;
						}

						$item = $this->inventory->getItem($slot);

						if($item->getCount() > $count){
							$newItem = clone $item;
							$newItem->setCount($item->getCount() - $count);
						}else{
							$newItem = Item::get(Item::AIR, 0, 0);
						}

						$this->inventory->setItem($slot, $newItem);
					}

					$extraItem = $this->inventory->addItem($recipe->getResult());
					if(count($extraItem) > 0 and !$this->isCreative()){ //Could not add all the items to our inventory (not enough space)
						foreach($extraItem as $item){
							$this->level->dropItem($this, $item);
						}
					}
				}

				switch($recipe->getResult()->getId()){
					case Item::WORKBENCH:
						$this->awardAchievement("buildWorkBench");
						break;
					case Item::WOODEN_PICKAXE:
						$this->awardAchievement("buildPickaxe");
						break;
					case Item::FURNACE:
						$this->awardAchievement("buildFurnace");
						break;
					case Item::WOODEN_HOE:
						$this->awardAchievement("buildHoe");
						break;
					case Item::BREAD:
						$this->awardAchievement("makeBread");
						break;
					case Item::CAKE:
						//TODO: detect complex recipes like cake that leave remains
						$this->awardAchievement("bakeCake");
						$this->inventory->addItem(Item::get(Item::BUCKET, 0, 3));
						break;
					case Item::STONE_PICKAXE:
					case Item::GOLD_PICKAXE:
					case Item::IRON_PICKAXE:
					case Item::DIAMOND_PICKAXE:
						$this->awardAchievement("buildBetterPickaxe");
						break;
					case Item::WOODEN_SWORD:
						$this->awardAchievement("buildSword");
						break;
					case Item::DIAMOND:
						$this->awardAchievement("diamond");
						break;
				}

				break;

			case ProtocolInfo::CONTAINER_SET_SLOT_PACKET:
				if($this->spawned === false or $this->blocked === true or !$this->isAlive()){
					break;
				}

				if($packet->slot < 0){
					break;
				}

				if($packet->windowid === 0){ //Our inventory
					if($packet->slot >= $this->inventory->getSize()){
						break;
					}
					$transaction = new BaseTransaction($this->inventory, $packet->slot, $packet->item);
				}elseif($packet->windowid === ContainerSetContentPacket::SPECIAL_ARMOR){ //Our armor
					if($packet->slot >= 4){
						break;
					}

					$transaction = new BaseTransaction($this->inventory, $packet->slot + $this->inventory->getSize(), $packet->item);
				}elseif(isset($this->windowIndex[$packet->windowid])){
					//Transaction for non-player-inventory window, such as anvil, chest, etc.

					$inv = $this->windowIndex[$packet->windowid];
					$achievements = [];

					if($inv instanceof FurnaceInventory and $inv->getItem($packet->slot)->getId() === Item::IRON_INGOT and $packet->slot === FurnaceInventory::RESULT){
						$achievements[] = "acquireIron";

					}elseif($inv instanceof EnchantInventory and $packet->item->hasEnchantments()){
						$inv->onEnchant($this, $inv->getItem($packet->slot), $packet->item);
					}

					$transaction = new BaseTransaction($inv, $packet->slot, $packet->item, $achievements);
				}else{
					//Client sent a transaction for a window which the server doesn't think they have open
					break;
				}

				$this->getTransactionQueue()->addTransaction($transaction);

				break;
			case ProtocolInfo::BLOCK_ENTITY_DATA_PACKET:
				if($this->spawned === false or $this->blocked === true or !$this->isAlive()){
					break;
				}
				$this->craftingType = self::CRAFTING_SMALL;

				$pos = new Vector3($packet->x, $packet->y, $packet->z);
				if($pos->distanceSquared($this) > 10000){
					break;
				}

				$t = $this->level->getTile($pos);
				if($t instanceof Spawnable){
					$nbt = new NBT(NBT::LITTLE_ENDIAN);
					$nbt->read($packet->namedtag, false, true);
					$nbt = $nbt->getData();
					if(!$t->updateCompoundTag($nbt, $this)){
						$t->spawnTo($this);
					}
				} else if ($t instanceof Sign){
                    $nbt = new NBT(NBT::LITTLE_ENDIAN);
                    $nbt->read($packet->namedtag);
                    $nbt = $nbt->getData();
                    if($nbt["id"] !== Tile::SIGN){
                        $t->spawnTo($this);
                    }else{
                        $ev = new SignChangeEvent($t->getBlock(), $this, [
                            TextFormat::clean($nbt["Text1"], $this->removeFormat), TextFormat::clean($nbt["Text2"], $this->removeFormat), TextFormat::clean($nbt["Text3"], $this->removeFormat), TextFormat::clean($nbt["Text4"], $this->removeFormat)
                        ]);
                        if(!isset($t->namedtag->Creator) or $t->namedtag["Creator"] !== $this->getRawUniqueId()){
                            $ev->setCancelled();
                        }
                        $this->server->getPluginManager()->callEvent($ev);
                        if(!$ev->isCancelled()){
                            $t->setText($ev->getLine(0), $ev->getLine(1), $ev->getLine(2), $ev->getLine(3));
                        }else{
                            $t->spawnTo($this);
                        }
                    }
                }

                break;
			case ProtocolInfo::SET_PLAYER_GAME_TYPE_PACKET:
				if($packet->gamemode !== ($this->gamemode & 0x01)){
					//GUI gamemode change, set it back to original for now (only possible through client bug or hack with current allowed client permissions)
					$pk = new SetPlayerGameTypePacket();
					$pk->gamemode = $this->gamemode & 0x01;
					$this->dataPacket($pk);
					$this->sendSettings();
				}
				break;
			case ProtocolInfo::ITEM_FRAME_DROP_ITEM_PACKET:
				if($this->spawned === false or $this->blocked === true or !$this->isAlive()){
					break;
				}

				if(($tile = $this->level->getTile($this->temporalVector->setComponents($packet->x, $packet->y, $packet->z))) instanceof ItemFrame){
					if(!$tile->getItem()->equals($packet->item) and !$this->isCreative(true)){
						$tile->spawnTo($this);
						break;
					}

					if(lcg_value() <= $tile->getItemDropChance() and $packet->item->getId() !== Item::AIR){
						$this->level->dropItem($tile->getBlock(), $packet->item); //Use the packet item to handle creative drops correctly
					}
					$tile->setItem(null);
					$tile->setItemRotation(0);
				}

				break;
			default:
				break;
		}

		$timings->stopTiming();
	}

	/**
	 * Kicks a player from the server
	 *
	 * @param string $reason
	 * @param bool   $isAdmin
	 *
	 * @return bool
	 */
	public function kick($reason = "", $isAdmin = true){
		$this->server->getPluginManager()->callEvent($ev = new PlayerKickEvent($this, $reason, $this->getLeaveMessage()));
		if(!$ev->isCancelled()){
			if($isAdmin){
				$message = "Kicked by admin." . ($reason !== "" ? " Reason: " . $reason : "");
			}else{
				if($reason === ""){
					$message = "disconnectionScreen.noReason";
				}else{
					$message = $reason;
				}
			}
			$this->close($ev->getQuitMessage(), $message);

			return true;
		}

		return false;
	}

	/**
	 * @param Item $item
	 *
	 * Drops the specified item in front of the player.
	 */
	public function dropItem(Item $item){
		if($this->spawned === false or $this->blocked === true or !$this->isAlive()){
			return;
		}

		if(($this->isCreative() and $this->server->limitedCreative) or $this->isSpectator()){
			//Ignore for limited creative
			return;
		}

		if($item->getId() === Item::AIR or $item->getCount() < 1){
			//Ignore dropping air or items with bad counts
			return;
		}

		$ev = new PlayerDropItemEvent($this, $item);
		$this->server->getPluginManager()->callEvent($ev);
		if($ev->isCancelled()){
			$this->getFloatingInventory()->removeItem($item);
			$this->getInventory()->addItem($item);
			return;
		}

		$motion = $this->getDirectionVector()->multiply(0.4);

		$this->level->dropItem($this->add(0, 1.3, 0), $item, $motion, 40);

		$this->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_ACTION, false);
	}

	/**
	 * Sends a direct chat message to a player
	 *
	 * @param string|TextContainer $message
	 * @return bool
	 */
	public function sendMessage($message){

		if($message instanceof TextContainer){

			if($message instanceof TranslationContainer){
				$this->sendTranslation($message->getText(), $message->getParameters());
				return false;
			}

			$message = $message->getText();

		}

		$mes = explode("\n", $this->server->getLanguage()->translateString($message));

		foreach($mes as $m){
			if($m !== ""){
				$this->server->getPluginManager()->callEvent($ev = new PlayerTextPreSendEvent($this, $m, PlayerTextPreSendEvent::MESSAGE));
				if(!$ev->isCancelled()){
					$pk = new TextPacket();
					$pk->type = TextPacket::TYPE_RAW;
					$pk->message = $ev->getMessage();
					$this->dataPacket($pk);
				}
			}
		}

		return true;
	}

	public function sendTranslation($message, array $parameters = []){
		$pk = new TextPacket();
		if(!$this->server->isLanguageForced()){
			$pk->type = TextPacket::TYPE_TRANSLATION;
			$pk->message = $this->server->getLanguage()->translateString($message, $parameters, "pocketmine.");
			foreach($parameters as $i => $p){
				$parameters[$i] = $this->server->getLanguage()->translateString($p, $parameters, "pocketmine.");
			}
			$pk->parameters = $parameters;
		}else{
			$pk->type = TextPacket::TYPE_RAW;
			$pk->message = $this->server->getLanguage()->translateString($message, $parameters);
		}

		$ev = new PlayerTextPreSendEvent($this, $pk->message, PlayerTextPreSendEvent::TRANSLATED_MESSAGE);
		$this->server->getPluginManager()->callEvent($ev);
		if(!$ev->isCancelled()){
			$this->dataPacket($pk);
			return true;
		}
		return false;
	}

	public function sendPopup($message, $subtitle = ""){
		$ev = new PlayerTextPreSendEvent($this, $message, PlayerTextPreSendEvent::POPUP);
		$this->server->getPluginManager()->callEvent($ev);
		if(!$ev->isCancelled()){
			$pk = new TextPacket();
			$pk->type = TextPacket::TYPE_POPUP;
			$pk->source = $ev->getMessage();
			$pk->message = $subtitle;
			$this->dataPacket($pk);
			return true;
		}
		return false;
	}

	/**
	 * @param $message
	 * @return bool
	 */
	public function sendTip($message){
		$ev = new PlayerTextPreSendEvent($this, $message, PlayerTextPreSendEvent::TIP);
		$this->server->getPluginManager()->callEvent($ev);
		if(!$ev->isCancelled()){
			$pk = new TextPacket();
			$pk->type = TextPacket::TYPE_TIP;
			$pk->message = $ev->getMessage();
			$this->dataPacket($pk);
			return true;
		}
		return false;
	}

	/**
	 * Note for plugin developers: use kick() with the isAdmin
	 * flag set to kick without the "Kicked by admin" part instead of this method.
	 *
	 * @param string $message Message to be broadcasted
	 * @param string $reason Reason showed in console
	 * @param bool   $notify
	 */
	public final function close($message = "", $reason = "generic reason", $notify = true){
		if($this->connected and !$this->closed){
			if($notify and strlen((string) $reason) > 0){
				$pk = new DisconnectPacket;
				$pk->message = $reason;
				$this->directDataPacket($pk);
			}

			//$this->setLinked();

			if($this->fishingHook instanceof FishingHook){
				$this->fishingHook->close();
				$this->fishingHook = null;
			}

			$this->removeEffect(Effect::HEALTH_BOOST);

			$this->connected = false;
			if(strlen($this->getName()) > 0){
				$this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message, true));
				if($this->loggedIn === true and $ev->getAutoSave()){
					$this->save();
				}
			}

			foreach($this->server->getOnlinePlayers() as $player){
				if(!$player->canSee($this)){
					$player->showPlayer($this);
				}
			}
			$this->hiddenPlayers = [];

			foreach($this->windowIndex as $window){
				$this->removeWindow($window);
			}

			foreach($this->usedChunks as $index => $d){
				Level::getXZ($index, $chunkX, $chunkZ);
				$this->level->unregisterChunkLoader($this, $chunkX, $chunkZ);
				unset($this->usedChunks[$index]);
			}

			parent::close();

			$this->interface->close($this, $notify ? $reason : "");

			if($this->loggedIn){
				$this->server->removeOnlinePlayer($this);
			}

			$this->loggedIn = false;

			if(isset($ev) and $this->username != "" and $this->spawned !== false and $ev->getQuitMessage() != ""){
				if($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_MESSAGE) $this->server->broadcastMessage($ev->getQuitMessage());
				elseif($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_TIP) $this->server->broadcastTip(str_replace("@player", $this->getName(), $this->server->playerLogoutMsg));
				elseif($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_POPUP) $this->server->broadcastPopup(str_replace("@player", $this->getName(), $this->server->playerLogoutMsg));
			}

			$this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this);
			$this->spawned = false;
			$this->server->getLogger()->info($this->getServer()->getLanguage()->translateString("pocketmine.player.logOut", [
				TextFormat::AQUA . $this->getName() . TextFormat::WHITE,
				$this->ip,
				$this->port,
				$this->getServer()->getLanguage()->translateString($reason)
			]));
			$this->windows = new \SplObjectStorage();
			$this->windowIndex = [];
			$this->usedChunks = [];
			$this->loadQueue = [];
			$this->hasSpawned = [];
			$this->spawnPosition = null;
			unset($this->buffer);

			if($this->server->dserverConfig["enable"] and $this->server->dserverConfig["queryAutoUpdate"]) $this->server->updateQuery();
		}

		if($this->perm !== null){
			$this->perm->clearPermissions();
			$this->perm = null;
		}

		$this->inventory = null;
		$this->transactionQueue = null;

		$this->chunk = null;

		$this->server->removePlayer($this);
	}

	public function __debugInfo(){
		return [];
	}

	/**
	 * Handles player data saving
	 */
	public function save($async = false){
		if($this->closed){
			throw new \InvalidStateException("Tried to save closed player");
		}

		parent::saveNBT();
		if($this->level instanceof Level){
			$this->namedtag->Level = new StringTag("Level", $this->level->getName());
			if($this->hasValidSpawnPosition()){
				$this->namedtag["SpawnLevel"] = $this->spawnPosition->getLevel()->getName();
				$this->namedtag["SpawnX"] = (int) $this->spawnPosition->x;
				$this->namedtag["SpawnY"] = (int) $this->spawnPosition->y;
				$this->namedtag["SpawnZ"] = (int) $this->spawnPosition->z;
			}

			foreach($this->achievements as $achievement => $status){
				$this->namedtag->Achievements[$achievement] = new ByteTag($achievement, $status === true ? 1 : 0);
			}

			$this->namedtag["playerGameType"] = $this->gamemode;
			$this->namedtag["lastPlayed"] = new LongTag("lastPlayed", floor(microtime(true) * 1000));
			$this->namedtag["Hunger"] = new ShortTag("Hunger", $this->food);
			$this->namedtag["Health"] = new ShortTag("Health", $this->getHealth());
			$this->namedtag["MaxHealth"] = new ShortTag("MaxHealth", $this->getMaxHealth());
			$this->namedtag["Experience"] = new LongTag("Experience", $this->exp);
			$this->namedtag["ExpLevel"] = new LongTag("ExpLevel", $this->expLevel);

			if($this->username != "" and $this->namedtag instanceof CompoundTag){
				$this->server->saveOfflinePlayerData($this->username, $this->namedtag, $async);
			}
		}
	}

	/**
	 * Gets the username
	 *
	 * @return string
	 */
	public function getName(){
		return $this->username;
	}

	public function kill(){
		if(!$this->spawned){
			return;
		}

		$message = "death.attack.generic";

		$params = [
			$this->getDisplayName()
		];

		$cause = $this->getLastDamageCause();

		switch($cause === null ? EntityDamageEvent::CAUSE_CUSTOM : $cause->getCause()){
			case EntityDamageEvent::CAUSE_ENTITY_ATTACK:
				if($cause instanceof EntityDamageByEntityEvent){
					$e = $cause->getDamager();
					if($e instanceof Player){
						$message = "death.attack.player";
						$params[] = $e->getDisplayName();
						break;
					}elseif($e instanceof Living){
						$message = "death.attack.mob";
						$params[] = $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName();
						break;
					}else{
						$params[] = "Unknown";
					}
				}
				break;
			case EntityDamageEvent::CAUSE_PROJECTILE:
				if($cause instanceof EntityDamageByEntityEvent){
					$e = $cause->getDamager();
					if($e instanceof Player){
						$message = "death.attack.arrow";
						$params[] = $e->getDisplayName();
					}elseif($e instanceof Living){
						$message = "death.attack.arrow";
						$params[] = $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName();
						break;
					}else{
						$params[] = "Unknown";
					}
				}
				break;
			case EntityDamageEvent::CAUSE_SUICIDE:
				$message = "death.attack.generic";
				break;
			case EntityDamageEvent::CAUSE_VOID:
				$message = "death.attack.outOfWorld";
				break;
			case EntityDamageEvent::CAUSE_FALL:
				if($cause instanceof EntityDamageEvent){
					if($cause->getFinalDamage() > 2){
						$message = "death.fell.accident.generic";
						break;
					}
				}
				$message = "death.attack.fall";
				break;

			case EntityDamageEvent::CAUSE_SUFFOCATION:
				$message = "death.attack.inWall";
				break;

			case EntityDamageEvent::CAUSE_LAVA:
				$message = "death.attack.lava";
				break;

			case EntityDamageEvent::CAUSE_FIRE:
				$message = "death.attack.onFire";
				break;

			case EntityDamageEvent::CAUSE_FIRE_TICK:
				$message = "death.attack.inFire";
				break;

			case EntityDamageEvent::CAUSE_DROWNING:
				$message = "death.attack.drown";
				break;

			case EntityDamageEvent::CAUSE_CONTACT:
				if($cause instanceof EntityDamageByBlockEvent){
					if($cause->getDamager()->getId() === Block::CACTUS){
						$message = "death.attack.cactus";
					}
				}
				break;

			case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION:
			case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION:
				if($cause instanceof EntityDamageByEntityEvent){
					$e = $cause->getDamager();
					if($e instanceof Player){
						$message = "death.attack.explosion.player";
						$params[] = $e->getDisplayName();
					}elseif($e instanceof Living){
						$message = "death.attack.explosion.player";
						$params[] = $e->getNameTag() !== "" ? $e->getNameTag() : $e->getName();
						break;
					}
				}else{
					$message = "death.attack.explosion";
				}
				break;

			case EntityDamageEvent::CAUSE_MAGIC:
				$message = "death.attack.magic";
				break;

			case EntityDamageEvent::CAUSE_CUSTOM:
				break;

			default:

		}

		Entity::kill();

		$ev = new PlayerDeathEvent($this, $this->getDrops(), new TranslationContainer($message, $params));
		$ev->setKeepInventory($this->server->keepInventory);
		$ev->setKeepExperience($this->server->keepExperience);
		$this->server->getPluginManager()->callEvent($ev);

		if(!$ev->getKeepInventory()){
			foreach($ev->getDrops() as $item){
				$this->level->dropItem($this, $item);
			}

			if($this->inventory !== null){
				$this->inventory->clearAll();
			}
		}

		if($this->server->expEnabled and !$ev->getKeepExperience()){
			$exp = min(91, $this->getTotalXp()); //Max 7 levels of exp dropped
			$this->getLevel()->spawnXPOrb($this->add(0, 0.2, 0), $exp);
			$this->setTotalXp(0, true);
		}

		if($ev->getDeathMessage() != ""){
			$this->server->broadcast($ev->getDeathMessage(), Server::BROADCAST_CHANNEL_USERS);
		}

		$pos = $this->getSpawn();

		$this->setHealth(0);

		$pk = new RespawnPacket();
		$pk->x = $pos->x;
		$pk->y = $pos->y;
		$pk->z = $pos->z;
		$this->dataPacket($pk);
	}

	public function setHealth($amount){
		parent::setHealth($amount);
		if($this->spawned === true){
			$this->foodTick = 0;
			$this->getAttributeMap()->getAttribute(Attribute::HEALTH)->setMaxValue($this->getMaxHealth())->setValue($amount, true);
		}
	}

	public function attack($damage, EntityDamageEvent $source){
		if(!$this->isAlive()){
			return;
		}

		if($this->isCreative()
			and $source->getCause() !== EntityDamageEvent::CAUSE_MAGIC
			and $source->getCause() !== EntityDamageEvent::CAUSE_SUICIDE
			and $source->getCause() !== EntityDamageEvent::CAUSE_VOID
		){
			$source->setCancelled();
		}elseif($this->allowFlight and $source->getCause() === EntityDamageEvent::CAUSE_FALL){
			$source->setCancelled();
		}

		parent::attack($damage, $source);

		if($source->isCancelled()){
			return;
		}elseif($this->getLastDamageCause() === $source and $this->spawned){
			$pk = new EntityEventPacket();
			$pk->eid = 0;
			$pk->event = EntityEventPacket::HURT_ANIMATION;
			$this->dataPacket($pk);

			if($this->isSurvival()){
				$this->exhaust(0.3, PlayerExhaustEvent::CAUSE_DAMAGE);
			}
		}
		return true;
	}

	public function sendPosition(Vector3 $pos, $yaw = null, $pitch = null, $mode = MovePlayerPacket::MODE_NORMAL, array $targets = null){
		$yaw = $yaw === null ? $this->yaw : $yaw;
		$pitch = $pitch === null ? $this->pitch : $pitch;

		$pk = new MovePlayerPacket();
		$pk->eid = $this->getId();
		$pk->x = $pos->x;
		$pk->y = $pos->y + $this->getEyeHeight();
		$pk->z = $pos->z;
		$pk->bodyYaw = $yaw;
		$pk->pitch = $pitch;
		$pk->yaw = $yaw;
		$pk->mode = $mode;

		if($targets !== null){
			$this->server->broadcastPacket($targets, $pk);
		}else{
			$pk->eid = 0;
			$this->dataPacket($pk);
		}
	}

	protected function checkChunks(){
		if($this->chunk === null or ($this->chunk->getX() !== ($this->x >> 4) or $this->chunk->getZ() !== ($this->z >> 4))){
			if($this->chunk !== null){
				$this->chunk->removeEntity($this);
			}
			$this->chunk = $this->level->getChunk($this->x >> 4, $this->z >> 4, true);

			if(!$this->justCreated){
				$newChunk = $this->level->getChunkPlayers($this->x >> 4, $this->z >> 4);
				unset($newChunk[$this->getLoaderId()]);

				/** @var Player[] $reload */
				$reload = [];
				foreach($this->hasSpawned as $player){
					if(!isset($newChunk[$player->getLoaderId()])){
						$this->despawnFrom($player);
					}else{
						unset($newChunk[$player->getLoaderId()]);
						$reload[] = $player;
					}
				}

				foreach($newChunk as $player){
					$this->spawnTo($player);
				}
			}

			if($this->chunk === null){
				return;
			}

			$this->chunk->addEntity($this);
		}
	}

	protected function checkTeleportPosition(){
		if($this->teleportPosition !== null){
			$chunkX = $this->teleportPosition->x >> 4;
			$chunkZ = $this->teleportPosition->z >> 4;

			for($X = -1; $X <= 1; ++$X){
				for($Z = -1; $Z <= 1; ++$Z){
					if(!isset($this->usedChunks[$index = Level::chunkHash($chunkX + $X, $chunkZ + $Z)]) or $this->usedChunks[$index] === false){
						return false;
					}
				}
			}

			$this->sendPosition($this, null, null, MovePlayerPacket::MODE_RESET);
			$this->spawnToAll();
			$this->forceMovement = $this->teleportPosition;
			$this->teleportPosition = null;

			return true;
		}

		return true;
	}

	/**
	 * @param Vector3|Position|Location $pos
	 * @param float                     $yaw
	 * @param float                     $pitch
	 *
	 * @return bool
	 */
	public function teleport(Vector3 $pos, $yaw = null, $pitch = null){
		if(!$this->isOnline()){
			return false;
		}

		$oldPos = $this->getPosition();
		if(parent::teleport($pos, $yaw, $pitch)){

			foreach($this->windowIndex as $window){
				if($window === $this->inventory){
					continue;
				}
				$this->removeWindow($window);
			}

			$this->teleportPosition = new Vector3($this->x, $this->y, $this->z);

			if(!$this->checkTeleportPosition()){
				$this->forceMovement = $oldPos;
			}else{
				$this->spawnToAll();
			}


			$this->resetFallDistance();
			$this->nextChunkOrderRun = 0;
			$this->newPosition = null;
			$this->stopSleep();
			return true;
		}
		return false;
	}

	/**
	 * This method may not be reliable. Clients don't like to be moved into unloaded chunks.
	 * Use teleport() for a delayed teleport after chunks have been sent.
	 *
	 * @param Vector3 $pos
	 * @param float   $yaw
	 * @param float   $pitch
	 */
	public function teleportImmediate(Vector3 $pos, $yaw = null, $pitch = null){
		if(parent::teleport($pos, $yaw, $pitch)){

			foreach($this->windowIndex as $window){
				if($window === $this->inventory){
					continue;
				}
				$this->removeWindow($window);
			}

			$this->forceMovement = new Vector3($this->x, $this->y, $this->z);
			$this->sendPosition($this, $this->yaw, $this->pitch, MovePlayerPacket::MODE_RESET);


			$this->resetFallDistance();
			$this->orderChunks();
			$this->nextChunkOrderRun = 0;
			$this->newPosition = null;
		}
	}


	/**
	 * @param Inventory $inventory
	 *
	 * @return int
	 */
	public function getWindowId(Inventory $inventory) : int{
		if($this->windows->contains($inventory)){
			return $this->windows[$inventory];
		}

		return -1;
	}

	/**
	 * Returns the created/existing window id
	 *
	 * @param Inventory $inventory
	 * @param int       $forceId
	 *
	 * @return int
	 */
	public function addWindow(Inventory $inventory, $forceId = null) : int{
		if($this->windows->contains($inventory)){
			return $this->windows[$inventory];
		}

		if($forceId === null){
			$this->windowCnt = $cnt = max(2, ++$this->windowCnt % 99);
		}else{
			$cnt = (int) $forceId;
		}
		$this->windowIndex[$cnt] = $inventory;
		$this->windows->attach($inventory, $cnt);
		if($inventory->open($this)){
			return $cnt;
		}else{
			$this->removeWindow($inventory);

			return -1;
		}
	}

	public function removeWindow(Inventory $inventory){
		$inventory->close($this);
		if($this->windows->contains($inventory)){
			$id = $this->windows[$inventory];
			$this->windows->detach($this->windowIndex[$id]);
			unset($this->windowIndex[$id]);
		}
	}

	public function setMetadata($metadataKey, MetadataValue $metadataValue){
		$this->server->getPlayerMetadata()->setMetadata($this, $metadataKey, $metadataValue);
	}

	public function getMetadata($metadataKey){
		return $this->server->getPlayerMetadata()->getMetadata($this, $metadataKey);
	}

	public function hasMetadata($metadataKey){
		return $this->server->getPlayerMetadata()->hasMetadata($this, $metadataKey);
	}

	public function removeMetadata($metadataKey, Plugin $plugin){
		$this->server->getPlayerMetadata()->removeMetadata($this, $metadataKey, $plugin);
	}

	public function onChunkChanged(Chunk $chunk){
		$this->loadQueue[Level::chunkHash($chunk->getX(), $chunk->getZ())] = abs(($this->x >> 4) - $chunk->getX()) + abs(($this->z >> 4) - $chunk->getZ());
	}

	public function onChunkLoaded(Chunk $chunk){
	}

	public function onChunkPopulated(Chunk $chunk){
	}

	public function onChunkUnloaded(Chunk $chunk){
	}

	public function onBlockChanged(Vector3 $block){

	}

	public function getLoaderId(){
		return $this->loaderId;
	}

	public function isLoaderActive(){
		return $this->isConnected();
	}

	/**
	 * @param $chunkX
	 * @param $chunkZ
	 * @param $payload
	 *
	 * @return BatchPacket|FullChunkDataPacket
	 */
	public static function getChunkCacheFromData($chunkX, $chunkZ, $payload){
		$pk = new FullChunkDataPacket();
		$pk->chunkX = $chunkX;
		$pk->chunkZ = $chunkZ;
		$pk->data = $payload;
		if(Network::$BATCH_THRESHOLD >= 0){
			$pk->encode();
			$batch = new BatchPacket();
			$batch->payload = zlib_encode(Binary::writeUnsignedVarInt(strlen($pk->getBuffer())) . $pk->getBuffer(), ZLIB_ENCODING_DEFLATE, Server::getInstance()->networkCompressionLevel);
			$batch->encode();
			$batch->isEncoded = true;
			return $batch;
		}
		return $pk;
	}

	/**
	 * @param Effect
	*/
	public function addEffect(Effect $effect){//Overwrite
		if($effect->isBad() && $this->isCreative()){
			return;
		}

		parent::addEffect($effect);
	}
}


================================================
FILE: src/pocketmine/PocketMine.php
================================================
<?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 {
	function safe_var_dump(){
		static $cnt = 0;
		foreach(func_get_args() as $var){
			switch(true){
				case is_array($var):
					echo str_repeat("  ", $cnt) . "array(" . count($var) . ") {" . PHP_EOL;
					foreach($var as $key => $value){
						echo str_repeat("  ", $cnt + 1) . "[" . (is_integer($key) ? $key : '"' . $key . '"') . "]=>" . PHP_EOL;
						++$cnt;
						safe_var_dump($value);
						--$cnt;
					}
					echo str_repeat("  ", $cnt) . "}" . PHP_EOL;
					break;
				case is_int($var):
					echo str_repeat("  ", $cnt) . "int(" . $var . ")" . PHP_EOL;
					break;
				case is_float($var):
					echo str_repeat("  ", $cnt) . "float(" . $var . ")" . PHP_EOL;
					break;
				case is_bool($var):
					echo str_repeat("  ", $cnt) . "bool(" . ($var === true ? "true" : "false") . ")" . PHP_EOL;
					break;
				case is_string($var):
					echo str_repeat("  ", $cnt) . "string(" . strlen($var) . ") \"$var\"" . PHP_EOL;
					break;
				case is_resource($var):
					echo str_repeat("  ", $cnt) . "resource() of type (" . get_resource_type($var) . ")" . PHP_EOL;
					break;
				case is_object($var):
					echo str_repeat("  ", $cnt) . "object(" . get_class($var) . ")" . PHP_EOL;
					break;
				case is_null($var):
					echo str_repeat("  ", $cnt) . "NULL" . PHP_EOL;
					break;
			}
		}
	}

	function dummy(){

	}
}

namespace pocketmine {
	use pocketmine\utils\Binary;
	use pocketmine\utils\MainLogger;
	use pocketmine\utils\ServerKiller;
	use pocketmine\utils\Terminal;
	use pocketmine\utils\Utils;
	use pocketmine\wizard\Installer;

	const VERSION = "1.0";
	const API_VERSION = "3.0.0-ALPHA1";
	const CODENAME = "Birpen";
	const MINECRAFT_VERSION = "v1.0.0 alpha";
	const MINECRAFT_VERSION_NETWORK = "1.0.0";
	const GENISYS_API_VERSION = '1.9.3';

	/*
	 * Startup code. Do not look at it, it may harm you.
	 * Most of them are hacks to fix date-related bugs, or basic functions used after this
	 * This is the only non-class based file on this project.
	 * Enjoy it as much as I did writing it. I don't want to do it again.
	 */

	if(\Phar::running(true) !== ""){
		@define('pocketmine\PATH', \Phar::running(true) . "/");
	}else{
		@define('pocketmine\PATH', \getcwd() . DIRECTORY_SEPARATOR);
	}

	if(version_compare("7.0", PHP_VERSION) > 0){
		echo "[CRITICAL] You must use PHP >= 7.0" . PHP_EOL;
		echo "[CRITICAL] Please use the installer provided on the homepage." . PHP_EOL;
		exit(1);
	}

	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("ClassLoader", false)){
		require_once(\pocketmine\PATH . "src/spl/ClassLoader.php");
		require_once(\pocketmine\PATH . "src/spl/BaseClassLoader.php");
		require_once(\pocketmine\PATH . "src/pocketmine/CompatibleClassLoader.php");
	}

	$autoloader = new CompatibleClassLoader();
	$autoloader->addPath(\pocketmine\PATH . "src");
	$autoloader->addPath(\pocketmine\PATH . "src" . DIRECTORY_SEPARATOR . "spl");
	$autoloader->register(true);


	set_time_limit(0); //Who set it to 30 seconds?!?!

	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", -1);
	define('pocketmine\START_TIME', microtime(true));

	$opts = getopt("", ["data:", "plugins:", "no-wizard", "enable-profiler"]);

	define('pocketmine\DATA', isset($opts["data"]) ? $opts["data"] . DIRECTORY_SEPARATOR : \getcwd() . DIRECTORY_SEPARATOR);
	define('pocketmine\PLUGIN_PATH', isset($opts["plugins"]) ? $opts["plugins"] . DIRECTORY_SEPARATOR : \getcwd() . DIRECTORY_SEPARATOR . "plugins" . DIRECTORY_SEPARATOR);

	Terminal::init();

	define('pocketmine\ANSI', Terminal::hasFormattingCodes());

	if(!file_exists(\pocketmine\DATA)){
		mkdir(\pocketmine\DATA, 0777, true);
	}

	//Logger has a dependency on timezone, so we'll set it to UTC until we can get the actual timezone.
	date_default_timezone_set("UTC");

	$logger = new MainLogger(\pocketmine\DATA . "server.log", \pocketmine\ANSI);

	if(!ini_get("date.timezone")){
		if(($timezone = detect_system_timezone()) and date_default_timezone_set($timezone)){
			//Success! Timezone has already been set and validated in the if statement.
			//This here is just for redundancy just in case some program wants to read timezone data from the ini.
			ini_set("date.timezone", $timezone);
		}else{
			//If system timezone detection fails or timezone is an invalid value.
			if($response = Utils::getURL("http://ip-api.com/json")
				and $ip_geolocation_data = json_decode($response, true)
				and $ip_geolocation_data['status'] !== 'fail'
				and date_default_timezone_set($ip_geolocation_data['timezone'])
			){
				//Again, for redundancy.
				ini_set("date.timezone", $ip_geolocation_data['timezone']);
			}else{
				ini_set("date.timezone", "UTC");
				date_default_timezone_set("UTC");
				$logger->warning("Timezone could not be automatically determined. An incorrect timezone will result in incorrect timestamps on console logs. It has been set to \"UTC\" by default. You can change it on the php.ini file.");
			}
		}
	}else{
		/*
		 * This is here so that people don't come to us complaining and fill up the issue tracker when they put
		 * an incorrect timezone abbreviation in php.ini apparently.
		 */
		$timezone = ini_get("date.timezone");
		if(strpos($timezone, "/") === false){
			$default_timezone = timezone_name_from_abbr($timezone);
			ini_set("date.timezone", $default_timezone);
			date_default_timezone_set($default_timezone);
		} else {
			date_default_timezone_set($timezone);
		}
	}

	function detect_system_timezone(){
		switch(Utils::getOS()){
			case 'win':
				$regex = '/(UTC)(\+*\-*\d*\d*\:*\d*\d*)/';

				/*
				 * wmic timezone get Caption
				 * Get the timezone offset
				 *
				 * Sample Output var_dump
				 * array(3) {
				 *	  [0] =>
				 *	  string(7) "Caption"
				 *	  [1] =>
				 *	  string(20) "(UTC+09:30) Adelaide"
				 *	  [2] =>
				 *	  string(0) ""
				 *	}
				 */
				exec("wmic timezone get Caption", $output);

				$string = trim(implode("\n", $output));

				//Detect the Time Zone string
				preg_match($regex, $string, $matches);

				if(!isset($matches[2])){
					return false;
				}

				$offset = $matches[2];

				if($offset == ""){
					return "UTC";
				}

				return parse_offset($offset);
				break;
			case 'linux':
				// Ubuntu / Debian.
				if(file_exists('/etc/timezone')){
					$data = file_get_contents('/etc/timezone');
					if($data){
						return trim($data);
					}
				}

				// RHEL / CentOS
				if(file_exists('/etc/sysconfig/clock')){
					$data = parse_ini_file('/etc/sysconfig/clock');
					if(!empty($data['ZONE'])){
						return trim($data['ZONE']);
					}
				}

				//Portable method for incompatible linux distributions.

				$offset = trim(exec('date +%:z'));

				if($offset == "+00:00"){
					return "UTC";
				}

				return parse_offset($offset);
				break;
			case 'mac':
				if(is_link('/etc/localtime')){
					$filename = readlink('/etc/localtime');
					if(strpos($filename, '/usr/share/zoneinfo/') === 0){
						$timezone = substr($filename, 20);
						return trim($timezone);
					}
				}

				return false;
				break;
			default:
				return false;
				break;
		}
	}

	/**
	 * @param string $offset In the format of +09:00, +02:00, -04:00 etc.
	 *
	 * @return string
	 */
	function parse_offset($offset){
		//Make signed offsets unsigned for date_parse
		if(strpos($offset, '-') !== false){
			$negative_offset = true;
			$offset = str_replace('-', '', $offset);
		}else{
			if(strpos($offset, '+') !== false){
				$negative_offset = false;
				$offset = str_replace('+', '', $offset);
			}else{
				return false;
			}
		}

		$parsed = date_parse($offset);
		$offset = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];

		//After date_parse is done, put the sign back
		if($negative_offset == true){
			$offset = -abs($offset);
		}

		//And then, look the offset up.
		//timezone_name_from_abbr is not used because it returns false on some(most) offsets because it's mapping function is weird.
		//That's been a bug in PHP since 2008!
		foreach(timezone_abbreviations_list() as $zones){
			foreach($zones as $timezone){
				if($timezone['offset'] == $offset){
					return $timezone['timezone_id'];
				}
			}
		}

		return false;
	}

	if(isset($opts["enable-profiler"])){
		if(function_exists("profiler_enable")){
			\profiler_enable();
			$logger->notice("Execution is being profiled");
		}else{
			$logger->notice("No profiler found. Please install https://github.com/krakjoe/profiler");
		}
	}

	function kill($pid){
		switch(Utils::getOS()){
			case "win":
				exec("taskkill.exe /F /PID " . ((int) $pid) . " > NUL");
				break;
			case "mac":
			case "linux":
			default:
				if(function_exists("posix_kill")){
					posix_kill($pid, SIGKILL);
				}else{
					exec("kill -9 " . ((int)$pid) . " > /dev/null 2>&1");
				}
		}
	}

	/**
	 * @param object $value
	 * @param bool   $includeCurrent
	 *
	 * @return int
	 */
	function getReferenceCount($value, $includeCurrent = true){
		ob_start();
		debug_zval_dump($value);
		$ret = explode("\n", ob_get_contents());
		ob_end_clean();

		if(count($ret) >= 1 and preg_match('/^.* refcount\\(([0-9]+)\\)\\{$/', trim($ret[0]), $m) > 0){
			return ((int) $m[1]) - ($includeCurrent ? 3 : 4); //$value + zval call + extra call
		}
		return -1;
	}

	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"]) 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) . " " . (is_array($value) ? "Array()" : Utils::printable(@strval($value)))) . ", ";
				}
			}
			$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"] . "(" . Utils::printable(substr($params, 0, -2)) . ")";
		}

		return $messages;
	}

	function cleanPath($path){
		return rtrim(str_replace(["\\", ".php", "phar://", rtrim(str_replace(["\\", "phar://"], ["/", ""], \pocketmine\PATH), "/"), rtrim(str_replace(["\\", "phar://"], ["/", ""], \pocketmine\PLUGIN_PATH), "/")], ["/", "", "", "", ""], $path), "/");
	}

	$errors = 0;

	if(php_sapi_name() !== "cli"){
		$logger->critical("You must run PocketMine-MP using the CLI.");
		++$errors;
	}

	if(!extension_loaded("sockets")){
		$logger->critical("Unable to find the Socket extension.");
		++$errors;
	}

	$pthreads_version = phpversion("pthreads");
	if(substr_count($pthreads_version, ".") < 2){
		$pthreads_version = "0.$pthreads_version";
	}
	if(version_compare($pthreads_version, "3.1.5") < 0){
		$logger->critical("pthreads >= 3.1.5 is required, while you have $pthreads_version.");
		++$errors;
	}

	if(!extension_loaded("uopz")){
		//$logger->notice("Couldn't find the uopz extension. Some functions may be limited");
	}

	if(extension_loaded("pocketmine")){
		if(version_compare(phpversion("pocketmine"), "0.0.1") < 0){
			$logger->critical("You have the native PocketMine extension, but your version is lower than 0.0.1.");
			++$errors;
		}elseif(version_compare(phpversion("pocketmine"), "0.0.4") > 0){
			$logger->critical("You have the native PocketMine extension, but your version is higher than 0.0.4.");
			++$errors;
		}
	}
	
	if(extension_loaded("xdebug")){
		$logger->warning("


	You are running PocketMine with xdebug enabled. This has a major impact on performance.

		");
	}

	if(!extension_loaded("curl")){
		$logger->critical("Unable to find the cURL extension.");
		++$errors;
	}

	if(!extension_loaded("yaml")){
		$logger->critical("Unable to find the YAML extension.");
		++$errors;
	}

	if(!extension_loaded("sqlite3")){
		$logger->critical("Unable to find the SQLite3 extension.");
		++$errors;
	}

	if(!extension_loaded("zlib")){
		$logger->critical("Unable to find the Zlib extension.");
		++$errors;
	}

	if($errors > 0){
		$logger->critical("Please update your PHP from itxtech.org/genisys/get/, or recompile PHP again.");
		$logger->shutdown();
		$logger->join();
		exit(1); //Exit with error
	}

	if(file_exists(\pocketmine\PATH . ".git/refs/heads/master")){ //Found Git information!
		define('pocketmine\GIT_COMMIT', strtolower(trim(file_get_contents(\pocketmine\PATH . ".git/refs/heads/master"))));
	}else{
		define('pocketmine\GIT_COMMIT', "8f465763c590293e2003ce616832b6507edf5b1c");
	}

	@define("ENDIANNESS", (pack("d", 1) === "\77\360\0\0\0\0\0\0" ? Binary::BIG_ENDIAN : Binary::LITTLE_ENDIAN));
	@define("INT32_MASK", is_int(0xffffffff) ? 0xffffffff : -1);
	@ini_set("opcache.mmap_base", bin2hex(random_bytes(8))); //Fix OPCache address errors

	$lang = "unknown";
	if(!file_exists(\pocketmine\DATA . "server.properties") and !isset($opts["no-wizard"])){
		$inst = new Installer();
		$lang = $inst->getDefaultLang();
	}

	/*if(\Phar::running(true) === ""){
		$logger->warning("Non-packaged PocketMine-MP installation detected, do not use on production.");
	}*/

	ThreadManager::init();
	new Server($autoloader, $logger, \pocketmine\PATH, \pocketmine\DATA, \pocketmine\PLUGIN_PATH, $lang);

	$logger->info("Stopping other threads");

	foreach(ThreadManager::getInstance()->getAll() as $id => $thread){
		$logger->debug("Stopping " . (new \ReflectionClass($thread))->getShortName() . " t
Download .txt
gitextract_wdvdv96d/

├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── src/
│   ├── pocketmine/
│   │   ├── Achievement.php
│   │   ├── Collectable.php
│   │   ├── CompatibleClassLoader.php
│   │   ├── CrashDump.php
│   │   ├── IPlayer.php
│   │   ├── MemoryManager.php
│   │   ├── OfflinePlayer.php
│   │   ├── Player.php
│   │   ├── PocketMine.php
│   │   ├── Server.php
│   │   ├── Thread.php
│   │   ├── ThreadManager.php
│   │   ├── Worker.php
│   │   ├── block/
│   │   │   ├── AcaciaDoor.php
│   │   │   ├── AcaciaDoorBlock.php
│   │   │   ├── AcaciaWoodStairs.php
│   │   │   ├── ActivatorRail.php
│   │   │   ├── ActiveRedstoneLamp.php
│   │   │   ├── Air.php
│   │   │   ├── Anvil.php
│   │   │   ├── Beacon.php
│   │   │   ├── Bed.php
│   │   │   ├── Bedrock.php
│   │   │   ├── Beetroot.php
│   │   │   ├── BirchDoor.php
│   │   │   ├── BirchDoorBlock.php
│   │   │   ├── BirchWoodStairs.php
│   │   │   ├── Block.php
│   │   │   ├── BlockIds.php
│   │   │   ├── Bookshelf.php
│   │   │   ├── BrewingStand.php
│   │   │   ├── BrickStairs.php
│   │   │   ├── Bricks.php
│   │   │   ├── BrownMushroom.php
│   │   │   ├── BrownMushroomBlock.php
│   │   │   ├── BurningFurnace.php
│   │   │   ├── Cactus.php
│   │   │   ├── Cake.php
│   │   │   ├── Carpet.php
│   │   │   ├── Carrot.php
│   │   │   ├── Cauldron.php
│   │   │   ├── CauldronBlock.php
│   │   │   ├── Chest.php
│   │   │   ├── ChorusPlant.php
│   │   │   ├── Clay.php
│   │   │   ├── Coal.php
│   │   │   ├── CoalOre.php
│   │   │   ├── Cobblestone.php
│   │   │   ├── CobblestoneStairs.php
│   │   │   ├── Cobweb.php
│   │   │   ├── CocoaBlock.php
│   │   │   ├── ComparatorBlock.php
│   │   │   ├── Crops.php
│   │   │   ├── Dandelion.php
│   │   │   ├── DarkOakDoor.php
│   │   │   ├── DarkOakDoorBlock.php
│   │   │   ├── DarkOakWoodStairs.php
│   │   │   ├── DaylightDetector.php
│   │   │   ├── DaylightDetectorInverted.php
│   │   │   ├── DaylightSensor.php
│   │   │   ├── DaylightSensorInverted.php
│   │   │   ├── DeadBush.php
│   │   │   ├── DetectorRail.php
│   │   │   ├── Diamond.php
│   │   │   ├── DiamondOre.php
│   │   │   ├── Dirt.php
│   │   │   ├── Dispenser.php
│   │   │   ├── Door.php
│   │   │   ├── DoublePlant.php
│   │   │   ├── DoubleRedSandstoneSlab.php
│   │   │   ├── DoubleSlab.php
│   │   │   ├── DoubleWoodSlab.php
│   │   │   ├── DragonEgg.php
│   │   │   ├── Dropper.php
│   │   │   ├── ElectricalAppliance.php
│   │   │   ├── Emerald.php
│   │   │   ├── EmeraldOre.php
│   │   │   ├── EnchantingTable.php
│   │   │   ├── EndPortalFrame.php
│   │   │   ├── EndRod.php
│   │   │   ├── EndStone.php
│   │   │   ├── EndStoneBricks.php
│   │   │   ├── EnderChest.php
│   │   │   ├── Fallable.php
│   │   │   ├── Farmland.php
│   │   │   ├── Fence.php
│   │   │   ├── FenceGate.php
│   │   │   ├── FenceGateAcacia.php
│   │   │   ├── FenceGateBirch.php
│   │   │   ├── FenceGateDarkOak.php
│   │   │   ├── FenceGateJungle.php
│   │   │   ├── FenceGateSpruce.php
│   │   │   ├── Fire.php
│   │   │   ├── Flowable.php
│   │   │   ├── Flower.php
│   │   │   ├── FlowerPot.php
│   │   │   ├── Furnace.php
│   │   │   ├── Glass.php
│   │   │   ├── GlassPane.php
│   │   │   ├── GlowingObsidian.php
│   │   │   ├── GlowingRedstoneOre.php
│   │   │   ├── Glowstone.php
│   │   │   ├── Gold.php
│   │   │   ├── GoldOre.php
│   │   │   ├── Grass.php
│   │   │   ├── GrassPath.php
│   │   │   ├── Gravel.php
│   │   │   ├── HardenedClay.php
│   │   │   ├── HayBale.php
│   │   │   ├── HeavyWeightedPressurePlate.php
│   │   │   ├── Hopper.php
│   │   │   ├── HopperBlock.php
│   │   │   ├── Ice.php
│   │   │   ├── InactiveRedstoneLamp.php
│   │   │   ├── InvisibleBedrock.php
│   │   │   ├── Iron.php
│   │   │   ├── IronBars.php
│   │   │   ├── IronDoor.php
│   │   │   ├── IronOre.php
│   │   │   ├── IronTrapdoor.php
│   │   │   ├── ItemFrame.php
│   │   │   ├── ItemFrameBlock.php
│   │   │   ├── JungleDoor.php
│   │   │   ├── JungleDoorBlock.php
│   │   │   ├── JungleWoodStairs.php
│   │   │   ├── Ladder.php
│   │   │   ├── Lapis.php
│   │   │   ├── LapisOre.php
│   │   │   ├── Lava.php
│   │   │   ├── Leaves.php
│   │   │   ├── Leaves2.php
│   │   │   ├── Lever.php
│   │   │   ├── LightWeightedPressurePlate.php
│   │   │   ├── Liquid.php
│   │   │   ├── LitPumpkin.php
│   │   │   ├── LitRedstoneLamp.php
│   │   │   ├── LitRedstoneTorch.php
│   │   │   ├── Melon.php
│   │   │   ├── MelonStem.php
│   │   │   ├── MobHead.php
│   │   │   ├── MonsterEggBlock.php
│   │   │   ├── MonsterSpawner.php
│   │   │   ├── MossStone.php
│   │   │   ├── Mycelium.php
│   │   │   ├── NetherBrick.php
│   │   │   ├── NetherBrickFence.php
│   │   │   ├── NetherBrickStairs.php
│   │   │   ├── NetherQuartzOre.php
│   │   │   ├── NetherReactor.php
│   │   │   ├── NetherWart.php
│   │   │   ├── NetherWartBlock.php
│   │   │   ├── Netherrack.php
│   │   │   ├── Noteblock.php
│   │   │   ├── Obsidian.php
│   │   │   ├── PackedIce.php
│   │   │   ├── Piston.php
│   │   │   ├── PistonHead.php
│   │   │   ├── Planks.php
│   │   │   ├── Podzol.php
│   │   │   ├── Portal.php
│   │   │   ├── PortalBlock.php
│   │   │   ├── Potato.php
│   │   │   ├── PoweredComparatorBlock.php
│   │   │   ├── PoweredRail.php
│   │   │   ├── PoweredRepeater.php
│   │   │   ├── PoweredRepeaterBlock.php
│   │   │   ├── PressurePlate.php
│   │   │   ├── Prismarine.php
│   │   │   ├── Pumpkin.php
│   │   │   ├── PumpkinStem.php
│   │   │   ├── PurpurBlock.php
│   │   │   ├── PurpurStairs.php
│   │   │   ├── Quartz.php
│   │   │   ├── QuartzStairs.php
│   │   │   ├── Rail.php
│   │   │   ├── RedMushroom.php
│   │   │   ├── RedMushroomBlock.php
│   │   │   ├── RedSandstone.php
│   │   │   ├── RedSandstoneSlab.php
│   │   │   ├── RedSandstoneStairs.php
│   │   │   ├── Redstone.php
│   │   │   ├── RedstoneLamp.php
│   │   │   ├── RedstoneOre.php
│   │   │   ├── RedstoneSource.php
│   │   │   ├── RedstoneTorch.php
│   │   │   ├── RedstoneWire.php
│   │   │   ├── RepeaterBlock.php
│   │   │   ├── Sand.php
│   │   │   ├── Sandstone.php
│   │   │   ├── SandstoneStairs.php
│   │   │   ├── Sapling.php
│   │   │   ├── SeaLantern.php
│   │   │   ├── SignPost.php
│   │   │   ├── SkullBlock.php
│   │   │   ├── Slab.php
│   │   │   ├── Slab2.php
│   │   │   ├── SlimeBlock.php
│   │   │   ├── Snow.php
│   │   │   ├── SnowLayer.php
│   │   │   ├── Solid.php
│   │   │   ├── SolidLight.php
│   │   │   ├── SoulSand.php
│   │   │   ├── Sponge.php
│   │   │   ├── SpruceDoor.php
│   │   │   ├── SpruceDoorBlock.php
│   │   │   ├── SpruceWoodStairs.php
│   │   │   ├── StainedClay.php
│   │   │   ├── Stair.php
│   │   │   ├── StickyPiston.php
│   │   │   ├── StillLava.php
│   │   │   ├── StillWater.php
│   │   │   ├── Stone.php
│   │   │   ├── StoneBrickStairs.php
│   │   │   ├── StoneBricks.php
│   │   │   ├── StoneButton.php
│   │   │   ├── StonePressurePlate.php
│   │   │   ├── StoneWall.php
│   │   │   ├── Stonecutter.php
│   │   │   ├── Sugarcane.php
│   │   │   ├── TNT.php
│   │   │   ├── TallGrass.php
│   │   │   ├── Thin.php
│   │   │   ├── Torch.php
│   │   │   ├── Transparent.php
│   │   │   ├── Trapdoor.php
│   │   │   ├── TrappedChest.php
│   │   │   ├── Tripwire.php
│   │   │   ├── TripwireHook.php
│   │   │   ├── UnlitRedstoneTorch.php
│   │   │   ├── UnpoweredRepeater.php
│   │   │   ├── Vine.php
│   │   │   ├── WallSign.php
│   │   │   ├── Water.php
│   │   │   ├── WaterLily.php
│   │   │   ├── WeightedPressurePlateHeavy.php
│   │   │   ├── WeightedPressurePlateLight.php
│   │   │   ├── Wheat.php
│   │   │   ├── Wood.php
│   │   │   ├── Wood2.php
│   │   │   ├── WoodDoor.php
│   │   │   ├── WoodSlab.php
│   │   │   ├── WoodStairs.php
│   │   │   ├── WoodenButton.php
│   │   │   ├── WoodenPressurePlate.php
│   │   │   ├── Wool.php
│   │   │   └── Workbench.php
│   │   ├── command/
│   │   │   ├── Command.php
│   │   │   ├── CommandExecutor.php
│   │   │   ├── CommandMap.php
│   │   │   ├── CommandReader.php
│   │   │   ├── CommandSender.php
│   │   │   ├── ConsoleCommandSender.php
│   │   │   ├── FormattedCommandAlias.php
│   │   │   ├── PluginCommand.php
│   │   │   ├── PluginIdentifiableCommand.php
│   │   │   ├── RemoteConsoleCommandSender.php
│   │   │   ├── SimpleCommandMap.php
│   │   │   └── defaults/
│   │   │       ├── BanCidByNameCommand.php
│   │   │       ├── BanCidCommand.php
│   │   │       ├── BanCommand.php
│   │   │       ├── BanIpByNameCommand.php
│   │   │       ├── BanIpCommand.php
│   │   │       ├── BanListCommand.php
│   │   │       ├── DefaultGamemodeCommand.php
│   │   │       ├── DeopCommand.php
│   │   │       ├── DifficultyCommand.php
│   │   │       ├── DumpMemoryCommand.php
│   │   │       ├── EffectCommand.php
│   │   │       ├── EnchantCommand.php
│   │   │       ├── GamemodeCommand.php
│   │   │       ├── GarbageCollectorCommand.php
│   │   │       ├── GiveCommand.php
│   │   │       ├── HelpCommand.php
│   │   │       ├── KickCommand.php
│   │   │       ├── KillCommand.php
│   │   │       ├── ListCommand.php
│   │   │       ├── MeCommand.php
│   │   │       ├── OpCommand.php
│   │   │       ├── PardonCidCommand.php
│   │   │       ├── PardonCommand.php
│   │   │       ├── PardonIpCommand.php
│   │   │       ├── ParticleCommand.php
│   │   │       ├── PluginsCommand.php
│   │   │       ├── ReloadCommand.php
│   │   │       ├── SaveCommand.php
│   │   │       ├── SaveOffCommand.php
│   │   │       ├── SaveOnCommand.php
│   │   │       ├── SayCommand.php
│   │   │       ├── SeedCommand.php
│   │   │       ├── SetBlockCommand.php
│   │   │       ├── SetWorldSpawnCommand.php
│   │   │       ├── SpawnpointCommand.php
│   │   │       ├── StatusCommand.php
│   │   │       ├── StopCommand.php
│   │   │       ├── SummonCommand.php
│   │   │       ├── TeleportCommand.php
│   │   │       ├── TellCommand.php
│   │   │       ├── TimeCommand.php
│   │   │       ├── TimingsCommand.php
│   │   │       ├── TransferCommand.php
│   │   │       ├── VanillaCommand.php
│   │   │       ├── VersionCommand.php
│   │   │       ├── WeatherCommand.php
│   │   │       ├── WhitelistCommand.php
│   │   │       └── XpCommand.php
│   │   ├── entity/
│   │   │   ├── Ageable.php
│   │   │   ├── Animal.php
│   │   │   ├── Arrow.php
│   │   │   ├── Attachable.php
│   │   │   ├── Attribute.php
│   │   │   ├── AttributeMap.php
│   │   │   ├── Bat.php
│   │   │   ├── Blaze.php
│   │   │   ├── Boat.php
│   │   │   ├── CaveSpider.php
│   │   │   ├── Chicken.php
│   │   │   ├── Colorable.php
│   │   │   ├── Cow.php
│   │   │   ├── Creature.php
│   │   │   ├── Creeper.php
│   │   │   ├── Damageable.php
│   │   │   ├── Dragon.php
│   │   │   ├── DragonFireBall.php
│   │   │   ├── Effect.php
│   │   │   ├── Egg.php
│   │   │   ├── EnderCrystal.php
│   │   │   ├── EnderPearl.php
│   │   │   ├── Enderman.php
│   │   │   ├── Entity.php
│   │   │   ├── Explosive.php
│   │   │   ├── FallingSand.php
│   │   │   ├── FishingHook.php
│   │   │   ├── FlyingAnimal.php
│   │   │   ├── Ghast.php
│   │   │   ├── Hanging.php
│   │   │   ├── Human.php
│   │   │   ├── Husk.php
│   │   │   ├── InstantEffect.php
│   │   │   ├── IronGolem.php
│   │   │   ├── Item.php
│   │   │   ├── LavaSlime.php
│   │   │   ├── Lightning.php
│   │   │   ├── Living.php
│   │   │   ├── Minecart.php
│   │   │   ├── MinecartChest.php
│   │   │   ├── MinecartHopper.php
│   │   │   ├── MinecartTNT.php
│   │   │   ├── Monster.php
│   │   │   ├── Mooshroom.php
│   │   │   ├── NPC.php
│   │   │   ├── Ocelot.php
│   │   │   ├── Painting.php
│   │   │   ├── Pig.php
│   │   │   ├── PigZombie.php
│   │   │   ├── PolarBear.php
│   │   │   ├── PrimedTNT.php
│   │   │   ├── Projectile.php
│   │   │   ├── ProjectileSource.php
│   │   │   ├── Rabbit.php
│   │   │   ├── Rideable.php
│   │   │   ├── Sheep.php
│   │   │   ├── Shulker.php
│   │   │   ├── ShulkerBullet.php
│   │   │   ├── Silverfish.php
│   │   │   ├── Skeleton.php
│   │   │   ├── Slime.php
│   │   │   ├── SnowGolem.php
│   │   │   ├── Snowball.php
│   │   │   ├── Spider.php
│   │   │   ├── Squid.php
│   │   │   ├── Stray.php
│   │   │   ├── Tameable.php
│   │   │   ├── ThrownExpBottle.php
│   │   │   ├── ThrownPotion.php
│   │   │   ├── Vehicle.php
│   │   │   ├── Villager.php
│   │   │   ├── WaterAnimal.php
│   │   │   ├── Witch.php
│   │   │   ├── WitherSkeleton.php
│   │   │   ├── Wolf.php
│   │   │   ├── XPOrb.php
│   │   │   ├── Zombie.php
│   │   │   └── ZombieVillager.php
│   │   ├── event/
│   │   │   ├── Cancellable.php
│   │   │   ├── Event.php
│   │   │   ├── EventPriority.php
│   │   │   ├── HandlerList.php
│   │   │   ├── LevelTimings.php
│   │   │   ├── Listener.php
│   │   │   ├── TextContainer.php
│   │   │   ├── Timings.php
│   │   │   ├── TimingsHandler.php
│   │   │   ├── TranslationContainer.php
│   │   │   ├── block/
│   │   │   │   ├── BlockBreakEvent.php
│   │   │   │   ├── BlockBurnEvent.php
│   │   │   │   ├── BlockEvent.php
│   │   │   │   ├── BlockFormEvent.php
│   │   │   │   ├── BlockGrowEvent.php
│   │   │   │   ├── BlockPlaceEvent.php
│   │   │   │   ├── BlockSpreadEvent.php
│   │   │   │   ├── BlockUpdateEvent.php
│   │   │   │   ├── ItemFrameDropItemEvent.php
│   │   │   │   ├── LeavesDecayEvent.php
│   │   │   │   └── SignChangeEvent.php
│   │   │   ├── entity/
│   │   │   │   ├── CreeperPowerEvent.php
│   │   │   │   ├── EntityArmorChangeEvent.php
│   │   │   │   ├── EntityBlockChangeEvent.php
│   │   │   │   ├── EntityCombustByBlockEvent.php
│   │   │   │   ├── EntityCombustByEntityEvent.php
│   │   │   │   ├── EntityCombustEvent.php
│   │   │   │   ├── EntityDamageByBlockEvent.php
│   │   │   │   ├── EntityDamageByChildEntityEvent.php
│   │   │   │   ├── EntityDamageByEntityEvent.php
│   │   │   │   ├── EntityDamageEvent.php
│   │   │   │   ├── EntityDeathEvent.php
│   │   │   │   ├── EntityDespawnEvent.php
│   │   │   │   ├── EntityDrinkPotionEvent.php
│   │   │   │   ├── EntityEatBlockEvent.php
│   │   │   │   ├── EntityEatEvent.php
│   │   │   │   ├── EntityEatItemEvent.php
│   │   │   │   ├── EntityEffectAddEvent.php
│   │   │   │   ├── EntityEffectRemoveEvent.php
│   │   │   │   ├── EntityEvent.php
│   │   │   │   ├── EntityExplodeEvent.php
│   │   │   │   ├── EntityGenerateEvent.php
│   │   │   │   ├── EntityInventoryChangeEvent.php
│   │   │   │   ├── EntityLevelChangeEvent.php
│   │   │   │   ├── EntityMotionEvent.php
│   │   │   │   ├── EntityRegainHealthEvent.php
│   │   │   │   ├── EntityShootBowEvent.php
│   │   │   │   ├── EntitySpawnEvent.php
│   │   │   │   ├── EntityTeleportEvent.php
│   │   │   │   ├── ExplosionPrimeEvent.php
│   │   │   │   ├── ItemDespawnEvent.php
│   │   │   │   ├── ItemSpawnEvent.php
│   │   │   │   ├── ProjectileHitEvent.php
│   │   │   │   └── ProjectileLaunchEvent.php
│   │   │   ├── inventory/
│   │   │   │   ├── CraftItemEvent.php
│   │   │   │   ├── FurnaceBurnEvent.php
│   │   │   │   ├── FurnaceSmeltEvent.php
│   │   │   │   ├── InventoryCloseEvent.php
│   │   │   │   ├── InventoryEvent.php
│   │   │   │   ├── InventoryOpenEvent.php
│   │   │   │   ├── InventoryPickupArrowEvent.php
│   │   │   │   ├── InventoryPickupItemEvent.php
│   │   │   │   └── InventoryTransactionEvent.php
│   │   │   ├── level/
│   │   │   │   ├── ChunkEvent.php
│   │   │   │   ├── ChunkLoadEvent.php
│   │   │   │   ├── ChunkPopulateEvent.php
│   │   │   │   ├── ChunkUnloadEvent.php
│   │   │   │   ├── LevelEvent.php
│   │   │   │   ├── LevelInitEvent.php
│   │   │   │   ├── LevelLoadEvent.php
│   │   │   │   ├── LevelSaveEvent.php
│   │   │   │   ├── LevelUnloadEvent.php
│   │   │   │   ├── SpawnChangeEvent.php
│   │   │   │   └── WeatherChangeEvent.php
│   │   │   ├── player/
│   │   │   │   ├── PlayerAchievementAwardedEvent.php
│   │   │   │   ├── PlayerAnimationEvent.php
│   │   │   │   ├── PlayerBedEnterEvent.php
│   │   │   │   ├── PlayerBedLeaveEvent.php
│   │   │   │   ├── PlayerBucketEmptyEvent.php
│   │   │   │   ├── PlayerBucketEvent.php
│   │   │   │   ├── PlayerBucketFillEvent.php
│   │   │   │   ├── PlayerChatEvent.php
│   │   │   │   ├── PlayerCommandPreprocessEvent.php
│   │   │   │   ├── PlayerCreationEvent.php
│   │   │   │   ├── PlayerDeathEvent.php
│   │   │   │   ├── PlayerDropItemEvent.php
│   │   │   │   ├── PlayerEvent.php
│   │   │   │   ├── PlayerExhaustEvent.php
│   │   │   │   ├── PlayerExperienceChangeEvent.php
│   │   │   │   ├── PlayerFishEvent.php
│   │   │   │   ├── PlayerGameModeChangeEvent.php
│   │   │   │   ├── PlayerGlassBottleEvent.php
│   │   │   │   ├── PlayerHungerChangeEvent.php
│   │   │   │   ├── PlayerInteractEvent.php
│   │   │   │   ├── PlayerItemConsumeEvent.php
│   │   │   │   ├── PlayerItemHeldEvent.php
│   │   │   │   ├── PlayerJoinEvent.php
│   │   │   │   ├── PlayerKickEvent.php
│   │   │   │   ├── PlayerLoginEvent.php
│   │   │   │   ├── PlayerMoveEvent.php
│   │   │   │   ├── PlayerPickupExpOrbEvent.php
│   │   │   │   ├── PlayerPreLoginEvent.php
│   │   │   │   ├── PlayerQuitEvent.php
│   │   │   │   ├── PlayerRespawnEvent.php
│   │   │   │   ├── PlayerTextPreSendEvent.php
│   │   │   │   ├── PlayerToggleFlightEvent.php
│   │   │   │   ├── PlayerToggleGlideEvent.php
│   │   │   │   ├── PlayerToggleSneakEvent.php
│   │   │   │   ├── PlayerToggleSprintEvent.php
│   │   │   │   └── PlayerUseFishingRodEvent.php
│   │   │   ├── plugin/
│   │   │   │   ├── PluginDisableEvent.php
│   │   │   │   ├── PluginEnableEvent.php
│   │   │   │   └── PluginEvent.php
│   │   │   └── server/
│   │   │       ├── DataPacketReceiveEvent.php
│   │   │       ├── DataPacketSendEvent.php
│   │   │       ├── LowMemoryEvent.php
│   │   │       ├── QueryRegenerateEvent.php
│   │   │       ├── RemoteServerCommandEvent.php
│   │   │       ├── ServerCommandEvent.php
│   │   │       └── ServerEvent.php
│   │   ├── inventory/
│   │   │   ├── AnvilInventory.php
│   │   │   ├── BaseInventory.php
│   │   │   ├── BaseTransaction.php
│   │   │   ├── BigShapedRecipe.php
│   │   │   ├── BigShapelessRecipe.php
│   │   │   ├── BrewingInventory.php
│   │   │   ├── BrewingRecipe.php
│   │   │   ├── ChestInventory.php
│   │   │   ├── ContainerInventory.php
│   │   │   ├── CraftingInventory.php
│   │   │   ├── CraftingManager.php
│   │   │   ├── CustomInventory.php
│   │   │   ├── DispenserInventory.php
│   │   │   ├── DoubleChestInventory.php
│   │   │   ├── DropItemTransaction.php
│   │   │   ├── DropperInventory.php
│   │   │   ├── EnchantInventory.php
│   │   │   ├── EnderChestInventory.php
│   │   │   ├── FakeBlockMenu.php
│   │   │   ├── FloatingInventory.php
│   │   │   ├── Fuel.php
│   │   │   ├── FurnaceInventory.php
│   │   │   ├── FurnaceRecipe.php
│   │   │   ├── HopperInventory.php
│   │   │   ├── Inventory.php
│   │   │   ├── InventoryHolder.php
│   │   │   ├── InventoryType.php
│   │   │   ├── MultiRecipe.php
│   │   │   ├── PlayerInventory.php
│   │   │   ├── Recipe.php
│   │   │   ├── ShapedRecipe.php
│   │   │   ├── ShapedRecipeFromJson.php
│   │   │   ├── ShapelessRecipe.php
│   │   │   ├── SimpleTransactionQueue.php
│   │   │   ├── TemporaryInventory.php
│   │   │   ├── Transaction.php
│   │   │   └── TransactionQueue.php
│   │   ├── item/
│   │   │   ├── AcaciaDoor.php
│   │   │   ├── Apple.php
│   │   │   ├── Armor.php
│   │   │   ├── Arrow.php
│   │   │   ├── BakedPotato.php
│   │   │   ├── Bed.php
│   │   │   ├── Beetroot.php
│   │   │   ├── BeetrootSeeds.php
│   │   │   ├── BeetrootSoup.php
│   │   │   ├── BirchDoor.php
│   │   │   ├── BlazePowder.php
│   │   │   ├── Boat.php
│   │   │   ├── Bone.php
│   │   │   ├── Book.php
│   │   │   ├── Bow.php
│   │   │   ├── Bowl.php
│   │   │   ├── Bread.php
│   │   │   ├── BrewingStand.php
│   │   │   ├── Brick.php
│   │   │   ├── Bucket.php
│   │   │   ├── Cake.php
│   │   │   ├── Camera.php
│   │   │   ├── Carrot.php
│   │   │   ├── Cauldron.php
│   │   │   ├── ChainBoots.php
│   │   │   ├── ChainChestplate.php
│   │   │   ├── ChainHelmet.php
│   │   │   ├── ChainLeggings.php
│   │   │   ├── ChorusFruit.php
│   │   │   ├── Clay.php
│   │   │   ├── Clock.php
│   │   │   ├── Coal.php
│   │   │   ├── Compass.php
│   │   │   ├── CookedChicken.php
│   │   │   ├── CookedFish.php
│   │   │   ├── CookedMutton.php
│   │   │   ├── CookedPorkchop.php
│   │   │   ├── CookedRabbit.php
│   │   │   ├── Cookie.php
│   │   │   ├── DarkOakDoor.php
│   │   │   ├── Diamond.php
│   │   │   ├── DiamondAxe.php
│   │   │   ├── DiamondBoots.php
│   │   │   ├── DiamondChestplate.php
│   │   │   ├── DiamondHelmet.php
│   │   │   ├── DiamondHoe.php
│   │   │   ├── DiamondLeggings.php
│   │   │   ├── DiamondPickaxe.php
│   │   │   ├── DiamondShovel.php
│   │   │   ├── DiamondSword.php
│   │   │   ├── Door.php
│   │   │   ├── Dye.php
│   │   │   ├── Egg.php
│   │   │   ├── Elytra.php
│   │   │   ├── Emerald.php
│   │   │   ├── EnchantedBook.php
│   │   │   ├── EnchantedGoldenApple.php
│   │   │   ├── EnchantingBottle.php
│   │   │   ├── EnderPearl.php
│   │   │   ├── EyeOfEnder.php
│   │   │   ├── Feather.php
│   │   │   ├── FermentedSpiderEye.php
│   │   │   ├── Fish.php
│   │   │   ├── FishingRod.php
│   │   │   ├── Flint.php
│   │   │   ├── FlintSteel.php
│   │   │   ├── FlowerPot.php
│   │   │   ├── Food.php
│   │   │   ├── FoodSource.php
│   │   │   ├── GlassBottle.php
│   │   │   ├── GlisteringMelon.php
│   │   │   ├── GlowstoneDust.php
│   │   │   ├── GoldAxe.php
│   │   │   ├── GoldBoots.php
│   │   │   ├── GoldChestplate.php
│   │   │   ├── GoldHelmet.php
│   │   │   ├── GoldHoe.php
│   │   │   ├── GoldIngot.php
│   │   │   ├── GoldLeggings.php
│   │   │   ├── GoldNugget.php
│   │   │   ├── GoldPickaxe.php
│   │   │   ├── GoldShovel.php
│   │   │   ├── GoldSword.php
│   │   │   ├── GoldenApple.php
│   │   │   ├── GoldenCarrot.php
│   │   │   ├── Gunpowder.php
│   │   │   ├── Hopper.php
│   │   │   ├── IronAxe.php
│   │   │   ├── IronBoots.php
│   │   │   ├── IronChestplate.php
│   │   │   ├── IronDoor.php
│   │   │   ├── IronHelmet.php
│   │   │   ├── IronHoe.php
│   │   │   ├── IronIngot.php
│   │   │   ├── IronLeggings.php
│   │   │   ├── IronPickaxe.php
│   │   │   ├── IronShovel.php
│   │   │   ├── IronSword.php
│   │   │   ├── Item.php
│   │   │   ├── ItemBlock.php
│   │   │   ├── ItemFrame.php
│   │   │   ├── ItemIds.php
│   │   │   ├── ItemString.php
│   │   │   ├── JungleDoor.php
│   │   │   ├── Leather.php
│   │   │   ├── LeatherBoots.php
│   │   │   ├── LeatherCap.php
│   │   │   ├── LeatherPants.php
│   │   │   ├── LeatherTunic.php
│   │   │   ├── MagmaCream.php
│   │   │   ├── Melon.php
│   │   │   ├── MelonSeeds.php
│   │   │   ├── Minecart.php
│   │   │   ├── MobHead.php
│   │   │   ├── MushroomStew.php
│   │   │   ├── NetherBrick.php
│   │   │   ├── NetherQuartz.php
│   │   │   ├── NetherStar.php
│   │   │   ├── NetherWart.php
│   │   │   ├── Painting.php
│   │   │   ├── Paper.php
│   │   │   ├── Potato.php
│   │   │   ├── Potion.php
│   │   │   ├── PrismarineCrystals.php
│   │   │   ├── PrismarineShard.php
│   │   │   ├── PumpkinPie.php
│   │   │   ├── PumpkinSeeds.php
│   │   │   ├── Quartz.php
│   │   │   ├── RabbitStew.php
│   │   │   ├── RawBeef.php
│   │   │   ├── RawChicken.php
│   │   │   ├── RawMutton.php
│   │   │   ├── RawPorkchop.php
│   │   │   ├── RawRabbit.php
│   │   │   ├── Redstone.php
│   │   │   ├── Repeater.php
│   │   │   ├── RottenFlesh.php
│   │   │   ├── Shears.php
│   │   │   ├── Sign.php
│   │   │   ├── Skull.php
│   │   │   ├── Slimeball.php
│   │   │   ├── Snowball.php
│   │   │   ├── SpawnEgg.php
│   │   │   ├── SpiderEye.php
│   │   │   ├── SplashPotion.php
│   │   │   ├── SpruceDoor.php
│   │   │   ├── Steak.php
│   │   │   ├── Stick.php
│   │   │   ├── StoneAxe.php
│   │   │   ├── StoneHoe.php
│   │   │   ├── StonePickaxe.php
│   │   │   ├── StoneShovel.php
│   │   │   ├── StoneSword.php
│   │   │   ├── StringItem.php
│   │   │   ├── Sugar.php
│   │   │   ├── Sugarcane.php
│   │   │   ├── Tool.php
│   │   │   ├── Wheat.php
│   │   │   ├── WheatSeeds.php
│   │   │   ├── WoodenAxe.php
│   │   │   ├── WoodenDoor.php
│   │   │   ├── WoodenHoe.php
│   │   │   ├── WoodenPickaxe.php
│   │   │   ├── WoodenShovel.php
│   │   │   ├── WoodenSword.php
│   │   │   └── enchantment/
│   │   │       ├── Enchantment.php
│   │   │       ├── EnchantmentEntry.php
│   │   │       ├── EnchantmentLevelTable.php
│   │   │       └── EnchantmentList.php
│   │   ├── lang/
│   │   │   ├── BaseLang.php
│   │   │   ├── Installer/
│   │   │   │   ├── chs.ini
│   │   │   │   ├── deu.ini
│   │   │   │   ├── eng.ini
│   │   │   │   ├── fra.ini
│   │   │   │   ├── ita.ini
│   │   │   │   ├── jpn.ini
│   │   │   │   ├── kor.ini
│   │   │   │   ├── rus.ini
│   │   │   │   ├── ukr.ini
│   │   │   │   └── zho.ini
│   │   │   └── locale/
│   │   │       ├── ces.ini
│   │   │       ├── chs.ini
│   │   │       ├── deu.ini
│   │   │       ├── eng.ini
│   │   │       ├── fra.ini
│   │   │       ├── jpn.ini
│   │   │       ├── kor.ini
│   │   │       ├── rus.ini
│   │   │       ├── tur.ini
│   │   │       ├── ukr.ini
│   │   │       ├── vie.ini
│   │   │       └── zho.ini
│   │   ├── level/
│   │   │   ├── ChunkLoader.php
│   │   │   ├── ChunkManager.php
│   │   │   ├── Explosion.php
│   │   │   ├── Level.php
│   │   │   ├── LevelException.php
│   │   │   ├── Location.php
│   │   │   ├── MovingObjectPosition.php
│   │   │   ├── Position.php
│   │   │   ├── SimpleChunkManager.php
│   │   │   ├── WeakPosition.php
│   │   │   ├── format/
│   │   │   │   ├── Chunk.php
│   │   │   │   ├── EmptySubChunk.php
│   │   │   │   ├── SubChunk.php
│   │   │   │   └── io/
│   │   │   │       ├── BaseLevelProvider.php
│   │   │   │       ├── ChunkException.php
│   │   │   │       ├── ChunkRequestTask.php
│   │   │   │       ├── ChunkUtils.php
│   │   │   │       ├── LevelProvider.php
│   │   │   │       ├── LevelProviderManager.php
│   │   │   │       └── region/
│   │   │   │           ├── Anvil.php
│   │   │   │           ├── McRegion.php
│   │   │   │           ├── PMAnvil.php
│   │   │   │           └── RegionLoader.php
│   │   │   ├── generator/
│   │   │   │   ├── Flat.php
│   │   │   │   ├── GenerationTask.php
│   │   │   │   ├── Generator.php
│   │   │   │   ├── GeneratorRegisterTask.php
│   │   │   │   ├── GeneratorUnregisterTask.php
│   │   │   │   ├── LightPopulationTask.php
│   │   │   │   ├── PopulationTask.php
│   │   │   │   ├── Void.php
│   │   │   │   ├── biome/
│   │   │   │   │   ├── Biome.php
│   │   │   │   │   └── BiomeSelector.php
│   │   │   │   ├── nether/
│   │   │   │   │   ├── Nether.php
│   │   │   │   │   ├── biome/
│   │   │   │   │   │   └── HellBiome.php
│   │   │   │   │   ├── object/
│   │   │   │   │   │   └── NetherOre.php
│   │   │   │   │   └── populator/
│   │   │   │   │       ├── GroundFire.php
│   │   │   │   │       ├── NetherGlowStone.php
│   │   │   │   │       ├── NetherLava.php
│   │   │   │   │       └── NetherOre.php
│   │   │   │   ├── noise/
│   │   │   │   │   ├── Noise.php
│   │   │   │   │   ├── Perlin.php
│   │   │   │   │   └── Simplex.php
│   │   │   │   ├── normal/
│   │   │   │   │   ├── Normal.php
│   │   │   │   │   ├── Normal2.php
│   │   │   │   │   ├── biome/
│   │   │   │   │   │   ├── BeachBiome.php
│   │   │   │   │   │   ├── DesertBiome.php
│   │   │   │   │   │   ├── ForestBiome.php
│   │   │   │   │   │   ├── GrassyBiome.php
│   │   │   │   │   │   ├── IcePlainsBiome.php
│   │   │   │   │   │   ├── MesaBiome.php
│   │   │   │   │   │   ├── MountainsBiome.php
│   │   │   │   │   │   ├── NormalBiome.php
│   │   │   │   │   │   ├── OceanBiome.php
│   │   │   │   │   │   ├── PlainBiome.php
│   │   │   │   │   │   ├── RiverBiome.php
│   │   │   │   │   │   ├── SandyBiome.php
│   │   │   │   │   │   ├── SmallMountainsBiome.php
│   │   │   │   │   │   ├── SnowyBiome.php
│   │   │   │   │   │   ├── SwampBiome.php
│   │   │   │   │   │   ├── TaigaBiome.php
│   │   │   │   │   │   └── WateryBiome.php
│   │   │   │   │   ├── object/
│   │   │   │   │   │   ├── AcaciaTree.php
│   │   │   │   │   │   ├── BigTree.php
│   │   │   │   │   │   ├── BirchTree.php
│   │   │   │   │   │   ├── CactusStack.php
│   │   │   │   │   │   ├── DarkOakTree.php
│   │   │   │   │   │   ├── JungleTree.php
│   │   │   │   │   │   ├── OakTree.php
│   │   │   │   │   │   ├── Ore.php
│   │   │   │   │   │   ├── OreType.php
│   │   │   │   │   │   ├── Pond.php
│   │   │   │   │   │   ├── SpruceTree.php
│   │   │   │   │   │   ├── SugarCaneStack.php
│   │   │   │   │   │   ├── TallGrass.php
│   │   │   │   │   │   └── Tree.php
│   │   │   │   │   └── populator/
│   │   │   │   │       ├── Cactus.php
│   │   │   │   │       ├── Cave.php
│   │   │   │   │       ├── DeadBush.php
│   │   │   │   │       ├── Flower.php
│   │   │   │   │       ├── GroundCover.php
│   │   │   │   │       ├── LilyPad.php
│   │   │   │   │       ├── Mineshaft.php
│   │   │   │   │       ├── MossStone.php
│   │   │   │   │       ├── Mushroom.php
│   │   │   │   │       ├── Ore.php
│   │   │   │   │       ├── Pond.php
│   │   │   │   │       ├── SugarCane.php
│   │   │   │   │       ├── TallGrass.php
│   │   │   │   │       ├── Tree.php
│   │   │   │   │       └── WaterPit.php
│   │   │   │   ├── object/
│   │   │   │   │   └── Object.php
│   │   │   │   └── populator/
│   │   │   │       ├── Populator.php
│   │   │   │       └── VariableAmountPopulator.php
│   │   │   ├── particle/
│   │   │   │   ├── AngryVillagerParticle.php
│   │   │   │   ├── BlockForceFieldParticle.php
│   │   │   │   ├── BubbleParticle.php
│   │   │   │   ├── CriticalParticle.php
│   │   │   │   ├── DestroyBlockParticle.php
│   │   │   │   ├── DustParticle.php
│   │   │   │   ├── EnchantParticle.php
│   │   │   │   ├── EnchantmentTableParticle.php
│   │   │   │   ├── EntityFlameParticle.php
│   │   │   │   ├── ExplodeParticle.php
│   │   │   │   ├── FlameParticle.php
│   │   │   │   ├── FloatingTextParticle.php
│   │   │   │   ├── GenericParticle.php
│   │   │   │   ├── HappyVillagerParticle.php
│   │   │   │   ├── HeartParticle.php
│   │   │   │   ├── HugeExplodeParticle.php
│   │   │   │   ├── HugeExplodeSeedParticle.php
│   │   │   │   ├── InkParticle.php
│   │   │   │   ├── InstantEnchantParticle.php
│   │   │   │   ├── ItemBreakParticle.php
│   │   │   │   ├── LavaDripParticle.php
│   │   │   │   ├── LavaParticle.php
│   │   │   │   ├── MobSpawnParticle.php
│   │   │   │   ├── MobSpellParticle.php
│   │   │   │   ├── Particle.php
│   │   │   │   ├── PortalParticle.php
│   │   │   │   ├── RainSplashParticle.php
│   │   │   │   ├── RedstoneParticle.php
│   │   │   │   ├── SmokeParticle.php
│   │   │   │   ├── SpellParticle.php
│   │   │   │   ├── SplashParticle.php
│   │   │   │   ├── SporeParticle.php
│   │   │   │   ├── TerrainParticle.php
│   │   │   │   ├── WaterDripParticle.php
│   │   │   │   ├── WaterParticle.php
│   │   │   │   └── WhiteSmokeParticle.php
│   │   │   ├── sound/
│   │   │   │   ├── AnvilFallSound.php
│   │   │   │   ├── AnvilUseSound.php
│   │   │   │   ├── BatSound.php
│   │   │   │   ├── BlazeShootSound.php
│   │   │   │   ├── BlockPlaceSound.php
│   │   │   │   ├── ButtonClickSound.php
│   │   │   │   ├── ClickSound.php
│   │   │   │   ├── DoorBumpSound.php
│   │   │   │   ├── DoorCrashSound.php
│   │   │   │   ├── DoorSound.php
│   │   │   │   ├── EndermanTeleportSound.php
│   │   │   │   ├── ExpPickupSound.php
│   │   │   │   ├── ExplodeSound.php
│   │   │   │   ├── FizzSound.php
│   │   │   │   ├── GenericSound.php
│   │   │   │   ├── GhastShootSound.php
│   │   │   │   ├── GhastSound.php
│   │   │   │   ├── GraySplashSound.php
│   │   │   │   ├── LaunchSound.php
│   │   │   │   ├── NoteblockSound.php
│   │   │   │   ├── PopSound.php
│   │   │   │   ├── Sound.php
│   │   │   │   ├── SpellSound.php
│   │   │   │   ├── SplashSound.php
│   │   │   │   ├── TNTPrimeSound.php
│   │   │   │   ├── ZombieHealSound.php
│   │   │   │   └── ZombieInfectSound.php
│   │   │   └── weather/
│   │   │       └── Weather.php
│   │   ├── math/
│   │   │   ├── AxisAlignedBB.php
│   │   │   ├── Math.php
│   │   │   ├── Matrix.php
│   │   │   ├── Vector2.php
│   │   │   ├── Vector3.php
│   │   │   └── VectorMath.php
│   │   ├── metadata/
│   │   │   ├── BlockMetadataStore.php
│   │   │   ├── EntityMetadataStore.php
│   │   │   ├── LevelMetadataStore.php
│   │   │   ├── MetadataStore.php
│   │   │   ├── MetadataValue.php
│   │   │   ├── Metadatable.php
│   │   │   └── PlayerMetadataStore.php
│   │   ├── nbt/
│   │   │   ├── NBT.php
│   │   │   └── tag/
│   │   │       ├── ByteArrayTag.php
│   │   │       ├── ByteTag.php
│   │   │       ├── CompoundTag.php
│   │   │       ├── DoubleTag.php
│   │   │       ├── EndTag.php
│   │   │       ├── FloatTag.php
│   │   │       ├── IntArrayTag.php
│   │   │       ├── IntTag.php
│   │   │       ├── ListTag.php
│   │   │       ├── LongTag.php
│   │   │       ├── NamedTag.php
│   │   │       ├── ShortTag.php
│   │   │       ├── StringTag.php
│   │   │       └── Tag.php
│   │   ├── network/
│   │   │   ├── AdvancedSourceInterface.php
│   │   │   ├── CachedEncapsulatedPacket.php
│   │   │   ├── CompressBatchedTask.php
│   │   │   ├── Network.php
│   │   │   ├── RakLibInterface.php
│   │   │   ├── SourceInterface.php
│   │   │   ├── protocol/
│   │   │   │   ├── AddEntityPacket.php
│   │   │   │   ├── AddHangingEntityPacket.php
│   │   │   │   ├── AddItemEntityPacket.php
│   │   │   │   ├── AddItemPacket.php
│   │   │   │   ├── AddPaintingPacket.php
│   │   │   │   ├── AddPlayerPacket.php
│   │   │   │   ├── AdventureSettingsPacket.php
│   │   │   │   ├── AnimatePacket.php
│   │   │   │   ├── AvailableCommandsPacket.php
│   │   │   │   ├── BatchPacket.php
│   │   │   │   ├── BlockEntityDataPacket.php
│   │   │   │   ├── BlockEventPacket.php
│   │   │   │   ├── BossEventPacket.php
│   │   │   │   ├── CameraPacket.php
│   │   │   │   ├── ChangeDimensionPacket.php
│   │   │   │   ├── ChunkRadiusUpdatedPacket.php
│   │   │   │   ├── CommandStepPacket.php
│   │   │   │   ├── ContainerClosePacket.php
│   │   │   │   ├── ContainerOpenPacket.php
│   │   │   │   ├── ContainerSetContentPacket.php
│   │   │   │   ├── ContainerSetDataPacket.php
│   │   │   │   ├── ContainerSetSlotPacket.php
│   │   │   │   ├── CraftingDataPacket.php
│   │   │   │   ├── CraftingEventPacket.php
│   │   │   │   ├── DataPacket.php
│   │   │   │   ├── DisconnectPacket.php
│   │   │   │   ├── DropItemPacket.php
│   │   │   │   ├── EntityEventPacket.php
│   │   │   │   ├── ExplodePacket.php
│   │   │   │   ├── FullChunkDataPacket.php
│   │   │   │   ├── HurtArmorPacket.php
│   │   │   │   ├── Info.php
│   │   │   │   ├── InteractPacket.php
│   │   │   │   ├── InventoryActionPacket.php
│   │   │   │   ├── ItemFrameDropItemPacket.php
│   │   │   │   ├── LevelEventPacket.php
│   │   │   │   ├── LevelSoundEventPacket.php
│   │   │   │   ├── LoginPacket.php
│   │   │   │   ├── MobArmorEquipmentPacket.php
│   │   │   │   ├── MobEffectPacket.php
│   │   │   │   ├── MobEquipmentPacket.php
│   │   │   │   ├── MoveEntityPacket.php
│   │   │   │   ├── MovePlayerPacket.php
│   │   │   │   ├── PlayStatusPacket.php
│   │   │   │   ├── PlayerActionPacket.php
│   │   │   │   ├── PlayerFallPacket.php
│   │   │   │   ├── PlayerInputPacket.php
│   │   │   │   ├── PlayerListPacket.php
│   │   │   │   ├── RemoveBlockPacket.php
│   │   │   │   ├── RemoveEntityPacket.php
│   │   │   │   ├── ReplaceItemInSlotPacket.php
│   │   │   │   ├── RequestChunkRadiusPacket.php
│   │   │   │   ├── ResourcePackClientResponsePacket.php
│   │   │   │   ├── ResourcePacksInfoPacket.php
│   │   │   │   ├── RespawnPacket.php
│   │   │   │   ├── SetCommandsEnabledPacket.php
│   │   │   │   ├── SetDifficultyPacket.php
│   │   │   │   ├── SetEntityDataPacket.php
│   │   │   │   ├── SetEntityLinkPacket.php
│   │   │   │   ├── SetEntityMotionPacket.php
│   │   │   │   ├── SetHealthPacket.php
│   │   │   │   ├── SetPlayerGameTypePacket.php
│   │   │   │   ├── SetSpawnPositionPacket.php
│   │   │   │   ├── SetTimePacket.php
│   │   │   │   ├── ShowCreditsPacket.php
│   │   │   │   ├── SpawnExperienceOrbPacket.php
│   │   │   │   ├── StartGamePacket.php
│   │   │   │   ├── StrangePacket.php
│   │   │   │   ├── TakeItemEntityPacket.php
│   │   │   │   ├── TextPacket.php
│   │   │   │   ├── TransferPacket.php
│   │   │   │   ├── UpdateAttributesPacket.php
│   │   │   │   ├── UpdateBlockPacket.php
│   │   │   │   └── UseItemPacket.php
│   │   │   ├── query/
│   │   │   │   └── QueryHandler.php
│   │   │   ├── rcon/
│   │   │   │   ├── RCON.php
│   │   │   │   └── RCONInstance.php
│   │   │   └── upnp/
│   │   │       └── UPnP.php
│   │   ├── permission/
│   │   │   ├── BanEntry.php
│   │   │   ├── BanList.php
│   │   │   ├── DefaultPermissions.php
│   │   │   ├── Permissible.php
│   │   │   ├── PermissibleBase.php
│   │   │   ├── Permission.php
│   │   │   ├── PermissionAttachment.php
│   │   │   ├── PermissionAttachmentInfo.php
│   │   │   ├── PermissionRemovedExecutor.php
│   │   │   └── ServerOperator.php
│   │   ├── plugin/
│   │   │   ├── EventExecutor.php
│   │   │   ├── MethodEventExecutor.php
│   │   │   ├── PharPluginLoader.php
│   │   │   ├── Plugin.php
│   │   │   ├── PluginBase.php
│   │   │   ├── PluginDescription.php
│   │   │   ├── PluginLoadOrder.php
│   │   │   ├── PluginLoader.php
│   │   │   ├── PluginLogger.php
│   │   │   ├── PluginManager.php
│   │   │   ├── RegisteredListener.php
│   │   │   └── ScriptPluginLoader.php
│   │   ├── resourcepacks/
│   │   │   └── ResourcePackInfoEntry.php
│   │   ├── resources/
│   │   │   ├── command_default.json
│   │   │   ├── creativeitems.json
│   │   │   ├── genisys_chs.yml
│   │   │   ├── genisys_eng.yml
│   │   │   ├── genisys_kor.yml
│   │   │   ├── genisys_vie.yml
│   │   │   ├── genisys_zho.yml
│   │   │   ├── pocketmine.yml
│   │   │   └── recipes.json
│   │   ├── scheduler/
│   │   │   ├── AsyncPool.php
│   │   │   ├── AsyncTask.php
│   │   │   ├── AsyncWorker.php
│   │   │   ├── CallbackTask.php
│   │   │   ├── DServerTask.php
│   │   │   ├── FileWriteTask.php
│   │   │   ├── GarbageCollectionTask.php
│   │   │   ├── PluginTask.php
│   │   │   ├── SendUsageTask.php
│   │   │   ├── ServerScheduler.php
│   │   │   ├── Task.php
│   │   │   └── TaskHandler.php
│   │   ├── tile/
│   │   │   ├── Beacon.php
│   │   │   ├── BrewingStand.php
│   │   │   ├── Cauldron.php
│   │   │   ├── Chest.php
│   │   │   ├── Container.php
│   │   │   ├── DLDetector.php
│   │   │   ├── Dispenser.php
│   │   │   ├── Dropper.php
│   │   │   ├── EnchantTable.php
│   │   │   ├── EnderChest.php
│   │   │   ├── FlowerPot.php
│   │   │   ├── Furnace.php
│   │   │   ├── Hopper.php
│   │   │   ├── ItemFrame.php
│   │   │   ├── MobSpawner.php
│   │   │   ├── Nameable.php
│   │   │   ├── Sign.php
│   │   │   ├── Skull.php
│   │   │   ├── Spawnable.php
│   │   │   └── Tile.php
│   │   ├── utils/
│   │   │   ├── Binary.php
│   │   │   ├── BinaryStream.php
│   │   │   ├── BlockIterator.php
│   │   │   ├── ChunkException.php
│   │   │   ├── Color.php
│   │   │   ├── Config.php
│   │   │   ├── LevelException.php
│   │   │   ├── MainLogger.php
│   │   │   ├── MonkeyPatch.php
│   │   │   ├── Patchable.php
│   │   │   ├── PluginException.php
│   │   │   ├── Random.php
│   │   │   ├── Range.php
│   │   │   ├── ReversePriorityQueue.php
│   │   │   ├── ServerException.php
│   │   │   ├── ServerKiller.php
│   │   │   ├── Terminal.php
│   │   │   ├── TextFormat.php
│   │   │   ├── UUID.php
│   │   │   ├── Utils.php
│   │   │   ├── VectorIterator.php
│   │   │   └── VersionString.php
│   │   └── wizard/
│   │       ├── Installer.php
│   │       └── InstallerLang.php
│   ├── raklib/
│   │   ├── Binary.php
│   │   ├── RakLib.php
│   │   ├── protocol/
│   │   │   ├── ACK.php
│   │   │   ├── ADVERTISE_SYSTEM.php
│   │   │   ├── AcknowledgePacket.php
│   │   │   ├── CLIENT_CONNECT_DataPacket.php
│   │   │   ├── CLIENT_DISCONNECT_DataPacket.php
│   │   │   ├── CLIENT_HANDSHAKE_DataPacket.php
│   │   │   ├── DATA_PACKET_0.php
│   │   │   ├── DATA_PACKET_1.php
│   │   │   ├── DATA_PACKET_2.php
│   │   │   ├── DATA_PACKET_3.php
│   │   │   ├── DATA_PACKET_4.php
│   │   │   ├── DATA_PACKET_5.php
│   │   │   ├── DATA_PACKET_6.php
│   │   │   ├── DATA_PACKET_7.php
│   │   │   ├── DATA_PACKET_8.php
│   │   │   ├── DATA_PACKET_9.php
│   │   │   ├── DATA_PACKET_A.php
│   │   │   ├── DATA_PACKET_B.php
│   │   │   ├── DATA_PACKET_C.php
│   │   │   ├── DATA_PACKET_D.php
│   │   │   ├── DATA_PACKET_E.php
│   │   │   ├── DATA_PACKET_F.php
│   │   │   ├── DataPacket.php
│   │   │   ├── EncapsulatedPacket.php
│   │   │   ├── NACK.php
│   │   │   ├── OPEN_CONNECTION_REPLY_1.php
│   │   │   ├── OPEN_CONNECTION_REPLY_2.php
│   │   │   ├── OPEN_CONNECTION_REQUEST_1.php
│   │   │   ├── OPEN_CONNECTION_REQUEST_2.php
│   │   │   ├── PING_DataPacket.php
│   │   │   ├── PONG_DataPacket.php
│   │   │   ├── Packet.php
│   │   │   ├── PacketReliability.php
│   │   │   ├── SERVER_HANDSHAKE_DataPacket.php
│   │   │   ├── UNCONNECTED_PING.php
│   │   │   ├── UNCONNECTED_PING_OPEN_CONNECTIONS.php
│   │   │   └── UNCONNECTED_PONG.php
│   │   └── server/
│   │       ├── RakLibServer.php
│   │       ├── ServerHandler.php
│   │       ├── ServerInstance.php
│   │       ├── Session.php
│   │       ├── SessionManager.php
│   │       └── UDPServerSocket.php
│   └── spl/
│       ├── ArrayOutOfBoundsException.php
│       ├── AttachableLogger.php
│       ├── AttachableThreadedLogger.php
│       ├── BaseClassLoader.php
│       ├── ClassCastException.php
│       ├── ClassLoader.php
│       ├── ClassNotFoundException.php
│       ├── InvalidArgumentCountException.php
│       ├── InvalidKeyException.php
│       ├── InvalidStateException.php
│       ├── LogLevel.php
│       ├── Logger.php
│       ├── LoggerAttachment.php
│       ├── SplFixedByteArray.php
│       ├── StringOutOfBoundsException.php
│       ├── ThreadedLogger.php
│       ├── ThreadedLoggerAttachment.php
│       ├── UndefinedConstantException.php
│       ├── UndefinedPropertyException.php
│       └── UndefinedVariableException.php
├── start.cmd
└── start.sh
Download .txt
Showing preview only (583K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6922 symbols across 1122 files)

FILE: src/pocketmine/Achievement.php
  class Achievement (line 30) | abstract class Achievement{
    method broadcast (line 108) | public static function broadcast(Player $player, $achievementId){
    method add (line 123) | public static function add($achievementId, $achievementName, array $re...

FILE: src/pocketmine/Collectable.php
  class Collectable (line 24) | abstract class Collectable extends \Threaded implements \Collectable{
    method isGarbage (line 28) | public function isGarbage() : bool{
    method setGarbage (line 32) | public function setGarbage(){

FILE: src/pocketmine/CompatibleClassLoader.php
  class CompatibleClassLoader (line 24) | class CompatibleClassLoader extends \BaseClassLoader{

FILE: src/pocketmine/CrashDump.php
  class CrashDump (line 31) | class CrashDump{
    method __construct (line 41) | public function __construct(Server $server){
    method getPath (line 68) | public function getPath(){
    method getEncodedData (line 72) | public function getEncodedData(){
    method getData (line 76) | public function getData(){
    method encodeData (line 80) | private function encodeData(){
    method pluginsData (line 92) | private function pluginsData(){
    method extraData (line 116) | private function extraData(){
    method baseCrash (line 143) | private function baseCrash(){
    method generalData (line 228) | private function generalData(){
    method addLine (line 251) | public function addLine($line = ""){
    method add (line 255) | public function add($str){

FILE: src/pocketmine/IPlayer.php
  type IPlayer (line 26) | interface IPlayer extends ServerOperator{
    method isOnline (line 31) | public function isOnline();
    method getName (line 36) | public function getName();
    method isBanned (line 41) | public function isBanned();
    method setBanned (line 46) | public function setBanned($banned);
    method isWhitelisted (line 51) | public function isWhitelisted();
    method setWhitelisted (line 56) | public function setWhitelisted($value);
    method getPlayer (line 61) | public function getPlayer();
    method getFirstPlayed (line 66) | public function getFirstPlayed();
    method getLastPlayed (line 71) | public function getLastPlayed();
    method hasPlayedBefore (line 76) | public function hasPlayedBefore();

FILE: src/pocketmine/MemoryManager.php
  class MemoryManager (line 30) | class MemoryManager{
    method __construct (line 65) | public function __construct(Server $server){
    method init (line 71) | private function init(){
    method isLowMemory (line 125) | public function isLowMemory(){
    method canUseChunkCache (line 129) | public function canUseChunkCache(){
    method getViewDistance (line 133) | public function getViewDistance($distance){
    method trigger (line 137) | public function trigger($memory, $limit, $global = false, $triggerCoun...
    method check (line 163) | public function check(){
    method triggerGarbageCollector (line 200) | public function triggerGarbageCollector(){
    method addObjectWatcher (line 226) | public function addObjectWatcher($object){
    method isObjectAlive (line 250) | public function isObjectAlive($id){
    method removeObjectWatch (line 258) | public function removeObjectWatch($id){
    method doObjectCleanup (line 267) | public function doObjectCleanup(){
    method getObjectInformation (line 275) | public function getObjectInformation($id, $includeObject = false){
    method dumpServerMemory (line 302) | public function dumpServerMemory($outputFolder, $maxNesting, $maxStrin...
    method continueDump (line 391) | private function continueDump($from, &$data, &$objects, &$refCounts, $...

FILE: src/pocketmine/OfflinePlayer.php
  class OfflinePlayer (line 30) | class OfflinePlayer implements IPlayer, Metadatable{
    method __construct (line 40) | public function __construct(Server $server, $name){
    method isOnline (line 50) | public function isOnline(){
    method getName (line 54) | public function getName(){
    method getServer (line 58) | public function getServer(){
    method isOp (line 62) | public function isOp(){
    method setOp (line 66) | public function setOp($value){
    method isBanned (line 78) | public function isBanned(){
    method setBanned (line 82) | public function setBanned($value){
    method isWhitelisted (line 90) | public function isWhitelisted(){
    method setWhitelisted (line 94) | public function setWhitelisted($value){
    method getPlayer (line 102) | public function getPlayer(){
    method getFirstPlayed (line 106) | public function getFirstPlayed(){
    method getLastPlayed (line 110) | public function getLastPlayed(){
    method hasPlayedBefore (line 114) | public function hasPlayedBefore(){
    method setMetadata (line 118) | public function setMetadata($metadataKey, MetadataValue $metadataValue){
    method getMetadata (line 122) | public function getMetadata($metadataKey){
    method hasMetadata (line 126) | public function hasMetadata($metadataKey){
    method removeMetadata (line 130) | public function removeMetadata($metadataKey, Plugin $plugin){

FILE: src/pocketmine/Player.php
  class Player (line 164) | class Player extends Human implements CommandSender, InventoryHolder, Ch...
    method linkHookToPlayer (line 290) | public function linkHookToPlayer(FishingHook $entity){
    method unlinkHookFromPlayer (line 302) | public function unlinkHookFromPlayer(){
    method isFishing (line 314) | public function isFishing(){
    method getFishingHook (line 318) | public function getFishingHook(){
    method setFishingHook (line 322) | public function setFishingHook(FishingHook $entity = null){
    method getItemInHand (line 329) | public function getItemInHand(){
    method getLeaveMessage (line 333) | public function getLeaveMessage(){
    method setExperienceAndLevel (line 342) | public function setExperienceAndLevel(int $exp, int $level){
    method setExp (line 350) | public function setExp(int $exp){
    method setExpLevel (line 358) | public function setExpLevel(int $level){
    method getExpectedExperience (line 366) | public function getExpectedExperience(){
    method getLevelUpExpectedExperience (line 374) | public function getLevelUpExpectedExperience(){
    method calcExpLevel (line 382) | public function calcExpLevel(){
    method addExperience (line 389) | public function addExperience(int $exp){
    method addExpLevel (line 397) | public function addExpLevel(int $level){
    method getExp (line 405) | public function getExp(){
    method getExpLevel (line 413) | public function getExpLevel(){
    method canPickupExp (line 421) | public function canPickupExp(): bool{
    method resetExpCooldown (line 429) | public function resetExpCooldown(){
    method updateExperience (line 437) | public function updateExperience(){
    method getClientId (line 446) | public function getClientId(){
    method getDeviceModel (line 450) | public function getDeviceModel(){
    method getClientSecret (line 454) | public function getClientSecret(){
    method isBanned (line 458) | public function isBanned(){
    method setBanned (line 462) | public function setBanned($value){
    method isWhitelisted (line 471) | public function isWhitelisted() : bool{
    method setWhitelisted (line 475) | public function setWhitelisted($value){
    method getPlayer (line 483) | public function getPlayer(){
    method getFirstPlayed (line 487) | public function getFirstPlayed(){
    method getLastPlayed (line 491) | public function getLastPlayed(){
    method hasPlayedBefore (line 495) | public function hasPlayedBefore(){
    method setAllowFlight (line 499) | public function setAllowFlight($value){
    method usingElytra (line 504) | public function usingElytra() {
    method getAllowFlight (line 511) | public function getAllowFlight() : bool{
    method setFlying (line 515) | public function setFlying(bool $value){
    method isFlying (line 520) | public function isFlying() : bool{
    method setAutoJump (line 524) | public function setAutoJump($value){
    method hasAutoJump (line 529) | public function hasAutoJump() : bool{
    method spawnTo (line 536) | public function spawnTo(Player $player){
    method getServer (line 545) | public function getServer(){
    method getRemoveFormat (line 552) | public function getRemoveFormat(){
    method setRemoveFormat (line 559) | public function setRemoveFormat($remove = true){
    method canSee (line 568) | public function canSee(Player $player) : bool{
    method hidePlayer (line 575) | public function hidePlayer(Player $player){
    method showPlayer (line 586) | public function showPlayer(Player $player){
    method canCollideWith (line 596) | public function canCollideWith(Entity $entity) : bool{
    method resetFallDistance (line 600) | public function resetFallDistance(){
    method isOnline (line 611) | public function isOnline() : bool{
    method isOp (line 618) | public function isOp() : bool{
    method setOp (line 625) | public function setOp($value){
    method isPermissionSet (line 645) | public function isPermissionSet($name){
    method hasPermission (line 654) | public function hasPermission($name) : bool{
    method addAttachment (line 665) | public function addAttachment(Plugin $plugin, $name = null, $value = n...
    method removeAttachment (line 675) | public function removeAttachment(PermissionAttachment $attachment){
    method recalculatePermissions (line 683) | public function recalculatePermissions(){
    method getEffectivePermissions (line 706) | public function getEffectivePermissions(){
    method sendCommandData (line 710) | public function sendCommandData(){
    method __construct (line 734) | public function __construct(SourceInterface $interface, $clientID, $ip...
    method removeAchievement (line 768) | public function removeAchievement($achievementId){
    method hasAchievement (line 779) | public function hasAchievement($achievementId) : bool{
    method isConnected (line 792) | public function isConnected() : bool{
    method getDisplayName (line 801) | public function getDisplayName(){
    method setDisplayName (line 808) | public function setDisplayName($name){
    method setSkin (line 815) | public function setSkin($str, $skinId){
    method getAddress (line 827) | public function getAddress() : string{
    method getPort (line 834) | public function getPort() : int{
    method getNextPosition (line 838) | public function getNextPosition(){
    method isSleeping (line 845) | public function isSleeping() : bool{
    method getInAirTicks (line 849) | public function getInAirTicks(){
    method switchLevel (line 853) | protected function switchLevel(Level $targetLevel){
    method unloadChunk (line 884) | private function unloadChunk($x, $z, Level $level = null){
    method getSpawn (line 912) | public function getSpawn(){
    method hasValidSpawnPosition (line 925) | public function hasValidSpawnPosition() : bool{
    method sendChunk (line 929) | public function sendChunk($x, $z, $payload){
    method sendNextChunk (line 956) | protected function sendNextChunk(){
    method doFirstSpawn (line 1010) | protected function doFirstSpawn(){
    method orderChunks (line 1092) | protected function orderChunks(){
    method batchDataPacket (line 1173) | public function batchDataPacket(DataPacket $packet){
    method dataPacket (line 1203) | public function dataPacket(DataPacket $packet, $needACK = false){
    method directDataPacket (line 1236) | public function directDataPacket(DataPacket $packet, $needACK = false){
    method sleepOn (line 1267) | public function sleepOn(Vector3 $pos){
    method setSpawn (line 1304) | public function setSpawn(Vector3 $pos){
    method stopSleep (line 1318) | public function stopSleep(){
    method awardAchievement (line 1342) | public function awardAchievement($achievementId){
    method getGamemode (line 1366) | public function getGamemode() : int{
    method setGamemode (line 1378) | public function setGamemode(int $gm, bool $client = false){
    method sendSettings (line 1450) | public function sendSettings(){
    method isSurvival (line 1462) | public function isSurvival() : bool{
    method isCreative (line 1466) | public function isCreative() : bool{
    method isSpectator (line 1470) | public function isSpectator() : bool{
    method isAdventure (line 1474) | public function isAdventure() : bool{
    method isFireProof (line 1478) | public function isFireProof() : bool{
    method getDrops (line 1482) | public function getDrops(){
    method setDataProperty (line 1490) | public function setDataProperty($id, $type, $value){
    method checkGroundState (line 1499) | protected function checkGroundState($movX, $movY, $movZ, $dx, $dy, $dz){
    method checkBlockCollision (line 1513) | protected function checkBlockCollision(){
    method checkNearEntities (line 1531) | protected function checkNearEntities($tickDiff){
    method processMovement (line 1619) | protected function processMovement($tickDiff){
    method addMovement (line 1769) | public function addMovement($x, $y, $z, $yaw, $pitch, $headYaw = null){
    method setMotion (line 1775) | public function setMotion(Vector3 $mot){
    method updateMovement (line 1797) | protected function updateMovement(){
    method setMoving (line 1809) | public function setMoving($moving){
    method isMoving (line 1813) | public function isMoving() : bool{
    method sendAttributes (line 1817) | public function sendAttributes(bool $sendAll = false){
    method onUpdate (line 1830) | public function onUpdate($currentTick){
    method checkNetwork (line 1953) | public function checkNetwork(){
    method canInteract (line 1973) | public function canInteract(Vector3 $pos, $maxDistance, $maxDiff = 0.5){
    method onPlayerPreLogin (line 1985) | public function onPlayerPreLogin(){
    method clearCreativeItems (line 1993) | public function clearCreativeItems(){
    method getCreativeItems (line 1997) | public function getCreativeItems() : array{
    method addCreativeItem (line 2001) | public function addCreativeItem(Item $item){
    method removeCreativeItem (line 2005) | public function removeCreativeItem(Item $item){
    method getCreativeItemIndex (line 2012) | public function getCreativeItemIndex(Item $item) : int{
    method processLogin (line 2022) | protected function processLogin(){
    method getProtocol (line 2193) | public function getProtocol(){
    method handleDataPacket (line 2206) | public function handleDataPacket(DataPacket $packet){
  function kick (line 3660) | function kick($reason = "", $isAdmin = true){
  function dropItem (line 3685) | function dropItem(Item $item){
  function sendMessage (line 3721) | function sendMessage($message){
  function sendTranslation (line 3751) | function sendTranslation($message, array $parameters = []){
  function sendPopup (line 3774) | function sendPopup($message, $subtitle = ""){
  function sendTip (line 3792) | function sendTip($message){
  function close (line 3813) | function close($message = "", $reason = "generic reason", $notify = true){
  function __debugInfo (line 3903) | function __debugInfo(){
  function save (line 3910) | function save($async = false){
  function getName (line 3948) | function getName(){
  function kill (line 3952) | function kill(){
  function setHealth (line 4107) | function setHealth($amount){
  function attack (line 4115) | function attack($damage, EntityDamageEvent $source){
  function sendPosition (line 4147) | function sendPosition(Vector3 $pos, $yaw = null, $pitch = null, $mode = ...
  function checkChunks (line 4169) | function checkChunks(){
  function checkTeleportPosition (line 4204) | function checkTeleportPosition(){
  function teleport (line 4235) | function teleport(Vector3 $pos, $yaw = null, $pitch = null){
  function teleportImmediate (line 4276) | function teleportImmediate(Vector3 $pos, $yaw = null, $pitch = null){
  function getWindowId (line 4303) | function getWindowId(Inventory $inventory) : int{
  function addWindow (line 4319) | function addWindow(Inventory $inventory, $forceId = null) : int{
  function removeWindow (line 4340) | function removeWindow(Inventory $inventory){
  function setMetadata (line 4349) | function setMetadata($metadataKey, MetadataValue $metadataValue){
  function getMetadata (line 4353) | function getMetadata($metadataKey){
  function hasMetadata (line 4357) | function hasMetadata($metadataKey){
  function removeMetadata (line 4361) | function removeMetadata($metadataKey, Plugin $plugin){
  function onChunkChanged (line 4365) | function onChunkChanged(Chunk $chunk){
  function onChunkLoaded (line 4369) | function onChunkLoaded(Chunk $chunk){
  function onChunkPopulated (line 4372) | function onChunkPopulated(Chunk $chunk){
  function onChunkUnloaded (line 4375) | function onChunkUnloaded(Chunk $chunk){
  function onBlockChanged (line 4378) | function onBlockChanged(Vector3 $block){
  function getLoaderId (line 4382) | function getLoaderId(){
  function isLoaderActive (line 4386) | function isLoaderActive(){
  function getChunkCacheFromData (line 4397) | function getChunkCacheFromData($chunkX, $chunkZ, $payload){
  function addEffect (line 4416) | function addEffect(Effect $effect){//Overwrite

FILE: src/pocketmine/PocketMine.php
  function safe_var_dump (line 23) | function safe_var_dump(){
  function dummy (line 62) | function dummy(){
  function detect_system_timezone (line 184) | function detect_system_timezone(){
  function parse_offset (line 271) | function parse_offset($offset){
  function kill (line 316) | function kill($pid){
  function getReferenceCount (line 338) | function getReferenceCount($value, $includeCurrent = true){
  function getTrace (line 350) | function getTrace($start = 1, $trace = null){
  function cleanPath (line 380) | function cleanPath($path){

FILE: src/pocketmine/Server.php
  class Server (line 114) | class Server{
    method getName (line 315) | public function getName(){
    method isRunning (line 322) | public function isRunning(){
    method getUptime (line 330) | public function getUptime(){
    method getPocketMineVersion (line 361) | public function getPocketMineVersion(){
    method getFormattedVersion (line 365) | public function getFormattedVersion($prefix = ""){
    method getCodename (line 372) | public function getCodename(){
    method getVersion (line 379) | public function getVersion(){
    method getApiVersion (line 386) | public function getApiVersion(){
    method getiTXApiVersion (line 394) | public function getiTXApiVersion(){
    method getGeniApiVersion (line 401) | public function getGeniApiVersion(){
    method getFilePath (line 408) | public function getFilePath(){
    method getDataPath (line 415) | public function getDataPath(){
    method getPluginPath (line 422) | public function getPluginPath(){
    method getMaxPlayers (line 429) | public function getMaxPlayers(){
    method getPort (line 436) | public function getPort(){
    method getViewDistance (line 443) | public function getViewDistance(){
    method getIp (line 450) | public function getIp(){
    method getServerUniqueId (line 454) | public function getServerUniqueId(){
    method getAutoSave (line 461) | public function getAutoSave(){
    method setAutoSave (line 468) | public function setAutoSave($value){
    method getLevelType (line 478) | public function getLevelType(){
    method getGenerateStructures (line 485) | public function getGenerateStructures(){
    method getGamemode (line 492) | public function getGamemode(){
    method getForceGamemode (line 499) | public function getForceGamemode(){
    method getGamemodeString (line 510) | public static function getGamemodeString($mode){
    method getGamemodeFromString (line 532) | public static function getGamemodeFromString($str){
    method getDifficultyFromString (line 563) | public static function getDifficultyFromString($str){
    method getDifficulty (line 591) | public function getDifficulty(){
    method hasWhitelist (line 598) | public function hasWhitelist(){
    method getSpawnRadius (line 605) | public function getSpawnRadius(){
    method getAllowFlight (line 612) | public function getAllowFlight(){
    method isHardcore (line 619) | public function isHardcore(){
    method getDefaultGamemode (line 626) | public function getDefaultGamemode(){
    method getMotd (line 633) | public function getMotd(){
    method getLoader (line 640) | public function getLoader(){
    method getLogger (line 647) | public function getLogger(){
    method getEntityMetadata (line 654) | public function getEntityMetadata(){
    method getPlayerMetadata (line 661) | public function getPlayerMetadata(){
    method getLevelMetadata (line 668) | public function getLevelMetadata(){
    method getPluginManager (line 675) | public function getPluginManager(){
    method getCraftingManager (line 682) | public function getCraftingManager(){
    method getScheduler (line 689) | public function getScheduler(){
    method getTick (line 696) | public function getTick(){
    method getTicksPerSecond (line 705) | public function getTicksPerSecond(){
    method getTicksPerSecondAverage (line 714) | public function getTicksPerSecondAverage(){
    method getTickUsage (line 723) | public function getTickUsage(){
    method getTickUsageAverage (line 732) | public function getTickUsageAverage(){
    method getCommandMap (line 739) | public function getCommandMap(){
    method getOnlinePlayers (line 746) | public function getOnlinePlayers(){
    method addRecipe (line 750) | public function addRecipe(Recipe $recipe){
    method shouldSavePlayerData (line 755) | public function shouldSavePlayerData() : bool{
    method getOfflinePlayer (line 764) | public function getOfflinePlayer($name){
    method getOfflinePlayerData (line 780) | public function getOfflinePlayerData($name){
    method saveOfflinePlayerData (line 902) | public function saveOfflinePlayerData($name, CompoundTag $nbtTag, $asy...
    method getPlayer (line 925) | public function getPlayer(string $name){
    method getPlayerExact (line 950) | public function getPlayerExact(string $name){
    method matchPlayer (line 966) | public function matchPlayer($partialName){
    method removePlayer (line 984) | public function removePlayer(Player $player){
    method getLevels (line 1004) | public function getLevels(){
    method getDefaultLevel (line 1011) | public function getDefaultLevel(){
    method setDefaultLevel (line 1022) | public function setDefaultLevel($level){
    method isLevelLoaded (line 1033) | public function isLevelLoaded($name){
    method getLevel (line 1042) | public function getLevel($levelId){
    method getLevelByName (line 1055) | public function getLevelByName($name){
    method unloadLevel (line 1071) | public function unloadLevel(Level $level, $forceUnload = false){
    method loadLevel (line 1093) | public function loadLevel($name){
    method generateLevel (line 1151) | public function generateLevel($name, $seed = null, $generator = null, ...
    method isLevelGenerated (line 1225) | public function isLevelGenerated($name){
    method getConfigString (line 1254) | public function getConfigString($variable, $defaultValue = ""){
    method getProperty (line 1269) | public function getProperty($variable, $defaultValue = null){
    method setConfigString (line 1286) | public function setConfigString($variable, $value){
    method getConfigInt (line 1296) | public function getConfigInt($variable, $defaultValue = 0){
    method setConfigInt (line 1309) | public function setConfigInt($variable, $value){
    method getConfigBoolean (line 1319) | public function getConfigBoolean($variable, $defaultValue = false){
    method setConfigBool (line 1345) | public function setConfigBool($variable, $value){
    method getPluginCommand (line 1354) | public function getPluginCommand($name){
    method getNameBans (line 1365) | public function getNameBans(){
    method getIPBans (line 1372) | public function getIPBans(){
    method getCIDBans (line 1376) | public function getCIDBans(){
    method addOp (line 1383) | public function addOp($name){
    method removeOp (line 1395) | public function removeOp($name){
    method addWhitelist (line 1411) | public function addWhitelist($name){
    method removeWhitelist (line 1419) | public function removeWhitelist($name){
    method isWhitelisted (line 1429) | public function isWhitelisted($name){
    method isOp (line 1438) | public function isOp($name){
    method getWhitelisted (line 1445) | public function getWhitelisted(){
    method getOps (line 1452) | public function getOps(){
    method reloadWhitelist (line 1456) | public function reloadWhitelist(){
    method getCommandAliases (line 1463) | public function getCommandAliases(){
    method getCrashPath (line 1482) | public function getCrashPath(){
    method getInstance (line 1489) | public static function getInstance() : Server{
    method microSleep (line 1493) | public static function microSleep(int $microseconds){
    method about (line 1499) | public function about(){
    method loadAdvancedConfig (line 1519) | public function loadAdvancedConfig(){
    method isSynapseEnabled (line 1576) | public function isSynapseEnabled() : bool {
    method getDServerMaxPlayers (line 1585) | public function getDServerMaxPlayers(){
    method getDServerOnlinePlayers (line 1594) | public function getDServerOnlinePlayers(){
    method isDServerEnabled (line 1598) | public function isDServerEnabled(){
    method updateDServerInfo (line 1602) | public function updateDServerInfo(){
    method getBuild (line 1606) | public function getBuild(){
    method getGameVersion (line 1610) | public function getGameVersion(){
    method __construct (line 1622) | public function __construct(\ClassLoader $autoloader, \ThreadedLogger ...
    method getSynapse (line 1945) | public function getSynapse(){
    method broadcastMessage (line 1959) | public function broadcastMessage($message, $recipients = null) : int{
    method broadcastTip (line 1978) | public function broadcastTip(string $tip, $recipients = null) : int{
    method broadcastPopup (line 2004) | public function broadcastPopup(string $popup, $recipients = null) : int{
    method broadcast (line 2030) | public function broadcast($message, string $permissions) : int{
    method broadcastPacket (line 2054) | public function broadcastPacket(array $players, DataPacket $packet){
    method batchPackets (line 2077) | public function batchPackets(array $players, array $packets, $forceSyn...
    method broadcastPacketsCallback (line 2109) | public function broadcastPacketsCallback($data, array $identifiers){
    method enablePlugins (line 2126) | public function enablePlugins(int $type){
    method enablePlugin (line 2142) | public function enablePlugin(Plugin $plugin){
    method disablePlugins (line 2146) | public function disablePlugins(){
    method checkConsole (line 2150) | public function checkConsole(){
    method dispatchCommand (line 2171) | public function dispatchCommand(CommandSender $sender, $commandLine){
    method reload (line 2182) | public function reload(){
    method shutdown (line 2228) | public function shutdown(bool $restart = false, string $msg = ""){
    method forceShutdown (line 2240) | public function forceShutdown(){
    method getQueryInformation (line 2305) | public function getQueryInformation(){
    method start (line 2312) | public function start(){
    method handleSignal (line 2351) | public function handleSignal($signo){
    method exceptionHandler (line 2357) | public function exceptionHandler(\Throwable $e, $trace = null){
    method crashDump (line 2398) | public function crashDump(){
    method __debugInfo (line 2460) | public function __debugInfo(){
    method tickProcessor (line 2464) | private function tickProcessor(){
    method onPlayerLogin (line 2475) | public function onPlayerLogin(Player $player){
    method addPlayer (line 2484) | public function addPlayer($identifier, Player $player){
    method addOnlinePlayer (line 2489) | public function addOnlinePlayer(Player $player){
    method removeOnlinePlayer (line 2495) | public function removeOnlinePlayer(Player $player){
    method updatePlayerListData (line 2506) | public function updatePlayerListData(UUID $uuid, $entityId, $name, $sk...
    method removePlayerListData (line 2513) | public function removePlayerListData(UUID $uuid, array $players = null){
    method sendFullPlayerListData (line 2520) | public function sendFullPlayerListData(Player $p){
    method generateRecipeList (line 2533) | public function generateRecipeList(){
    method sendRecipeList (line 2556) | public function sendRecipeList(Player $p){
    method checkTickUpdates (line 2560) | private function checkTickUpdates($currentTick, $tickTime){
    method doAutoSave (line 2607) | public function doAutoSave(){
    method sendUsage (line 2625) | public function sendUsage($type = SendUsageTask::TYPE_STATUS){
    method getLanguage (line 2634) | public function getLanguage(){
    method isLanguageForced (line 2641) | public function isLanguageForced(){
    method getNetwork (line 2648) | public function getNetwork(){
    method getMemoryManager (line 2655) | public function getMemoryManager(){
    method titleTick (line 2659) | private function titleTick(){
    method handlePacket (line 2687) | public function handlePacket($address, $port, $payload){
    method getAdvancedProperty (line 2710) | public function getAdvancedProperty($variable, $defaultValue = null, C...
    method updateQuery (line 2732) | public function updateQuery(){
    method tick (line 2747) | private function tick(){

FILE: src/pocketmine/Thread.php
  class Thread (line 27) | abstract class Thread extends \Thread{
    method getClassLoader (line 33) | public function getClassLoader(){
    method setClassLoader (line 37) | public function setClassLoader(\ClassLoader $loader = null){
    method registerClassLoader (line 44) | public function registerClassLoader(){
    method start (line 55) | public function start(int $options = PTHREADS_INHERIT_ALL){
    method quit (line 71) | public function quit(){
    method getThreadName (line 85) | public function getThreadName(){

FILE: src/pocketmine/ThreadManager.php
  class ThreadManager (line 24) | class ThreadManager extends \Volatile{
    method init (line 29) | public static function init(){
    method getInstance (line 36) | public static function getInstance(){
    method add (line 43) | public function add($thread){
    method remove (line 52) | public function remove($thread){
    method getAll (line 61) | public function getAll(){

FILE: src/pocketmine/Worker.php
  class Worker (line 27) | abstract class Worker extends \Worker{
    method getClassLoader (line 34) | public function getClassLoader(){
    method setClassLoader (line 38) | public function setClassLoader(\ClassLoader $loader = null){
    method registerClassLoader (line 45) | public function registerClassLoader(){
    method start (line 56) | public function start(int $options = PTHREADS_INHERIT_ALL){
    method quit (line 72) | public function quit(){
    method getThreadName (line 90) | public function getThreadName(){

FILE: src/pocketmine/block/AcaciaDoor.php
  class AcaciaDoor (line 27) | class AcaciaDoor extends Door{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method canBeActivated (line 39) | public function canBeActivated() : bool {
    method getHardness (line 43) | public function getHardness() {
    method getToolType (line 47) | public function getToolType(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/AcaciaDoorBlock.php
  class AcaciaDoorBlock (line 24) | class AcaciaDoorBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/AcaciaWoodStairs.php
  class AcaciaWoodStairs (line 24) | class AcaciaWoodStairs extends WoodStairs{
    method getName (line 28) | public function getName(){

FILE: src/pocketmine/block/ActivatorRail.php
  class ActivatorRail (line 24) | class ActivatorRail extends PoweredRail {
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName() {

FILE: src/pocketmine/block/ActiveRedstoneLamp.php
  class ActiveRedstoneLamp (line 28) | class ActiveRedstoneLamp extends Solid implements ElectricalAppliance, S...
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method getHardness (line 39) | public function getHardness() {
    method getToolType (line 43) | public function getToolType(){
    method getLightLevel (line 47) | public function getLightLevel(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {
    method isLightedByAround (line 57) | public function isLightedByAround(){
    method checkPower (line 61) | protected function checkPower(array $ignore = []){
    method lightAround (line 77) | public function lightAround(){
    method turnAroundOff (line 88) | protected function turnAroundOff(array $ignore = []){
    method turnOn (line 106) | public function turnOn(){
    method turnOff (line 117) | public function turnOff(){

FILE: src/pocketmine/block/Air.php
  class Air (line 30) | class Air extends Transparent{
    method __construct (line 35) | public function __construct(){
    method getName (line 39) | public function getName(){
    method canPassThrough (line 43) | public function canPassThrough(){
    method isBreakable (line 47) | public function isBreakable(Item $item){
    method canBeFlowedInto (line 51) | public function canBeFlowedInto(){
    method canBeReplaced (line 55) | public function canBeReplaced(){
    method canBePlaced (line 59) | public function canBePlaced(){
    method isSolid (line 63) | public function isSolid(){
    method getBoundingBox (line 67) | public function getBoundingBox(){
    method getHardness (line 71) | public function getHardness() {
    method getResistance (line 75) | public function getResistance(){

FILE: src/pocketmine/block/Anvil.php
  class Anvil (line 30) | class Anvil extends Fallable{
    method isSolid (line 38) | public function isSolid(){
    method __construct (line 42) | public function __construct($meta = 0){
    method canBeActivated (line 46) | public function canBeActivated() : bool {
    method getHardness (line 50) | public function getHardness() {
    method getResistance (line 54) | public function getResistance(){
    method getName (line 58) | public function getName(){
    method getToolType (line 68) | public function getToolType(){
    method onActivate (line 72) | public function onActivate(Item $item, Player $player = null){
    method place (line 88) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 94) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Beacon.php
  class Beacon (line 32) | class Beacon extends Transparent implements SolidLight{
    method __construct (line 36) | public function __construct($meta = 0){
    method getLightLevel (line 44) | public function getLightLevel(){
    method getHardness (line 48) | public function getHardness(){
    method getName (line 52) | public function getName(){

FILE: src/pocketmine/block/Bed.php
  class Bed (line 31) | class Bed extends Transparent{
    method __construct (line 35) | public function __construct($meta = 0){
    method canBeActivated (line 39) | public function canBeActivated() : bool {
    method getHardness (line 43) | public function getHardness() {
    method getName (line 47) | public function getName(){
    method recalculateBoundingBox (line 51) | protected function recalculateBoundingBox() {
    method onActivate (line 62) | public function onActivate(Item $item, Player $player = null){
    method place (line 109) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 133) | public function onBreak(Item $item){
    method getDrops (line 161) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Bedrock.php
  class Bedrock (line 26) | class Bedrock extends Solid{
    method __construct (line 30) | public function __construct(){
    method getName (line 34) | public function getName(){
    method getHardness (line 38) | public function getHardness() {
    method getResistance (line 42) | public function getResistance(){
    method isBreakable (line 46) | public function isBreakable(Item $item){

FILE: src/pocketmine/block/Beetroot.php
  class Beetroot (line 26) | class Beetroot extends Crops{
    method __construct (line 30) | public function __construct($meta = 0){
    method getName (line 34) | public function getName(){
    method getDrops (line 38) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/BirchDoor.php
  class BirchDoor (line 27) | class BirchDoor extends Door{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method canBeActivated (line 39) | public function canBeActivated() : bool {
    method getHardness (line 43) | public function getHardness() {
    method getToolType (line 47) | public function getToolType(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/BirchDoorBlock.php
  class BirchDoorBlock (line 24) | class BirchDoorBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/BirchWoodStairs.php
  class BirchWoodStairs (line 24) | class BirchWoodStairs extends WoodStairs{
    method getName (line 28) | public function getName(){

FILE: src/pocketmine/block/Block.php
  class Block (line 41) | class Block extends Position implements BlockIds, Metadatable{
    method init (line 65) | public static function init(){
    method get (line 339) | public static function get($id, $meta = 0, Position $pos = null){
    method __construct (line 369) | public function __construct($id, $meta = 0){
    method place (line 388) | public function place(Item $item, Block $block, Block $target, $face, ...
    method isBreakable (line 399) | public function isBreakable(Item $item){
    method tickRate (line 403) | public function tickRate() : int{
    method onBreak (line 414) | public function onBreak(Item $item){
    method onUpdate (line 425) | public function onUpdate($type){
    method onActivate (line 437) | public function onActivate(Item $item, Player $player = null){
    method getHardness (line 444) | public function getHardness(){
    method getResistance (line 451) | public function getResistance(){
    method getBurnChance (line 458) | public function getBurnChance() : int{
    method getBurnAbility (line 465) | public function getBurnAbility() : int{
    method isTopFacingSurfaceSolid (line 469) | public function isTopFacingSurfaceSolid(){
    method canNeighborBurn (line 484) | public function canNeighborBurn(){
    method getToolType (line 496) | public function getToolType(){
    method getFrictionFactor (line 503) | public function getFrictionFactor(){
    method getLightLevel (line 510) | public function getLightLevel(){
    method canBePlaced (line 519) | public function canBePlaced(){
    method isPlaceable (line 523) | public function isPlaceable(){
    method canBeReplaced (line 532) | public function canBeReplaced(){
    method isTransparent (line 539) | public function isTransparent(){
    method isSolid (line 543) | public function isSolid(){
    method canBeFlowedInto (line 552) | public function canBeFlowedInto(){
    method canBeActivated (line 561) | public function canBeActivated() : bool{
    method activate (line 565) | public function activate(){
    method deactivate (line 569) | public function deactivate(){
    method isActivated (line 573) | public function isActivated(Block $from = null){
    method hasEntityCollision (line 577) | public function hasEntityCollision(){
    method canPassThrough (line 581) | public function canPassThrough(){
    method getName (line 588) | public function getName(){
    method getId (line 595) | final public function getId(){
    method addVelocityToEntity (line 599) | public function addVelocityToEntity(Entity $entity, Vector3 $vector){
    method getDamage (line 606) | final public function getDamage(){
    method setDamage (line 613) | final public function setDamage($meta){
    method position (line 622) | final public function position(Position $v){
    method getDrops (line 637) | public function getDrops(Item $item) : array{
    method getBreakTime (line 654) | public function getBreakTime(Item $item){
    method canBeBrokenWith (line 693) | public function canBeBrokenWith(Item $item){
    method getSide (line 705) | public function getSide($side, $step = 1){
    method __toString (line 716) | public function __toString(){
    method collidesWithBB (line 727) | public function collidesWithBB(AxisAlignedBB $bb){
    method onEntityCollide (line 736) | public function onEntityCollide(Entity $entity){
    method getBoundingBox (line 743) | public function getBoundingBox(){
    method recalculateBoundingBox (line 753) | protected function recalculateBoundingBox(){
    method calculateIntercept (line 770) | public function calculateIntercept(Vector3 $pos1, Vector3 $pos2){
    method setMetadata (line 852) | public function setMetadata($metadataKey, MetadataValue $metadataValue){
    method getMetadata (line 858) | public function getMetadata($metadataKey){
    method hasMetadata (line 866) | public function hasMetadata($metadataKey){
    method removeMetadata (line 872) | public function removeMetadata($metadataKey, Plugin $plugin){

FILE: src/pocketmine/block/BlockIds.php
  type BlockIds (line 24) | interface BlockIds{

FILE: src/pocketmine/block/Bookshelf.php
  class Bookshelf (line 28) | class Bookshelf extends Solid{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method getBurnChance (line 48) | public function getBurnChance() : int{
    method getBurnAbility (line 52) | public function getBurnAbility() : int{
    method getDrops (line 56) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/BrewingStand.php
  class BrewingStand (line 36) | class BrewingStand extends Transparent{
    method __construct (line 40) | public function __construct($meta = 0){
    method place (line 44) | public function place(Item $item, Block $block, Block $target, $face, ...
    method canBeActivated (line 72) | public function canBeActivated() : bool {
    method getHardness (line 76) | public function getHardness() {
    method getResistance (line 80) | public function getResistance(){
    method getLightLevel (line 84) | public function getLightLevel(){
    method getName (line 88) | public function getName(){
    method onActivate (line 92) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 118) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/BrickStairs.php
  class BrickStairs (line 27) | class BrickStairs extends Stair{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getResistance (line 39) | public function getResistance(){
    method getToolType (line 43) | public function getToolType(){
    method getName (line 47) | public function getName(){

FILE: src/pocketmine/block/Bricks.php
  class Bricks (line 27) | class Bricks extends Solid{
    method __construct (line 31) | public function __construct(){
    method getHardness (line 35) | public function getHardness() {
    method getResistance (line 39) | public function getResistance(){
    method getToolType (line 43) | public function getToolType(){
    method getName (line 47) | public function getName(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/BrownMushroom.php
  class BrownMushroom (line 28) | class BrownMushroom extends Flowable{
    method __construct (line 32) | public function __construct($meta = 0){
    method getName (line 36) | public function getName(){
    method getLightLevel (line 40) | public function getLightLevel(){
    method onUpdate (line 44) | public function onUpdate($type){
    method place (line 56) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getBoundingBox (line 67) | public function getBoundingBox(){

FILE: src/pocketmine/block/BrownMushroomBlock.php
  class BrownMushroomBlock (line 27) | class BrownMushroomBlock extends Solid{
    method __construct (line 33) | public function __construct($meta = 14){
    method canBeActivated (line 37) | public function canBeActivated() : bool {
    method getName (line 41) | public function getName(){
    method getHardness (line 45) | public function getHardness() {
    method getResistance (line 49) | public function getResistance(){
    method getDrops (line 53) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/BurningFurnace.php
  class BurningFurnace (line 35) | class BurningFurnace extends Solid{
    method __construct (line 39) | public function __construct(){}
    method getName (line 41) | public function getName(){
    method getLightLevel (line 45) | public function getLightLevel(){
    method place (line 49) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 82) | public function onBreak(Item $item){
    method onActivate (line 88) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 114) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/Cactus.php
  class Cactus (line 35) | class Cactus extends Transparent{
    method __construct (line 39) | public function __construct($meta = 0){
    method getHardness (line 43) | public function getHardness() {
    method hasEntityCollision (line 47) | public function hasEntityCollision(){
    method getName (line 51) | public function getName(){
    method recalculateBoundingBox (line 55) | protected function recalculateBoundingBox() {
    method onEntityCollide (line 67) | public function onEntityCollide(Entity $entity){
    method onUpdate (line 74) | public function onUpdate($type){
    method place (line 111) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 128) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Cake.php
  class Cake (line 33) | class Cake extends Transparent implements FoodSource{
    method __construct (line 37) | public function __construct($meta = 0){
    method canBeActivated (line 41) | public function canBeActivated() : bool {
    method getHardness (line 45) | public function getHardness() {
    method getName (line 49) | public function getName(){
    method recalculateBoundingBox (line 53) | protected function recalculateBoundingBox() {
    method place (line 67) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 78) | public function onUpdate($type){
    method getDrops (line 90) | public function getDrops(Item $item) : array {
    method canBeConsumed (line 94) | public function canBeConsumed() : bool{
    method canBeConsumedBy (line 98) | public function canBeConsumedBy(Entity $entity) : bool{
    method getResidue (line 102) | public function getResidue(){
    method getAdditionalEffects (line 107) | public function getAdditionalEffects() : array{
    method getFoodRestore (line 111) | public function getFoodRestore() : int{
    method getSaturationRestore (line 115) | public function getSaturationRestore() : float{
    method onActivate (line 119) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/Carpet.php
  class Carpet (line 29) | class Carpet extends Flowable{
    method __construct (line 33) | public function __construct($meta = 0){
    method getHardness (line 37) | public function getHardness() {
    method isSolid (line 41) | public function isSolid(){
    method getName (line 45) | public function getName(){
    method recalculateBoundingBox (line 67) | protected function recalculateBoundingBox() {
    method place (line 79) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 90) | public function onUpdate($type){

FILE: src/pocketmine/block/Carrot.php
  class Carrot (line 27) | class Carrot extends Crops{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method getDrops (line 39) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Cauldron.php
  class Cauldron (line 47) | class Cauldron extends Solid{
    method __construct (line 51) | public function __construct($meta = 0){
    method getHardness (line 55) | public function getHardness(){
    method getName (line 59) | public function getName(){
    method canBeActivated (line 63) | public function canBeActivated() : bool{
    method getToolType (line 67) | public function getToolType(){
    method place (line 71) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 94) | public function onBreak(Item $item){
    method getDrops (line 99) | public function getDrops(Item $item) : array{
    method update (line 108) | public function update(){//umm... right update method...?
    method isEmpty (line 113) | public function isEmpty(){
    method isFull (line 117) | public function isFull(){
    method onActivate (line 121) | public function onActivate(Item $item, Player $player = null){//@autho...
    method addItem (line 293) | public function addItem(Item $item, Player $player, Item $result){

FILE: src/pocketmine/block/CauldronBlock.php
  class CauldronBlock (line 24) | class CauldronBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/Chest.php
  class Chest (line 36) | class Chest extends Transparent{
    method __construct (line 40) | public function __construct($meta = 0){
    method canBeActivated (line 44) | public function canBeActivated() : bool {
    method getHardness (line 48) | public function getHardness() {
    method getName (line 52) | public function getName(){
    method getToolType (line 56) | public function getToolType(){
    method recalculateBoundingBox (line 60) | protected function recalculateBoundingBox() {
    method place (line 71) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 128) | public function onBreak(Item $item){
    method onActivate (line 138) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 176) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/ChorusPlant.php
  class ChorusPlant (line 30) | class ChorusPlant extends Crops
    method __construct (line 35) | public function __construct($meta = 0)
    method getHardness (line 40) | public function getHardness()
    method getToolType (line 45) | public function getToolType()
    method getName (line 50) | public function getName()
    method getDrops (line 55) | public function getDrops(Item $item): array

FILE: src/pocketmine/block/Clay.php
  class Clay (line 27) | class Clay extends Solid{
    method __construct (line 31) | public function __construct(){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getName (line 43) | public function getName(){
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Coal.php
  class Coal (line 27) | class Coal extends Solid{
    method __construct (line 31) | public function __construct(){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getBurnChance (line 43) | public function getBurnChance() : int{
    method getBurnAbility (line 47) | public function getBurnAbility() : int{
    method getName (line 51) | public function getName(){
    method getDrops (line 55) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/CoalOre.php
  class CoalOre (line 28) | class CoalOre extends Solid{
    method __construct (line 32) | public function __construct(){
    method getHardness (line 36) | public function getHardness() {
    method getToolType (line 40) | public function getToolType(){
    method getName (line 44) | public function getName(){
    method getDrops (line 48) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Cobblestone.php
  class Cobblestone (line 27) | class Cobblestone extends Solid{
    method __construct (line 31) | public function __construct(){
    method getToolType (line 35) | public function getToolType(){
    method getName (line 39) | public function getName(){
    method getHardness (line 43) | public function getHardness() {
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/CobblestoneStairs.php
  class CobblestoneStairs (line 27) | class CobblestoneStairs extends Stair{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getName (line 43) | public function getName(){

FILE: src/pocketmine/block/Cobweb.php
  class Cobweb (line 29) | class Cobweb extends Flowable{
    method __construct (line 33) | public function __construct(){
    method hasEntityCollision (line 37) | public function hasEntityCollision(){
    method getName (line 41) | public function getName(){
    method getHardness (line 45) | public function getHardness() {
    method getToolType (line 49) | public function getToolType(){
    method onEntityCollide (line 53) | public function onEntityCollide(Entity $entity){
    method getDrops (line 57) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/CocoaBlock.php
  class CocoaBlock (line 30) | class CocoaBlock extends Solid {
    method __construct (line 34) | public function __construct($meta = 0) {
    method getName (line 38) | public function getName() {
    method getHardness (line 42) | public function getHardness() {
    method getResistance (line 46) | public function getResistance() {
    method canBeActivated (line 50) | public function canBeActivated() : bool {
    method onActivate (line 54) | public function onActivate(Item $item, Player $player = null) {
    method onUpdate (line 71) | public function onUpdate($type) {
    method place (line 97) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 114) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/ComparatorBlock.php
  class ComparatorBlock (line 24) | class ComparatorBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/Crops.php
  class Crops (line 30) | abstract class Crops extends Flowable{
    method canBeActivated (line 32) | public function canBeActivated() : bool {
    method place (line 36) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onActivate (line 48) | public function onActivate(Item $item, Player $player = null){
    method onUpdate (line 70) | public function onUpdate($type){

FILE: src/pocketmine/block/Dandelion.php
  class Dandelion (line 28) | class Dandelion extends Flowable{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method place (line 41) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 52) | public function onUpdate($type){

FILE: src/pocketmine/block/DarkOakDoor.php
  class DarkOakDoor (line 27) | class DarkOakDoor extends Door{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method canBeActivated (line 39) | public function canBeActivated() : bool {
    method getHardness (line 43) | public function getHardness() {
    method getToolType (line 47) | public function getToolType(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/DarkOakDoorBlock.php
  class DarkOakDoorBlock (line 24) | class DarkOakDoorBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/DarkOakWoodStairs.php
  class DarkOakWoodStairs (line 24) | class DarkOakWoodStairs extends WoodStairs{
    method getName (line 28) | public function getName(){

FILE: src/pocketmine/block/DaylightDetector.php
  class DaylightDetector (line 32) | class DaylightDetector extends RedstoneSource{
    method getName (line 36) | public function getName(){
    method getBoundingBox (line 40) | public function getBoundingBox(){
    method canBeFlowedInto (line 47) | public function canBeFlowedInto(){
    method canBeActivated (line 51) | public function canBeActivated() : bool {
    method getTile (line 58) | protected function getTile(){
    method onActivate (line 73) | public function onActivate(Item $item, Player $player = null){
    method isActivated (line 79) | public function isActivated(Block $from = null){
    method onBreak (line 83) | public function onBreak(Item $item){
    method getHardness (line 88) | public function getHardness() {
    method getResistance (line 92) | public function getResistance(){
    method getDrops (line 96) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/DaylightDetectorInverted.php
  class DaylightDetectorInverted (line 27) | class DaylightDetectorInverted extends DaylightDetector{
    method onActivate (line 30) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/DaylightSensor.php
  class DaylightSensor (line 24) | class DaylightSensor extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/DaylightSensorInverted.php
  class DaylightSensorInverted (line 24) | class DaylightSensorInverted extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/DeadBush.php
  class DeadBush (line 28) | class DeadBush extends Flowable{
    method __construct (line 32) | public function __construct($meta = 0){
    method getName (line 36) | public function getName(){
    method place (line 40) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 50) | public function onUpdate($type){
    method getDrops (line 63) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/DetectorRail.php
  class DetectorRail (line 24) | class DetectorRail extends PoweredRail{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName() {

FILE: src/pocketmine/block/Diamond.php
  class Diamond (line 27) | class Diamond extends Solid{
    method __construct (line 31) | public function __construct(){
    method getHardness (line 35) | public function getHardness() {
    method getName (line 39) | public function getName(){
    method getToolType (line 43) | public function getToolType(){
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/DiamondOre.php
  class DiamondOre (line 28) | class DiamondOre extends Solid{
    method __construct (line 32) | public function __construct(){
    method getHardness (line 36) | public function getHardness() {
    method getName (line 40) | public function getName(){
    method getToolType (line 44) | public function getToolType(){
    method getDrops (line 48) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Dirt.php
  class Dirt (line 28) | class Dirt extends Solid{
    method __construct (line 32) | public function __construct(){
    method canBeActivated (line 36) | public function canBeActivated() : bool {
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method getName (line 48) | public function getName(){
    method onActivate (line 52) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/Dispenser.php
  class Dispenser (line 35) | class Dispenser extends Solid{
    method __construct (line 39) | public function __construct($meta = 0){
    method canBeActivated (line 43) | public function canBeActivated() : bool {
    method getHardness (line 47) | public function getHardness() {
    method getName (line 51) | public function getName(){
    method getToolType (line 55) | public function getToolType(){
    method place (line 59) | public function place(Item $item, Block $block, Block $target, $face, ...
    method activate (line 103) | public function activate(){
    method onActivate (line 110) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 138) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Door.php
  class Door (line 32) | abstract class Door extends Transparent implements ElectricalAppliance{
    method canBeActivated (line 34) | public function canBeActivated() : bool {
    method isSolid (line 38) | public function isSolid(){
    method canPassThrough (line 42) | public function canPassThrough(){
    method getFullDamage (line 46) | private function getFullDamage(){
    method recalculateBoundingBox (line 63) | protected function recalculateBoundingBox() {
    method onUpdate (line 210) | public function onUpdate($type){
    method place (line 228) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 258) | public function onBreak(Item $item){
    method isOpened (line 275) | public function isOpened(){
    method onActivate (line 279) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/DoublePlant.php
  class DoublePlant (line 28) | class DoublePlant extends Flowable{
    method __construct (line 39) | public function __construct($meta = 0){
    method canBeReplaced (line 43) | public function canBeReplaced(){
    method getName (line 47) | public function getName(){
    method onUpdate (line 59) | public function onUpdate($type){
    method place (line 71) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 82) | public function onBreak(Item $item){
    method getDrops (line 100) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/DoubleRedSandstoneSlab.php
  class DoubleRedSandstoneSlab (line 26) | class DoubleRedSandstoneSlab extends DoubleSlab{
    method getName (line 30) | public function getName(){
    method getDrops (line 34) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/DoubleSlab.php
  class DoubleSlab (line 27) | class DoubleSlab extends Solid{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getName (line 43) | public function getName(){
    method getDrops (line 57) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/DoubleWoodSlab.php
  class DoubleWoodSlab (line 27) | class DoubleWoodSlab extends Solid{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getName (line 43) | public function getName(){
    method getDrops (line 57) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/DragonEgg.php
  class DragonEgg (line 26) | class DragonEgg extends Solid{
    method __construct (line 28) | public function __construct(){
    method getName (line 30) | public function getName(){
    method getHardness (line 33) | public function getHardness(){
    method getResistance (line 37) | public function getResistance(){
    method isBreakable (line 40) | public function isBreakable(Item $item){

FILE: src/pocketmine/block/Dropper.php
  class Dropper (line 35) | class Dropper extends Solid implements ElectricalAppliance{
    method __construct (line 39) | public function __construct($meta = 0){
    method canBeActivated (line 43) | public function canBeActivated() : bool {
    method getHardness (line 47) | public function getHardness() {
    method getName (line 51) | public function getName(){
    method getToolType (line 55) | public function getToolType(){
    method place (line 59) | public function place(Item $item, Block $block, Block $target, $face, ...
    method activate (line 103) | public function activate(){
    method onActivate (line 110) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 137) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/ElectricalAppliance.php
  type ElectricalAppliance (line 24) | interface ElectricalAppliance{

FILE: src/pocketmine/block/Emerald.php
  class Emerald (line 27) | class Emerald extends Solid{
    method __construct (line 31) | public function __construct(){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getName (line 43) | public function getName(){
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/EmeraldOre.php
  class EmeraldOre (line 28) | class EmeraldOre extends Solid{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method getToolType (line 40) | public function getToolType(){
    method getHardness (line 44) | public function getHardness() {
    method getDrops (line 48) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/EnchantingTable.php
  class EnchantingTable (line 36) | class EnchantingTable extends Transparent{
    method __construct (line 40) | public function __construct(){
    method getLightLevel (line 44) | public function getLightLevel(){
    method getBoundingBox (line 48) | public function getBoundingBox(){
    method place (line 59) | public function place(Item $item, Block $block, Block $target, $face, ...
    method canBeActivated (line 83) | public function canBeActivated() : bool{
    method getHardness (line 87) | public function getHardness(){
    method getResistance (line 91) | public function getResistance(){
    method getName (line 95) | public function getName(){
    method getToolType (line 99) | public function getToolType(){
    method onActivate (line 103) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 145) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/EndPortalFrame.php
  class EndPortalFrame (line 27) | class EndPortalFrame extends Solid implements SolidLight{
    method __construct (line 31) | public function __construct($meta = 0){
    method getLightLevel (line 35) | public function getLightLevel(){
    method getName (line 39) | public function getName(){
    method getHardness (line 43) | public function getHardness() {
    method getResistance (line 47) | public function getResistance(){
    method isBreakable (line 51) | public function isBreakable(Item $item){
    method recalculateBoundingBox (line 55) | protected function recalculateBoundingBox() {

FILE: src/pocketmine/block/EndRod.php
  class EndRod (line 28) | class EndRod extends Flowable{
    method __construct (line 32) | public function __construct($meta = 0){
    method getLightLevel (line 36) | public function getLightLevel(){
    method getName (line 40) | public function getName(){
    method onUpdate (line 44) | public function onUpdate($type){
    method place (line 61) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 81) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/EndStone.php
  class EndStone (line 27) | class EndStone extends Solid{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getToolType (line 39) | public function getToolType(){
    method getHardness (line 43) | public function getHardness() {

FILE: src/pocketmine/block/EndStoneBricks.php
  class EndStoneBricks (line 27) | class EndStoneBricks extends Solid{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getDrops (line 43) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/EnderChest.php
  class EnderChest (line 38) | class EnderChest extends Transparent{
    method __construct (line 42) | public function __construct($meta = 0){
    method canBeActivated (line 46) | public function canBeActivated() : bool{
    method getHardness (line 50) | public function getHardness(){
    method getToolType (line 54) | public function getToolType(){
    method getName (line 58) | public function getName() : string{
    method recalculateBoundingBox (line 62) | protected function recalculateBoundingBox(){
    method place (line 73) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 102) | public function onBreak(Item $item){
    method onActivate (line 108) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 135) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/Fallable.php
  class Fallable (line 36) | abstract class Fallable extends Solid{
    method onUpdate (line 38) | public function onUpdate($type){

FILE: src/pocketmine/block/Farmland.php
  class Farmland (line 28) | class Farmland extends Solid{
    method __construct (line 32) | public function __construct($meta = 0){
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method recalculateBoundingBox (line 48) | protected function recalculateBoundingBox() {
    method getDrops (line 59) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Fence.php
  class Fence (line 28) | class Fence extends Transparent{
    method __construct (line 39) | public function __construct($meta = 0){
    method getHardness (line 43) | public function getHardness() {
    method getToolType (line 47) | public function getToolType(){
    method getBurnChance (line 51) | public function getBurnChance() : int{
    method getBurnAbility (line 55) | public function getBurnAbility() : int{
    method getName (line 59) | public function getName(){
    method recalculateBoundingBox (line 73) | protected function recalculateBoundingBox() {
    method canConnect (line 95) | public function canConnect(Block $block){

FILE: src/pocketmine/block/FenceGate.php
  class FenceGate (line 30) | class FenceGate extends Transparent implements ElectricalAppliance{
    method __construct (line 34) | public function __construct($meta = 0){
    method getName (line 38) | public function getName(){
    method getHardness (line 42) | public function getHardness() {
    method canBeActivated (line 46) | public function canBeActivated() : bool {
    method getToolType (line 50) | public function getToolType(){
    method recalculateBoundingBox (line 55) | protected function recalculateBoundingBox() {
    method place (line 83) | public function place(Item $item, Block $block, Block $target, $face, ...
    method isOpened (line 96) | public function isOpened(){
    method getDrops (line 100) | public function getDrops(Item $item) : array {
    method onActivate (line 106) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/FenceGateAcacia.php
  class FenceGateAcacia (line 25) | class FenceGateAcacia extends FenceGate{
    method getName (line 29) | public function getName(){

FILE: src/pocketmine/block/FenceGateBirch.php
  class FenceGateBirch (line 25) | class FenceGateBirch extends FenceGate{
    method getName (line 29) | public function getName(){

FILE: src/pocketmine/block/FenceGateDarkOak.php
  class FenceGateDarkOak (line 25) | class FenceGateDarkOak extends FenceGate{
    method getName (line 29) | public function getName(){

FILE: src/pocketmine/block/FenceGateJungle.php
  class FenceGateJungle (line 25) | class FenceGateJungle extends FenceGate{
    method getName (line 29) | public function getName(){

FILE: src/pocketmine/block/FenceGateSpruce.php
  class FenceGateSpruce (line 25) | class FenceGateSpruce extends FenceGate{
    method getName (line 29) | public function getName(){

FILE: src/pocketmine/block/Fire.php
  class Fire (line 36) | class Fire extends Flowable{
    method __construct (line 43) | public function __construct($meta = 0){
    method hasEntityCollision (line 50) | public function hasEntityCollision(){
    method getName (line 54) | public function getName(){
    method getLightLevel (line 58) | public function getLightLevel(){
    method isBreakable (line 62) | public function isBreakable(Item $item){
    method canBeReplaced (line 66) | public function canBeReplaced(){
    method onEntityCollide (line 70) | public function onEntityCollide(Entity $entity){
    method getDrops (line 90) | public function getDrops(Item $item) : array {
    method onUpdate (line 94) | public function onUpdate($type){
    method getTickRate (line 180) | public function getTickRate() : int{
    method tryToCatchBlockOnFire (line 206) | private function tryToCatchBlockOnFire(Block $block, int $bound, int $...
    method getChanceOfNeighborsEncouragingFire (line 228) | private function getChanceOfNeighborsEncouragingFire(Block $block){

FILE: src/pocketmine/block/Flowable.php
  class Flowable (line 27) | abstract class Flowable extends Transparent{
    method canBeFlowedInto (line 29) | public function canBeFlowedInto(){
    method getHardness (line 33) | public function getHardness() {
    method getResistance (line 37) | public function getResistance(){
    method isSolid (line 41) | public function isSolid(){
    method getBoundingBox (line 45) | public function getBoundingBox(){

FILE: src/pocketmine/block/Flower.php
  class Flower (line 29) | class Flower extends Flowable{
    method __construct (line 42) | public function __construct($meta = 0){
    method getName (line 46) | public function getName(){
    method place (line 69) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 80) | public function onUpdate($type){

FILE: src/pocketmine/block/FlowerPot.php
  class FlowerPot (line 36) | class FlowerPot extends Flowable{
    method __construct (line 43) | public function __construct($meta = 0){
    method getName (line 47) | public function getName(){
    method canBeActivated (line 51) | public function canBeActivated(): bool{
    method recalculateBoundingBox (line 55) | protected function recalculateBoundingBox(){
    method place (line 66) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 92) | public function onUpdate($type){
    method onActivate (line 104) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 126) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/Furnace.php
  class Furnace (line 34) | class Furnace extends Solid{
    method __construct (line 38) | public function __construct($meta = 0){
    method getName (line 42) | public function getName(){
    method canBeActivated (line 46) | public function canBeActivated() : bool {
    method getHardness (line 50) | public function getHardness() {
    method place (line 54) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 87) | public function onBreak(Item $item){
    method onActivate (line 93) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 126) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Glass.php
  class Glass (line 27) | class Glass extends Transparent{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getHardness (line 39) | public function getHardness() {
    method getDrops (line 43) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/GlassPane.php
  class GlassPane (line 28) | class GlassPane extends Thin{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getDrops (line 44) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/GlowingObsidian.php
  class GlowingObsidian (line 25) | class GlowingObsidian extends Solid implements SolidLight{
    method __construct (line 29) | public function __construct($meta = 0){
    method getName (line 33) | public function getName(){
    method getLightLevel (line 37) | public function getLightLevel(){

FILE: src/pocketmine/block/GlowingRedstoneOre.php
  class GlowingRedstoneOre (line 27) | class GlowingRedstoneOre extends RedstoneOre implements SolidLight{
    method getName (line 31) | public function getName(){
    method getLightLevel (line 35) | public function getLightLevel(){
    method onUpdate (line 39) | public function onUpdate($type){

FILE: src/pocketmine/block/Glowstone.php
  class Glowstone (line 28) | class Glowstone extends Transparent implements SolidLight{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method getLightLevel (line 48) | public function getLightLevel(){
    method getDrops (line 52) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Gold.php
  class Gold (line 27) | class Gold extends Solid{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getHardness (line 39) | public function getHardness() {
    method getToolType (line 43) | public function getToolType(){
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/GoldOre.php
  class GoldOre (line 27) | class GoldOre extends Solid{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getHardness (line 39) | public function getHardness() {
    method getToolType (line 43) | public function getToolType(){
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Grass.php
  class Grass (line 35) | class Grass extends Solid{
    method __construct (line 39) | public function __construct(){
    method canBeActivated (line 43) | public function canBeActivated() : bool{
    method getName (line 47) | public function getName(){
    method getHardness (line 51) | public function getHardness(){
    method getToolType (line 55) | public function getToolType(){
    method getDrops (line 59) | public function getDrops(Item $item) : array{
    method onUpdate (line 71) | public function onUpdate($type){
    method onActivate (line 93) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/GrassPath.php
  class GrassPath (line 34) | class GrassPath extends Transparent{
    method __construct (line 38) | public function __construct(){
    method getName (line 42) | public function getName(){
    method getToolType (line 46) | public function getToolType(){
    method recalculateBoundingBox (line 50) | protected function recalculateBoundingBox() {
    method onUpdate (line 61) | public function onUpdate($type){
    method getHardness (line 72) | public function getHardness() {
    method getDrops (line 76) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Gravel.php
  class Gravel (line 28) | class Gravel extends Fallable{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method getDrops (line 48) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/HardenedClay.php
  class HardenedClay (line 27) | class HardenedClay extends Solid{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getToolType (line 39) | public function getToolType(){
    method getHardness (line 43) | public function getHardness() {

FILE: src/pocketmine/block/HayBale.php
  class HayBale (line 27) | class HayBale extends Solid{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method getHardness (line 39) | public function getHardness() {
    method getBurnChance (line 43) | public function getBurnChance() : int{
    method getBurnAbility (line 47) | public function getBurnAbility() : int{
    method place (line 51) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 67) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/HeavyWeightedPressurePlate.php
  class HeavyWeightedPressurePlate (line 24) | class HeavyWeightedPressurePlate extends PressurePlate{
    method getName (line 27) | public function getName(){

FILE: src/pocketmine/block/Hopper.php
  class Hopper (line 34) | class Hopper extends Transparent{
    method __construct (line 38) | public function __construct($meta = 0){
    method canBeActivated (line 42) | public function canBeActivated(): bool{
    method getToolType (line 46) | public function getToolType(){
    method getName (line 50) | public function getName(){
    method getHardness (line 54) | public function getHardness(){
    method onActivate (line 58) | public function onActivate(Item $item, Player $player = null){
    method activate (line 72) | public function activate(){
    method getTarget (line 76) | public function getTarget(){
    method place (line 80) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 116) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/HopperBlock.php
  class HopperBlock (line 24) | class HopperBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/Ice.php
  class Ice (line 28) | class Ice extends Transparent{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method onBreak (line 48) | public function onBreak(Item $item){
    method getDrops (line 55) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/InactiveRedstoneLamp.php
  class InactiveRedstoneLamp (line 24) | class InactiveRedstoneLamp extends ActiveRedstoneLamp{
    method getLightLevel (line 27) | public function getLightLevel(){
    method getName (line 31) | public function getName(){
    method isLightedByAround (line 35) | public function isLightedByAround(){
    method turnOn (line 39) | public function turnOn(){
    method turnOff (line 49) | public function turnOff(){

FILE: src/pocketmine/block/InvisibleBedrock.php
  class InvisibleBedrock (line 26) | class InvisibleBedrock extends Transparent{
    method __construct (line 30) | public function __construct(){
    method getName (line 34) | public function getName(){
    method getHardness (line 38) | public function getHardness() {
    method getResistance (line 42) | public function getResistance(){
    method isBreakable (line 46) | public function isBreakable(Item $item){

FILE: src/pocketmine/block/Iron.php
  class Iron (line 27) | class Iron extends Solid{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getToolType (line 39) | public function getToolType(){
    method getHardness (line 43) | public function getHardness() {
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/IronBars.php
  class IronBars (line 27) | class IronBars extends Thin{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getHardness (line 39) | public function getHardness() {
    method getToolType (line 43) | public function getToolType(){
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/IronDoor.php
  class IronDoor (line 28) | class IronDoor extends Door{
    method __construct (line 32) | public function __construct($meta = 0){
    method getName (line 36) | public function getName(){
    method getToolType (line 40) | public function getToolType(){
    method getHardness (line 44) | public function getHardness() {
    method getDrops (line 48) | public function getDrops(Item $item) : array {
    method onActivate (line 58) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/IronOre.php
  class IronOre (line 27) | class IronOre extends Solid{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getToolType (line 39) | public function getToolType(){
    method getHardness (line 43) | public function getHardness() {
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/IronTrapdoor.php
  class IronTrapdoor (line 24) | class IronTrapdoor extends Trapdoor {
    method getName (line 27) | public function getName(){
    method getHardness (line 31) | public function getHardness() {
    method getResistance (line 35) | public function getResistance(){

FILE: src/pocketmine/block/ItemFrame.php
  class ItemFrame (line 37) | class ItemFrame extends Flowable{
    method __construct (line 40) | public function __construct($meta = 0){
    method getName (line 44) | public function getName(){
    method canBeActivated (line 48) | public function canBeActivated() : bool{
    method onActivate (line 52) | public function onActivate(Item $item, Player $player = null){
    method onBreak (line 82) | public function onBreak(Item $item){
    method onUpdate (line 92) | public function onUpdate($type){
    method place (line 108) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 144) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/ItemFrameBlock.php
  class ItemFrameBlock (line 24) | class ItemFrameBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/JungleDoor.php
  class JungleDoor (line 27) | class JungleDoor extends Door{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method canBeActivated (line 39) | public function canBeActivated() : bool {
    method getHardness (line 43) | public function getHardness() {
    method getToolType (line 47) | public function getToolType(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/JungleDoorBlock.php
  class JungleDoorBlock (line 24) | class JungleDoorBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/JungleWoodStairs.php
  class JungleWoodStairs (line 24) | class JungleWoodStairs extends WoodStairs{
    method getName (line 28) | public function getName(){

FILE: src/pocketmine/block/Ladder.php
  class Ladder (line 31) | class Ladder extends Transparent{
    method __construct (line 35) | public function __construct($meta = 0){
    method getName (line 39) | public function getName(){
    method hasEntityCollision (line 43) | public function hasEntityCollision(){
    method isSolid (line 47) | public function isSolid(){
    method getHardness (line 51) | public function getHardness() {
    method onEntityCollide (line 55) | public function onEntityCollide(Entity $entity){
    method recalculateBoundingBox (line 60) | protected function recalculateBoundingBox() {
    method place (line 106) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 125) | public function onUpdate($type){
    method getToolType (line 148) | public function getToolType(){
    method getDrops (line 152) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Lapis.php
  class Lapis (line 27) | class Lapis extends Solid{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getToolType (line 39) | public function getToolType(){
    method getHardness (line 43) | public function getHardness() {
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/LapisOre.php
  class LapisOre (line 28) | class LapisOre extends Solid{
    method __construct (line 32) | public function __construct(){
    method getHardness (line 36) | public function getHardness() {
    method getToolType (line 40) | public function getToolType(){
    method getName (line 44) | public function getName(){
    method getDrops (line 48) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Lava.php
  class Lava (line 33) | class Lava extends Liquid{
    method __construct (line 37) | public function __construct($meta = 0){
    method getLightLevel (line 41) | public function getLightLevel(){
    method getName (line 45) | public function getName(){
    method onEntityCollide (line 49) | public function onEntityCollide(Entity $entity){
    method place (line 69) | public function place(Item $item, Block $block, Block $target, $face, ...

FILE: src/pocketmine/block/Leaves.php
  class Leaves (line 33) | class Leaves extends Transparent{
    method __construct (line 45) | public function __construct($meta = 0){
    method getHardness (line 49) | public function getHardness() {
    method getToolType (line 53) | public function getToolType(){
    method getBurnChance (line 57) | public function getBurnChance() : int{
    method getBurnAbility (line 61) | public function getBurnAbility() : int{
    method getName (line 65) | public function getName(){
    method findLog (line 75) | private function findLog(Block $pos, array $visited, $distance, &$chec...
    method onUpdate (line 140) | public function onUpdate($type){
    method place (line 167) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 172) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Leaves2.php
  class Leaves2 (line 31) | class Leaves2 extends Leaves{
    method __construct (line 37) | public function __construct($meta = 0){
    method getName (line 41) | public function getName(){
    method getDrops (line 49) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Lever.php
  class Lever (line 29) | class Lever extends RedstoneSource{
    method __construct (line 32) | public function __construct($meta = 0){
    method canBeActivated (line 36) | public function canBeActivated() : bool {
    method getName (line 40) | public function getName(){
    method onUpdate (line 44) | public function onUpdate($type){
    method place (line 69) | public function place(Item $item, Block $block, Block $target, $face, ...
    method activate (line 92) | public function activate(array $ignore = []){
    method deactivate (line 115) | public function deactivate(array $ignore = []){
    method onActivate (line 138) | public function onActivate(Item $item, Player $player = null){
    method onBreak (line 146) | public function onBreak(Item $item){
    method isActivated (line 155) | public function isActivated(Block $from = null){
    method getHardness (line 159) | public function getHardness() {
    method getResistance (line 163) | public function getResistance(){
    method getDrops (line 167) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/LightWeightedPressurePlate.php
  class LightWeightedPressurePlate (line 24) | class LightWeightedPressurePlate extends PressurePlate{
    method getName (line 27) | public function getName(){

FILE: src/pocketmine/block/Liquid.php
  class Liquid (line 32) | abstract class Liquid extends Transparent{
    method hasEntityCollision (line 37) | public function hasEntityCollision(){
    method isBreakable (line 41) | public function isBreakable(Item $item){
    method canBeReplaced (line 45) | public function canBeReplaced(){
    method isSolid (line 49) | public function isSolid(){
    method getFluidHeightPercent (line 57) | public function getFluidHeightPercent(){
    method getFlowDecay (line 66) | protected function getFlowDecay(Vector3 $pos){
    method getEffectiveFlowDecay (line 78) | protected function getEffectiveFlowDecay(Vector3 $pos){
    method getFlowVector (line 96) | public function getFlowVector(){
    method addVelocityToEntity (line 175) | public function addVelocityToEntity(Entity $entity, Vector3 $vector){
    method tickRate (line 182) | public function tickRate() : int{
    method onUpdate (line 192) | public function onUpdate($type){
    method flowIntoBlock (line 312) | private function flowIntoBlock(Block $block, $newFlowDecay){
    method calculateFlowCost (line 325) | private function calculateFlowCost(Block $block, $accumulatedCost, $pr...
    method getHardness (line 373) | public function getHardness() {
    method getOptimalFlowDirections (line 377) | private function getOptimalFlowDirections(){
    method getSmallestFlowDecay (line 426) | private function getSmallestFlowDecay(Vector3 $pos, $decay){
    method checkForHarden (line 440) | private function checkForHarden(){
    method getBoundingBox (line 458) | public function getBoundingBox(){
    method getDrops (line 462) | public function getDrops(Item $item) : array {
    method triggerLavaMixEffects (line 471) | protected function triggerLavaMixEffects(Vector3 $pos){

FILE: src/pocketmine/block/LitPumpkin.php
  class LitPumpkin (line 34) | class LitPumpkin extends Solid implements SolidLight{
    method getLightLevel (line 38) | public function getLightLevel(){
    method getHardness (line 42) | public function getHardness() {
    method getToolType (line 46) | public function getToolType(){
    method getName (line 50) | public function getName(){
    method __construct (line 54) | public function __construct($meta = 0){
    method place (line 58) | public function place(Item $item, Block $block, Block $target, $face, ...

FILE: src/pocketmine/block/LitRedstoneLamp.php
  class LitRedstoneLamp (line 24) | class LitRedstoneLamp extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/LitRedstoneTorch.php
  class LitRedstoneTorch (line 24) | class LitRedstoneTorch extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/Melon.php
  class Melon (line 28) | class Melon extends Transparent{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method getDrops (line 48) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/MelonStem.php
  class MelonStem (line 29) | class MelonStem extends Crops{
    method getName (line 33) | public function getName(){
    method __construct (line 37) | public function __construct($meta = 0){
    method onUpdate (line 41) | public function onUpdate($type){
    method getDrops (line 82) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/MobHead.php
  class MobHead (line 36) | class MobHead extends Flowable{
    method __construct (line 40) | public function __construct($meta = 0){
    method getHardness (line 44) | public function getHardness(){
    method getName (line 48) | public function getName(){
    method recalculateBoundingBox (line 52) | protected function recalculateBoundingBox(){
    method place (line 63) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 90) | public function onUpdate($type){
    method getDrops (line 109) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/MonsterEggBlock.php
  class MonsterEggBlock (line 24) | class MonsterEggBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/MonsterSpawner.php
  class MonsterSpawner (line 33) | class MonsterSpawner extends Solid{
    method __construct (line 37) | public function __construct($meta = 0){
    method getHardness (line 41) | public function getHardness() {
    method getToolType (line 45) | public function getToolType(){
    method getName (line 49) | public function getName(){
    method canBeActivated (line 53) | public function canBeActivated() : bool {
    method onActivate (line 57) | public function onActivate(Item $item, Player $player = null){
    method place (line 72) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 93) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/MossStone.php
  class MossStone (line 27) | class MossStone extends Solid{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method getHardness (line 39) | public function getHardness() {
    method getToolType (line 43) | public function getToolType(){
    method getDrops (line 47) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Mycelium.php
  class Mycelium (line 33) | class Mycelium extends Solid{
    method __construct (line 37) | public function __construct(){}
    method getName (line 39) | public function getName(){
    method getToolType (line 43) | public function getToolType(){
    method getHardness (line 47) | public function getHardness() {
    method getDrops (line 51) | public function getDrops(Item $item) : array {
    method onUpdate (line 63) | public function onUpdate($type){

FILE: src/pocketmine/block/NetherBrick.php
  class NetherBrick (line 27) | class NetherBrick extends Solid{
    method __construct (line 31) | public function __construct(){}
    method getToolType (line 33) | public function getToolType(){
    method getName (line 37) | public function getName(){
    method getHardness (line 41) | public function getHardness() {
    method getDrops (line 45) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/NetherBrickFence.php
  class NetherBrickFence (line 26) | class NetherBrickFence extends Transparent{
    method __construct (line 30) | public function __construct($meta = 0){
    method getHardness (line 34) | public function getHardness(){
    method getToolType (line 38) | public function getToolType(){
    method getName (line 42) | public function getName(){
    method canConnect (line 46) | public function canConnect(Block $block){
    method getDrops (line 50) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/NetherBrickStairs.php
  class NetherBrickStairs (line 27) | class NetherBrickStairs extends Stair{
    method getName (line 31) | public function getName(){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method __construct (line 43) | public function __construct($meta = 0){

FILE: src/pocketmine/block/NetherQuartzOre.php
  class NetherQuartzOre (line 28) | class NetherQuartzOre extends Solid{
    method __construct (line 31) | public function __construct(){
    method getName (line 35) | public function getName(){
    method getToolType (line 39) | public function getToolType(){
    method getHardness (line 43) | public function getHardness() {
    method getResistance (line 47) | public function getResistance(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/NetherReactor.php
  class NetherReactor (line 25) | class NetherReactor extends Solid{
    method __construct (line 29) | public function __construct($meta = 0){
    method getName (line 33) | public function getName(){
    method canBeActivated (line 37) | public function canBeActivated() : bool {

FILE: src/pocketmine/block/NetherWart.php
  class NetherWart (line 31) | class NetherWart extends Flowable{
    method __construct (line 35) | public function __construct($meta = 0){
    method getName (line 39) | public function getName(){
    method place (line 43) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 52) | public function onUpdate($type){
    method getDrops (line 78) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/NetherWartBlock.php
  class NetherWartBlock (line 31) | class NetherWartBlock extends Flowable{
    method __construct (line 35) | public function __construct($meta = 0){
    method getName (line 39) | public function getName(){
    method place (line 43) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 52) | public function onUpdate($type){
    method getDrops (line 78) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Netherrack.php
  class Netherrack (line 27) | class Netherrack extends Solid{
    method __construct (line 31) | public function __construct(){}
    method getName (line 33) | public function getName(){
    method getHardness (line 37) | public function getHardness(){
    method getToolType (line 41) | public function getToolType(){
    method getDrops (line 45) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/Noteblock.php
  class Noteblock (line 17) | class Noteblock extends Solid implements ElectricalAppliance{
    method __construct (line 20) | public function __construct($meta = 0){
    method getHardness (line 24) | public function getHardness(){
    method getResistance (line 28) | public function getResistance(){
    method getToolType (line 32) | public function getToolType(){
    method canBeActivated (line 36) | public function canBeActivated() : bool{
    method getStrength (line 40) | public function getStrength(){
    method getInstrument (line 47) | public function getInstrument(){
    method place (line 123) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onActivate (line 136) | public function onActivate(Item $item, Player $player = null){
    method getName (line 159) | public function getName(){

FILE: src/pocketmine/block/Obsidian.php
  class Obsidian (line 28) | class Obsidian extends Solid{
    method __construct (line 35) | public function __construct(){
    method getName (line 41) | public function getName(){
    method getToolType (line 45) | public function getToolType(){
    method getHardness (line 49) | public function getHardness(){
    method getDrops (line 53) | public function getDrops(Item $item) : array {
    method onBreak (line 63) | public function onBreak(Item $item) {

FILE: src/pocketmine/block/PackedIce.php
  class PackedIce (line 28) | class PackedIce extends Solid {
    method __construct (line 32) | public function __construct() {
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType() {
    method getDrops (line 48) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Piston.php
  class Piston (line 24) | class Piston extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/PistonHead.php
  class PistonHead (line 24) | class PistonHead extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/Planks.php
  class Planks (line 27) | class Planks extends Solid{
    method __construct (line 37) | public function __construct($meta = 0){
    method getHardness (line 41) | public function getHardness() {
    method getToolType (line 45) | public function getToolType(){
    method getBurnChance (line 49) | public function getBurnChance() : int{
    method getBurnAbility (line 53) | public function getBurnAbility() : int{
    method getName (line 57) | public function getName(){

FILE: src/pocketmine/block/Podzol.php
  class Podzol (line 28) | class Podzol extends Solid{
    method __construct (line 32) | public function __construct(){
    method getToolType (line 36) | public function getToolType(){
    method getName (line 40) | public function getName(){
    method getHardness (line 44) | public function getHardness() {
    method getResistance (line 48) | public function getResistance(){
    method getDrops (line 52) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/Portal.php
  class Portal (line 29) | class Portal extends Transparent{
    method __construct (line 36) | public function __construct(){
    method getName (line 42) | public function getName(){
    method getHardness (line 46) | public function getHardness() {
    method getResistance (line 50) | public function getResistance(){
    method getToolType (line 54) | public function getToolType(){
    method canPassThrough (line 58) | public function canPassThrough(){
    method hasEntityCollision (line 62) | public function hasEntityCollision(){
    method onBreak (line 66) | public function onBreak(Item $item){
    method place (line 107) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 116) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/PortalBlock.php
  class PortalBlock (line 24) | class PortalBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/Potato.php
  class Potato (line 27) | class Potato extends Crops{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method getDrops (line 39) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/PoweredComparatorBlock.php
  class PoweredComparatorBlock (line 24) | class PoweredComparatorBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/PoweredRail.php
  class PoweredRail (line 28) | class PoweredRail extends Rail{
    method __construct (line 34) | public function __construct($meta = 0){
    method getName (line 38) | public function getName(){
    method update (line 42) | protected function update(){
    method canConnect (line 51) | public function canConnect(Rail $block){
    method isBlock (line 69) | public function isBlock(Block $block){
    method connect (line 76) | public function connect(Rail $rail, $force = false){
    method place (line 113) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getHardness (line 181) | public function getHardness() {
    method canPassThrough (line 185) | public function canPassThrough(){

FILE: src/pocketmine/block/PoweredRepeater.php
  class PoweredRepeater (line 29) | class PoweredRepeater extends RedstoneSource{
    method __construct (line 35) | public function __construct($meta = 0){
    method getName (line 39) | public function getName(){
    method canBeActivated (line 43) | public function canBeActivated() : bool{
    method getStrength (line 47) | public function getStrength(){
    method getDirection (line 51) | public function getDirection() : int{
    method getOppositeDirection (line 70) | public function getOppositeDirection() : int{
    method getDelayLevel (line 74) | public function getDelayLevel() : int{
    method isActivated (line 78) | public function isActivated(Block $from = null){
    method activate (line 92) | public function activate(array $ignore = []){
    method deactivate (line 103) | public function deactivate(array $ignore = []){
    method deactivateImmediately (line 114) | public function deactivateImmediately(){
    method onUpdate (line 119) | public function onUpdate($type){
    method onActivate (line 132) | public function onActivate(Item $item, Player $player = null){
    method place (line 140) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 150) | public function onBreak(Item $item){
    method getDrops (line 156) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/PoweredRepeaterBlock.php
  class PoweredRepeaterBlock (line 24) | class PoweredRepeaterBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/PressurePlate.php
  class PressurePlate (line 32) | class PressurePlate extends RedstoneSource{
    method __construct (line 36) | public function __construct($meta = 0){
    method hasEntityCollision (line 40) | public function hasEntityCollision(){
    method onEntityCollide (line 44) | public function onEntityCollide(Entity $entity){
    method isActivated (line 57) | public function isActivated(Block $from = null){
    method onUpdate (line 61) | public function onUpdate($type){
    method checkActivation (line 82) | public function checkActivation(){
    method place (line 100) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 106) | public function onBreak(Item $item){
    method getHardness (line 115) | public function getHardness() {
    method getResistance (line 119) | public function getResistance(){

FILE: src/pocketmine/block/Prismarine.php
  class Prismarine (line 27) | class Prismarine extends Solid{
    method __construct (line 35) | public function __construct($meta = 0){
    method getHardness (line 39) | public function getHardness(){
    method getName (line 43) | public function getName(){
    method getToolType (line 52) | public function getToolType(){
    method getDrops (line 56) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/Pumpkin.php
  class Pumpkin (line 34) | class Pumpkin extends Solid{
    method __construct (line 38) | public function __construct(){
    method getHardness (line 42) | public function getHardness() {
    method isHelmet (line 46) | public function isHelmet(){
    method getToolType (line 50) | public function getToolType(){
    method getName (line 54) | public function getName(){
    method place (line 58) | public function place(Item $item, Block $block, Block $target, $face, ...

FILE: src/pocketmine/block/PumpkinStem.php
  class PumpkinStem (line 29) | class PumpkinStem extends Crops{
    method __construct (line 33) | public function __construct($meta = 0){
    method getName (line 37) | public function getName(){
    method onUpdate (line 41) | public function onUpdate($type){
    method getDrops (line 82) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/PurpurBlock.php
  class PurpurBlock (line 31) | class PurpurBlock extends Solid{
    method __construct (line 35) | public function __construct($meta = 0){
    method getName (line 39) | public function getName(){
    method getHardness (line 47) | public function getHardness(){
    method place (line 51) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getToolType (line 68) | public function getToolType(){
    method getDrops (line 72) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/PurpurStairs.php
  class PurpurStairs (line 25) | class PurpurStairs extends Stair{
    method __construct (line 27) | public function __construct($meta = 0){
    method getHardness (line 30) | public function getHardness() {
    method getToolType (line 33) | public function getToolType(){
    method getName (line 36) | public function getName(){

FILE: src/pocketmine/block/Quartz.php
  class Quartz (line 28) | class Quartz extends Solid{
    method __construct (line 38) | public function __construct($meta = 0){
    method getHardness (line 42) | public function getHardness() {
    method getName (line 46) | public function getName(){
    method place (line 56) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getToolType (line 73) | public function getToolType(){
    method getDrops (line 77) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/QuartzStairs.php
  class QuartzStairs (line 27) | class QuartzStairs extends Stair{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getName (line 43) | public function getName(){

FILE: src/pocketmine/block/Rail.php
  class Rail (line 28) | class Rail extends Flowable{
    method __construct (line 46) | public function __construct($meta = 0){
    method getName (line 50) | public function getName(){
    method update (line 54) | protected function update(){
    method canConnect (line 62) | public function canConnect(Rail $block){
    method isBlock (line 73) | public function isBlock(Block $block){
    method connect (line 80) | public function connect(Rail $rail, $force = false){
    method place (line 117) | public function place(Item $item, Block $block, Block $target, $face, ...
    method check (line 177) | public static function check(Rail $rail){
    method getHardness (line 214) | public function getHardness() {
    method getResistance (line 218) | public function getResistance(){
    method canPassThrough (line 222) | public function canPassThrough(){

FILE: src/pocketmine/block/RedMushroom.php
  class RedMushroom (line 28) | class RedMushroom extends Flowable{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method onUpdate (line 41) | public function onUpdate($type){
    method place (line 53) | public function place(Item $item, Block $block, Block $target, $face, ...

FILE: src/pocketmine/block/RedMushroomBlock.php
  class RedMushroomBlock (line 27) | class RedMushroomBlock extends Solid{
    method __construct (line 34) | public function __construct($meta = 14){
    method canBeActivated (line 38) | public function canBeActivated() : bool {
    method getName (line 42) | public function getName(){
    method getHardness (line 46) | public function getHardness() {
    method getResistance (line 50) | public function getResistance(){
    method getDrops (line 54) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/RedSandstone.php
  class RedSandstone (line 24) | class RedSandstone extends Sandstone{
    method getName (line 27) | public function getName(){

FILE: src/pocketmine/block/RedSandstoneSlab.php
  class RedSandstoneSlab (line 27) | class RedSandstoneSlab extends Slab{
    method getName (line 31) | public function getName() : string{
    method place (line 35) | public function place(Item $item, Block $block, Block $target, $face, ...

FILE: src/pocketmine/block/RedSandstoneStairs.php
  class RedSandstoneStairs (line 24) | class RedSandstoneStairs extends SandstoneStairs{
    method getName (line 28) | public function getName(){

FILE: src/pocketmine/block/Redstone.php
  class Redstone (line 27) | class Redstone extends RedstoneSource{
    method __construct (line 31) | public function __construct(){
    method getBoundingBox (line 35) | public function getBoundingBox() {
    method canBeFlowedInto (line 39) | public function canBeFlowedInto(){
    method isSolid (line 43) | public function isSolid(){
    method isActivated (line 47) | public function isActivated(Block $from = null){
    method getHardness (line 51) | public function getHardness() {
    method getToolType (line 55) | public function getToolType(){
    method getName (line 59) | public function getName(){
    method getDrops (line 63) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/RedstoneLamp.php
  class RedstoneLamp (line 24) | class RedstoneLamp extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/RedstoneOre.php
  class RedstoneOre (line 29) | class RedstoneOre extends Solid{
    method __construct (line 33) | public function __construct(){
    method getName (line 37) | public function getName(){
    method getHardness (line 41) | public function getHardness() {
    method onUpdate (line 45) | public function onUpdate($type){
    method getToolType (line 55) | public function getToolType(){
    method getDrops (line 59) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/RedstoneSource.php
  class RedstoneSource (line 33) | class RedstoneSource extends Flowable{
    method __construct (line 37) | public function __construct(){
    method getMaxStrength (line 41) | public function getMaxStrength(){
    method isActivated (line 45) | public function isActivated(Block $from = null){
    method canCalc (line 49) | public function canCalc(){
    method place (line 53) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 60) | public function onBreak(Item $item){
    method activateBlockWithoutWire (line 67) | public function activateBlockWithoutWire(Block $block){
    method activateBlock (line 84) | public function activateBlock(Block $block){
    method deactivateBlock (line 93) | public function deactivateBlock(Block $block){
    method deactivateBlockWithoutWire (line 102) | public function deactivateBlockWithoutWire(Block $block){
    method activate (line 117) | public function activate(array $ignore = []){
    method deactivate (line 133) | public function deactivate(array $ignore = []){
    method checkPower (line 160) | public function checkPower(Block $block, array $ignore = [], $ignoreWi...
    method checkTorchOn (line 201) | public function checkTorchOn(Block $pos, array $ignore = []){
    method checkTorchOff (line 226) | public function checkTorchOff(Block $pos, array $ignore = []){
    method getStrength (line 251) | public function getStrength(){

FILE: src/pocketmine/block/RedstoneTorch.php
  class RedstoneTorch (line 29) | class RedstoneTorch extends RedstoneSource{
    method __construct (line 34) | public function __construct($meta = 0){
    method getLightLevel (line 38) | public function getLightLevel(){
    method getLastUpdateTime (line 42) | public function getLastUpdateTime(){
    method setLastUpdateTimeNow (line 46) | public function setLastUpdateTimeNow(){
    method canCalcTurn (line 50) | public function canCalcTurn(){
    method canScheduleUpdate (line 56) | public function canScheduleUpdate(){
    method getFrequency (line 60) | public function getFrequency(){
    method getName (line 64) | public function getName(){
    method turnOn (line 68) | public function turnOn($ignore = ""){
    method turnOff (line 93) | public function turnOff($ignore = ""){
    method activateTorch (line 118) | public function activateTorch(array $ignore = [], $notCheck = []){
    method activate (line 137) | public function activate(array $ignore = []){
    method deactivate (line 141) | public function deactivate(array $ignore = []){
    method deactivateTorch (line 145) | public function deactivateTorch(array $ignore = [], array $notCheck = ...
    method onUpdate (line 177) | public function onUpdate($type){
    method onBreak (line 212) | public function onBreak(Item $item){
    method place (line 227) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 257) | public function getDrops(Item $item) : array{
    method isActivated (line 263) | public function isActivated(Block $from = null){

FILE: src/pocketmine/block/RedstoneWire.php
  class RedstoneWire (line 29) | class RedstoneWire extends RedstoneSource{
    method __construct (line 38) | public function __construct($meta = 0){
    method getName (line 42) | public function getName(){
    method getStrength (line 46) | public function getStrength(){
    method isActivated (line 50) | public function isActivated(Block $from = null){
    method getHighestStrengthAround (line 54) | public function getHighestStrengthAround(){
    method getConnectedWires (line 102) | public function getConnectedWires(){
    method getUnconnectedSide (line 149) | public function getUnconnectedSide(){
    method activate (line 166) | public function activate(array $ignore = []){
    method deactivate (line 201) | public function deactivate(array $ignore = []){
    method getPowerSources (line 237) | public function getPowerSources(RedstoneWire $wire, array $powers = []...
    method calcSignal (line 310) | public function calcSignal($strength = 15, $type = self::ON, array $ha...
    method updateNormalWire (line 387) | public function updateNormalWire(Block $block, $strength, $type, array...
    method onUpdate (line 397) | public function onUpdate($type){
    method place (line 408) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 417) | public function onBreak(Item $item){
    method getDrops (line 422) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/RepeaterBlock.php
  class RepeaterBlock (line 24) | class RepeaterBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/Sand.php
  class Sand (line 27) | class Sand extends Fallable{
    method __construct (line 34) | public function __construct($meta = 0){
    method getHardness (line 38) | public function getHardness() {
    method getToolType (line 42) | public function getToolType(){
    method getName (line 46) | public function getName(){

FILE: src/pocketmine/block/Sandstone.php
  class Sandstone (line 27) | class Sandstone extends Solid{
    method __construct (line 35) | public function __construct($meta = 0){
    method getHardness (line 39) | public function getHardness() {
    method getName (line 43) | public function getName(){
    method getToolType (line 53) | public function getToolType(){
    method getDrops (line 57) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/SandstoneStairs.php
  class SandstoneStairs (line 27) | class SandstoneStairs extends Stair{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getName (line 43) | public function getName(){

FILE: src/pocketmine/block/Sapling.php
  class Sapling (line 30) | class Sapling extends Flowable{
    method __construct (line 40) | public function __construct($meta = 0){
    method canBeActivated (line 44) | public function canBeActivated() : bool {
    method getName (line 48) | public function getName(){
    method place (line 63) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onActivate (line 74) | public function onActivate(Item $item, Player $player = null){
    method onUpdate (line 88) | public function onUpdate($type){
    method getDrops (line 113) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/SeaLantern.php
  class SeaLantern (line 26) | class SeaLantern extends Transparent implements SolidLight{
    method __construct (line 30) | public function __construct($meta = 0){
    method getName (line 34) | public function getName(){
    method getHardness (line 38) | public function getHardness(){
    method getLightLevel (line 42) | public function getLightLevel(){
    method getDrops (line 46) | public function getDrops(Item $item) : array{

FILE: src/pocketmine/block/SignPost.php
  class SignPost (line 30) | class SignPost extends Transparent{
    method __construct (line 34) | public function __construct($meta = 0){
    method getHardness (line 38) | public function getHardness(){
    method isSolid (line 42) | public function isSolid(){
    method getName (line 46) | public function getName(){
    method getBoundingBox (line 50) | public function getBoundingBox(){
    method place (line 55) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 79) | public function onUpdate($type){
    method getDrops (line 90) | public function getDrops(Item $item) : array{
    method getToolType (line 96) | public function getToolType(){

FILE: src/pocketmine/block/SkullBlock.php
  class SkullBlock (line 40) | class SkullBlock extends Transparent{
    method __construct (line 50) | public function __construct($meta = 0){
    method getHardness (line 54) | public function getHardness() {
    method isHelmet (line 58) | public function isHelmet(){
    method isSolid (line 62) | public function isSolid(){
    method getBoundingBox (line 66) | public function getBoundingBox(){
    method place (line 77) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getResistance (line 109) | public function getResistance(){
    method getName (line 113) | public function getName(){
    method getToolType (line 124) | public function getToolType(){
    method onBreak (line 128) | public function onBreak(Item $item){
    method getDrops (line 133) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Slab.php
  class Slab (line 29) | class Slab extends Transparent{
    method __construct (line 42) | public function __construct($meta = 0){
    method getHardness (line 46) | public function getHardness() {
    method getName (line 50) | public function getName(){
    method getBurnChance (line 64) | public function getBurnChance() : int{
    method getBurnAbility (line 72) | public function getBurnAbility() : int{
    method recalculateBoundingBox (line 80) | protected function recalculateBoundingBox() {
    method place (line 103) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 152) | public function getDrops(Item $item) : array {
    method getToolType (line 164) | public function getToolType(){

FILE: src/pocketmine/block/Slab2.php
  class Slab2 (line 27) | class Slab2 extends Slab{
    method __construct (line 34) | public function __construct($meta = 0){
    method getName (line 38) | public function getName(){
    method place (line 46) | public function place(Item $item, Block $block, Block $target, $face, ...

FILE: src/pocketmine/block/SlimeBlock.php
  class SlimeBlock (line 27) | class SlimeBlock extends Solid{
    method __construct (line 31) | public function __construct($meta = 15){
    method hasEntityCollision (line 35) | public function hasEntityCollision(){
    method getHardness (line 39) | public function getHardness() {
    method getName (line 43) | public function getName(){

FILE: src/pocketmine/block/Snow.php
  class Snow (line 27) | class Snow extends Solid{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getName (line 39) | public function getName(){
    method getDrops (line 43) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/SnowLayer.php
  class SnowLayer (line 29) | class SnowLayer extends Flowable{
    method __construct (line 33) | public function __construct($meta = 0){
    method getName (line 37) | public function getName(){
    method canBeReplaced (line 41) | public function canBeReplaced(){
    method getHardness (line 45) | public function getHardness() {
    method getToolType (line 49) | public function getToolType(){
    method place (line 54) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 65) | public function onUpdate($type){
    method getDrops (line 77) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Solid.php
  class Solid (line 24) | abstract class Solid extends Block{
    method isSolid (line 26) | public function isSolid(){

FILE: src/pocketmine/block/SolidLight.php
  type SolidLight (line 24) | interface SolidLight{

FILE: src/pocketmine/block/SoulSand.php
  class SoulSand (line 28) | class SoulSand extends Solid{
    method __construct (line 32) | public function __construct(){
    method getName (line 36) | public function getName(){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method recalculateBoundingBox (line 48) | protected function recalculateBoundingBox() {

FILE: src/pocketmine/block/Sponge.php
  class Sponge (line 31) | class Sponge extends Solid{
    method __construct (line 36) | public function __construct($meta = 0){
    method getHardness (line 40) | public function getHardness() {
    method absorbWater (line 44) | public function absorbWater($block = null){
    method onUpdate (line 57) | public function onUpdate($type){
    method getName (line 82) | public function getName(){
    method getDrops (line 90) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/SpruceDoor.php
  class SpruceDoor (line 27) | class SpruceDoor extends Door{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method canBeActivated (line 39) | public function canBeActivated() : bool {
    method getHardness (line 43) | public function getHardness() {
    method getToolType (line 47) | public function getToolType(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/SpruceDoorBlock.php
  class SpruceDoorBlock (line 24) | class SpruceDoorBlock extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/SpruceWoodStairs.php
  class SpruceWoodStairs (line 24) | class SpruceWoodStairs extends WoodStairs{
    method getName (line 28) | public function getName(){

FILE: src/pocketmine/block/StainedClay.php
  class StainedClay (line 10) | class StainedClay extends Solid{
    method __construct (line 31) | public function __construct($meta = 0){
    method getHardness (line 35) | public function getHardness() {
    method getToolType (line 39) | public function getToolType(){
    method getName (line 43) | public function getName() : string{

FILE: src/pocketmine/block/Stair.php
  class Stair (line 29) | abstract class Stair extends Transparent{
    method recalculateBoundingBox (line 107) | protected function recalculateBoundingBox() {
    method place (line 130) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getHardness (line 146) | public function getHardness() {
    method getResistance (line 150) | public function getResistance(){
    method getDrops (line 154) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/StickyPiston.php
  class StickyPiston (line 27) | class StickyPiston extends Solid{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){

FILE: src/pocketmine/block/StillLava.php
  class StillLava (line 26) | class StillLava extends Lava{
    method onUpdate (line 30) | public function onUpdate($type){
    method getName (line 36) | public function getName(){

FILE: src/pocketmine/block/StillWater.php
  class StillWater (line 26) | class StillWater extends Water{
    method onUpdate (line 30) | public function onUpdate($type){
    method getName (line 36) | public function getName(){

FILE: src/pocketmine/block/Stone.php
  class Stone (line 28) | class Stone extends Solid{
    method __construct (line 39) | public function __construct($meta = 0){
    method getHardness (line 44) | public function getHardness() {
    method getToolType (line 48) | public function getToolType(){
    method getName (line 52) | public function getName(){
    method getDrops (line 66) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/StoneBrickStairs.php
  class StoneBrickStairs (line 27) | class StoneBrickStairs extends Stair{
    method __construct (line 31) | public function __construct($meta = 0){
    method getToolType (line 35) | public function getToolType(){
    method getHardness (line 39) | public function getHardness() {
    method getName (line 43) | public function getName(){

FILE: src/pocketmine/block/StoneBricks.php
  class StoneBricks (line 27) | class StoneBricks extends Solid{
    method __construct (line 36) | public function __construct($meta = 0){
    method getHardness (line 40) | public function getHardness() {
    method getToolType (line 44) | public function getToolType(){
    method getName (line 48) | public function getName(){
    method getDrops (line 58) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/StoneButton.php
  class StoneButton (line 28) | class StoneButton extends WoodenButton{
    method getName (line 31) | public function getName(){
    method onActivate (line 35) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/StonePressurePlate.php
  class StonePressurePlate (line 24) | class StonePressurePlate extends PressurePlate{
    method getName (line 27) | public function getName(){

FILE: src/pocketmine/block/StoneWall.php
  class StoneWall (line 29) | class StoneWall extends Transparent{
    method __construct (line 36) | public function __construct($meta = 0){
    method isSolid (line 40) | public function isSolid(){
    method getToolType (line 44) | public function getToolType(){
    method getHardness (line 48) | public function getHardness() {
    method getName (line 52) | public function getName(){
    method recalculateBoundingBox (line 60) | protected function recalculateBoundingBox() {
    method canConnect (line 90) | public function canConnect(Block $block){

FILE: src/pocketmine/block/Stonecutter.php
  class Stonecutter (line 29) | class Stonecutter extends Solid{
    method __construct (line 33) | public function __construct($meta = 0){
    method getName (line 37) | public function getName(){
    method getToolType (line 41) | public function getToolType(){
    method getDrops (line 45) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Sugarcane.php
  class Sugarcane (line 31) | class Sugarcane extends Flowable{
    method __construct (line 35) | public function __construct($meta = 0){
    method getName (line 39) | public function getName(){
    method getDrops (line 44) | public function getDrops(Item $item) : array {
    method onActivate (line 50) | public function onActivate(Item $item, Player $player = null){
    method onUpdate (line 76) | public function onUpdate($type){
    method place (line 108) | public function place(Item $item, Block $block, Block $target, $face, ...

FILE: src/pocketmine/block/TNT.php
  class TNT (line 37) | class TNT extends Solid implements ElectricalAppliance{
    method __construct (line 41) | public function __construct(){
    method getName (line 45) | public function getName(){
    method getHardness (line 49) | public function getHardness(){
    method canBeActivated (line 53) | public function canBeActivated() : bool{
    method getBurnChance (line 57) | public function getBurnChance() : int{
    method getBurnAbility (line 61) | public function getBurnAbility() : int{
    method prime (line 65) | public function prime(Player $player = null){
    method onUpdate (line 95) | public function onUpdate($type){
    method place (line 111) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onActivate (line 117) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/TallGrass.php
  class TallGrass (line 29) | class TallGrass extends Flowable{
    method __construct (line 36) | public function __construct($meta = 1){
    method canBeReplaced (line 40) | public function canBeReplaced(){
    method getName (line 44) | public function getName(){
    method getBurnChance (line 54) | public function getBurnChance() : int{
    method getBurnAbility (line 58) | public function getBurnAbility() : int{
    method place (line 62) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 74) | public function onUpdate($type){
    method getToolType (line 86) | public function getToolType()
    method getDrops (line 91) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Thin.php
  class Thin (line 27) | abstract class Thin extends Transparent{
    method isSolid (line 29) | public function isSolid(){
    method recalculateBoundingBox (line 33) | protected function recalculateBoundingBox() {
    method canConnect (line 78) | public function canConnect(Block $block){

FILE: src/pocketmine/block/Torch.php
  class Torch (line 28) | class Torch extends Flowable{
    method __construct (line 32) | public function __construct($meta = 0){
    method getLightLevel (line 36) | public function getLightLevel(){
    method getName (line 40) | public function getName(){
    method onUpdate (line 45) | public function onUpdate($type){
    method place (line 75) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 105) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Transparent.php
  class Transparent (line 25) | abstract class Transparent extends Block{
    method isTransparent (line 27) | public function isTransparent(){

FILE: src/pocketmine/block/Trapdoor.php
  class Trapdoor (line 30) | class Trapdoor extends Transparent{
    method __construct (line 34) | public function __construct($meta = 0){
    method getName (line 38) | public function getName(){
    method getHardness (line 42) | public function getHardness() {
    method getResistance (line 46) | public function getResistance(){
    method canBeActivated (line 50) | public function canBeActivated() : bool {
    method recalculateBoundingBox (line 54) | protected function recalculateBoundingBox() {
    method place (line 125) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 149) | public function getDrops(Item $item) : array {
    method isOpened (line 155) | public function isOpened(){
    method onActivate (line 159) | public function onActivate(Item $item, Player $player = \null){
    method getToolType (line 166) | public function getToolType(){

FILE: src/pocketmine/block/TrappedChest.php
  class TrappedChest (line 36) | class TrappedChest extends RedstoneSource{
    method __construct (line 39) | public function __construct($meta = 0){
    method getBoundingBox (line 43) | public function getBoundingBox(){
    method isSolid (line 50) | public function isSolid(){
    method canBeFlowedInto (line 54) | public function canBeFlowedInto(){
    method canBeActivated (line 58) | public function canBeActivated() : bool {
    method getHardness (line 62) | public function getHardness() {
    method getResistance (line 66) | public function getResistance(){
    method getName (line 70) | public function getName(){
    method getToolType (line 74) | public function getToolType(){
    method recalculateBoundingBox (line 78) | protected function recalculateBoundingBox() {
    method place (line 89) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onBreak (line 146) | public function onBreak(Item $item){
    method onActivate (line 156) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 194) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Tripwire.php
  class Tripwire (line 26) | class Tripwire extends Transparent{
    method __construct (line 30) | public function __construct($meta = 0){
    method getName (line 34) | public function getName(){
    method getToolType (line 38) | public function getToolType(){
    method getHardness (line 42) | public function getHardness(){
    method getResistance (line 46) | public function getResistance(){

FILE: src/pocketmine/block/TripwireHook.php
  class TripwireHook (line 24) | class TripwireHook extends Solid {
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName() :string {
    method getHardness (line 36) | public function getHardness() {
    method getResistance (line 40) | public function getResistance(){

FILE: src/pocketmine/block/UnlitRedstoneTorch.php
  class UnlitRedstoneTorch (line 24) | class UnlitRedstoneTorch extends RedstoneTorch{
    method getLightLevel (line 27) | public function getLightLevel(){
    method isActivated (line 31) | public function isActivated(Block $from = null){

FILE: src/pocketmine/block/UnpoweredRepeater.php
  class UnpoweredRepeater (line 26) | class UnpoweredRepeater extends PoweredRepeater{
    method getName (line 29) | public function getName(){
    method getStrength (line 33) | public function getStrength(){
    method isActivated (line 37) | public function isActivated(Block $from = null){
    method onBreak (line 41) | public function onBreak(Item $item){

FILE: src/pocketmine/block/Vine.php
  class Vine (line 31) | class Vine extends Transparent{
    method __construct (line 35) | public function __construct($meta = 0){
    method isSolid (line 39) | public function isSolid(){
    method getName (line 43) | public function getName(){
    method getHardness (line 47) | public function getHardness() {
    method canPassThrough (line 51) | public function canPassThrough(){
    method hasEntityCollision (line 55) | public function hasEntityCollision(){
    method onEntityCollide (line 59) | public function onEntityCollide(Entity $entity){
    method recalculateBoundingBox (line 63) | protected function recalculateBoundingBox() {
    method place (line 124) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 145) | public function onUpdate($type){
    method getDrops (line 157) | public function getDrops(Item $item) : array {
    method getToolType (line 167) | public function getToolType(){

FILE: src/pocketmine/block/WallSign.php
  class WallSign (line 26) | class WallSign extends SignPost{
    method getName (line 30) | public function getName(){
    method onUpdate (line 34) | public function onUpdate($type){

FILE: src/pocketmine/block/Water.php
  class Water (line 28) | class Water extends Liquid{
    method __construct (line 32) | public function __construct($meta = 0){
    method getName (line 36) | public function getName(){
    method onEntityCollide (line 40) | public function onEntityCollide(Entity $entity){
    method place (line 49) | public function place(Item $item, Block $block, Block $target, $face, ...

FILE: src/pocketmine/block/WaterLily.php
  class WaterLily (line 32) | class WaterLily extends Flowable{
    method __construct (line 36) | public function __construct($meta = 0){
    method isSolid (line 40) | public function isSolid(){
    method getName (line 44) | public function getName(){
    method getHardness (line 48) | public function getHardness() {
    method getResistance (line 52) | public function getResistance(){
    method canPassThrough (line 56) | public function canPassThrough(){
    method recalculateBoundingBox (line 60) | protected function recalculateBoundingBox() {
    method place (line 72) | public function place(Item $item, Block $block, Block $target, $face, ...
    method onUpdate (line 84) | public function onUpdate($type){
    method getDrops (line 95) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/WeightedPressurePlateHeavy.php
  class WeightedPressurePlateHeavy (line 24) | class WeightedPressurePlateHeavy extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/WeightedPressurePlateLight.php
  class WeightedPressurePlateLight (line 24) | class WeightedPressurePlateLight extends Solid{
    method __construct (line 28) | public function __construct($meta = 0){
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/Wheat.php
  class Wheat (line 27) | class Wheat extends Crops{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method getDrops (line 39) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/Wood.php
  class Wood (line 28) | class Wood extends Solid{
    method __construct (line 38) | public function __construct($meta = 0){
    method getHardness (line 42) | public function getHardness() {
    method getName (line 46) | public function getName(){
    method getBurnChance (line 56) | public function getBurnChance() : int{
    method getBurnAbility (line 60) | public function getBurnAbility() : int{
    method place (line 64) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getDrops (line 80) | public function getDrops(Item $item) : array {
    method getToolType (line 86) | public function getToolType(){

FILE: src/pocketmine/block/Wood2.php
  class Wood2 (line 25) | class Wood2 extends Wood{
    method getName (line 32) | public function getName(){

FILE: src/pocketmine/block/WoodDoor.php
  class WoodDoor (line 27) | class WoodDoor extends Door{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method canBeActivated (line 39) | public function canBeActivated() : bool {
    method getHardness (line 43) | public function getHardness() {
    method getToolType (line 47) | public function getToolType(){
    method getDrops (line 51) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/WoodSlab.php
  class WoodSlab (line 29) | class WoodSlab extends Transparent{
    method __construct (line 33) | public function __construct($meta = 0){
    method getHardness (line 37) | public function getHardness() {
    method getName (line 41) | public function getName(){
    method recalculateBoundingBox (line 55) | protected function recalculateBoundingBox() {
    method place (line 78) | public function place(Item $item, Block $block, Block $target, $face, ...
    method getToolType (line 126) | public function getToolType(){
    method getDrops (line 130) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/block/WoodStairs.php
  class WoodStairs (line 27) | class WoodStairs extends Stair{
    method __construct (line 31) | public function __construct($meta = 0){
    method getName (line 35) | public function getName(){
    method getToolType (line 39) | public function getToolType(){
    method getDrops (line 43) | public function getDrops(Item $item) : array {
    method getBurnChance (line 49) | public function getBurnChance() : int{
    method getBurnAbility (line 53) | public function getBurnAbility() : int{
    method getHardness (line 57) | public function getHardness() {

FILE: src/pocketmine/block/WoodenButton.php
  class WoodenButton (line 30) | class WoodenButton extends RedstoneSource{
    method __construct (line 33) | public function __construct($meta = 0){
    method onUpdate (line 37) | public function onUpdate($type){
    method deactivate (line 68) | public function deactivate(array $ignore = []){
    method activate (line 93) | public function activate(array $ignore = []){
    method getName (line 120) | public function getName(){
    method getHardness (line 124) | public function getHardness() {
    method onBreak (line 128) | public function onBreak(Item $item){
    method place (line 137) | public function place(Item $item, Block $block, Block $target, $face, ...
    method canBeActivated (line 146) | public function canBeActivated() : bool {
    method isActivated (line 150) | public function isActivated(Block $from = null){
    method onActivate (line 154) | public function onActivate(Item $item, Player $player = null){

FILE: src/pocketmine/block/WoodenPressurePlate.php
  class WoodenPressurePlate (line 24) | class WoodenPressurePlate extends PressurePlate{
    method getName (line 27) | public function getName(){

FILE: src/pocketmine/block/Wool.php
  class Wool (line 27) | class Wool extends Solid{
    method __construct (line 47) | public function __construct($meta = 0){
    method getHardness (line 51) | public function getHardness(){
    method getToolType (line 55) | public function getToolType(){
    method getName (line 59) | public function getName(){
    method getBurnChance (line 81) | public function getBurnChance() : int{
    method getBurnAbility (line 85) | public function getBurnAbility() : int{

FILE: src/pocketmine/block/Workbench.php
  class Workbench (line 29) | class Workbench extends Solid{
    method __construct (line 33) | public function __construct($meta = 0){
    method canBeActivated (line 37) | public function canBeActivated() : bool {
    method getHardness (line 41) | public function getHardness() {
    method getName (line 45) | public function getName(){
    method getToolType (line 49) | public function getToolType(){
    method onActivate (line 53) | public function onActivate(Item $item, Player $player = null){
    method getDrops (line 62) | public function getDrops(Item $item) : array {

FILE: src/pocketmine/command/Command.php
  class Command (line 34) | abstract class Command{
    method __construct (line 83) | public function __construct($name, $description = "", $usageMessage = ...
    method getDefaultCommandData (line 97) | public function getDefaultCommandData() : \stdClass{
    method generateCustomCommandData (line 109) | public function generateCustomCommandData(Player $player){
    method getOverloads (line 124) | public function getOverloads(): \stdClass{
    method execute (line 135) | public abstract function execute(CommandSender $sender, $commandLabel,...
    method getName (line 140) | public function getName() : string{
    method getPermission (line 147) | public function getPermission(){
    method setPermission (line 155) | public function setPermission($permission){
    method testPermission (line 168) | public function testPermission(CommandSender $target){
    method testPermissionSilent (line 187) | public function testPermissionSilent(CommandSender $target){
    method getLabel (line 204) | public function getLabel(){
    method setLabel (line 208) | public function setLabel($name){
    method register (line 227) | public function register(CommandMap $commandMap){
    method unregister (line 242) | public function unregister(CommandMap $commandMap){
    method allowChangesFrom (line 259) | private function allowChangesFrom(CommandMap $commandMap){
    method isRegistered (line 266) | public function isRegistered(){
    method getAliases (line 273) | public function getAliases(){
    method getPermissionMessage (line 280) | public function getPermissionMessage(){
    method getDescription (line 287) | public function getDescription(){
    method getUsage (line 294) | public function getUsage(){
    method setAliases (line 301) | public function setAliases(array $aliases){
    method setDescription (line 311) | public function setDescription($description){
    method setPermissionMessage (line 318) | public function setPermissionMessage($permissionMessage){
    method setUsage (line 325) | public function setUsage($usage){
    method generateDefaultData (line 329) | public static final function generateDefaultData() : \stdClass{
    method broadcastCommandMessage (line 341) | public static function broadcastCommandMessage(CommandSender $source, ...
    method __toString (line 377) | public function __toString(){

FILE: src/pocketmine/command/CommandExecutor.php
  type CommandExecutor (line 25) | interface CommandExecutor{
    method onCommand (line 35) | public function onCommand(CommandSender $sender, Command $command, $la...

FILE: src/pocketmine/command/CommandMap.php
  type CommandMap (line 25) | interface CommandMap{
    method registerAll (line 31) | public function registerAll($fallbackPrefix, array $commands);
    method register (line 38) | public function register($fallbackPrefix, Command $command, $label = n...
    method dispatch (line 46) | public function dispatch(CommandSender $sender, $cmdLine);
    method clearCommands (line 51) | public function clearCommands();
    method getCommand (line 58) | public function getCommand($name);

FILE: src/pocketmine/command/CommandReader.php
  class CommandReader (line 28) | class CommandReader extends Thread{
    method __construct (line 37) | public function __construct($logger){
    method shutdown (line 50) | public function shutdown(){
    method readline_callback (line 54) | private function readline_callback($line){
    method readLine (line 61) | private function readLine(){
    method getLine (line 77) | public function getLine(){
    method quit (line 85) | public function quit(){
    method run (line 93) | public function run(){
    method getThreadName (line 125) | public function getThreadName(){

FILE: src/pocketmine/command/CommandSender.php
  type CommandSender (line 26) | interface CommandSender extends Permissible{
    method sendMessage (line 31) | public function sendMessage($message);
    method getServer (line 36) | public function getServer();
    method getName (line 41) | public function getName();

FILE: src/pocketmine/command/ConsoleCommandSender.php
  class ConsoleCommandSender (line 31) | class ConsoleCommandSender implements CommandSender{
    method __construct (line 35) | public function __construct(){
    method isPermissionSet (line 44) | public function isPermissionSet($name){
    method hasPermission (line 53) | public function hasPermission($name){
    method addAttachment (line 64) | public function addAttachment(Plugin $plugin, $name = null, $value = n...
    method removeAttachment (line 73) | public function removeAttachment(PermissionAttachment $attachment){
    method recalculatePermissions (line 77) | public function recalculatePermissions(){
    method getEffectivePermissions (line 84) | public function getEffectivePermissions(){
    method isPlayer (line 91) | public function isPlayer(){
    method getServer (line 98) | public function getServer(){
    method sendMessage (line 105) | public function sendMessage($message){
    method getName (line 120) | public function getName() : string{
    method isOp (line 127) | public function isOp(){
    method setOp (line 134) | public function setOp($value){

FILE: src/pocketmine/command/FormattedCommandAlias.php
  class FormattedCommandAlias (line 29) | class FormattedCommandAlias extends Command{
    method __construct (line 36) | public function __construct($alias, array $formatStrings){
    method execute (line 41) | public function execute(CommandSender $sender, $commandLabel, array $a...
    method buildCommand (line 78) | private function buildCommand($formatString, array $args){
    method inRange (line 158) | private static function inRange($i, $j, $k){

FILE: src/pocketmine/command/PluginCommand.php
  class PluginCommand (line 28) | class PluginCommand extends Command implements PluginIdentifiableCommand{
    method __construct (line 40) | public function __construct($name, Plugin $owner){
    method execute (line 47) | public function execute(CommandSender $sender, $commandLabel, array $a...
    method getExecutor (line 66) | public function getExecutor(){
    method setExecutor (line 73) | public function setExecutor(CommandExecutor $executor){
    method getPlugin (line 80) | public function getPlugin(){

FILE: src/pocketmine/command/PluginIdentifiableCommand.php
  type PluginIdentifiableCommand (line 24) | interface PluginIdentifiableCommand{
    method getPlugin (line 29) | public function getPlugin();

FILE: src/pocketmine/command/RemoteConsoleCommandSender.php
  class RemoteConsoleCommandSender (line 27) | class RemoteConsoleCommandSender extends ConsoleCommandSender{
    method sendMessage (line 32) | public function sendMessage($message){
    method getMessage (line 42) | public function getMessage(){
    method getName (line 46) | public function getName() : string{

FILE: src/pocketmine/command/SimpleCommandMap.php
  class SimpleCommandMap (line 80) | class SimpleCommandMap implements CommandMap{
    method __construct (line 95) | public function __construct(Server $server){
    method setDefaultCommands (line 102) | private function setDefaultCommands(){
    method registerAll (line 158) | public function registerAll($fallbackPrefix, array $commands){
    method register (line 164) | public function register($fallbackPrefix, Command $command, $label = n...
    method registerAlias (line 195) | private function registerAlias(Command $command, $isAlias, $fallbackPr...
    method dispatchAdvanced (line 214) | private function dispatchAdvanced(CommandSender $sender, Command $comm...
    method dispatch (line 250) | public function dispatch(CommandSender $sender, $commandLine){
    method clearCommands (line 284) | public function clearCommands(){
    method getCommand (line 292) | public function getCommand($name){
    method getCommands (line 303) | public function getCommands(){
    method registerServerAliases (line 311) | public function registerServerAliases(){

FILE: src/pocketmine/command/defaults/BanCidByNameCommand.php
  class BanCidByNameCommand (line 30) | class BanCidByNameCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/BanCidCommand.php
  class BanCidCommand (line 30) | class BanCidCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/BanCommand.php
  class BanCommand (line 30) | class BanCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/BanIpByNameCommand.php
  class BanIpByNameCommand (line 30) | class BanIpByNameCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/BanIpCommand.php
  class BanIpCommand (line 30) | class BanIpCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...
    method processIPBan (line 74) | private function processIPBan($ip, CommandSender $sender, $reason){

FILE: src/pocketmine/command/defaults/BanListCommand.php
  class BanListCommand (line 29) | class BanListCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/DefaultGamemodeCommand.php
  class DefaultGamemodeCommand (line 29) | class DefaultGamemodeCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/DeopCommand.php
  class DeopCommand (line 30) | class DeopCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/DifficultyCommand.php
  class DifficultyCommand (line 32) | class DifficultyCommand extends VanillaCommand{
    method __construct (line 34) | public function __construct($name){
    method execute (line 43) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/DumpMemoryCommand.php
  class DumpMemoryCommand (line 28) | class DumpMemoryCommand extends VanillaCommand{
    method __construct (line 30) | public function __construct($name){
    method execute (line 39) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/EffectCommand.php
  class EffectCommand (line 31) | class EffectCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/EnchantCommand.php
  class EnchantCommand (line 33) | class EnchantCommand extends VanillaCommand{
    method __construct (line 35) | public function __construct($name){
    method execute (line 44) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/GamemodeCommand.php
  class GamemodeCommand (line 31) | class GamemodeCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 43) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/GarbageCollectorCommand.php
  class GarbageCollectorCommand (line 28) | class GarbageCollectorCommand extends VanillaCommand{
    method __construct (line 30) | public function __construct($name){
    method execute (line 39) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/GiveCommand.php
  class GiveCommand (line 33) | class GiveCommand extends VanillaCommand{
    method __construct (line 35) | public function __construct($name){
    method execute (line 44) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/HelpCommand.php
  class HelpCommand (line 30) | class HelpCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/KickCommand.php
  class KickCommand (line 30) | class KickCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/KillCommand.php
  class KillCommand (line 31) | class KillCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 43) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/ListCommand.php
  class ListCommand (line 29) | class ListCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/MeCommand.php
  class MeCommand (line 29) | class MeCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/OpCommand.php
  class OpCommand (line 30) | class OpCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/PardonCidCommand.php
  class PardonCidCommand (line 29) | class PardonCidCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/PardonCommand.php
  class PardonCommand (line 29) | class PardonCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/PardonIpCommand.php
  class PardonIpCommand (line 29) | class PardonIpCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/ParticleCommand.php
  class ParticleCommand (line 61) | class ParticleCommand extends VanillaCommand{
    method __construct (line 63) | public function __construct($name){
    method execute (line 72) | public function execute(CommandSender $sender, $currentAlias, array $a...
    method getParticle (line 135) | private function getParticle($name, Vector3 $pos, $xd, $yd, $zd, $data){

FILE: src/pocketmine/command/defaults/PluginsCommand.php
  class PluginsCommand (line 28) | class PluginsCommand extends VanillaCommand{
    method __construct (line 30) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...
    method sendPluginList (line 48) | private function sendPluginList(CommandSender $sender){

FILE: src/pocketmine/command/defaults/ReloadCommand.php
  class ReloadCommand (line 29) | class ReloadCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SaveCommand.php
  class SaveCommand (line 29) | class SaveCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SaveOffCommand.php
  class SaveOffCommand (line 29) | class SaveOffCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SaveOnCommand.php
  class SaveOnCommand (line 29) | class SaveOnCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SayCommand.php
  class SayCommand (line 30) | class SayCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SeedCommand.php
  class SeedCommand (line 29) | class SeedCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SetBlockCommand.php
  class SetBlockCommand (line 34) | class SetBlockCommand extends VanillaCommand{
    method __construct (line 36) | public function __construct($name){
    method execute (line 45) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SetWorldSpawnCommand.php
  class SetWorldSpawnCommand (line 31) | class SetWorldSpawnCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 43) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SpawnpointCommand.php
  class SpawnpointCommand (line 31) | class SpawnpointCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/StatusCommand.php
  class StatusCommand (line 29) | class StatusCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/StopCommand.php
  class StopCommand (line 29) | class StopCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 40) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/SummonCommand.php
  class SummonCommand (line 35) | class SummonCommand extends VanillaCommand{
    method __construct (line 37) | public function __construct($name){
    method execute (line 46) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/TeleportCommand.php
  class TeleportCommand (line 31) | class TeleportCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/TellCommand.php
  class TellCommand (line 29) | class TellCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/TimeCommand.php
  class TimeCommand (line 31) | class TimeCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/TimingsCommand.php
  class TimingsCommand (line 29) | class TimingsCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/TransferCommand.php
  class TransferCommand (line 34) | class TransferCommand extends VanillaCommand{
    method __construct (line 36) | public function __construct($name){
    method execute (line 46) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/VanillaCommand.php
  class VanillaCommand (line 27) | abstract class VanillaCommand extends Command{
    method __construct (line 31) | public function __construct($name, $description = "", $usageMessage = ...
    method getInteger (line 35) | protected function getInteger(CommandSender $sender, $value, $min = se...
    method getRelativeDouble (line 47) | protected function getRelativeDouble($original, CommandSender $sender,...

FILE: src/pocketmine/command/defaults/VersionCommand.php
  class VersionCommand (line 30) | class VersionCommand extends VanillaCommand{
    method __construct (line 32) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...
    method describeToSender (line 94) | private function describeToSender(Plugin $plugin, CommandSender $sender){

FILE: src/pocketmine/command/defaults/WeatherCommand.php
  class WeatherCommand (line 31) | class WeatherCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/command/defaults/WhitelistCommand.php
  class WhitelistCommand (line 29) | class WhitelistCommand extends VanillaCommand{
    method __construct (line 31) | public function __construct($name){
    method execute (line 41) | public function execute(CommandSender $sender, $currentAlias, array $a...
    method badPerm (line 112) | private function badPerm(CommandSender $sender, $perm){

FILE: src/pocketmine/command/defaults/XpCommand.php
  class XpCommand (line 31) | class XpCommand extends VanillaCommand{
    method __construct (line 33) | public function __construct($name){
    method execute (line 42) | public function execute(CommandSender $sender, $currentAlias, array $a...

FILE: src/pocketmine/entity/Ageable.php
  type Ageable (line 25) | interface Ageable{
    method isBaby (line 26) | public function isBaby();

FILE: src/pocketmine/entity/Animal.php
  class Animal (line 25) | abstract class Animal extends Creature implements Ageable{
    method isBaby (line 27) | public function isBaby(){

FILE: src/pocketmine/entity/Arrow.php
  class Arrow (line 33) | class Arrow extends Projectile{
    method __construct (line 48) | public function __construct(Chunk $chunk, CompoundTag $nbt, Entity $sh...
    method getPotionId (line 57) | public function getPotionId() : int{
    method onUpdate (line 61) | public function onUpdate($currentTick){
    method isCritical (line 100) | public function isCritical(){
    method spawnTo (line 104) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/Attachable.php
  type Attachable (line 25) | interface Attachable{

FILE: src/pocketmine/entity/Attribute.php
  class Attribute (line 26) | class Attribute{
    method init (line 54) | public static function init(){
    method addAttribute (line 79) | public static function addAttribute($id, $name, $minValue, $maxValue, ...
    method getAttribute (line 92) | public static function getAttribute($id){
    method getAttributeByName (line 101) | public static function getAttributeByName($name){
    method __construct (line 111) | private function __construct($id, $name, $minValue, $maxValue, $defaul...
    method getMinValue (line 122) | public function getMinValue(){
    method setMinValue (line 126) | public function setMinValue($minValue){
    method getMaxValue (line 138) | public function getMaxValue(){
    method setMaxValue (line 142) | public function setMaxValue($maxValue){
    method getDefaultValue (line 154) | public function getDefaultValue(){
    method setDefaultValue (line 158) | public function setDefaultValue($defaultValue){
    method getValue (line 170) | public function getValue(){
    method setValue (line 174) | public function setValue($value, bool $fit = true, bool $shouldSend = ...
    method getName (line 193) | public function getName(){
    method getId (line 197) | public function getId(){
    method isSyncable (line 201) | public function isSyncable(){
    method isDesynchronized (line 205) | public function isDesynchronized() : bool{
    method markSynchronized (line 209) | public function markSynchronized(bool $synced = true){

FILE: src/pocketmine/entity/AttributeMap.php
  class AttributeMap (line 24) | class AttributeMap implements \ArrayAccess{
    method addAttribute (line 28) | public function addAttribute(Attribute $attribute){
    method getAttribute (line 37) | public function getAttribute(int $id){
    method getAll (line 41) | public function getAll(): array{
    method needSend (line 48) | public function needSend() : array{
    method offsetExists (line 54) | public function offsetExists($offset){
    method offsetGet (line 58) | public function offsetGet($offset){
    method offsetSet (line 62) | public function offsetSet($offset, $value){
    method offsetUnset (line 66) | public function offsetUnset($offset){

FILE: src/pocketmine/entity/Bat.php
  class Bat (line 30) | class Bat extends FlyingAnimal{
    method getName (line 43) | public function getName() {
    method initEntity (line 47) | public function initEntity(){
    method __construct (line 52) | public function __construct(Chunk $chunk, CompoundTag $nbt){
    method isResting (line 61) | public function isResting() : int{
    method setResting (line 65) | public function setResting(bool $resting){
    method onUpdate (line 69) | public function onUpdate($currentTick){
    method spawnTo (line 76) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/Blaze.php
  class Blaze (line 30) | class Blaze extends Monster{
    method getName (line 39) | public function getName(){
    method spawnTo (line 43) | public function spawnTo(Player $player){
    method getDrops (line 60) | public function getDrops(){

FILE: src/pocketmine/entity/Boat.php
  class Boat (line 34) | class Boat extends Vehicle{
    method __construct (line 43) | public function __construct(Chunk $chunk, CompoundTag $nbt){
    method getWoodID (line 51) | public function getWoodID() : int{
    method spawnTo (line 55) | public function spawnTo(Player $player){
    method attack (line 73) | public function attack($damage, EntityDamageEvent $source){
    method onUpdate (line 86) | public function onUpdate($currentTick){
    method getDrops (line 128) | public function getDrops(){
    method getSaveId (line 134) | public function getSaveId(){

FILE: src/pocketmine/entity/CaveSpider.php
  class CaveSpider (line 27) | class CaveSpider extends Monster{
    method getName (line 36) | public function getName(){
    method spawnTo (line 40) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/Chicken.php
  class Chicken (line 29) | class Chicken extends Animal{
    method getName (line 38) | public function getName(){
    method spawnTo (line 42) | public function spawnTo(Player $player){
    method getDrops (line 59) | public function getDrops(){

FILE: src/pocketmine/entity/Colorable.php
  type Colorable (line 25) | interface Colorable{

FILE: src/pocketmine/entity/Cow.php
  class Cow (line 30) | class Cow extends Animal{
    method getName (line 39) | public function getName(){
    method spawnTo (line 43) | public function spawnTo(Player $player){
    method getDrops (line 61) | public function getDrops(){

FILE: src/pocketmine/entity/Creature.php
  class Creature (line 28) | abstract class Creature extends Living{
    method onUpdate (line 31) | public function onUpdate($tick){
    method willMove (line 70) | public function willMove($distance = 36){
    method attack (line 77) | public function attack($damage, EntityDamageEvent $source){
    method ifjump (line 93) | public function ifjump(Level $level, Vector3 $v3, $hate = false, $reas...
    method whatBlock (line 208) | public function whatBlock(Level $level, $v3){  //boybook的y轴判断法 核心 什么方块?
    method getMyYaw (line 290) | public function getMyYaw($mx, $mz){  //根据motion计算转向角度
    method getMyPitch (line 326) | public function getMyPitch(Vector3 $from, Vector3 $to){

FILE: src/pocketmine/entity/Creeper.php
  class Creeper (line 30) | class Creeper extends Monster{
    method getName (line 39) | public function getName(){
    method initEntity (line 43) | public function initEntity(){
    method setPowered (line 52) | public function setPowered(bool $powered, Lightning $lightning = null){
    method isPowered (line 66) | public function isPowered() : bool{
    method spawnTo (line 70) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/Damageable.php
  type Damageable (line 25) | interface Damageable{

FILE: src/pocketmine/entity/Dragon.php
  class Dragon (line 8) | class Dragon extends Monster {
    method initEntity (line 13) | public function initEntity(){
    method getName (line 18) | public function getName(){
    method spawnTo (line 22) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/DragonFireBall.php
  class DragonFireBall (line 31) | class DragonFireBall extends Projectile{
    method __construct (line 41) | public function __construct(Chunk $chunk, CompoundTag $nbt, Entity $sh...
    method onUpdate (line 45) | public function onUpdate($currentTick){
    method spawnTo (line 64) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/Effect.php
  class Effect (line 31) | class Effect{
    method init (line 64) | public static function init(){
    method getEffect (line 99) | public static function getEffect($id){
    method getEffectByName (line 106) | public static function getEffectByName($name){
    method __construct (line 130) | public function __construct($id, $name, $r, $g, $b, $isBad = false){
    method getName (line 137) | public function getName(){
    method getId (line 141) | public function getId(){
    method setDuration (line 145) | public function setDuration($ticks){
    method getDuration (line 150) | public function getDuration(){
    method isVisible (line 154) | public function isVisible(){
    method setVisible (line 158) | public function setVisible($bool){
    method getAmplifier (line 166) | public function getAmplifier(){
    method setAmplifier (line 175) | public function setAmplifier(int $amplifier){
    method isAmbient (line 180) | public function isAmbient(){
    method setAmbient (line 184) | public function setAmbient($ambient = true){
    method isBad (line 189) | public function isBad(){
    method canTick (line 193) | public function canTick(){
    method applyEffect (line 231) | public function applyEffect(Entity $entity){
    method getColor (line 286) | public function getColor(){
    method setColor (line 290) | public function setColor($r, $g, $b){
    method add (line 294) | public function add(Entity $entity, $modify = false, Effect $oldEffect...
    method remove (line 337) | public function remove(Entity $entity){

FILE: src/pocketmine/entity/Egg.php
  class Egg (line 29) | class Egg extends Projectile{
    method __construct (line 39) | public function __construct(Chunk $chunk, CompoundTag $nbt, Entity $sh...
    method onUpdate (line 43) | public function onUpdate($currentTick){
    method spawnTo (line 62) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/EnderCrystal.php
  class EnderCrystal (line 28) | class EnderCrystal extends Vehicle{
    method __construct (line 37) | public function __construct(Chunk $chunk, CompoundTag $nbt){
    method spawnTo (line 41) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/EnderPearl.php
  class EnderPearl (line 12) | class EnderPearl extends Projectile{
    method __construct (line 23) | public function __construct(Chunk $chunk, CompoundTag $nbt, Entity $sh...
    method onUpdate (line 27) | public function onUpdate($currentTick){
    method getSpawner (line 47) | public function getSpawner(){
    method setSpawner (line 51) | public function setSpawner(Player $player){
    method close (line 55) | public function close(){
    method spawnTo (line 62) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/Enderman.php
  class Enderman (line 27) | class Enderman extends Monster{
    method getName (line 36) | public function getName(){
    method spawnTo (line 40) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/Entity.php
  class Entity (line 72) | abstract class Entity extends Location implements Metadatable{
    method init (line 167) | public static function init(){
    method __construct (line 337) | public function __construct(Chunk $chunk, CompoundTag $nbt){
    method getDropExpMin (line 416) | public function getDropExpMin() : int{
    method getDropExpMax (line 423) | public function getDropExpMax() : int{
    method getNameTag (line 430) | public function getNameTag(){
    method isNameTagVisible (line 437) | public function isNameTagVisible(){
    method isNameTagAlwaysVisible (line 444) | public function isNameTagAlwaysVisible(){
    method setNameTag (line 452) | public function setNameTag($name){
    method setNameTagVisible (line 459) | public function setNameTagVisible($value = true){
    method setNameTagAlwaysVisible (line 466) | public function setNameTagAlwaysVisible($value = true){
    method isSneaking (line 470) | public function isSneaking(){
    method setSneaking (line 474) | public function setSneaking($value = true){
    method isSprinting (line 478) | public function isSprinting(){
    method setSprinting (line 482) | public function setSprinting($value = true){
    method isGliding (line 490) | public function isGliding(){
    method setGliding (line 494) | public function setGliding($value = true){
    method isImmobile (line 499) | public function isImmobile() : bool{
    method setImmobile (line 503) | public function setImmobile($value = true){
    method getEffects (line 510) | public function getEffects(){
    method removeAllEffects (line 514) | public function removeAllEffects(){
    method removeEffect (line 520) | public function removeEffect($effectId){
    method getEffect (line 538) | public function getEffect($effectId){
    method hasEffect (line 542) | public function hasEffect($effectId){
    method addEffect (line 546) | public function addEffect(Effect $effect){
    method recalculateEffectColor (line 574) | protected function recalculateEffectColor(){
    method createEntity (line 613) | public static function createEntity($type, Chunk $chunk, CompoundTag $...
    method registerEntity (line 622) | public static function registerEntity($className, $force = false){
    method getSaveId (line 644) | public function getSaveId(){
    method saveNBT (line 648) | public function saveNBT(){
    method initEntity (line 701) | protected function initEntity(){
    method addAttributes (line 734) | protected function addAttributes(){
    method getViewers (line 740) | public function getViewers(){
    method spawnTo (line 747) | public function spawnTo(Player $player){
    method sendPotionEffects (line 753) | public function sendPotionEffects(Player $player){
    method sendData (line 771) | public function sendData($player, array $data = null){
    method despawnFrom (line 795) | public function despawnFrom(Player $player){
    method attack (line 810) | public function attack($damage, EntityDamageEvent $source){
    method heal (line 845) | public function heal($amount, EntityRegainHealthEvent $source){
    method getHealth (line 857) | public function getHealth(){
    method isAlive (line 861) | public function isAlive(){
    method setHealth (line 870) | public function setHealth($amount){
    method setLastDamageCause (line 890) | public function setLastDamageCause(EntityDamageEvent $type){
    method getLastDamageCause (line 897) | public function getLastDamageCause(){
    method getAttributeMap (line 901) | public function getAttributeMap(){
    method getMaxHealth (line 908) | public function getMaxHealth(){
    method setMaxHealth (line 915) | public function setMaxHealth($amount){
    method canCollideWith (line 919) | public function canCollideWith(Entity $entity){
    method checkObstruction (line 923) | protected function checkObstruction($x, $y, $z){
    method entityBaseTick (line 1014) | public function entityBaseTick($tickDiff = 1){
    method updateMovement (line 1093) | protected function updateMovement(){
    method addMovement (line 1119) | public function addMovement($x, $y, $z, $yaw, $pitch, $headYaw = null){
    method getDirectionVector (line 1126) | public function getDirectionVector(){
    method getDirectionPlane (line 1135) | public function getDirectionPlane(){
    method onUpdate (line 1139) | public function onUpdate($currentTick){
    method scheduleUpdate (line 1175) | public final function scheduleUpdate(){
    method isOnFire (line 1179) | public function isOnFire(){
    method setOnFire (line 1183) | public function setOnFire($seconds){
    method isFireProof (line 1190) | public function isFireProof() : bool{
    method getDirection (line 1194) | public function getDirection(){
    method extinguish (line 1212) | public function extinguish(){
    method canTriggerWalking (line 1217) | public function canTriggerWalking(){
    method resetFallDistance (line 1221) | public function resetFallDistance(){
    method updateFallState (line 1225) | protected function updateFallState($distanceThisTick, $onGround){
    method getBoundingBox (line 1238) | public function getBoundingBox(){
    method fall (line 1242) | public function fall($fallDistance){
    method handleLavaMovement (line 1264) | public function handleLavaMovement(){ //TODO
    method getEyeHeight (line 1268) | public function getEyeHeight(){
    method moveFlying (line 1272) | public function moveFlying(){ //TODO
    method onCollideWithPlayer (line 1276) | public function onCollideWithPlayer(Human $entityPlayer){
    method switchLevel (line 1280) | protected function switchLevel(Level $targetLevel){
    method getPosition (line 1305) | public function getPosition(){
    method getLocation (line 1309) | public function getLocation(){
    method isInsideOfPortal (line 1313) | public function isInsideOfPortal(){
    method isInsideOfWater (line 1325) | public function isInsideOfWater(){
    method isInsideOfSolid (line 1336) | public function isInsideOfSolid(){
    method isInsideOfFire (line 1347) | public function isInsideOfFire(){
    method fastMove (line 1356) | public function fastMove($dx, $dy, $dz){
    method move (line 1397) | public function move($dx, $dy, $dz){
    method checkGroundState (line 1554) | protected function checkGroundState($movX, $movY, $movZ, $dx, $dy, $dz){
    method getBlocksAround (line 1561) | public function getBlocksAround(){
    method checkBlockCollision (line 1587) | protected function checkBlockCollision(){
    method setPositionAndRotation (line 1616) | public function setPositionAndRotation(Vector3 $pos, $yaw, $pitch){
    method setRotation (line 1626) | public function setRotation($yaw, $pitch){
    method checkChunks (line 1632) | protected function checkChunks(){
    method setLocation (line 1661) | public function setLocation(Location $pos){
    method setPosition (line 1671) | public function setPosition(Vector3 $pos){
    method getMotion (line 1694) | public function getMotion(){
    method setMotion (line 1698) | public function setMotion(Vector3 $motion){
    method isOnGround (line 1717) | public function isOnGround(){
    method kill (line 1721) | public function kill(){
    method teleport (line 1739) | public function teleport(Vector3 $pos, $yaw = null, $pitch = null){
    method getId (line 1773) | public function getId(){
    method respawnToAll (line 1777) | public function respawnToAll(){
    method spawnToAll (line 1784) | public function spawnToAll(){
    method despawnFromAll (line 1795) | public function despawnFromAll(){
    method close (line 1801) | public function close(){
    method setDataProperty (line 1832) | public function setDataProperty($id, $type, $value){
    method linkEntity (line 1844) | public function linkEntity(Entity $entity){
    method sendLinkedData (line 1848) | public function sendLinkedData(){
    method setLinked (line 1854) | public function setLinked($type = 0, Entity $entity){
    method getLinkedEntity (line 1920) | public function getLinkedEntity(){
    method getLinkedType (line 1924) | public function getLinkedType(){
    method getDataProperty (line 1933) | public function getDataProperty($id){
    method getDataPropertyType (line 1942) | public function getDataPropertyType($id){
    method setDataFlag (line 1952) | public function setDataFlag($propertyId, $id, $value = true, $type = s...
    method getDataFlag (line 1966) | public function getDataFlag($propertyId, $id){
    method __destruct (line 1970) | public function __destruct(){
    method setMetadata (line 1974) | public function setMetadata($metadataKey, MetadataValue $metadataValue){
    method getMetadata (line 1978) | public function getMetadata($metadataKey){
    method hasMetadata (line 1982) | public function hasMetadata($metadataKey){
    method removeMetadata (line 1986) | public function removeMetadata($metadataKey, Plugin $plugin){
    method __toString (line 1990) | public function __toString(){

FILE: src/pocketmine/entity/Explosive.php
  type Explosive (line 25) | interface Explosive{
    method explode (line 27) | public function explode();

FILE: src/pocketmine/entity/FallingSand.php
  class FallingSand (line 40) | class FallingSand extends Entity{
    method initEntity (line 56) | protected function initEntity(){
    method canCollideWith (line 77) | public function canCollideWith(Entity $entity){
    method attack (line 81) | public function attack($damage, EntityDamageEvent $source){
    method onUpdate (line 87) | public function onUpdate($currentTick){
    method getBlock (line 172) | public function getBlock(){
    method getDamage (line 176) | public function getDamage(){
    method saveNBT (line 180) | public function saveNBT(){
    method spawnTo (line 185) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/FishingHook.php
  class FishingHook (line 33) | class FishingHook extends Projectile{
    method initEntity (line 48) | public function initEntity(){
    method __construct (line 58) | public function __construct(Chunk $chunk, CompoundTag $nbt, Entity $sh...
    method setData (line 62) | public function setData($id){
    method getData (line 66) | public function getData(){
    method onUpdate (line 70) | public function onUpdate($currentTick){
    method fishBites (line 111) | public function fishBites(){
    method attractFish (line 120) | public function attractFish(){
    method reelLine (line 129) | public function reelLine(){
    method spawnTo (line 156) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/FlyingAnimal.php
  class FlyingAnimal (line 27) | abstract class FlyingAnimal extends Creature implements Ageable{
    method onUpdate (line 40) | public function onUpdate($currentTick){
    method generateRandomDirection (line 114) | private function generateRandomDirection(){
    method initEntity (line 118) | public function initEntity(){
    method isBaby (line 123) | public function isBaby(){
    method attack (line 127) | public function attack($damage, EntityDamageEvent $source){

FILE: src/pocketmine/entity/Ghast.php
  class Ghast (line 27) | class Ghast extends FlyingAnimal{
    method getName (line 34) | public function getName(){
    method initEntity (line 38) | public function initEntity(){
    method spawnTo (line 43) | public function spawnTo(Player $player){

FILE: src/pocketmine/entity/Hanging.php
  class Hanging (line 25) | abstract class Hanging extends Entity implements Attachable{

FILE: src/pocketmine/entity/Human.php
  class Human (line 50) | class Human extends Creature implements ProjectileSource, InventoryHolder{
    method getSkinData (line 89) | public function getSkinData(){
    method getSkinId (line 93) | public function getSkinId(){
    method getUniqueId (line 100) | public function getUniqueId(){
    method getRawUniqueId (line 107) | public function getRawUniqueId(){
    method setSkin (line 115) | public function setSkin($str, $skinId){
    method getFood (line 120) | publ
Condensed preview — 1161 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,242K chars).
[
  {
    "path": ".gitignore",
    "chars": 83,
    "preview": "*.iml\n.idea/misc.xml\n*.xml\n.buildpath\n.project\n.settings/org.eclipse.php.core.prefs"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 10364,
    "preview": "![](http://cdn.pocketmine.net/img/PocketMine-MP-h.png)\n\n# PocketMine-MP Contribution Guidelines\n\nYou must follow these g"
  },
  {
    "path": "LICENSE",
    "chars": 7650,
    "preview": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007"
  },
  {
    "path": "README.md",
    "chars": 57,
    "preview": "##Elywing has been discontinued. Thanks for everything !\n"
  },
  {
    "path": "src/pocketmine/Achievement.php",
    "chars": 2949,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/Collectable.php",
    "chars": 963,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/CompatibleClassLoader.php",
    "chars": 787,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/CrashDump.php",
    "chars": 8652,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/IPlayer.php",
    "chars": 1467,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/MemoryManager.php",
    "chars": 12196,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/OfflinePlayer.php",
    "chars": 3517,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/Player.php",
    "chars": 134818,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/PocketMine.php",
    "chars": 14995,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/Server.php",
    "chars": 78911,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/Thread.php",
    "chars": 2262,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/ThreadManager.php",
    "chars": 1571,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/Worker.php",
    "chars": 2360,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/AcaciaDoor.php",
    "chars": 1271,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/AcaciaDoorBlock.php",
    "chars": 961,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/AcaciaWoodStairs.php",
    "chars": 894,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/ActivatorRail.php",
    "chars": 976,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/ActiveRedstoneLamp.php",
    "chars": 3241,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Air.php",
    "chars": 1438,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Anvil.php",
    "chars": 2566,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Beacon.php",
    "chars": 1328,
    "preview": "<?php\n\n/*\n *\n *  ____          \n * |  __|_              _\n * | |__| |      _    _(_)_ __   ___\n * |  __| |_   _| |  | | "
  },
  {
    "path": "src/pocketmine/block/Bed.php",
    "chars": 4513,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Bedrock.php",
    "chars": 1092,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Beetroot.php",
    "chars": 1231,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/BirchDoor.php",
    "chars": 1267,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/BirchDoorBlock.php",
    "chars": 958,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/BirchWoodStairs.php",
    "chars": 891,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Block.php",
    "chars": 24424,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/BlockIds.php",
    "chars": 8626,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Bookshelf.php",
    "chars": 1272,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/BrewingStand.php",
    "chars": 3353,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/BrickStairs.php",
    "chars": 1134,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Bricks.php",
    "chars": 1276,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/BrownMushroom.php",
    "chars": 1654,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/BrownMushroomBlock.php",
    "chars": 1463,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/BurningFurnace.php",
    "chars": 3276,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Cactus.php",
    "chars": 3612,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Cake.php",
    "chars": 3200,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Carpet.php",
    "chars": 2273,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Carrot.php",
    "chars": 1351,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Cauldron.php",
    "chars": 10292,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/CauldronBlock.php",
    "chars": 953,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Chest.php",
    "chars": 4507,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/ChorusPlant.php",
    "chars": 1514,
    "preview": "<?php\r\n\r\n/*\r\n *\r\n *  ____          \r\n * |  __|_              _\r\n * | |__| |      _    _(_)_ __   ___\r\n * |  __| |_   _| "
  },
  {
    "path": "src/pocketmine/block/Clay.php",
    "chars": 1157,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Coal.php",
    "chars": 1336,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/CoalOre.php",
    "chars": 1612,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Cobblestone.php",
    "chars": 1233,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/CobblestoneStairs.php",
    "chars": 1101,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Cobweb.php",
    "chars": 1654,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/CocoaBlock.php",
    "chars": 3848,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/ComparatorBlock.php",
    "chars": 959,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Crops.php",
    "chars": 2510,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Dandelion.php",
    "chars": 1542,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DarkOakDoor.php",
    "chars": 1278,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DarkOakDoorBlock.php",
    "chars": 966,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DarkOakWoodStairs.php",
    "chars": 899,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DaylightDetector.php",
    "chars": 2488,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/DaylightDetectorInverted.php",
    "chars": 1051,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/DaylightSensor.php",
    "chars": 944,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/DaylightSensorInverted.php",
    "chars": 982,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DeadBush.php",
    "chars": 1846,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DetectorRail.php",
    "chars": 972,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/Diamond.php",
    "chars": 1235,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DiamondOre.php",
    "chars": 1626,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Dirt.php",
    "chars": 1367,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Dispenser.php",
    "chars": 3484,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Door.php",
    "chars": 6983,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DoublePlant.php",
    "chars": 3075,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DoubleRedSandstoneSlab.php",
    "chars": 1080,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/DoubleSlab.php",
    "chars": 1495,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DoubleWoodSlab.php",
    "chars": 1419,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/DragonEgg.php",
    "chars": 1025,
    "preview": "<?php\n/*\n *\n *  ____          \n * |  __|_              _\n * | |__| |      _    _(_)_ __   ___\n * |  __| |_   _| |  | | |"
  },
  {
    "path": "src/pocketmine/block/Dropper.php",
    "chars": 3484,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/ElectricalAppliance.php",
    "chars": 738,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Emerald.php",
    "chars": 1235,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/EmeraldOre.php",
    "chars": 1622,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/EnchantingTable.php",
    "chars": 3748,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/EndPortalFrame.php",
    "chars": 1473,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/EndRod.php",
    "chars": 1827,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/EndStone.php",
    "chars": 1042,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/EndStoneBricks.php",
    "chars": 1296,
    "preview": "<?php\r\n\r\n/*\r\n *\r\n *  ____            _        _   __  __ _                  __  __ ____  \r\n * |  _ \\ ___   ___| | _____|"
  },
  {
    "path": "src/pocketmine/block/EnderChest.php",
    "chars": 3390,
    "preview": "<?php\n\n/*\n *\n *    _______                                _\n *   |__   __|                              | |\n *      | | "
  },
  {
    "path": "src/pocketmine/block/Fallable.php",
    "chars": 1997,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Farmland.php",
    "chars": 1401,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Fence.php",
    "chars": 2323,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/FenceGate.php",
    "chars": 2689,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/FenceGateAcacia.php",
    "chars": 891,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/FenceGateBirch.php",
    "chars": 888,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/FenceGateDarkOak.php",
    "chars": 896,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/FenceGateJungle.php",
    "chars": 891,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/FenceGateSpruce.php",
    "chars": 891,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Fire.php",
    "chars": 7603,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Flowable.php",
    "chars": 1048,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Flower.php",
    "chars": 2425,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/FlowerPot.php",
    "chars": 3553,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Furnace.php",
    "chars": 3429,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Glass.php",
    "chars": 1216,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/GlassPane.php",
    "chars": 1229,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/GlowingObsidian.php",
    "chars": 1027,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/GlowingRedstoneOre.php",
    "chars": 1310,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Glowstone.php",
    "chars": 1707,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Gold.php",
    "chars": 1223,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/GoldOre.php",
    "chars": 1220,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Grass.php",
    "chars": 3212,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/GrassPath.php",
    "chars": 1880,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Gravel.php",
    "chars": 1659,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/HardenedClay.php",
    "chars": 1057,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/HayBale.php",
    "chars": 1582,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/HeavyWeightedPressurePlate.php",
    "chars": 890,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Hopper.php",
    "chars": 2988,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/HopperBlock.php",
    "chars": 947,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Ice.php",
    "chars": 1495,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/InactiveRedstoneLamp.php",
    "chars": 1303,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/InvisibleBedrock.php",
    "chars": 1128,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Iron.php",
    "chars": 1223,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/IronBars.php",
    "chars": 1226,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/IronDoor.php",
    "chars": 1452,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/IronOre.php",
    "chars": 1220,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/IronTrapdoor.php",
    "chars": 941,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/ItemFrame.php",
    "chars": 3702,
    "preview": "<?php\n\n/*\n *\n *  ____\t\t\t_\t\t_   __  __ _\t\t\t\t  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\/  (_)_ __   ___\t  |  \\/  |"
  },
  {
    "path": "src/pocketmine/block/ItemFrameBlock.php",
    "chars": 958,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/JungleDoor.php",
    "chars": 1271,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/JungleDoorBlock.php",
    "chars": 961,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/JungleWoodStairs.php",
    "chars": 894,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Ladder.php",
    "chars": 3294,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Lapis.php",
    "chars": 1235,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/LapisOre.php",
    "chars": 1634,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Lava.php",
    "chars": 2132,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Leaves.php",
    "chars": 5618,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Leaves2.php",
    "chars": 1776,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Lever.php",
    "chars": 3904,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/LightWeightedPressurePlate.php",
    "chars": 890,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Liquid.php",
    "chars": 13621,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/LitPumpkin.php",
    "chars": 4347,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/LitRedstoneLamp.php",
    "chars": 949,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/LitRedstoneTorch.php",
    "chars": 948,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/Melon.php",
    "chars": 1557,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/MelonStem.php",
    "chars": 2474,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/MobHead.php",
    "chars": 2922,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/MonsterEggBlock.php",
    "chars": 961,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/MonsterSpawner.php",
    "chars": 2456,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____ \n * |  _ \\ ___   ___| | _____| |_|  "
  },
  {
    "path": "src/pocketmine/block/MossStone.php",
    "chars": 1269,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Mycelium.php",
    "chars": 2089,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/NetherBrick.php",
    "chars": 1236,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/NetherBrickFence.php",
    "chars": 1450,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/NetherBrickStairs.php",
    "chars": 1105,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/NetherQuartzOre.php",
    "chars": 1679,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/NetherReactor.php",
    "chars": 1010,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/NetherWart.php",
    "chars": 2494,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/NetherWartBlock.php",
    "chars": 2499,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Netherrack.php",
    "chars": 1242,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Noteblock.php",
    "chars": 4439,
    "preview": "<?php\nnamespace pocketmine\\block;\n\nuse pocketmine\\item\\Tool;\nuse pocketmine\\item\\Item;\nuse pocketmine\\level\\sound\\Notebl"
  },
  {
    "path": "src/pocketmine/block/Obsidian.php",
    "chars": 4644,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/PackedIce.php",
    "chars": 1286,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Piston.php",
    "chars": 924,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/PistonHead.php",
    "chars": 944,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Planks.php",
    "chars": 1631,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Podzol.php",
    "chars": 1386,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Portal.php",
    "chars": 4735,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/PortalBlock.php",
    "chars": 947,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Potato.php",
    "chars": 1352,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/PoweredComparatorBlock.php",
    "chars": 982,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/PoweredRail.php",
    "chars": 5131,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/PoweredRepeater.php",
    "chars": 4319,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/PoweredRepeaterBlock.php",
    "chars": 976,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/PressurePlate.php",
    "chars": 3316,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Prismarine.php",
    "chars": 1483,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/Pumpkin.php",
    "chars": 4279,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/PumpkinStem.php",
    "chars": 2471,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/PurpurBlock.php",
    "chars": 1868,
    "preview": "<?php\r\n\r\n/*\r\n *\r\n *  ____          \r\n * |  __|_              _\r\n * | |__| |      _    _(_)_ __   ___\r\n * |  __| |_   _| "
  },
  {
    "path": "src/pocketmine/block/PurpurStairs.php",
    "chars": 987,
    "preview": "<?php\n/*\n *\n *  ____          \n * |  __|_              _\n * | |__| |      _    _(_)_ __   ___\n * |  __| |_   _| |  | | |"
  },
  {
    "path": "src/pocketmine/block/Quartz.php",
    "chars": 2036,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/QuartzStairs.php",
    "chars": 1088,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Rail.php",
    "chars": 6309,
    "preview": "<?php\n\n/**\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / /"
  },
  {
    "path": "src/pocketmine/block/RedMushroom.php",
    "chars": 1513,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/RedMushroomBlock.php",
    "chars": 1466,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/RedSandstone.php",
    "chars": 982,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/RedSandstoneSlab.php",
    "chars": 2391,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/RedSandstoneStairs.php",
    "chars": 869,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Redstone.php",
    "chars": 1498,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/RedstoneLamp.php",
    "chars": 938,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/RedstoneOre.php",
    "chars": 1892,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/RedstoneSource.php",
    "chars": 7407,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/RedstoneTorch.php",
    "chars": 6765,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/RedstoneWire.php",
    "chars": 12543,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/RepeaterBlock.php",
    "chars": 953,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Sand.php",
    "chars": 1157,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Sandstone.php",
    "chars": 1462,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/SandstoneStairs.php",
    "chars": 1097,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Sapling.php",
    "chars": 3034,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/SeaLantern.php",
    "chars": 1194,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____\n * |  _ \\ ___   ___| | _____| |_|  \\"
  },
  {
    "path": "src/pocketmine/block/SignPost.php",
    "chars": 2220,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/SkullBlock.php",
    "chars": 3633,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  },
  {
    "path": "src/pocketmine/block/Slab.php",
    "chars": 4174,
    "preview": "<?php\n\n/*\n *\n *  ____            _        _   __  __ _                  __  __ ____  \n * |  _ \\ ___   ___| | _____| |_| "
  },
  {
    "path": "src/pocketmine/block/Slab2.php",
    "chars": 2507,
    "preview": "<?php\n\n/*\n *\n *  _____   _____   __   _   _   _____  __    __  _____\n * /  ___| | ____| |  \\ | | | | /  ___/ \\ \\  / / / "
  }
]

// ... and 961 more files (download for full content)

About this extraction

This page contains the full source code of the H4PM/Elywing GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1161 files (3.6 MB), approximately 994.3k tokens, and a symbol index with 6922 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!