package net.glowstone.net.codec.play.player;
import com.flowpowered.networking.Codec;
import com.flowpowered.networking.util.ByteBufUtils;
import io.netty.buffer.ByteBuf;
import net.glowstone.net.message.play.player.CombatEventMessage;
import java.io.IOException;
public final class CombatEventCodec implements Codec<CombatEventMessage> {
@Override
public CombatEventMessage decode(ByteBuf buffer) throws IOException {
int eventId = ByteBufUtils.readVarInt(buffer);
CombatEventMessage.Event event = CombatEventMessage.Event.getAction(eventId);
switch (event) {
case END_COMBAT: {
int duration = ByteBufUtils.readVarInt(buffer);
int entityID = buffer.readInt();
return new CombatEventMessage(event, duration, entityID);
}
case ENTITY_DEAD: {
int playerID = ByteBufUtils.readVarInt(buffer);
int entityID = buffer.readInt();
String message = ByteBufUtils.readUTF8(buffer);
return new CombatEventMessage(event, playerID, entityID, message);
}
default:
return new CombatEventMessage(event);
}
}
@Override
public ByteBuf encode(ByteBuf buf, CombatEventMessage message) throws IOException {
ByteBufUtils.writeVarInt(buf, message.getEvent().ordinal());
if (message.getEvent() == CombatEventMessage.Event.END_COMBAT) {
ByteBufUtils.writeVarInt(buf, message.getDuration());
buf.writeInt(message.getEntityID());
} else if (message.getEvent() == CombatEventMessage.Event.ENTITY_DEAD) {
ByteBufUtils.writeVarInt(buf, message.getPlayerID());
buf.writeInt(message.getEntityID());
ByteBufUtils.writeUTF8(buf, message.getMessage());
}
return buf;
}
}