🚀 MCPy: 高性能Minecraftサーバーエンジン
MCPy は、Python、Cython、高度な科学計算ライブラリによって駆動される次世代の超最適化Minecraftサーバーエンジンです。当プロジェクトの使命は、卓越したパフォーマンスと柔軟性を提供し、Minecraftサーバー開発をアクセスしやすく、将来に備えたものにすることです。

⚠️ 重要提示
MCPyは現在積極的に開発中であり、まだ機能が完全ではありません。コードベースには既知のエラーが含まれており、不安定です。私たちの目標をより早く達成するために、バグレポートと貢献を歓迎します!
🚀 クイックスタート
サーバーの実行
setup.bat run
./setup.sh run
python -m mcpy.server
python -m mcpy.server --config custom_config.toml --world my_world
python -m mcpy.server --performance-mode --max-players 100
python -m mcpy.server --debug --log-level debug
コマンドラインオプション
オプション |
説明 |
--config PATH |
TOML設定ファイルへのパス |
--world PATH |
ワールドディレクトリ |
--port NUMBER |
ネットワークポート (デフォルト: 25565) |
--max-players NUMBER |
最大プレイヤー数 (デフォルト: 20) |
--view-distance NUMBER |
チャンクの表示距離 (デフォルト: 10) |
--performance-mode |
追加のパフォーマンス最適化 |
--debug |
デバッグモードを有効にする |
--log-level LEVEL |
ログレベルを設定 (デフォルト: info) |
--backup |
自動バックアップを有効にする |
✨ 主な機能
- Cythonによる高速化コア:イベント駆動型のサーバーエンジンで、Cレベルのパフォーマンスに近づきます。
- 科学計算バックボーン:NumPy、SciPy、Polarsを統合し、高効率な操作を実現します。
- ゼロオーバーヘッドネットワーキング:非同期、非ブロッキング、プロトコル最適化されたネットワーキングです。
- 高度なエンティティシステム:高度なAIサポートを備えた、効率的で拡張可能なエンティティ管理システムです。
- 堅牢な永続化レイヤー:PostgreSQLとSQLAlchemy ORMによって駆動され、信頼性の高いデータストレージを提供します。
- 包括的なベンチマーク:組み込みのパフォーマンス分析とプロファイリングツールがあります。
- 拡張可能なプラグインフレームワーク:サーバーの変更を簡単に追加できます。
- リアルタイムモニタリング:PrometheusとGrafanaを統合し、ライブメトリクスを提供します。
📦 インストール
前提条件
- Python 3.9+ (3.11+ 推奨)
- 最新のC++コンパイラ (VS 2019+ / GCC 9+)
- PostgreSQL 13+ (本番環境用)
- 最小8GBのRAM (16GB推奨)
クイックセットアップ
git clone https://github.com/magi8101/mcpy.git
cd mcpy
setup.bat
chmod +x setup.sh
./setup.sh
手動インストール
git clone https://github.com/magi8101/mcpy.git
cd mcpy
python -m venv .venv
.venv\Scripts\activate
source .venv/bin/activate
pip install -r _requirements.txt
pip install -e ".[dev]"
pip install -e ".[ai]"
python check_dependencies.py
python setup.py build_ext --inplace
💻 使用例
基本的な使用法
python -m mcpy.server
高度な使用法
python -m mcpy.server --config custom_config.toml --world my_world
📚 ドキュメント
アーキテクチャの概要
MCPyはモジュール式で、5つの高性能コアコンポーネントがあります。
-
server_core.pyx
- イベント駆動型のリクエスト処理
- 適応型、高精度のタイクシステム
- 動的なワーカースレッドプール管理
- リアルタイムのパフォーマンスプロファイリング
-
world_engine.pyx
- マルチオクターブノイズと高度なバイオームを使用した手続き型地形生成
- マルチスレッドチャンク生成とメモリ効率の良い地形ストレージ
-
network_core.pyx
- ゼロコピーパケットシリアライゼーションとプロトコルレベルの圧縮
- 堅牢なコネクションプーリングとDDoS対策
-
entity_system.pyx
- 空間ハッシュベースのエンティティ追跡とマルチスレッド物理
- モジュール式のAI行動ツリー
-
persistence
- PostgreSQL/SQLite用のSQLAlchemy ORM
- 効率的なチャンクシリアライゼーションとトランザクショナルなワールド状態
パフォーマンス目標
指標 |
目標値 |
スケーラビリティ |
100人以上の同時プレイヤーで20TPS |
メモリ使用量 |
10,000チャンクで<2GB |
レイテンシ |
プレイヤーのアクションごとに<50ms |
信頼性 |
コアモジュールのテストカバレッジ100% |
スループット |
1ティックあたり10,000以上のエンティティ更新 |
🔧 技術詳細
Cythonとパフォーマンス
- 静的型付け (
cdef
) と積極的なコンパイラディレクティブ
- 直接的なNumPyバッファアクセスとポインタ演算
- スレッドプールによるマルチスレッド並列処理
エンティティシステム
- 階層的、コンポーネントベースの設計
- カスタムメモリプールによるO(1)空間分割
- 適応型レベルオブディテール (LOD) エンティティ管理
ワールド生成
- マルチオクターブPerlin/Simplexノイズ
- Voronoiベースのバイオーム遷移
- 侵食、洞窟、構造物アルゴリズム
- ストレージ効率のための10倍のチャンク圧縮
🗄️ データベース設定
SQLite (デフォルト)
[database]
type = "sqlite"
path = "world/mcpy.db"
journal_mode = "WAL"
synchronous = "NORMAL"
PostgreSQL (本番環境用)
[database]
type = "postgresql"
host = "localhost"
port = 5432
dbname = "mcpy"
user = "postgres"
password = "your_password"
pool_size = 10
max_overflow = 20
echo = false
💾 永続化機能
- トランザクショナルワールド保存
with session.begin():
for chunk in dirty_chunks:
session.add(ChunkModel.from_chunk(chunk))
- 効率的なチャンクシリアライゼーション
chunk_data = np.savez_compressed(io_buffer,
blocks=chunk.blocks,
heightmap=chunk.heightmap,
biomes=chunk.biomes)
- プレイヤーデータ管理
player_model = PlayerModel(
uuid=player.uuid,
username=player.username,
position=json.dumps([player.x, player.y, player.z]),
inventory=pickle.dumps(player.inventory, protocol=5),
stats=json.dumps(player.stats)
)
- インテリジェントな自動保存:変更されたチャンク/エンティティのみが保存されます
- 自動バックアップ:設定可能な間隔と保持期間
🧪 開発とテスト
pytest
pytest tests/test_entity_system.py
python -m benchmarks.benchmark
python -m mcpy.profiling.profile_module world_engine
pytest --cov=mcpy --cov-report=html
パフォーマンスチューニングの例
- エンティティシステム
entity_spatial_hash = {(int(e.x/16), int(e.z/16)): [] for e in entities}
for entity in entities:
entity_spatial_hash[(int(entity.x/16), int(entity.z/16))].append(entity)
- ワールドエンジン
with ThreadPoolExecutor(max_workers=os.cpu_count()) as executor:
futures = [executor.submit(generate_chunk, x, z) for x, z in chunk_coords]
chunks = [f.result() for f in futures]
- ネットワーク最適化
cdef char* buffer = <char*>malloc(packet_size)
memcpy(buffer, &packet_header, sizeof(packet_header))
memcpy(buffer + sizeof(packet_header), packet_data, packet_data_size)
🔧 高度な機能
プラグインシステム
カスタムコマンドと動作を簡単に追加できます。
from mcpy.plugins import Plugin, event
class TeleportPlugin(Plugin):
@event("player.command")
def on_command(self, player, command, args):
if command == "tp" and len(args) >= 1:
target = self.server.get_player_by_name(args[0])
if target:
player.teleport(target.x, target.y, target.z)
return True
return False
リアルタイムモニタリング
Prometheus/Grafanaの統合サポートがあります。
[monitoring]
enabled = true
prometheus_port = 9090
metrics = ["tps", "memory_usage", "players_online", "chunks_loaded"]
AIエンティティの動作
柔軟な、行動ツリー駆動型のAIです。
class ZombieAI(MobAI):
def setup_behaviors(self):
self.behaviors = BehaviorTree(
Selector([
Sequence([
CheckPlayerNearby(radius=16),
PathfindToPlayer(),
AttackPlayer()
]),
Sequence([
Wait(random.randint(20, 100)),
MoveToRandomPosition(radius=10)
])
])
)
🗺️ ロードマップ
短期的な目標
- [ ] エンティティ衝突システム
- [ ] クラフトとインベントリ管理
- [ ] 基本的な戦闘メカニクス
- [ ] ワールド生成の最適化
中期的な目標
- [ ] マルチワールドサポートとポータル
- [ ] カスタムブロックの動作
- [ ] 強化されたモブAI
- [ ] ゲーム内スクリプティングAPI
長期的な目標
- [ ] 分散型サーバーアーキテクチャ
- [ ] 機械学習駆動型のモブAI
- [ ] リアルタイムレイトレーシング照明
- [ ] カスタム物理エンジン
🤝 貢献方法
私たちは皆さんの貢献を歓迎します!貢献を始めるには、貢献ガイドを参照してください。
- リポジトリをフォークする
- 機能ブランチを作成する (
git checkout -b feature/amazing-feature
)
- 変更をコミットする (
git commit -m 'Add some amazing feature'
)
- ブランチにプッシュする (
git push origin feature/amazing-feature
)
- プルリクエストを開く
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。詳細は LICENSE ファイルを参照してください。