gt:                     cache = new Yaml().loadAs(reader, (Container.class)).types;
context: package fr.guiguilechat.jcelechat.model.sde.types.drone;
  
  import java.io.InputStreamReader;
  import java.util.Collections;
  import java.util.LinkedHashMap;
  import java.util.Map;
  import fr.guiguilechat.jcelechat.model.sde.Attribute;
  import fr.guiguilechat.jcelechat.model.sde.IMetaCategory;
  import fr.guiguilechat.jcelechat.model.sde.IMetaGroup;
  import fr.guiguilechat.jcelechat.model.sde.annotations.DefaultDoubleValue;
  import fr.guiguilechat.jcelechat.model.sde.annotations.DefaultIntValue;
  import fr.guiguilechat.jcelechat.model.sde.annotations.HighIsGood;
  import fr.guiguilechat.jcelechat.model.sde.annotations.Stackable;
  import fr.guiguilechat.jcelechat.model.sde.types.Drone;
  import org.yaml.snakeyaml.Yaml;
  
  public class ElectronicWarfareDrone
      extends Drone
  {
      /**
       * Duration of NPC effect
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(30000)
      public int ECMDuration;
      /**
       * Chance of NPC effect to be activated each duration
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(0)
      public int ECMEntityChance;
      /**
       * Max Range for NPC Target Jam
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(0)
      public int ECMRangeOptimal;
      /**
       * The agility of the object.
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(0.0)
      public double Agility;
      /**
       * Multiplies EM damage taken by Armor. 
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(1.0)
      public double ArmorEmDamageResonance;
      /**
       * Multiplies EXPLOSIVE damage taken by Armor. 
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(1.0)
      public double ArmorExplosiveDamageResonance;
      /**
       * Multiplies KINETIC damage taken by Armor. 
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(1.0)
      public double ArmorKineticDamageResonance;
      /**
       * Multiplies THERMAL damage taken by Armor. 
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(1.0)
      public double ArmorThermalDamageResonance;
      /**
       * The amount of charge used from the capacitor for a module activation.
       */
      @HighIsGood(false)
      @Stackable(true)
      @DefaultDoubleValue(0.0)
      public double CapacitorNeed;
      /**
       * Length of activation time.
       */
      @HighIsGood(false)
      @Stackable(true)
      @DefaultDoubleValue(0.0)
      public double Duration;
      /**
       * Length of jam duration
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(0)
      public int EcmJamDuration;
      /**
       * The distance from a target an entity starts using its weapons.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(15000)
      public int EntityAttackRange;
      /**
       * The maximum amount of time stalled before entity chase speed kicks in.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(5000)
      public int EntityChaseMaxDelay;
      /**
       * Chance that the max delay is waited before chase is engaged.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(1)
      public int EntityChaseMaxDelayChance;
      /**
       * The distance outside of which the entity activates their MWD equivalent.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(2500)
      public int EntityChaseMaxDistance;
      /**
       * The maximum amount of time chase is ever engaged for.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(5000)
      public int EntityChaseMaxDuration;
      /**
       * The chance of engaging chase for the maximum duration.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(1)
      public int EntityChaseMaxDurationChance;
      /**
       * The speed that entities fly at when not chasing a target.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(0)
      public int EntityCruiseSpeed;
      /**
       * The distance at which the entity orbits, follows.. and more.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultDoubleValue(500.0)
      public double EntityFlyRange;
      /**
       * Used for target jam effects to reduce max locked targets of victem to a negative value to ensure the victem looses its targets, use extreme value
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(0)
      public int EwTargetJam;
      /**
       * Autogenerated skill attribute, falloffBonus
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultDoubleValue(0.0)
      public double FalloffBonus;
      /**
       * The maximum number of their targets that the character can attack at a given time.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(0)
      public int MaxAttackTargets;
      /**
       * Distance below which range does not affect the to-hit equation.
       */
      @HighIsGood(true)
      @Stackable(false)
      @DefaultIntValue(0)
      public int MaxRange;
      /**
       * Autogenerated skill attribute, maxRangeBonus
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultDoubleValue(0.0)
      public double MaxRangeBonus;
      /**
       * Bonus to Max Targeting Range
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultDoubleValue(0.0)
      public double MaxTargetRangeBonus;
      /**
       * Prefered target signature. The base signature radius at which the turret's tracking speed is rated. 
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(1000)
      public int OptimalSigRadius;
      /**
       * Attribute ID of the resistance type v's this Ewar module.
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultIntValue(0)
      public int RemoteResistanceID;
      /**
       * +/- modifier to the gravimetric strength of an electronic system.
       */
      @HighIsGood(true)
      @Stackable(false)
      @DefaultDoubleValue(0.0)
      public double ScanGravimetricStrengthBonus;
      /**
       * +/- modifier to the ladar strength of an electronic system.
       */
      @HighIsGood(true)
      @Stackable(false)
      @DefaultDoubleValue(0.0)
      public double ScanLadarStrengthBonus;
      /**
       * +/- modifier to the magnetometric strength of an electronic system.
       */
      @HighIsGood(true)
      @Stackable(false)
      @DefaultDoubleValue(0.0)
      public double ScanMagnetometricStrengthBonus;
      /**
       * +/- modifier to the radar strength of an electronic system.
       */
      @HighIsGood(true)
      @Stackable(false)
      @DefaultDoubleValue(0.0)
      public double ScanRadarStrengthBonus;
      /**
       * Bonus for scan resolution
       */
      @HighIsGood(true)
      @Stackable(false)
      @DefaultDoubleValue(0.0)
      public double ScanResolutionBonus;
      /**
       * scanning speed in milliseconds
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultIntValue(0)
      public int ScanSpeed;
      /**
       * Multiplies EM damage taken by shield
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(1.0)
      public double ShieldEmDamageResonance;
      /**
       * Multiplies EXPLOSIVE damage taken by Armor. 
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(1.0)
      public double ShieldExplosiveDamageResonance;
      /**
       * Multiplies KINETIC damage taken by Armor. 
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(1.0)
      public double ShieldKineticDamageResonance;
      /**
       * Multiplies THERMAL damage taken by Shield. 
       */
      @HighIsGood(false)
      @Stackable(false)
      @DefaultDoubleValue(1.0)
      public double ShieldThermalDamageResonance;
      /**
       * Autogenerated skill attribute, signatureRadiusBonus
       */
      @HighIsGood(false)
      @Stackable(true)
      @DefaultDoubleValue(0.0)
      public double SignatureRadiusBonus;
      /**
       * Tracking Speed Bonus
       */
      @HighIsGood(true)
      @Stackable(true)
      @DefaultDoubleValue(0.0)
      public double TrackingSpeedBonus;
      public static final ElectronicWarfareDrone.MetaGroup METAGROUP = new ElectronicWarfareDrone.MetaGroup();
  
      @Override
      public Number attribute(Attribute attribute) {
          switch (attribute.getId()) {
              case  929 :
              {
                  return ECMDuration;
              }
              case  930 :
              {
                  return ECMEntityChance;
              }
              case  936 :
              {
                  return ECMRangeOptimal;
              }
              case  70 :
              {
                  return Agility;
              }
              case  267 :
              {
                  return ArmorEmDamageResonance;
              }
              case  268 :
              {
                  return ArmorExplosiveDamageResonance;
              }
              case  269 :
              {
                  return ArmorKineticDamageResonance;
              }
              case  270 :
              {
                  return ArmorThermalDamageResonance;
              }
              case  6 :
              {
                  return CapacitorNeed;
              }
              case  73 :
              {
                  return Duration;
              }
              case  2822 :
              {
                  return EcmJamDuration;
              }
              case  247 :
              {
                  return EntityAttackRange;
              }
              case  580 :
              {
                  return EntityChaseMaxDelay;
              }
              case  581 :
              {
                  return EntityChaseMaxDelayChance;
              }
              case  665 :
              {
                  return EntityChaseMaxDistance;
              }
              case  582 :
              {
                  return EntityChaseMaxDuration;
              }
              case  583 :
              {
                  return EntityChaseMaxDurationChance;
              }
              case  508 :
              {
                  return EntityCruiseSpeed;
              }
              case  416 :
              {
                  return EntityFlyRange;
              }
              case  831 :
              {
                  return EwTargetJam;
              }
              case  349 :
              {
                  return FalloffBonus;
              }
              case  193 :
              {
                  return MaxAttackTargets;
              }
              case  54 :
              {
                  return MaxRange;
              }
              case  351 :
              {
                  return MaxRangeBonus;
              }
              case  309 :
              {
                  return MaxTargetRangeBonus;
              }
              case  620 :
              {
                  return OptimalSigRadius;
              }
              case  2138 :
              {
                  return RemoteResistanceID;
              }
              case  238 :
              {
                  return ScanGravimetricStrengthBonus;
              }
              case  239 :
              {
                  return ScanLadarStrengthBonus;
              }
              case  240 :
              {
                  return ScanMagnetometricStrengthBonus;
              }
              case  241 :
              {
                  return ScanRadarStrengthBonus;
              }
              case  566 :
              {
                  return ScanResolutionBonus;
              }
              case  79 :
              {
                  return ScanSpeed;
              }
              case  271 :
              {
                  return ShieldEmDamageResonance;
              }
              case  272 :
              {
                  return ShieldExplosiveDamageResonance;
              }
              case  273 :
              {
                  return ShieldKineticDamageResonance;
              }
              case  274 :
              {
                  return ShieldThermalDamageResonance;
              }
              case  554 :
              {
                  return SignatureRadiusBonus;
              }
              case  767 :
              {
                  return TrackingSpeedBonus;
              }
              default:
              {
                  return super.attribute((attribute));
              }
          }
      }
  
      @Override
      public IMetaGroup<ElectronicWarfareDrone> getGroup() {
          return METAGROUP;
      }
  
      public static class MetaGroup
          implements IMetaGroup<ElectronicWarfareDrone>
      {
          public static final String RESOURCE_PATH = "SDE/types/drone/ElectronicWarfareDrone.yaml";
          private Map<String, ElectronicWarfareDrone> cache = (null);
  
          @Override
          public IMetaCategory<? super ElectronicWarfareDrone> category() {
              return Drone.METACAT;
          }
  
          @Override
          public int getGroupId() {
              return  639;
          }
  
          @Override
          public String getName() {
              return "ElectronicWarfareDrone";
          }
  
          @Override
          public synchronized Map<String, ElectronicWarfareDrone> load() {
              if (cache == null) {
                  try(final InputStreamReader reader = new InputStreamReader(ElectronicWarfareDrone.MetaGroup.class.getClassLoader().getResourceAsStream((RESOURCE_PATH)))) {
  