PocketMine-MP, nơi tôi bắt đầu với code.

Trước khi có hàng đống repo, mấy org GitHub và web cá nhân này, đã có một chiếc điện thoại Samsung treo server Minecraft Bedrock và một đứa nhỏ ngồi sửa plugin vì không chịu để server chạy y như người khác.

Nếu đọc web này đủ lâu, sẽ thấy PocketMine-MP xuất hiện ở khắp nơi. Trong trang giới thiệu. Trong góc GitHub. Trong mấy org như NhanAZ-Plugins, NhanAZ-Libraries, pm-pl, PMMPVN. Trong câu chuyện về Minecraft, open source, lưu trữ tài nguyên cộng đồng và cả mấy project nhỏ mình vẫn làm cho vui.

Lý do đơn giản thôi. PocketMine-MP gần như là cái gốc của mọi thứ liên quan đến code của mình.

Mình chơi Minecraft trước. Chơi xong mới tò mò mở server. Hồi đó không có gì sang. Mình từng host server trên điện thoại Samsung của mẹ, treo máy đó như một cái server mini trong nhà. Sau đó mình đi làm staff ở vài server, nhìn người ta vận hành cộng đồng, nhìn plugin chạy, nhìn lỗi hiện trong console, rồi tự hỏi mấy thứ này thật ra được làm như thế nào.

Từ đó mới có chuyện Việt hóa plugin, sửa config, đổi vài dòng trong plugin.yml, chỉnh author theo kiểu rất non tay ngày xưa, rồi dần dần biết mở file PHP ra đọc. Không phải điều gì cũng đáng tự hào, nhưng nó thật. Có những trò vụng về hồi nhỏ lại là cánh cửa đầu tiên để mình hiểu tác quyền, hiểu code của người khác, rồi hiểu vì sao tự viết được một thứ đàng hoàng vẫn sướng hơn sửa tên trong file của người ta.

Đến năm lớp 9, mình gần như đã xác định sẽ đi theo Công nghệ thông tin. Không phải vì một bài hướng nghiệp nào đó thuyết phục. Mình chọn vì mấy server Minecraft Bedrock, mấy plugin PocketMine-MP và cảm giác rất đã khi sửa một lỗi xong server chịu chạy.

PocketMine-MP với mình không chỉ là phần mềm server. Nó là điểm bắt đầu của thói quen tự mở thứ ra xem bên trong có gì.

PocketMine-MP là gì?

PocketMine-MP là phần mềm server mã nguồn mở cho Minecraft Bedrock Edition. Nó được viết chủ yếu bằng PHP, có thêm một số phần bằng C và C++. Repo chính mô tả nó là server software được xây từ đầu cho Bedrock, không phải bản chỉnh sửa của server chính thức từ Mojang.

Nói dễ hiểu hơn, Minecraft Bedrock client vẫn là Minecraft Bedrock. Nhưng thay vì kết nối vào Bedrock Dedicated Server của Mojang, người chơi kết nối vào một server do PocketMine-MP tự triển khai. PMMP tự xử lý network, world, player, command, event, item, block, entity và API cho plugin.

Đây cũng là lý do PMMP không phải server vanilla. Nó rất mạnh khi muốn làm server tùy biến, minigame, lobby, rank, coin, form, kit, quest, hệ thống riêng và mấy thứ chủ server nghĩ ra lúc đáng lẽ nên đi ngủ. Nhưng nếu muốn một server sinh tồn giống Bedrock gốc nhất có thể, PMMP không phải con đường dễ chịu nhất.

README của PMMP nói khá thẳng. Nó không có nhiều thứ của vanilla game, như world generation kiểu vanilla, redstone, mob AI và nhiều cơ chế gameplay khác. Một phần có thể bù bằng plugin, nhưng plugin không biến PMMP thành server Mojang.

Vì sao PocketMine-MP lại dùng PHP?

PHP nghe hơi lệch tông nếu đặt cạnh game server. Nhưng chính cái lệch đó lại làm PMMP dễ bén duyên với một thế hệ chủ server nhỏ. Cài server, tải plugin, mở file, sửa vài dòng, reload, nhìn console mắng, sửa tiếp. Vòng lặp đó rất nhanh.

Về kỹ thuật, PMMP không chỉ là một file PHP chạy lỏng lẻo. Nó có runtime PHP riêng, có server loop, có hệ event, command map, permission, scheduler, world provider, network layer, async task và hệ API để plugin móc vào. Plugin thường được đóng thành file phar, khai báo thông tin trong plugin.yml, rồi được server load khi khởi động.

Plugin dev thường chạm vào các thứ như onEnable(), listener, event priority, command, config, task lặp, lưu dữ liệu người chơi, gửi form, thao tác world, item và inventory. Người mới có thể bắt đầu bằng một event rất nhỏ. Người làm server nghiêm túc thì sớm muộn cũng gặp tick, bộ nhớ, dữ liệu bất đồng bộ, cache và chuyện plugin nào đó làm server nghẹt thở.

PMMP cũng dùng thread, nhưng theo cách rất dè chừng vì PHP vốn không sinh ra để chia sẻ dữ liệu giữa nhiều thread. Tài liệu của PMMP nói rõ, phần lớn cấu trúc dữ liệu trong PHP phải được copy khi đi qua thread. Vì vậy thread thường chỉ hợp cho những việc như world generation, lighting, network compression, vài hệ thống network nội bộ và một số request cURL. Đưa mọi thứ qua thread không tự nhiên làm server nhanh hơn. Đôi khi nó chỉ làm lỗi khó hiểu hơn.

Phần network mới là chỗ nhiều mồ hôi

Bedrock dùng UDP và lớp giao thức liên quan RakNet. Trong hệ PMMP có RakLib để phục vụ phần RakNet tối thiểu cần cho server Pocket Edition và Bedrock chạy được. Lên trên nữa là BedrockProtocol, thư viện triển khai packet của Minecraft Bedrock bằng PHP.

Nghe đơn giản, nhưng mỗi lần Bedrock đổi protocol là server phải hiểu lại cách client nói chuyện. Packet đổi, field đổi, thứ tự đổi, behaviour đổi. Có khi đổi nhỏ, có khi đổi như muốn nhắc mọi người rằng Minecraft Bedrock không sống để làm plugin dev vui.

Trong code PMMP, namespace pocketmine\network\mcpe được cảnh báo là internal. Nó không được bảo đảm bởi hệ API version. Plugin nào chạm sâu vào đó thì phải chấp nhận một ngày đẹp trời update xong là gãy. Đây là ranh giới rất quan trọng giữa “dùng API” và “đụng vào ruột server”.

Plugin API là lý do PMMP sống lâu

Nếu chỉ chạy server rỗng, PMMP không hấp dẫn đến vậy. Cái làm nó sống dai là plugin API và cộng đồng quanh plugin.

Plugin có thể bắt sự kiện người chơi vào server, chat, tương tác block, chết, hồi sinh, chạy command, đổi permission, thao tác inventory, đổi item, gửi form, chạy task theo tick, lưu dữ liệu và nối qua web hoặc bot nếu dev đủ cẩn thận. Từ đó một server bình thường có thể thành lobby, prison, skyblock, faction, minigame, survival có luật riêng hoặc một mớ thử nghiệm rất riêng của từng cộng đồng.

Poggit là mảnh quan trọng trong hệ đó. Với người dùng, Poggit là chỗ tìm và tải plugin. Với dev, Poggit là hệ build từ GitHub, tạo phar, kiểm tra một số thứ và phát hành plugin theo cách đỡ thủ công hơn. Virion thì giống các thư viện nhỏ cho plugin, được đóng kèm khi build để tái sử dụng code.

DevTools cũng là thứ gần như ai từng viết plugin đều gặp. Nó giúp tạo khung plugin, load plugin dạng folder khi đang dev, build phar và làm vài việc tiện ích. ExamplePlugin thì giống một bài mẫu để người mới nhìn vào thấy plugin hiện đại nên bắt đầu từ đâu.

Một chút lịch sử của PocketMine và PMMP

PocketMine-MP ban đầu gắn với Shoghi Cervantes, hay shoghicp. Nó xuất hiện từ thời Minecraft Pocket Edition còn là một thế giới khác rất nhiều so với Bedrock bây giờ. Lúc đó nhu cầu rất rõ. Người ta muốn có server riêng, muốn plugin, muốn tùy biến và muốn tự vận hành cộng đồng của mình.

Cuối năm 2015, theo tài liệu chính thức của PMMP, Shoghi phải dừng phát triển PocketMine-MP vì xung đột với công việc ở Mojang. Vấn đề không chỉ là một dev dừng code. Hạ tầng cũ như GitHub organization, forum, website và nhiều thứ khác nằm trong tay Shoghi. Khi ông không còn liên lạc đều, phần còn lại của team không thể duy trì mọi thứ như trước.

Tháng 09.2016, một nhóm thành viên cũ của PocketMine cùng Dylan, tức dktapps, lập tổ chức PMMP để tiếp tục. Đây là đoạn “PMMP” trở thành cái tên riêng, không chỉ là cách viết tắt lỏng lẻo. Họ tạo GitHub organization mới, forum mới, website mới và dần biến pmmp.io thành nhà mới của dự án.

Năm 2017, Shoghi công nhận PMMP như người kế nhiệm PocketMine và chuyển hướng nhiều phần của pocketmine.net sang pmmp.io. Đến lúc đó, PMMP đã có lịch sử riêng đủ dài nên team chọn giữ tổ chức PMMP thay vì quay lại dùng organization PocketMine cũ.

Đây là một chi tiết mình thấy rất đúng với tinh thần open source. Một dự án không chỉ là code. Nó còn là hạ tầng, quyền truy cập, người review, forum, domain, ký ức cộng đồng và niềm tin rằng ngày mai vẫn có ai đó đứng ra sửa khi game update.

Thời Dylan gánh dự án

Nếu Shoghi là cái tên gắn với PocketMine đời đầu, thì Dylan, hay dktapps, là cái tên không thể bỏ qua của PMMP hiện đại. Dấu vết trên GitHub rất rõ. Dylan là contributor lớn nhất của repo PMMP, đứng trên cả shoghicp về số commit trong repo hiện tại.

Dylan không chỉ viết code. Anh giữ nhịp dự án, review, thiết kế API, xử lý update Bedrock, giữ tiêu chuẩn code, quản lý community và làm rất nhiều việc không mấy ai thấy. Những việc đó không hào nhoáng, nhưng nếu thiếu thì dự án mã nguồn mở rất dễ thành kho code đẹp nằm im.

Tháng 03.2024, Dylan mở issue “I'm retiring”. Bài đó khá dài và khá thật. Anh nói sẽ rời vai trò ở PocketMine-MP, rời khỏi Minecraft, và tương lai dự án không chắc chắn. Anh cũng nói không thấy có một người nào sẽ thay mình làm “benevolent dictator”. Nếu PMMP sống tiếp, nó sẽ phải sống bằng effort của cả team.

Trong bài đó, Dylan nhắc một số người được cấp quyền để bảo trì các update game trong tương lai, gồm IvanCraft623, ShockedPlot7560, TobiasGrether, dries-c và TwistedAsylumMC. Đọc đoạn này sẽ hiểu vì sao cộng đồng có cảm giác PMMP hiện tại hẹp hơn, chậm hơn và ít “một người gánh hết” hơn trước.

PMMP hiện tại ra sao?

Nhìn theo nguồn công khai ngày 30.06.2026, PocketMine-MP vẫn sống. Bản mới nhất mình kiểm tra là 5.44.2, đi với Minecraft Bedrock 1.26.30. Repo vẫn có commit gần đây, vẫn có issue, vẫn có pull request mở, docs vẫn còn và API docs vẫn được sinh.

Nhưng nói “vẫn sống” không có nghĩa là “năng lượng như thời trước”. Dự án này đang ở trạng thái trưởng thành hơn, nặng hơn và khó thay đổi hơn. Nó không còn là mảnh đất ai cũng có thể ném một ý tưởng lớn vào rồi mong được merge nhanh. Core đã trở thành nền cho rất nhiều server, nên mỗi thay đổi đều kéo theo trách nhiệm tương thích, review và bảo trì.

Về chuyện PR, tài liệu CONTRIBUTING hiện tại vẫn ghi PocketMine-MP nhận code qua GitHub Pull Request. PR nhỏ có thể gửi trực tiếp. Thay đổi lớn nên có Change Proposal trước. Review sẽ do maintainer làm khi họ có thời gian, và tài liệu cũng nói thẳng là có thể phải chờ lâu.

Nên nếu ai nói “PMMP bây giờ khó được nhận PR”, mình hiểu cảm giác đó. Nhưng mình sẽ không viết thành “dự án đóng PR” vì nguồn chính thức không nói vậy. Cách nói công bằng hơn là PMMP vẫn nhận đóng góp, nhưng cánh cửa vào core hẹp, tiêu chuẩn cao, người review ít và các thay đổi lớn cần đi qua quy trình rõ hơn.

Vì sao PMMP xuất hiện nhiều trên web này?

Vì gần như mọi nhánh mình làm sau này đều mọc ra từ nó.

NhanAZ-Plugins là nơi mình giữ plugin PocketMine-MP tự viết hoặc từng sửa. NhanAZ-Libraries là nơi giữ virion và mấy thư viện nhỏ. pm-pl sinh ra từ nỗi sợ plugin cộng đồng biến mất, tác giả xóa repo, Poggit sập hoặc một link cũ không còn mở được. PMMPVN là mảnh ký ức của cộng đồng PocketMine-MP Việt Nam mà mình lập từ năm 2019.

Ngay cả mấy web tool và project vibe-code sau này cũng có bóng của PMMP. glyph là một ví dụ. Nó liên quan Minecraft Bedrock, resource pack, custom emoji và nhu cầu rất thật của dev server. Mình làm tool đó cũng vì cùng một nỗi sợ cũ. Một ngày nào đó tài nguyên biến mất thì sao?

Thói quen lưu repo, fork, archive, viết tool, làm web tĩnh, gom tài liệu, để lại ghi chú, tất cả đều có gốc từ thời mình mày mò server. Cái cảm giác “nếu không giữ lại thì nó sẽ mất” đi theo mình từ PMMP tới GitHub, tới open source và tới chính web cá nhân này.

Cái điện thoại Samsung và con đường dài hơn mình nghĩ

Nhìn lại thì hơi buồn cười. Một đứa nhỏ chơi Minecraft, xin hoặc mượn điện thoại Samsung của mẹ để treo server, đi làm staff, học cách nói chuyện với người chơi, học cách xử lý drama server, học cách backup world, học cách cài plugin, rồi học cách sửa plugin.

Ban đầu mình không gọi đó là học lập trình. Mình chỉ muốn server chạy theo ý mình. Muốn dòng chữ tiếng Anh thành tiếng Việt. Muốn plugin không lỗi. Muốn command khác đi một chút. Muốn server của mình có cái gì đó riêng. Vậy thôi.

Nhưng chính mấy nhu cầu nhỏ đó mới làm mình chịu học. Không phải học để thi. Học vì nếu không học thì server không chạy. Học vì nếu không hiểu code thì chỉ biết chờ người khác sửa. Học vì sau mỗi lần console đỏ, mình muốn lần sau bớt bất lực hơn.

Đến khi chọn ngành, mình đã có câu trả lời từ trước. Công nghệ thông tin không xuất hiện như một lựa chọn lạ. Nó giống đường đi đã âm thầm mở sẵn từ mấy năm trước, bắt đầu bằng Minecraft, server, plugin và một chiếc điện thoại treo cả đêm.

PMMP không hoàn hảo, nhưng nó đủ mở

PocketMine-MP có nhiều giới hạn. Nó không phải vanilla. Nó có khoảng trống gameplay. Plugin có thể lỗi thời rất nhanh. API major đổi là cả đống plugin phải sửa. Chạm vào internal network là tự ký giấy nhận rủi ro. Cộng đồng cũng có lúc ồn, lúc chán, lúc tan.

Nhưng PMMP đủ mở để một người mới có thể bước vào. Đủ mở để đọc code. Đủ mở để viết plugin đầu tiên. Đủ mở để thấy server không phải phép màu. Đủ mở để một đứa từng treo server trên điện thoại hiểu rằng thế giới phần mềm được tạo ra bởi người thật, với bug thật, giới hạn thật và những đêm debug rất thật.

Vậy nên nếu hỏi vì sao PocketMine-MP xuất hiện nhiều ở đây, câu trả lời là vì mình không muốn cắt mất phần gốc. Nhiều thứ mình làm bây giờ trông có vẻ là web, GitHub, open source hay AI, nhưng đường dây cũ vẫn nằm đó. Nó bắt đầu từ Minecraft Bedrock. Rồi PocketMine-MP. Rồi plugin. Rồi code.

Đọc tiếp từ nguồn gốc

- NhanAZ - 30.06.2026