Overview
FakePlayer spawns a client-side ghost player that mimics a real player entity. It can be used for testing crystal damage, recording and replaying movements, or just for visual effects. The fake player has health, can take damage, use totems, and even die.
Features
Three operating modes: Normal, Record, and Play
Takes realistic damage from crystals and melee
Uses totems when health reaches zero
Records and replays player movements
Full armor and item rendering
Client-side only (other players can’t see it)
Settings
The name displayed above the fake player’s head
Operating mode for the fake player
Normal : Static ghost at spawn position
Record : Records your movements while enabled
Play : Replays recorded movements in a loop
Operating Modes
Normal Mode
Record Mode
Play Mode
Basic Ghost Spawns a static fake player at your current position:
Copies your current position and rotation
Copies your equipped items and armor
Has 36 health (20 HP + absorption)
Can be attacked and damaged
Will use totem if killed
Use Cases:
Test crystal damage at specific positions
Practice aiming on a stationary target
Visual reference point in builds
Movement Recording Records your movements while the module is enabled:
Enable with Record mode
Move around as desired
Disable to save the recording
Recorded Data:
Position (X, Y, Z)
Rotation (Yaw, Pitch, Head)
Velocity vectors
Tip: Recordings persist until you record again or clear themPlayback Spawns a ghost that replays your recorded movements:
Loops the recording continuously
Ghost mimics exact positions and rotations
Updates every other tick for smooth playback
Can still take damage during playback
Use Cases:
Test damage while moving
Create fake player decoys
Visualize movement patterns
How to Use
Spawn a Basic Ghost
Set Task to “Normal”
Enable the module
Ghost spawns at your location
Attack it to test damage
Record Movements
Set Task to “Record”
Enable the module (see “Recording!” message)
Perform the movements you want to record
Disable the module (recording saved)
Playback Recording
Set Task to “Play”
Enable the module
Ghost replays your recorded movements
Loops indefinitely until disabled
Damage Mechanics
Melee Damage
The fake player takes realistic melee damage:
// Located at: misc/FakePlayer.java:186-217
@ SubscribeEvent
public void onAttack ( LivingEvent . Attack event) {
if ( event . getEntity () == fakePlayer && ( fakePlayer . hurtTime == 0 )) {
// Play hurt sound
mc . world . playSound ( mc . player , fakePlayer . getX (), fakePlayer . getY (),
fakePlayer . getZ (), SoundEvents . ENTITY_PLAYER_HURT ,
SoundCategory . PLAYERS , 1f , 1f );
// Calculate damage
if ( mc . player . getAttackCooldownProgress ( 20 ) >= 0.85 )
fakePlayer . setHealth ( fakePlayer . getHealth () +
fakePlayer . getAbsorptionAmount () -
InventoryUtils . getHitDamage ( mc . player . getMainHandStack (), fakePlayer));
else
fakePlayer . setHealth ( fakePlayer . getHealth () +
fakePlayer . getAbsorptionAmount () - 1f );
}
}
Detects when you’re falling for critical hits
Plays critical hit sound effect
Applies critical damage multiplier
Full damage when attack cooldown >= 85%
Reduced damage (1 HP) for weak attacks
Matches vanilla combat mechanics
Crystal Damage
Accurate end crystal explosion damage:
// Located at: misc/FakePlayer.java:220-252
public void onExplosion ( ExplosionS2CPacket explosion) {
if (( fakePlayer . hurtTime == 0 || crystalAvailable)) {
fakePlayer . setHealth (( fakePlayer . getHealth () + fakePlayer . getAbsorptionAmount ()) -
CrystalUtil . calculateDamage (fakePlayer,
new Vec3d ( explosion . getX (), explosion . getY (), explosion . getZ ()),
false , false ));
}
}
Crystal damage calculation uses the same algorithm as CrystalAura, making it perfect for testing crystal damage at various positions.
Totem Pop
When the ghost’s health reaches zero:
Checks if holding totem in offhand
Attempts to use totem
Plays totem pop animation
Resets health to 10 HP
Shows pop notification
Technical Details
Entity Properties
// Located at: misc/FakePlayer.java:93-109
fakePlayer = new OtherClientPlayerEntity ( mc . world ,
new GameProfile ( UUID . fromString ( "5300a928-b781-440a-8581-19343b39d29d" ),
fakeName . getValue ()));
fakePlayer . copyPositionAndRotation ( mc . player );
fakePlayer . bodyYaw = mc . player . getBodyYaw ();
fakePlayer . headYaw = mc . player . getHeadYaw ();
fakePlayer . setHealth ( 36 );
// Copy equipment
fakePlayer . setStackInHand ( Hand . MAIN_HAND , mc . player . getMainHandStack (). copy ());
fakePlayer . getInventory (). setStack ( 36 , mc . player . getInventory (). getStack ( 36 ). copy ()); // Helmet
fakePlayer . getInventory (). setStack ( 37 , mc . player . getInventory (). getStack ( 37 ). copy ()); // Chestplate
fakePlayer . getInventory (). setStack ( 38 , mc . player . getInventory (). getStack ( 38 ). copy ()); // Leggings
fakePlayer . getInventory (). setStack ( 39 , mc . player . getInventory (). getStack ( 39 ). copy ()); // Boots
// Add status effects
fakePlayer . addStatusEffect ( new StatusEffectInstance ( StatusEffects . REGENERATION , 9999 , 2 ));
fakePlayer . addStatusEffect ( new StatusEffectInstance ( StatusEffects . ABSORPTION , 9999 , 4 ));
fakePlayer . addStatusEffect ( new StatusEffectInstance ( StatusEffects . RESISTANCE , 9999 , 1 ));
Movement Recording
Recordings store complete movement data:
private static class Location {
private final double x , y , z ;
private final float yaw , pitch , head ;
private final Vec3d velocity ;
public Location ( PlayerEntity player ) {
this . x = player . getX ();
this . y = player . getY ();
this . z = player . getZ ();
this . yaw = player . getYaw ();
this . pitch = player . getPitch ();
this . head = player . getHeadYaw ();
this . velocity = player . getVelocity ();
}
}
Usage Examples
Crystal Damage Testing
Movement Pattern
Totem Testing
1. Set Task to "Normal"
2. Enable FakePlayer at test position
3. Place end crystal near ghost
4. Detonate and observe damage
5. Ghost shows realistic damage values
Notifications
FakePlayer provides visual notifications:
Spawn
Remove
Death
Recording
Green notification: "Spawned ghost [Name]!"
Duration: 1 second
Red notification: "Removed ghost [Name]!"
Duration: 1 second
Red notification: "Ghost [Name] died!"
Duration: 1 second
Auto-disables module
Chat: "Recording! Disable the module to stop recording."
Chat: "Saved Recording!" (when disabled)
Best Practices
Testing Position Use Normal mode to test damage at specific coordinates for CrystalAura configuration
Movement Patterns Record common PvP movements to test damage on moving targets
Name It Clearly Use descriptive ghost names to remember which test each ghost represents
Clear Old Recordings Clear recordings when not needed to avoid confusion
FakePlayer is client-side only. Other players cannot see your ghost, but they can see your crystals and attacks.
CrystalAura : Use FakePlayer to test crystal damage calculations
AutoCrystal : Optimize placement by testing on fake players
Freecam : Combine with Freecam to view ghost from different angles