Protection Area Addon เป็นแอดออนที่พัฒนาด้วย JavaScript สำหรับ Minecraft Bedrock Edition โดยใช้ @minecraft/server และ @minecraft/server-ui API เพื่อสร้างระบบเขตป้องกันส่วนตัวในโลก Minecraft ระบบนี้ออกแบบมาเพื่อให้ผู้เล่นสามารถกำหนดและจัดการพื้นที่ส่วนตัว ป้องกันการบุกรุกจากผู้เล่นอื่น และมอบเครื่องมือให้แอดมินดูแลโลกได้อย่างมีประสิทธิภาพ 🔒🌍
- ป้องกันผู้เล่นที่ไม่มีสิทธิ์เข้าถึงเขตด้วยการผลักออกและบันทึกการบุกรุก
- จำกัดการวาง/ขุดบล็อก และการใช้ไอเทมในเขตที่ป้องกัน
- เจ้าของเขตสามารถเพิ่ม/ลบเพื่อนที่ได้รับอนุญาตให้เข้าถึงเขตได้
- ตรวจจับและลบไฟในเขตโดยอัตโนมัติเพื่อป้องกันความเสียหาย
- แสดงขอบเขตของเขตด้วยอนุภาค (particles) เพื่อให้มองเห็นได้ชัดเจน
- เครื่องมือสำหรับแอดมิน เช่น ดูข้อมูลเขต ลบเขต และจัดการประวัติการบุกรุก
- อนุญาตให้ผู้เล่นที่ไม่มีสิทธิ์อยู่ในเขตได้ในโหมดเยี่ยมชมโดยไม่ถูกผลักออก
- จำกัดการเกิดของมอนสเตอร์บางประเภทและลบเอนทิตี้ที่เป็นอันตรายในเขต
ไฟล์ main.js เป็นหัวใจหลักของ Protection Area Addon ซึ่งจัดการทุกฟังก์ชันการทำงานของระบบเขตป้องกัน โครงสร้างถูกแบ่งออกเป็นโมดูลย่อย ๆ เพื่อให้ง่ายต่อการอ่านและบำรุงรักษา ดังนี้:
main.js
├── 📍 Zone Utilities
│ ├── formatDateTime() - แปลงวันที่และเวลาเป็นรูปแบบ UTC+7
│ ├── isInsideZone() - ตรวจสอบว่าตำแหน่งอยู่ในเขตใดบ้าง
│ ├── canAccess() - ตรวจสอบสิทธิ์การเข้าถึงเขต
│ ├── pushOutOfZone() - ผลักเอนทิตี้ออกจากเขต
│
├── 💾 Data Management
│ ├── protectionZones (Map) - เก็บข้อมูลเขตป้องกัน
│ ├── allowedPlayers (Map) - เก็บรายชื่อผู้เล่นที่ได้รับอนุญาต
│ ├── intrusionLog (Map) - บันทึกการบุกรุก
│ ├── activeBorders (Map) - เก็บข้อมูลการแสดงขอบเขต
│ ├── saveZones() - บันทึกข้อมูลลง Dynamic Properties
│ ├── loadZones() - โหลดข้อมูลจาก Dynamic Properties
│
├── 🌍 World Initialization
│ └── afterEvents.worldInitialize - เริ่มต้นระบบเมื่อโลกโหลด
│
├── 🧭 Main Menu
│ └── showMainMenu() - แสดงเมนูหลักเมื่อใช้เข็มทิศ
│
├── ⚙️ Settings Menu
│ ├── showSettings() - เมนูตั้งค่าเขต
│ ├── addFriend() - เพิ่มเพื่อน
│ ├── removeFriend() - ลบเพื่อน
│ ├── toggleBounceNonPlayers() - เปิด/ปิดการผลักสิ่งที่ไม่ใช่ผู้เล่น
│ └── toggleVisitMode() - เปิด/ปิดโหมดเยี่ยมชม
│
├── 🏰 Zone Creation & Deletion
│ ├── isWithinRequiredDistance() - ตรวจสอบระยะห่างจากเขตอื่น
│ ├── createZone() - สร้างเขตใหม่
│ └── deleteZone() - ลบเขต
│
├── 🌐 Zone Border
│ └── showZoneBorder() - แสดงขอบเขตด้วยอนุภาค
│
├── 🔄 Game Loops
│ ├── system.runInterval - สแกนไฟและจัดการเอนทิตี้ทุก 20 ticks
│ └── checkEntitiesInZone() - ตรวจสอบและจัดการเอนทิตี้ในเขต
│
├── ⚔️ Event Handlers
│ ├── entityHitEntity - ป้องกันการโจมตีในเขต
│ ├── entityHurt - ทำให้ผู้เล่นในเขตอมตะ
│ ├── entitySpawn - จำกัดการเกิดเอนทิตี้
│ ├── playerBreakBlock - บล็อกการขุด
│ ├── playerPlaceBlock - บล็อกการวาง
│ ├── playerInteractWithBlock - บล็อกการโต้ตอบบล็อก
│ ├── itemUse - บล็อกการใช้ไอเทม
│ ├── itemUseOn - บล็อกการใช้ไอเทมกับบล็อก
│ └── chatSend - บล็อกคำสั่งที่เกี่ยวข้องกับ TNT
│
├── 🔐 Protection Toggle
│ └── toggleProtection() - เปิด/ปิดการป้องกันเขต
│
├── 📜 Intrusion Logging
│ └── logIntrusion() - บันทึกการบุกรุก
│
└── 👑 Admin Menu
├── showAdminMenu() - เมนูแอดมิน
├── showAdminZoneInfo() - ดูข้อมูลเขต
├── deleteAdminZone() - ลบเขต
├── removePlayerFromZone() - ลบผู้เล่นออกจากเขต
├── showIntrusionLog() - ดูประวัติการบุกรุก
└── manageIntrusionLog() - จัดการประวัติการบุกรุก
saveZones()บันทึกข้อมูลทุกครั้งที่มีการเปลี่ยนแปลงในprotectionZones,allowedPlayers, หรือintrusionLogloadZones()โหลดข้อมูลเมื่อโลกเริ่มต้นเพื่อกู้คืนสถานะของเขตป้องกัน
isInsideZone()และisWithinRequiredDistance()ใช้ตรวจสอบตำแหน่งของผู้เล่น/เอนทิตี้ และป้องกันการสร้างเขตทับซ้อน
- ป้องกันการโจมตี, การขุด, การวางบล็อก, และการโต้ตอบในเขตที่ไม่มีสิทธิ์
checkEntitiesInZone()ตรวจจับผู้บุกรุกและใช้pushOutOfZone()เพื่อผลักออกจากเขต
logIntrusion()บันทึกการบุกรุกของผู้เล่นที่ไม่มีสิทธิ์showIntrusionLog()แสดงรายการการบุกรุกของเขตที่เลือก
- นำ
Behavior Packไปไว้ในโฟลเดอร์com.mojang/behavior_packs - เปิด
Minecraft Bedrock Editionและเปิดโลกด้วยBehavior Pack - ใช้
เข็มทิศเพื่อเปิดเมนูหลักและเริ่มจัดการเขตป้องกันของคุณ
- SolughtzZ - ผู้พัฒนาและออกแบบระบบ
เอกสารนี้ช่วยให้คุณเข้าใจโครงสร้างของ Protection Area Addon และการเชื่อมโยงของฟังก์ชันต่าง ๆ อย่างละเอียด
- วางไฟล์
main.jsในโฟลเดอร์scriptsของ Behavior Pack - เพิ่มใน
manifest.json:
"modules": [
{
"type": "script",
"language": "javascript",
"entry": "scripts/main.js",
"uuid": "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
],
"dependencies": [
{"module_name": "@minecraft/server", "version": "1.17.0"},
{"module_name": "@minecraft/server-ui", "version": "1.3.0"}
]- เปิดใช้งานในโลก Minecraft
- ใช้เข็มทิศ (
minecraft:compass) เพื่อเปิดเมนูหลัก
- ปรับปรุงการสแกนไฟให้เร็วและครอบคลุมขึ้น
- เพิ่มระบบแจ้งเตือนผ่าน UI