> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cheart.getvapu.today/llms.txt
> Use this file to discover all available pages before exploring further.

# me

> 脚本自身和客户端工具

### 日志 & 聊天

```java theme={null}
me.log(Object msg)        // [scriptName] msg 前缀
me.warn(Object msg)
me.subChat(Object msg)    // 显示 > 开头的消息

me.chat(Object msg)            // 发送聊天信息
me.clientCommand(String msg)   // 执行客户端命令需要.开头
me.baritoneCommand(String msg) // 执行Baritone命令需要#开头
```

### 玩家 / 世界

```java theme={null}
LocalPlayer  me.getPlayer()
World        me.getWorld()
String       me.getServer()
boolean      me.isSingleplayer()
boolean      me.isMoving()
int          me.getFPS()
int[]        me.getDisplaySize()       // { width, height }
List<String> me.getResourcePacks()
Entity       me.getKillAuraTarget()
String       me.getUsername()     // 注意，这个是客户端用户名，不是mc用户名

// 1.1+
void         me.clickLeft()
void         me.clickRight()
void         me.swapHand()
String       me.getVersion()      // 获得客户端版本号
```

### 本模块属性读写

```java theme={null}
boolean me.getBool(String key)
int     me.getInt(String key)
double  me.getNumber(String key)
String  me.getString(String key)
void    me.setBool(String, boolean)
void    me.setInt(String, int)
void    me.setNumber(String, double)
void    me.setString(String, String)
```

### 运动 & 旋转

```java theme={null}
double[] me.getMovementDelta()                              // { x, y, z }
void     me.setMovementDelta(double x, double y, double z)

float[]  me.getRotation()                                   // { yaw, pitch }
float[]  me.getRotation(double x, double y, double z)       // 到世界点
float[]  me.getRotationsToBlock(int x, int y, int z)
float[]  me.getRotationsToEntity(Entity entity)
void     me.setRotation(float yaw, float pitch, float speed, boolean moveFix)
```

<Tip>
  `setRotation(moveFix=true)` 必须在 `player_update` 事件里调，才能正确配对下一帧的 motion 包。
</Tip>

### 动作

```java theme={null}
void    me.attack(Entity target)
void    me.command(String cmdOrMessage)            // "/" 开头作为命令
void    me.dropItem(int slot)
void    me.swapItem(int invSlot, int hotbarSlot)
void    me.shiftClick(int slot)
boolean me.placeBlock(int x, int y, int z, String face, String hand)
```

### Raytrace

```java theme={null}
Hit    me.raycast(double range)        // 实体 + 方块
Hit    me.raycastBlock(double range)   // 仅方块
Entity me.raycastEntity(double range)  // 仅实体
```

### Target 验证

```java theme={null}
boolean me.isValidTarget(Entity e, double range, float angle, boolean checkTeam)
boolean me.isValidTarget(Entity e, double range, float angle, float expand,
                         boolean checkTeam, boolean players, boolean mobs, boolean invis)
```

### 事件派发

```java theme={null}
void        me.post(String name)
void        me.post(String name, String k, Object v)
void        me.post(String name, String k1, Object v1, String k2, Object v2)
void        me.post(Event event)
Event       me.newEvent(String name)
Map         me.callEvent(String name, Map params)
```

### Screen

```java theme={null}
boolean me.registerScreen(String name)
void    me.openScreen(String name)
void    me.closeScreen()
boolean me.unregisterScreen(String name)
```

### 异步

```java theme={null}
void me.async(String methodName)       // 后台线程跑本脚本方法
```

### 逃生舱

```java theme={null}
Unsafe me.unsafe()                // 反射访问 MC 原生对象
```

返回的是[Unsafe](/api/unsafe)对象，反射访问工具套装。
