public class ImmutableSpongeScreamingData
    extends AbstractImmutableBooleanData<ImmutableScreamingData, ScreamingData>
    implements ImmutableScreamingData {

  private final ImmutableValue<Boolean> screamingValue =
      ImmutableSpongeValue.cachedOf(Keys.IS_SCREAMING, false, this.value);

  public ImmutableSpongeScreamingData(boolean value) {
    super(ImmutableScreamingData.class, value, Keys.IS_SCREAMING, SpongeScreamingData.class);
  }

  @Override
  public ImmutableValue<Boolean> screaming() {
    return this.screamingValue;
  }

  @Override
  protected ImmutableValue<?> getValueGetter() {
    return screaming();
  }
}
 @Override
 protected ImmutableValue<Boolean> constructImmutableValue(Boolean value) {
   return ImmutableSpongeValue.cachedOf(Keys.AI_ENABLED, true, value);
 }
 @Override
 protected ImmutableValue<Boolean> constructImmutableValue(Boolean value) {
   return ImmutableSpongeValue.cachedOf(Keys.IS_VILLAGER_ZOMBIE, false, value);
 }
 @Override
 protected ImmutableValue<T> constructImmutableValue(T value) {
   return ImmutableSpongeValue.cachedOf(this.key, getDefaultValue(), value);
 }
 @Override
 protected ImmutableValue<Boolean> constructImmutableValue(Boolean value) {
   return ImmutableSpongeValue.cachedOf(Keys.CAN_FLY, false, value);
 }