@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);
 }