@Override
 public DataTransactionResult set(
     DataHolder dataHolder, EyeLocationData manipulator, MergeFunction function) {
   if (!supports(dataHolder)) {
     return DataTransactionBuilder.failResult(manipulator.getValues());
   }
   final ImmutableValue<Double> newValue = manipulator.eyeHeight().asImmutable();
   final EyeLocationData oldManipulator = from(dataHolder).get();
   final ImmutableValue<Double> oldValue = oldManipulator.eyeHeight().asImmutable();
   final EyeLocationData newData = function.merge(oldManipulator, manipulator);
   ((IMixinEntity) dataHolder).setEyeHeight(newData.eyeHeight().get());
   return DataTransactionBuilder.successReplaceResult(newValue, oldValue);
 }
 @Override
 public DataTransactionResult offerToStore(ValueContainer<?> container, Double value) {
   if (supports(container)) {
     final EntityPlayer player = (EntityPlayer) container;
     if (player.getFoodStats() != null) {
       final Double oldValue = (double) player.getFoodStats().getSaturationLevel();
       player.getFoodStats().foodSaturationLevel = value.floatValue();
       return DataTransactionBuilder.successReplaceResult(
           new ImmutableSpongeValue<Double>(Keys.SATURATION, value),
           new ImmutableSpongeValue<Double>(Keys.SATURATION, oldValue));
     }
   }
   return DataTransactionBuilder.failResult(
       new ImmutableSpongeValue<Double>(Keys.SATURATION, value));
 }
 @Override
 public DataTransactionResult removeFrom(ValueContainer<?> container) {
   if (this.supports(container)) {
     final ItemStack skull = (ItemStack) container;
     final Optional<GameProfile> oldData = getVal(skull);
     if (SkullUtils.setProfile(skull, null)) {
       if (oldData.isPresent()) {
         return DataTransactionBuilder.successReplaceResult(
             Collections.emptySet(),
             Collections.singleton(constructImmutableValue(oldData.get())));
       } else {
         return DataTransactionBuilder.successNoData();
       }
     }
   }
   return DataTransactionBuilder.failNoData();
 }