Welcome! This guide will help you contribute using Cursor AI.
See README TODO for current tasks. Quick summary:
- Fix block placement accuracy - Bot misses edges when bridging
- Smooth pathfinding movement - Jerky movements on complex paths
- Fix Watchdog anti-cheat flags - Too many placement packets
- Generator detection & tracking - Auto-detect and save generator positions
Download from cursor.sh
git clone https://github.com/familiar/Bedwars-Bot-V3.git
cd BedwarsAFK-KotlinPress Ctrl+L (or Cmd+L on Mac) to open Cursor Agent:
You: "Read PATHFINDING_GUIDE.md and EAGLE_BRIDGING_GUIDE.md to understand the codebase"
[Agent reads files]
You: "I want to fix [TASK FROM TODO]. Show me the relevant files and explain how."
[Agent explains and guides you]
You: "Implement the fix"
[Agent writes code]
./gradlew build
# JAR is in build/libs/
# Copy to .minecraft/mods/ and testIn-game debug commands:
#goto <x> <y> <z>- Test pathfinding#bridge start/stop- Test bridging#debug on/off- Toggle verbose logging#pos- Show position
git add .
git commit -m "Your change description"
git pushAdvancedPathfinder.kt- 3D A* pathfinding, navigationEagleBridge.kt- Eagle bridging mechanicsMovement.kt- WASD/sneak controlsMouse.kt- Looking and clicking
AdvancedPathfinder.kt → Navigation, jumping, bridging
└─ EagleBridge.kt → Sneaking, block placement, rotation
└─ Movement.kt → Low-level WASD/sneak
└─ Mouse.kt → Looking/clicking
Get player position:
val player = mc.thePlayer ?: return
val pos = BlockPos(player.posX, player.posY, player.posZ)Smooth rotation:
val delta = (targetYaw - player.rotationYaw) * 0.3f
player.rotationYaw += deltaSafe movement:
Movement.stopMovement() // Always stop first!
Movement.startBackward()- Be specific: "Fix pitch in EagleBridge.kt line 150" > "fix the bug"
- Ask for context: "Show me where this is called"
- Iterate: "Still broken, the pitch seems too high"
- Request explanations: "Why does this flag anti-cheat?"
❌ Don't hold conflicting keys:
Movement.startForward()
Movement.startBackward() // BUG!✅ Always stop first:
Movement.stopMovement()
Movement.startBackward()❌ Don't spam packets:
for (i in 0..100) {
rightClickBlock() // Watchdog flag!
}✅ Add cooldowns:
if (System.currentTimeMillis() - lastPlaceTime > 100) {
rightClickBlock()
lastPlaceTime = System.currentTimeMillis()
}Open an issue with:
- What's wrong?
- Steps to reproduce
- Expected vs actual behavior
- Logs/screenshots
Ask Cursor AI first - it has full codebase context:
"How does edge detection work?"
"Why is pitch fixed at 83 degrees?"
"What triggers bridge mode?"
Every contribution helps. Happy coding! 🚀