# IShapeshiftManager
> Client-side disguises: renders a player (or any entity) as a different mob or as a block on a viewer's client. Purely visual and per-viewer — hitboxes, eye height and nametag handling follow the disguise on the viewer's client, while the server keeps the real entity.
`gg.lode.lecternapi.api.manager.IShapeshiftManager`
---
## Signature
```java
public interface IShapeshiftManager
```
---
## Methods
### shapeshift
```java
void shapeshift(Player viewer, Entity target, String entityTypeId)
void shapeshift(Player viewer, Entity target, String entityTypeId, String variant)
```
Renders the target as the given entity type on the viewer's client.
| Parameter | Type | Description |
|---|---|---|
| `viewer` | `Player` | The player whose client renders the disguise. |
| `target` | `Entity` | The entity to disguise. |
| `entityTypeId` | `String` | The entity type identifier (e.g. `"minecraft:pig"`). |
| `variant` | `String` | Optional variant — registry ids for variant-registry mobs (e.g. `"minecraft:warm"` for pig), or lowercase enum names for others. Empty for default. |
---
### removeShapeshift
```java
void removeShapeshift(Player viewer, Entity target)
void removeShapeshift(Player viewer, UUID targetUuid)
```
Removes the target's disguise on the viewer's client.
---
### clearShapeshifts
```java
void clearShapeshifts(Player viewer)
```
Removes every mob disguise on the viewer's client.
---
### blockShapeshift
```java
void blockShapeshift(Player viewer, Entity target, String blockStateString)
void blockShapeshift(Player viewer, Entity target, BlockData blockData)
```
Renders the target as a block on the viewer's client. Full blockstates are supported (e.g. `"minecraft:oak_stairs[facing=east,half=top]"`); the hitbox and eye height follow the block's outline shape.
| Parameter | Type | Description |
|---|---|---|
| `viewer` | `Player` | The player whose client renders the disguise. |
| `target` | `Entity` | The entity to disguise. |
| `blockStateString` | `String` | Vanilla blockstate string. |
| `blockData` | `BlockData` | Bukkit block data alternative. |
---
### removeBlockShapeshift
```java
void removeBlockShapeshift(Player viewer, Entity target)
void removeBlockShapeshift(Player viewer, UUID targetUuid)
```
Removes the target's block disguise on the viewer's client.
---
### clearBlockShapeshifts
```java
void clearBlockShapeshifts(Player viewer)
```
Removes every block disguise on the viewer's client.
---
## Related Pages
- [[ILecternAPI]] — Access via `getShapeshiftManager()`