package com.cardshifter.server.utils.export; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; import com.cardshifter.modapi.attributes.ECSAttributeData; import com.cardshifter.modapi.attributes.ECSAttributeMap; import com.cardshifter.modapi.base.ComponentRetriever; import com.cardshifter.modapi.base.CreatureTypeComponent; import com.cardshifter.modapi.base.Entity; import com.cardshifter.modapi.base.Retrievers; import com.cardshifter.modapi.resources.ECSResourceData; import com.cardshifter.modapi.resources.ECSResourceMap; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import net.zomis.cardshifter.ecs.effects.EffectComponent; public class EntitySerializer extends JsonSerializer<Entity> { @Override public void serialize(Entity value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject(); ECSResourceMap map = value.getComponent(ECSResourceMap.class); if (map != null) { List<ECSResourceData> ress = map.getResources().collect(Collectors.toList()); for (ECSResourceData res : ress) { jgen.writeObjectField(res.getResource().toString(), res.get()); } } ECSAttributeMap attributes = value.getComponent(ECSAttributeMap.class); if (attributes != null) { List<ECSAttributeData> attribs = attributes.getAttributes().collect(Collectors.toList()); for (ECSAttributeData attr : attribs) { jgen.writeObjectField(attr.getAttribute().toString(), attr.get()); } } EffectComponent effect = value.getComponent(EffectComponent.class); if (effect != null) { jgen.writeObjectField("description", effect.getDescription()); } ComponentRetriever<CreatureTypeComponent> creatureType = Retrievers.component(CreatureTypeComponent.class); if (creatureType.has(value)) { jgen.writeObjectField("type", creatureType.get(value).getAllTypes()); } jgen.writeEndObject(); } }