// Path: src/main/java/com/zhaidaosi/game/jgframework/model/action/IBaseAction.java
// public interface IBaseAction {
// 
//     int getId();
// 
//     void doAction(Object self, Object target, BaseHandlerChannel ch);
// 
//     String getName();
// 
//     void setName(String name);
// 
//     IBaseAction clone();
// 
// }
// 
// Path: src/main/java/com/zhaidaosi/game/jgframework/model/area/IBaseArea.java
// public interface IBaseArea {
// 
//     void init();
// 
//     boolean isOpen();
// 
//     void open();
// 
//     void close();
// 
//     int getId();
// 
//     String getName();
// 
//     void setName(String name);
// 
//     IBaseMap getMap();
// 
//     IBaseEntity getEntity(int id);
// 
//     Map<Integer, IBaseEntity> getEntities();
// 
//     void addEntity(IBaseEntity entity);
// 
//     void removeEntity(int id);
// 
//     IBaseCharacter getPlayer(int id);
// 
//     Collection<IBaseCharacter> getPlayers();
// 
//     void addPlayer(BasePlayer player);
// 
//     void removePlayer(int id);
// 
//     IBaseEntity getNpc(int id);
// 
//     void addNpc(BaseNpc npc);
// 
//     void removeNpc(int id);
// 
//     ChannelGroup getChannelGroup();
// 
// }


import com.zhaidaosi.game.jgframework.model.BasePosition;
import com.zhaidaosi.game.jgframework.model.action.IBaseAction;
import com.zhaidaosi.game.jgframework.model.area.IBaseArea;
import io.netty.channel.Channel;
import java.util.HashMap;
import java.util.Map;
    protected Channel channel;
    protected String name;
    protected String roll;
    protected int level;
    protected int experience;
    protected int totalHp;
    protected int totalMp;
    protected int hp;
    protected int mp;
    protected BasePosition position;
    protected Map<Integer, IBaseAction> actions = new HashMap<Integer, IBaseAction>();
    protected boolean isInQueue = false;

    @Override
    public void loginHook() {
        if (channel == null || position == null) {
            return;
        }
        IBaseArea area = position.getArea();
        if (area == null) {
            return;
        }
        area.addPlayer(this);
    }

    @Override
    public void logoutHook() {
        if (channel == null || position == null) {
            return;
        }
// Path: src/main/java/com/zhaidaosi/game/jgframework/model/action/IBaseAction.java
// public interface IBaseAction {
// 
//     int getId();
// 
//     void doAction(Object self, Object target, BaseHandlerChannel ch);
// 
//     String getName();
// 
//     void setName(String name);
// 
//     IBaseAction clone();
// 
// }
// 
// Path: src/main/java/com/zhaidaosi/game/jgframework/model/area/IBaseArea.java
// public interface IBaseArea {
// 
//     void init();
// 
//     boolean isOpen();
// 
//     void open();
// 
//     void close();
// 
//     int getId();
// 
//     String getName();
// 
//     void setName(String name);
// 
//     IBaseMap getMap();
// 
//     IBaseEntity getEntity(int id);
// 
//     Map<Integer, IBaseEntity> getEntities();
// 
//     void addEntity(IBaseEntity entity);
// 
//     void removeEntity(int id);
// 
//     IBaseCharacter getPlayer(int id);
// 
//     Collection<IBaseCharacter> getPlayers();
// 
//     void addPlayer(BasePlayer player);
// 
//     void removePlayer(int id);
// 
//     IBaseEntity getNpc(int id);
// 
//     void addNpc(BaseNpc npc);
// 
//     void removeNpc(int id);
// 
//     ChannelGroup getChannelGroup();
// 
// }


// Path: src/main/java/com/zhaidaosi/game/jgframework/model/entity/BasePlayer.java
import com.zhaidaosi.game.jgframework.model.BasePosition;
import com.zhaidaosi.game.jgframework.model.action.IBaseAction;
import com.zhaidaosi.game.jgframework.model.area.IBaseArea;
import io.netty.channel.Channel;
import java.util.HashMap;
import java.util.Map;

    protected Channel channel;
    protected String name;
    protected String roll;
    protected int level;
    protected int experience;
    protected int totalHp;
    protected int totalMp;
    protected int hp;
    protected int mp;
    protected BasePosition position;
    protected Map<Integer, IBaseAction> actions = new HashMap<Integer, IBaseAction>();
    protected boolean isInQueue = false;

    @Override
    public void loginHook() {
        if (channel == null || position == null) {
            return;
        }
        IBaseArea area = position.getArea();
        if (area == null) {
            return;
        }
        area.addPlayer(this);
    }

    @Override
    public void logoutHook() {
        if (channel == null || position == null) {
            return;
        }
        IBaseArea area = position.getArea();