@Override
 public DataTransactionResult removeFrom(ValueContainer<?> container) {
   if (container instanceof TileEntityLockable) {
     set((TileEntityLockable) container, "");
     return DataTransactionBuilder.successNoData();
   }
   return DataTransactionBuilder.failNoData();
 }
 @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();
 }
 @SuppressWarnings("unchecked")
 @Override
 public DataTransactionResult offerToStore(ValueContainer<?> container, E value) {
   final ImmutableValue<E> newValue = constructImmutableValue(value);
   if (supports(container)) {
     final DataTransactionBuilder builder = DataTransactionBuilder.builder();
     final Optional<E> oldVal = getVal((C) container);
     try {
       if (set((C) container, value)) {
         if (oldVal.isPresent()) {
           builder.replace(constructImmutableValue(oldVal.get()));
         }
         return builder.result(DataTransactionResult.Type.SUCCESS).success(newValue).build();
       }
       return builder.result(DataTransactionResult.Type.FAILURE).reject(newValue).build();
     } catch (Exception e) {
       Sponge.getLogger().debug("An exception occurred when setting data: ", e);
       return builder.result(DataTransactionResult.Type.ERROR).reject(newValue).build();
     }
   }
   return DataTransactionBuilder.failResult(newValue);
 }
 @Override
 public DataTransactionResult removeFrom(ValueContainer<?> container) {
   return DataTransactionBuilder.failNoData();
 }
 @Override
 public DataTransactionResult remove(DataHolder dataHolder) {
   return DataTransactionBuilder.failNoData();
 }